Skip to content

Commit 7373850

Browse files
committed
2 parents 6d16398 + 84e6aec commit 7373850

File tree

13 files changed

+1644
-713
lines changed

13 files changed

+1644
-713
lines changed

.github/workflows/C++.yml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,6 @@ jobs:
7474

7575
steps:
7676
- uses: actions/checkout@v4
77-
7877
- name: 'Setup MSYS2'
7978
uses: msys2/setup-msys2@v2
8079
with:

.github/workflows/python_wheel.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,9 @@ jobs:
186186

187187
steps:
188188
- uses: actions/checkout@v4
189+
- uses: git-for-windows/setup-git-for-windows-sdk
190+
with:
191+
flavor: minimal
189192

190193
- name: Install GCC and make
191194
run: C:\msys64\usr\bin\bash.exe -lc "pacman -Sy --noconfirm make mingw-w64-x86_64-toolchain mingw-w64-x86_64-fftw"

CMakeLists.txt

Lines changed: 26 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,24 @@ cmake_minimum_required(VERSION 3.19)
22

33
project(finufft VERSION 2.2.0 LANGUAGES C CXX)
44

5+
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
6+
57
set(GNU_LIKE_FRONTENDS AppleClang Clang GNU)
68
if (CMAKE_CXX_COMPILER_ID IN_LIST GNU_LIKE_FRONTENDS)
79
# Set custom compiler flags for gcc-compatible compilers
8-
set(CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG -funroll-loops")
9-
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O3 -g -DNDEBUG -funroll-loops")
10+
set(FINUFFT_CXX_FLAGS_RELEASE -O3 -funroll-loops -ffp-contract=fast)
11+
set(FINUFFT_CXX_FLAGS_RELWITHDEBINFO -g ${FINUFFT_CXX_FLAGS_RELEASE})
1012
endif ()
1113

1214
include(CTest)
1315

14-
if (CMAKE_SYSTEM_PROCESSOR MATCHES "ppc|ppc64|powerpc|powerpc64" OR (APPLE AND CMAKE_OSX_ARCHITECTURES MATCHES "ppc|ppc64"))
15-
# PowerPC arch does not have -march flag.
16-
set(FINUFFT_ARCH_FLAGS "-mtune=native" CACHE STRING "Compiler flags for specifying target architecture.")
17-
else ()
18-
set(FINUFFT_ARCH_FLAGS "-march=native" CACHE STRING "Compiler flags for specifying target architecture.")
16+
if (CMAKE_CXX_COMPILER_ID IN_LIST GNU_LIKE_FRONTENDS)
17+
if (CMAKE_SYSTEM_PROCESSOR MATCHES "ppc|ppc64|powerpc|powerpc64" OR (APPLE AND CMAKE_OSX_ARCHITECTURES MATCHES "ppc|ppc64"))
18+
# PowerPC arch does not have -march flag.
19+
set(FINUFFT_ARCH_FLAGS "-mtune=native" CACHE STRING "Compiler flags for specifying target architecture.")
20+
else ()
21+
set(FINUFFT_ARCH_FLAGS "-march=native" CACHE STRING "Compiler flags for specifying target architecture.")
22+
endif ()
1923
endif ()
2024
set(FINUFFT_FFTW_SUFFIX "OpenMP" CACHE STRING "Suffix for FFTW libraries (e.g. OpenMP, Threads etc.)")
2125
set(FINUFFT_FFTW_LIBRARIES "DEFAULT" CACHE STRING "Specify a custom FFTW library")
@@ -31,7 +35,7 @@ option(FINUFFT_USE_OPENMP "Whether to use OpenMP for parallelization. If disable
3135
option(FINUFFT_USE_CUDA "Whether to build CUDA accelerated FINUFFT library (libcufinufft). This is completely independent of the main FINUFFT library" OFF)
3236
option(FINUFFT_USE_CPU "Whether to build the ordinary FINUFFT library (libfinufft)." ON)
3337
option(FINUFFT_STATIC_LINKING "Whether to link the static FINUFFT library (libfinufft_static)." ON)
34-
option(FINUFFT_BUILD_DEVEL "Whether to build developement executables" OFF)
38+
option(FINUFFT_BUILD_DEVEL "Whether to build development executables" OFF)
3539
# sphinx tag (don't remove): @cmake_opts_end
3640

3741
if (FINUFFT_USE_CPU)
@@ -47,10 +51,11 @@ if (FINUFFT_USE_CPU)
4751

4852
set(CPM_DOWNLOAD_VERSION 0.38.0)
4953
set(FFTW_VERSION 3.3.10)
50-
54+
set(XTL_VERSION 0.7.7)
55+
set(XSIMD_VERSION 13.0.0)
5156
include(cmake/setupCPM.cmake)
5257
include(cmake/setupFFTW.cmake)
53-
58+
include(cmake/setupXSIMD.cmake)
5459
endif ()
5560

5661
if (FINUFFT_BUILD_MATLAB)
@@ -92,8 +97,8 @@ function(enable_asan target)
9297

9398
if (CMAKE_CXX_COMPILER_ID IN_LIST FINUFFT_GNU_LIKE_COMPILERS)
9499
# Enable only on clang / gcc compilers.
95-
target_compile_options(${target} PRIVATE $<$<CONFIG:DEBUG>:-fsanitize=address>)
96-
target_link_options(${target} PRIVATE $<$<CONFIG:DEBUG>:-fsanitize=address>)
100+
target_compile_options(${target} PRIVATE $<$<CONFIG:DEBUG>:-fsanitize=address -fsanitize=undefined -fsanitize=bounds-strict>)
101+
target_link_options(${target} PRIVATE $<$<CONFIG:DEBUG>:-fsanitize=address -fsanitize=undefined -fsanitize=bounds-strict>)
97102
endif ()
98103
endfunction()
99104

@@ -119,17 +124,18 @@ endfunction()
119124
# Utility function to set finufft compilation options.
120125
function(set_finufft_options target)
121126
set_property(TARGET ${target} PROPERTY POSITION_INDEPENDENT_CODE ON)
122-
set_property(TARGET ${target} PROPERTY CMAKE_CXX_STANDARD 14)
127+
target_compile_features(${target} PRIVATE cxx_std_17)
128+
123129
enable_asan(${target})
124130

125131
target_compile_options(${target} PRIVATE SHELL:$<$<CONFIG:Release,RelWithDebInfo>:${FINUFFT_ARCH_FLAGS}>)
126132
if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
127133
# Enable cx-limited-range on supported compilers
128134
target_compile_options(${target} PRIVATE $<$<CONFIG:Release,RelWithDebInfo>:-fcx-limited-range>)
129135
endif ()
130-
131-
target_include_directories(${target} PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>)
132-
target_include_directories(${target} SYSTEM INTERFACE $<INSTALL_INTERFACE:${CMAKE_INSTALL_PREFIX}/include>)
136+
target_compile_options(${target} PRIVATE $<$<CONFIG:Release>:${FINUFFT_CXX_FLAGS_RELEASE}>)
137+
target_compile_options(${target} PRIVATE $<$<CONFIG:RelWithDebInfo>:${FINUFFT_CXX_FLAGS_RELWITHDEBINFO}>)
138+
target_include_directories(${target} PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/include")
133139
if (FINUFFT_USE_OPENMP)
134140
target_link_libraries(${target} PRIVATE OpenMP::OpenMP_CXX)
135141
# there are issues on windows with OpenMP and CMake, so we need to manually add the flags
@@ -163,12 +169,13 @@ if (FINUFFT_USE_CPU)
163169
target_compile_definitions(finufft_f32 PRIVATE SINGLE)
164170
set_finufft_options(finufft_f32)
165171
target_link_libraries(finufft_f32 PUBLIC ${FINUFFT_FFTW_LIBRARIES})
172+
target_link_libraries(finufft_f32 PRIVATE xsimd)
166173

167174
add_library(finufft_f64 OBJECT ${FINUFFT_PRECISION_DEPENDENT_SOURCES})
168175
target_compile_definitions(finufft_f64 PRIVATE)
169176
set_finufft_options(finufft_f64)
170177
target_link_libraries(finufft_f64 PUBLIC ${FINUFFT_FFTW_LIBRARIES})
171-
178+
target_link_libraries(finufft_f64 PRIVATE xsimd)
172179
if (WIN32)
173180
add_library(finufft_f32_dll OBJECT ${FINUFFT_PRECISION_DEPENDENT_SOURCES})
174181
target_compile_definitions(finufft_f32_dll PRIVATE SINGLE dll_EXPORTS FINUFFT_DLL)
@@ -193,8 +200,7 @@ if (FINUFFT_USE_CPU)
193200
if (NOT WIN32)
194201
target_link_libraries(finufft PUBLIC m)
195202
endif ()
196-
target_include_directories(finufft PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>)
197-
target_include_directories(finufft SYSTEM INTERFACE $<INSTALL_INTERFACE:${CMAKE_INSTALL_PREFIX}/include>)
203+
target_include_directories(finufft PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/include")
198204

199205
add_library(finufft_static STATIC src/utils_precindep.cpp contrib/legendre_rule_fast.cpp)
200206
set_finufft_options(finufft_static)
@@ -203,8 +209,7 @@ if (FINUFFT_USE_CPU)
203209
if (NOT WIN32)
204210
target_link_libraries(finufft_static PUBLIC m)
205211
endif ()
206-
target_include_directories(finufft_static PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>)
207-
target_include_directories(finufft_static SYSTEM INTERFACE $<INSTALL_INTERFACE:${CMAKE_INSTALL_PREFIX}/include>)
212+
target_include_directories(finufft_static PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/include")
208213

209214
file(GLOB FINUFFT_PUBLIC_HEADERS "${CMAKE_CURRENT_SOURCE_DIR}/include/finufft*.h")
210215
set_target_properties(finufft PROPERTIES PUBLIC_HEADER "${FINUFFT_PUBLIC_HEADERS}")

cmake/setupXSIMD.cmake

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
CPMAddPackage(
2+
NAME findxtl
3+
GIT_REPOSITORY "https://github.com/xtensor-stack/xtl.git"
4+
GIT_TAG ${XTL_VERSION}
5+
EXCLUDE_FROM_ALL YES
6+
GIT_SHALLOW YES
7+
OPTIONS "XTL_DISABLE_EXCEPTIONS YES"
8+
)
9+
10+
CPMAddPackage(
11+
NAME findxsimd
12+
GIT_REPOSITORY "https://github.com/xtensor-stack/xsimd.git"
13+
GIT_TAG ${XSIMD_VERSION}
14+
EXCLUDE_FROM_ALL YES
15+
GIT_SHALLOW YES
16+
OPTIONS
17+
"XSIMD_SKIP_INSTALL YES"
18+
"XSIMD_ENABLE_XTL_COMPLEX YES"
19+
)

devel/CMakeLists.txt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,5 +18,7 @@ if (benchmark_ADDED)
1818
endif()
1919

2020
add_executable(foldrescale foldrescale.cpp)
21-
target_link_libraries(foldrescale finufft benchmark)
22-
target_compile_options(foldrescale PRIVATE -mavx2)
21+
target_link_libraries(foldrescale finufft benchmark xsimd)
22+
add_executable(padding padding.cpp)
23+
target_link_libraries(padding finufft xsimd)
24+
target_compile_options(padding PRIVATE -march=native)

0 commit comments

Comments
 (0)