set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CMAKE_BINARY_DIR})
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CMAKE_BINARY_DIR})
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO ${CMAKE_BINARY_DIR})
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_MINSIZEREL ${CMAKE_BINARY_DIR})
# Interface library shared by pos2 targets
add_library(pos2_base INTERFACE)
target_include_directories(pos2_base INTERFACE
${CMAKE_CURRENT_SOURCE_DIR}
)
target_link_libraries(pos2_base INTERFACE
fse
)
if (CP_RETAIN_X_VALUES)
target_compile_definitions(pos2_base INTERFACE
$<$<NOT:$<BOOL:$<TARGET_PROPERTY:DISABLE_RETAIN_X_VALUES>>>:
RETAIN_X_VALUES=1
RETAIN_X_VALUES_TO_T3=1
>
)
endif()
# Enable hardware AES on 64-bit ARM (e.g., Raspberry Pi 5)
if (CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64|armv8")
target_compile_options(pos2_base INTERFACE
-march=armv8-a+crypto
)
# Enable AES-NI on x86_64 (Intel/AMD)
elseif (CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64|AMD64")
if (CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang")
# Explicitly enable AES-NI and friends
target_compile_options(pos2_base INTERFACE
-maes
)
endif()
endif()
message("CP_RETAIN_X_VALUES: ${CP_RETAIN_X_VALUES}")
message("CP_BUILD_TESTS: ${CP_BUILD_TESTS}")
message("CP_ENABLE_LIBPOS2_ONLY: ${CP_ENABLE_LIBPOS2_ONLY}")
message("CP_ENABLE_LIBPOS2: ${CP_ENABLE_LIBPOS2}")
message("CP_ENABLE_PLOTTER: ${CP_ENABLE_PLOTTER}")
message("CP_ENABLE_SOLVER: ${CP_ENABLE_SOLVER}")
message("CP_ENABLE_PROVER: ${CP_ENABLE_PROVER}")
message("CP_ENABLE_ANALYTICS: ${CP_ENABLE_ANALYTICS}")
if (CP_ENABLE_PLOTTER)
add_subdirectory(tools/plotter)
endif()
if (CP_ENABLE_SOLVER)
add_subdirectory(tools/solver)
endif()
if (CP_ENABLE_PROVER)
add_subdirectory(tools/prover)
endif()
if (CP_ENABLE_ANALYTICS)
add_subdirectory(tools/analytics)
endif()
if (CP_ENABLE_LIBPOS2)
add_subdirectory(libpos2)
endif()