fetch_ml/native/dataset_hash/CMakeLists.txt
Jeremie Fraeys 43d241c28d
feat: implement C++ native libraries for performance-critical operations
- 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
2026-02-16 20:38:04 -05:00

49 lines
1.4 KiB
CMake

add_library(dataset_hash SHARED
dataset_hash.cpp
crypto/sha256_hasher.cpp
crypto/sha256_generic.cpp
crypto/sha256_armv8.cpp
crypto/sha256_x86.cpp
io/file_hash.cpp
threading/parallel_hash.cpp
)
target_include_directories(dataset_hash PUBLIC
${CMAKE_CURRENT_SOURCE_DIR}
${CMAKE_CURRENT_SOURCE_DIR}/crypto
${CMAKE_CURRENT_SOURCE_DIR}/io
${CMAKE_CURRENT_SOURCE_DIR}/threading
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
$<INSTALL_INTERFACE:include/fetchml>
)
target_include_directories(dataset_hash PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/../common/include
)
target_link_libraries(dataset_hash PRIVATE
fetchml_common
Threads::Threads
)
target_compile_features(dataset_hash PUBLIC cxx_std_20)
if(CMAKE_SYSTEM_PROCESSOR MATCHES "arm|ARM|aarch64|AARCH64")
target_compile_options(dataset_hash PRIVATE -march=armv8-a+crypto)
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64|AMD64")
# SHA-NI is optional, let runtime detection handle it
endif()
set_target_properties(dataset_hash PROPERTIES
VERSION ${PROJECT_VERSION}
SOVERSION ${PROJECT_VERSION_MAJOR}
PUBLIC_HEADER "dataset_hash.h"
LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}
ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}
)
install(TARGETS dataset_hash
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib
PUBLIC_HEADER DESTINATION include/fetchml
)