GNUmakefile_update
authorLaszlo Boszormenyi (GCS) <gcs@debian.org>
Sat, 12 Feb 2022 09:39:14 +0000 (09:39 +0000)
committerLaszlo Boszormenyi (GCS) <gcs@debian.org>
Sat, 12 Feb 2022 09:39:14 +0000 (09:39 +0000)
Gbp-Pq: Name GNUmakefile_update.patch

GNUmakefile
GNUmakefile-cross
config_asm.h

index 6f630710688623cb973a1efe51abc26033a1703f..31bf6b365b4c57a56cb5aaaae226a3e992fb97b7 100644 (file)
@@ -1,4 +1,3 @@
-
 ###########################################################
 #####        System Attributes and Programs           #####
 ###########################################################
@@ -99,15 +98,15 @@ endif
 
 # Hack to skip CPU feature tests for some recipes
 DETECT_FEATURES ?= 1
-ifeq ($(findstring -DCRYPTOPP_DISABLE_ASM,$(CXXFLAGS)),-DCRYPTOPP_DISABLE_ASM)
+ifneq ($(findstring -DCRYPTOPP_DISABLE_ASM,$(CPPFLAGS)$(CXXFLAGS)),)
   DETECT_FEATURES := 0
-else ifeq ($(findstring clean,$(MAKECMDGOALS)),clean)
+else ifneq ($(findstring clean,$(MAKECMDGOALS)),)
   DETECT_FEATURES := 0
-else ifeq ($(findstring distclean,$(MAKECMDGOALS)),distclean)
+else ifneq ($(findstring distclean,$(MAKECMDGOALS)),)
   DETECT_FEATURES := 0
-else ifeq ($(findstring trim,$(MAKECMDGOALS)),trim)
+else ifneq ($(findstring trim,$(MAKECMDGOALS)),)
   DETECT_FEATURES := 0
-else ifeq ($(findstring zip,$(MAKECMDGOALS)),zip)
+else ifneq ($(findstring zip,$(MAKECMDGOALS)),)
   DETECT_FEATURES := 0
 endif
 
@@ -142,20 +141,23 @@ endif
 #####                General Variables                #####
 ###########################################################
 
-# Base CXXFLAGS used if the user did not specify them
+# Base CPPFLAGS and CXXFLAGS used if the user did not specify them
+ifeq ($(CPPFLAGS),)
+  CRYPTOPP_CPPFLAGS += -DNDEBUG
+endif
 ifeq ($(CXXFLAGS),)
   ifeq ($(SUN_COMPILER),1)
-    CRYPTOPP_CXXFLAGS += -DNDEBUG -g -xO3
+    CRYPTOPP_CXXFLAGS += -g -xO3
     ZOPT = -xO0
   else
-    CRYPTOPP_CXXFLAGS += -DNDEBUG -g2 -O3
+    CRYPTOPP_CXXFLAGS += -g2 -O3
     ZOPT = -O0
   endif
 endif
 
 # Fix CXX on Cygwin 1.1.4
 ifeq ($(CXX),gcc)
-CXX := g++
+  CXX := g++
 endif
 
 # On ARM we may compile aes_armv4.S though the CC compiler
@@ -202,11 +204,11 @@ endif
 # Original MinGW targets Win2k by default, but lacks proper Win2k support
 # if target Windows version is not specified, use Windows XP instead
 ifeq ($(IS_MINGW),1)
-ifeq ($(findstring -D_WIN32_WINNT,$(CXXFLAGS)),)
-ifeq ($(findstring -D_WIN32_WINDOWS,$(CXXFLAGS)),)
-ifeq ($(findstring -DWINVER,$(CXXFLAGS)),)
-ifeq ($(findstring -DNTDDI_VERSION,$(CXXFLAGS)),)
-  CRYPTOPP_CXXFLAGS += -D_WIN32_WINNT=0x0501
+ifeq ($(findstring -D_WIN32_WINNT,$(CPPFLAGS)$(CXXFLAGS)),)
+ifeq ($(findstring -D_WIN32_WINDOWS,$(CPPFLAGS)$(CXXFLAGS)),)
+ifeq ($(findstring -DWINVER,$(CPPFLAGS)$(CXXFLAGS)),)
+ifeq ($(findstring -DNTDDI_VERSION,$(CPPFLAGS)$(CXXFLAGS)),)
+  CRYPTOPP_CPPFLAGS += -D_WIN32_WINNT=0x0501
 endif # NTDDI_VERSION
 endif # WINVER
 endif # _WIN32_WINDOWS
@@ -218,8 +220,8 @@ TPROG = TestPrograms/test_newlib.cpp
 TOPT =
 HAVE_OPT = $(shell $(TCOMMAND) 2>&1 | wc -w)
 ifeq ($(strip $(HAVE_OPT)),0)
-  ifeq ($(findstring -D_XOPEN_SOURCE,$(CXXFLAGS)),)
-    CRYPTOPP_CXXFLAGS += -D_XOPEN_SOURCE=600
+  ifeq ($(findstring -D_XOPEN_SOURCE,$(CPPFLAGS)$(CXXFLAGS)),)
+    CRYPTOPP_CPPFLAGS += -D_XOPEN_SOURCE=600
   endif
 endif
 
@@ -283,7 +285,7 @@ ifeq ($(DETECT_FEATURES),1)
   endif
 
   ifeq ($(SSE2_FLAG),)
-    CRYPTOPP_CXXFLAGS += -DCRYPTOPP_DISABLE_ASM
+    CRYPTOPP_CPPFLAGS += -DCRYPTOPP_DISABLE_ASM
   endif
 
   # Need SSE2 or higher for these tests
@@ -392,33 +394,33 @@ ifeq ($(DETECT_FEATURES),1)
     endif
 
     ifeq ($(SSE3_FLAG),)
-      CRYPTOPP_CXXFLAGS += -DCRYPTOPP_DISABLE_SSE3
+      CRYPTOPP_CPPFLAGS += -DCRYPTOPP_DISABLE_SSE3
     else ifeq ($(SSSE3_FLAG),)
-      CRYPTOPP_CXXFLAGS += -DCRYPTOPP_DISABLE_SSSE3
+      CRYPTOPP_CPPFLAGS += -DCRYPTOPP_DISABLE_SSSE3
     else ifeq ($(SSE41_FLAG),)
-      CRYPTOPP_CXXFLAGS += -DCRYPTOPP_DISABLE_SSE4
+      CRYPTOPP_CPPFLAGS += -DCRYPTOPP_DISABLE_SSE4
     else ifeq ($(SSE42_FLAG),)
-      CRYPTOPP_CXXFLAGS += -DCRYPTOPP_DISABLE_SSE4
+      CRYPTOPP_CPPFLAGS += -DCRYPTOPP_DISABLE_SSE4
     endif
 
     ifneq ($(SSE42_FLAG),)
       # Unusual GCC/Clang on Macports. It assembles AES, but not CLMUL.
       # test_x86_clmul.s:15: no such instruction: 'pclmulqdq $0, %xmm1,%xmm0'
       ifeq ($(CLMUL_FLAG),)
