cmake_minimum_required(VERSION 3.25)
project(VeiledPrivateDiscoveryLab VERSION 0.1.0 LANGUAGES C CXX)
include(FetchContent)
# Independent from Windows Cargo and Android Gradle; no opaque native archives.
set(APSI_BUILD_CLI OFF CACHE BOOL "" FORCE)
set(APSI_BUILD_TESTS OFF CACHE BOOL "" FORCE)
set(APSI_USE_ZMQ OFF CACHE BOOL "" FORCE)
set(APSI_USE_ASM OFF CACHE BOOL "" FORCE)
set(APSI_USE_AVX OFF CACHE BOOL "" FORCE)
set(APSI_USE_AVX2 OFF CACHE BOOL "" FORCE)
set(APSI_SECURE_COMPILE_OPTIONS ON CACHE BOOL "" FORCE)
FetchContent_Declare(apsi
  URL "https://codeload.github.com/microsoft/APSI/tar.gz/3f13fe6843e121da13adc66a250296bc96340cb0"
  URL_HASH SHA256=2860902a61c92cf31e60b9273bea3986ef44a05528d004ff040f7c26f59fca19)
FetchContent_MakeAvailable(apsi)
# Upstream FourQ/header generators use CMAKE_BINARY_DIR even when APSI is a
# subproject. Add that owned generated include root without changing crypto code.
target_include_directories(apsi PUBLIC
  $<BUILD_INTERFACE:${CMAKE_BINARY_DIR}/common>
  $<BUILD_INTERFACE:${CMAKE_BINARY_DIR}/sender>)
add_executable(veiled-private-discovery-lab native/lab.cpp)
target_compile_features(veiled-private-discovery-lab PRIVATE cxx_std_17)
target_link_libraries(veiled-private-discovery-lab PRIVATE apsi)
if(MSVC)
  target_compile_options(veiled-private-discovery-lab PRIVATE /W4 /sdl /guard:cf)
  target_link_options(veiled-private-discovery-lab PRIVATE /guard:cf /DYNAMICBASE /NXCOMPAT)
else()
  target_compile_options(veiled-private-discovery-lab PRIVATE -Wall -Wextra -Wpedantic -fstack-protector-strong)
endif()
configure_file("${apsi_SOURCE_DIR}/parameters/100K-1.json" "${CMAKE_CURRENT_BINARY_DIR}/pinned-parameters.json" COPYONLY)
install(TARGETS veiled-private-discovery-lab RUNTIME DESTINATION libexec/veiled-discovery-lab)
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/pinned-parameters.json" DESTINATION share/veiled-discovery-lab)
