diff --git a/.gitignore b/.gitignore
index 66a9e748c..18fd1dcb0 100755
--- a/.gitignore
+++ b/.gitignore
@@ -46,3 +46,5 @@ java/doc/
windows/ZeroTierOne/Debug/
java/build_win64/
java/build_win32/
+
+/java/mac32_64/
diff --git a/java/CMakeLists.txt b/java/CMakeLists.txt
index 81345f1d7..9c06ce450 100644
--- a/java/CMakeLists.txt
+++ b/java/CMakeLists.txt
@@ -5,7 +5,13 @@ project(ZeroTierOneJNI)
find_package(Java COMPONENTS Development)
message("JAVA_HOME: $ENV{JAVA_HOME}")
+if(WIN32)
set(Java_INCLUDE_DIRS $ENV{JAVA_HOME}/include)
+endif()
+
+if(APPLE)
+set(Java_INCLUDE_DIRS "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/System/Library/Frameworks/JavaVM.framework/Headers")
+endif()
message("Java Include Dirs: ${Java_INCLUDE_DIRS}")
@@ -14,6 +20,11 @@ if(WIN32)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /EHsc /W3 /MP")
endif()
+if(APPLE)
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -arch i386 -arch x86_64 -Wall -O3 -flto -fPIE -fvectorize -fstack-protector -mmacosx-version-min=10.7 -Wno-unused-private-field")
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_C_FLAGS} -fno-rtti")
+endif()
+
set(src_files
../ext/lz4/lz4.c
../ext/json-parser/json.c
@@ -62,6 +73,8 @@ include_directories(
add_library(${PROJECT_NAME} SHARED ${src_files})
+set_target_properties(${PROJECT_NAME} PROPERTIES SUFFIX ".jnilib")
+
set(link_libs )
if(WIN32)
diff --git a/java/build.xml b/java/build.xml
index 5668894ef..0f1b311ac 100644
--- a/java/build.xml
+++ b/java/build.xml
@@ -5,11 +5,16 @@
+
+
+
+
+
@@ -72,7 +77,20 @@
overwrite="true"/>
-
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/java/src/com/zerotier/sdk/Node.java b/java/src/com/zerotier/sdk/Node.java
index 8484ab59f..c7581ca4e 100644
--- a/java/src/com/zerotier/sdk/Node.java
+++ b/java/src/com/zerotier/sdk/Node.java
@@ -47,8 +47,10 @@ public class Node {
} else {
NativeUtils.loadLibraryFromJar("/lib/ZeroTierOneJNI_win32.dll");
}
+ } else if(System.getProperty("os.name").startsWith("Mac")) {
+ NativeUtils.loadLibraryFromJar("/lib/libZeroTierOneJNI.jnilib");
} else {
- // TODO: Mac
+ // TODO: Linux
}
} catch (IOException ioe) {
ioe.printStackTrace();