-        CRYPTOPP_CXXFLAGS += -DCRYPTOPP_DISABLE_CLMUL
+        CRYPTOPP_CPPFLAGS += -DCRYPTOPP_DISABLE_CLMUL
       endif
       ifeq ($(AESNI_FLAG),)
-        CRYPTOPP_CXXFLAGS += -DCRYPTOPP_DISABLE_AESNI
+        CRYPTOPP_CPPFLAGS += -DCRYPTOPP_DISABLE_AESNI
       endif
 
       ifeq ($(AVX_FLAG),)
-        CRYPTOPP_CXXFLAGS += -DCRYPTOPP_DISABLE_AVX
+        CRYPTOPP_CPPFLAGS += -DCRYPTOPP_DISABLE_AVX
       else ifeq ($(AVX2_FLAG),)
-        CRYPTOPP_CXXFLAGS += -DCRYPTOPP_DISABLE_AVX2
+        CRYPTOPP_CPPFLAGS += -DCRYPTOPP_DISABLE_AVX2
       endif
       # SHANI independent of AVX per GH #1045
       ifeq ($(SHANI_FLAG),)
-        CRYPTOPP_CXXFLAGS += -DCRYPTOPP_DISABLE_SHANI
+        CRYPTOPP_CPPFLAGS += -DCRYPTOPP_DISABLE_SHANI
       endif
     endif
 
@@ -437,7 +439,7 @@ ifeq ($(DETECT_FEATURES),1)
     #TOPT =
     #HAVE_OPT = $(shell $(TCOMMAND) 2>&1 | wc -w)
     #ifneq ($(strip $(HAVE_OPT)),0)
-    #  CRYPTOPP_CXXFLAGS += -DCRYPTOPP_DISABLE_MIXED_ASM
+    #  CRYPTOPP_CPPFLAGS += -DCRYPTOPP_DISABLE_MIXED_ASM
     #endif
 
   # SSE2_FLAGS
@@ -453,13 +455,13 @@ ifneq ($(INTEL_COMPILER),0)
     # "internal error: backend signals" occurs on some x86 inline assembly with ICC 9 and
     # some x64 inline assembly with ICC 11.0. If you want to use Crypto++'s assembly code
     # with ICC, try enabling it on individual files
-    CRYPTOPP_CXXFLAGS += -DCRYPTOPP_DISABLE_ASM
+    CRYPTOPP_CPPFLAGS += -DCRYPTOPP_DISABLE_ASM
   endif
 endif
 
 # Allow use of "/" operator for GNU Assembler.
 #   http://sourceware.org/bugzilla/show_bug.cgi?id=4572
-ifeq ($(findstring -DCRYPTOPP_DISABLE_ASM,$(CXXFLAGS)),)
+ifeq ($(findstring -DCRYPTOPP_DISABLE_ASM,$(CPPFLAGS)$(CXXFLAGS)),)
   ifeq ($(IS_SUN)$(GCC_COMPILER),11)
     CRYPTOPP_CXXFLAGS += -Wa,--divide
   endif
@@ -473,6 +475,12 @@ endif
 ###########################################################
 
 ifneq ($(IS_ARM32),0)
+
+# No need for feature detection on this platform if NEON is disabled
+ifneq ($(findstring -DCRYPTOPP_DISABLE_ARM_NEON,$(CPPFLAGS)$(CXXFLAGS)),)
+  DETECT_FEATURES := 0
+endif
+
 ifeq ($(DETECT_FEATURES),1)
 
   # Clang needs an option to include <arm_neon.h>
@@ -507,7 +515,7 @@ ifeq ($(DETECT_FEATURES),1)
   endif
 
   ifeq ($(NEON_FLAG),)
-    CRYPTOPP_CXXFLAGS += -DCRYPTOPP_DISABLE_ASM
+    CRYPTOPP_CPPFLAGS += -DCRYPTOPP_DISABLE_ASM
   endif
 
 # DETECT_FEATURES
@@ -560,7 +568,7 @@ ifeq ($(DETECT_FEATURES),1)
   endif
 
   ifeq ($(ASIMD_FLAG),)
-    CRYPTOPP_CXXFLAGS += -DCRYPTOPP_DISABLE_ASM
+    CRYPTOPP_CPPFLAGS += -DCRYPTOPP_DISABLE_ASM
   endif
 
   ifneq ($(ASIMD_FLAG),)
@@ -570,7 +578,7 @@ ifeq ($(DETECT_FEATURES),1)
     ifeq ($(strip $(HAVE_OPT)),0)
       CRC_FLAG = -march=armv8-a+crc
     else
-      CRYPTOPP_CXXFLAGS += -DCRYPTOPP_DISABLE_ARM_CRC32
+      CRYPTOPP_CPPFLAGS += -DCRYPTOPP_DISABLE_ARM_CRC32
     endif
 
     TPROG = TestPrograms/test_arm_aes.cpp
@@ -579,7 +587,7 @@ ifeq ($(DETECT_FEATURES),1)
     ifeq ($(strip $(HAVE_OPT)),0)
       AES_FLAG = -march=armv8-a+crypto
     else
-      CRYPTOPP_CXXFLAGS += -DCRYPTOPP_DISABLE_ARM_AES
+      CRYPTOPP_CPPFLAGS += -DCRYPTOPP_DISABLE_ARM_AES
     endif
 
     TPROG = TestPrograms/test_arm_pmull.cpp
@@ -589,7 +597,7 @@ ifeq ($(DETECT_FEATURES),1)
       GCM_FLAG = -march=armv8-a+crypto
       GF2N_FLAG = -march=armv8-a+crypto
     else
-      CRYPTOPP_CXXFLAGS += -DCRYPTOPP_DISABLE_ARM_PMULL
+      CRYPTOPP_CPPFLAGS += -DCRYPTOPP_DISABLE_ARM_PMULL
     endif
 
     TPROG = TestPrograms/test_arm_sha1.cpp
@@ -598,7 +606,7 @@ ifeq ($(DETECT_FEATURES),1)
     ifeq ($(strip $(HAVE_OPT)),0)
       SHA_FLAG = -march=armv8-a+crypto
     else
-      CRYPTOPP_CXXFLAGS += -DCRYPTOPP_DISABLE_ARM_SHA1
+      CRYPTOPP_CPPFLAGS += -DCRYPTOPP_DISABLE_ARM_SHA1
     endif
 
     TPROG = TestPrograms/test_arm_sha256.cpp
@@ -607,7 +615,7 @@ ifeq ($(DETECT_FEATURES),1)
     ifeq ($(strip $(HAVE_OPT)),0)
       SHA_FLAG = -march=armv8-a+crypto
     else
