Files
Khem Raj af8b6d6b2f sysdig: Use LuaJIT headers to match the linked LuaJIT library
csysdig fails to link when stock Lua is also present in the sysroot:

  ld.lld: error: undefined symbol: luaL_openselectedlibs
  >>> referenced by chisel.cpp:1190
  ld.lld: error: undefined symbol: lua_pcallk
  ld.lld: error: undefined symbol: lua_setglobal

sysdig's chisel code does #include "lua.h" and links against LuaJIT
(lua${JIT}), but the recipe-sysroot also carries stock Lua headers
(openembedded-core lua installs lua.h into ${includedir}). Those headers
win the include search over ${includedir}/luajit-2.1, so the chisel
objects are compiled against stock Lua while the binary links
libluajit-5.1.so. In Lua >= 5.4.4 luaL_openlibs is a macro for
luaL_openselectedlibs and lua_setglobal/lua_pcallk are real symbols,
none of which LuaJIT (a Lua 5.1 ABI) provides, hence the undefined
references. -DLUA_INCLUDE_DIR does not help: sysdig's luajit.cmake only
consults it in its stock-Lua fallback, not when it finds LuaJIT.

Prepend ${STAGING_INCDIR}/luajit-2.1 to CFLAGS/CXXFLAGS. These land in
CMAKE_CXX_FLAGS, which precede CMake's generated -I includes, so LuaJIT's
lua.h is found first and matches the linked library.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Signed-off-by: Khem Raj <khem.raj@oss.qualcomm.com>
(cherry picked from commit 00e7a91180)
Signed-off-by: Anuj Mittal <anuj.mittal@oss.qualcomm.com>
2026-07-24 06:15:59 +05:30

105 lines
4.3 KiB
BlitzBasic

SUMMARY = "A New System Troubleshooting Tool Built for the Way You Work"
DESCRIPTION = "Sysdig is open source, system-level exploration: capture \
system state and activity from a running Linux instance, then save, \
filter and analyze."
HOMEPAGE = "http://www.sysdig.org/"
LICENSE = "Apache-2.0 & (MIT | GPL-2.0-only)"
LIC_FILES_CHKSUM = "file://COPYING;md5=f8fee3d59797546cffab04f3b88b2d44"
inherit cmake pkgconfig
#OECMAKE_GENERATOR = "Unix Makefiles"
JIT ?= "jit"
JIT:mipsarchn32 = ""
JIT:mipsarchn64 = ""
JIT:riscv64 = ""
JIT:riscv32 = ""
JIT:powerpc = ""
JIT:powerpc64le = ""
JIT:powerpc64 = ""
DEPENDS += "libb64 lua${JIT} zlib c-ares grpc-native grpc curl ncurses jsoncpp \
tbb jq openssl elfutils protobuf protobuf-native jq-native valijson \
uthash libbpf clang-native bpftool-native yaml-cpp nlohmann-json"
RDEPENDS:${PN} = "bash"
SRC_URI = "git://github.com/draios/sysdig.git;branch=dev;protocol=https;name=sysdig \
git://github.com/falcosecurity/libs;protocol=https;branch=release/0.18.x;name=falco;subdir=${BB_GIT_DEFAULT_DESTSUFFIX}/falcosecurity-libs \
git://github.com/falcosecurity/libs;protocol=https;branch=release/0.18.x;name=driver;subdir=${BB_GIT_DEFAULT_DESTSUFFIX}/driver \
file://0001-cmake-Pass-PROBE_NAME-via-CFLAGS.patch \
file://0001-Avoid-duplicate-operations-of-add_library.patch;patchdir=./falcosecurity-libs \
"
SRCREV_sysdig = "6ef29110cf1add746e10ab5b38957e22730b7349"
SRCREV_falco = "e1999d079880d10800c57e004fca794a03cd060a"
SRCREV_driver = "d4efc80ece48174a71c1a420cb52d233fa94f946"
SRCREV_FORMAT = "sysdig_falco"
#Add this function to generate driver_config.h
do_configure:prepend() {
mkdir -p ${WORKDIR}/driver_Make
cd ${WORKDIR}/driver_Make
cmake ${S}/driver -DMINIMAL_BUILD=ON -DCREATE_TEST_TARGETS=OFF
cd -
}
do_configure[cleandirs] = "${WORKDIR}/driver_Make"
EXTRA_OECMAKE = "\
-DCMAKE_POLICY_VERSION_MINIMUM=3.5 \
-DBUILD_DRIVER=OFF \
-DMINIMAL_BUILD=ON \
-DUSE_BUNDLED_DEPS=OFF \
-DCREATE_TEST_TARGETS=OFF \
-DDIR_ETC=${sysconfdir} \
-DLUA_INCLUDE_DIR=${STAGING_INCDIR}/luajit-2.1 \
-DFALCOSECURITY_LIBS_SOURCE_DIR=${S}/falcosecurity-libs \
-DDRIVER_SOURCE_DIR=${S}/driver \
-DVALIJSON_INCLUDE=${STAGING_INCDIR}/valijson \
-DUSE_BUNDLED_RE2=OFF \
-DUSE_BUNDLED_TBB=OFF \
-DUSE_BUNDLED_JSONCPP=OFF \
-DBUILD_SYSDIG_MODERN_BPF=OFF \
-DCREATE_TEST_TARGETS=OFF \
"
# sysdig's chisel code does #include "lua.h". The recipe-sysroot also carries
# stock Lua headers (openembedded-core lua installs lua.h into ${includedir}),
# which are ABI-incompatible with the LuaJIT library sysdig links against: in
# Lua >= 5.4.4 luaL_openlibs is a macro for luaL_openselectedlibs and
# lua_setglobal/lua_pcallk are real symbols, none of which LuaJIT provides.
# sysdig's luajit.cmake only honours LUA_INCLUDE_DIR in its stock-Lua fallback,
# not when it finds LuaJIT, and the LuaJIT include dir does not win the search
# order, so lua.h resolves to the stock header and the link fails. Put the
# LuaJIT include dir first so its lua.h is used and matches the linked library.
#Add include dir to find driver_config.h
CXXFLAGS:append = " -I${STAGING_INCDIR}/luajit-2.1 -I${WORKDIR}/driver_Make/driver/src"
CFLAGS:append = " -I${STAGING_INCDIR}/luajit-2.1 -I${WORKDIR}/driver_Make/driver/src"
#To fix do_package QA Issue
do_compile:append() {
sed -i -e "s,${WORKDIR},,g" ${B}/libsinsp/libsinsp.pc
sed -i -e "s,${WORKDIR},,g" ${B}/driver/libscap/libscap.pc
mkdir -p ${B}/driver/libsinsp
cp ${B}/libsinsp/libsinsp.pc ${B}/driver/libsinsp/
}
do_compile[cleandirs] = "${B}/driver/libsinsp"
#CMAKE_VERBOSE = "VERBOSE=1"
FILES:${PN} += " \
${DIR_ETC}/* \
${datadir}/zsh/* \
${prefix}/src/* \
"
# Use getaddrinfo_a is a GNU extension in libsinsp
# It should be fixed in sysdig, until then disable
# on musl
# Something like this https://code.videolan.org/ePirat/vlc/-/commit/01fd9fe4c7f6c5558f7345f38abf0152e17853ab is needed to fix it
COMPATIBLE_HOST:libc-musl = "null"
COMPATIBLE_HOST:mips = "null"
COMPATIBLE_HOST:riscv64 = "null"
COMPATIBLE_HOST:riscv32 = "null"
COMPATIBLE_HOST:powerpc = "null"
COMPATIBLE_HOST:powerpc64le = "null"