cmake_minimum_required(VERSION 3.20)
project(field_filter_validation LANGUAGES CXX)
get_filename_component(ROOT "${CMAKE_CURRENT_SOURCE_DIR}/../../.." ABSOLUTE)
set(SRC "${ROOT}/work/issue-03/repro-repo/cpp")
set(OLD "${ROOT}/work/issue-02/validation/msvc-baseline")
foreach(variant baseline fixed)
  add_executable(regressions_${variant} "${SRC}/test/reader/table_field_filter_test.cc")
  target_include_directories(regressions_${variant} PRIVATE "${SRC}/src" "${OLD}/googletest-extract/googletest-release-1.12.1/googletest/include")
  target_compile_features(regressions_${variant} PRIVATE cxx_std_11)
  target_compile_definitions(regressions_${variant} PRIVATE TSFILE_STATIC NOMINMAX ENABLE_MEM_STAT ENABLE_THREADS)
  target_compile_options(regressions_${variant} PRIVATE /utf-8 /EHsc /bigobj /W0)
  if(variant STREQUAL "baseline")
    target_sources(regressions_${variant} PRIVATE "${SRC}/src/reader/filter/table_field_filter.cc")
    set(LIB "${OLD}/lib/Release/tsfile.lib")
  else()
    set(LIB "${ROOT}/work/issue-03/standalone-validation/library/lib/Release/tsfile.lib")
  endif()
  target_link_libraries(regressions_${variant} PRIVATE "${LIB}" "${OLD}/lib/Release/gtest.lib" "${OLD}/lib/Release/gtest_main.lib" psapi)
endforeach()

add_executable(compat_fixed compat_driver.cc)
target_compile_features(compat_fixed PRIVATE cxx_std_11)
target_compile_definitions(compat_fixed PRIVATE TSFILE_STATIC NOMINMAX ENABLE_MEM_STAT ENABLE_THREADS)
target_compile_options(compat_fixed PRIVATE /utf-8 /EHsc /bigobj /W0)
target_include_directories(compat_fixed PRIVATE "${SRC}/src")
target_link_libraries(compat_fixed PRIVATE "${ROOT}/work/issue-03/standalone-validation/library/lib/Release/tsfile.lib" psapi)

foreach(variant baseline fixed)
  add_executable(bench_${variant} benchmark_driver.cc)
  target_compile_features(bench_${variant} PRIVATE cxx_std_11)
  target_compile_definitions(bench_${variant} PRIVATE TSFILE_STATIC NOMINMAX ENABLE_MEM_STAT ENABLE_THREADS)
  target_compile_options(bench_${variant} PRIVATE /utf-8 /EHsc /bigobj /W0)
  target_include_directories(bench_${variant} PRIVATE "${SRC}/src")
  if(variant STREQUAL "baseline")
    set(LIB "${OLD}/lib/Release/tsfile.lib")
  else()
    set(LIB "${ROOT}/work/issue-03/standalone-validation/library/lib/Release/tsfile.lib")
  endif()
  target_link_libraries(bench_${variant} PRIVATE "${LIB}" psapi)
endforeach()

if(ASAN_LIBRARY)
  add_executable(regressions_asan "${SRC}/test/reader/table_field_filter_test.cc")
  target_compile_features(regressions_asan PRIVATE cxx_std_11)
  target_compile_definitions(regressions_asan PRIVATE TSFILE_STATIC NOMINMAX ENABLE_MEM_STAT ENABLE_THREADS)
  target_compile_options(regressions_asan PRIVATE /utf-8 /EHsc /bigobj /W0 /fsanitize=address /Zi)
  target_link_options(regressions_asan PRIVATE /DEBUG /INCREMENTAL:NO)
  target_include_directories(regressions_asan PRIVATE "${SRC}/src" "${OLD}/googletest-extract/googletest-release-1.12.1/googletest/include")
  target_sources(regressions_asan PRIVATE "${OLD}/googletest-extract/googletest-release-1.12.1/googletest/src/gtest-all.cc" "${OLD}/googletest-extract/googletest-release-1.12.1/googletest/src/gtest_main.cc")
  target_include_directories(regressions_asan PRIVATE "${OLD}/googletest-extract/googletest-release-1.12.1/googletest")
  target_link_libraries(regressions_asan PRIVATE "${ASAN_LIBRARY}" psapi)
endif()