-      CRYPTOPP_CXXFLAGS += -DCRYPTOPP_DISABLE_ARM_SHA2
+      CRYPTOPP_CPPFLAGS += -DCRYPTOPP_DISABLE_ARM_SHA2
     endif
 
     TPROG = TestPrograms/test_arm_sm3.cpp
@@ -617,8 +625,8 @@ ifeq ($(DETECT_FEATURES),1)
       SM3_FLAG = -march=armv8.4-a+sm3
       SM4_FLAG = -march=armv8.4-a+sm3
     else
-      #CRYPTOPP_CXXFLAGS += -DCRYPTOPP_DISABLE_ARM_SM3
-      #CRYPTOPP_CXXFLAGS += -DCRYPTOPP_DISABLE_ARM_SM4
+      #CRYPTOPP_CPPFLAGS += -DCRYPTOPP_DISABLE_ARM_SM3
+      #CRYPTOPP_CPPFLAGS += -DCRYPTOPP_DISABLE_ARM_SM4
     endif
 
     TPROG = TestPrograms/test_arm_sha3.cpp
@@ -627,7 +635,7 @@ ifeq ($(DETECT_FEATURES),1)
     ifeq ($(strip $(HAVE_OPT)),0)
       SHA3_FLAG = -march=armv8.4-a+sha3
     else
-      #CRYPTOPP_CXXFLAGS += -DCRYPTOPP_DISABLE_ARM_SHA3
+      #CRYPTOPP_CPPFLAGS += -DCRYPTOPP_DISABLE_ARM_SHA3
     endif
 
     TPROG = TestPrograms/test_arm_sha512.cpp
@@ -636,7 +644,7 @@ ifeq ($(DETECT_FEATURES),1)
     ifeq ($(strip $(HAVE_OPT)),0)
       SHA512_FLAG = -march=armv8.4-a+sha512
     else
-      #CRYPTOPP_CXXFLAGS += -DCRYPTOPP_DISABLE_ARM_SHA512
+      #CRYPTOPP_CPPFLAGS += -DCRYPTOPP_DISABLE_ARM_SHA512
     endif
 
   # ASIMD_FLAG
@@ -788,13 +796,13 @@ ifeq ($(DETECT_FEATURES),1)
   # Fixups for missing ISAs
 
   ifeq ($(ALTIVEC_FLAG),)
-    CRYPTOPP_CXXFLAGS += -DCRYPTOPP_DISABLE_ALTIVEC
+    CRYPTOPP_CPPFLAGS += -DCRYPTOPP_DISABLE_ALTIVEC
   else ifeq ($(POWER7_FLAG),)
-    CRYPTOPP_CXXFLAGS += -DCRYPTOPP_DISABLE_POWER7
+    CRYPTOPP_CPPFLAGS += -DCRYPTOPP_DISABLE_POWER7
   else ifeq ($(POWER8_FLAG),)
-    CRYPTOPP_CXXFLAGS += -DCRYPTOPP_DISABLE_POWER8
+    CRYPTOPP_CPPFLAGS += -DCRYPTOPP_DISABLE_POWER8
   #else ifeq ($(POWER9_FLAG),)
-  #  CRYPTOPP_CXXFLAGS += -DCRYPTOPP_DISABLE_POWER9
+  #  CRYPTOPP_CPPFLAGS += -DCRYPTOPP_DISABLE_POWER9
   endif
 
 # DETECT_FEATURES
@@ -919,7 +927,7 @@ endif
 # http://www.oracle.com/technetwork/server-storage/solaris/hwcap-modification-139536.html
 ifeq ($(IS_SUN)$(SUN_COMPILER),11)
   ifneq ($(IS_X86)$(IS_X64),00)
-    ifeq ($(findstring -DCRYPTOPP_DISABLE_ASM,$(CRYPTOPP_CXXFLAGS) $(CXXFLAGS)),)
+    ifeq ($(findstring -DCRYPTOPP_DISABLE_ASM,$(CPPFLAGS)$(CXXFLAGS)),)
       CRYPTOPP_LDFLAGS += -M cryptopp.mapfile
     endif  # No CRYPTOPP_DISABLE_ASM
   endif  # X86/X32/X64
@@ -941,7 +949,7 @@ SUN_CC10_BUGGY := $(shell $(CXX) -V 2>&1 | $(GREP) -c -E "CC: Sun .* 5\.10 .* (2
 ifneq ($(SUN_CC10_BUGGY),0)
 # -DCRYPTOPP_INCLUDE_VECTOR_CC is needed for Sun Studio 12u1 Sun C++ 5.10 SunOS_i386 128229-02 2009/09/21
 # and was fixed in May 2010. Remove it if you get "already had a body defined" errors in vector.cc
-CRYPTOPP_CXXFLAGS += -DCRYPTOPP_INCLUDE_VECTOR_CC
+CRYPTOPP_CPPFLAGS += -DCRYPTOPP_INCLUDE_VECTOR_CC
 endif
 AR = $(CXX)
 ARFLAGS = -xar -o
@@ -950,9 +958,9 @@ endif
 
 # No ASM for Travis testing
 ifeq ($(findstring no-asm,$(MAKECMDGOALS)),no-asm)
-  ifeq ($(findstring -DCRYPTOPP_DISABLE_ASM,$(CRYPTOPP_CXXFLAGS) $(CXXFLAGS)),)
-    CRYPTOPP_CXXFLAGS += -DCRYPTOPP_DISABLE_ASM
-  endif # CRYPTOPP_CXXFLAGS
+  ifeq ($(findstring -DCRYPTOPP_DISABLE_ASM,$(CPPFLAGS)$(CXXFLAGS)),)
+    CRYPTOPP_CPPFLAGS += -DCRYPTOPP_DISABLE_ASM
+  endif # CRYPTOPP_CPPFLAGS
 endif # No ASM
 
 # Native build testing. Issue 'make native'.
@@ -998,10 +1006,10 @@ ifeq ($(findstring ubsan,$(MAKECMDGOALS)),ubsan)
   CRYPTOPP_CXXFLAGS := $(CRYPTOPP_CXXFLAGS:-xO%=-xO1)
   ifeq ($(findstring -fsanitize=undefined,$(CXXFLAGS)),)
     CRYPTOPP_CXXFLAGS += -fsanitize=undefined
-  endif # CRYPTOPP_CXXFLAGS
-  ifeq ($(findstring -DCRYPTOPP_COVERAGE,$(CXXFLAGS)),)
-    CRYPTOPP_CXXFLAGS += -DCRYPTOPP_COVERAGE
-  endif # CRYPTOPP_CXXFLAGS
+  endif # CRYPTOPP_CPPFLAGS
+  ifeq ($(findstring -DCRYPTOPP_COVERAGE,$(CPPFLAGS)$(CXXFLAGS)),)
+    CRYPTOPP_CPPFLAGS += -DCRYPTOPP_COVERAGE
+  endif # CRYPTOPP_CPPFLAGS
 endif # UBsan
 
 # Address Sanitizer (Asan) testing. Issue 'make asan'.
@@ -1012,9 +1020,9 @@ ifeq ($(findstring asan,$(MAKECMDGOALS)),asan)
   ifeq ($(findstring -fsanitize=address,$(CXXFLAGS)),)
     CRYPTOPP_CXXFLAGS += -fsanitize=address
   endif # CRYPTOPP_CXXFLAGS
-  ifeq ($(findstring -DCRYPTOPP_COVERAGE,$(CXXFLAGS)),)
-    CRYPTOPP_CXXFLAGS += -DCRYPTOPP_COVERAGE
-  endif # CRYPTOPP_CXXFLAGS
+  ifeq ($(findstring -DCRYPTOPP_COVERAGE,$(CPPFLAGS)$(CXXFLAGS)),)
+    CRYPTOPP_CPPFLAGS += -DCRYPTOPP_COVERAGE
+  endif # CRYPTOPP_CPPFLAGS
   ifeq ($(findstring -fno-omit-frame-pointer,$(CXXFLAGS)),)
     CRYPTOPP_CXXFLAGS += -fno-omit-frame-pointer
   endif # CRYPTOPP_CXXFLAGS
@@ -1036,8 +1044,8 @@ ifneq ($(filter lcov coverage,$(MAKECMDGOALS)),)
   CRYPTOPP_CXXFLAGS := $(CRYPTOPP_CXXFLAGS:-g%=-g3)
   CRYPTOPP_CXXFLAGS := $(CRYPTOPP_CXXFLAGS:-O%=-O1)
   CRYPTOPP_CXXFLAGS := $(CRYPTOPP_CXXFLAGS:-xO%=-xO1)
-  ifeq ($(findstring -DCRYPTOPP_COVERAGE,$(CXXFLAGS)),)
-    CRYPTOPP_CXXFLAGS += -DCRYPTOPP_COVERAGE
+  ifeq ($(findstring -DCRYPTOPP_COVERAGE,$(CPPFLAGS)$(CXXFLAGS)),)
+    CRYPTOPP_CPPFLAGS += -DCRYPTOPP_COVERAGE
   endif # CRYPTOPP_COVERAGE
   ifeq ($(findstring -coverage,$(CXXFLAGS)),)
     CRYPTOPP_CXXFLAGS += -coverage
@@ -1049,8 +1057,8 @@ ifneq ($(filter gcov codecov,$(MAKECMDGOALS)),)
   CRYPTOPP_CXXFLAGS := $(CRYPTOPP_CXXFLAGS:-g%=-g3)
   CRYPTOPP_CXXFLAGS := $(CRYPTOPP_CXXFLAGS:-O%=-O1)
   CRYPTOPP_CXXFLAGS := $(CRYPTOPP_CXXFLAGS:-xO%=-xO1)
-  ifeq ($(findstring -DCRYPTOPP_COVERAGE,$(CXXFLAGS)),)
-    CRYPTOPP_CXXFLAGS += -DCRYPTOPP_COVERAGE
+  ifeq ($(findstring -DCRYPTOPP_COVERAGE,$(CPPFLAGS)$(CXXFLAGS)),)
+    CRYPTOPP_CPPFLAGS += -DCRYPTOPP_COVERAGE
   endif # CRYPTOPP_COVERAGE
   ifeq ($(findstring -coverage,$(CXXFLAGS)),)
     CRYPTOPP_CXXFLAGS += -coverage
@@ -1063,9 +1071,9 @@ ifneq ($(filter valgrind,$(MAKECMDGOALS)),)
   CRYPTOPP_CXXFLAGS := $(CRYPTOPP_CXXFLAGS:-g%=-g3)
   CRYPTOPP_CXXFLAGS := $(CRYPTOPP_CXXFLAGS:-O%=-O1)
   CRYPTOPP_CXXFLAGS := $(CRYPTOPP_CXXFLAGS:-xO%=-xO1)
-  ifeq ($(findstring -DCRYPTOPP_COVERAGE,$(CXXFLAGS)),)
-    CRYPTOPP_CXXFLAGS += -DCRYPTOPP_COVERAGE
-  endif # -DCRYPTOPP_COVERAGE
+  ifeq ($(findstring -DCRYPTOPP_COVERAGE,$(CPPFLAGS)$(CXXFLAGS)),)
+    CRYPTOPP_CPPFLAGS += -DCRYPTOPP_COVERAGE
+  endif # CRYPTOPP_CPPFLAGS
 endif # Valgrind
 
 # Debug testing on GNU systems. Triggered by -DDEBUG.
@@ -1076,9 +1084,9 @@ ifneq ($(filter -DDEBUG -DDEBUG=1,$(CXXFLAGS)),)
   USING_GLIBCXX := $(shell $(CXX)$(CXXFLAGS) -E $(TPROG) -c 2>&1 | $(GREP) -i -c "__GLIBCXX__")
   ifneq ($(USING_GLIBCXX),0)
     ifeq ($(HAS_NEWLIB),0)
-      ifeq ($(findstring -D_GLIBCXX_DEBUG,$(CXXFLAGS)),)
-        CRYPTOPP_CXXFLAGS += -D_GLIBCXX_DEBUG
-      endif # CRYPTOPP_CXXFLAGS
+      ifeq ($(findstring -D_GLIBCXX_DEBUG,$(CPPFLAGS)$(CXXFLAGS)),)
+        CRYPTOPP_CPPFLAGS += -D_GLIBCXX_DEBUG
+      endif # CRYPTOPP_CPPFLAGS
     endif # HAS_NEWLIB
   endif # USING_GLIBCXX
 
@@ -1169,18 +1177,20 @@ ifneq ($(IS_MINGW),0)
 INCL += resource.h
 endif
 
-# Cryptogams source files. We couple to ARMv7.
+# Cryptogams source files. We couple to ARMv7 and NEON.
 # Limit to Linux. The source files target the GNU assembler.
 # Also see https://www.cryptopp.com/wiki/Cryptogams.
 ifeq ($(IS_ARM32)$(IS_LINUX),11)
-  ifeq ($(CLANG_COMPILER),1)
-    CRYPTOGAMS_ARMV4_FLAG = -march=armv7-a -Wa,--noexecstack
-    CRYPTOGAMS_ARMV4_THUMB_FLAG = -march=armv7-a -mthumb -Wa,--noexecstack
-  else
-    CRYPTOGAMS_ARMV4_FLAG = -march=armv7-a -Wa,--noexecstack
-    CRYPTOGAMS_ARMV4_THUMB_FLAG = -march=armv7-a -Wa,--noexecstack
+  ifeq ($(filter -DCRYPTOPP_DISABLE_ASM -DCRYPTOPP_DISABLE_ARM_NEON,$(CPPFLAGS)$(CXXFLAGS)),)
+    ifeq ($(CLANG_COMPILER),1)
+      CRYPTOGAMS_ARMV4_FLAG = -march=armv7-a -Wa,--noexecstack
+      CRYPTOGAMS_ARMV4_THUMB_FLAG = -march=armv7-a -mthumb -Wa,--noexecstack
+    else
+      CRYPTOGAMS_ARMV4_FLAG = -march=armv7-a -Wa,--noexecstack
+      CRYPTOGAMS_ARMV4_THUMB_FLAG = -march=armv7-a -Wa,--noexecstack
+    endif
+    SRCS += aes_armv4.S sha1_armv4.S sha256_armv4.S sha512_armv4.S
   endif
-  SRCS += aes_armv4.S sha1_armv4.S sha256_armv4.S sha512_armv4.S
 endif
 
 # Remove unneeded arch specific files to speed build time.
@@ -1412,6 +1422,7 @@ ifneq ($(wildcard libcryptopp.so$(SOLIB_VERSION_SUFFIX)),)
        $(CHMOD) u=rwx,go=rx $(DESTDIR)$(LIBDIR)/libcryptopp.so$(SOLIB_VERSION_SUFFIX)
 ifeq ($(HAS_SOLIB_VERSION),1)
        -$(LN) libcryptopp.so$(SOLIB_VERSION_SUFFIX) $(DESTDIR)$(LIBDIR)/libcryptopp.so
+       -$(LN) libcryptopp.so$(SOLIB_VERSION_SUFFIX) $(DESTDIR)$(LIBDIR)/libcryptopp.so$(SOLIB_COMPAT_SUFFIX)
        $(LDCONF) $(DESTDIR)$(LIBDIR)
 endif
 endif
@@ -1499,7 +1510,7 @@ cryptopp.pc libcryptopp.pc:
        @echo '' >> libcryptopp.pc
        @echo 'Name: Crypto++' >> libcryptopp.pc
        @echo 'Description: Crypto++ cryptographic library' >> libcryptopp.pc
-       @echo 'Version: 8.6' >> libcryptopp.pc
+       @echo 'Version: 8.7' >> libcryptopp.pc
        @echo 'URL: https://cryptopp.com/' >> libcryptopp.pc
        @echo '' >> libcryptopp.pc
        @echo 'Cflags: -I$${includedir}' >> libcryptopp.pc
@@ -1532,7 +1543,7 @@ endif
 convert:
        @-$(CHMOD) u=rwx,go=rx $(EXEC_DIRS)
        @-$(CHMOD) u=rw,go=r $(TEXT_FILES) *.supp .*.yml *.asm *.zip TestVectors/*.txt TestData/*.dat TestPrograms/*.cpp
-       @-$(CHMOD) u=rwx,go=rx $(EXEC_FILES) *.sh
+       @-$(CHMOD) u=rwx,go=rx $(EXEC_FILES)
        -unix2dos --keepdate --quiet $(TEXT_FILES) .*.yml *.asm TestScripts/*.cmd TestScripts/*.txt TestScripts/*.cpp
        -dos2unix --keepdate --quiet GNUmakefile GNUmakefile-cross *.sh *.S *.supp *.mapfile TestScripts/*.sh
 ifneq ($(IS_DARWIN),0)
@@ -1737,16 +1748,16 @@ rijndael.o : rijndael.cpp
 endif
 
 # Only use CRYPTOPP_DATA_DIR if its not set in CXXFLAGS
-ifeq ($(findstring -DCRYPTOPP_DATA_DIR, $(CXXFLAGS)),)
+ifeq ($(findstring -DCRYPTOPP_DATA_DIR, $(CPPFLAGS)$(CXXFLAGS)),)
 ifneq ($(strip $(CRYPTOPP_DATA_DIR)),)
 validat%.o : validat%.cpp
-       $(CXX) $(strip $(CPPFLAGS) $(CXXFLAGS) -DCRYPTOPP_DATA_DIR=\"$(CRYPTOPP_DATA_DIR)\" -c) $<
+       $(CXX) $(strip $(CPPFLAGS) -DCRYPTOPP_DATA_DIR=\"$(CRYPTOPP_DATA_DIR)\" $(CXXFLAGS) -c) $<
 bench%.o : bench%.cpp
-       $(CXX) $(strip $(CPPFLAGS) $(CXXFLAGS) -DCRYPTOPP_DATA_DIR=\"$(CRYPTOPP_DATA_DIR)\" -c) $<
+       $(CXX) $(strip $(CPPFLAGS) -DCRYPTOPP_DATA_DIR=\"$(CRYPTOPP_DATA_DIR)\" $(CXXFLAGS) -c) $<
 datatest.o : datatest.cpp
-       $(CXX) $(strip $(CPPFLAGS) $(CXXFLAGS) -DCRYPTOPP_DATA_DIR=\"$(CRYPTOPP_DATA_DIR)\" -c) $<
+       $(CXX) $(strip $(CPPFLAGS) -DCRYPTOPP_DATA_DIR=\"$(CRYPTOPP_DATA_DIR)\" $(CXXFLAGS) -c) $<
 test.o : test.cpp
-       $(CXX) $(strip $(CPPFLAGS) $(CXXFLAGS) -DCRYPTOPP_DATA_DIR=\"$(CRYPTOPP_DATA_DIR)\" -c) $<
+       $(CXX) $(strip $(CPPFLAGS) -DCRYPTOPP_DATA_DIR=\"$(CRYPTOPP_DATA_DIR)\" $(CXXFLAGS) -c) $<
 endif
 endif
 
@@ -1754,13 +1765,13 @@ validat1.o : validat1.cpp
        $(CXX) $(strip $(CPPFLAGS) $(CXXFLAGS) $(ALTIVEC_FLAG) -c) $<
 
 %.dllonly.o : %.cpp
-       $(CXX) $(strip $(CPPFLAGS) $(CXXFLAGS) -DCRYPTOPP_DLL_ONLY -c) $< -o $@
+       $(CXX) $(strip $(CPPFLAGS) -DCRYPTOPP_DLL_ONLY $(CXXFLAGS) -c) $< -o $@
 
 %.import.o : %.cpp
-       $(CXX) $(strip $(CPPFLAGS) $(CXXFLAGS) -DCRYPTOPP_IMPORTS -c) $< -o $@
+       $(CXX) $(strip $(CPPFLAGS) -DCRYPTOPP_IMPORTS $(CXXFLAGS) -c) $< -o $@
 
 %.export.o : %.cpp
-       $(CXX) $(strip $(CPPFLAGS) $(CXXFLAGS) -DCRYPTOPP_EXPORTS -c) $< -o $@
+       $(CXX) $(strip $(CPPFLAGS) -DCRYPTOPP_EXPORTS $(CXXFLAGS) -c) $< -o $@
 
 %.bc : %.cpp
        $(CXX) $(strip $(CPPFLAGS) $(CXXFLAGS) -c) $<
index 9847f04bf0305b64aadc06c46722ca7d5ddedaf5..1c2c55fb1c13759f841f4efa744a34680e8bd782 100644 (file)
@@ -184,15 +184,15 @@ IS_PPC64 := 0
 
 # Hack to skip CPU feature tests for some recipes
 DETECT_FEATURES ?= 1
-ifeq ($(findstring -DCRYPTOPP_DISABLE_ASM,$(CXXFLAGS)),-DCRYPTOPP_DISABLE_ASM)
+ifneq ($(findstring -DCRYPTOPP_DISABLE_ASM,$(CPPFLAGS)$(CXXFLAGS)),)
   DETECT_FEATURES := 0
-else ifeq ($(findstring clean,$(MAKECMDGOALS)),clean)
+else ifneq ($(findstring clean,$(MAKECMDGOALS)),)
   DETECT_FEATURES := 0
-else ifeq ($(findstring distclean,$(MAKECMDGOALS)),distclean)
+else ifneq ($(findstring distclean,$(MAKECMDGOALS)),)
   DETECT_FEATURES := 0
-else ifeq ($(findstring trim,$(MAKECMDGOALS)),trim)
+else ifneq ($(findstring trim,$(MAKECMDGOALS)),)
   DETECT_FEATURES := 0
-else ifeq ($(findstring zip,$(MAKECMDGOALS)),zip)
+else ifneq ($(findstring zip,$(MAKECMDGOALS)),)
   DETECT_FEATURES := 0
 endif
 
@@ -240,7 +240,7 @@ ifeq ($(DETECT_FEATURES),1)
   endif
 
   ifeq ($(SSE2_FLAG),)
-    CXXFLAGS += -DCRYPTOPP_DISABLE_ASM
+    CPPFLAGS += -DCRYPTOPP_DISABLE_ASM
   endif
 
   # Need SSE2 or higher for these tests
@@ -336,33 +336,33 @@ ifeq ($(DETECT_FEATURES),1)
     endif
 
     ifeq ($(SSE3_FLAG),)
-      CXXFLAGS += -DCRYPTOPP_DISABLE_SSE3
+      CPPFLAGS += -DCRYPTOPP_DISABLE_SSE3
     else ifeq ($(SSSE3_FLAG),)
-      CXXFLAGS += -DCRYPTOPP_DISABLE_SSSE3
+      CPPFLAGS += -DCRYPTOPP_DISABLE_SSSE3
     else ifeq ($(SSE41_FLAG),)
-      CXXFLAGS += -DCRYPTOPP_DISABLE_SSE4
+      CPPFLAGS += -DCRYPTOPP_DISABLE_SSE4
     else ifeq ($(SSE42_FLAG),)
-      CXXFLAGS += -DCRYPTOPP_DISABLE_SSE4
+      CPPFLAGS += -DCRYPTOPP_DISABLE_SSE4
     endif
 
     ifneq ($(SSE42_FLAG),)
       # Unusual GCC/Clang on Macports. It assembles AES, but not CLMUL.
       # test_x86_clmul.s:15: no such instruction: 'pclmulqdq $0, %xmm1,%xmm0'
       ifeq ($(CLMUL_FLAG),)
-        CXXFLAGS += -DCRYPTOPP_DISABLE_CLMUL
+        CPPFLAGS += -DCRYPTOPP_DISABLE_CLMUL
       endif
       ifeq ($(AESNI_FLAG),)
-        CXXFLAGS += -DCRYPTOPP_DISABLE_AESNI
+        CPPFLAGS += -DCRYPTOPP_DISABLE_AESNI
       endif
 
       ifeq ($(AVX_FLAG),)
-        CXXFLAGS += -DCRYPTOPP_DISABLE_AVX
+        CPPFLAGS += -DCRYPTOPP_DISABLE_AVX
       else ifeq ($(AVX2_FLAG),)
-        CXXFLAGS += -DCRYPTOPP_DISABLE_AVX2
+        CPPFLAGS += -DCRYPTOPP_DISABLE_AVX2
       endif
       # SHANI independent of AVX per GH #1045
       ifeq ($(SHANI_FLAG),)
-        CRYPTOPP_CXXFLAGS += -DCRYPTOPP_DISABLE_SHANI
+        CPPFLAGS += -DCRYPTOPP_DISABLE_SHANI
       endif
     endif
 
@@ -381,7 +381,7 @@ ifeq ($(DETECT_FEATURES),1)
     #TOPT =
     #HAVE_OPT = $(shell $(TCOMMAND) 2>&1 | wc -w)
     #ifneq ($(strip $(HAVE_OPT)),0)
-    #  CXXFLAGS += -DCRYPTOPP_DISABLE_MIXED_ASM
+    #  CPPFLAGS += -DCRYPTOPP_DISABLE_MIXED_ASM
     #endif
 
   # SSE2_FLAGS
@@ -398,6 +398,12 @@ endif
 ###########################################################
 
 ifneq ($(IS_ARM32),0)
+
+# No need for feature detection on this platform if NEON is disabled
+ifneq ($(findstring -DCRYPTOPP_DISABLE_ARM_NEON,$(CPPFLAGS)$(CXXFLAGS)),)
+  DETECT_FEATURES := 0
+endif
+
 ifeq ($(DETECT_FEATURES),1)
 
   # Android needs -c compile flag for NEON. Otherwise there's an odd linker message.
@@ -441,7 +447,7 @@ ifeq ($(DETECT_FEATURES),1)
   endif
 
   ifeq ($(NEON_FLAG),)
-    CXXFLAGS += -DCRYPTOPP_DISABLE_ASM
+    CPPFLAGS += -DCRYPTOPP_DISABLE_ASM
   endif
 
 # DETECT_FEATURES
@@ -508,7 +514,7 @@ ifeq ($(DETECT_FEATURES),1)
   endif
 
   ifeq ($(ASIMD_FLAG),)
-    CXXFLAGS += -DCRYPTOPP_DISABLE_ASM
+    CPPFLAGS += -DCRYPTOPP_DISABLE_ASM
   endif
 
   ifneq ($(ASIMD_FLAG),)
@@ -518,7 +524,7 @@ ifeq ($(DETECT_FEATURES),1)
     HAVE_OPT = $(shell $(TCOMMAND) 2>&1 | wc -w)
     ifneq ($(strip $(HAVE_OPT)),0)
       CRC_FLAG =
-      CXXFLAGS += -DCRYPTOPP_DISABLE_ARM_CRC32
+      CPPFLAGS += -DCRYPTOPP_DISABLE_ARM_CRC32
     endif
 
     TPROG = TestPrograms/test_arm_aes.cpp
@@ -526,7 +532,7 @@ ifeq ($(DETECT_FEATURES),1)
     HAVE_OPT = $(shell $(TCOMMAND) 2>&1 | wc -w)
     ifneq ($(strip $(HAVE_OPT)),0)
       AES_FLAG =
-      CXXFLAGS += -DCRYPTOPP_DISABLE_ARM_AES
+      CPPFLAGS += -DCRYPTOPP_DISABLE_ARM_AES
     endif
 
     TPROG = TestPrograms/test_arm_pmull.cpp
@@ -535,7 +541,7 @@ ifeq ($(DETECT_FEATURES),1)
     ifneq ($(strip $(HAVE_OPT)),0)
       GCM_FLAG =
       GF2N_FLAG =
-      CXXFLAGS += -DCRYPTOPP_DISABLE_ARM_PMULL
+      CPPFLAGS += -DCRYPTOPP_DISABLE_ARM_PMULL
     endif
 
     TPROG = TestPrograms/test_arm_sha1.cpp
@@ -543,7 +549,7 @@ ifeq ($(DETECT_FEATURES),1)
     HAVE_OPT = $(shell $(TCOMMAND) 2>&1 | wc -w)
     ifneq ($(strip $(HAVE_OPT)),0)
       SHA_FLAG =
-      CXXFLAGS += -DCRYPTOPP_DISABLE_ARM_SHA1
+      CPPFLAGS += -DCRYPTOPP_DISABLE_ARM_SHA1
     endif
 
     TPROG = TestPrograms/test_arm_sha256.cpp
@@ -551,7 +557,7 @@ ifeq ($(DETECT_FEATURES),1)
     HAVE_OPT = $(shell $(TCOMMAND) 2>&1 | wc -w)
     ifneq ($(strip $(HAVE_OPT)),0)
       SHA_FLAG =
-      CXXFLAGS += -DCRYPTOPP_DISABLE_ARM_SHA2
+      CPPFLAGS += -DCRYPTOPP_DISABLE_ARM_SHA2
     endif
 
     TPROG = TestPrograms/test_arm_sm3.cpp
@@ -561,8 +567,8 @@ ifeq ($(DETECT_FEATURES),1)
       SM3_FLAG = -march=armv8.4-a+sm3
       SM4_FLAG = -march=armv8.4-a+sm3
     else
-      #CXXFLAGS += -DCRYPTOPP_DISABLE_ARM_SM3
-      #CXXFLAGS += -DCRYPTOPP_DISABLE_ARM_SM4
+      #CPPFLAGS += -DCRYPTOPP_DISABLE_ARM_SM3
+      #CPPFLAGS += -DCRYPTOPP_DISABLE_ARM_SM4
     endif
 
     TPROG = TestPrograms/test_arm_sha3.cpp
@@ -571,7 +577,7 @@ ifeq ($(DETECT_FEATURES),1)
     ifeq ($(strip $(HAVE_OPT)),0)
       SHA3_FLAG = -march=armv8.4-a+sha3
     else
-      #CXXFLAGS += -DCRYPTOPP_DISABLE_ARM_SHA3
+      #CPPFLAGS += -DCRYPTOPP_DISABLE_ARM_SHA3
     endif
 
     TPROG = TestPrograms/test_arm_sha512.cpp
@@ -580,7 +586,7 @@ ifeq ($(DETECT_FEATURES),1)
     ifeq ($(strip $(HAVE_OPT)),0)
       SHA512_FLAG = -march=armv8.4-a+sha512
     else
-      #CXXFLAGS += -DCRYPTOPP_DISABLE_ARM_SHA512
+      #CPPFLAGS += -DCRYPTOPP_DISABLE_ARM_SHA512
     endif
 
   # ASIMD_FLAG
@@ -596,10 +602,10 @@ endif
 ###########################################################
 
 # No ASM for Travis testing
-ifeq ($(findstring no-asm,$(MAKECMDGOALS)),no-asm)
-  ifeq ($(findstring -DCRYPTOPP_DISABLE_ASM,$(CXXFLAGS)),)
-    CXXFLAGS += -DCRYPTOPP_DISABLE_ASM
-  endif # CXXFLAGS
+ifneq ($(findstring no-asm,$(MAKECMDGOALS)),)
+  ifeq ($(findstring -DCRYPTOPP_DISABLE_ASM,$(CPPFLAGS)$(CXXFLAGS)),)
+    CPPFLAGS += -DCRYPTOPP_DISABLE_ASM
+  endif # CPPFLAGS
 endif # No ASM
 
 # Undefined Behavior Sanitizer (UBsan) testing. Issue 'make ubsan'.
@@ -607,9 +613,9 @@ ifeq ($(findstring ubsan,$(MAKECMDGOALS)),ubsan)
   ifeq ($(findstring -fsanitize=undefined,$(CXXFLAGS)),)
     CXXFLAGS += -fsanitize=undefined
   endif # CXXFLAGS
-  ifeq ($(findstring -DCRYPTOPP_COVERAGE,$(CXXFLAGS)),)
-    CXXFLAGS += -DCRYPTOPP_COVERAGE
-  endif # CXXFLAGS
+  ifeq ($(findstring -DCRYPTOPP_COVERAGE,$(CPPFLAGS)$(CXXFLAGS)),)
+    CPPFLAGS += -DCRYPTOPP_COVERAGE
+  endif # CPPFLAGS
 endif # UBsan
 
 # Address Sanitizer (Asan) testing. Issue 'make asan'.
@@ -617,9 +623,9 @@ ifeq ($(findstring asan,$(MAKECMDGOALS)),asan)
   ifeq ($(findstring -fsanitize=address,$(CXXFLAGS)),)
     CXXFLAGS += -fsanitize=address
   endif # CXXFLAGS
-  ifeq ($(findstring -DCRYPTOPP_COVERAGE,$(CXXFLAGS)),)
-    CXXFLAGS += -DCRYPTOPP_COVERAGE
-  endif # CXXFLAGS
+  ifeq ($(findstring -DCRYPTOPP_COVERAGE,$(CPPFLAGS)$(CXXFLAGS)),)
+    CPPFLAGS += -DCRYPTOPP_COVERAGE
+  endif # CPPFLAGS
   ifeq ($(findstring -fno-omit-frame-pointer,$(CXXFLAGS)),)
     CXXFLAGS += -fno-omit-frame-pointer
   endif # CXXFLAGS
@@ -641,20 +647,20 @@ ifneq ($(filter valgrind,$(MAKECMDGOALS)),)
   CXXFLAGS := $(CXXFLAGS:-g%=-g3)
   CXXFLAGS := $(CXXFLAGS:-O%=-O1)
   CXXFLAGS := $(CXXFLAGS:-xO%=-xO1)
-  ifeq ($(findstring -DCRYPTOPP_COVERAGE,$(CXXFLAGS)),)
-    CXXFLAGS += -DCRYPTOPP_COVERAGE
-  endif # -DCRYPTOPP_COVERAGE
+  ifeq ($(findstring -DCRYPTOPP_COVERAGE,$(CPPFLAGS)$(CXXFLAGS)),)
+    CPPFLAGS += -DCRYPTOPP_COVERAGE
+  endif # CPPFLAGS
 endif # Valgrind
 
 # Debug testing on GNU systems. Triggered by -DDEBUG.
-#   Newlib test due to http://sourceware.org/bugzilla/show_bug.cgi?id=20268
-ifneq ($(filter -DDEBUG -DDEBUG=1,$(CXXFLAGS)),)
-  USING_GLIBCXX := $(shell $(CXX) $(CXXFLAGS) -E pch.cpp 2>&1 | $(GREP) -i -c "__GLIBCXX__")
+# Newlib test due to http://sourceware.org/bugzilla/show_bug.cgi?id=20268
+ifneq ($(filter -DDEBUG -DDEBUG=1,$(CPPFLAGS) $(CXXFLAGS)),)
+  USING_GLIBCXX := $(shell $(CXX) $(CPPFLAGS) $(CXXFLAGS) -E pch.cpp 2>&1 | $(GREP) -i -c "__GLIBCXX__")
   ifneq ($(USING_GLIBCXX),0)
     ifeq ($(HAS_NEWLIB),0)
-      ifeq ($(findstring -D_GLIBCXX_DEBUG,$(CXXFLAGS)),)
-        CXXFLAGS += -D_GLIBCXX_DEBUG
-      endif # CXXFLAGS
+      ifeq ($(findstring -D_GLIBCXX_DEBUG,$(CPPFLAGS)$(CXXFLAGS)),)
+        CPPFLAGS += -D_GLIBCXX_DEBUG
+      endif # CPPFLAGS
     endif # HAS_NEWLIB
   endif # USING_GLIBCXX
 endif # GNU Debug build
@@ -687,18 +693,20 @@ SRCS := cryptlib.cpp cpu.cpp integer.cpp $(filter-out cryptlib.cpp cpu.cpp integ
 # For Makefile.am; resource.h is Windows
 INCL := $(filter-out resource.h,$(sort $(wildcard *.h)))
 
-# Cryptogams source files. We couple to ARMv7.
+# Cryptogams source files. We couple to ARMv7 and NEON.
 # Limit to Linux. The source files target the GNU assembler.
 # Also see https://www.cryptopp.com/wiki/Cryptogams.
 ifeq ($(IS_ARM32)$(IS_LINUX),11)
-  ifeq ($(CLANG_COMPILER),1)
-    CRYPTOGAMS_ARMV4_FLAG = -march=armv7-a -Wa,--noexecstack
-    CRYPTOGAMS_ARMV4_THUMB_FLAG = -march=armv7-a -mthumb -Wa,--noexecstack
-  else
-    CRYPTOGAMS_ARMV4_FLAG = -march=armv7-a -Wa,--noexecstack
-    CRYPTOGAMS_ARMV4_THUMB_FLAG = -march=armv7-a -Wa,--noexecstack
+  ifeq ($(filter -DCRYPTOPP_DISABLE_ASM -DCRYPTOPP_DISABLE_ARM_NEON,$(CPPFLAGS)$(CXXFLAGS)),)
+    ifeq ($(CLANG_COMPILER),1)
+      CRYPTOGAMS_ARMV4_FLAG = -march=armv7-a -Wa,--noexecstack
+      CRYPTOGAMS_ARMV4_THUMB_FLAG = -march=armv7-a -mthumb -Wa,--noexecstack
+    else
+      CRYPTOGAMS_ARMV4_FLAG = -march=armv7-a -Wa,--noexecstack
+      CRYPTOGAMS_ARMV4_THUMB_FLAG = -march=armv7-a -Wa,--noexecstack
+    endif
+    SRCS += aes_armv4.S sha1_armv4.S sha256_armv4.S sha512_armv4.S
   endif
-  SRCS += aes_armv4.S sha1_armv4.S sha256_armv4.S sha512_armv4.S
 endif
 
 # Remove unneeded arch specific files to speed build time.
@@ -856,6 +864,7 @@ ifneq ($(wildcard libcryptopp.so$(SOLIB_VERSION_SUFFIX)),)
        $(CHMOD) u=rwx,go=rx $(DESTDIR)$(LIBDIR)/libcryptopp.so$(SOLIB_VERSION_SUFFIX)
 ifeq ($(HAS_SOLIB_VERSION),1)
        -$(LN) libcryptopp.so$(SOLIB_VERSION_SUFFIX) $(DESTDIR)$(LIBDIR)/libcryptopp.so
+       -$(LN) libcryptopp.so$(SOLIB_VERSION_SUFFIX) $(DESTDIR)$(LIBDIR)/libcryptopp.so$(SOLIB_COMPAT_SUFFIX)
        $(LDCONF) $(DESTDIR)$(LIBDIR)
 endif
 endif
index 3202a2c37b5f07f9e73ee0c50a75d94219a1efc0..3f7f23063bd383d11a267dc525f2028f3b50b599 100644 (file)
 #endif\r
 \r
 // Couple to CRYPTOPP_DISABLE_AESNI, but use CRYPTOPP_CLMUL_AVAILABLE so we can selectively\r
-//  disable for misbehaving platofrms and compilers, like Solaris or some Clang.\r
+//  disable for misbehaving platforms and compilers, like Solaris or some Clang.\r
 #if defined(CRYPTOPP_DISABLE_AESNI)\r
        #define CRYPTOPP_DISABLE_CLMUL 1\r
 #endif\r
 # endif  // Platforms\r
 #endif\r
 \r
+// Buggy Microsoft compiler, https://github.com/weidai11/cryptopp/issues/1096\r
+#if defined(_MSC_VER)\r
+# undef CRYPTOPP_ARM_SHA1_AVAILABLE\r
+# undef CRYPTOPP_ARM_SHA2_AVAILABLE\r
+#endif\r
+\r
 // ARMv8 and SHA-512, SHA-3. -march=armv8.2-a+crypto or above must be present\r
 // Requires GCC 8.0, Clang 11.0, Apple Clang 12.0 or Visual Studio 20??\r
 #if !defined(CRYPTOPP_ARM_SHA3_AVAILABLE) && !defined(CRYPTOPP_DISABLE_ARM_SHA)\r
 // than C/C++. Define this to use the Cryptogams AES and SHA implementations\r
 // on GNU Linux systems. When defined, Crypto++ will use aes_armv4.S,\r
 // sha1_armv4.S and sha256_armv4.S. https://www.cryptopp.com/wiki/Cryptogams.\r
-#if defined(__arm__) && defined(__linux__)\r
-# if defined(__GNUC__) || defined(__clang__)\r
-#  define CRYPTOGAMS_ARM_AES      1\r
-#  define CRYPTOGAMS_ARM_SHA1     1\r
-#  define CRYPTOGAMS_ARM_SHA256   1\r
-#  define CRYPTOGAMS_ARM_SHA512   1\r
+#if !defined(CRYPTOPP_DISABLE_ARM_NEON)\r
+# if defined(__arm__) && defined(__linux__)\r
+#  if defined(__GNUC__) || defined(__clang__)\r
+#   define CRYPTOGAMS_ARM_AES      1\r
+#   define CRYPTOGAMS_ARM_SHA1     1\r
+#   define CRYPTOGAMS_ARM_SHA256   1\r
+#   define CRYPTOGAMS_ARM_SHA512   1\r
+#  endif\r
 # endif\r
 #endif\r
 \r