cmake_minimum_required(VERSION 3.25) project(PixelBoundary LANGUAGES CXX) set(CMAKE_CXX_EXTENSIONS OFF) option(PIXEL_SANITIZE "Enable address and undefined-behavior checks" OFF) function(pixel_policy target) if(CMAKE_CXX_COMPILER_ID MATCHES "Clang|GNU") target_compile_options(${target} PRIVATE -Wall -Wextra -Wpedantic -Wconversion -Wshadow) if(PIXEL_SANITIZE) target_compile_options(${target} PRIVATE -fsanitize=address,undefined -fno-omit-frame-pointer) target_link_options(${target} PRIVATE -fsanitize=address,undefined) endif() elseif(PIXEL_SANITIZE) message(FATAL_ERROR "PIXEL_SANITIZE requires Clang or GCC") endif() endfunction() add_library(pixel_core src/pixel.cpp) target_include_directories(pixel_core PUBLIC include) target_compile_features(pixel_core PUBLIC cxx_std_23) pixel_policy(pixel_core) add_executable(pixel-boundary src/main.cpp) target_link_libraries(pixel-boundary PRIVATE pixel_core) pixel_policy(pixel-boundary) include(CTest) if(BUILD_TESTING) add_executable(pixel-tests tests/pixel_tests.cpp) target_link_libraries(pixel-tests PRIVATE pixel_core) pixel_policy(pixel-tests) add_test(NAME expected-contracts COMMAND pixel-tests) add_test(NAME expected-demo COMMAND pixel-boundary) endif()