cmake_minimum_required(VERSION 3.28)
project(bedrock VERSION 0.1 LANGUAGES CXX)

find_program(
        CLANG_TIDY_COMMAND
        NAMES
        clang-tidy
        HINTS
        /opt/homebrew/opt/llvm/bin/
        NO_CACHE
        REQUIRED
)

set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED YES)
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
add_compile_options(
        -Weverything
        -Werror
        -Wno-c++98-compat
        -Wno-c++98-compat-pedantic
        -Wno-poison-system-directories
        -Wno-explicit-specialization-storage-class
        -Wno-unsafe-buffer-usage
        -Wno-padded
        -Wno-global-constructors
        -Wno-exit-time-destructors
        -fno-exceptions
        -fcheck-new
)

file(GLOB_RECURSE BEDROCK_NUMBERS "src/numbers.cppm")
file(GLOB_RECURSE BEDROCK_FOUNDATION "src/foundation/*.cppm" "src/foundation.cppm")
file(GLOB_RECURSE BEDROCK_SEMANTICS "src/semantics/*.cppm" "src/semantics.cppm")
file(GLOB_RECURSE BEDROCK_COLLECTIONS "src/collections/*.cppm" "src/collections.cppm")
file(GLOB_RECURSE BEDROCK_IO "src/io/*.cppm" "src/io.cppm")
file(GLOB_RECURSE BEDROCK_CLI "src/cli/*.cppm" "src/cli.cppm")
file(GLOB_RECURSE BEDROCK_TEST "src/test/*.cppm" "src/test.cppm")
add_library(bedrock)
target_sources(bedrock
        PUBLIC
        FILE_SET CXX_MODULES FILES
        ${BEDROCK_NUMBERS}
        ${BEDROCK_SEMANTICS}
        ${BEDROCK_FOUNDATION}
        ${BEDROCK_COLLECTIONS}
        ${BEDROCK_IO}
        ${BEDROCK_CLI}
        ${BEDROCK_TEST}
        src/bedrock.cppm
)
set_target_properties(bedrock PROPERTIES
        VERSION ${PROJECT_VERSION}
        SOVERSION ${PROJECT_VERSION_MAJOR}
        CXX_CLANG_TIDY "${CLANG_TIDY_COMMAND}"
)

file(GLOB_RECURSE BEDROCK_TEST_SRCS "src/*.test.cpp")
add_executable(bedrock-tests ${BEDROCK_TEST_SRCS})
target_link_libraries(bedrock-tests PUBLIC bedrock)

#include(FetchContent)
#
#fetchcontent_declare(
#        Catch2
#        GIT_REPOSITORY https://github.com/catchorg/Catch2.git
#        GIT_TAG v3.4.0
#        SYSTEM
#)
#fetchcontent_makeavailable(Catch2)
#list(APPEND CMAKE_MODULE_PATH ${catch2_SOURCE_DIR}/extras)
#
#include(CTest)
#include(Catch)
#
#file(GLOB_RECURSE BEDROCK_TESTS "src/*.test.cpp")
#add_executable(bedrock-tests
#        ${BEDROCK_TESTS}
#)
#target_compile_options(bedrock-tests PUBLIC
#        -Weverything
#        -Werror
#        -Wno-c++98-compat
#        -Wno-c++98-compat-pedantic
#        -Wno-poison-system-directories
#        -Wno-unused-member-function
#        -Wno-explicit-specialization-storage-class
#)
#target_link_libraries(bedrock-tests
#        PUBLIC bedrock
#        PRIVATE Catch2::Catch2WithMain
#)
#catch_discover_tests(bedrock-tests)
