Fix target misdetection on OS X with '-arch i386'

This tested OK on Linux OS X, Solaris and Windows. It may break things under IBM XL C/C++. We will cross that bridge when we get to it.
pull/548/head
Jeffrey Walton 2017-11-16 19:37:29 -05:00
parent 8734cfaa07
commit a5bf962681
No known key found for this signature in database
GPG Key ID: B36AB348921B1838
3 changed files with 25 additions and 25 deletions

View File

@ -30,16 +30,16 @@ else
GREP ?= grep
endif
IS_X86 := $(shell uname -m | $(GREP) -v "64" | $(GREP) -i -c -E "i.86|x86|i86")
IS_X64 := $(shell uname -m | $(GREP) -i -c -E "(_64|d64)")
IS_PPC32 := $(shell uname -m | $(GREP) -i -v "64" | $(GREP) -i -c -E "ppc|power")
IS_PPC64 := $(shell uname -m | $(GREP) -i -c -E "ppc64|power64")
IS_ARM32 := $(shell uname -m | $(GREP) -i -v "64" | $(GREP) -i -c -E 'armhf|arm7l|eabihf')
IS_ARM64 := $(shell uname -m | $(GREP) -i -c 'aarch64')
IS_ARMV8 ?= $(shell uname -m | $(GREP) -i -c -E 'aarch32|aarch64')
IS_NEON ?= $(shell uname -m | $(GREP) -i -c -E 'armv7|armv8|aarch32|aarch64')
IS_SPARC := $(shell uname -m | $(GREP) -i -c "sparc")
IS_SPARC64 := $(shell uname -m | $(GREP) -i -c "sparc64")
IS_X86 := $(shell $(CXX) $(CXXFLAGS) -dumpmachine 2>/dev/null | $(GREP) -v "64" | $(GREP) -i -c -E "i.86|x86|i86")
IS_X64 := $(shell $(CXX) $(CXXFLAGS) -dumpmachine 2>/dev/null | $(GREP) -i -c -E "(_64|d64)")
IS_PPC32 := $(shell $(CXX) $(CXXFLAGS) -dumpmachine 2>/dev/null | $(GREP) -i -v "64" | $(GREP) -i -c -E "ppc|power")
IS_PPC64 := $(shell $(CXX) $(CXXFLAGS) -dumpmachine 2>/dev/null | $(GREP) -i -c -E "ppc64|power64")
IS_ARM32 := $(shell $(CXX) $(CXXFLAGS) -dumpmachine 2>/dev/null | $(GREP) -i -v "64" | $(GREP) -i -c -E 'armhf|arm7l|eabihf')
IS_ARM64 := $(shell $(CXX) $(CXXFLAGS) -dumpmachine 2>/dev/null | $(GREP) -i -c 'aarch64')
IS_ARMV8 ?= $(shell $(CXX) $(CXXFLAGS) -dumpmachine 2>/dev/null | $(GREP) -i -c -E 'aarch32|aarch64')
IS_NEON ?= $(shell $(CXX) $(CXXFLAGS) -dumpmachine 2>/dev/null | $(GREP) -i -c -E 'armv7|armv8|aarch32|aarch64')
IS_SPARC := $(shell $(CXX) $(CXXFLAGS) -dumpmachine 2>/dev/null | $(GREP) -i -c "sparc")
IS_SPARC64 := $(shell $(CXX) $(CXXFLAGS) -dumpmachine 2>/dev/null | $(GREP) -i -c "sparc64")
IS_AIX := $(shell uname -s | $(GREP) -i -c 'aix')
IS_SUN := $(shell uname -s | $(GREP) -i -c "SunOS")

26
cpu.cpp
View File

@ -54,6 +54,15 @@ NAMESPACE_BEGIN(CryptoPP)
extern "C" {
typedef void (*SigHandler)(int);
};
extern "C"
{
static jmp_buf s_jmpNoCPUID;
static void SigIllHandlerCPUID(int)
{
longjmp(s_jmpNoCPUID, 1);
}
}
#endif // Not CRYPTOPP_MS_STYLE_INLINE_ASSEMBLY
// *************************** IA-32 CPUs ***************************
@ -83,17 +92,6 @@ inline bool CpuId(word32 func, word32 subfunc, word32 output[4])
#else
#ifndef CRYPTOPP_MS_STYLE_INLINE_ASSEMBLY
extern "C"
{
static jmp_buf s_jmpNoCPUID;
static void SigIllHandlerCPUID(int)
{
longjmp(s_jmpNoCPUID, 1);
}
}
#endif
// Borland/Embarcadero and Issue 498
// cpu.cpp (131): E2211 Inline assembly not allowed in inline and template functions
bool CpuId(word32 func, word32 subfunc, word32 output[4])
@ -297,7 +295,7 @@ void DetectX86Features()
if (!g_cacheLineSize)
g_cacheLineSize = CRYPTOPP_L1_CACHE_LINE_SIZE;
g_x86DetectionDone = true;
*const_cast<volatile bool*>(&g_x86DetectionDone) = true;
}
// *************************** ARM-32, Aarch32 and Aarch64 ***************************
@ -561,7 +559,7 @@ void DetectArmFeatures()
if (!g_cacheLineSize)
g_cacheLineSize = CRYPTOPP_L1_CACHE_LINE_SIZE;
g_ArmDetectionDone = true;
*const_cast<volatile bool*>(&g_ArmDetectionDone) = true;
}
// *************************** PowerPC and PowerPC64 ***************************
@ -683,7 +681,7 @@ void DetectPowerpcFeatures()
if (g_cacheLineSize <= 0)
g_cacheLineSize = CRYPTOPP_L1_CACHE_LINE_SIZE;
g_PowerpcDetectionDone = true;
*const_cast<volatile bool*>(&g_PowerpcDetectionDone) = true;
}
#endif

View File

@ -42,7 +42,9 @@ extern "C"
bool CPU_ProbeSSE2()
{
#if CRYPTOPP_BOOL_X64
// Apple switched to Intel desktops in 2005/2006 using
// Core2 Duo's, which provides SSE2 and above.
#if CRYPTOPP_BOOL_X64 || defined(__APPLE__)
return true;
#elif defined(CRYPTOPP_NO_CPU_FEATURE_PROBES)
return false;