cmake_minimum_required(VERSION 3.25) project(LanternCpuExperiments LANGUAGES CXX) set(CMAKE_CXX_STANDARD 23) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) option(LANTERN_SANITIZERS "Enable address and undefined behavior sanitizers" OFF) add_library(lantern src/lantern.cpp src/diffuse.cpp) target_include_directories(lantern PUBLIC include) target_compile_options(lantern PRIVATE -Wall -Wextra -Wpedantic -Wconversion -Wshadow) if(LANTERN_SANITIZERS AND CMAKE_CXX_COMPILER_ID MATCHES "Clang|GNU") target_compile_options(lantern PUBLIC -fsanitize=address,undefined -fno-omit-frame-pointer) target_link_options(lantern PUBLIC -fsanitize=address,undefined) endif() add_executable(lantern-experiment src/experiment.cpp) target_link_libraries(lantern-experiment PRIVATE lantern) add_executable(lantern-render src/render.cpp) target_link_libraries(lantern-render PRIVATE lantern) include(CTest) if(BUILD_TESTING) add_executable(lantern-tests tests/lantern_tests.cpp) target_link_libraries(lantern-tests PRIVATE lantern) add_test(NAME lantern-contracts COMMAND lantern-tests) add_test(NAME lantern-experiment COMMAND lantern-experiment) add_executable(lantern-diffuse-tests tests/diffuse_tests.cpp) target_link_libraries(lantern-diffuse-tests PRIVATE lantern) add_test(NAME lantern-diffuse-contracts COMMAND lantern-diffuse-tests) add_test(NAME lantern-constant-environment COMMAND lantern-render --constant) add_test(NAME lantern-trace COMMAND lantern-render --trace) endif() if(CMAKE_CXX_COMPILER_ID MATCHES "Clang|GNU") foreach(target lantern-experiment lantern-render) target_compile_options(${target} PRIVATE -Wall -Wextra -Wpedantic -Wconversion -Wshadow) endforeach() if(BUILD_TESTING) foreach(target lantern-tests lantern-diffuse-tests) target_compile_options(${target} PRIVATE -Wall -Wextra -Wpedantic -Wconversion -Wshadow) endforeach() endif() endif()