build: add DISABLE_CXXFLAGS_OPTIMIZATIONS option

handy when packaging should control optimization without build system
masking. Especially handy when building to common architecture.

no change of behavior if DISABLE_CXXFLAGS_OPTIMIZATIONS is unset.

Signed-off-by: Alon Bar-Lev <alon.barlev@gmail.com>
pull/326/head
Alon Bar-Lev 2016-10-21 23:49:04 +03:00
parent b49343398b
commit db50b93766
2 changed files with 40 additions and 33 deletions

View File

@ -39,6 +39,7 @@ option(BUILD_DOCUMENTATION "Use Doxygen to create the HTML based API documentati
option(DISABLE_ASM "Disable ASM" OFF) option(DISABLE_ASM "Disable ASM" OFF)
option(DISABLE_SSSE3 "Disable SSSE3" OFF) option(DISABLE_SSSE3 "Disable SSSE3" OFF)
option(DISABLE_AESNI "Disable AES-NI" OFF) option(DISABLE_AESNI "Disable AES-NI" OFF)
option(DISABLE_CXXFLAGS_OPTIMIZATIONS "Disable CXXFLAGS optimizations" OFF)
set(CRYPTOPP_DATA_DIR "" CACHE PATH "Crypto++ test data directory") set(CRYPTOPP_DATA_DIR "" CACHE PATH "Crypto++ test data directory")
#============================================================================ #============================================================================
@ -125,7 +126,7 @@ if ((NOT CRYPTOPP_CROSS_COMPILE) AND (NOT (WINDOWS OR WINDOWS_STORE OR WINDOWS_P
endif() endif()
# -march=native for GCC, Clang and ICC in any version that does support it. # -march=native for GCC, Clang and ICC in any version that does support it.
if ((NOT CRYPTOPP_CROSS_COMPILE) AND (CMAKE_CXX_COMPILER_ID MATCHES "Clang|GNU|Intel")) if ((NOT DISABLE_CXXFLAGS_OPTIMIZATIONS) AND (NOT CRYPTOPP_CROSS_COMPILE) AND (CMAKE_CXX_COMPILER_ID MATCHES "Clang|GNU|Intel"))
CHECK_CXX_COMPILER_FLAG("-march=native" COMPILER_OPT_ARCH_NATIVE_SUPPORTED) CHECK_CXX_COMPILER_FLAG("-march=native" COMPILER_OPT_ARCH_NATIVE_SUPPORTED)
if (COMPILER_OPT_ARCH_NATIVE_SUPPORTED AND NOT CMAKE_CXX_FLAGS MATCHES "-march=") if (COMPILER_OPT_ARCH_NATIVE_SUPPORTED AND NOT CMAKE_CXX_FLAGS MATCHES "-march=")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=native") SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=native")
@ -134,25 +135,27 @@ endif()
# Solaris specific # Solaris specific
if ((NOT CRYPTOPP_CROSS_COMPILE) AND "${UNAME_SYSTEM}" STREQUAL "SunOS") if ((NOT CRYPTOPP_CROSS_COMPILE) AND "${UNAME_SYSTEM}" STREQUAL "SunOS")
# SunCC needs -native if (NOT DISABLE_CXXFLAGS_OPTIMIZATIONS)
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "SunPro") # SunCC needs -native
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -native") if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "SunPro")
endif() SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -native")
endif()
# Determine 32-bit vs 64-bit # Determine 32-bit vs 64-bit
set (ISA_CMD "isainfo") set (ISA_CMD "isainfo")
set (ISA_ARG "-b") set (ISA_ARG "-b")
execute_process(COMMAND ${ISA_CMD} ${ISA_ARG} execute_process(COMMAND ${ISA_CMD} ${ISA_ARG}
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
RESULT_VARIABLE ISA_RESULT RESULT_VARIABLE ISA_RESULT
OUTPUT_VARIABLE ISA_INFO) OUTPUT_VARIABLE ISA_INFO)
string(REGEX REPLACE "\n$" "" ISA_INFO "${ISA_INFO}") string(REGEX REPLACE "\n$" "" ISA_INFO "${ISA_INFO}")
# Set 64-bit or 32-bit # Set 64-bit or 32-bit
if ("${ISA_INFO}" STREQUAL "64") if ("${ISA_INFO}" STREQUAL "64")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -m64") SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -m64")
else() else()
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -m32") SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -m32")
endif()
endif() endif()
# GCC needs to enable use of '/' # GCC needs to enable use of '/'

View File

@ -49,6 +49,8 @@ IS_X86 := $(shell isainfo -k 2>/dev/null | grep -i -c "i386")
IS_X64 := $(shell isainfo -k 2>/dev/null | grep -i -c "amd64") IS_X64 := $(shell isainfo -k 2>/dev/null | grep -i -c "amd64")
endif endif
DISABLE_CXXFLAGS_OPTIMIZATIONS := 0
########################################################### ###########################################################
##### General Variables ##### ##### General Variables #####
########################################################### ###########################################################
@ -125,21 +127,23 @@ ifeq ($(IS_X86)$(IS_X32)$(IS_CYGWIN)$(IS_MINGW)$(SUN_COMPILER),00000)
endif endif
endif endif
# Guard use of -march=native ifeq ($(DISABLE_CXXFLAGS_OPTIMIZATIONS),0)
ifeq ($(GCC42_OR_LATER)$(IS_NETBSD),10) # Guard use of -march=native
CXXFLAGS += -march=native ifeq ($(GCC42_OR_LATER)$(IS_NETBSD),10)
else ifneq ($(CLANG_COMPILER)$(INTEL_COMPILER),00) CXXFLAGS += -march=native
CXXFLAGS += -march=native else ifneq ($(CLANG_COMPILER)$(INTEL_COMPILER),00)
else CXXFLAGS += -march=native
# GCC 3.3 and "unknown option -march=" else
# Ubuntu GCC 4.1 compiler crash with -march=native # GCC 3.3 and "unknown option -march="
# NetBSD GCC 4.8 compiler and "bad value (native) for -march= switch" # Ubuntu GCC 4.1 compiler crash with -march=native
# Sun compiler is handled below # NetBSD GCC 4.8 compiler and "bad value (native) for -march= switch"
ifeq ($(SUN_COMPILER)$(IS_X64),01) # Sun compiler is handled below
CXXFLAGS += -m64 ifeq ($(SUN_COMPILER)$(IS_X64),01)
else ifeq ($(SUN_COMPILER)$(IS_X86),01) CXXFLAGS += -m64
CXXFLAGS += -m32 else ifeq ($(SUN_COMPILER)$(IS_X86),01)
endif # X86/X32/X64 CXXFLAGS += -m32
endif # X86/X32/X64
endif
endif endif
# Aligned access required for -O3 and above due to vectorization # Aligned access required for -O3 and above due to vectorization