Browse Source

Setup native build for Windows Java.

Still need to do Mac & Linux
Grant Limberg 10 years ago
parent
commit
0a15eae00f
4 changed files with 118 additions and 5 deletions
  1. 2 0
      .gitignore
  2. 74 0
      java/CMakeLists.txt
  3. 38 2
      java/build.xml
  4. 4 3
      java/jni/ZT1_jniutils.h

+ 2 - 0
.gitignore

@@ -44,3 +44,5 @@ java/bin/
 java/classes/
 java/classes/
 java/doc/
 java/doc/
 windows/ZeroTierOne/Debug/
 windows/ZeroTierOne/Debug/
+java/build_win64/
+java/build_win32/

+ 74 - 0
java/CMakeLists.txt

@@ -0,0 +1,74 @@
+cmake_minimum_required(VERSION 3.2)
+
+project(ZeroTierOneJNI)
+
+find_package(Java COMPONENTS Development)
+message("JAVA_HOME: $ENV{JAVA_HOME}")
+
+set(Java_INCLUDE_DIRS $ENV{JAVA_HOME}/include)
+
+message("Java Include Dirs: ${Java_INCLUDE_DIRS}")
+
+if(WIN32)
+    add_definitions(-DNOMINMAX)
+    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /EHsc /W3 /MP")
+endif()
+
+set(src_files
+    ../ext/lz4/lz4.c
+    ../ext/json-parser/json.c
+    ../ext/http-parser/http_parser.c
+    ../node/C25519.cpp
+    ../node/CertificateOfMembership.cpp
+    ../node/Defaults.cpp
+    ../node/Dictionary.cpp
+    ../node/Identity.cpp
+    ../node/IncomingPacket.cpp
+    ../node/InetAddress.cpp
+    ../node/Multicaster.cpp
+    ../node/Network.cpp
+    ../node/NetworkConfig.cpp
+    ../node/Node.cpp
+    ../node/OutboundMulticast.cpp
+    ../node/Packet.cpp
+    ../node/Peer.cpp
+    ../node/Poly1305.cpp
+    ../node/Salsa20.cpp
+    ../node/SelfAwareness.cpp
+    ../node/SHA512.cpp
+    ../node/Switch.cpp
+    ../node/Topology.cpp
+    ../node/Utils.cpp
+    ../osdep/Http.cpp
+    ../osdep/OSUtils.cpp
+    jni/com_zerotierone_sdk_Node.cpp
+    jni/ZT1_jniutils.cpp
+    )
+
+set(include_dirs
+    ${CMAKE_CURRENT_SOURCE_DIR}/../include/
+    ${Java_INCLUDE_DIRS})
+
+if(WIN32)
+    set(include_dirs
+        ${include_dirs}
+        ${Java_INCLUDE_DIRS}/win32)
+endif()
+
+include_directories(
+    ${include_dirs}
+    )
+
+add_library(${PROJECT_NAME} SHARED ${src_files})
+
+set(link_libs )
+
+if(WIN32)
+    set(link_libs
+        wsock32
+        ws2_32
+
+        )
+endif()
+
+target_link_libraries(${PROJECT_NAME} ${link_libs})

+ 38 - 2
java/build.xml

@@ -1,15 +1,20 @@
 <project default="build" name="ZeroTierOneSDK">
 <project default="build" name="ZeroTierOneSDK">
     <property environment="env"/>
     <property environment="env"/>
 
 
+    <condition property="isWindows">
+      <os family="windows"/>
+    </condition>
+
     <target name="clean">
     <target name="clean">
         <delete dir="bin" failonerror="false"/>
         <delete dir="bin" failonerror="false"/>
         <delete dir="classes" failonerror="false"/>
         <delete dir="classes" failonerror="false"/>
+        <delete dir="cmakebuild" failonerror="false"/>
         <delete dir="libs" failonerror="false"/>
         <delete dir="libs" failonerror="false"/>
         <delete dir="obj" failonerror="false"/>
         <delete dir="obj" failonerror="false"/>
     </target>
     </target>
 
 
-    <target name="build">
-        <echo message="os.name          = ${os.name}"/>
+    <target name="build_java">
+      <echo message="os.name          = ${os.name}"/>
         <echo message="os.arch          = ${os.arch}"/>
         <echo message="os.arch          = ${os.arch}"/>
         <echo message="ant.java.version = ${ant.java.version}"/>
         <echo message="ant.java.version = ${ant.java.version}"/>
         <echo message="java.version     = ${java.version}"/>
         <echo message="java.version     = ${java.version}"/>
