# ==============================================================================
# TLUSTY 和 SYNSPEC 套件顶层 CMake 配置文件
# ==============================================================================

cmake_minimum_required(VERSION 3.15)
project(TLUSTY_SYNSPEC_SUITE Fortran)

# 项目版本
set(PROJECT_VERSION "208.54")

# CMake 策略
cmake_policy(SET CMP0048 NEW)

# ==============================================================================
# 编译选项
# ==============================================================================
option(BUILD_TLUSTY "Build TLUSTY" ON)
option(BUILD_SYNSPEC "Build SYNSPEC" ON)
option(BUILD_TESTS "Build and enable tests" OFF)
option(ENABLE_LARGE_MODEL "Enable large memory model" ON)

# ==============================================================================
# 全局编译设置
# ==============================================================================
set(CMAKE_FORTRAN_COMPILER gfortran)

# 基础编译标志
set(CMAKE_Fortran_FLAGS "-O3 -fno-automatic")

# 大内存模型选项（如果需要）
if(ENABLE_LARGE_MODEL)
    set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -mcmodel=medium")
endif()

# 调试标志
set(CMAKE_Fortran_FLAGS_DEBUG "-g -O0 -fcheck=all -Wall -Wextra")

# Release 标志
set(CMAKE_Fortran_FLAGS_RELEASE "-O3 -funroll-loops")

# ==============================================================================
# 子目录配置
# ==============================================================================
if(BUILD_TLUSTY)
    message(STATUS "Building TLUSTY...")
    add_subdirectory(tlusty)
endif()

if(BUILD_SYNSPEC)
    message(STATUS "Building SYNSPEC...")
    add_subdirectory(synspec)
endif()

# ==============================================================================
# 测试配置
# ==============================================================================
if(BUILD_TESTS)
    enable_testing()
    message(STATUS "Building tests...")
    # add_subdirectory(tests)
endif()

# ==============================================================================
# 安装配置
# ==============================================================================
install(DIRECTORY DESTINATION ${CMAKE_INSTALL_PREFIX}/data)
install(DIRECTORY DESTINATION ${CMAKE_INSTALL_PREFIX}/tests)

# ==============================================================================
# 打印总结信息
# ==============================================================================
message(STATUS "")
message(STATUS "========================================")
message(STATUS "TLUSTY/SYNSPEC 套件配置总结")
message(STATUS "========================================")
message(STATUS "  版本：${PROJECT_VERSION}")
message(STATUS "  编译器：${CMAKE_FORTRAN_COMPILER}")
message(STATUS "  编译标志：${CMAKE_Fortran_FLAGS}")
message(STATUS "  安装前缀：${CMAKE_INSTALL_PREFIX}")
message(STATUS "  构建 TLUSTY: ${BUILD_TLUSTY}")
message(STATUS "  构建 SYNSPEC: ${BUILD_SYNSPEC}")
message(STATUS "  构建测试：${BUILD_TESTS}")
message(STATUS "  大内存模型：${ENABLE_LARGE_MODEL}")
message(STATUS "========================================")
message(STATUS "")
