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

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)