cmake_minimum_required(VERSION 3.24)
project(signal_garden_contracts LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 23)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
add_executable(signal-contracts contracts_test.cpp)
if(CMAKE_CXX_COMPILER_ID MATCHES "Clang|GNU")
  target_compile_options(signal-contracts PRIVATE -Wall -Wextra -Wpedantic -Wconversion -Wshadow)
endif()

option(SIGNAL_BUILD_WINDOW "Build the complete Vulkan clear-color window checkpoint" OFF)
if(SIGNAL_BUILD_WINDOW)
  find_package(Vulkan 1.3 REQUIRED)
  find_package(glfw3 3.4 CONFIG REQUIRED)
  add_executable(signal-window clear_window.cpp)
  target_link_libraries(signal-window PRIVATE Vulkan::Vulkan glfw)
  if(CMAKE_CXX_COMPILER_ID MATCHES "Clang|GNU")
    target_compile_options(signal-window PRIVATE -Wall -Wextra -Wpedantic -Wconversion -Wshadow)
  endif()
endif()
enable_testing()
add_test(NAME allocation-contracts COMMAND signal-contracts)
option(SIGNAL_BUILD_VULKAN_PROBE "Build the Vulkan 1.3 capability probe" OFF)
if(SIGNAL_BUILD_VULKAN_PROBE)
  find_package(Vulkan 1.3 REQUIRED)
  add_executable(signal-capabilities capabilities.cpp)
  target_link_libraries(signal-capabilities PRIVATE Vulkan::Vulkan)
  if(CMAKE_CXX_COMPILER_ID MATCHES "Clang|GNU")
    target_compile_options(signal-capabilities PRIVATE -Wall -Wextra -Wpedantic -Wconversion -Wshadow)
  endif()
endif()
