diff --git a/.github/workflows/ci-build.yml b/.github/workflows/ci-build.yml
index d7cf414..d195a27 100644
--- a/.github/workflows/ci-build.yml
+++ b/.github/workflows/ci-build.yml
@@ -22,34 +22,24 @@ jobs:
strategy:
matrix:
os: [ubuntu-latest, macos-latest]
- type: [win32, win64, linux32, linux64, mac64]
+ type: [win, linux, mac]
include:
- os: ubuntu-latest
- type: win32
- expected: imgui-binding/build/libsNative/windows32/imgui-java.dll
+ type: win
+ expected: /tmp/imgui/libsNative/windows64/imgui-java64.dll
- os: ubuntu-latest
- type: win64
- expected: imgui-binding/build/libsNative/windows64/imgui-java64.dll
- - os: ubuntu-latest
- type: linux32
- expected: imgui-binding/build/libsNative/linux32/libimgui-java.so
- - os: ubuntu-latest
- type: linux64
- expected: imgui-binding/build/libsNative/linux64/libimgui-java64.so
+ type: linux
+ expected: /tmp/imgui/libsNative/linux64/libimgui-java64.so
- os: macos-latest
- type: mac64
- expected: imgui-binding/build/libsNative/macosx64/libimgui-java64.dylib
+ type: mac
+ expected: /tmp/imgui/libsNative/macosx64/libimgui-java64.dylib
exclude:
- os: ubuntu-latest
- type: mac64
+ type: mac
- os: macos-latest
- type: win32
+ type: win
- os: macos-latest
- type: win64
- - os: macos-latest
- type: linux32
- - os: macos-latest
- type: linux64
+ type: linux
name: Build Natives [${{ matrix.os }}]-[${{ matrix.type }}]
runs-on: ${{ matrix.os }}
steps:
@@ -69,9 +59,8 @@ jobs:
- name: Build [${{ matrix.type }}]
uses: eskatos/gradle-command-action@v1
with:
- arguments: :imgui-binding:generateLibs -Denvs=${{ matrix.type }} -Dlocal
+ arguments: :imgui-binding:generateLibs -Denvs=${{ matrix.type }}
- name: Check [${{ matrix.expected }}]
uses: andstor/file-existence-action@v1
with:
files: ${{ matrix.expected }}
-
diff --git a/README.md b/README.md
index a244f86..0359ddd 100644
--- a/README.md
+++ b/README.md
@@ -137,13 +137,11 @@ You can refer to [imgui-app](https://github.com/SpaiR/imgui-java/blob/v1.82.2/im
For simplicity, example of dependencies for Gradle/Maven only shows how to add natives for Windows.
Feel free to add other platforms.
-| Native Binaries | System |
-| ------------------------------ | ------------- |
-| imgui-java-natives-windows-x86 | Windows 32bit |
-| imgui-java-natives-windows | Windows 64bit |
-| imgui-java-natives-linux-x86 | Linux 32bit |
-| imgui-java-natives-linux | Linux 64bit |
-| imgui-java-natives-macos | MacOS |
+| Native Binaries | System |
+| ------------------------------ | ------- |
+| imgui-java-natives-windows | Windows |
+| imgui-java-natives-linux | Linux |
+| imgui-java-natives-macos | MacOS |
Take a note, that you also need to add dependencies to [LWJGL](https://www.lwjgl.org/). Examples below shows how to do it as well.
@@ -250,10 +248,8 @@ dependencies {
1. Go to the [release page](https://github.com/SpaiR/imgui-java/releases/latest);
2. Download `imgui-binding-${version}.jar`, `imgui-lwjgl3-${version}.jar` and binary libraries for your OS;
- - imgui-java.dll - Windows 32bit
- - imgui-java64.dll - Windows 64bit
- - libimgui-java.so - Linux 32bit
- - libimgui-java64.so - Linux 64bit
+ - imgui-java64.dll - Windows
+ - libimgui-java64.so - Linux
- libimgui-java64.dylib - MacOS
3. Add jars to your classpath;
4. Provide a VM option: `imgui.library.path` or `java.library.path`. It should point to the folder where you've placed downloaded native libraries.
@@ -285,13 +281,11 @@ Don't forget to make clear for your Linux/Mac users, that they will need to inst
- Maven/Gradle:
Use the same native libraries as you would, but with `-ft` suffix in the end.
- | Native Binaries With FreeType | System |
- | --------------------------------- | ------------- |
- | imgui-java-natives-windows-x86-ft | Windows 32bit |
- | imgui-java-natives-windows-ft | Windows 64bit |
- | imgui-java-natives-linux-x86-ft | Linux 32bit |
- | imgui-java-natives-linux-ft | Linux 64bit |
- | imgui-java-natives-macos-ft | MacOS |
+ | Native Binaries With FreeType | System |
+ | --------------------------------- | ------- |
+ | imgui-java-natives-windows-ft | Windows |
+ | imgui-java-natives-linux-ft | Linux |
+ | imgui-java-natives-macos-ft | MacOS |
Modified Gradle Example
@@ -339,20 +333,20 @@ Read [javadoc](https://javadoc.io/doc/io.github.spair/imgui-java-binding) and so
* Java 8 or higher
* Ant
* Mingw-w64 (recommended way: use [MSYS2](https://www.msys2.org/) and install [mingw-w64-x86_64-toolchain](https://packages.msys2.org/group/mingw-w64-x86_64-toolchain) group)
- - Build with: `./gradlew :imgui-binding:generateLibs -Denvs=win64 -Dlocal`
+ - Build with: `./gradlew :imgui-binding:generateLibs -Denvs=win -Dlocal`
- Run with: `./gradlew :example:run -PlibPath="../imgui-binding/build/libsNative/windows64"`
### Linux
- Install dependencies: `openjdk8`, `mingw-w64-gcc`, `ant`. (Package names could vary from system to system.)
- - Build with: `./gradlew :imgui-binding:generateLibs -Denvs=linux64 -Dlocal`
+ - Build with: `./gradlew :imgui-binding:generateLibs -Denvs=linux -Dlocal`
- Run with: `./gradlew :example:run -PlibPath=../imgui-binding/build/libsNative/linux64`
### MacOS
- Check dependencies from "Linux" section and make sure you have them installed.
- - Build with: `./gradlew :imgui-binding:generateLibs -Denvs=mac64 -Dlocal`
+ - Build with: `./gradlew :imgui-binding:generateLibs -Denvs=mac -Dlocal`
- Run with: `./gradlew :example:run -PlibPath=../imgui-binding/build/libsNative/macosx64`
-In `envs` parameter next values could be used `win32`, `win64`, `linux32`, `linux64` or `mac64`.
+In `envs` parameter next values could be used `win`, `linux` or `mac`.
`-Dlocal` is optional and means that natives will be built under the `./imgui-binding/build/` folder. Otherwise `/tmp/imgui` folder will be used.
On Windows always use local build.
diff --git a/bin/README.txt b/bin/README.txt
index 7eff925..c58aab1 100644
--- a/bin/README.txt
+++ b/bin/README.txt
@@ -3,13 +3,11 @@ Folder contains libraries used by the binding.
Provide 'imgui.library.path' VM option to the folder with one of those file (ex: -Dimgui.library.path=./some/folder).
In the same way you can use 'java.library.path' option instead.
-By default binding expects 'imgui-java' ('imgui-java64' for x64 arch) file name.
+By default binding expects 'imgui-java64' file name.
You can change that by using 'imgui.library.name' VM option (ex: -Dimgui.library.name=custom-lib-name).
-- imgui-java.dll << Windows 32bit
-- imgui-java64.dll << Windows 64bit
-- libimgui-java.so << Linux 32bit
-- libimgui-java64.so << Linux 64bit
+- imgui-java64.dll << Windows
+- libimgui-java64.so << Linux
- libimgui-java64.dylib << MacOS
Freetype folder contains same libraries, but with Freetype support.
diff --git a/bin/freetype/imgui-java.dll b/bin/freetype/imgui-java.dll
deleted file mode 100644
index 97a07bc..0000000
Binary files a/bin/freetype/imgui-java.dll and /dev/null differ
diff --git a/bin/freetype/libimgui-java.so b/bin/freetype/libimgui-java.so
deleted file mode 100644
index 8f74aa8..0000000
Binary files a/bin/freetype/libimgui-java.so and /dev/null differ
diff --git a/bin/imgui-java.dll b/bin/imgui-java.dll
deleted file mode 100755
index c65f3ea..0000000
Binary files a/bin/imgui-java.dll and /dev/null differ
diff --git a/bin/libimgui-java.so b/bin/libimgui-java.so
deleted file mode 100755
index 590f0a9..0000000
Binary files a/bin/libimgui-java.so and /dev/null differ
diff --git a/buildSrc/src/main/groovy/imgui/generate/GenerateLibs.groovy b/buildSrc/src/main/groovy/imgui/generate/GenerateLibs.groovy
index cc688e0..a2e678c 100644
--- a/buildSrc/src/main/groovy/imgui/generate/GenerateLibs.groovy
+++ b/buildSrc/src/main/groovy/imgui/generate/GenerateLibs.groovy
@@ -15,11 +15,9 @@ class GenerateLibs extends DefaultTask {
String description = 'Generate imgui-java native binaries.'
private final String[] buildEnvs = System.getProperty('envs')?.split(',')
- private final boolean forWin32 = buildEnvs?.contains('win32')
- private final boolean forWin64 = buildEnvs?.contains('win64')
- private final boolean forLinux32 = buildEnvs?.contains('linux32')
- private final boolean forLinux64 = buildEnvs?.contains('linux64')
- private final boolean forMac64 = buildEnvs?.contains('mac64')
+ private final boolean forWindows = buildEnvs?.contains('win')
+ private final boolean forLinux = buildEnvs?.contains('linux')
+ private final boolean forMac = buildEnvs?.contains('mac')
private final boolean isLocal = System.properties.containsKey("local")
private final boolean withFreeType = System.properties.containsKey("freetype")
@@ -68,29 +66,19 @@ class GenerateLibs extends DefaultTask {
def buildConfig = new BuildConfig('imgui-java', tmpFolder, libsFolder, jniDir)
def buildTargets = [] as BuildTarget[]
- if (forWin32) {
- def win32 = BuildTarget.newDefaultTarget(BuildTarget.TargetOs.Windows, false)
- addFreeTypeIfEnabled(win32)
- buildTargets += win32
- }
- if (forWin64) {
+ if (forWindows) {
def win64 = BuildTarget.newDefaultTarget(BuildTarget.TargetOs.Windows, true)
addFreeTypeIfEnabled(win64)
buildTargets += win64
}
- if (forLinux32) {
- def linux32 = BuildTarget.newDefaultTarget(BuildTarget.TargetOs.Linux, false)
- addFreeTypeIfEnabled(linux32)
- buildTargets += linux32
- }
- if (forLinux64) {
+ if (forLinux) {
def linux64 = BuildTarget.newDefaultTarget(BuildTarget.TargetOs.Linux, true)
addFreeTypeIfEnabled(linux64)
buildTargets += linux64
}
- if (forMac64) {
+ if (forMac) {
def minMacOsVersion = '10.15'
def mac64 = BuildTarget.newDefaultTarget(BuildTarget.TargetOs.MacOsX, true)
mac64.cppFlags += ' -std=c++14'
@@ -107,15 +95,11 @@ class GenerateLibs extends DefaultTask {
def commonParams = ['-v', '-Dhas-compiler=true', '-Drelease=true', 'clean', 'postcompile'] as String[]
- if (forWin32)
- BuildExecutor.executeAnt(jniDir + '/build-windows32.xml', commonParams)
- if (forWin64)
+ if (forWindows)
BuildExecutor.executeAnt(jniDir + '/build-windows64.xml', commonParams)
- if (forLinux32)
- BuildExecutor.executeAnt(jniDir + '/build-linux32.xml', commonParams)
- if (forLinux64)
+ if (forLinux)
BuildExecutor.executeAnt(jniDir + '/build-linux64.xml', commonParams)
- if (forMac64)
+ if (forMac)
BuildExecutor.executeAnt(jniDir + '/build-macosx64.xml', commonParams)
BuildExecutor.executeAnt(jniDir + '/build.xml', '-v', 'pack-natives')
@@ -126,19 +110,19 @@ class GenerateLibs extends DefaultTask {
return
}
- if (target.os == BuildTarget.TargetOs.Windows) {
- if (!target.is64Bit) {
- target.cppFlags += ' -fstack-protector'
- }
- target.libraries += '-lbz2 -lssp'
+ switch (target.os) {
+ case BuildTarget.TargetOs.Windows:
+ target.cppFlags += ' -I/usr/x86_64-w64-mingw32/include/freetype2'
+ break
+ case BuildTarget.TargetOs.Linux:
+ target.cppFlags += ' -I/usr/include/freetype2'
+ break
+ case BuildTarget.TargetOs.MacOsX:
+ target.cppFlags += ' -I/usr/local/include/freetype2'
+ break
}
- target.cppFlags += ' -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/harfbuzz -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include'
target.libraries += ' -lfreetype'
-
- if (target.os == BuildTarget.TargetOs.MacOsX) {
- target.cppFlags.replace('-I/usr/include/', '-I/usr/local/include/')
- }
}
void enableDefine(String define) {
diff --git a/imgui-binding-natives/build.gradle b/imgui-binding-natives/build.gradle
index 4c90ee5..a9f02af 100644
--- a/imgui-binding-natives/build.gradle
+++ b/imgui-binding-natives/build.gradle
@@ -5,27 +5,19 @@ plugins {
}
def packageName = 'imgui-java-natives-linux'
-def packageDesc = 'Native binaries for imgui-java binding for 64bit Linux'
+def packageDesc = 'Native binaries for imgui-java binding for Linux'
def fromDir = '../bin'
def libName = 'libimgui-java64.so'
-if (System.getProperty('deployWin32')) {
- packageName = 'imgui-java-natives-windows-x86'
- packageDesc = 'Native binaries for imgui-java binding for 32bit Windows'
- libName = 'imgui-java.dll'
-} else if (System.getProperty('deployWin64')) {
+if (System.getProperty('deployWin')) {
packageName = 'imgui-java-natives-windows'
- packageDesc = 'Native binaries for imgui-java binding for 64bit Windows'
+ packageDesc = 'Native binaries for imgui-java binding for Windows'
libName = 'imgui-java64.dll'
-} else if (System.getProperty('deployLinux32')) {
- packageName = 'imgui-java-natives-linux-x86'
- packageDesc = 'Native binaries for imgui-java binding for 32bit Linux'
- libName = 'libimgui-java.so'
-} else if (System.getProperty('deployLinux64')) {
+} else if (System.getProperty('deployLinux')) {
packageName = 'imgui-java-natives-linux'
- packageDesc = 'Native binaries for imgui-java binding for 64bit Linux'
+ packageDesc = 'Native binaries for imgui-java binding for Linux'
libName = 'libimgui-java64.so'
-} else if (System.getProperty('deployMacOs64')) {
+} else if (System.getProperty('deployMac')) {
packageName = 'imgui-java-natives-macos'
packageDesc = 'Native binaries for imgui-java binding for MacOS'
libName = 'libimgui-java64.dylib'
diff --git a/imgui-binding/src/main/java/imgui/ImGui.java b/imgui-binding/src/main/java/imgui/ImGui.java
index 25abf8f..4f1e624 100644
--- a/imgui-binding/src/main/java/imgui/ImGui.java
+++ b/imgui-binding/src/main/java/imgui/ImGui.java
@@ -107,6 +107,7 @@ public class ImGui {
final Path libBin = tmpDir.resolve(fullLibName);
Files.copy(is, libBin, StandardCopyOption.REPLACE_EXISTING);
+ libBin.toFile().deleteOnExit();
return libBin.toFile().getAbsolutePath();
} catch (IOException e) {