diff --git a/bin/README.txt b/bin/README.txt index d747f85..5528fee 100644 --- a/bin/README.txt +++ b/bin/README.txt @@ -4,7 +4,8 @@ The same way you can use 'java.library.path' option as well. By default binding expects 'imgui-java' ('imgui-java64' for x64 arch) file name. You can change that by using 'imgui.library.name' VM option (ex: -Dimgui.library.name=custom-lib-name). -- imgui-java.dll << win32 -- imgui-java64.dll << win64 -- libimgui-java.so << linux32 -- libimgui-java64.so << linux64 +- imgui-java.dll << win32 +- imgui-java64.dll << win64 +- libimgui-java.so << linux32 +- libimgui-java64.so << linux64 +- libimgui-java64.dylib << MacOs64 diff --git a/bin/libimgui-java64.dylib b/bin/libimgui-java64.dylib new file mode 100644 index 0000000..d78b717 Binary files /dev/null and b/bin/libimgui-java64.dylib differ diff --git a/buildSrc/src/main/groovy/imgui/generate/GenerateLibs.groovy b/buildSrc/src/main/groovy/imgui/generate/GenerateLibs.groovy index e3609e7..c189e8c 100644 --- a/buildSrc/src/main/groovy/imgui/generate/GenerateLibs.groovy +++ b/buildSrc/src/main/groovy/imgui/generate/GenerateLibs.groovy @@ -38,6 +38,11 @@ class GenerateLibs extends DefaultTask { def linux32 = BuildTarget.newDefaultTarget(BuildTarget.TargetOs.Linux, false) def linux64 = BuildTarget.newDefaultTarget(BuildTarget.TargetOs.Linux, true) + def mac64 = BuildTarget.newDefaultTarget(BuildTarget.TargetOs.MacOsX, true) + mac64.cppFlags += " -stdlib=libc++" + mac64.cppFlags = mac64.cppFlags.replaceAll("10.5", "10.9") + mac64.linkerFlags = mac64.linkerFlags.replaceAll("10.5", "10.9") + // Freetype Deps Config win32.cppFlags += " -fstack-protector -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" win32.libraries += "-lfreetype -lbz2 -lssp" @@ -47,6 +52,8 @@ class GenerateLibs extends DefaultTask { linux32.linkerFlags += " -lfreetype" linux64.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" linux64.linkerFlags += " -lfreetype" + mac64.cppFlags += " -I/usr/local/include/freetype2 -I/usr/local/include/libpng16 -I/usr/local/include/harfbuzz -I/usr/local/include/glib-2.0 -I/usr/local/lib/glib-2.0/include" + mac64.linkerFlags += " -lfreetype" // End new AntScriptGenerator().generate(buildConfig, win32, win64, linux32, linux64) @@ -58,6 +65,7 @@ class GenerateLibs extends DefaultTask { BuildExecutor.executeAnt(jniDir + '/build-windows64.xml', '-v', '-Dhas-compiler=true', '-Drelease=true', 'clean', 'postcompile') BuildExecutor.executeAnt(jniDir + '/build-linux32.xml', '-v', '-Dhas-compiler=true', '-Drelease=true', 'clean', 'postcompile') BuildExecutor.executeAnt(jniDir + '/build-linux64.xml', '-v', '-Dhas-compiler=true', '-Drelease=true', 'clean', 'postcompile') + BuildExecutor.executeAnt(jniDir + '/build-macosx64.xml', '-v', '-Dhas-compiler=true', '-Drelease=true', 'clean', 'postcompile') BuildExecutor.executeAnt(jniDir + '/build.xml', '-v', 'pack-natives') } } diff --git a/imgui-binding-natives/build.gradle b/imgui-binding-natives/build.gradle index bc00741..d3c14be 100644 --- a/imgui-binding-natives/build.gradle +++ b/imgui-binding-natives/build.gradle @@ -24,6 +24,9 @@ if (System.getProperty('deployWin32')) { } else if (System.getProperty('deployLinux64')) { packageName = 'natives-linux' libName = 'libimgui-java64.so' +} else if (System.getProperty('deployMacOs64')) { + packageName = 'natives-macos' + libName = 'libimgui-java64.dylib' } jar { diff --git a/imgui-binding/src/main/java/imgui/ImGui.java b/imgui-binding/src/main/java/imgui/ImGui.java index 8ce2645..c6c4794 100644 --- a/imgui-binding/src/main/java/imgui/ImGui.java +++ b/imgui-binding/src/main/java/imgui/ImGui.java @@ -56,13 +56,17 @@ public final class ImGui { private static String resolveFullLibName() { final boolean isWin = System.getProperty("os.name").toLowerCase().contains("win"); + final boolean isMac = System.getProperty("os.name").toLowerCase().contains("mac"); final String libPrefix; final String libSuffix; if (isWin) { libPrefix = ""; libSuffix = ".dll"; - } else { // Only linux as an alternative OS + } else if (isMac) { + libPrefix = "lib"; + libSuffix = ".dylib"; + } else { libPrefix = "lib"; libSuffix = ".so"; } diff --git a/imgui-lwjgl3/build.gradle b/imgui-lwjgl3/build.gradle index 1ecd24c..0a091df 100644 --- a/imgui-lwjgl3/build.gradle +++ b/imgui-lwjgl3/build.gradle @@ -16,6 +16,9 @@ switch (OperatingSystem.current()) { case OperatingSystem.WINDOWS: project.ext.lwjglNatives = 'natives-windows' break + case OperatingSystem.MAC_OS: + project.ext.lwjglNatives = 'natives-macos' + break } dependencies { @@ -36,6 +39,10 @@ task startExample(type: JavaExec, dependsOn: build) { main = 'ImGuiGlfwExample' classpath = sourceSets.test.runtimeClasspath jvmArgs = ['-Djava.library.path=../bin'] + + if (OperatingSystem.current().isMacOsX()) { + jvmArgs += ['-XstartOnFirstThread', '-Djava.awt.headless=true'] + } } task sourcesJar(type: Jar, dependsOn: classes) {