From 0de93a39fa754f75caf4ded96dda8a0310a8b783 Mon Sep 17 00:00:00 2001 From: Joseph Henry Date: Wed, 22 Jun 2016 14:07:28 -0700 Subject: [PATCH] Updated OSX makefile --- .../UserInterfaceState.xcuserstate | Bin 55436 -> 55961 bytes integrations/README.md | 2 +- make-liblwip.mk | 3 +- make-mac.mk | 47 ++++--------- objects.mk | 62 +++++++++--------- src/SDK_EthernetTap.cpp | 8 +-- src/SDK_EthernetTap.hpp | 12 ++-- src/SDK_Proxy.cpp | 4 +- src/SDK_Sockets.c | 2 +- 9 files changed, 59 insertions(+), 81 deletions(-) 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 ac30b5d59ac5c327cd40947a50cfc9084e591ea6..9ace4052bc050d1f1a9b1906104025c99fad5d27 100644 GIT binary patch delta 18030 zcmaKT2S5}_)Alm6x-&arVI^lty1V2If+P_UGm44C9*RXTfye>;31syWLauR8@CXb#+gh(E%6rz&Y|T&CAbK5=eP=xcmiEi#WcV zrJUuQ6`a+aHJl($FlPfNj1$F)=1?3lCy|rHN#&$*vN+isnv>5d

