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();