cmake_minimum_required(VERSION 3.25) project(top3d) option(PROJECT_WITH_SIMD "Enable SIMD" ON) option(USE_SUITESPARSE "Use SuiteSparse" ON) set(CMAKE_CXX_STANDARD 17) list(PREPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake ${CMAKE_CURRENT_SOURCE_DIR}/cmake/find) add_executable(${PROJECT_NAME} main.cpp) File(GLOB CPP_FILES src/*.cpp ) add_library(${PROJECT_NAME}_lib ${CPP_FILES}) include_directories(${CMAKE_SOURCE_DIR}/src) target_link_libraries(${PROJECT_NAME} PUBLIC ${PROJECT_NAME}_lib) ## SIMD support if (PROJECT_WITH_SIMD) # Figure out SSE level support message(STATUS "Seaching for SSE...") find_package(SSE) # Apple broke AVX instructions with clang: # https://gitlab.com/libeigen/eigen/-/commit/71aa53dd6dfdc497324d9e87f59c4ba820191856 if (NOT APPLE) # Figure out AVX level support message(STATUS "Searching for AVX...") find_package(AVX) # Figure out FMA level support message(STATUS "Searching for FMA...") find_package(FMA) else () message(WARNING "Disabling AVX support: clang compiler shipped with XCode 11.[012] generates broken assembly with -macosx-version-min=10.15 and AVX enabled.") endif () # Add SSE, AVX, and FMA flags to compiler flags string(REPLACE " " ";" SIMD_FLAGS "${SSE_FLAGS} ${AVX_FLAGS} ${FMA_FLAGS}") target_compile_options(${PROJECT_NAME} PUBLIC ${SIMD_FLAGS}) endif () # Eigen3 include(eigen) target_link_libraries(${PROJECT_NAME}_lib PUBLIC Eigen3::Eigen) # Logger include(spdlog) target_link_libraries(${PROJECT_NAME}_lib PUBLIC spdlog::spdlog) # JSON Parser include(json) target_link_libraries(${PROJECT_NAME}_lib PUBLIC nlohmann::json) # TBB include(tbb) target_link_libraries(${PROJECT_NAME}_lib PUBLIC TBB::tbb) if (USE_SUITESPARSE) # SuiteSparse find_package(SuiteSparse REQUIRED) target_compile_definitions(${PROJECT_NAME} PUBLIC USE_SUITESPARSE) target_link_libraries(${PROJECT_NAME}_lib PUBLIC ${SUITESPARSE_LIBRARIES}) target_include_directories(${PROJECT_NAME}_lib PUBLIC ${SUITESPARSE_INCLUDE_DIRS}) endif () # VTK find_package(VTK REQUIRED) include(${VTK_USE_FILE}) target_link_libraries(${PROJECT_NAME}_lib PUBLIC ${VTK_LIBRARIES}) # MMA add_subdirectory(3rd/mma) target_link_libraries(${PROJECT_NAME}_lib PUBLIC mma::mma mma::gcmma) target_compile_definitions(${PROJECT_NAME}_lib PUBLIC CMAKE_SOURCE_DIR="${CMAKE_SOURCE_DIR}") target_compile_definitions(${PROJECT_NAME} PUBLIC WRITE_TENSOR)