cmake_minimum_required(VERSION 3.0)

#######################################################################################

unset(CMAKE_ARCHIVE_OUTPUT_DIRECTORY)
include_directories(../third_party/md5)
add_library(md5 STATIC ../third_party/md5/md5.cpp)

#######################################################################################

unset(CMAKE_ARCHIVE_OUTPUT_DIRECTORY)
include_directories(../third_party/tiny_thread_pool)
add_library(tiny_pool STATIC ../third_party/tiny_thread_pool/tiny_pool/tiny_pool.c)

#######################################################################################

enable_testing()
set(TEST_DEPS
    gtest
    gtest_main
    klotski
    md5
    tiny_pool
    absl::flat_hash_map
    absl::flat_hash_set
)

#######################################################################################

include_directories(../src/klotski_core)
include_directories(../src/klotski_core/utils)
include_directories(../src/klotski_core/all_cases)

include_directories(../src/klotski_core/raw_code)
include_directories(../src/klotski_core/short_code)
include_directories(../src/klotski_core/common_code)

include_directories(../src/klotski_core/core)
include_directories(../src/klotski_core/group)

#######################################################################################

set(TEST_BASIC_SRC
    basic/utils.cc
    basic/all_cases.cc
)
add_executable(test_basic ${TEST_BASIC_SRC})
target_link_libraries(test_basic PUBLIC ${TEST_DEPS})
add_test(NAME basic COMMAND test_basic)

#######################################################################################

set(TEST_CODEC_SRC
    codec/short_code.cc
    codec/raw_code.cc
    codec/common_code.cc
)
add_executable(test_codec ${TEST_CODEC_SRC})
target_link_libraries(test_codec ${TEST_DEPS})
add_test(NAME codec COMMAND test_codec)

#######################################################################################

set(TEST_CORE_SRC
    core/core.cc
)
add_executable(test_core ${TEST_CORE_SRC})
target_link_libraries(test_core ${TEST_DEPS})
add_test(NAME core COMMAND test_core)

#######################################################################################

set(TEST_GROUP_SRC
    group/basic.cc
    group/advance.cc
    group/group_info.cc
)
add_executable(test_group ${TEST_GROUP_SRC})
target_link_libraries(test_group ${TEST_DEPS})
add_test(NAME group COMMAND test_group)

#######################################################################################

set(TEST_FFI_SRC
    ffi/metadata.cc
    ffi/codec.cc
    ffi/all_cases.cc
)
add_executable(test_ffi ${TEST_FFI_SRC})
target_link_libraries(test_ffi ${TEST_DEPS})
add_test(NAME ffi COMMAND test_ffi)

#######################################################################################