cmake_minimum_required(VERSION 3.15.2)
project(GIST VERSION 1.0)

message(STATUS "Platform: " ${CMAKE_HOST_SYSTEM_NAME})
message(STATUS "Build type: " ${CMAKE_BUILD_TYPE})

# 设置编译选项
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O3")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3")
# 设置库文件的输出地址
set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/../bin)

find_package(GCTL REQUIRED)
find_package(GCTL_OPTIMIZATION REQUIRED)
find_package(GCTL_GRAPHIC REQUIRED)
find_package(GCTL_MESH REQUIRED)
find_package(GCTL_POTENTIAL REQUIRED)
include_directories(${GCTL_INC_DIR})
include_directories(${GCTL_OPTIMIZATION_INC_DIR})
include_directories(${GCTL_GRAPHIC_DIR})
include_directories(${GCTL_MESH_INC_DIR})
include_directories(${GCTL_POTENTIAL_INC_DIR})

# 设定库源文件文件夹
aux_source_directory(assembler SRC_ASSEMBLER)
aux_source_directory(model_space SRC_MODELSPACE)
aux_source_directory(earth_1d SRC_EARTH1D)
aux_source_directory(geoid SRC_GEOID)
aux_source_directory(gravity SRC_GRAVITY)
aux_source_directory(thermal SRC_THERMAL)
aux_source_directory(pressure SRC_PRESSURE)
aux_source_directory(thermophysics SRC_THERMOPHYSICS)
aux_source_directory(geophysic_model SRC_GEOPHYSIC)

# 以下部分为库的编译
# 注意目标名必须唯一 所以不能直接生成相同名称的动态库与静态库
# 注意此处不必为目标名称添加lib前缀和相应后缀，cmake会自行添加
add_library(gist SHARED ${SRC_ASSEMBLER} ${SRC_MODELSPACE} ${SRC_EARTH1D} ${SRC_GEOID} 
    ${SRC_GRAVITY} ${SRC_GEOPHYSIC} ${SRC_THERMAL} ${SRC_PRESSURE} ${SRC_THERMOPHYSICS})

# 设置动态库的版本号
set_target_properties(gist PROPERTIES VERSION ${PROJECT_VERSION} SOVERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR})
# 设置动态库的运行搜索地址
set_target_properties(gist PROPERTIES INSTALL_RPATH ${PROJECT_SOURCE_DIR}/../bin)
set_target_properties(gist PROPERTIES CXX_STANDARD 17 CXX_STANDARD_REQUIRED ON)

target_link_libraries(gist PUBLIC ${GCTL_LIB})
target_link_libraries(gist PUBLIC ${GCTL_OPTIMIZATION_LIB})
target_link_libraries(gist PUBLIC ${GCTL_GRAPHIC_LIB})
target_link_libraries(gist PUBLIC ${GCTL_MESH_LIB})
target_link_libraries(gist PUBLIC ${GCTL_POTENTIAL_LIB})