You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
73 lines
2.4 KiB
73 lines
2.4 KiB
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)
|
|
|