cmake_minimum_required(VERSION 3.15)
project(tsfile_precision_validation LANGUAGES CXX)
get_filename_component(ISSUE_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/.." ABSOLUTE)
set(GTEST_INCLUDE "${CMAKE_CURRENT_SOURCE_DIR}/msvc-baseline/googletest-extract/googletest-release-1.12.1/googletest/include")
foreach(variant baseline fixed)
    if(variant STREQUAL "baseline")
        set(source "${ISSUE_ROOT}/baseline-source")
    else()
        set(source "${ISSUE_ROOT}/fix-repo")
    endif()
    add_executable(precision_${variant} driver.cc)
    add_executable(benchmark_${variant} benchmark_driver.cc)
    add_executable(regressions_${variant} "${ISSUE_ROOT}/fix-repo/cpp/test/writer/ts2diff_precision_properties_test.cc")
    foreach(target precision_${variant} regressions_${variant} benchmark_${variant})
        target_compile_features(${target} PRIVATE cxx_std_14)
        target_compile_definitions(${target} PRIVATE TSFILE_STATIC NOMINMAX ENABLE_MEM_STAT ENABLE_THREADS)
        target_compile_options(${target} PRIVATE /utf-8 /EHsc /bigobj /W0)
        target_include_directories(${target} PRIVATE "${source}/cpp/src" "${GTEST_INCLUDE}")
        target_link_libraries(${target} PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/msvc-${variant}/lib/Release/tsfile.lib" psapi)
    endforeach()
    target_link_libraries(regressions_${variant} PRIVATE
        "${CMAKE_CURRENT_SOURCE_DIR}/msvc-${variant}/lib/Release/gtest.lib"
        "${CMAKE_CURRENT_SOURCE_DIR}/msvc-${variant}/lib/Release/gtest_main.lib")
endforeach()
target_compile_definitions(precision_fixed PRIVATE FIXED_PRECISION_PROPS)
add_executable(precision_repro "${ISSUE_ROOT}/precision_repro.cc")
target_compile_features(precision_repro PRIVATE cxx_std_14)
target_compile_definitions(precision_repro PRIVATE TSFILE_STATIC NOMINMAX ENABLE_MEM_STAT ENABLE_THREADS)
target_compile_options(precision_repro PRIVATE /utf-8 /EHsc /bigobj)
target_include_directories(precision_repro PRIVATE "${ISSUE_ROOT}/fix-repo/cpp/src")
target_link_libraries(precision_repro PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/msvc-fixed/lib/Release/tsfile.lib")
add_executable(precision_zero_repro "${CMAKE_CURRENT_SOURCE_DIR}/review-reserved-precision/precision_zero_repro.cc")
target_compile_features(precision_zero_repro PRIVATE cxx_std_14)
target_compile_definitions(precision_zero_repro PRIVATE TSFILE_STATIC NOMINMAX ENABLE_MEM_STAT ENABLE_THREADS)
target_compile_options(precision_zero_repro PRIVATE /utf-8 /EHsc /bigobj)
target_include_directories(precision_zero_repro PRIVATE "${ISSUE_ROOT}/fix-repo/cpp/src")
target_link_libraries(precision_zero_repro PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/msvc-fixed/lib/Release/tsfile.lib")
add_executable(round_oracle round_oracle.cc)
target_compile_features(round_oracle PRIVATE cxx_std_14)
target_compile_definitions(round_oracle PRIVATE TSFILE_STATIC NOMINMAX ENABLE_MEM_STAT ENABLE_THREADS)
target_compile_options(round_oracle PRIVATE /utf-8 /EHsc /bigobj)
target_include_directories(round_oracle PRIVATE "${ISSUE_ROOT}/fix-repo/cpp/src")
target_link_libraries(round_oracle PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/msvc-fixed/lib/Release/tsfile.lib")
