Skip to content

Commit fcdfd2d

Browse files
committed
small pyproject fixes and moderate changes to CMakeLists.txt, including add fPIC to CUDA and renaming Deepwave::OpenMP
1 parent 8dec9cb commit fcdfd2d

2 files changed

Lines changed: 56 additions & 22 deletions

File tree

CMakeLists.txt

Lines changed: 54 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ if(NOT CMAKE_BUILD_TYPE)
2020
endif()
2121

2222
# --- OpenMP Configuration ---
23-
add_library(Deepwave::OpenMP INTERFACE)
23+
add_library(Deepwave_OpenMP_Interface INTERFACE)
2424
set(OPENMP_CONFIGURED FALSE)
2525

2626
if(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()
4747
else()
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()
5454
endif()
@@ -72,8 +72,10 @@ set(AVX2_TEST_CODE "
7272

7373
if(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()
7779
endif()
7880

7981
check_c_source_compiles("${AVX2_TEST_CODE}" HAVE_AVX2)
@@ -86,12 +88,7 @@ else()
8688
endif()
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
9794
add_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()
132149
endforeach()
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()
142175
endforeach()
143176

144177
if(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()
147182
endif()
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+
)

pyproject.toml

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ license-files = ["LICENSE"]
1616
requires-python = ">=3.8"
1717
classifiers = [
1818
"Programming Language :: Python :: 3",
19-
"License :: OSI Approved :: MIT License",
2019
]
2120

2221
[project.urls]
@@ -58,8 +57,8 @@ test-command = "pytest {project}/tests/test_scalar.py"
5857
before-build = [
5958
"nuget install intelopenmp.devel.win -Version 2018.0.0 -DirectDownload -NonInteractive",
6059
"nuget install intelopenmp.redist.win -Version 2018.0.0 -DirectDownload -NonInteractive",
61-
"xcopy .\intelopenmp.redist.win.2018.0.0\runtimes\win-x64\native\libiomp5md.dll src\deepwave\ /Y",
62-
"xcopy .\intelopenmp.devel.win.2018.0.0\build\native\lib\x64\libiomp5md.lib src\deepwave\ /Y",
60+
"xcopy .\\intelopenmp.redist.win.2018.0.0\\runtimes\\win-x64\\native\\libiomp5md.dll src\\deepwave\\ /Y",
61+
"xcopy .\\intelopenmp.devel.win.2018.0.0\\build\\native\\lib\\x64\\libiomp5md.lib src\\deepwave\\ /Y",
6362
]
6463
environment = { CMAKE_ARGS = "-DOpenMP_ROOT={project}/intelopenmp.devel.win.2018.0.0" }
6564

0 commit comments

Comments
 (0)