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.
98 lines
2.8 KiB
98 lines
2.8 KiB
cmake_minimum_required(VERSION 3.22)
|
|
project(fem3d LANGUAGES CXX)
|
|
|
|
|
|
list(PREPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
|
|
# Libigl
|
|
include(libigl)
|
|
|
|
# Enable the target igl::glfw
|
|
igl_include(core)
|
|
igl_include(glfw)
|
|
|
|
# find_package(libigl REQUIRED)
|
|
|
|
|
|
# option: global linear system solver (CHOLMOD, EIGEN)
|
|
set(LINSYSSOLVER "CHOLMOD" CACHE STRING "Linear system solver to use, options: CHOLMOD (default), EIGEN")
|
|
|
|
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
|
|
set(FEM_EXTERNAL "${CMAKE_CURRENT_SOURCE_DIR}/external")
|
|
|
|
# set compile flags
|
|
set(CMAKE_CXX_STANDARD 17)
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=native")
|
|
|
|
# project source files
|
|
file(GLOB SRCFILES
|
|
"src/*.cpp"
|
|
"src/LinSysSolver/*.cpp"
|
|
)
|
|
|
|
FOREACH(item ${SRCFILES})
|
|
IF(${item} MATCHES "main.cpp")
|
|
LIST(REMOVE_ITEM SRCFILES ${item})
|
|
ENDIF(${item} MATCHES "main.cpp")
|
|
ENDFOREACH(item)
|
|
|
|
add_library(${PROJECT_NAME}_dev ${SRCFILES})
|
|
|
|
target_include_directories(${PROJECT_NAME}_dev PUBLIC
|
|
"src"
|
|
"src/LinSysSolver"
|
|
)
|
|
|
|
add_executable(${PROJECT_NAME}_bin "src/main.cpp")
|
|
target_link_libraries(${PROJECT_NAME}_bin PUBLIC ${PROJECT_NAME}_dev)
|
|
|
|
# tbb
|
|
find_package(TBB REQUIRED)
|
|
target_link_libraries(${PROJECT_NAME}_dev PUBLIC TBB::tbb)
|
|
target_compile_definitions(${PROJECT_NAME}_dev PUBLIC USE_TBB)
|
|
|
|
if(LINSYSSOLVER STREQUAL "CHOLMOD")
|
|
target_compile_definitions(${PROJECT_NAME}_dev PUBLIC LINSYSSOLVER_USE_CHOLMOD)
|
|
target_compile_definitions(${PROJECT_NAME}_dev PUBLIC USE_CHOLMOD)
|
|
else()
|
|
target_compile_definitions(${PROJECT_NAME}_dev PUBLIC LINSYSSOLVER_USE_EIGEN)
|
|
endif()
|
|
|
|
# code only support 3D
|
|
message(STATUS "Building for three dimensions (3D)")
|
|
target_compile_definitions(${PROJECT_NAME}_dev PUBLIC DIM_=3)
|
|
|
|
# add -pthread to compilation and linking
|
|
find_package(Threads REQUIRED)
|
|
target_link_libraries(${PROJECT_NAME}_dev PUBLIC ${CMAKE_THREAD_LIBS_INIT})
|
|
|
|
if(LINSYSSOLVER STREQUAL "CHOLMOD")
|
|
# SuiteSparse
|
|
find_package(SuiteSparse REQUIRED)
|
|
|
|
target_link_libraries(${PROJECT_NAME}_dev PUBLIC ${SUITESPARSE_LIBRARIES})
|
|
target_include_directories(${PROJECT_NAME}_dev PUBLIC ${SUITESPARSE_INCLUDE_DIRS})
|
|
endif()
|
|
|
|
find_package(Boost COMPONENTS filesystem REQUIRED)
|
|
target_link_libraries(${PROJECT_NAME}_dev PUBLIC ${Boost_LIBRARIES})
|
|
|
|
# MshIO
|
|
add_subdirectory(${FEM_EXTERNAL}/MshIO)
|
|
target_link_libraries(${PROJECT_NAME}_dev PUBLIC mshio::mshio)
|
|
|
|
# Add eigen
|
|
find_package(Eigen3 REQUIRED)
|
|
include_directories(${EIGEN3_INCLUDE_DIRS})
|
|
|
|
|
|
target_link_libraries(${PROJECT_NAME}_dev PUBLIC igl::core)
|
|
|
|
find_package(fmt REQUIRED)
|
|
|
|
target_link_libraries( ${PROJECT_NAME}_dev PUBLIC fmt::fmt)
|
|
|
|
# boost
|
|
find_package(Boost REQUIRED COMPONENTS system)
|
|
# boost
|
|
target_link_libraries(${PROJECT_NAME}_dev PUBLIC Boost::system )
|
|
add_definitions(-DBOOST_ERROR_CODE_HEADER_ONLY)
|
|
|