aboutsummaryrefslogtreecommitdiffstats
path: root/CMakeLists.txt
diff options
context:
space:
mode:
authorChris Robinson <[email protected]>2022-03-23 23:40:54 -0700
committerChris Robinson <[email protected]>2022-03-23 23:40:54 -0700
commitbdf18d60db8d339c9fa3506d3eac259f9dd244fc (patch)
treedd1118816d01757cc39e657035da0af6ca4bb088 /CMakeLists.txt
parent3b09b7761fe625ba157b9913243c556fbebbbbe1 (diff)
Be more careful about checking compiler flags
Certain combinations of MSVC and CMake seem to allow all compiler flag checks to pass, which was causing certain GCC attributes to be used on MSVC.
Diffstat (limited to 'CMakeLists.txt')
-rw-r--r--CMakeLists.txt30
1 files changed, 15 insertions, 15 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index ad956b10..4e3ca446 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -355,17 +355,17 @@ endif()
set(SSE2_SWITCH "")
-set(OLD_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS})
if(NOT MSVC)
+ set(OLD_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS})
# Yes GCC, really don't accept command line options you don't support
set(CMAKE_REQUIRED_FLAGS "${OLD_REQUIRED_FLAGS} -Werror")
+ check_c_compiler_flag(-msse2 HAVE_MSSE2_SWITCH)
+ if(HAVE_MSSE2_SWITCH)
+ set(SSE2_SWITCH "-msse2")
+ endif()
+ set(CMAKE_REQUIRED_FLAGS ${OLD_REQUIRED_FLAGS})
+ unset(OLD_REQUIRED_FLAGS)
endif()
-check_c_compiler_flag(-msse2 HAVE_MSSE2_SWITCH)
-if(HAVE_MSSE2_SWITCH)
- set(SSE2_SWITCH "-msse2")
-endif()
-set(CMAKE_REQUIRED_FLAGS ${OLD_REQUIRED_FLAGS})
-unset(OLD_REQUIRED_FLAGS)
check_include_file(xmmintrin.h HAVE_XMMINTRIN_H)
check_include_file(emmintrin.h HAVE_EMMINTRIN_H)
@@ -450,7 +450,14 @@ set(FPMATH_SET "0")
if(CMAKE_SIZEOF_VOID_P MATCHES "4" AND HAVE_SSE2)
option(ALSOFT_ENABLE_SSE2_CODEGEN "Enable SSE2 code generation instead of x87 for 32-bit targets." TRUE)
if(ALSOFT_ENABLE_SSE2_CODEGEN)
- if(SSE2_SWITCH OR NOT MSVC)
+ if(MSVC)
+ check_c_compiler_flag("/arch:SSE2" HAVE_ARCH_SSE2)
+ if(HAVE_ARCH_SSE2)
+ set(SSE_FLAGS ${SSE_FLAGS} "/arch:SSE2")
+ set(C_FLAGS ${C_FLAGS} ${SSE_FLAGS})
+ set(FPMATH_SET 2)
+ endif()
+ elseif(SSE2_SWITCH)
check_c_compiler_flag("${SSE2_SWITCH} -mfpmath=sse" HAVE_MFPMATH_SSE_2)
if(HAVE_MFPMATH_SSE_2)
set(SSE_FLAGS ${SSE_FLAGS} ${SSE2_SWITCH} -mfpmath=sse)
@@ -462,13 +469,6 @@ if(CMAKE_SIZEOF_VOID_P MATCHES "4" AND HAVE_SSE2)
# OSs don't guarantee this on 32-bit, so externally-callable
# functions need to ensure an aligned stack.
set(EXPORT_DECL "${EXPORT_DECL} __attribute__((force_align_arg_pointer))")
- elseif(MSVC)
- check_c_compiler_flag("/arch:SSE2" HAVE_ARCH_SSE2)
- if(HAVE_ARCH_SSE2)
- set(SSE_FLAGS ${SSE_FLAGS} "/arch:SSE2")
- set(C_FLAGS ${C_FLAGS} ${SSE_FLAGS})
- set(FPMATH_SET 2)
- endif()
endif()
endif()
endif()