cmake_minimum_required(VERSION 3.10) project(EigenBenchmarks CXX) find_package(benchmark REQUIRED) find_package(BLAS QUIET) # Eigen is a header-only library; find it relative to this directory. set(EIGEN_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/..") # Helper: add a Google Benchmark target. # eigen_add_benchmark(name source [LIBRARIES lib1 lib2 ...] [DEFINITIONS def1 def2 ...]) function(eigen_add_benchmark name source) cmake_parse_arguments(BENCH "" "" "LIBRARIES;DEFINITIONS" ${ARGN}) if(NOT IS_ABSOLUTE "${source}") set(source "${CMAKE_CURRENT_SOURCE_DIR}/${source}") endif() add_executable(${name} ${source}) target_include_directories(${name} PRIVATE ${EIGEN_SOURCE_DIR}) target_link_libraries(${name} PRIVATE benchmark::benchmark benchmark::benchmark_main) if(BENCH_LIBRARIES) target_link_libraries(${name} PRIVATE ${BENCH_LIBRARIES}) endif() target_compile_options(${name} PRIVATE -O3 -DNDEBUG) if(BENCH_DEFINITIONS) target_compile_definitions(${name} PRIVATE ${BENCH_DEFINITIONS}) endif() endfunction() add_subdirectory(Core) add_subdirectory(Cholesky) add_subdirectory(LU) add_subdirectory(QR) add_subdirectory(SVD) add_subdirectory(Eigenvalues) add_subdirectory(Geometry) add_subdirectory(Sparse) add_subdirectory(FFT) add_subdirectory(Solvers) add_subdirectory(Tuning)