Rework makefile cpu feature detection code for the BSDs
parent
9d1f7f7539
commit
e3c8e69ba3
87
GNUmakefile
87
GNUmakefile
|
|
@ -2,6 +2,8 @@
|
||||||
##### System Attributes and Programs #####
|
##### System Attributes and Programs #####
|
||||||
###########################################################
|
###########################################################
|
||||||
|
|
||||||
|
# Must use Bash
|
||||||
|
SHELL = bash
|
||||||
# If needed
|
# If needed
|
||||||
TMPDIR ?= /tmp
|
TMPDIR ?= /tmp
|
||||||
# Used for ARMv7 and NEON.
|
# Used for ARMv7 and NEON.
|
||||||
|
|
@ -75,8 +77,8 @@ endif
|
||||||
|
|
||||||
# Fixup SunOS
|
# Fixup SunOS
|
||||||
ifeq ($(IS_SUN),1)
|
ifeq ($(IS_SUN),1)
|
||||||
IS_X86 := $(shell isainfo -k 2>/dev/null | grep -i -c "i386")
|
IS_X86 := $(shell isainfo -k 2>/dev/null | $(EGREP) -i -c "i386")
|
||||||
IS_X64 := $(shell isainfo -k 2>/dev/null | grep -i -c "amd64")
|
IS_X64 := $(shell isainfo -k 2>/dev/null | $(EGREP) -i -c "amd64")
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# Newlib needs _XOPEN_SOURCE=700 for signals
|
# Newlib needs _XOPEN_SOURCE=700 for signals
|
||||||
|
|
@ -199,20 +201,35 @@ endif # -DCRYPTOPP_DISABLE_SSSE3
|
||||||
endif # -DCRYPTOPP_DISABLE_ASM
|
endif # -DCRYPTOPP_DISABLE_ASM
|
||||||
endif # CXXFLAGS
|
endif # CXXFLAGS
|
||||||
|
|
||||||
SSSE3_FLAG = $(shell echo | $(CXX) -x c++ $(CXXFLAGS) -mssse3 -dM -E - 2>/dev/null | grep -i -c -q __SSSE3__ && echo "-mssse3")
|
ifeq ($(findstring -DCRYPTOPP_DISABLE_SSSE3,$(CXXFLAGS)),)
|
||||||
ARIA_FLAG = $(SSSE3_FLAG)
|
HAVE_SSSE3 = $(shell echo | $(CXX) -x c++ $(CXXFLAGS) -mssse3 -dM -E - 2>/dev/null | $(EGREP) -i -c __SSSE3__)
|
||||||
|
ifeq ($(HAVE_SSSE3),1)
|
||||||
|
SSSE3_FLAG = -mssse3
|
||||||
|
endif
|
||||||
ifeq ($(findstring -DCRYPTOPP_DISABLE_SSE4,$(CXXFLAGS)),)
|
ifeq ($(findstring -DCRYPTOPP_DISABLE_SSE4,$(CXXFLAGS)),)
|
||||||
SSE42_FLAG = $(shell echo | $(CXX) -x c++ $(CXXFLAGS) -msse4.2 -dM -E - 2>/dev/null | grep -i -c -q __SSE4_2__ && echo "-msse4.2")
|
HAVE_SSE4 = $(shell echo | $(CXX) -x c++ $(CXXFLAGS) -msse4.2 -dM -E - 2>/dev/null | $(EGREP) -i -c __SSE4_2__)
|
||||||
|
ifeq ($(HAVE_SSE4),1)
|
||||||
|
BLAKE2_FLAG = -msse4.2
|
||||||
|
CRC_FLAG = -msse4.2
|
||||||
|
endif
|
||||||
ifeq ($(findstring -DCRYPTOPP_DISABLE_AESNI,$(CXXFLAGS)),)
|
ifeq ($(findstring -DCRYPTOPP_DISABLE_AESNI,$(CXXFLAGS)),)
|
||||||
GCM_FLAG = $(shell echo | $(CXX) -x c++ $(CXXFLAGS) -mssse3 -mpclmul -dM -E - 2>/dev/null | grep -i -c -q __PCLMUL__ && echo "-mssse3 -mpclmul")
|
HAVE_CLMUL = $(shell echo | $(CXX) -x c++ $(CXXFLAGS) -mssse3 -mpclmul -dM -E - 2>/dev/null | $(EGREP) -i -c __PCLMUL__ )
|
||||||
AES_FLAG = $(shell echo | $(CXX) -x c++ $(CXXFLAGS) -msse4.1 -maes -dM -E - 2>/dev/null | grep -i -c -q __AES__ && echo "-msse4.1 -maes")
|
ifeq ($(HAVE_CLMUL),1)
|
||||||
|
GCM_FLAG = -mssse3 -mpclmul
|
||||||
|
endif
|
||||||
|
HAVE_AES = $(shell echo | $(CXX) -x c++ $(CXXFLAGS) -msse4.1 -maes -dM -E - 2>/dev/null | $(EGREP) -i -c __AES__)
|
||||||
|
ifeq ($(HAVE_AES),1)
|
||||||
|
AES_FLAG = -msse4.1 -maes
|
||||||
|
endif
|
||||||
ifeq ($(findstring -DCRYPTOPP_DISABLE_SHA,$(CXXFLAGS)),)
|
ifeq ($(findstring -DCRYPTOPP_DISABLE_SHA,$(CXXFLAGS)),)
|
||||||
SHA_FLAG = $(shell echo | $(CXX) -x c++ $(CXXFLAGS) -msse4.2 -msha -dM -E - 2>/dev/null | grep -i -c -q __SHA__ && echo "-msse4.2 -msha")
|
HAVE_SHA = $(shell echo | $(CXX) -x c++ $(CXXFLAGS) -msse4.2 -msha -dM -E - 2>/dev/null | $(EGREP) -i -c __SHA__)
|
||||||
BLAKE2_FLAG = $(SSE42_FLAG)
|
ifeq ($(HAVE_SHA),1)
|
||||||
CRC_FLAG = $(SSE42_FLAG)
|
SHA_FLAG = -msse4.2 -msha
|
||||||
endif
|
|
||||||
endif
|
|
||||||
endif
|
endif
|
||||||
|
endif # -DCRYPTOPP_DISABLE_SHA
|
||||||
|
endif # -DCRYPTOPP_DISABLE_AESNI
|
||||||
|
endif # -DCRYPTOPP_DISABLE_SSE4
|
||||||
|
endif # -DCRYPTOPP_DISABLE_SSSE3
|
||||||
|
|
||||||
# BEGIN_NATIVE_ARCH
|
# BEGIN_NATIVE_ARCH
|
||||||
# Guard use of -march=native (or -m{32|64} on some platforms)
|
# Guard use of -march=native (or -m{32|64} on some platforms)
|
||||||
|
|
@ -304,23 +321,32 @@ endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifeq ($(IS_NEON),1)
|
ifeq ($(IS_NEON),1)
|
||||||
NEON_FLAG = $(shell echo | $(CXX) -x c++ $(CXXFLAGS) -march=armv7-a -mfloat-abi=$(FP_ABI) -mfpu=neon -dM -E - 2>/dev/null | grep -i -c -q __ARM_NEON && echo "-march=armv7-a -mfloat-abi=$(FP_ABI) -mfpu=neon")
|
HAVE_NEON = $(shell echo | $(CXX) -x c++ $(CXXFLAGS) -march=armv7-a -mfloat-abi=$(FP_ABI) -mfpu=neon -dM -E - 2>/dev/null | $(EGREP) -i -c __ARM_NEON)
|
||||||
GCM_FLAG = $(NEON_FLAG)
|
ifeq ($(HAVE_NEON),1)
|
||||||
ARIA_FLAG = $(NEON_FLAG)
|
NEON_FLAG = -march=armv7-a -mfloat-abi=$(FP_ABI) -mfpu=neon
|
||||||
BLAKE2_FLAG = $(NEON_FLAG)
|
GCM_FLAG = -march=armv7-a -mfloat-abi=$(FP_ABI) -mfpu=neon
|
||||||
|
ARIA_FLAG = -march=armv7-a -mfloat-abi=$(FP_ABI) -mfpu=neon
|
||||||
|
BLAKE2_FLAG = -march=armv7-a -mfloat-abi=$(FP_ABI) -mfpu=neon
|
||||||
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifeq ($(IS_ARMV8),1)
|
ifeq ($(IS_ARMV8),1)
|
||||||
ARMV8A_NEON_FLAG = $(shell echo | $(CXX) -x c++ $(CXXFLAGS) -march=armv8-a -dM -E - 2>/dev/null | grep -i -c -q __ARM_NEON && echo "-march=armv8-a")
|
HAVE_NEON = $(shell echo | $(CXX) -x c++ $(CXXFLAGS) -march=armv8-a -dM -E - 2>/dev/null | $(EGREP) -i -c __ARM_NEON)
|
||||||
ARMV8A_CRC_FLAG = $(shell echo | $(CXX) -x c++ $(CXXFLAGS) -march=armv8-a+crc -dM -E - 2>/dev/null | grep -i -c -q __ARM_FEATURE_CRC32 && echo "-march=armv8-a+crc")
|
ifeq ($(HAVE_NEON),1)
|
||||||
ARMV8A_CRYPTO_FLAG = $(shell echo | $(CXX) -x c++ $(CXXFLAGS) -march=armv8-a+crypto -dM -E - 2>/dev/null | grep -i -c -q __ARM_FEATURE_CRYPTO && echo "-march=armv8-a+crypto")
|
ARIA_FLAG = -march=armv8-a
|
||||||
CRC_FLAG = $(ARMV8A_CRC_FLAG)
|
BLAKE2_FLAG = -march=armv8-a
|
||||||
AES_FLAG = $(ARMV8A_CRYPTO_FLAG)
|
NEON_FLAG = -march=armv8-a
|
||||||
GCM_FLAG = $(ARMV8A_CRYPTO_FLAG)
|
endif
|
||||||
SHA_FLAG = $(ARMV8A_CRYPTO_FLAG)
|
HAVE_CRC = $(shell echo | $(CXX) -x c++ $(CXXFLAGS) -march=armv8-a+crc -dM -E - 2>/dev/null | $(EGREP) -i -c __ARM_FEATURE_CRC32)
|
||||||
ARIA_FLAG = $(ARMV8A_NEON_FLAG)
|
ifeq ($(HAVE_NEON),1)
|
||||||
BLAKE2_FLAG = $(ARMV8A_NEON_FLAG)
|
CRC_FLAG = -march=armv8-a+crc
|
||||||
NEON_FLAG = $(ARMV8A_NEON_FLAG)
|
endif
|
||||||
|
HAVE_CRYPTO = $(shell echo | $(CXX) -x c++ $(CXXFLAGS) -march=armv8-a+crypto -dM -E - 2>/dev/null | $(EGREP) -i -c __ARM_FEATURE_CRYPTO)
|
||||||
|
ifeq ($(HAVE_NEON),1)
|
||||||
|
AES_FLAG = -march=armv8-a+crypto
|
||||||
|
GCM_FLAG = -march=armv8-a+crypto
|
||||||
|
SHA_FLAG = -march=armv8-a+crypto
|
||||||
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
endif # IS_X86
|
endif # IS_X86
|
||||||
|
|
@ -365,16 +391,11 @@ ifneq ($(IS_DARWIN),0)
|
||||||
AR = libtool
|
AR = libtool
|
||||||
ARFLAGS = -static -o
|
ARFLAGS = -static -o
|
||||||
CXX ?= c++
|
CXX ?= c++
|
||||||
ifeq ($(IS_GCC_29),1)
|
|
||||||
CXXFLAGS += -fno-coalesce-templates -fno-coalesce-static-vtables
|
|
||||||
LDLIBS += -lstdc++
|
|
||||||
LDFLAGS += -flat_namespace -undefined suppress -m
|
|
||||||
endif
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# Add -errtags=yes to get the name for a warning suppression
|
# Add -errtags=yes to get the name for a warning suppression
|
||||||
ifneq ($(SUN_COMPILER),0) # override flags for CC Sun C++ compiler
|
ifneq ($(SUN_COMPILER),0) # override flags for CC Sun C++ compiler
|
||||||
IS_64 := $(shell isainfo -b 2>/dev/null | grep -i -c "64")
|
IS_64 := $(shell isainfo -b 2>/dev/null | $(EGREP) -i -c "64")
|
||||||
ifeq ($(IS_64),1)
|
ifeq ($(IS_64),1)
|
||||||
CXXFLAGS += -m64
|
CXXFLAGS += -m64
|
||||||
else ifeq ($(IS_64),0)
|
else ifeq ($(IS_64),0)
|
||||||
|
|
@ -651,7 +672,7 @@ sources: adhoc.cpp
|
||||||
DOCUMENT_DIRECTORY := ref$(LIB_VER)
|
DOCUMENT_DIRECTORY := ref$(LIB_VER)
|
||||||
# Directory Doxygen uses (specified in Doygen config file)
|
# Directory Doxygen uses (specified in Doygen config file)
|
||||||
ifeq ($(wildcard Doxyfile),Doxyfile)
|
ifeq ($(wildcard Doxyfile),Doxyfile)
|
||||||
DOXYGEN_DIRECTORY := $(strip $(shell $(EGREP) "OUTPUT_DIRECTORY" Doxyfile | grep -v "\#" | cut -d "=" -f 2))
|
DOXYGEN_DIRECTORY := $(strip $(shell $(EGREP) "OUTPUT_DIRECTORY" Doxyfile | $(EGREP) -v "\#" | cut -d "=" -f 2))
|
||||||
endif
|
endif
|
||||||
# Default directory (in case its missing in the config file)
|
# Default directory (in case its missing in the config file)
|
||||||
ifeq ($(strip $(DOXYGEN_DIRECTORY)),)
|
ifeq ($(strip $(DOXYGEN_DIRECTORY)),)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue