cmake_minimum_required(VERSION 3.25) project(ChromaticObservatory VERSION 0.1.0 LANGUAGES CXX) set(CMAKE_CXX_STANDARD 23) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) option(OBSERVATORY_SANITIZERS "Enable address and undefined-behavior sanitizers" OFF) if(OBSERVATORY_SANITIZERS) if(NOT CMAKE_CXX_COMPILER_ID MATCHES "Clang|GNU") message(FATAL_ERROR "This sanitizer recipe requires Clang or GCC") endif() add_compile_options(-fsanitize=address,undefined -fno-omit-frame-pointer) add_link_options(-fsanitize=address,undefined) endif() # Dependencies are discovered locally. Configuration never downloads or installs. find_package(OpenGL REQUIRED) find_package(glfw3 3.3 CONFIG REQUIRED) find_package(GLEW REQUIRED) add_executable(observatory main.cpp) target_link_libraries(observatory PRIVATE glfw GLEW::GLEW OpenGL::GL) target_compile_definitions(observatory PRIVATE OBSERVATORY_SHADER_DIR="${CMAKE_CURRENT_SOURCE_DIR}/shaders") if(CMAKE_CXX_COMPILER_ID MATCHES "Clang|GNU") target_compile_options(observatory PRIVATE -Wall -Wextra -Wpedantic -Wconversion -Wshadow) endif() include(CTest) if(BUILD_TESTING) add_executable(observatory-contracts contracts_test.cpp) if(CMAKE_CXX_COMPILER_ID MATCHES "Clang|GNU") target_compile_options(observatory-contracts PRIVATE -Wall -Wextra -Wpedantic -Wconversion -Wshadow) endif() add_test(NAME observatory-cpu-contracts COMMAND observatory-contracts) # Context creation is deliberately a manual test, not a hidden display requirement. endif()