Improvements to packaging scripts for Windows, macOS and Linux
This commit is contained in:
@@ -89,13 +89,17 @@ endif ()
|
|||||||
# -----------------------------------------------------------------------------
|
# -----------------------------------------------------------------------------
|
||||||
|
|
||||||
MESSAGE (STATUS "Looking for JNI")
|
MESSAGE (STATUS "Looking for JNI")
|
||||||
# We are only interested in finding jni.h: we do not care about extended JVM
|
|
||||||
# functionality or the AWT library.
|
if (BUILDING_WIN)
|
||||||
set(JAVA_AWT_LIBRARY NotNeeded)
|
# We are only interested in finding jni.h: we do not care about extended JVM
|
||||||
set(JAVA_JVM_LIBRARY NotNeeded)
|
# functionality or the AWT library.
|
||||||
set(JAVA_INCLUDE_PATH2 NotNeeded)
|
set(JAVA_AWT_LIBRARY NotNeeded)
|
||||||
set(JAVA_AWT_INCLUDE_PATH NotNeeded)
|
set(JAVA_JVM_LIBRARY NotNeeded)
|
||||||
set(JAVA_INCLUDE_PATH "C:\\Program Files\\Java\\jdk-10.0.2\\include")
|
set(JAVA_INCLUDE_PATH2 NotNeeded)
|
||||||
|
set(JAVA_AWT_INCLUDE_PATH NotNeeded)
|
||||||
|
set(JAVA_INCLUDE_PATH "C:\\Program Files\\Java\\jdk-10.0.2\\include")
|
||||||
|
endif ()
|
||||||
|
|
||||||
find_package (JNI)
|
find_package (JNI)
|
||||||
if (JNI_FOUND)
|
if (JNI_FOUND)
|
||||||
message (STATUS "JNI_INCLUDE_DIRS=${JNI_INCLUDE_DIRS}")
|
message (STATUS "JNI_INCLUDE_DIRS=${JNI_INCLUDE_DIRS}")
|
||||||
@@ -103,6 +107,7 @@ if (JNI_FOUND)
|
|||||||
list (GET JNI_INCLUDE_DIRS 0 JNI_INCLUDE_DIR)
|
list (GET JNI_INCLUDE_DIRS 0 JNI_INCLUDE_DIR)
|
||||||
message (STATUS "jni path=${JNI_INCLUDE_DIR}")
|
message (STATUS "jni path=${JNI_INCLUDE_DIR}")
|
||||||
include_directories ("${JNI_INCLUDE_DIR}")
|
include_directories ("${JNI_INCLUDE_DIR}")
|
||||||
|
include_directories ("${JNI_INCLUDE_DIRS}")
|
||||||
if (BUILDING_WIN)
|
if (BUILDING_WIN)
|
||||||
include_directories ("${JNI_INCLUDE_DIR}\\win32")
|
include_directories ("${JNI_INCLUDE_DIR}\\win32")
|
||||||
endif ()
|
endif ()
|
||||||
@@ -330,13 +335,10 @@ if (IN_XCODE)
|
|||||||
FRAMEWORK_VERSION A
|
FRAMEWORK_VERSION A
|
||||||
DEFINES_MODULE TRUE
|
DEFINES_MODULE TRUE
|
||||||
MACOSX_FRAMEWORK_IDENTIFIER com.cmake.${XCODE_FRAMEWORK_NAME}
|
MACOSX_FRAMEWORK_IDENTIFIER com.cmake.${XCODE_FRAMEWORK_NAME}
|
||||||
MODULE_MAP "/Users/joseph/op/zt/libzt/module.modulemap"
|
MODULE_MAP "~/op/zt/libzt/packages/module.modulemap"
|
||||||
PUBLIC_HEADER "${frameworkHeaderGlob}"
|
PUBLIC_HEADER "${frameworkHeaderGlob}"
|
||||||
XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "iPhone Developer"
|
XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "iPhone Developer"
|
||||||
)
|
)
|
||||||
|
|
||||||
#PUBLIC_HEADER "${INCLUDE_PATH}/Xcode-Bridging-Header.h"
|
|
||||||
#PRIVATE_HEADER "${frameworkPrivateHeaderGlob}"
|
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
# -----------------------------------------------------------------------------
|
# -----------------------------------------------------------------------------
|
||||||
|
|||||||
32
Makefile
32
Makefile
@@ -1,25 +1,32 @@
|
|||||||
# NOTE: This file only exists as a convenience for cleaning and building
|
# NOTE: This file only exists as a convenience for cleaning and building
|
||||||
# products for release. To build, use CMake. Instructions in README.md
|
# products for release. To build, use CMake. Instructions in README.md
|
||||||
|
|
||||||
|
ifeq ($(OS),Windows_NT)
|
||||||
|
DIST_BUILD_SCRIPT := packages\dist.bat
|
||||||
|
CLEAN_SCRIPT := packages\clean.bat
|
||||||
|
else
|
||||||
|
DIST_BUILD_SCRIPT := ./packages/dist.sh
|
||||||
|
CLEAN_SCRIPT := ./packages/clean.sh
|
||||||
|
PACKAGE_SCRIPT := ./packages/package.sh
|
||||||
|
endif
|
||||||
|
|
||||||
.PHONY: clean
|
.PHONY: clean
|
||||||
clean:
|
clean:
|
||||||
rm -rf bin build products tmp
|
$(CLEAN_SCRIPT)
|
||||||
rm -f *.o *.s *.exp *.lib .depend* *.core core
|
|
||||||
rm -rf .depend
|
|
||||||
find . -type f \( -name '*.a' -o -name '*.o' -o -name '*.so' -o -name \
|
|
||||||
'*.o.d' -o -name '*.out' -o -name '*.log' -o -name '*.dSYM' -o -name '*.dylib' -o -name '*.class' \) -delete
|
|
||||||
|
|
||||||
# Build and package everything
|
# Build and package everything
|
||||||
# This command shall be run twice:
|
# This command shall be run twice:
|
||||||
# (1) Generates projects
|
# (1) Generates projects
|
||||||
# <perform any required modifications>
|
# <perform any required modifications>
|
||||||
# (2) Build products and package everything
|
# (2) Build products and package everything
|
||||||
|
|
||||||
.PHONY: dist
|
.PHONY: dist
|
||||||
dist: patch
|
dist: patch
|
||||||
./packages/dist.sh
|
$(DIST_BUILD_SCRIPT)
|
||||||
.PHONY: dist_win
|
|
||||||
dist_win: patch
|
.PHONY: package
|
||||||
packages\dist.bat
|
package:
|
||||||
|
$(PACKAGE_SCRIPT)
|
||||||
|
|
||||||
# Initialize submodules and apply patches
|
# Initialize submodules and apply patches
|
||||||
.PHONY: all
|
.PHONY: all
|
||||||
@@ -27,13 +34,6 @@ all: update patch
|
|||||||
cmake -H. -Bbuild -DCMAKE_BUILD_TYPE=Release
|
cmake -H. -Bbuild -DCMAKE_BUILD_TYPE=Release
|
||||||
cmake --build build
|
cmake --build build
|
||||||
|
|
||||||
# Clean build paths
|
|
||||||
clean_win:
|
|
||||||
-"rd /S /Q bin"
|
|
||||||
-"rd /S /Q build"
|
|
||||||
-"rd /S /Q WinBuild32"
|
|
||||||
-"rd /S /Q WinBuild64"
|
|
||||||
|
|
||||||
# Remove any CMake-generated library-building projects
|
# Remove any CMake-generated library-building projects
|
||||||
clean_packages:
|
clean_packages:
|
||||||
rm -rf packages/xcode_ios
|
rm -rf packages/xcode_ios
|
||||||
|
|||||||
71
include/Xcode-Bridging-Header.h
Normal file
71
include/Xcode-Bridging-Header.h
Normal file
@@ -0,0 +1,71 @@
|
|||||||
|
/*
|
||||||
|
* ZeroTier SDK - Network Virtualization Everywhere
|
||||||
|
* Copyright (C) 2011-2017 ZeroTier, Inc. https://www.zerotier.com/
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
* --
|
||||||
|
*
|
||||||
|
* You can be released from the requirements of the license by purchasing
|
||||||
|
* a commercial license. Buying such a license is mandatory as soon as you
|
||||||
|
* develop commercial closed-source software that incorporates or links
|
||||||
|
* directly against ZeroTier software without disclosing the source code
|
||||||
|
* of your own application.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef LIBZT_BRIDGING_HEADER_H
|
||||||
|
#define LIBZT_BRIDGING_HEADER_H
|
||||||
|
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#include "libzt.h"
|
||||||
|
|
||||||
|
// ZT SERVICE CONTROLS
|
||||||
|
int zts_start(const char *path, int blocking);
|
||||||
|
int zts_startjoin(const char *path, const uint64_t nwid);
|
||||||
|
void zts_stop();
|
||||||
|
int zts_core_running();
|
||||||
|
int zts_stack_running();
|
||||||
|
int zts_ready();
|
||||||
|
int zts_join(uint64_t nwid);
|
||||||
|
int zts_leave(uint64_t nwid);
|
||||||
|
uint64_t zts_get_node_id();
|
||||||
|
// SOCKET API
|
||||||
|
int zts_connect(int fd, const struct sockaddr *addr, socklen_t addrlen);
|
||||||
|
int zts_bind(int fd, const struct sockaddr *addr, socklen_t addrlen);
|
||||||
|
int zts_accept(int fd, struct sockaddr *addr, socklen_t *addrlen);
|
||||||
|
int zts_listen(int fd, int backlog);
|
||||||
|
int zts_socket(int socket_family, int socket_type, int protocol);
|
||||||
|
int zts_setsockopt(int fd, int level, int optname, const void *optval, socklen_t optlen);
|
||||||
|
int zts_getsockopt(int fd, int level, int optname, void *optval, socklen_t *optlen);
|
||||||
|
int zts_close(int fd);
|
||||||
|
int zts_getsockname(int fd, struct sockaddr *addr, socklen_t *addrlen);
|
||||||
|
int zts_getpeername(int fd, struct sockaddr *addr, socklen_t *addrlen);
|
||||||
|
ssize_t zts_send(int fd, const void *buf, size_t len, int flags);
|
||||||
|
ssize_t zts_sendto(int fd, const void *buf, size_t len, int flags, const struct sockaddr *addr, socklen_t addrlen);
|
||||||
|
ssize_t zts_sendmsg(int fd, const struct msghdr *msg, int flags);
|
||||||
|
ssize_t zts_recv(int fd, void *buf, size_t len, int flags);
|
||||||
|
ssize_t zts_recvfrom(int fd, void *buf, size_t len, int flags, struct sockaddr *addr, socklen_t *addrlen);
|
||||||
|
ssize_t zts_recvmsg(int fd, struct msghdr *msg,int flags);
|
||||||
|
int zts_read(int fd, void *buf, size_t len);
|
||||||
|
int zts_write(int fd, const void *buf, size_t len);
|
||||||
|
int zts_shutdown(int fd, int how);
|
||||||
|
int zts_select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);
|
||||||
|
int zts_fcntl(int fd, int cmd, int flags);
|
||||||
|
int zts_ioctl(int fd, unsigned long request, void *argp);
|
||||||
|
|
||||||
|
#endif /* LIBZT_BRIDGING_HEADER_H */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -1,9 +1,25 @@
|
|||||||
### Projects and scripts for building various packages
|
### Projects and scripts for building various packages
|
||||||
|
|
||||||
|
Pre-built binaries [here](https://download.zerotier.com/RELEASES/)
|
||||||
|
|
||||||
|
***
|
||||||
|
|
||||||
|
### To build entire distribution package:
|
||||||
|
|
||||||
|
Step 1: On a Windows host, run `make dist`. Outputs will be copied to `prebuilt/(debug|release)/(win32/win64)`
|
||||||
|
Step 2: On a Linux host, run `make dist`. Outputs will be copied to `prebuilt/linux-$ARCH`
|
||||||
|
Step 3: On a macOS host, run `make dist`. Outputs will be copied to `prebuilt/macos-$ARCH`
|
||||||
|
Step 4: Perform any necessary modifications to the generated projects (such as Xcode projects)
|
||||||
|
Step 5: Re-run `make dist`
|
||||||
|
Step 6: On a Unix-like host, run `make package`. This will zip everything up into a pair of `tar.gz` files in `products`
|
||||||
|
|
||||||
|
***
|
||||||
|
|
||||||
|
### iOS
|
||||||
|
|
||||||
|
- In `packages/xcode_ios`, change SDK from `macOS` to `iOS`
|
||||||
|
- Build
|
||||||
|
|
||||||
### Android
|
### Android
|
||||||
|
|
||||||
Pre-built binaries can be found [here]()
|
This project is not currently generated by CMake, but does utilize the `CMakeLists.txt` and generates a `.aar` Android Archive which can be imported into an Android Studio project as a library. An example of this library's usage can be found in [examples/android](examples/android). Further examples of the libzt JNI API can be seen in [examples/java](examples/java).
|
||||||
|
|
||||||
This android project builds from the root `CMakeLists.txt` and generates a `.aar` Android Archive which can be imported into an Android Studio project as a library. An example of this library's usage can be found in [examples/android](examples/android). Further examples of the libzt JNI API can be seen in [examples/java](examples/java).
|
|
||||||
|
|
||||||
### PyPI
|
|
||||||
|
|||||||
4
packages/clean.bat
Normal file
4
packages/clean.bat
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
rd /S /Q bin
|
||||||
|
rd /S /Q build
|
||||||
|
rd /S /Q WinBuild32
|
||||||
|
rd /S /Q WinBuild64
|
||||||
7
packages/clean.sh
Executable file
7
packages/clean.sh
Executable file
@@ -0,0 +1,7 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
rm -rf bin build products tmp
|
||||||
|
rm -f *.o *.s *.exp *.lib .depend* *.core core
|
||||||
|
rm -rf .depend
|
||||||
|
find . -type f \( -name '*.o' -o -name '*.so' -o -name \
|
||||||
|
'*.o.d' -o -name '*.out' -o -name '*.log' -o -name '*.dSYM' -o -name '*.class' \) -delete
|
||||||
@@ -1,9 +1,9 @@
|
|||||||
REM Build all target configurations and copy results into "prebuilt"
|
REM Build all target configurations and copy results into "prebuilt"
|
||||||
|
|
||||||
set PrebuiltDebugWin32Dir=prebuilt\debug\win32
|
set PrebuiltDebugWin32Dir=staging\debug\win32
|
||||||
set PrebuiltDebugWin64Dir=prebuilt\debug\win64
|
set PrebuiltDebugWin64Dir=staging\debug\win64
|
||||||
set PrebuiltReleaseWin32Dir=prebuilt\release\win32
|
set PrebuiltReleaseWin32Dir=staging\release\win32
|
||||||
set PrebuiltReleaseWin64Dir=prebuilt\release\win64
|
set PrebuiltReleaseWin64Dir=staging\release\win64
|
||||||
|
|
||||||
mkdir %PrebuiltDebugWin32Dir%
|
mkdir %PrebuiltDebugWin32Dir%
|
||||||
mkdir %PrebuiltDebugWin64Dir%
|
mkdir %PrebuiltDebugWin64Dir%
|
||||||
@@ -50,15 +50,39 @@ popd
|
|||||||
cmake --build WinBuild32 --config Release
|
cmake --build WinBuild32 --config Release
|
||||||
cmake --build WinBuild32 --config Debug
|
cmake --build WinBuild32 --config Debug
|
||||||
|
|
||||||
copy %DebugWinBuildDir%\zt-static.lib %PrebuiltDebugWin32Dir%\zt-jni.lib
|
REM Build JAR file
|
||||||
copy %DebugWinBuildDir%\zt-shared.dll %PrebuiltDebugWin32Dir%\zt-jni.dll
|
REM release variant
|
||||||
copy %ReleaseWinBuildDir%\zt-static.lib %PrebuiltReleaseWin32Dir%\zt-jni.lib
|
cd packages\java
|
||||||
copy %ReleaseWinBuildDir%\zt-shared.dll %PrebuiltReleaseWin32Dir%\zt-jni.dll
|
del com/zerotier/libzt/*.class
|
||||||
|
move ..\..\%ReleaseWinBuildDir%\zt-shared.dll zt.dll
|
||||||
|
javac com/zerotier/libzt/*.java
|
||||||
|
jar cf zt.jar zt.dll com/zerotier/libzt/*.class
|
||||||
|
move zt.jar ..\..\%PrebuiltReleaseWin32Dir%
|
||||||
|
REM debug variant
|
||||||
|
del com/zerotier/libzt/*.class
|
||||||
|
move ..\..\%DebugWinBuildDir%\zt-shared.dll zt.dll
|
||||||
|
javac com/zerotier/libzt/*.java
|
||||||
|
jar cf zt.jar zt.dll com/zerotier/libzt/*.class
|
||||||
|
move zt.jar ..\..\%PrebuiltDebugWin32Dir%
|
||||||
|
popd
|
||||||
|
popd
|
||||||
|
|
||||||
cmake --build WinBuild64 --config Release
|
cmake --build WinBuild64 --config Release
|
||||||
cmake --build WinBuild64 --config Debug
|
cmake --build WinBuild64 --config Debug
|
||||||
|
|
||||||
copy %DebugWinBuildDir%\zt-static.lib %PrebuiltDebugWin64Dir%\zt-jni.lib
|
REM Build JAR file
|
||||||
copy %DebugWinBuildDir%\zt-shared.dll %PrebuiltDebugWin64Dir%\zt-jni.dll
|
REM release variant
|
||||||
copy %ReleaseWinBuildDir%\zt-static.lib %PrebuiltReleaseWin64Dir%\zt-jni.lib
|
cd packages\java
|
||||||
copy %ReleaseWinBuildDir%\zt-shared.dll %PrebuiltReleaseWin64Dir%\zt-jni.dll
|
del com/zerotier/libzt/*.class
|
||||||
|
move ..\..\%ReleaseWinBuildDir%\zt-shared.dll zt.dll
|
||||||
|
javac com/zerotier/libzt/*.java
|
||||||
|
jar cf zt.jar zt.dll com/zerotier/libzt/*.class
|
||||||
|
move zt.jar ..\..\%PrebuiltReleaseWin64Dir%
|
||||||
|
REM debug variant
|
||||||
|
del com/zerotier/libzt/*.class
|
||||||
|
move ..\..\%DebugWinBuildDir%\zt-shared.dll zt.dll
|
||||||
|
javac com/zerotier/libzt/*.java
|
||||||
|
jar cf zt.jar zt.dll com/zerotier/libzt/*.class
|
||||||
|
move zt.jar ..\..\%PrebuiltDebugWin64Dir%
|
||||||
|
popd
|
||||||
|
popd
|
||||||
268
packages/dist.sh
268
packages/dist.sh
@@ -7,37 +7,38 @@
|
|||||||
# - once projects have been generated, this script will use their tooling to build the libraries/packages
|
# - once projects have been generated, this script will use their tooling to build the libraries/packages
|
||||||
# - when all products have been built and moved to `tmp`, they will be compressed and moved to `products`
|
# - when all products have been built and moved to `tmp`, they will be compressed and moved to `products`
|
||||||
|
|
||||||
PROJNAME="zt"
|
|
||||||
LIBNAME="lib"$PROJNAME
|
|
||||||
OSNAME=$(uname | tr '[A-Z]' '[a-z]')
|
OSNAME=$(uname | tr '[A-Z]' '[a-z]')
|
||||||
LIBZT_VERSION="1.2.0"
|
BUILD_CONCURRENCY=4
|
||||||
LIBZT_REVISION="1"
|
|
||||||
ZT_CORE_VERSION="1.2.12"
|
|
||||||
FILENAME_PREFIX=${LIBNAME}"-"${LIBZT_VERSION}"r"${LIBZT_REVISION}
|
|
||||||
|
|
||||||
PROJROOT=$(pwd)
|
PROJROOT=$(pwd)
|
||||||
BUILD_PRODUCTS_DIR=$(pwd)/bin
|
BUILD_PRODUCTS_DIR=$(pwd)/bin
|
||||||
LIB_PRODUCTS_DIR=${BUILD_PRODUCTS_DIR}/lib
|
LIB_PRODUCTS_DIR=$BUILD_PRODUCTS_DIR/lib
|
||||||
FINISHED_PRODUCTS_DIR=$(pwd)/products
|
FINISHED_PRODUCTS_DIR=$(pwd)/products
|
||||||
TMP_PRODUCTS_DIR=${BUILD_PRODUCTS_DIR}/tmp
|
STAGING_DIR=$(pwd)/staging
|
||||||
|
# Windows (previously built)
|
||||||
# previously built, will include in package
|
WIN_PREBUILT_DIR=$PROJROOT/staging/win
|
||||||
WIN_PREBUILT_DIR=${PROJROOT}/prebuilt
|
WIN_RELEASE_PRODUCTS_DIR=$WIN_PREBUILT_DIR/release
|
||||||
WIN_RELEASE_PRODUCTS_DIR=${WIN_PREBUILT_DIR}/release
|
WIN_DEBUG_PRODUCTS_DIR=$WIN_PREBUILT_DIR/debug
|
||||||
WIN_DEBUG_PRODUCTS_DIR=${WIN_PREBUILT_DIR}/debug
|
WIN32_RELEASE_PRODUCTS_DIR=$WIN_RELEASE_PRODUCTS_DIR/win32
|
||||||
WIN32_RELEASE_PRODUCTS_DIR=${WIN_RELEASE_PRODUCTS_DIR}/win32
|
WIN64_RELEASE_PRODUCTS_DIR=$WIN_RELEASE_PRODUCTS_DIR/win64
|
||||||
WIN64_RELEASE_PRODUCTS_DIR=${WIN_RELEASE_PRODUCTS_DIR}/win64
|
WIN32_DEBUG_PRODUCTS_DIR=$WIN_DEBUG_PRODUCTS_DIR/win32
|
||||||
WIN32_DEBUG_PRODUCTS_DIR=${WIN_DEBUG_PRODUCTS_DIR}/win32
|
WIN64_DEBUG_PRODUCTS_DIR=$WIN_DEBUG_PRODUCTS_DIR/win64
|
||||||
WIN64_DEBUG_PRODUCTS_DIR=${WIN_DEBUG_PRODUCTS_DIR}/win64
|
# Linux
|
||||||
|
LINUX_PROD_DIR=$PROJROOT/staging/linux
|
||||||
|
# macOS
|
||||||
|
MACOS_PROD_DIR=$PROJROOT/staging/macos
|
||||||
|
MACOS_RELEASE_PROD_DIR=$MACOS_PROD_DIR/release
|
||||||
|
MACOS_DEBUG_PROD_DIR=$MACOS_PROD_DIR/debug
|
||||||
|
# iOS
|
||||||
|
IOS_PROD_DIR=$PROJROOT/staging/ios
|
||||||
|
# Android
|
||||||
|
ANDROID_PROJ_DIR=$(pwd)/"packages/android"
|
||||||
|
ANDROID_ARCHIVE_FILENAME="zt.aar"
|
||||||
|
# Xcode
|
||||||
XCODE_IOS_PROJ_DIR=$(pwd)/"packages/xcode_ios"
|
XCODE_IOS_PROJ_DIR=$(pwd)/"packages/xcode_ios"
|
||||||
XCODE_MACOS_PROJ_DIR=$(pwd)/"packages/xcode_macos"
|
XCODE_MACOS_PROJ_DIR=$(pwd)/"packages/xcode_macos"
|
||||||
|
|
||||||
ANDROID_PROJ_DIR=$(pwd)/"packages/android"
|
mkdir $FINISHED_PRODUCTS_DIR
|
||||||
ANDROID_ARCHIVE_FILENAME="zt.aar"
|
mkdir $TMP_PRODUCTS_DIR
|
||||||
|
|
||||||
mkdir ${FINISHED_PRODUCTS_DIR}
|
|
||||||
mkdir ${TMP_PRODUCTS_DIR}
|
|
||||||
|
|
||||||
# Check that projects exist, generate them and exit if they don't exist
|
# Check that projects exist, generate them and exit if they don't exist
|
||||||
generate_projects_if_necessary()
|
generate_projects_if_necessary()
|
||||||
@@ -65,145 +66,112 @@ generate_projects_if_necessary()
|
|||||||
# android?
|
# android?
|
||||||
if [[ $should_exit = 1 ]]; then
|
if [[ $should_exit = 1 ]]; then
|
||||||
echo "Generated projects. Perform necessary modifications and then re-run this script"
|
echo "Generated projects. Perform necessary modifications and then re-run this script"
|
||||||
echo "Please place previously built windows binaries in ${WIN_PREBUILT_DIR} before running again."
|
echo "Please place previously built windows binaries in $WIN_PREBUILT_DIR before running again."
|
||||||
exit 0
|
exit 0
|
||||||
else
|
else
|
||||||
echo "Projects detected, going to build stage next"
|
echo "Projects detected, going to build stage next"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# Xcode Frameworks
|
|
||||||
build_xcode_targets()
|
|
||||||
{
|
|
||||||
CMAKE_CONFIG=${1}
|
|
||||||
UPPERCASE_CONFIG="$(tr '[:lower:]' '[:upper:]' <<< ${1:0:1})${1:1}"
|
|
||||||
if [[ ${2} = *"jni"* ]]; then
|
|
||||||
CMAKE_FLAGS=${CMAKE_FLAGS}" -DJNI=1"
|
|
||||||
fi
|
|
||||||
if [[ $OSNAME = *"darwin"* && ${2} != *"JNI"* ]]; then
|
|
||||||
CURR_BUILD_PRODUCTS_DIR=${LIB_PRODUCTS_DIR}/${UPPERCASE_CONFIG}
|
|
||||||
# (iOS)
|
|
||||||
echo "BUILDING: iOS"
|
|
||||||
cd $XCODE_IOS_PROJ_DIR
|
|
||||||
xcodebuild -target zt -configuration "${UPPERCASE_CONFIG}" -sdk "iphoneos"
|
|
||||||
xcodebuild -target zt-static -configuration "${UPPERCASE_CONFIG}" -sdk "iphoneos"
|
|
||||||
cd -
|
|
||||||
CURR_ARCH="arm64" # anything older should be built custom
|
|
||||||
CURR_TMP_PRODUCT_DIR=${TMP_PRODUCTS_DIR}/ios-${CURR_ARCH}
|
|
||||||
mkdir -p ${CURR_TMP_PRODUCT_DIR}
|
|
||||||
mv ${CURR_BUILD_PRODUCTS_DIR}/*.framework ${CURR_TMP_PRODUCT_DIR}
|
|
||||||
mv ${CURR_BUILD_PRODUCTS_DIR}/libzt.* ${CURR_TMP_PRODUCT_DIR}
|
|
||||||
|
|
||||||
# (macOS)
|
|
||||||
echo "BUILDING: macOS"
|
|
||||||
cd $XCODE_MACOS_PROJ_DIR
|
|
||||||
xcodebuild -target zt -configuration "${UPPERCASE_CONFIG}" -sdk "macosx"
|
|
||||||
xcodebuild -target zt-static -configuration "${UPPERCASE_CONFIG}" -sdk "macosx"
|
|
||||||
xcodebuild -target zt-shared -configuration "${UPPERCASE_CONFIG}" -sdk "macosx"
|
|
||||||
cd -
|
|
||||||
CURR_ARCH=${HOSTTYPE}
|
|
||||||
CURR_TMP_PRODUCT_DIR=${TMP_PRODUCTS_DIR}/macos-${CURR_ARCH}
|
|
||||||
mkdir -p ${CURR_TMP_PRODUCT_DIR}
|
|
||||||
mv ${CURR_BUILD_PRODUCTS_DIR}/*.framework ${CURR_TMP_PRODUCT_DIR}
|
|
||||||
mv ${CURR_BUILD_PRODUCTS_DIR}/libzt.* ${CURR_TMP_PRODUCT_DIR}
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# Android archive (AAR)
|
|
||||||
build_aar()
|
|
||||||
{
|
|
||||||
CMAKE_CONFIG=${1}
|
|
||||||
UPPERCASE_CONFIG="$(tr '[:lower:]' '[:upper:]' <<< ${1:0:1})${1:1}"
|
|
||||||
if [[ ${2} = *"jni"* ]]; then
|
|
||||||
CMAKE_FLAGS=${CMAKE_FLAGS}" -DJNI=1"
|
|
||||||
fi
|
|
||||||
CURR_ARCH="armeabi-v7a"
|
|
||||||
CURR_TMP_PRODUCT_DIR=${TMP_PRODUCTS_DIR}/android-${CURR_ARCH}
|
|
||||||
mkdir -p ${CURR_TMP_PRODUCT_DIR}
|
|
||||||
echo "BUILDING: AAR"
|
|
||||||
cd ${ANDROID_PROJ_DIR}
|
|
||||||
./gradlew assemble${UPPERCASE_CONFIG} # e.g. assembleRelease
|
|
||||||
mv ${ANDROID_PROJ_DIR}/app/build/outputs/aar/app-${CONFIG}.aar ${CURR_TMP_PRODUCT_DIR}/${ANDROID_ARCHIVE_FILENAME}
|
|
||||||
cd -
|
|
||||||
}
|
|
||||||
|
|
||||||
# Java archive (JAR)
|
|
||||||
#Call ordinary CMake build script with JNI flag set, use product in JAR file
|
|
||||||
build_jar()
|
|
||||||
{
|
|
||||||
CMAKE_CONFIG=${1}
|
|
||||||
UPPERCASE_CONFIG="$(tr '[:lower:]' '[:upper:]' <<< ${1:0:1})${1:1}"
|
|
||||||
if [[ ${2} = *"jni"* ]]; then
|
|
||||||
CMAKE_FLAGS=${CMAKE_FLAGS}" -DJNI=1"
|
|
||||||
fi
|
|
||||||
CURR_ARCH=${HOSTTYPE}
|
|
||||||
CURR_TMP_PRODUCT_DIR=${TMP_PRODUCTS_DIR}/macos-${CURR_ARCH}
|
|
||||||
mkdir -p ${CURR_TMP_PRODUCT_DIR}
|
|
||||||
echo "BUILDING: JAR"
|
|
||||||
rm -rf ${LIB_PRODUCTS_DIR} # clean-lite
|
|
||||||
cmake -H. -Bbuild -DCMAKE_BUILD_TYPE=${CMAKE_CONFIG} "-DJNI=1 -DBUILD_TESTS=0"
|
|
||||||
cmake --build build
|
|
||||||
cd ${PROJROOT}/examples/java
|
|
||||||
cp ../../bin/lib/libzt.dylib .
|
|
||||||
mv ${LIB_PRODUCTS_DIR}/libzt.a ${CURR_TMP_PRODUCT_DIR}/libzt-jni.a
|
|
||||||
mv ${LIB_PRODUCTS_DIR}/libzt.dylib ${CURR_TMP_PRODUCT_DIR}/libzt-jni.dylib
|
|
||||||
javac com/zerotier/libzt/*.java
|
|
||||||
jar cf libzt.jar libzt.dylib com/zerotier/libzt/*.class
|
|
||||||
mv libzt.jar ${CURR_TMP_PRODUCT_DIR}
|
|
||||||
cd -
|
|
||||||
}
|
|
||||||
|
|
||||||
# Build everything (to a specific configuration)
|
|
||||||
build()
|
|
||||||
{
|
|
||||||
if [[ $OSNAME == *"darwin"* ]]; then
|
|
||||||
build_xcode_targets ${1} ${2}
|
|
||||||
build_aar ${1} ${2}
|
|
||||||
fi
|
|
||||||
build_jar ${1} ${2}
|
|
||||||
}
|
|
||||||
|
|
||||||
# Package everything together
|
|
||||||
package_products()
|
|
||||||
{
|
|
||||||
CONFIG=${1}
|
|
||||||
PRODUCT_FILENAME=${FILENAME_PREFIX}-${CONFIG}.tar.gz
|
|
||||||
echo "Making: " ${FINISHED_PRODUCTS_DIR}/${PRODUCT_FILENAME}
|
|
||||||
cd ${TMP_PRODUCTS_DIR}
|
|
||||||
tar -zcvf ${PRODUCT_FILENAME} .
|
|
||||||
mv *.tar.gz ${FINISHED_PRODUCTS_DIR}
|
|
||||||
cd -
|
|
||||||
}
|
|
||||||
|
|
||||||
copy_windows_targets()
|
|
||||||
{
|
|
||||||
echo "Copying prebuilt windows binaries into temporary staging directory"
|
|
||||||
if [ ! -d "$XCODE_MACOS_PROJ_DIR" ]; then
|
|
||||||
echo "WARNING: windows products directory appears to be empty. Exiting"
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
CONFIG=${1}
|
|
||||||
cp -r ${WIN_PREBUILT_DIR}/${CONFIG}/win32 ${TMP_PRODUCTS_DIR}
|
|
||||||
cp -r ${WIN_PREBUILT_DIR}/${CONFIG}/win64 ${TMP_PRODUCTS_DIR}
|
|
||||||
}
|
|
||||||
|
|
||||||
build_all_products()
|
build_all_products()
|
||||||
{
|
{
|
||||||
CONFIG=${1}
|
CONFIG=$1
|
||||||
build ${CONFIG}
|
UPPERCASE_CONFIG="$(tr '[:lower:]' '[:upper:]' <<< $1:0:1)$1:1"
|
||||||
copy_windows_targets ${CONFIG}
|
|
||||||
package_products ${CONFIG}
|
# Targets to build on and for darwin
|
||||||
|
if [[ $OSNAME = *"darwin"* ]]; then
|
||||||
|
# Xcode Frameworks --- Builds targets from a CMake-generated Xcode project
|
||||||
|
if true; then
|
||||||
|
if [[ $2 != *"JNI"* ]]; then
|
||||||
|
CURR_BUILD_PRODUCTS_DIR=$LIB_PRODUCTS_DIR/$UPPERCASE_CONFIG
|
||||||
|
# (iOS)
|
||||||
|
echo "BUILDING: iOS"
|
||||||
|
cd $XCODE_IOS_PROJ_DIR
|
||||||
|
xcodebuild -target zt -configuration "$UPPERCASE_CONFIG" -sdk "iphoneos"
|
||||||
|
xcodebuild -target zt-static -configuration "$UPPERCASE_CONFIG" -sdk "iphoneos"
|
||||||
|
cd -
|
||||||
|
CURR_ARCH="arm64" # anything older should be built custom
|
||||||
|
CURR_TMP_PRODUCT_DIR=$STAGING_DIR/$CONFIG/ios-$CURR_ARCH
|
||||||
|
mkdir -p $CURR_TMP_PRODUCT_DIR
|
||||||
|
mv $CURR_BUILD_PRODUCTS_DIR/*.framework $CURR_TMP_PRODUCT_DIR
|
||||||
|
mv $CURR_BUILD_PRODUCTS_DIR/libzt.* $CURR_TMP_PRODUCT_DIR
|
||||||
|
|
||||||
|
# (macOS)
|
||||||
|
echo "BUILDING: macOS"
|
||||||
|
cd $XCODE_MACOS_PROJ_DIR
|
||||||
|
xcodebuild -target zt -configuration "$UPPERCASE_CONFIG" -sdk "macosx"
|
||||||
|
xcodebuild -target zt-static -configuration "$UPPERCASE_CONFIG" -sdk "macosx"
|
||||||
|
xcodebuild -target zt-shared -configuration "$UPPERCASE_CONFIG" -sdk "macosx"
|
||||||
|
cd -
|
||||||
|
CURR_ARCH=$HOSTTYPE
|
||||||
|
CURR_TMP_PRODUCT_DIR=$STAGING_DIR/$CONFIG/macos-$CURR_ARCH
|
||||||
|
mkdir -p $CURR_TMP_PRODUCT_DIR
|
||||||
|
mv $CURR_BUILD_PRODUCTS_DIR/*.framework $CURR_TMP_PRODUCT_DIR
|
||||||
|
mv $CURR_BUILD_PRODUCTS_DIR/libzt.* $CURR_TMP_PRODUCT_DIR
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
# Android Archive (AAR) --- Executes a Gradle task
|
||||||
|
if true; then
|
||||||
|
CMAKE_FLAGS=$CMAKE_FLAGS" -DJNI=1"
|
||||||
|
CURR_ARCH="armeabi-v7a"
|
||||||
|
CURR_TMP_PRODUCT_DIR=$STAGING_DIR/$CONFIG/android-$CURR_ARCH
|
||||||
|
mkdir -p $CURR_TMP_PRODUCT_DIR
|
||||||
|
echo "BUILDING: AAR"
|
||||||
|
cd $ANDROID_PROJ_DIR
|
||||||
|
./gradlew assemble$UPPERCASE_CONFIG # e.g. assembleRelease
|
||||||
|
mv $ANDROID_PROJ_DIR/app/build/outputs/aar/app-$CONFIG.aar $CURR_TMP_PRODUCT_DIR/$ANDROID_ARCHIVE_FILENAME
|
||||||
|
cd -
|
||||||
|
fi
|
||||||
|
# Java Archive (JAR)
|
||||||
|
if true; then
|
||||||
|
CMAKE_FLAGS=$CMAKE_FLAGS" -DJNI=1"
|
||||||
|
CURR_ARCH=$HOSTTYPE
|
||||||
|
CURR_TMP_PRODUCT_DIR=$STAGING_DIR/$CONFIG/macos-$CURR_ARCH
|
||||||
|
mkdir -p $CURR_TMP_PRODUCT_DIR
|
||||||
|
echo "BUILDING: JAR"
|
||||||
|
rm -rf $LIB_PRODUCTS_DIR # clean-lite
|
||||||
|
cmake -H. -Bbuild -DCMAKE_BUILD_TYPE=$CONFIG "-DJNI=1 -DBUILD_TESTS=0"
|
||||||
|
cmake --build build
|
||||||
|
cd $PROJROOT/packages/java
|
||||||
|
#cp $CURR_BUILD_PRODUCTS_DIR/libzt.dylib .
|
||||||
|
javac com/zerotier/libzt/*.java
|
||||||
|
jar cf zt.jar $CURR_BUILD_PRODUCTS_DIR/libzt.dylib com/zerotier/libzt/*.class
|
||||||
|
mv zt.jar $CURR_TMP_PRODUCT_DIR
|
||||||
|
cd -
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
# Linux targets
|
||||||
|
if [[ $OSNAME = *"linux"* ]]; then
|
||||||
|
# Ordinary libraries
|
||||||
|
if false; then
|
||||||
|
rm -rf $LIB_PRODUCTS_DIR
|
||||||
|
cmake -H. -Bbuild -DCMAKE_BUILD_TYPE=$CONFIG "-DBUILD_TESTS=0"
|
||||||
|
cmake --build build -j $BUILD_CONCURRENCY
|
||||||
|
CURR_ARCH=$HOSTTYPE
|
||||||
|
CURR_TMP_PRODUCT_DIR=$STAGING_DIR/$CONFIG/linux-$CURR_ARCH
|
||||||
|
mv $CURR_BUILD_PRODUCTS_DIR/libzt.* $CURR_TMP_PRODUCT_DIR
|
||||||
|
fi
|
||||||
|
# Java JAR file
|
||||||
|
if true; then
|
||||||
|
rm -rf $LIB_PRODUCTS_DIR
|
||||||
|
cmake -H. -Bbuild -DCMAKE_BUILD_TYPE=$CONFIG "-DJNI=1 -DBUILD_TESTS=0"
|
||||||
|
cmake --build build -j $BUILD_CONCURRENCY
|
||||||
|
CURR_ARCH=$HOSTTYPE
|
||||||
|
CURR_TMP_PRODUCT_DIR=$STAGING_DIR/$CONFIG/linux-$CURR_ARCH
|
||||||
|
mkdir -p $CURR_TMP_PRODUCT_DIR
|
||||||
|
cd $PROJROOT/packages/java
|
||||||
|
#cp $CURR_BUILD_PRODUCTS_DIR/libzt.so .
|
||||||
|
javac com/zerotier/libzt/*.java
|
||||||
|
jar cf zt.jar $CURR_BUILD_PRODUCTS_DIR/libzt.so com/zerotier/libzt/*.class
|
||||||
|
mv zt.jar $CURR_TMP_PRODUCT_DIR
|
||||||
|
cd -
|
||||||
|
fi
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
main()
|
main()
|
||||||
{
|
{
|
||||||
# prepare environment
|
|
||||||
generate_projects_if_necessary
|
generate_projects_if_necessary
|
||||||
mkdir -p ${WIN32_RELEASE_PRODUCTS_DIR}
|
|
||||||
mkdir -p ${WIN64_RELEASE_PRODUCTS_DIR}
|
|
||||||
mkdir -p ${WIN32_DEBUG_PRODUCTS_DIR}
|
|
||||||
mkdir -p ${WIN64_DEBUG_PRODUCTS_DIR}
|
|
||||||
# build
|
|
||||||
build_all_products "release"
|
build_all_products "release"
|
||||||
build_all_products "debug"
|
build_all_products "debug"
|
||||||
}
|
}
|
||||||
|
|||||||
54
packages/java/com/zerotier/libzt/ZTFDSet.java
Normal file
54
packages/java/com/zerotier/libzt/ZTFDSet.java
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
/*
|
||||||
|
* ZeroTier SDK - Network Virtualization Everywhere
|
||||||
|
* Copyright (C) 2011-2018 ZeroTier, Inc. https://www.zerotier.com/
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
* --
|
||||||
|
*
|
||||||
|
* You can be released from the requirements of the license by purchasing
|
||||||
|
* a commercial license. Buying such a license is mandatory as soon as you
|
||||||
|
* develop commercial closed-source software that incorporates or links
|
||||||
|
* directly against ZeroTier software without disclosing the source code
|
||||||
|
* of your own application.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.zerotier.libzt;
|
||||||
|
|
||||||
|
public class ZTFDSet
|
||||||
|
{
|
||||||
|
byte[] fds_bits = new byte[1024];
|
||||||
|
|
||||||
|
public void CLR(int fd)
|
||||||
|
{
|
||||||
|
fds_bits[fd] = 0x00;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean ISSET(int fd)
|
||||||
|
{
|
||||||
|
return fds_bits[fd] == 0x01;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SET(int fd)
|
||||||
|
{
|
||||||
|
fds_bits[fd] = 0x01;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void ZERO()
|
||||||
|
{
|
||||||
|
for (int i=0; i<1024; i++) {
|
||||||
|
fds_bits[i] = 0x00;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
92
packages/java/com/zerotier/libzt/ZTSocketAddress.java
Normal file
92
packages/java/com/zerotier/libzt/ZTSocketAddress.java
Normal file
@@ -0,0 +1,92 @@
|
|||||||
|
/*
|
||||||
|
* ZeroTier SDK - Network Virtualization Everywhere
|
||||||
|
* Copyright (C) 2011-2018 ZeroTier, Inc. https://www.zerotier.com/
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
* --
|
||||||
|
*
|
||||||
|
* You can be released from the requirements of the license by purchasing
|
||||||
|
* a commercial license. Buying such a license is mandatory as soon as you
|
||||||
|
* develop commercial closed-source software that incorporates or links
|
||||||
|
* directly against ZeroTier software without disclosing the source code
|
||||||
|
* of your own application.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.zerotier.libzt;
|
||||||
|
|
||||||
|
import com.zerotier.libzt.ZeroTier;
|
||||||
|
|
||||||
|
import java.net.InetAddress;
|
||||||
|
|
||||||
|
// Designed to transport address information across the JNI boundary
|
||||||
|
public class ZTSocketAddress
|
||||||
|
{
|
||||||
|
public byte[] _ip6 = new byte[16];
|
||||||
|
public byte[] _ip4 = new byte[4];
|
||||||
|
|
||||||
|
public int _family;
|
||||||
|
public int _port; // Also reused for netmask or prefix
|
||||||
|
|
||||||
|
public ZTSocketAddress() {}
|
||||||
|
|
||||||
|
public ZTSocketAddress(String ipStr, int port)
|
||||||
|
{
|
||||||
|
if(ipStr.contains(":")) {
|
||||||
|
_family = ZeroTier.AF_INET6;
|
||||||
|
try {
|
||||||
|
InetAddress ip = InetAddress.getByName(ipStr);
|
||||||
|
_ip6 = ip.getAddress();
|
||||||
|
}
|
||||||
|
catch (Exception e) { }
|
||||||
|
}
|
||||||
|
else if(ipStr.contains(".")) {
|
||||||
|
_family = ZeroTier.AF_INET;
|
||||||
|
try {
|
||||||
|
InetAddress ip = InetAddress.getByName(ipStr);
|
||||||
|
_ip4 = ip.getAddress();
|
||||||
|
}
|
||||||
|
catch (Exception e) { }
|
||||||
|
}
|
||||||
|
_port = port;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getPort() { return _port; }
|
||||||
|
public int getNetmask() { return _port; }
|
||||||
|
public int getPrefix() { return _port; }
|
||||||
|
|
||||||
|
private String ipString()
|
||||||
|
{
|
||||||
|
if (_family == ZeroTier.AF_INET) {
|
||||||
|
try {
|
||||||
|
InetAddress inet = InetAddress.getByAddress(_ip4);
|
||||||
|
return "" + inet.getHostAddress();
|
||||||
|
} catch (Exception e) {
|
||||||
|
System.out.println(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (_family == ZeroTier.AF_INET6) {
|
||||||
|
try {
|
||||||
|
InetAddress inet = InetAddress.getByAddress(_ip6);
|
||||||
|
return "" + inet.getHostAddress();
|
||||||
|
} catch (Exception e) {
|
||||||
|
System.out.println(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
public String toString() { return ipString() + ":" + _port; }
|
||||||
|
public String toCIDR() { return ipString() + "/" + _port; }
|
||||||
|
}
|
||||||
82
packages/java/com/zerotier/libzt/ZeroTier.java
Normal file
82
packages/java/com/zerotier/libzt/ZeroTier.java
Normal file
@@ -0,0 +1,82 @@
|
|||||||
|
/*
|
||||||
|
* ZeroTier SDK - Network Virtualization Everywhere
|
||||||
|
* Copyright (C) 2011-2018 ZeroTier, Inc. https://www.zerotier.com/
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
* --
|
||||||
|
*
|
||||||
|
* You can be released from the requirements of the license by purchasing
|
||||||
|
* a commercial license. Buying such a license is mandatory as soon as you
|
||||||
|
* develop commercial closed-source software that incorporates or links
|
||||||
|
* directly against ZeroTier software without disclosing the source code
|
||||||
|
* of your own application.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.zerotier.libzt;
|
||||||
|
|
||||||
|
import java.net.*;
|
||||||
|
|
||||||
|
public class ZeroTier {
|
||||||
|
|
||||||
|
public static int AF_INET = 2;
|
||||||
|
public static int AF_INET6 = 30;
|
||||||
|
public static int SOCK_STREAM = 1;
|
||||||
|
public static int SOCK_DGRAM = 2;
|
||||||
|
public static int O_APPEND = 1024;
|
||||||
|
public static int O_NONBLOCK = 2048;
|
||||||
|
public static int O_ASYNC = 8192;
|
||||||
|
public static int O_DIRECT = 65536;
|
||||||
|
public static int O_NOATIME = 262144;
|
||||||
|
public static int F_GETFL = 3;
|
||||||
|
public static int F_SETFL = 4;
|
||||||
|
|
||||||
|
public native void start(String homePath, boolean blocking);
|
||||||
|
public native void startjoin(String homePath, long nwid);
|
||||||
|
public native void stop();
|
||||||
|
public native boolean core_running();
|
||||||
|
public native boolean stack_running();
|
||||||
|
public native boolean ready();
|
||||||
|
public native int join(long nwid);
|
||||||
|
public native int leave(long nwid);
|
||||||
|
public native String get_path();
|
||||||
|
public native long get_node_id();
|
||||||
|
public native int get_num_assigned_addresses(long nwid);
|
||||||
|
public native boolean get_address_at_index(long nwid, int index, ZTSocketAddress addr);
|
||||||
|
public native boolean has_address(long nwid);
|
||||||
|
public native boolean get_address(long nwid, int address_family, ZTSocketAddress addr);
|
||||||
|
public native void get_6plane_addr(long nwid, long nodeId, ZTSocketAddress addr);
|
||||||
|
public native void get_rfc4193_addr(long nwid, long nodeId, ZTSocketAddress addr);
|
||||||
|
|
||||||
|
public native int socket(int family, int type, int protocol);
|
||||||
|
public native int connect(int fd, ZTSocketAddress addr);
|
||||||
|
public native int bind(int fd, ZTSocketAddress addr);
|
||||||
|
public native int listen(int fd, int backlog);
|
||||||
|
public native int accept(int fd, ZTSocketAddress addr);
|
||||||
|
public native int accept4(int fd, String addr, int port);
|
||||||
|
public native int close(int fd);
|
||||||
|
public native int setsockopt(int fd, int level, int optname, int optval, int optlen);
|
||||||
|
public native int getsockopt(int fd, int level, int optname, int optval, int optlen);
|
||||||
|
public native int sendto(int fd, byte[] buf, int flags, ZTSocketAddress addr);
|
||||||
|
public native int send(int fd, byte[] buf, int flags);
|
||||||
|
public native int recv(int fd, byte[] buf, int flags);
|
||||||
|
public native int recvfrom(int fd, byte[] buf, int flags, ZTSocketAddress addr);
|
||||||
|
public native int read(int fd, byte[] buf);
|
||||||
|
public native int write(int fd, byte[] buf);
|
||||||
|
public native int shutdown(int fd, int how);
|
||||||
|
public native boolean getsockname(int fd, ZTSocketAddress addr);
|
||||||
|
public native int getpeername(int fd, ZTSocketAddress addr);
|
||||||
|
public native int fcntl(int sock, int cmd, int flag);
|
||||||
|
public native int select(int nfds, ZTFDSet readfds, ZTFDSet writefds, ZTFDSet exceptfds, int timeout_sec, int timeout_usec);
|
||||||
|
}
|
||||||
6
packages/module.modulemap
Normal file
6
packages/module.modulemap
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
framework module zt {
|
||||||
|
umbrella header "Xcode-Bridging-Header.h"
|
||||||
|
|
||||||
|
export *
|
||||||
|
module * { export * }
|
||||||
|
}
|
||||||
37
packages/package.sh
Executable file
37
packages/package.sh
Executable file
@@ -0,0 +1,37 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
PROJNAME="zt"
|
||||||
|
LIBNAME="lib"$PROJNAME
|
||||||
|
LIBZT_VERSION="1.2.0"
|
||||||
|
LIBZT_REVISION="1"
|
||||||
|
ZT_CORE_VERSION="1.2.12"
|
||||||
|
FILENAME_PREFIX=${LIBNAME}"-"${LIBZT_VERSION}"r"${LIBZT_REVISION}
|
||||||
|
|
||||||
|
STAGING_DIR=$(pwd)/staging
|
||||||
|
STAGING_DEBUG_DIR=$(pwd)/staging/debug
|
||||||
|
STAGING_RELEASE_DIR=$(pwd)/staging/release
|
||||||
|
FINISHED_PRODUCTS_DIR=$(pwd)/products
|
||||||
|
|
||||||
|
# Clean before zipping
|
||||||
|
find . -type f \( -name '*.DS_Store' -o -name 'thumbs.db' \) -delete
|
||||||
|
|
||||||
|
# Emit a README file
|
||||||
|
echo $'ZeroTier Manual: https://www.zerotier.com/manual.shtml\n
|
||||||
|
Other Downloads: https://www.zerotier.com/download.shtml
|
||||||
|
\nlibzt Repo: https://github.com/zerotier/libzt' > ${STAGING_DIR}/README.md
|
||||||
|
|
||||||
|
# Package everything together
|
||||||
|
# (debug)
|
||||||
|
PRODUCT_FILENAME=${FILENAME_PREFIX}-debug.tar.gz
|
||||||
|
echo "Making: " ${FINISHED_PRODUCTS_DIR}/${PRODUCT_FILENAME}
|
||||||
|
cd ${STAGING_DEBUG_DIR}
|
||||||
|
tar --exclude=${PRODUCT_FILENAME} -zcvf ${PRODUCT_FILENAME} .
|
||||||
|
mv *.tar.gz ${FINISHED_PRODUCTS_DIR}
|
||||||
|
cd -
|
||||||
|
# (release)
|
||||||
|
PRODUCT_FILENAME=${FILENAME_PREFIX}-release.tar.gz
|
||||||
|
echo "Making: " ${FINISHED_PRODUCTS_DIR}/${PRODUCT_FILENAME}
|
||||||
|
cd ${STAGING_RELEASE_DIR}
|
||||||
|
tar --exclude=${PRODUCT_FILENAME} -zcvf ${PRODUCT_FILENAME} .
|
||||||
|
mv *.tar.gz ${FINISHED_PRODUCTS_DIR}
|
||||||
|
cd -
|
||||||
Reference in New Issue
Block a user