make-bsd.mk 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. # This requires GNU make, which is typically "gmake" on BSD systems
  2. INCLUDES=
  3. DEFS=
  4. LIBS=
  5. include objects.mk
  6. ONE_OBJS+=osdep/BSDEthernetTap.o ext/http-parser/http_parser.o
  7. # Build with address sanitization library for advanced debugging (clang)
  8. ifeq ($(ZT_SANITIZE),1)
  9. SANFLAGS+=-fsanitize=address -DASAN_OPTIONS=symbolize=1
  10. endif
  11. # "make debug" is a shortcut for this
  12. ifeq ($(ZT_DEBUG),1)
  13. CFLAGS+=-Wall -g -pthread $(INCLUDES) $(DEFS)
  14. LDFLAGS+=
  15. STRIP=echo
  16. ZT_TRACE=1
  17. # The following line enables optimization for the crypto code, since
  18. # C25519 in particular is almost UNUSABLE in heavy testing without it.
  19. node/Salsa20.o node/SHA512.o node/C25519.o node/Poly1305.o: CFLAGS = -Wall -O2 -g -pthread $(INCLUDES) $(DEFS)
  20. else
  21. CFLAGS?=-O3 -fstack-protector
  22. CFLAGS+=-Wall -fPIE -fvisibility=hidden -fstack-protector -pthread $(INCLUDES) -DNDEBUG $(DEFS)
  23. LDFLAGS+=-pie -Wl,-z,relro,-z,now
  24. STRIP=strip --strip-all
  25. endif
  26. ifeq ($(ZT_TRACE),1)
  27. DEFS+=-DZT_TRACE
  28. endif
  29. # Determine system build architecture from compiler target
  30. CC_MACH=$(shell $(CC) -dumpmachine | cut -d '-' -f 1)
  31. ZT_ARCHITECTURE=999
  32. ifeq ($(CC_MACH),x86_64)
  33. ZT_ARCHITECTURE=2
  34. ZT_USE_X64_ASM_SALSA2012=1
  35. endif
  36. ifeq ($(CC_MACH),amd64)
  37. ZT_ARCHITECTURE=2
  38. ZT_USE_X64_ASM_SALSA2012=1
  39. endif
  40. ifeq ($(CC_MACH),i386)
  41. ZT_ARCHITECTURE=1
  42. endif
  43. ifeq ($(CC_MACH),i686)
  44. ZT_ARCHITECTURE=1
  45. endif
  46. ifeq ($(CC_MACH),arm)
  47. ZT_ARCHITECTURE=3
  48. override DEFS+=-DZT_NO_TYPE_PUNNING
  49. ZT_USE_ARM32_NEON_ASM_SALSA2012=1
  50. endif
  51. ifeq ($(CC_MACH),armel)
  52. ZT_ARCHITECTURE=3
  53. override DEFS+=-DZT_NO_TYPE_PUNNING
  54. ZT_USE_ARM32_NEON_ASM_SALSA2012=1
  55. endif
  56. ifeq ($(CC_MACH),armhf)
  57. ZT_ARCHITECTURE=3
  58. override DEFS+=-DZT_NO_TYPE_PUNNING
  59. ZT_USE_ARM32_NEON_ASM_SALSA2012=1
  60. endif
  61. ifeq ($(CC_MACH),armv6)
  62. ZT_ARCHITECTURE=3
  63. override DEFS+=-DZT_NO_TYPE_PUNNING -DZT_NO_UNALIGNED_ACCESS
  64. ZT_USE_ARM32_NEON_ASM_SALSA2012=1
  65. endif
  66. ifeq ($(CC_MACH),armv6zk)
  67. ZT_ARCHITECTURE=3
  68. override DEFS+=-DZT_NO_TYPE_PUNNING
  69. ZT_USE_ARM32_NEON_ASM_SALSA2012=1
  70. endif
  71. ifeq ($(CC_MACH),armv6kz)
  72. ZT_ARCHITECTURE=3
  73. override DEFS+=-DZT_NO_TYPE_PUNNING
  74. ZT_USE_ARM32_NEON_ASM_SALSA2012=1
  75. endif
  76. ifeq ($(CC_MACH),armv7)
  77. ZT_ARCHITECTURE=3
  78. override DEFS+=-DZT_NO_TYPE_PUNNING -DZT_AES_NO_ACCEL -DZT_NO_UNALIGNED_ACCESS
  79. ZT_USE_ARM32_NEON_ASM_SALSA2012=1
  80. endif
  81. ifeq ($(CC_MACH),arm64)
  82. ZT_ARCHITECTURE=4
  83. override DEFS+=-DZT_NO_TYPE_PUNNING -march=armv8-a+crypto
  84. endif
  85. ifeq ($(CC_MACH),aarch64)
  86. ZT_ARCHITECTURE=4
  87. override DEFS+=-DZT_NO_TYPE_PUNNING -march=armv8-a+crypto
  88. endif
  89. ifeq ($(CC_MACH),mipsel)
  90. ZT_ARCHITECTURE=5
  91. override DEFS+=-DZT_NO_TYPE_PUNNING
  92. endif
  93. ifeq ($(CC_MACH),mips)
  94. ZT_ARCHITECTURE=5
  95. override DEFS+=-DZT_NO_TYPE_PUNNING
  96. endif
  97. ifeq ($(CC_MACH),mips64)
  98. ZT_ARCHITECTURE=6
  99. override DEFS+=-DZT_NO_TYPE_PUNNING
  100. endif
  101. ifeq ($(CC_MACH),mips64el)
  102. ZT_ARCHITECTURE=6
  103. override DEFS+=-DZT_NO_TYPE_PUNNING
  104. endif
  105. # Fail if system architecture could not be determined
  106. ifeq ($(ZT_ARCHITECTURE),999)
  107. ERR=$(error FATAL: architecture could not be determined from $(CC) -dumpmachine: $CC_MACH)
  108. .PHONY: err
  109. err: ; $(ERR)
  110. endif
  111. # Build faster crypto on some targets
  112. ifeq ($(ZT_USE_X64_ASM_SALSA2012),1)
  113. override DEFS+=-DZT_USE_X64_ASM_SALSA2012
  114. override CORE_OBJS+=ext/x64-salsa2012-asm/salsa2012.o
  115. endif
  116. ifeq ($(ZT_USE_ARM32_NEON_ASM_SALSA2012),1)
  117. override DEFS+=-DZT_USE_ARM32_NEON_ASM_SALSA2012
  118. override CORE_OBJS+=ext/arm32-neon-salsa2012-asm/salsa2012.o
  119. override ASFLAGS+=-meabi=5
  120. override LDFLAGS+=-Wl,-z,notext
  121. endif
  122. override DEFS+=-DZT_BUILD_PLATFORM=$(ZT_BUILD_PLATFORM) -DZT_BUILD_ARCHITECTURE=$(ZT_ARCHITECTURE) -DZT_SOFTWARE_UPDATE_DEFAULT="\"disable\""
  123. CXXFLAGS+=$(CFLAGS) -std=c++11 #-D_GLIBCXX_USE_C99 -D_GLIBCXX_USE_C99_MATH -D_GLIBCXX_USE_C99_MATH_TR1
  124. all: one
  125. one: $(CORE_OBJS) $(ONE_OBJS) one.o
  126. $(CXX) $(CXXFLAGS) $(LDFLAGS) -o zerotier-one $(CORE_OBJS) $(ONE_OBJS) one.o $(LIBS)
  127. $(STRIP) zerotier-one
  128. ln -sf zerotier-one zerotier-idtool
  129. ln -sf zerotier-one zerotier-cli
  130. zerotier-one: one
  131. zerotier-idtool: one
  132. zerotier-cli: one
  133. libzerotiercore.a: $(CORE_OBJS)
  134. ar rcs libzerotiercore.a $(CORE_OBJS)
  135. ranlib libzerotiercore.a
  136. core: libzerotiercore.a
  137. selftest: $(CORE_OBJS) $(ONE_OBJS) selftest.o
  138. $(CXX) $(CXXFLAGS) $(LDFLAGS) -o zerotier-selftest selftest.o $(CORE_OBJS) $(ONE_OBJS) $(LIBS)
  139. $(STRIP) zerotier-selftest
  140. zerotier-selftest: selftest
  141. clean:
  142. rm -rf *.a *.o node/*.o controller/*.o osdep/*.o service/*.o ext/http-parser/*.o build-* zerotier-one zerotier-idtool zerotier-selftest zerotier-cli $(ONE_OBJS) $(CORE_OBJS)
  143. debug: FORCE
  144. $(MAKE) -j ZT_DEBUG=1
  145. install: one
  146. rm -f /usr/local/sbin/zerotier-one
  147. cp zerotier-one /usr/local/sbin
  148. ln -sf /usr/local/sbin/zerotier-one /usr/local/sbin/zerotier-cli
  149. ln -sf /usr/local/sbin/zerotier-one /usr/local/bin/zerotier-idtool
  150. uninstall: FORCE
  151. rm -rf /usr/local/sbin/zerotier-one /usr/local/sbin/zerotier-cli /usr/local/bin/zerotier-idtool /var/db/zerotier-one/zerotier-one.port /var/db/zerotier-one/zerotier-one.pid /var/db/zerotier-one/iddb.d
  152. FORCE: