ZeroTierOne/make-mac.mk

109 lines
4.4 KiB
Makefile
Raw Normal View History

ifeq ($(origin CC),default)
CC=$(shell if [ -e /usr/bin/clang ]; then echo clang; else echo gcc; fi)
endif
ifeq ($(origin CXX),default)
CXX=$(shell if [ -e /usr/bin/clang++ ]; then echo clang++; else echo g++; fi)
endif
INCLUDES=
DEFS=
LIBS=
ARCH_FLAGS=-arch x86_64
include objects.mk
OBJS+=osdep/OSXEthernetTap.o ext/lz4/lz4.o ext/json-parser/json.o ext/http-parser/http_parser.o
2014-01-10 05:15:00 +00:00
# Disable codesign since open source users will not have ZeroTier's certs
CODESIGN=echo
PRODUCTSIGN=echo
CODESIGN_APP_CERT=
CODESIGN_INSTALLER_CERT=
# Build with libminiupnpc by default for Mac -- desktops/laptops almost always want this
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
ZT_USE_MINIUPNPC=1
CODESIGN=codesign
PRODUCTSIGN=productsign
CODESIGN_APP_CERT="Developer ID Application: ZeroTier Networks LLC (8ZD9JUCZ4V)"
CODESIGN_INSTALLER_CERT="Developer ID Installer: ZeroTier Networks LLC (8ZD9JUCZ4V)"
endif
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)
2016-06-03 00:04:15 +00:00
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=\"2.0\" -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
# Debug mode -- dump trace output, build binary with -g
ifeq ($(ZT_DEBUG),1)
DEFS+=-DZT_TRACE
CFLAGS+=-Wall -g -pthread $(INCLUDES) $(DEFS)
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)
else
2016-06-15 22:46:57 +00:00
CFLAGS?=-Ofast -fstack-protector-strong
CFLAGS+=$(ARCH_FLAGS) -Wall -flto -fPIE -pthread -mmacosx-version-min=10.7 -DNDEBUG -Wno-unused-private-field $(INCLUDES) $(DEFS)
STRIP=strip
endif
2016-08-16 21:07:11 +00:00
CXXFLAGS=$(CFLAGS) -mmacosx-version-min=10.7 -std=c++11 -stdlib=libc++
all: one
one: $(OBJS) service/OneService.o one.o
$(CXX) $(CXXFLAGS) -o zerotier-one $(OBJS) service/OneService.o one.o $(LIBS)
$(STRIP) zerotier-one
ln -sf zerotier-one zerotier-idtool
ln -sf zerotier-one zerotier-cli
$(CODESIGN) -f -s $(CODESIGN_APP_CERT) zerotier-one
$(CODESIGN) -vvv zerotier-one
cli: FORCE
2016-08-16 21:05:17 +00:00
$(CXX) $(CXXFLAGS) -o zerotier cli/zerotier.cpp osdep/OSUtils.cpp node/InetAddress.cpp node/Utils.cpp node/Salsa20.cpp node/Identity.cpp node/SHA512.cpp node/C25519.cpp -lcurl
$(STRIP) zerotier
selftest: $(OBJS) selftest.o
$(CXX) $(CXXFLAGS) -o zerotier-selftest selftest.o $(OBJS) $(LIBS)
$(STRIP) zerotier-selftest
# Requires Packages: http://s.sudre.free.fr/Software/Packages/about.html
mac-dist-pkg: FORCE
2015-06-02 18:59:05 +00:00
packagesbuild "ext/installfiles/mac/ZeroTier One.pkgproj"
rm -f "ZeroTier One Signed.pkg"
$(PRODUCTSIGN) --sign $(CODESIGN_INSTALLER_CERT) "ZeroTier One.pkg" "ZeroTier One Signed.pkg"
if [ -f "ZeroTier One Signed.pkg" ]; then mv -f "ZeroTier One Signed.pkg" "ZeroTier One.pkg"; fi
2013-12-17 06:30:37 +00:00
# For ZeroTier, Inc. to build official signed packages
official: FORCE
make clean
VERSION 1.1.6: route management, default route override, new IPv6 mode for Docker, and more! Version 1.1.6 contains several significant improvements for use in complex network environments along with some minor bug fixes and improvements to path stability and dead path detection. ROUTE MANAGEMENT AND FULL TUNNEL SUPPORT 1.1.6 is the first version of ZeroTier One to permit "full tunnel" (default route override) operation on Linux, Mac, and Windows. This allows all Internet traffic to be tunneled through ZeroTier while allowing ZeroTier peer-to-peer traffic to continue to use the physical interface. 1.1.6 also brings route management support and permissions settings for local networks to control whether networks are allowed to modify the routing table or override default routing. This is currently considered a beta/experimental feature and must be enabled via the command line interface. Route management and default route override requires support at the network controller. When my.zerotier.com is updated and ready, we will post more information and testing instructions at: https://www.zerotier.com/community HIGHLY SCALABLE CONTAINER NETWORKING 1.1.6 also brings a new multicast-free (NDP emulated) IPv6 private addressing scheme called "6plane." 6plane provides each host with a private IPv6 /80 and routes *all* IPv6 traffic for this subnet to the host via transparent NDP emulation. This /80 can then be assigned to Docker or other container/VM managers to assign a network-wide IPv6 /128 to every container. Since NDP is emulated and multicast isn't needed, this system can scale to millions of containers or more on a single backplane network with a high degree of efficiency and reliability. 6plane also requires controller support. Look for it at my.zerotier.com once we have upgraded our core infrastructure and web UIs. (All hosts must be running 1.1.6 for 6plane to work properly. Other IPv6 addresses or addressing modes are not affected and normal IPv6 NDP will continue to work alongside 6plane in the same network.) OTHER CHANGES * Upgraded bundled miniupnpc, libnatpmp, and http-parser. * New Debian and RPM packaging that is closer to compliance with distribution guidelines, and a new Dockerized Linux package build system in linux-build-farm/ that can build every package on actual images of the correct distribution. * Improvements to dead path detection. * IPv6 now uses keepalive because a significant number of stateful IPv6 edge routers have very short timeouts (30 seconds or less!). * Significant performance improvements to network controllers under high load. * Enable -fstack-protector-strong for better stack canary (security) support in binaries. Note that this may require newer gcc/g++ or clang. COMING SOON The next version of ZeroTier One should have a new Mac UI. It's a system tray app that looks and behaves a lot like the Mac WiFi pulldown menu. We'll also be adding GUI support for default route and route management options and other new features. Shortly after that we plan on adding full OpenFlow-like SDN rules engine support to the ZeroTier core, making our planetary Ethernet switch a fully manageable smart switch and enabling sophisticated security and flow rule management.
2016-06-29 22:53:46 +00:00
make ZT_OFFICIAL_RELEASE=1 -j 4 one
make ZT_OFFICIAL_RELEASE=1 mac-dist-pkg
clean:
rm -rf *.dSYM build-* *.pkg *.dmg *.o node/*.o controller/*.o service/*.o osdep/*.o ext/http-parser/*.o ext/lz4/*.o ext/json-parser/*.o $(OBJS) zerotier-one zerotier-idtool zerotier-selftest zerotier-cli zerotier ZeroTierOneInstaller-* mkworld doc/node_modules
2016-06-09 00:45:25 +00:00
distclean: clean
rm -rf doc/node_modules
# For those building from source -- installs signed binary tap driver in system ZT home
install-mac-tap: FORCE
mkdir -p /Library/Application\ Support/ZeroTier/One
rm -rf /Library/Application\ Support/ZeroTier/One/tap.kext
cp -R ext/bin/tap-mac/tap.kext /Library/Application\ Support/ZeroTier/One
chown -R root:wheel /Library/Application\ Support/ZeroTier/One/tap.kext
FORCE: