Fix ARM build under Windows Phone

pull/461/head
Jeffrey Walton 2017-07-31 02:09:15 -04:00
parent 7e1c21957f
commit 1fdd08d690
No known key found for this signature in database
GPG Key ID: B36AB348921B1838
8 changed files with 37 additions and 24 deletions

View File

@ -199,15 +199,15 @@ endif # -DCRYPTOPP_DISABLE_SSSE3
endif # -DCRYPTOPP_DISABLE_ASM endif # -DCRYPTOPP_DISABLE_ASM
endif # CXXFLAGS endif # CXXFLAGS
SSSE3_FLAG = $(shell echo | $(CXX) $(CXXFLAGS) -mssse3 -dM -E - | grep -i -c -q __SSSE3__ && echo "-mssse3") SSSE3_FLAG = $(shell echo "" | $(CXX) $(CXXFLAGS) -mssse3 -dM -E - | grep -i -c -q __SSSE3__ && echo "-mssse3")
ARIA_FLAG = $(SSSE3_FLAG) ARIA_FLAG = $(SSSE3_FLAG)
ifeq ($(findstring -DCRYPTOPP_DISABLE_SSE4,$(CXXFLAGS)),) ifeq ($(findstring -DCRYPTOPP_DISABLE_SSE4,$(CXXFLAGS)),)
SSE42_FLAG = $(shell echo | $(CXX) $(CXXFLAGS) -msse4.2 -dM -E - | grep -i -c -q __SSE4_2__ && echo "-msse4.2") SSE42_FLAG = $(shell echo "" | $(CXX) $(CXXFLAGS) -msse4.2 -dM -E - | grep -i -c -q __SSE4_2__ && echo "-msse4.2")
ifeq ($(findstring -DCRYPTOPP_DISABLE_AESNI,$(CXXFLAGS)),) ifeq ($(findstring -DCRYPTOPP_DISABLE_AESNI,$(CXXFLAGS)),)
GCM_FLAG = $(shell echo | $(CXX) $(CXXFLAGS) -mssse3 -mpclmul -dM -E - | grep -i -c -q __PCLMUL__ && echo "-mssse3 -mpclmul") GCM_FLAG = $(shell echo "" | $(CXX) $(CXXFLAGS) -mssse3 -mpclmul -dM -E - | grep -i -c -q __PCLMUL__ && echo "-mssse3 -mpclmul")
AES_FLAG = $(shell echo | $(CXX) $(CXXFLAGS) -maes -dM -E - | grep -i -c -q __AES__ && echo "-maes") AES_FLAG = $(shell echo "" | $(CXX) $(CXXFLAGS) -maes -dM -E - | grep -i -c -q __AES__ && echo "-maes")
ifeq ($(findstring -DCRYPTOPP_DISABLE_SHA,$(CXXFLAGS)),) ifeq ($(findstring -DCRYPTOPP_DISABLE_SHA,$(CXXFLAGS)),)
SHA_FLAG = $(shell echo | $(CXX) $(CXXFLAGS) -msse4.2 -msha -dM -E - | grep -i -c -q __SHA__ && echo "-msse4.2 -msha") SHA_FLAG = $(shell echo "" | $(CXX) $(CXXFLAGS) -msse4.2 -msha -dM -E - | grep -i -c -q __SHA__ && echo "-msse4.2 -msha")
BLAKE2_FLAG = $(SSE42_FLAG) BLAKE2_FLAG = $(SSE42_FLAG)
CRC_FLAG = $(SSE42_FLAG) CRC_FLAG = $(SSE42_FLAG)
endif endif
@ -304,16 +304,16 @@ endif
endif endif
ifeq ($(IS_NEON),1) ifeq ($(IS_NEON),1)
NEON_FLAG = $(shell echo | $(CXX) $(CXXFLAGS) -march=armv7-a -mfloat-abi=$(FP_ABI) -mfpu=neon -dM -E - | grep -i -c -q __ARM_NEON && echo "-march=armv7-a -mfloat-abi=$(FP_ABI) -mfpu=neon") NEON_FLAG = $(shell echo "" | $(CXX) $(CXXFLAGS) -march=armv7-a -mfloat-abi=$(FP_ABI) -mfpu=neon -dM -E - | grep -i -c -q __ARM_NEON && echo "-march=armv7-a -mfloat-abi=$(FP_ABI) -mfpu=neon")
GCM_FLAG = $(NEON_FLAG) GCM_FLAG = $(NEON_FLAG)
ARIA_FLAG = $(NEON_FLAG) ARIA_FLAG = $(NEON_FLAG)
BLAKE2_FLAG = $(NEON_FLAG) BLAKE2_FLAG = $(NEON_FLAG)
endif endif
ifeq ($(IS_ARMV8),1) ifeq ($(IS_ARMV8),1)
ARMV8A_NEON_FLAG = $(shell echo | $(CXX) $(CXXFLAGS) -march=armv8-a -dM -E - | grep -i -c -q __ARM_NEON && echo "-march=armv8-a") ARMV8A_NEON_FLAG = $(shell echo "" | $(CXX) $(CXXFLAGS) -march=armv8-a -dM -E - | grep -i -c -q __ARM_NEON && echo "-march=armv8-a")
ARMV8A_CRC_FLAG = $(shell echo | $(CXX) $(CXXFLAGS) -march=armv8-a+crc -dM -E - | grep -i -c -q __ARM_FEATURE_CRC32 && echo "-march=armv8-a+crc") ARMV8A_CRC_FLAG = $(shell echo "" | $(CXX) $(CXXFLAGS) -march=armv8-a+crc -dM -E - | grep -i -c -q __ARM_FEATURE_CRC32 && echo "-march=armv8-a+crc")
ARMV8A_CRYPTO_FLAG = $(shell echo | $(CXX) $(CXXFLAGS) -march=armv8-a+crypto -dM -E - | grep -i -c -q __ARM_FEATURE_CRYPTO && echo "-march=armv8-a+crypto") ARMV8A_CRYPTO_FLAG = $(shell echo "" | $(CXX) $(CXXFLAGS) -march=armv8-a+crypto -dM -E - | grep -i -c -q __ARM_FEATURE_CRYPTO && echo "-march=armv8-a+crypto")
CRC_FLAG = $(ARMV8A_CRC_FLAG) CRC_FLAG = $(ARMV8A_CRC_FLAG)
AES_FLAG = $(ARMV8A_CRYPTO_FLAG) AES_FLAG = $(ARMV8A_CRYPTO_FLAG)
GCM_FLAG = $(ARMV8A_CRYPTO_FLAG) GCM_FLAG = $(ARMV8A_CRYPTO_FLAG)

View File

@ -536,7 +536,7 @@ NAMESPACE_END
// Requires ARMv7 and ACLE 1.0. Testing shows ARMv7 is really ARMv7a under most toolchains. // Requires ARMv7 and ACLE 1.0. Testing shows ARMv7 is really ARMv7a under most toolchains.
#if !defined(CRYPTOPP_ARM_NEON_AVAILABLE) && !defined(CRYPTOPP_DISABLE_ASM) #if !defined(CRYPTOPP_ARM_NEON_AVAILABLE) && !defined(CRYPTOPP_DISABLE_ASM)
# if defined(__ARM_NEON__) || defined(__ARM_FEATURE_NEON) || (CRYPTOPP_MSC_VER >= 1900) || \ # if defined(__ARM_NEON__) || defined(__ARM_FEATURE_NEON) || (CRYPTOPP_MSC_VERSION >= 1700) || \
(CRYPTOPP_GCC_VERSION >= 40800) || (CRYPTOPP_LLVM_CLANG_VERSION >= 30500) (CRYPTOPP_GCC_VERSION >= 40800) || (CRYPTOPP_LLVM_CLANG_VERSION >= 30500)
# define CRYPTOPP_ARM_NEON_AVAILABLE 1 # define CRYPTOPP_ARM_NEON_AVAILABLE 1
# endif # endif
@ -547,7 +547,7 @@ NAMESPACE_END
// Microsoft plans to support ARM-64, but its not clear how to detect it. // Microsoft plans to support ARM-64, but its not clear how to detect it.
// TODO: Add MSC_VER and ARM-64 platform define when available // TODO: Add MSC_VER and ARM-64 platform define when available
#if !defined(CRYPTOPP_ARM_CRC32_AVAILABLE) && !defined(CRYPTOPP_DISABLE_ASM) #if !defined(CRYPTOPP_ARM_CRC32_AVAILABLE) && !defined(CRYPTOPP_DISABLE_ASM)
# if defined(__ARM_FEATURE_CRYPTO) || (CRYPTOPP_MSC_VER >= 2000) || \ # if defined(__ARM_FEATURE_CRYPTO) || (CRYPTOPP_MSC_VERSION >= 2000) || \
(CRYPTOPP_GCC_VERSION >= 40800) || (CRYPTOPP_LLVM_CLANG_VERSION >= 30500) (CRYPTOPP_GCC_VERSION >= 40800) || (CRYPTOPP_LLVM_CLANG_VERSION >= 30500)
# define CRYPTOPP_ARM_CRC32_AVAILABLE 1 # define CRYPTOPP_ARM_CRC32_AVAILABLE 1
# endif # endif
@ -558,7 +558,7 @@ NAMESPACE_END
// Microsoft plans to support ARM-64, but its not clear how to detect it. // Microsoft plans to support ARM-64, but its not clear how to detect it.
// TODO: Add MSC_VER and ARM-64 platform define when available // TODO: Add MSC_VER and ARM-64 platform define when available
#if !defined(CRYPTOPP_ARM_PMULL_AVAILABLE) && !defined(CRYPTOPP_DISABLE_ASM) && !defined(__apple_build_version__) #if !defined(CRYPTOPP_ARM_PMULL_AVAILABLE) && !defined(CRYPTOPP_DISABLE_ASM) && !defined(__apple_build_version__)
# if defined(__ARM_FEATURE_CRYPTO) || (CRYPTOPP_MSC_VER >= 2000) || \ # if defined(__ARM_FEATURE_CRYPTO) || (CRYPTOPP_MSC_VERSION >= 2000) || \
(CRYPTOPP_GCC_VERSION >= 40800) || (CRYPTOPP_LLVM_CLANG_VERSION >= 30500) (CRYPTOPP_GCC_VERSION >= 40800) || (CRYPTOPP_LLVM_CLANG_VERSION >= 30500)
# define CRYPTOPP_ARM_PMULL_AVAILABLE 1 # define CRYPTOPP_ARM_PMULL_AVAILABLE 1
# endif # endif
@ -569,7 +569,7 @@ NAMESPACE_END
// Microsoft plans to support ARM-64, but its not clear how to detect it. // Microsoft plans to support ARM-64, but its not clear how to detect it.
// TODO: Add MSC_VER and ARM-64 platform define when available // TODO: Add MSC_VER and ARM-64 platform define when available
#if !defined(CRYPTOPP_ARMV8A_CRYPTO_AVAILABLE) && !defined(CRYPTOPP_DISABLE_ASM) #if !defined(CRYPTOPP_ARMV8A_CRYPTO_AVAILABLE) && !defined(CRYPTOPP_DISABLE_ASM)
# if defined(__ARM_FEATURE_CRYPTO) || (CRYPTOPP_MSC_VER >= 2000) || \ # if defined(__ARM_FEATURE_CRYPTO) || (CRYPTOPP_MSC_VERSION >= 2000) || \
(CRYPTOPP_GCC_VERSION >= 40800) || (CRYPTOPP_LLVM_CLANG_VERSION >= 30500) (CRYPTOPP_GCC_VERSION >= 40800) || (CRYPTOPP_LLVM_CLANG_VERSION >= 30500)
# define CRYPTOPP_ARM_AES_AVAILABLE 1 # define CRYPTOPP_ARM_AES_AVAILABLE 1
# define CRYPTOPP_ARM_PMULL_AVAILABLE 1 # define CRYPTOPP_ARM_PMULL_AVAILABLE 1

View File

@ -40,9 +40,9 @@ extern "C" {
}; };
#endif // Not CRYPTOPP_MS_STYLE_INLINE_ASSEMBLY #endif // Not CRYPTOPP_MS_STYLE_INLINE_ASSEMBLY
#if (CRYPTOPP_ARM_CRC32_AVAILABLE)
bool CPU_TryCRC32_ARMV8() bool CPU_TryCRC32_ARMV8()
{ {
#if (CRYPTOPP_ARM_CRC32_AVAILABLE)
# if defined(CRYPTOPP_MS_STYLE_INLINE_ASSEMBLY) # if defined(CRYPTOPP_MS_STYLE_INLINE_ASSEMBLY)
volatile bool result = true; volatile bool result = true;
__try __try
@ -95,8 +95,10 @@ bool CPU_TryCRC32_ARMV8()
signal(SIGILL, oldHandler); signal(SIGILL, oldHandler);
return result; return result;
# endif # endif
#else
return false;
} }
#endif // CRYPTOPP_ARM_CRC32_AVAILABLE #endif // CRYPTOPP_ARMV8A_SHA_AVAILABLE
#if (CRYPTOPP_ARM_CRC32_AVAILABLE) #if (CRYPTOPP_ARM_CRC32_AVAILABLE)
void CRC32_Update_ARMV8(const byte *s, size_t n, word32& c) void CRC32_Update_ARMV8(const byte *s, size_t n, word32& c)

View File

@ -128,6 +128,8 @@ LDLIBS = $(LDLIBS) ws2_32.lib kernel32.lib
!IF "$(PLATFORM)" == "ARM" || "$(PLATFORM)" == "arm" || "$(PLATFORM)" == "ARM64" || "$(PLATFORM)" == "arm64" !IF "$(PLATFORM)" == "ARM" || "$(PLATFORM)" == "arm" || "$(PLATFORM)" == "ARM64" || "$(PLATFORM)" == "arm64"
# CXXFLAGS = $(CXXFLAGS) /D_ARM_WINAPI_PARTITION_DESKTOP_SDK_AVAILABLE=1 /DWINAPI_FAMILY=WINAPI_FAMILY_DESKTOP_APP # CXXFLAGS = $(CXXFLAGS) /D_ARM_WINAPI_PARTITION_DESKTOP_SDK_AVAILABLE=1 /DWINAPI_FAMILY=WINAPI_FAMILY_DESKTOP_APP
CXXFLAGS = $(CXXFLAGS) /DWINAPI_FAMILY=WINAPI_FAMILY_PHONE_APP CXXFLAGS = $(CXXFLAGS) /DWINAPI_FAMILY=WINAPI_FAMILY_PHONE_APP
LIB_SRCS = $(LIB_SRCS) neon.cpp
LIB_OBJS = $(LIB_OBJS) neon.obj
# CXXFLAGS = $(CXXFLAGS) /DWINAPI_FAMILY=WINAPI_FAMILY_APP # CXXFLAGS = $(CXXFLAGS) /DWINAPI_FAMILY=WINAPI_FAMILY_APP
# LDLIBS = $(LDLIBS) ws2_32.lib # LDLIBS = $(LDLIBS) ws2_32.lib
!ENDIF !ENDIF

View File

@ -158,8 +158,8 @@
<ClCompile Include="algparam.cpp" /> <ClCompile Include="algparam.cpp" />
<ClCompile Include="arc4.cpp" /> <ClCompile Include="arc4.cpp" />
<ClCompile Include="aria.cpp" /> <ClCompile Include="aria.cpp" />
<ClCompile Include="ariatab.cpp" />
<ClCompile Include="aria-simd.cpp" /> <ClCompile Include="aria-simd.cpp" />
<ClCompile Include="ariatab.cpp" />
<ClCompile Include="asn.cpp" /> <ClCompile Include="asn.cpp" />
<ClCompile Include="authenc.cpp" /> <ClCompile Include="authenc.cpp" />
<ClCompile Include="base32.cpp" /> <ClCompile Include="base32.cpp" />

View File

