- Add arena allocator for zero-allocation hot paths - Add thread pool for parallel operations - Add mmap utilities for memory-mapped I/O - Implement queue_index with heap-based priority queue - Implement dataset_hash with SIMD support (SHA-NI, ARMv8) - Add runtime SIMD detection for cross-platform correctness - Add comprehensive tests and benchmarks
68 lines
2 KiB
CMake
68 lines
2 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")
|
|
|
|
# Warnings
|
|
add_compile_options(-Wall -Wextra -Wpedantic)
|
|
|
|
if(ENABLE_ASAN)
|
|
add_compile_options(-fsanitize=address -fno-omit-frame-pointer)
|
|
add_link_options(-fsanitize=address)
|
|
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)
|
|
endif()
|
|
|
|
# Combined target for building all libraries
|
|
add_custom_target(all_native_libs DEPENDS
|
|
queue_index
|
|
dataset_hash
|
|
)
|