cmake_minimum_required(VERSION "4.2.0") project("ttwhy" VERSION "1.0.0" LANGUAGES CXX ) include("CTest") ### System Dependencies find_package("Threads") ### External Dependencies include("FetchContent") FetchContent_Declare("asio" GIT_REPOSITORY "https://github.com/chriskohlhoff/asio" GIT_TAG "asio-1-38-2" ) FetchContent_Declare("sml" GIT_REPOSITORY "https://github.com/boost-ext/sml" GIT_TAG "v1.2.0" ) if (BUILD_TESTING) FetchContent_Declare("Catch2" GIT_REPOSITORY "https://github.com/catchorg/Catch2.git" GIT_TAG "v3.16.0" EXCLUDE_FROM_ALL FIND_PACKAGE_ARGS ) endif() FetchContent_MakeAvailable( "asio" "Catch2" "sml" ) ### asio add_library("asio" INTERFACE) add_library("ext::asio" ALIAS "asio") target_include_directories("asio" SYSTEM INTERFACE "${asio_SOURCE_DIR}/asio/include" ) target_link_libraries("asio" INTERFACE "Threads::Threads" ) ### Core Library add_library("ttwhy-core") add_library("ttwhy::lib" ALIAS "ttwhy-core") target_sources("ttwhy-core" PUBLIC FILE_SET CXX_MODULES FILES "ttwhy/lib.cppm" "ttwhy/core/mod.cppm" "ttwhy/core/concepts.cppm" "ttwhy/terminal/mod.cppm" "ttwhy/terminal/echo.cppm" "ttwhy/terminal/events.cppm" "ttwhy/terminal/policies.cppm" "ttwhy/terminal/readers.cppm" "ttwhy/terminal/scanner.cppm" "ttwhy/terminal/scoped_attributes.cppm" "ttwhy/terminal/signal_handling.cppm" ) target_compile_features("ttwhy-core" PUBLIC "cxx_std_23" ) target_link_libraries("ttwhy-core" PUBLIC "ext::asio" "sml::sml" ) target_compile_options("ttwhy-core" PUBLIC "$<$:-Wall>" "$<$:-Wextra>" "$<$:-Werror>" "$<$:-pedantic-errors>" ) ### Applications add_executable("ttwhy-echo") add_executable("ttwhy::echo" ALIAS "ttwhy-echo") target_sources("ttwhy-echo" PRIVATE "apps/echo.cpp" ) target_link_libraries("ttwhy-echo" PRIVATE "ttwhy::lib" ) ### Tests if(BUILD_TESTING) find_package("Catch2") include("Catch") add_executable("ttwhy-tests") add_executable("ttwhy::tests" ALIAS "ttwhy-tests") target_sources("ttwhy-tests" PRIVATE "ttwhy/terminal/echo.tests.cpp" "ttwhy/terminal/scanner.tests.cpp" ) target_link_libraries("ttwhy-tests" PRIVATE "ttwhy::lib" "Catch2::Catch2WithMain" ) catch_discover_tests("ttwhy-tests") endif()