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>
This commit is contained in:
Khem Raj
2026-07-05 11:24:20 -07:00
parent e8b8f3ddd9
commit 00e7a91180
@@ -62,9 +62,18 @@ EXTRA_OECMAKE = "\
-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${WORKDIR}/driver_Make/driver/src"
CFLAGS:append = " -I${WORKDIR}/driver_Make/driver/src"
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() {