@ -156,9 +156,9 @@ extern "C" {
}; };
#endif // Not CRYPTOPP_MS_STYLE_INLINE_ASSEMBLY #endif // Not CRYPTOPP_MS_STYLE_INLINE_ASSEMBLY
#if (CRYPTOPP_ARM_PMULL_AVAILABLE)
bool CPU_TryPMULL_ARMV8() bool CPU_TryPMULL_ARMV8()
{ {
#if (CRYPTOPP_ARM_PMULL_AVAILABLE)
# if defined(CRYPTOPP_MS_STYLE_INLINE_ASSEMBLY) # if defined(CRYPTOPP_MS_STYLE_INLINE_ASSEMBLY)
volatile bool result = true; volatile bool result = true;
__try __try
@ -218,8 +218,10 @@ bool CPU_TryPMULL_ARMV8()
signal(SIGILL, oldHandler); signal(SIGILL, oldHandler);
return result; return result;
# endif # endif
#else
return false;
} }
#endif // CRYPTOPP_ARM_PMULL_AVAILABLE #endif // CRYPTOPP_ARMV8A_SHA_AVAILABLE
#if CRYPTOPP_ARM_NEON_AVAILABLE #if CRYPTOPP_ARM_NEON_AVAILABLE
void GCM_Xor16_NEON(byte *a, const byte *b, const byte *c) void GCM_Xor16_NEON(byte *a, const byte *b, const byte *c)

View File

@ -8,9 +8,12 @@
#include "pch.h" #include "pch.h"
#include "config.h" #include "config.h"
#include "misc.h"
#if (CRYPTOPP_ARM_NEON_AVAILABLE) && defined(__GNUC__) #ifndef EXCEPTION_EXECUTE_HANDLER
# define EXCEPTION_EXECUTE_HANDLER 1
#endif
#if (CRYPTOPP_ARM_NEON_AVAILABLE)
# include "arm_neon.h" # include "arm_neon.h"
#endif #endif

View File

@ -44,9 +44,9 @@ extern "C" {
extern const word32 SHA256_K[64]; extern const word32 SHA256_K[64];
#if (CRYPTOPP_ARMV8A_SHA_AVAILABLE)
bool CPU_TrySHA1_ARMV8() bool CPU_TrySHA1_ARMV8()
{ {
#if (CRYPTOPP_ARMV8A_SHA_AVAILABLE)
# if defined(CRYPTOPP_MS_STYLE_INLINE_ASSEMBLY) # if defined(CRYPTOPP_MS_STYLE_INLINE_ASSEMBLY)
volatile bool result = true; volatile bool result = true;
__try __try
@ -66,7 +66,7 @@ bool CPU_TrySHA1_ARMV8()
return false; return false;
} }
return result; return result;
#else # else
// longjmp and clobber warnings. Volatile is required. // longjmp and clobber warnings. Volatile is required.
// http://github.com/weidai11/cryptopp/issues/24 and http://stackoverflow.com/q/7721854 // http://github.com/weidai11/cryptopp/issues/24 and http://stackoverflow.com/q/7721854
volatile bool result = true; volatile bool result = true;
@ -98,12 +98,14 @@ bool CPU_TrySHA1_ARMV8()
signal(SIGILL, oldHandler); signal(SIGILL, oldHandler);
return result; return result;
# endif # endif
#else
return false;
} }
#endif // CRYPTOPP_ARMV8A_SHA_AVAILABLE #endif // CRYPTOPP_ARMV8A_SHA_AVAILABLE
#if (CRYPTOPP_ARMV8A_SHA_AVAILABLE)
bool CPU_TrySHA2_ARMV8() bool CPU_TrySHA2_ARMV8()
{ {
#if (CRYPTOPP_ARMV8A_SHA_AVAILABLE)
# if defined(CRYPTOPP_MS_STYLE_INLINE_ASSEMBLY) # if defined(CRYPTOPP_MS_STYLE_INLINE_ASSEMBLY)
volatile bool result = true; volatile bool result = true;
__try __try
@ -153,6 +155,8 @@ bool CPU_TrySHA2_ARMV8()
signal(SIGILL, oldHandler); signal(SIGILL, oldHandler);
return result; return result;
# endif # endif
#else
return false;
} }
#endif // CRYPTOPP_ARMV8A_SHA_AVAILABLE #endif // CRYPTOPP_ARMV8A_SHA_AVAILABLE