Team Fortress 2 Source Code as on 22/4/2020
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

186 lines
6.7 KiB

  1. CXXFLAGS ?= -DNDEBUG -g2 -Os -fPIC -pipe
  2. # The following options reduce code size, but breaks link or makes link very slow on some systems
  3. # CXXFLAGS += -ffunction-sections -fdata-sections
  4. # LDFLAGS += -Wl,--gc-sections
  5. ARFLAGS = -cr # ar needs the dash on OpenBSD
  6. RANLIB ?= ranlib
  7. CP = cp
  8. MKDIR = mkdir
  9. EGREP = egrep
  10. CHMOD = chmod
  11. CLANG_COMPILER = $(shell $(CXX) --version 2>&1 | $(EGREP) -i -c "clang")
  12. IS_X86=0
  13. IS_LINUX=0
  14. IS_MINGW=0
  15. IS_DARWIN=0
  16. UNAME=CrossCompile
  17. # Default prefix for make install
  18. ifeq ($(PREFIX),)
  19. PREFIX = /usr/local
  20. endif
  21. # Sadly, we can't actually use GCC_PRAGMA_AWARE because of GCC bug 53431.
  22. # Its a shame because GCC has so much to offer by the way of analysis.
  23. # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=53431
  24. ifneq ($(CLANG_COMPILER),0)
  25. CXXFLAGS += -Wall
  26. endif
  27. # iOS cross-compile configuration. Works in conjunction with IS_CROSS_COMPILE.
  28. # See http://www.cryptopp.com/wiki/iOS_(Command_Line).
  29. ifeq ($(IS_IOS),1)
  30. CXX = clang++
  31. CXXFLAGS += -DCRYPTOPP_DISABLE_ASM $(IOS_FLAGS)
  32. CXXFLAGS += -arch $(IOS_ARCH) -isysroot $(IOS_SYSROOT)
  33. CXXFLAGS += -stdlib=libc++
  34. AR = libtool
  35. ARFLAGS = -static -o
  36. endif
  37. # Android cross-compile configuration. Works in conjunction with IS_CROSS_COMPILE.
  38. # See http://www.cryptopp.com/wiki/Android_(Command_Line).
  39. ifeq ($(IS_ANDROID),1)
  40. # CPP, CXX, AR, RANLIB, LD, etc are set in 'setenv-android.sh'
  41. CXXFLAGS += -DCRYPTOPP_DISABLE_ASM $(ANDROID_FLAGS)
  42. CXXFLAGS += --sysroot=$(ANDROID_SYSROOT) -I$(ANDROID_STL_INC)
  43. LDLIBS += $(ANDROID_STL_LIB)
  44. endif
  45. # ARM embedded cross-compile configuration. Works in conjunction with IS_CROSS_COMPILE.
  46. # See http://www.cryptopp.com/wiki/ARM_Embedded_(Command_Line)
  47. # and http://www.cryptopp.com/wiki/ARM_Embedded_(Bare Metal).
  48. ifeq ($(IS_ARM_EMBEDDED),1)
  49. # CPP, CXX, AR, RANLIB, LD, etc are set in 'setenv-embedded.sh'
  50. CXXFLAGS += -DCRYPTOPP_DISABLE_ASM $(ARM_EMBEDDED_FLAGS)
  51. CXXFLAGS += --sysroot=$(ARM_EMBEDDED_SYSROOT)
  52. endif
  53. # List cryptlib.cpp first in an attempt to tame C++ static initialization problems
  54. SRCS := cryptlib.cpp cpu.cpp $(filter-out cryptlib.cpp cpu.cpp pch.cpp simple.cpp winpipes.cpp cryptlib_bds.cpp,$(wildcard *.cpp))
  55. # List of objects with crytlib.o at the first index position
  56. OBJS := $(SRCS:.cpp=.o)
  57. # test.o needs to be after bench.o for cygwin 1.1.4 (possible ld bug?)
  58. TESTOBJS := bench.o bench2.o test.o validat1.o validat2.o validat3.o adhoc.o datatest.o regtest.o fipsalgt.o dlltest.o
  59. LIBOBJS := $(filter-out $(TESTOBJS),$(OBJS))
  60. # List cryptlib.cpp first in an attempt to tame C++ static initialization problems
  61. DLLSRCS := cryptlib.cpp cpu.cpp algebra.cpp algparam.cpp asn.cpp basecode.cpp cbcmac.cpp channels.cpp des.cpp dessp.cpp dh.cpp dll.cpp dsa.cpp ec2n.cpp eccrypto.cpp ecp.cpp eprecomp.cpp files.cpp filters.cpp fips140.cpp fipstest.cpp gf2n.cpp gfpcrypt.cpp hex.cpp hmac.cpp integer.cpp iterhash.cpp misc.cpp modes.cpp modexppc.cpp mqueue.cpp nbtheory.cpp oaep.cpp osrng.cpp pch.cpp pkcspad.cpp pubkey.cpp queue.cpp randpool.cpp rdtables.cpp rijndael.cpp rng.cpp rsa.cpp sha.cpp simple.cpp skipjack.cpp strciphr.cpp trdlocal.cpp
  62. DLLOBJS := $(DLLSRCS:.cpp=.export.o)
  63. # Import lib testing
  64. LIBIMPORTOBJS := $(LIBOBJS:.o=.import.o)
  65. TESTIMPORTOBJS := $(TESTOBJS:.o=.import.o)
  66. DLLTESTOBJS := dlltest.dllonly.o
  67. all: cryptest.exe
  68. ifneq ($(IS_DARWIN),0)
  69. static: libcryptopp.a
  70. shared dynamic dylib: libcryptopp.dylib
  71. else
  72. static: libcryptopp.a
  73. shared dynamic: libcryptopp.so
  74. endif
  75. test: cryptest.exe
  76. ./cryptest.exe v
  77. .PHONY: clean
  78. clean:
  79. -$(RM) cryptest.exe dlltest.exe libcryptopp.a libcryptopp.so libcryptopp.dylib cryptopp.dll libcryptopp.dll.a libcryptopp.import.a cryptest.import.exe ct
  80. -$(RM) adhoc.cpp.o adhoc.cpp.proto.o $(LIBOBJS) $(TESTOBJS) $(DLLOBJS) $(LIBIMPORTOBJS) $(TESTIMPORTOBJS) $(DLLTESTOBJS)
  81. ifneq ($(wildcard *.dSYM),)
  82. -$(RM) -r cryptest.exe.dSYM dlltest.exe.dSYM
  83. endif
  84. .PHONY: distclean
  85. distclean: clean
  86. -$(RM) adhoc.cpp adhoc.cpp.copied GNUmakefile.deps cryptopp$(LIB_VER).diff cryptopp$(LIB_VER).zip *.o *.ii *.s
  87. .PHONY: install
  88. install:
  89. $(MKDIR) -p $(PREFIX)/include/cryptopp $(PREFIX)/lib $(PREFIX)/bin
  90. -$(CP) *.h $(PREFIX)/include/cryptopp
  91. -$(CHMOD) 755 $(PREFIX)/include/cryptopp
  92. -$(CHMOD) 644 $(PREFIX)/include/cryptopp/*.h
  93. -$(CP) libcryptopp.a $(PREFIX)/lib
  94. -$(CHMOD) 644 $(PREFIX)/lib/libcryptopp.a
  95. -$(CP) cryptest.exe $(PREFIX)/bin
  96. -$(CHMOD) 755 $(PREFIX)/bin/cryptest.exe
  97. ifneq ($(IS_DARWIN),0)
  98. -$(CP) libcryptopp.dylib $(PREFIX)/lib
  99. -$(CHMOD) 755 $(PREFIX)/lib/libcryptopp.dylib
  100. else
  101. -$(CP) libcryptopp.so $(PREFIX)/lib
  102. -$(CHMOD) 755 $(PREFIX)/lib/libcryptopp.so
  103. endif
  104. .PHONY: remove uninstall
  105. remove uninstall:
  106. -$(RM) -r $(PREFIX)/include/cryptopp
  107. -$(RM) $(PREFIX)/lib/libcryptopp.a
  108. -$(RM) $(PREFIX)/bin/cryptest.exe
  109. ifneq ($(IS_DARWIN),0)
  110. -$(RM) $(PREFIX)/lib/libcryptopp.dylib
  111. else
  112. -$(RM) $(PREFIX)/lib/libcryptopp.so
  113. endif
  114. libcryptopp.a: public_service | $(LIBOBJS)
  115. $(AR) $(ARFLAGS) $@ $(LIBOBJS)
  116. $(RANLIB) $@
  117. libcryptopp.so: public_service | $(LIBOBJS)
  118. $(CXX) $(CXXFLAGS) -shared -o $@ $(LIBOBJS) $(LDFLAGS) $(LDLIBS)
  119. cryptest.exe: public_service | libcryptopp.a $(TESTOBJS)
  120. $(CXX) -o $@ $(CXXFLAGS) $(TESTOBJS) ./libcryptopp.a $(LDFLAGS) $(LDLIBS)
  121. adhoc.cpp: adhoc.cpp.proto
  122. ifeq ($(wildcard adhoc.cpp),)
  123. cp adhoc.cpp.proto adhoc.cpp
  124. else
  125. touch adhoc.cpp
  126. endif
  127. # Include dependencies, if present. You must issue `make deps` to create them.
  128. ifeq ($(wildcard GNUmakefile.deps),GNUmakefile.deps)
  129. -include GNUmakefile.deps
  130. endif # Dependencies
  131. %.o : %.cpp
  132. $(CXX) $(CXXFLAGS) -c $<
  133. GNUmakefile.deps:
  134. $(CXX) $(CXXFLAGS) -MM *.cpp > GNUmakefile.deps
  135. # Warn of potential configurations issues. This will go away after 5.6.3
  136. UNALIGNED_ACCESS := $(shell $(EGREP) -c "^[[:space:]]*//[[:space:]]*\#[[:space:]]*define[[:space:]]*CRYPTOPP_NO_UNALIGNED_DATA_ACCESS" config.h)
  137. NO_INIT_PRIORITY := $(shell $(EGREP) -c "^[[:space:]]*//[[:space:]]*\#[[:space:]]*define[[:space:]]*CRYPTOPP_INIT_PRIORITY" config.h)
  138. COMPATIBILITY_562 := $(shell $(EGREP) -c "^[[:space:]]*\#[[:space:]]*define[[:space:]]*CRYPTOPP_MAINTAIN_BACKWARDS_COMPATIBILITY_562" config.h)
  139. .PHONY: public_service
  140. public_service:
  141. ifneq ($(UNALIGNED_ACCESS),0)
  142. $(info WARNING: CRYPTOPP_NO_UNALIGNED_DATA_ACCESS is not defined in config.h.)
  143. endif
  144. ifneq ($(NO_INIT_PRIORITY),0)
  145. $(info WARNING: CRYPTOPP_INIT_PRIORITY is not defined in config.h.)
  146. endif
  147. ifneq ($(COMPATIBILITY_562),0)
  148. $(info WARNING: CRYPTOPP_MAINTAIN_BACKWARDS_COMPATIBILITY_562 is defined in config.h.)
  149. endif
  150. ifneq (x$(UNALIGNED_ACCESS)$(NO_INIT_PRIORITY)$(COMPATIBILITY_562),x000)
  151. $(info WARNING: You should make these changes in config.h, and not CXXFLAGS.)
  152. $(info WARNING: You can 'mv config.recommend config.h', but it breaks versioning.)
  153. $(info WARNING: See http://cryptopp.com/wiki/config.h for more details.)
  154. $(info )
  155. endif