diff --git a/CMakeLists.txt b/CMakeLists.txt index 2eb2c3a..cf0d045 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -12,10 +12,16 @@ endif() # Compiler-specific optimizations # Note: -ffast-math is intentionally omitted — it breaks FINUFFT (IEEE-754 violations) +# CI runners use x86-64-v3 (AVX2) for portability; local builds use native. +if(DEFINED ENV{CI} AND "$ENV{CI}" STREQUAL "true") + set(MARCH_FLAG "-march=x86-64-v3") +else() + set(MARCH_FLAG "-march=native -mtune=native") +endif() if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") - set(CMAKE_CXX_FLAGS_RELEASE "-O3 -march=native -mtune=native") + set(CMAKE_CXX_FLAGS_RELEASE "-O3 ${MARCH_FLAG}") elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Clang") - set(CMAKE_CXX_FLAGS_RELEASE "-O3 -march=native -mtune=native") + set(CMAKE_CXX_FLAGS_RELEASE "-O3 ${MARCH_FLAG}") elseif(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") set(CMAKE_CXX_FLAGS_RELEASE "/O2 /arch:AVX2") endif() diff --git a/senpy/CMakeLists.txt b/senpy/CMakeLists.txt index b1f9b8f..779cbe2 100644 --- a/senpy/CMakeLists.txt +++ b/senpy/CMakeLists.txt @@ -4,8 +4,12 @@ project(senpy) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) -# Add optimization flags -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3 -march=native") +# Add optimization flags; CI runners use x86-64-v3 (AVX2) for portability. +if(DEFINED ENV{CI} AND "$ENV{CI}" STREQUAL "true") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3 -march=x86-64-v3") +else() + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3 -march=native") +endif() # add ../cpp relative to this CMakeLists.txt set(CPP_DIR "${CMAKE_CURRENT_LIST_DIR}/../src") diff --git a/senpy/setup.py b/senpy/setup.py index 6694f87..1f894ef 100644 --- a/senpy/setup.py +++ b/senpy/setup.py @@ -107,7 +107,7 @@ def _copy_runtime_libraries(self): sources=sources, include_dirs=include_dirs, language='c++', - extra_compile_args=['-std=c++17', '-O3', '-march=native', '-DPYTHON'], + extra_compile_args=['-std=c++17', '-O3', '-march=x86-64-v3' if os.environ.get('CI') == 'true' else '-march=native', '-DPYTHON'], extra_link_args=[ f'-L{finufft_lib_dir}', '-lfinufft',