make-bsd.mk 4.6 KB

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