From 9f776adc692c8d74b2de42974aeb6009c8be5539 Mon Sep 17 00:00:00 2001 From: Joseph Henry Date: Mon, 4 Jul 2016 13:42:44 -0500 Subject: [PATCH] xcode framework build updates --- .../project.pbxproj | 4 ++ .../UserInterfaceState.xcuserstate | Bin 57932 -> 59317 bytes .../Example_OSX_App.xcodeproj/project.pbxproj | 5 +++ .../UserInterfaceState.xcuserstate | Bin 24066 -> 31006 bytes .../Example_OSX-Bridging-Header.h | 35 ++++++++++++++++++ .../Example_OSX_App/ViewController.swift | 1 - make-linux.mk | 2 +- make-mac.mk | 2 +- src/SDK.h | 3 +- src/SDK_Debug.c | 9 ++++- src/SDK_ServiceSetup.cpp | 9 ++--- src/SDK_Sockets.c | 2 +- 12 files changed, 60 insertions(+), 12 deletions(-) create mode 100644 integrations/apple/example_app/Example_OSX_App/Example_OSX-Bridging-Header.h diff --git a/integrations/apple/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/project.pbxproj b/integrations/apple/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/project.pbxproj index b3e3921..71005f5 100644 --- a/integrations/apple/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/project.pbxproj +++ b/integrations/apple/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/project.pbxproj @@ -1492,6 +1492,8 @@ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; OTHER_CFLAGS = ( "-DSDK", + "-DSDK_SERVICE", + "-DSDK_BUNDLED", "-DSDK_DEBUG", "-D__XCODE__", ); @@ -1520,6 +1522,8 @@ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; OTHER_CFLAGS = ( "-DSDK", + "-DSDK_SERVICE", + "-DSDK_BUNDLED", "-DSDK_DEBUG", "-D__XCODE__", ); diff --git a/integrations/apple/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/project.xcworkspace/xcuserdata/Joseph.xcuserdatad/UserInterfaceState.xcuserstate b/integrations/apple/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/project.xcworkspace/xcuserdata/Joseph.xcuserdatad/UserInterfaceState.xcuserstate index 61649db0ba61a61cc5ed1e6baa1f0cabec62b67c..d06a6891836554fb54be8f074bcaa17981146d15 100644 GIT binary patch delta 29515 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 qTLJ1v|1kN@w(IsXMF5gmR2 diff --git a/integrations/apple/example_app/Example_OSX_App.xcodeproj/project.pbxproj b/integrations/apple/example_app/Example_OSX_App.xcodeproj/project.pbxproj index 98a6af0..2c165e8 100644 --- a/integrations/apple/example_app/Example_OSX_App.xcodeproj/project.pbxproj +++ b/integrations/apple/example_app/Example_OSX_App.xcodeproj/project.pbxproj @@ -31,6 +31,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 7C3504EE1D2AD9D4007EBD64 /* Example_OSX-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Example_OSX-Bridging-Header.h"; sourceTree = ""; }; 7CA571031D1B0D9500720883 /* ZeroTierSDK_OSX.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ZeroTierSDK_OSX.framework; path = ../../../build/OSX_app_framework/Debug/ZeroTierSDK_OSX.framework; sourceTree = ""; }; 7CA571081D1B1DCB00720883 /* ZeroTierSDK_OSX.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ZeroTierSDK_OSX.h; path = ../../ZeroTierSDK_Apple/ZeroTierSDK_OSX/ZeroTierSDK_OSX.h; sourceTree = ""; }; 7CFCB42D1D1AFEE800D3E66C /* Example_OSX_App.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Example_OSX_App.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -80,6 +81,7 @@ 7CFCB4341D1AFEE800D3E66C /* Assets.xcassets */, 7CFCB4361D1AFEE800D3E66C /* Main.storyboard */, 7CFCB4391D1AFEE800D3E66C /* Info.plist */, + 7C3504EE1D2AD9D4007EBD64 /* Example_OSX-Bridging-Header.h */, ); path = Example_OSX_App; sourceTree = ""; @@ -263,10 +265,12 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; COMBINE_HIDPI_IMAGES = YES; + HEADER_SEARCH_PATHS = "$(SRCROOT)/../../../src"; INFOPLIST_FILE = Example_OSX_App/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "zerotier.Example-OSX-App"; PRODUCT_NAME = "$(TARGET_NAME)"; + "SWIFT_OBJC_BRIDGING_HEADER[arch=*]" = "Example_OSX_App/Example_OSX-Bridging-Header.h"; }; name = Debug; }; @@ -275,6 +279,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; COMBINE_HIDPI_IMAGES = YES; + HEADER_SEARCH_PATHS = "$(SRCROOT)/../../../src"; INFOPLIST_FILE = Example_OSX_App/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "zerotier.Example-OSX-App"; diff --git a/integrations/apple/example_app/Example_OSX_App.xcodeproj/project.xcworkspace/xcuserdata/Joseph.xcuserdatad/UserInterfaceState.xcuserstate b/integrations/apple/example_app/Example_OSX_App.xcodeproj/project.xcworkspace/xcuserdata/Joseph.xcuserdatad/UserInterfaceState.xcuserstate index 093efafd38d98f24ae6dba758363cb5f7516d7cd..3405433dd9c804eb9329434304b5daa1cbdf43ed 100644 GIT binary patch literal 31006 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 QhuQu_5%%9#-|gr8A4ZUbS^xk5 diff --git a/integrations/apple/example_app/Example_OSX_App/Example_OSX-Bridging-Header.h b/integrations/apple/example_app/Example_OSX_App/Example_OSX-Bridging-Header.h new file mode 100644 index 0000000..811b2ff --- /dev/null +++ b/integrations/apple/example_app/Example_OSX_App/Example_OSX-Bridging-Header.h @@ -0,0 +1,35 @@ +// +// Use this file to import your target's public headers that you would like to expose to Swift. +// + +#ifndef Example_OSX_Bridging_Header_h +#define Example_OSX_Bridging_Header_h + +int start_intercept(); +int start_service(const char * path); +int join_network(const char * nwid); +void disable_intercept(); +void enable_intercept(); + +#include +#include "SDK_Signatures.h" + +void zt_join_network(const char *nwid); +void zt_leave_network(const char *nwid); + +// Direct Call ZT API +// These functions will provide direct access to ZT-enabled sockets with no hassle +int zts_connect(CONNECT_SIG); +int zt_bind(BIND_SIG); +int zt_accept(ACCEPT_SIG); +int zt_listen(LISTEN_SIG); +int zts_socket(SOCKET_SIG); +int zt_setsockopt(SETSOCKOPT_SIG); +int zt_getsockopt(GETSOCKOPT_SIG); +int zt_close(CLOSE_SIG); +int zt_getsockname(GETSOCKNAME_SIG); + + +#endif /* Example_OSX_Bridging_Header_h */ + + diff --git a/integrations/apple/example_app/Example_OSX_App/ViewController.swift b/integrations/apple/example_app/Example_OSX_App/ViewController.swift index edb4991..b951878 100644 --- a/integrations/apple/example_app/Example_OSX_App/ViewController.swift +++ b/integrations/apple/example_app/Example_OSX_App/ViewController.swift @@ -7,7 +7,6 @@ // import Cocoa -i class ViewController: NSViewController { diff --git a/make-linux.mk b/make-linux.mk index 125e77e..f836ed5 100644 --- a/make-linux.mk +++ b/make-linux.mk @@ -70,7 +70,7 @@ remove_only_intermediates: linux_shared_lib: remove_only_intermediates $(OBJS) mkdir -p build/linux_shared_lib - $(CXX) $(CXXFLAGS) $(LDFLAGS) $(DEFS) -DZT_SDK -DZT_ONE_NO_ROOT_CHECK -Iext/lwip/src/include -Iext/lwip/src/include/ipv4 -Iext/lwip/src/include/ipv6 -Izerotierone/osdep -Izerotierone/node -Isrc -o build/zerotier-sdk-service $(OBJS) zerotierone/service/OneService.cpp src/SDK_EthernetTap.cpp src/SDK_Proxy.cpp zerotierone/one.cpp -x c src/SDK_RPC.c $(LDLIBS) -ldl + $(CXX) $(CXXFLAGS) $(LDFLAGS) $(DEFS) -DSDK -DZT_ONE_NO_ROOT_CHECK -Iext/lwip/src/include -Iext/lwip/src/include/ipv4 -Iext/lwip/src/include/ipv6 -Izerotierone/osdep -Izerotierone/node -Isrc -o build/zerotier-sdk-service $(OBJS) zerotierone/service/OneService.cpp src/SDK_EthernetTap.cpp src/SDK_Proxy.cpp zerotierone/one.cpp -x c src/SDK_RPC.c $(LDLIBS) -ldl # Build liblwip.so which must be placed in ZT home for zerotier-netcon-service to work make -f make-liblwip.mk $(LWIP_FLAGS) # Use gcc not clang to build standalone intercept library since gcc is typically used for libc and we want to ensure maximal ABI compatibility diff --git a/make-mac.mk b/make-mac.mk index 3940dd6..bcbc1e9 100644 --- a/make-mac.mk +++ b/make-mac.mk @@ -83,7 +83,7 @@ remove_only_intermediates: osx_shared_lib: remove_only_intermediates $(OBJS) mkdir -p build/osx_shared_lib # Need to selectively rebuild one.cpp and OneService.cpp with ZT_SERVICE_NETCON and ZT_ONE_NO_ROOT_CHECK defined, and also NetconEthernetTap - $(CXX) $(CXXFLAGS) $(LDFLAGS) -DZT_SDK -DZT_ONE_NO_ROOT_CHECK -Iext/lwip/src/include -Iext/lwip/src/include/ipv4 -Iext/lwip/src/include/ipv6 -Izerotierone/osdep -Izerotierone/node -Isrc -o build/zerotier-sdk-service $(OBJS) zerotierone/service/OneService.cpp src/SDK_EthernetTap.cpp src/SDK_Proxy.cpp zerotierone/one.cpp -x c src/SDK_RPC.c $(LDLIBS) -ldl + $(CXX) $(CXXFLAGS) $(LDFLAGS) -DSDK -DZT_ONE_NO_ROOT_CHECK -Iext/lwip/src/include -Iext/lwip/src/include/ipv4 -Iext/lwip/src/include/ipv6 -Izerotierone/osdep -Izerotierone/node -Isrc -o build/zerotier-sdk-service $(OBJS) zerotierone/service/OneService.cpp src/SDK_EthernetTap.cpp src/SDK_Proxy.cpp zerotierone/one.cpp -x c src/SDK_RPC.c $(LDLIBS) -ldl # Build liblwip.so which must be placed in ZT home for zerotier-sdk-service to work make -f make-liblwip.mk # Use gcc not clang to build standalone intercept library since gcc is typically used for libc and we want to ensure maximal ABI compatibility diff --git a/src/SDK.h b/src/SDK.h index cb86e82..f9d9ab7 100644 --- a/src/SDK.h +++ b/src/SDK.h @@ -40,8 +40,9 @@ extern "C" { #define INTERCEPT_DISABLED 222 extern void load_symbols(); -void zt_init_rpc(char *path, char *nwid); +extern void zt_init_rpc(const char *path, const char *nwid); extern char *api_netpath; +extern char *debug_logfile; #if defined(__linux__) extern int (*realaccept4)(ACCEPT4_SIG); diff --git a/src/SDK_Debug.c b/src/SDK_Debug.c index 5c97150..3701dfc 100644 --- a/src/SDK_Debug.c +++ b/src/SDK_Debug.c @@ -42,6 +42,9 @@ #include #include +#ifndef SDK_DEBUG_H +#define SDK_DEBUG_H + // Set during make (e.g. make SDK_DEBUG=2) #define DEBUG_LEVEL 5 @@ -51,7 +54,7 @@ #define MSG_DEBUG 4 // Information which is only useful to someone debugging #define MSG_DEBUG_EXTRA 5 // If nothing in your world makes sense -char *debug_logfile = (char*)0; +//char *debug_logfile = (char*)0; void dwr(int level, const char *fmt, ... ); void dwr(int level, const char *fmt, ... ) @@ -78,6 +81,7 @@ void dwr(int level, const char *fmt, ... ) if(!debug_logfile) { // Try to get logfile from env debug_logfile = getenv("ZT_SDK_LOGFILE"); } + /* if(debug_logfile) { FILE *file = fopen(debug_logfile,"a"); fprintf(file, "%s [tid=%7d] ", timestring, tid); @@ -85,6 +89,7 @@ void dwr(int level, const char *fmt, ... ) fclose(file); va_end(ap); } + */ #endif va_start(ap, fmt); fprintf(stderr, "%s [tid=%7d] ", timestring, tid); @@ -116,4 +121,6 @@ extern "C" { } // extern "C" #endif +#endif + #endif \ No newline at end of file diff --git a/src/SDK_ServiceSetup.cpp b/src/SDK_ServiceSetup.cpp index ad9dfa0..aa775aa 100644 --- a/src/SDK_ServiceSetup.cpp +++ b/src/SDK_ServiceSetup.cpp @@ -47,6 +47,8 @@ #include "OSUtils.hpp" #include "SDK.h" +void zt_init_rpc(const char * path, const char * nwid); + #include "SDK_Debug.h" #include "SDK_ServiceSetup.hpp" @@ -57,7 +59,6 @@ pthread_key_t thr_id_key; static ZeroTier::OneService *volatile zt1Service; std::string homeDir; std::string netDir; -char *api_netpath; #ifdef __cplusplus extern "C" { @@ -134,10 +135,8 @@ extern "C" { JNIEXPORT void JNICALL Java_ZeroTier_SDK_startOneService(JNIEnv *env, jobject thisObj, jstring path) { //char * path; homeDir = (*env)->GetStringUTFChars(env, path, NULL); - #else - void *startOneService(void *thread_id, string path) { - homeDir = path; + void *startOneService(void *thread_id) { #endif #if defined(SDK_BUNDLED) @@ -159,7 +158,6 @@ extern "C" { #if defined(__UNITY_3D__) && !defined(__ANDROID__) && !defined(__IOS__) // Unity3D on a non-mobile platform homeDir = "" + current_dir; // homeDir shall be current dir - // homeDir = "/Users/Joseph/utest2/"; #endif #if defined(__ANDROID__) @@ -177,7 +175,6 @@ extern "C" { } LOGV("homeDir = %s", homeDir.c_str()); - // Where network .conf files will be stored netDir = homeDir + "/networks.d"; diff --git a/src/SDK_Sockets.c b/src/SDK_Sockets.c index 8c0e327..1f835e2 100644 --- a/src/SDK_Sockets.c +++ b/src/SDK_Sockets.c @@ -83,7 +83,7 @@ int (*realclose)(CLOSE_SIG); // ------------------------------------------------------------------------------ // Assembles (and/or) sets the RPC path for communication with the ZeroTier service - void zt_init_rpc(char *path, char *nwid) + void zt_init_rpc(const char *path, const char *nwid) { dwr(MSG_DEBUG, "zt_init_rpc\n"); // Just double check we have