Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[DRAFT] Linux binaries for arm64 #324

Draft
wants to merge 1 commit into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 7 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -376,6 +376,12 @@ Ensure you've downloaded git submodules. That could be achieved:
- Install dependencies: `openjdk8`, `mingw-w64-gcc`, `ant`. (Package names could vary from system to system.)
- Build with: `./gradlew imgui-binding:generateLibs -Denvs=linux -Dlocal`
- Run with: `./gradlew example:run -PlibPath=../imgui-binding/build/libsNative/linux64`

### Linux (arm64)

- Check dependencies from "Linux" section and make sure you have them installed.
- Build with: `./gradlew imgui-binding:generateLibs -Denvs=linuxarm64 -Dlocal`
- Run with: `./gradlew example:run -PlibPath=../imgui-binding/build/libsNative/linuxarm64`

### macOS

Expand All @@ -389,7 +395,7 @@ Ensure you've downloaded git submodules. That could be achieved:
- Build with: `./gradlew imgui-binding:generateLibs -Denvs=macosarm64 -Dlocal`
- Run with: `./gradlew example:run -PlibPath=../imgui-binding/build/libsNative/macosxarm64`

In `envs` parameter next values could be used `windows`, `linux` or `macos` or `macosarm64`.
In `envs` parameter next values could be used `windows`, `linux`, `linuxarm64`, `macos` or `macosarm64`.

`-Dlocal` is optional and means that natives will be built under the `./imgui-binding/build/` folder. Otherwise `/tmp/imgui` folder will be used.

Expand Down
21 changes: 18 additions & 3 deletions buildSrc/src/main/groovy/tool/generator/GenerateLibs.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -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')

Expand Down Expand Up @@ -113,9 +114,11 @@ class GenerateLibs extends DefaultTask {
}

if (forLinux) {
def linux64 = BuildTarget.newDefaultTarget(Os.Linux, Architecture.Bitness._64)
addFreeTypeIfEnabled(linux64)
buildTargets += linux64
buildTargets += createLinuxTarget(Architecture.x86)
}

if (forLinuxArm64) {
buildTargets += createLinuxTarget(Architecture.ARM)
}

if (forMac) {
Expand All @@ -137,6 +140,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)
Expand All @@ -148,6 +153,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)
Expand All @@ -162,6 +169,14 @@ class GenerateLibs extends DefaultTask {
}
}

BuildTarget createLinuxTarget(Architecture arch) {
def linuxTarget = BuildTarget.newDefaultTarget(Os.Linux, Architecture.Bitness._64, arch)
linuxTarget.compilerPrefix = "" // TODO: test with GNU gcc
linuxTarget.libName = "libimgui-java64.so" // Lib for arm64 will be named the same for consistency
addFreeTypeIfEnabled(linuxTarget)
return linuxTarget
}

BuildTarget createMacTarget(Architecture arch) {
def minMacOsVersion = '10.15'
def macTarget = BuildTarget.newDefaultTarget(Os.MacOsX, Architecture.Bitness._64, arch)
Expand Down
2 changes: 1 addition & 1 deletion imgui-app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ dependencies {
api 'org.lwjgl:lwjgl-glfw'
api 'org.lwjgl:lwjgl-opengl'

['natives-linux', 'natives-windows', 'natives-macos', 'natives-macos-arm64'].each {
['natives-linux', 'natives-linux-arm64', 'natives-windows', 'natives-macos', 'natives-macos-arm64'].each {
api "org.lwjgl:lwjgl::$it"
api "org.lwjgl:lwjgl-glfw::$it"
api "org.lwjgl:lwjgl-opengl::$it"
Expand Down