cmake_minimum_required(VERSION 3.16)

# 既支持独立构建，也支持由用户工程 add_subdirectory() 引入。
# 被引入时不更改上层工程的语言、工具链和全局编译选项。
if(CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
    project(dm_vqf VERSION 1.0.0 LANGUAGES C)
endif()

option(DM_VQF_BUILD_EXAMPLE "Build the independent desktop example" OFF)

add_library(dm_vqf STATIC
    dm_vqf.c
    dm_vqf_math.c
)
add_library(dm_vqf::dm_vqf ALIAS dm_vqf)
target_compile_features(dm_vqf PUBLIC c_std_11)
set_target_properties(dm_vqf PROPERTIES C_EXTENSIONS OFF)
target_include_directories(dm_vqf
    PUBLIC
        $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
        $<INSTALL_INTERFACE:include>
)

# GCC/Clang 的 Unix 和 MinGW 环境通常显式链接 libm。
# 其它交叉工具链按项目配置提供数学库，不对上层强制添加 CPU/FPU 选项。
if(UNIX OR MINGW)
    target_link_libraries(dm_vqf PUBLIC m)
endif()

if(DM_VQF_BUILD_EXAMPLE)
    add_executable(dm_vqf_example example.c)
    target_link_libraries(dm_vqf_example PRIVATE dm_vqf::dm_vqf)
endif()

# 导出静态库与唯一的公开头文件；数学头文件是源码构建用的内部接口。
include(GNUInstallDirs)
install(TARGETS dm_vqf EXPORT dm_vqfTargets
    ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
)
install(FILES dm_vqf.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
install(EXPORT dm_vqfTargets NAMESPACE dm_vqf:: DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/dm_vqf)
install(FILES LICENSE DESTINATION ${CMAKE_INSTALL_DATADIR}/dm_vqf)
