aboutsummaryrefslogtreecommitdiff
path: root/CMakeLists.txt
diff options
context:
space:
mode:
authory-jan137 <yousefjan24000@gmail.com>2026-04-27 07:24:41 +0300
committery-jan137 <yousefjan24000@gmail.com>2026-04-27 07:24:41 +0300
commit4602b36e9d5ea08656e3222846a1f161bbb1cec1 (patch)
tree87618f154f7ebe91657ba1501d695d45a31e7881 /CMakeLists.txt
parentb8bc28c70a6f2b0e7de81e85a796303d514df008 (diff)
Module refactor
Diffstat (limited to 'CMakeLists.txt')
-rw-r--r--CMakeLists.txt79
1 files changed, 30 insertions, 49 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index e345571..37dcaf7 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,45 +1,49 @@
-cmake_minimum_required(VERSION 3.20)
+cmake_minimum_required(VERSION 3.30)
+
+set(CMAKE_EXPERIMENTAL_CXX_IMPORT_STD "d0edc3af-4c50-42ea-a356-e2862fe7a444")
+
+if(APPLE AND CMAKE_CXX_COMPILER MATCHES "/opt/homebrew/.*/llvm/")
+ set(CMAKE_CXX_COMPILER_ID_ARG1 "-B/opt/homebrew/opt/llvm/lib/c++/")
+ set(CMAKE_CXX_FLAGS_INIT "-B/opt/homebrew/opt/llvm/lib/c++/")
+endif()
project(linear_algebra_cpp VERSION 0.1.0 LANGUAGES CXX)
-set(CMAKE_CXX_STANDARD 20)
+set(CMAKE_CXX_STANDARD 23)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
-set(CMAKE_CXX_EXTENSIONS OFF)
+set(CMAKE_CXX_EXTENSIONS ON)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
+set(CMAKE_CXX_MODULE_STD ON)
+
option(LINEAR_ALGEBRA_BUILD_TESTS "Build unit tests" ON)
-set(LINEAR_ALGEBRA_SIMD "AUTO" CACHE STRING "SIMD backend for matmul: AUTO, NONE, AVX, AVX2, AVX512")
-set_property(CACHE LINEAR_ALGEBRA_SIMD PROPERTY STRINGS AUTO NONE AVX AVX2 AVX512)
+set(LINEAR_ALGEBRA_SIMD "AUTO" CACHE STRING "SIMD backend for matmul: AUTO (uses NEON on ARM, scalar otherwise), or NONE")
+set_property(CACHE LINEAR_ALGEBRA_SIMD PROPERTY STRINGS AUTO NONE)
-add_library(linear_algebra
- src/vector.cpp
- src/matrix.cpp
- src/norms.cpp
- src/triangular_solve.cpp
- src/lu.cpp
- src/qr.cpp
- src/qr_iteration.cpp
-)
+add_library(linear_algebra)
add_library(linear_algebra::core ALIAS linear_algebra)
-target_include_directories(linear_algebra
+target_sources(linear_algebra
PUBLIC
- ${PROJECT_SOURCE_DIR}/include
+ FILE_SET CXX_MODULES FILES
+ src/linalgebra.cpp
+ src/linalgebra_error.cpp
+ src/vector.cpp
+ src/matrix.cpp
+ src/norms.cpp
+ src/triangular_solve.cpp
+ src/lu.cpp
+ src/qr.cpp
+ src/qr_iteration.cpp
)
-target_compile_features(linear_algebra PUBLIC cxx_std_20)
+target_compile_features(linear_algebra PUBLIC cxx_std_23)
if(CMAKE_CXX_COMPILER_ID MATCHES "Clang|GNU")
target_compile_options(linear_algebra PRIVATE -Wall -Wextra -Wpedantic -Wconversion)
- if(LINEAR_ALGEBRA_SIMD STREQUAL "AVX")
- target_compile_options(linear_algebra PRIVATE -mavx)
- elseif(LINEAR_ALGEBRA_SIMD STREQUAL "AVX2")
- target_compile_options(linear_algebra PRIVATE -mavx2)
- elseif(LINEAR_ALGEBRA_SIMD STREQUAL "AVX512")
- target_compile_options(linear_algebra PRIVATE -mavx512f)
- elseif(LINEAR_ALGEBRA_SIMD STREQUAL "NONE")
+ if(LINEAR_ALGEBRA_SIMD STREQUAL "NONE")
target_compile_definitions(linear_algebra PRIVATE LINEAR_ALGEBRA_FORCE_SCALAR_MATMUL=1)
elseif(LINEAR_ALGEBRA_SIMD STREQUAL "AUTO")
else()
@@ -50,7 +54,7 @@ elseif(MSVC)
if(LINEAR_ALGEBRA_SIMD STREQUAL "NONE")
target_compile_definitions(linear_algebra PRIVATE LINEAR_ALGEBRA_FORCE_SCALAR_MATMUL=1)
elseif(NOT LINEAR_ALGEBRA_SIMD STREQUAL "AUTO")
- message(WARNING "LINEAR_ALGEBRA_SIMD explicit x86 flags are only wired for Clang/GNU right now.")
+ message(FATAL_ERROR "Unsupported LINEAR_ALGEBRA_SIMD value: ${LINEAR_ALGEBRA_SIMD}")
endif()
endif()
@@ -64,33 +68,10 @@ if(LINEAR_ALGEBRA_BUILD_EXPERIMENTS)
add_executable(matmul experiments/matmul.cpp)
target_link_libraries(matmul PRIVATE linear_algebra::core)
-
-# find_package(BLAS)
-# find_package(LAPACK)
-# if(BLAS_FOUND AND LAPACK_FOUND)
-# add_executable(blas_comparison experiments/blas_comparison.cpp)
-# target_link_libraries(blas_comparison PRIVATE
-# linear_algebra::core
-# ${BLAS_LIBRARIES}
-# ${LAPACK_LIBRARIES}
-# )
-# if(DEFINED BLAS_INCLUDE_DIRS)
-# target_include_directories(blas_comparison PRIVATE ${BLAS_INCLUDE_DIRS})
-# endif()
-# if(APPLE)
-# # Suppress deprecation warnings from Accelerate headers on recent macOS.
-# target_compile_options(blas_comparison PRIVATE -Wno-deprecated-declarations)
-# endif()
-# else()
-# message(STATUS "BLAS/LAPACK not found — skipping blas_comparison experiment")
-# endif()
-# endif()
-
-if(LINEAR_ALGEBRA_BUILD_TESTS)
- include(FetchContent)
endif()
if(LINEAR_ALGEBRA_BUILD_TESTS)
+ include(FetchContent)
FetchContent_Declare(
Catch2