@@ -20,7 +20,7 @@ if(NOT CMAKE_BUILD_TYPE)
2020endif ()
2121
2222# --- OpenMP Configuration ---
23- add_library (Deepwave::OpenMP INTERFACE )
23+ add_library (Deepwave_OpenMP_Interface INTERFACE )
2424set (OPENMP_CONFIGURED FALSE )
2525
2626if (WIN32 )
@@ -29,26 +29,26 @@ if(WIN32)
2929 if (EXISTS "${INTEL_OMP_LIB_PATH} " )
3030 message (STATUS "Found Intel OpenMP library for Windows build." )
3131 # Use /openmp:experimental, link the Intel lib, and exclude the default MSVC lib.
32- target_compile_options (Deepwave::OpenMP INTERFACE /openmp:experimental )
33- target_link_libraries (Deepwave::OpenMP INTERFACE "${INTEL_OMP_LIB_PATH} " )
34- target_link_options (Deepwave::OpenMP INTERFACE "/nodefaultlib:vcomp" )
32+ target_compile_options (Deepwave_OpenMP_Interface INTERFACE /openmp:experimental )
33+ target_link_libraries (Deepwave_OpenMP_Interface INTERFACE "${INTEL_OMP_LIB_PATH} " )
34+ target_link_options (Deepwave_OpenMP_Interface INTERFACE "/nodefaultlib:vcomp" )
3535 set (OPENMP_CONFIGURED TRUE )
3636 else ()
3737 # Fallback for users building from source without the Intel lib.
3838 # Use standard MSVC OpenMP, but with the user-required experimental flag.
3939 message (STATUS "Intel OpenMP library not found. Falling back to standard MSVC OpenMP." )
4040 find_package (OpenMP QUIET )
4141 if (OpenMP_C_FOUND)
42- target_link_libraries (Deepwave::OpenMP INTERFACE OpenMP::OpenMP_C )
43- target_compile_options (Deepwave::OpenMP INTERFACE /openmp:experimental )
42+ target_link_libraries (Deepwave_OpenMP_Interface INTERFACE OpenMP::OpenMP_C )
43+ target_compile_options (Deepwave_OpenMP_Interface INTERFACE /openmp:experimental )
4444 set (OPENMP_CONFIGURED TRUE )
4545 endif ()
4646 endif ()
4747else ()
4848 # For non-Windows, use the standard find_package
4949 find_package (OpenMP QUIET )
5050 if (OpenMP_C_FOUND)
51- target_link_libraries (Deepwave::OpenMP INTERFACE OpenMP::OpenMP_C )
51+ target_link_libraries (Deepwave_OpenMP_Interface INTERFACE OpenMP::OpenMP_C )
5252 set (OPENMP_CONFIGURED TRUE )
5353 endif ()
5454endif ()
@@ -72,8 +72,10 @@ set(AVX2_TEST_CODE "
7272
7373if (CMAKE_C_COMPILER_ID MATCHES "GNU|Clang|Intel" )
7474 set (CMAKE_REQUIRED_FLAGS "-mavx2" )
75- elif (CMAKE_C_COMPILER_ID MATCHES "MSVC" )
75+ else ()
76+ if (CMAKE_C_COMPILER_ID MATCHES "MSVC" )
7677 set (CMAKE_REQUIRED_FLAGS "/arch:AVX2" )
78+ endif ()
7779endif ()
7880
7981check_c_source_compiles ("${AVX2_TEST_CODE} " HAVE_AVX2 )
@@ -86,12 +88,7 @@ else()
8688endif ()
8789
8890# Compiler optimization flags
89- add_compile_options (
90- $<$<CONFIG :Release >:$<$<C_COMPILER_ID :GNU ,Clang ,Intel >:-Ofast >>
91- $<$<CONFIG :Release >:$<$<C_COMPILER_ID :MSVC >:/O2 /fp :fast >>
92- $<$<BOOL :${HAVE_AVX2} >:$<$<C_COMPILER_ID :GNU ,Clang ,Intel >:-mavx2 >>
93- $<$<BOOL :${HAVE_AVX2} >:$<$<C_COMPILER_ID :MSVC >:/arch :AVX2 >>
94- )
91+
9592
9693# Add warning flags for GCC/Clang
9794add_compile_options (
@@ -128,6 +125,26 @@ foreach(ACCURACY ${SCALAR_ACCURACIES})
128125 target_compile_definitions (scalar_born_${ACCURACY}_${DTYPE}_obj PRIVATE DW_ACCURACY=${ACCURACY} DW_DTYPE=${DTYPE} DW_DEVICE=cpu )
129126 list (APPEND DEEPWAVE_OBJECTS $<TARGET_OBJECTS :scalar_born_ ${ACCURACY} _ ${DTYPE} _obj >)
130127 list (APPEND CPU_TARGETS scalar_born_${ACCURACY} _${DTYPE} _obj)
128+
129+ if (CMAKE_BUILD_TYPE MATCHES Release)
130+ if (CMAKE_C_COMPILER_ID MATCHES "GNU" OR CMAKE_C_COMPILER_ID MATCHES "Clang" OR CMAKE_C_COMPILER_ID MATCHES "Intel" )
131+ target_compile_options (scalar_${ACCURACY}_${DTYPE}_obj PRIVATE -Ofast )
132+ target_compile_options (scalar_born_${ACCURACY}_${DTYPE}_obj PRIVATE -Ofast )
133+ elseif (CMAKE_C_COMPILER_ID MATCHES "MSVC" )
134+ target_compile_options (scalar_${ACCURACY}_${DTYPE}_obj PRIVATE /O2 /fp:fast )
135+ target_compile_options (scalar_born_${ACCURACY}_${DTYPE}_obj PRIVATE /O2 /fp:fast )
136+ endif ()
137+ endif ()
138+
139+ if (HAVE_AVX2)
140+ if (CMAKE_C_COMPILER_ID MATCHES "GNU" OR CMAKE_C_COMPILER_ID MATCHES "Clang" OR CMAKE_C_COMPILER_ID MATCHES "Intel" )
141+ target_compile_options (scalar_${ACCURACY}_${DTYPE}_obj PRIVATE -mavx2 )
142+ target_compile_options (scalar_born_${ACCURACY}_${DTYPE}_obj PRIVATE -mavx2 )
143+ elseif (CMAKE_C_COMPILER_ID MATCHES "MSVC" )
144+ target_compile_options (scalar_${ACCURACY}_${DTYPE}_obj PRIVATE /arch:AVX2 )
145+ target_compile_options (scalar_born_${ACCURACY}_${DTYPE}_obj PRIVATE /arch:AVX2 )
146+ endif ()
147+ endif ()
131148 endforeach ()
132149endforeach ()
133150
@@ -138,12 +155,30 @@ foreach(ACCURACY ${ELASTIC_ACCURACIES})
138155 target_compile_definitions (elastic_${ACCURACY}_${DTYPE}_obj PRIVATE DW_ACCURACY=${ACCURACY} DW_DTYPE=${DTYPE} DW_DEVICE=cpu )
139156 list (APPEND DEEPWAVE_OBJECTS $<TARGET_OBJECTS :elastic_ ${ACCURACY} _ ${DTYPE} _obj >)
140157 list (APPEND CPU_TARGETS elastic_${ACCURACY} _${DTYPE} _obj)
158+
159+ if (CMAKE_BUILD_TYPE MATCHES Release)
160+ if (CMAKE_C_COMPILER_ID MATCHES "GNU" OR CMAKE_C_COMPILER_ID MATCHES "Clang" OR CMAKE_C_COMPILER_ID MATCHES "Intel" )
161+ target_compile_options (elastic_${ACCURACY}_${DTYPE}_obj PRIVATE -Ofast )
162+ elseif (CMAKE_C_COMPILER_ID MATCHES "MSVC" )
163+ target_compile_options (elastic_${ACCURACY}_${DTYPE}_obj PRIVATE /O2 /fp:fast )
164+ endif ()
165+ endif ()
166+
167+ if (HAVE_AVX2)
168+ if (CMAKE_C_COMPILER_ID MATCHES "GNU" OR CMAKE_C_COMPILER_ID MATCHES "Clang" OR CMAKE_C_COMPILER_ID MATCHES "Intel" )
169+ target_compile_options (elastic_${ACCURACY}_${DTYPE}_obj PRIVATE -mavx2 )
170+ elseif (CMAKE_C_COMPILER_ID MATCHES "MSVC" )
171+ target_compile_options (elastic_${ACCURACY}_${DTYPE}_obj PRIVATE /arch:AVX2 )
172+ endif ()
173+ endif ()
141174 endforeach ()
142175endforeach ()
143176
144177if (OPENMP_CONFIGURED)
145178 # Link all CPU targets to our unified OpenMP interface library in one go.
146- target_link_libraries (${CPU_TARGETS} PRIVATE Deepwave::OpenMP )
179+ foreach (CPU_TARGET ${CPU_TARGETS} )
180+ target_link_libraries (${CPU_TARGET} PRIVATE Deepwave_OpenMP_Interface )
181+ endforeach ()
147182endif ()
148183# --- End CPU object libraries ---
149184
@@ -162,8 +197,8 @@ if(CUDAToolkit_FOUND)
162197 list (APPEND DEEPWAVE_OBJECTS $<TARGET_OBJECTS :scalar_born_cu_ ${ACCURACY} _ ${DTYPE} _obj >)
163198
164199 if (CMAKE_BUILD_TYPE MATCHES Release)
165- target_compile_options (scalar_cu_${ACCURACY}_${DTYPE}_obj PRIVATE --use_fast_math -O3 --restrict )
166- target_compile_options (scalar_born_cu_${ACCURACY}_${DTYPE}_obj PRIVATE --use_fast_math -O3 --restrict )
200+ target_compile_options (scalar_cu_${ACCURACY}_${DTYPE}_obj PRIVATE --use_fast_math -O3 --restrict --compiler-options -fPIC )
201+ target_compile_options (scalar_born_cu_${ACCURACY}_${DTYPE}_obj PRIVATE --use_fast_math -O3 --restrict --compiler-options -fPIC )
167202 set_target_properties (scalar_cu_${ACCURACY} _${DTYPE} _obj PROPERTIES CUDA_ARCHITECTURES all-major)
168203 set_target_properties (scalar_born_cu_${ACCURACY} _${DTYPE} _obj PROPERTIES CUDA_ARCHITECTURES all-major)
169204 endif ()
@@ -178,7 +213,7 @@ if(CUDAToolkit_FOUND)
178213 list (APPEND DEEPWAVE_OBJECTS $<TARGET_OBJECTS :elastic_cu_ ${ACCURACY} _ ${DTYPE} _obj >)
179214
180215 if (CMAKE_BUILD_TYPE MATCHES Release)
181- target_compile_options (elastic_cu_${ACCURACY}_${DTYPE}_obj PRIVATE --use_fast_math -O3 --restrict )
216+ target_compile_options (elastic_cu_${ACCURACY}_${DTYPE}_obj PRIVATE --use_fast_math -O3 --restrict --compiler-options -fPIC )
182217 set_target_properties (elastic_cu_${ACCURACY} _${DTYPE} _obj PROPERTIES CUDA_ARCHITECTURES all-major)
183218 endif ()
184219 endforeach ()
@@ -209,4 +244,4 @@ install(TARGETS deepwave_C
209244 LIBRARY DESTINATION deepwave
210245 ARCHIVE DESTINATION deepwave
211246 RUNTIME DESTINATION deepwave
212- )
247+ )
0 commit comments