cmake_minimum_required(VERSION 3.16)

project(tesses_cpu_arch VERSION 1.0.0 LANGUAGES C)

include(GNUInstallDirs)

# ---- Header-only library ----
add_library(tesses_cpu_arch INTERFACE)
add_library(tesses::cpu_arch ALIAS tesses_cpu_arch)

target_include_directories(tesses_cpu_arch INTERFACE
    $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
    $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
)

# ---- App (optional) ----
option(TESSES_CPU_ARCH_BUILD_APP "Build the test app" ON)

if(TESSES_CPU_ARCH_BUILD_APP)
    add_executable(tcpuarch main.c)
    target_link_libraries(tcpuarch PRIVATE tesses::cpu_arch)
    install(TARGETS tcpuarch DESTINATION "${CMAKE_INSTALL_BINDIR}")
endif()

# ---- Install ----
install(FILES include/tesses_cpu_arch.h
    DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
)

install(TARGETS tesses_cpu_arch
    EXPORT tesses_cpu_arch-targets
)

# ---- CMake package config (for find_package / FetchContent) ----
install(EXPORT tesses_cpu_arch-targets
    FILE tesses_cpu_arch-targets.cmake
    NAMESPACE tesses::
    DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/tesses_cpu_arch"
)

include(CMakePackageConfigHelpers)

configure_package_config_file(
    ${CMAKE_CURRENT_SOURCE_DIR}/tesses_cpu_archConfig.cmake.in
    ${CMAKE_CURRENT_BINARY_DIR}/tesses_cpu_archConfig.cmake
    INSTALL_DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/tesses_cpu_arch"
)

write_basic_package_version_file(
    ${CMAKE_CURRENT_BINARY_DIR}/tesses_cpu_archConfigVersion.cmake
    COMPATIBILITY SameMajorVersion
)

install(FILES
    ${CMAKE_CURRENT_BINARY_DIR}/tesses_cpu_archConfig.cmake
    ${CMAKE_CURRENT_BINARY_DIR}/tesses_cpu_archConfigVersion.cmake
    DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/tesses_cpu_arch"
)   