From d36b0e59a407b6b836adf6bf6dd80c3f5960f203 Mon Sep 17 00:00:00 2001 From: Bryan Forbes Date: Mon, 16 Feb 2026 17:59:30 -0600 Subject: [PATCH] fix(luajit): support building on aarch64 hosts LuaJIT requires its host tools (minilua, buildvm) to match the target's bitness. On x86_64 hosts this is solved with gcc -m32, but aarch64 has no equivalent flag. Use Buildroot's own cross-compiler (TARGET_CC) to build the host tools as static arm32 binaries, which run natively on aarch64 via the kernel's 32-bit compat mode (CONFIG_COMPAT). Also use TARGET_CFLAGS/TARGET_LDFLAGS for the host tools on aarch64, since HOST_CFLAGS/HOST_LDFLAGS contain aarch64-specific include/library paths that are wrong for arm32. Skip selecting BR2_HOSTARCH_NEEDS_IA32_COMPILER on aarch64 since the IA32 multilib check is not applicable. --- .../batocera/libraries/batocera-luajit/Config.in | 2 +- .../libraries/batocera-luajit/batocera-luajit.mk | 15 +++++++++++++-- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/package/batocera/libraries/batocera-luajit/Config.in b/package/batocera/libraries/batocera-luajit/Config.in index 13f2e24a34d..7e09010d306 100644 --- a/package/batocera/libraries/batocera-luajit/Config.in +++ b/package/batocera/libraries/batocera-luajit/Config.in @@ -20,7 +20,7 @@ config BR2_PACKAGE_BATOCERA_LUAJIT # luajit.mk uses the "-m32" compiler option to build 32bit # binaries, so check if that option is supported. See # luajit.mk for details. - select BR2_HOSTARCH_NEEDS_IA32_COMPILER if !BR2_ARCH_IS_64 + select BR2_HOSTARCH_NEEDS_IA32_COMPILER if !BR2_ARCH_IS_64 && BR2_HOSTARCH != "aarch64" help LuaJIT implements the full set of language features defined by Lua 5.1. The virtual machine (VM) is API- and diff --git a/package/batocera/libraries/batocera-luajit/batocera-luajit.mk b/package/batocera/libraries/batocera-luajit/batocera-luajit.mk index cd189ac9d41..f19ac5e16fb 100644 --- a/package/batocera/libraries/batocera-luajit/batocera-luajit.mk +++ b/package/batocera/libraries/batocera-luajit/batocera-luajit.mk @@ -28,7 +28,18 @@ ifeq ($(BR2_ARCH_IS_64),y) BATOCERA_LUAJIT_HOST_CC = $(HOSTCC) # There is no LUAJIT_ENABLE_GC64 option. else +# On aarch64 hosts, there is no -m32 equivalent. Instead, use Buildroot's own +# cross-compiler to build the host tools (minilua, buildvm) as static arm32 +# binaries, which run natively via the kernel's 32-bit compat mode (CONFIG_COMPAT). +ifeq ($(HOSTARCH),aarch64) +BATOCERA_LUAJIT_HOST_CC = $(TARGET_CC) -static +BATOCERA_LUAJIT_HOST_CFLAGS = $(TARGET_CFLAGS) +BATOCERA_LUAJIT_HOST_LDFLAGS = $(TARGET_LDFLAGS) +else BATOCERA_LUAJIT_HOST_CC = $(HOSTCC) -m32 +BATOCERA_LUAJIT_HOST_CFLAGS = $(HOST_CFLAGS) +BATOCERA_LUAJIT_HOST_LDFLAGS = $(HOST_LDFLAGS) +endif BATOCERA_LUAJIT_XCFLAGS += -DLUAJIT_DISABLE_GC64 endif @@ -44,8 +55,8 @@ define BATOCERA_LUAJIT_BUILD_CMDS TARGET_CFLAGS="$(TARGET_CFLAGS)" \ TARGET_LDFLAGS="$(TARGET_LDFLAGS)" \ HOST_CC="$(BATOCERA_LUAJIT_HOST_CC)" \ - HOST_CFLAGS="$(HOST_CFLAGS)" \ - HOST_LDFLAGS="$(HOST_LDFLAGS)" \ + HOST_CFLAGS="$(BATOCERA_LUAJIT_HOST_CFLAGS)" \ + HOST_LDFLAGS="$(BATOCERA_LUAJIT_HOST_LDFLAGS)" \ BUILDMODE=dynamic \ XCFLAGS="$(BATOCERA_LUAJIT_XCFLAGS)" \ -C $(@D) amalg