cmake_minimum_required(VERSION 3.16)
project(BinaryTable)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)

# Optional: Enable function timing instrumentation via #define
# To enable timing, either:
#   1. Define SWEEPSTORE_ENABLE_TIMING=1 in your code before including timing.h
#   2. Pass -DSWEEPSTORE_ENABLE_TIMING=1 to compiler
#   3. Uncomment the line below:
 add_compile_definitions(SWEEPSTORE_ENABLE_TIMING=1)

# Add include directories globally
include_directories(${CMAKE_SOURCE_DIR}/src/Public)
include_directories(${CMAKE_SOURCE_DIR}/src/Private)

# Main executable with integrated binary table implementation
add_executable(main
        src/Private/sweepstore/header.cpp
        src/Public/sweepstore/utils/helpers.h
        src/Private/sweepstore/structures.cpp
        src/Public/sweepstore/structures.h
        src/Private/sweepstore/sweepstore.cpp
        src/Public/sweepstore/sweepstore.h
        src/Public/sweepstore/concurrency.h
        src/Private/sweepstore/concurrency.cpp
        src/Public/sweepstore/utils/file_lock.h
        src/Private/sweepstore/utils/file_lock.cpp
        src/Public/sweepstore/utils/file_handle.h
        src/Private/sweepstore/utils/file_handle.cpp
        src/Public/sweepstore/header.h
        src/Public/sweepstore/utils/timing.h
        src/Private/sweepstore/utils/timing.cpp
        src/Private/sweepstore/benchmark.cpp
)

# Add include directories
target_include_directories(main PRIVATE ${CMAKE_SOURCE_DIR}/src/Public)

# Compiler Settings
if(MSVC)
    target_compile_options(main PRIVATE /W4)
else()
    target_compile_options(main PRIVATE -Wall -Wextra -pedantic)
endif()

# Link required libraries
if(UNIX AND NOT APPLE)
    # Only link stdc++fs on Linux, not macOS
    target_link_libraries(main PRIVATE stdc++fs)
endif()

if(WIN32)
    target_link_libraries(main PRIVATE winmm)
endif()