fetch_ml/native/CMakeLists.txt
Jeremie Fraeys 37aad7ae87
feat: add manifest signing and native hashing support
- Integrate RunManifest.Validate with existing Validator
- Add manifest Sign() and Verify() methods
- Add native C++ hashing libraries (dataset_hash, queue_index)
- Add native bridge for Go/C++ integration
- Add deduplication support in queue
2026-02-19 15:34:39 -05:00

88 lines
2.8 KiB
CMake

cmake_minimum_required(VERSION 3.20)
project(fetchml_native VERSION 0.1.0 LANGUAGES CXX C)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_C_STANDARD 11)
set(CMAKE_C_STANDARD_REQUIRED ON)
# Build options
option(BUILD_SHARED_LIBS "Build shared libraries" ON)
option(ENABLE_ASAN "Enable AddressSanitizer" OFF)
option(ENABLE_TSAN "Enable ThreadSanitizer" OFF)
# Position independent code for shared libraries
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
# Compiler flags
if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang")
set(CMAKE_CXX_FLAGS_RELEASE "-O3 -march=native -DNDEBUG -fomit-frame-pointer")
set(CMAKE_CXX_FLAGS_DEBUG "-O0 -g -fno-omit-frame-pointer")
set(CMAKE_C_FLAGS_RELEASE "-O3 -march=native -DNDEBUG -fomit-frame-pointer")
set(CMAKE_C_FLAGS_DEBUG "-O0 -g -fno-omit-frame-pointer")
# Security hardening flags (always enabled)
set(SECURITY_FLAGS
-D_FORTIFY_SOURCE=2 # Buffer overflow protection
-fstack-protector-strong # Stack canaries
-Wformat-security # Format string warnings
-Werror=format-security # Format string errors
-fPIE # Position-independent code
)
# Add security flags to all build types
add_compile_options(${SECURITY_FLAGS})
# Linker security flags
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-z,relro -Wl,-z,now -pie")
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-z,relro -Wl,-z,now")
# Warnings
add_compile_options(-Wall -Wextra -Wpedantic)
if(ENABLE_ASAN)
add_compile_options(-fsanitize=address,undefined -fno-omit-frame-pointer)
add_link_options(-fsanitize=address,undefined)
endif()
if(ENABLE_TSAN)
add_compile_options(-fsanitize=thread)
add_link_options(-fsanitize=thread)
endif()
endif()
if(APPLE)
# macOS universal binary support (optional - comment out if targeting single arch)
# set(CMAKE_OSX_ARCHITECTURES "x86_64;arm64")
endif()
# Find threading library
find_package(Threads REQUIRED)
# Include directories
include_directories(${CMAKE_CURRENT_SOURCE_DIR})
# Enable testing
enable_testing()
# Libraries will be added as subdirectories
add_subdirectory(common)
add_subdirectory(queue_index)
add_subdirectory(dataset_hash)
# Tests from root tests/ directory
if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/tests)
add_executable(test_storage tests/test_storage.cpp)
target_link_libraries(test_storage queue_index)
add_test(NAME storage_smoke COMMAND test_storage)
add_executable(test_dataset_hash tests/test_dataset_hash.cpp)
target_link_libraries(test_dataset_hash dataset_hash)
add_test(NAME dataset_hash_smoke COMMAND test_dataset_hash)
endif()
# Combined target for building all libraries
add_custom_target(all_native_libs DEPENDS
queue_index
dataset_hash
)