Просмотр исходного кода

build & package libZeroTierOneSDK.jnilib on Mac oS

Signed-off-by: Grant Limberg <[email protected]>
Grant Limberg 10 лет назад
Родитель
Сommit
e28712555d
4 измененных файлов с 37 добавлено и 2 удалено
  1. 2 0
      .gitignore
  2. 13 0
      java/CMakeLists.txt
  3. 19 1
      java/build.xml
  4. 3 1
      java/src/com/zerotier/sdk/Node.java

+ 2 - 0
.gitignore

@@ -46,3 +46,5 @@ java/doc/
 windows/ZeroTierOne/Debug/
 java/build_win64/
 java/build_win32/
+
+/java/mac32_64/

+ 13 - 0
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)

+ 19 - 1
java/build.xml

@@ -5,11 +5,16 @@
       <os family="windows"/>
     </condition>
 
+    <condition property="isMac">
+      <os family="mac"/>
+    </condition>
+
     <target name="clean">
         <delete dir="bin" failonerror="false"/>
         <delete dir="classes" failonerror="false"/>
         <delete dir="build_win32" failonerror="false"/>
         <delete dir="build_win64" failonerror="false"/>
+        <delete dir="mac32_64" failonerror="false"/>
         <delete dir="libs" failonerror="false"/>
         <delete dir="obj" failonerror="false"/>
     </target>
@@ -72,7 +77,20 @@
             overwrite="true"/>
     </target>
 
-    <target name="build" depends="build_java,build_android,windows">    
+    <target name="mac" if="isMac">
+      <mkdir dir="mac32_64"/>
+      <exec dir="mac32_64/" executable="cmake" failonerror="true">
+        <arg line=".. -DCMAKE_BUILD_TYPE=Release"/>
+      </exec>
+      <exec dir="mac32_64/" executable="cmake" failonerror="true">
+        <arg line="--build . --config Release"/>
+      </exec>
+      <copy file="mac32_64/libZeroTierOneJNI.jnilib"
+            tofile="classes/lib/libZeroTierOneJNI.jnilib"
+            overwrite="true"/>
+    </target>
+
+    <target name="build" depends="build_java,build_android,windows,mac">    
         <jar destfile="bin/ZeroTierOneSDK.jar" basedir="classes"/>
     </target>
 

+ 3 - 1
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();