Skip to content

Commit 84dc1ab

Browse files
authored
Provide a mechanism to shut down global SIMD support (#1627)
Signed-off-by: Juan Cruz Viotti <jv@jviotti.com>
1 parent 78c8548 commit 84dc1ab

File tree

4 files changed

+46
-39
lines changed

4 files changed

+46
-39
lines changed

CMakeLists.txt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,11 @@ option(SOURCEMETA_CORE_CONTRIB_GOOGLEBENCHMARK "Build the GoogleBenchmark librar
2222

2323
include(Sourcemeta)
2424

25+
# Don't force downstream consumers on it
26+
if(PROJECT_IS_TOP_LEVEL)
27+
sourcemeta_enable_simd()
28+
endif()
29+
2530
# TODO: Turn this into a re-usable utility CMake function
2631
if(SOURCEMETA_CORE_INSTALL)
2732
include(GNUInstallDirs)

cmake/Sourcemeta.cmake

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ set(SOURCEMETA_UTILITIES_DIRECTORY "${CMAKE_CURRENT_LIST_DIR}/common")
22
include("${SOURCEMETA_UTILITIES_DIRECTORY}/shim.cmake")
33
include("${SOURCEMETA_UTILITIES_DIRECTORY}/variables.cmake")
44
include("${SOURCEMETA_UTILITIES_DIRECTORY}/defaults.cmake")
5+
include("${SOURCEMETA_UTILITIES_DIRECTORY}/compiler/simd.cmake")
56
include("${SOURCEMETA_UTILITIES_DIRECTORY}/compiler/sanitizer.cmake")
67
include("${SOURCEMETA_UTILITIES_DIRECTORY}/compiler/options.cmake")
78
include("${SOURCEMETA_UTILITIES_DIRECTORY}/options/enum.cmake")

cmake/common/compiler/simd.cmake

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
macro(sourcemeta_enable_simd)
2+
# Attempt to enable SIMD (SSE/AVX/NEON)
3+
include(CheckCXXCompilerFlag)
4+
if(CMAKE_SYSTEM_PROCESSOR MATCHES "x86|AMD64")
5+
if(MSVC)
6+
check_cxx_compiler_flag("/arch:AVX2" COMPILER_SUPPORTS_AVX2)
7+
if(COMPILER_SUPPORTS_AVX2)
8+
message(STATUS "Enabling SIMD AVX2")
9+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /arch:AVX2")
10+
elseif(NOT CMAKE_CL_64)
11+
message(STATUS "Enabling SIMD SSE2")
12+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /arch:SSE2")
13+
endif()
14+
else()
15+
check_cxx_compiler_flag("-mavx2" COMPILER_SUPPORTS_AVX2)
16+
if(COMPILER_SUPPORTS_AVX2)
17+
message(STATUS "Enabling SIMD AVX2")
18+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mavx2")
19+
else()
20+
check_cxx_compiler_flag("-msse4.2" COMPILER_SUPPORTS_SSE42)
21+
if(COMPILER_SUPPORTS_SSE42)
22+
message(STATUS "Enabling SIMD SSE4.2")
23+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse4.2")
24+
else()
25+
check_cxx_compiler_flag("-msse2" COMPILER_SUPPORTS_SSE2)
26+
if(COMPILER_SUPPORTS_SSE2)
27+
message(STATUS "Enabling SIMD SSE2")
28+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse2")
29+
endif()
30+
endif()
31+
endif()
32+
endif()
33+
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "arm64|aarch64" AND NOT MSVC)
34+
check_cxx_compiler_flag("-march=armv8-a+fp+simd" COMPILER_SUPPORTS_NEON)
35+
if(COMPILER_SUPPORTS_NEON)
36+
message(STATUS "Enabling SIMD NEON")
37+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=armv8-a+fp+simd")
38+
endif()
39+
endif()
40+
endmacro()

cmake/common/defaults.cmake

Lines changed: 0 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -109,42 +109,3 @@ if(CMAKE_BUILD_TYPE STREQUAL "Release")
109109
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -flto=full")
110110
endif()
111111
endif()
112-
113-
# Attempt to enable SIMD (SSE/AVX/NEON)
114-
include(CheckCXXCompilerFlag)
115-
if(CMAKE_SYSTEM_PROCESSOR MATCHES "x86|AMD64")
116-
if(MSVC)
117-
check_cxx_compiler_flag("/arch:AVX2" COMPILER_SUPPORTS_AVX2)
118-
if(COMPILER_SUPPORTS_AVX2)
119-
message(STATUS "Enabling SIMD AVX2")
120-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /arch:AVX2")
121-
elseif(NOT CMAKE_CL_64)
122-
message(STATUS "Enabling SIMD SSE2")
123-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /arch:SSE2")
124-
endif()
125-
else()
126-
check_cxx_compiler_flag("-mavx2" COMPILER_SUPPORTS_AVX2)
127-
if(COMPILER_SUPPORTS_AVX2)
128-
message(STATUS "Enabling SIMD AVX2")
129-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mavx2")
130-
else()
131-
check_cxx_compiler_flag("-msse4.2" COMPILER_SUPPORTS_SSE42)
132-
if(COMPILER_SUPPORTS_SSE42)
133-
message(STATUS "Enabling SIMD SSE4.2")
134-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse4.2")
135-
else()
136-
check_cxx_compiler_flag("-msse2" COMPILER_SUPPORTS_SSE2)
137-
if(COMPILER_SUPPORTS_SSE2)
138-
message(STATUS "Enabling SIMD SSE2")
139-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse2")
140-
endif()
141-
endif()
142-
endif()
143-
endif()
144-
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "arm64|aarch64" AND NOT MSVC)
145-
check_cxx_compiler_flag("-march=armv8-a+fp+simd" COMPILER_SUPPORTS_NEON)
146-
if(COMPILER_SUPPORTS_NEON)
147-
message(STATUS "Enabling SIMD NEON")
148-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=armv8-a+fp+simd")
149-
endif()
150-
endif()

0 commit comments

Comments
 (0)