diff --git a/buildSrc/src/main/groovy/tool/generator/GenerateLibs.groovy b/buildSrc/src/main/groovy/tool/generator/GenerateLibs.groovy index d6dd666c..d7df6b0f 100644 --- a/buildSrc/src/main/groovy/tool/generator/GenerateLibs.groovy +++ b/buildSrc/src/main/groovy/tool/generator/GenerateLibs.groovy @@ -32,6 +32,7 @@ class GenerateLibs extends DefaultTask { private final String[] buildEnvs = System.getProperty('envs')?.split(',') private final boolean forWindows = buildEnvs?.contains('windows') private final boolean forLinux = buildEnvs?.contains('linux') + private final boolean forLinuxArm64 = buildEnvs?.contains('linuxarm64') private final boolean forMac = buildEnvs?.contains('macos') private final boolean forMacArm64 = buildEnvs?.contains('macosarm64') @@ -120,10 +121,11 @@ class GenerateLibs extends DefaultTask { } if (forLinux) { - def linux64 = BuildTarget.newDefaultTarget(Os.Linux, Architecture.Bitness._64) - requireCpp17(linux64) - addFreeTypeIfEnabled(linux64) - buildTargets += linux64 + buildTargets += createLinuxTarget(Architecture.x86) + } + + if (forLinuxArm64) { + buildTargets += createLinuxTarget(Architecture.ARM) } if (forMac) { @@ -145,6 +147,8 @@ class GenerateLibs extends DefaultTask { BuildExecutor.executeAnt(jniDir + '/build-windows64.xml', commonParams) if (forLinux) BuildExecutor.executeAnt(jniDir + '/build-linux64.xml', commonParams) + if (forLinuxArm64) + BuildExecutor.executeAnt(jniDir + '/build-linuxarm64.xml', commonParams) if (forMac) BuildExecutor.executeAnt(jniDir + '/build-macosx64.xml', commonParams) if (forMacArm64) @@ -156,6 +160,8 @@ class GenerateLibs extends DefaultTask { checkLibExist("windows64/imgui-java64.dll") if (forLinux) checkLibExist("linux64/libimgui-java64.so") + if (forLinuxArm64) + checkLibExist("linuxarm64/libimgui-java64.so") if (forMac) checkLibExist("macosx64/libimgui-java64.dylib") if (forMacArm64) @@ -170,6 +176,21 @@ class GenerateLibs extends DefaultTask { } } + BuildTarget createLinuxTarget(Architecture arch) { + def linuxTarget = BuildTarget.newDefaultTarget(Os.Linux, Architecture.Bitness._64, arch) + linuxTarget.libName = "libimgui-java64.so" // Lib for arm64 will be named the same for consistency. + if (arch == Architecture.ARM && System.getProperty('os.arch') in ['aarch64', 'arm64']) { + // gdx-jnigen defaults ARM Linux targets to the aarch64-linux-gnu- cross-compiler + // prefix. When already running natively on an aarch64 host (e.g. GitHub's + // ubuntu-24.04-arm runners) that prefix isn't needed, and the cross toolchain + // package providing it usually isn't installed there anyway. + linuxTarget.compilerPrefix = '' + } + requireCpp17(linuxTarget) + addFreeTypeIfEnabled(linuxTarget) + return linuxTarget + } + BuildTarget createMacTarget(Architecture arch) { def minMacOsVersion = '10.15' def macTarget = BuildTarget.newDefaultTarget(Os.MacOsX, Architecture.Bitness._64, arch)