@@ -19,6 +24,9 @@
                destdir="classes"
                destdir="classes"
                classpath="${env.ANDROID_PLATFORM}/android.jar"
                classpath="${env.ANDROID_PLATFORM}/android.jar"
                includeantruntime="false"/>
                includeantruntime="false"/>
+    </target>
+
+    <target name="build_android">
         <exec dir="jni" executable="${env.NDK_BUILD_LOC}" failonerror="true">
         <exec dir="jni" executable="${env.NDK_BUILD_LOC}" failonerror="true">
             <arg value="ZT1=${user.dir}/../"/>
             <arg value="ZT1=${user.dir}/../"/>
         </exec>
         </exec>
@@ -34,6 +42,34 @@
         <copy file="libs/x86/libZeroTierOneJNI.so"
         <copy file="libs/x86/libZeroTierOneJNI.so"
               tofile="${user.dir}/classes/lib/x86/libZeroTierOneJNI.so"
               tofile="${user.dir}/classes/lib/x86/libZeroTierOneJNI.so"
               overwrite="true"/>
               overwrite="true"/>
+    </target>
+
+
+    <target name="windows" if="isWindows">
+      <mkdir dir="build_win32"/>
+      <exec dir="build_win32/" executable="cmake" failonerror="true">
+        <arg line=".. -G&quot;Visual Studio 11 2012&quot; -DCMAKE_BUILD_TYPE=Release"/>
+      </exec>
+      <exec dir="build_win32/" executable="cmake" failonerror="true">
+        <arg line="--build . --config Release"/>
+      </exec>
+      <copy file="build_win32/Release/ZeroTierOneJNI.dll"
+            tofile="classes/lib/ZeroTierOneJNI_win32.dll"
+            overwrite="true"/>
+
+      <mkdir dir="build_win64"/>
+      <exec dir="build_win64/" executable="cmake" failonerror="true">
+        <arg line=".. -G&quot;Visual Studio 11 2012 Win64&quot; -DCMAKE_BUILD_TYPE=Release"/>
+      </exec>
+      <exec dir="build_win64/" executable="cmake" failonerror="true">
+        <arg line="--build . --config Release"/>
+      </exec>
+      <copy file="build_win64/Release/ZeroTierOneJNI.dll"
+            tofile="classes/lib/ZeroTierOneJNI_win64.dll"
+            overwrite="true"/>
+    </target>
+
+    <target name="build" depends="build_java,build_android,windows">    
         <jar destfile="bin/ZeroTierOneSDK.jar" basedir="classes"/>
         <jar destfile="bin/ZeroTierOneSDK.jar" basedir="classes"/>
     </target>
     </target>
 
 

+ 4 - 3
java/jni/ZT1_jniutils.h

@@ -1,5 +1,6 @@
 #ifndef ZT1_jniutils_h_
 #ifndef ZT1_jniutils_h_
 #define ZT1_jniutils_h_
 #define ZT1_jniutils_h_
+#include <stdio.h>
 #include <jni.h>
 #include <jni.h>
 #include <ZeroTierOne.h>
 #include <ZeroTierOne.h>
 
 
@@ -15,9 +16,9 @@ extern "C" {
 #define LOGD(...) ((void)__android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__))
 #define LOGD(...) ((void)__android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__))
 #define LOGE(...) ((void)__android_log_print(ANDROID_LOG_ERROR, LOG_TAG, __VA_ARGS__))
 #define LOGE(...) ((void)__android_log_print(ANDROID_LOG_ERROR, LOG_TAG, __VA_ARGS__))
 #else
 #else
-#define LOGI(...)
-#define LOGD(...)
-#define LOGE(...)
+#define LOGI(...) fprintf(stdout, __VA_ARGS__)
+#define LOGD(...) fprintf(stdout, __VA_ARGS__)
+#define LOGE(...) fprintf(stdout, __VA_ARGS__)
 #endif
 #endif
 
 
 jobject createResultObject(JNIEnv *env, ZT1_ResultCode code);
 jobject createResultObject(JNIEnv *env, ZT1_ResultCode code);