qXa!NUsoGMNo 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 b8^6tEoBQx>Q3x9T<`oQofBS@4+dTds8o!2X delta 17571 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 diff --git a/integrations/README.md b/integrations/README.md index e81fde4..9f2ba87 100644 --- a/integrations/README.md +++ b/integrations/README.md @@ -21,7 +21,7 @@ For more support on these integrations, or if you'd like help creating a new int ##### OSX - [Embedding within an app](../docs/osx_zt_sdk.md) `make osx_app_framework` - - [Dynamic-linking into an app/service at runtime](../docs/osx_zt_sdk.md) `make ` + - [Dynamic-linking into an app/service at runtime](../docs/osx_zt_sdk.md) `make osx_shared_lib` - [Unity3D plugin](../docs/unity3d_osx_zt_sdk.md) `make osx_unity3d_bundle` *** diff --git a/make-liblwip.mk b/make-liblwip.mk index 83c28aa..a9d06d9 100644 --- a/make-liblwip.mk +++ b/make-liblwip.mk @@ -101,7 +101,8 @@ depend dep: .depend include .depend $(LWIPLIB): $(LWIPOBJS) - $(CC) -g -nostartfiles -shared -o $@ $^ + mkdir -p build/lwip + $(CC) -g -nostartfiles -shared -o build/lwip/$@ $^ .depend: $(LWIPFILES) $(CCDEP) $(CFLAGS) -MM $^ > .depend || rm -f .depend diff --git a/make-mac.mk b/make-mac.mk index 42b9e54..c8c8a30 100644 --- a/make-mac.mk +++ b/make-mac.mk @@ -11,7 +11,6 @@ LIBS= ARCH_FLAGS=-arch x86_64 include objects.mk -OBJS+=osdep/OSXEthernetTap.o # Disable codesign since open source users will not have ZeroTier's certs CODESIGN=echo @@ -19,9 +18,6 @@ PRODUCTSIGN=echo CODESIGN_APP_CERT= CODESIGN_INSTALLER_CERT= -# Build with libminiupnpc by default for Mac -ZT_USE_MINIUPNPC?=1 - # For internal use only -- signs everything with ZeroTier's developer cert ifeq ($(ZT_OFFICIAL_RELEASE),1) DEFS+=-DZT_OFFICIAL_RELEASE -DZT_AUTO_UPDATE @@ -32,27 +28,6 @@ ifeq ($(ZT_OFFICIAL_RELEASE),1) CODESIGN_INSTALLER_CERT="Developer ID Installer: ZeroTier Networks LLC (8ZD9JUCZ4V)" endif -# Build with ZT_ENABLE_CLUSTER=1 to build with cluster support -ifeq ($(ZT_ENABLE_CLUSTER),1) - DEFS+=-DZT_ENABLE_CLUSTER -endif - -ifeq ($(ZT_AUTO_UPDATE),1) - DEFS+=-DZT_AUTO_UPDATE -endif - -ifeq ($(ZT_USE_MINIUPNPC),1) - DEFS+=-DMACOSX -DZT_USE_MINIUPNPC -DMINIUPNP_STATICLIB -D_DARWIN_C_SOURCE -DMINIUPNPC_SET_SOCKET_TIMEOUT -DMINIUPNPC_GET_SRC_ADDR -D_BSD_SOURCE -D_DEFAULT_SOURCE -DOS_STRING=\"Darwin/15.0.0\" -DMINIUPNPC_VERSION_STRING=\"1.9\" -DUPNP_VERSION_STRING=\"UPnP/1.1\" -DENABLE_STRNATPMPERR - OBJS+=ext/libnatpmp/natpmp.o ext/libnatpmp/getgateway.o ext/miniupnpc/connecthostport.o ext/miniupnpc/igd_desc_parse.o ext/miniupnpc/minisoap.o ext/miniupnpc/minissdpc.o ext/miniupnpc/miniupnpc.o ext/miniupnpc/miniwget.o ext/miniupnpc/minixml.o ext/miniupnpc/portlistingparse.o ext/miniupnpc/receivedata.o ext/miniupnpc/upnpcommands.o ext/miniupnpc/upnpdev.o ext/miniupnpc/upnperrors.o ext/miniupnpc/upnpreplyparse.o osdep/PortMapper.o -endif - -# Build with ZT_ENABLE_NETWORK_CONTROLLER=1 to build with the Sqlite network controller -ifeq ($(ZT_ENABLE_NETWORK_CONTROLLER),1) - DEFS+=-DZT_ENABLE_NETWORK_CONTROLLER - LIBS+=-L/usr/local/lib -lsqlite3 - OBJS+=controller/SqliteNetworkController.o -endif - # Debug mode -- dump trace output, build binary with -g ifeq ($(ZT_DEBUG),1) DEFS+=-DZT_TRACE @@ -60,7 +35,7 @@ ifeq ($(ZT_DEBUG),1) STRIP=echo # The following line enables optimization for the crypto code, since # C25519 in particular is almost UNUSABLE in heavy testing without it. -ext/lz4/lz4.o node/Salsa20.o node/SHA512.o node/C25519.o node/Poly1305.o: CFLAGS = -Wall -O2 -g -pthread $(INCLUDES) $(DEFS) +#ext/lz4/lz4.o node/Salsa20.o node/SHA512.o node/C25519.o node/Poly1305.o: CFLAGS = -Wall -O2 -g -pthread $(INCLUDES) $(DEFS) else CFLAGS?=-Ofast -fstack-protector CFLAGS+=$(ARCH_FLAGS) -Wall -flto -fPIE -pthread -mmacosx-version-min=10.7 -DNDEBUG -Wno-unused-private-field $(INCLUDES) $(DEFS) @@ -98,23 +73,25 @@ android_jni_library: # Build library for Android Unity integrations -sdk: $(OBJS) +osx_shared_lib: $(OBJS) rm -f *.o # 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 -o zerotier-netcon-service $(OBJS) service/OneService.cpp netcon/NetconEthernetTap.cpp netcon/NetconProxy.cpp one.cpp -x c netcon/NetconRPC.c $(LDLIBS) -ldl + $(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 # Build netcon/liblwip.so which must be placed in ZT home for zerotier-netcon-service to work - cd netcon ; make -f make-liblwip.mk + 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 #cd netcon ; gcc $(DEFS) -O2 -Wall -std=c99 -fPIC -fno-common -dynamiclib -flat_namespace -DVERBOSE -D_GNU_SOURCE -DNETCON_INTERCEPT -I. -nostdlib -shared -o libztapi.so zt_api.c common.c RPC.c -ldl - cd netcon ; gcc $(DEFS) -O2 -Wall -std=c99 -fPIC -fno-common -dynamiclib -flat_namespace -DVERBOSE -D_GNU_SOURCE -DNETCON_INTERCEPT -I. -nostdlib -shared -o libztintercept.so NetconSockets.c Intercept.c NetconDebug.c NetconRPC.c -ldl + cd src ; gcc $(DEFS) -O2 -Wall -std=c99 -fPIC -fno-common -dynamiclib -flat_namespace -DVERBOSE -D_GNU_SOURCE -DNETCON_INTERCEPT -I. -I../zerotierone/node -nostdlib -shared -o libztintercept.so SDK_Sockets.c SDK_Intercept.c SDK_Debug.c SDK_RPC.c -ldl #cd netcon ; gcc $(DEFS) -O2 -Wall -std=c99 -fPIC -fno-common -dynamiclib -flat_namespace -DVERBOSE -D_GNU_SOURCE -DNETCON_INTERCEPT -I. -nostdlib -shared -o libztkq.so zt_api.c kq.c Intercept.c common.c RPC.c -ldl - cp netcon/libztintercept.so libztintercept.so - #cp netcon/libztapi.so libztapi.so - #cp netcon/libztkq.so libztkq.so - ln -sf zerotier-netcon-service zerotier-cli - ln -sf zerotier-netcon-service zerotier-idtool + mkdir -p build/osx_shared_lib + cp src/libztintercept.so build/osx_shared_lib/libztintercept.so + + ln -sf zerotier-sdk-service zerotier-cli + ln -sf zerotier-sdk-service zerotier-idtool clean: + rm -rf zerotier-cli zerotier-idtool + rm -rf build/* find . -type f -name '*.o' -delete find . -type f -name '*.so' -delete diff --git a/objects.mk b/objects.mk index d11e281..2c02cb1 100644 --- a/objects.mk +++ b/objects.mk @@ -1,32 +1,32 @@ OBJS=\ - ext/lz4/lz4.o \ - ext/json-parser/json.o \ - ext/http-parser/http_parser.o \ - node/C25519.o \ - node/CertificateOfMembership.o \ - node/Cluster.o \ - node/DeferredPackets.o \ - node/Dictionary.o \ - node/Identity.o \ - node/IncomingPacket.o \ - node/InetAddress.o \ - node/Multicaster.o \ - node/Network.o \ - node/NetworkConfig.o \ - node/Node.o \ - node/OutboundMulticast.o \ - node/Packet.o \ - node/Path.o \ - node/Peer.o \ - node/Poly1305.o \ - node/Salsa20.o \ - node/SelfAwareness.o \ - node/SHA512.o \ - node/Switch.o \ - node/Topology.o \ - node/Utils.o \ - osdep/BackgroundResolver.o \ - osdep/Http.o \ - osdep/OSUtils.o \ - service/ClusterGeoIpService.o \ - service/ControlPlane.o + zerotierone/ext/lz4/lz4.o \ + zerotierone/ext/json-parser/json.o \ + zerotierone/ext/http-parser/http_parser.o \ + zerotierone/node/C25519.o \ + zerotierone/node/CertificateOfMembership.o \ + zerotierone/node/Cluster.o \ + zerotierone/node/DeferredPackets.o \ + zerotierone/node/Dictionary.o \ + zerotierone/node/Identity.o \ + zerotierone/node/IncomingPacket.o \ + zerotierone/node/InetAddress.o \ + zerotierone/node/Multicaster.o \ + zerotierone/node/Network.o \ + zerotierone/node/NetworkConfig.o \ + zerotierone/node/Node.o \ + zerotierone/node/OutboundMulticast.o \ + zerotierone/node/Packet.o \ + zerotierone/node/Path.o \ + zerotierone/node/Peer.o \ + zerotierone/node/Poly1305.o \ + zerotierone/node/Salsa20.o \ + zerotierone/node/SelfAwareness.o \ + zerotierone/node/SHA512.o \ + zerotierone/node/Switch.o \ + zerotierone/node/Topology.o \ + zerotierone/node/Utils.o \ + zerotierone/osdep/BackgroundResolver.o \ + zerotierone/osdep/Http.o \ + zerotierone/osdep/OSUtils.o \ + zerotierone/service/ClusterGeoIpService.o \ + zerotierone/service/ControlPlane.o diff --git a/src/SDK_EthernetTap.cpp b/src/SDK_EthernetTap.cpp index e77d31a..68e0cf7 100644 --- a/src/SDK_EthernetTap.cpp +++ b/src/SDK_EthernetTap.cpp @@ -37,9 +37,9 @@ #include "SDK_EthernetTap.hpp" -#include "node/Utils.hpp" -#include "osdep/OSUtils.hpp" -#include "osdep/Phy.hpp" +#include "Utils.hpp" +#include "OSUtils.hpp" +#include "Phy.hpp" #include "SDK_LWIPStack.hpp" @@ -60,7 +60,7 @@ #include "SDK_Debug.c" #include "SDK_ServiceSetup.hpp" -#if !defined(__IOS__) && !defined(__ANDROID__) && !defined(__UNITY_3D__) && !defined(__APPLE__) +#if !defined(__IOS__) && !defined(__ANDROID__) && !defined(__UNITY_3D__) //&& !defined(__APPLE__) const ip_addr_t ip_addr_any = { IPADDR_ANY }; #endif diff --git a/src/SDK_EthernetTap.hpp b/src/SDK_EthernetTap.hpp index e1ae12c..b0f1526 100644 --- a/src/SDK_EthernetTap.hpp +++ b/src/SDK_EthernetTap.hpp @@ -37,12 +37,12 @@ #include #include -#include "node/Constants.hpp" -#include "node/MulticastGroup.hpp" -#include "node/Mutex.hpp" -#include "node/InetAddress.hpp" -#include "osdep/Thread.hpp" -#include "osdep/Phy.hpp" +#include "Constants.hpp" +#include "MulticastGroup.hpp" +#include "Mutex.hpp" +#include "InetAddress.hpp" +#include "Thread.hpp" +#include "Phy.hpp" #include "netif/etharp.h" diff --git a/src/SDK_Proxy.cpp b/src/SDK_Proxy.cpp index c0a8ccb..f2202b0 100644 --- a/src/SDK_Proxy.cpp +++ b/src/SDK_Proxy.cpp @@ -27,8 +27,8 @@ #include "SDK_Debug.h" #include "SDK_EthernetTap.hpp" -#include "osdep/Phy.hpp" -#include "node/Utils.hpp" +#include "Phy.hpp" +#include "Utils.hpp" #include #include diff --git a/src/SDK_Sockets.c b/src/SDK_Sockets.c index 4b50f9c..95c8144 100644 --- a/src/SDK_Sockets.c +++ b/src/SDK_Sockets.c @@ -70,7 +70,7 @@ #include "SDK_Signatures.h" #include "SDK_Debug.h" #include "SDK_RPC.h" -#include "node/Constants.hpp" // For Tap's MTU +#include "Constants.hpp" // For Tap's MTU void print_addr(struct sockaddr *addr); void dwr(int level, const char *fmt, ... );