find_package(OpenMP)
if (NOT OpenMP_CXX_FOUND)
    MESSAGE(STATUS "OpenMP is not found. Use single thread in adjacency_list.")
endif ()

add_metall_executable(run_adj_list_bench_stl run_adj_list_bench_stl.cpp)
if (OpenMP_CXX_FOUND)
    target_link_libraries(run_adj_list_bench_stl PRIVATE OpenMP::OpenMP_CXX)
endif ()

add_metall_executable(run_adj_list_bench_bip run_adj_list_bench_bip.cpp)
if (OpenMP_CXX_FOUND)
    target_link_libraries(run_adj_list_bench_bip PRIVATE OpenMP::OpenMP_CXX)
endif ()

add_metall_executable(run_adj_list_bench_bip_extend run_adj_list_bench_bip_extend.cpp)
if (OpenMP_CXX_FOUND)
    target_link_libraries(run_adj_list_bench_bip_extend PRIVATE OpenMP::OpenMP_CXX)
endif ()

add_metall_executable(run_adj_list_bench_metall run_adj_list_bench_metall.cpp)
if (OpenMP_CXX_FOUND)
    target_link_libraries(run_adj_list_bench_metall PRIVATE OpenMP::OpenMP_CXX)
endif ()

add_metall_executable(run_adj_list_bench_reflink_snapshot run_adj_list_bench_reflink_snapshot.cpp)
if (OpenMP_CXX_FOUND)
    target_link_libraries(run_adj_list_bench_reflink_snapshot PRIVATE OpenMP::OpenMP_CXX)
endif ()

if (MEMKIND_ROOT)
    add_metall_executable(run_adj_list_bench_pmem run_adj_list_bench_pmem.cpp)
    target_include_directories(run_adj_list_bench_pmem PRIVATE ${MEMKIND_ROOT}/include)
    if (UNIX AND NOT APPLE)
        find_library(LIBMEMKIND NAMES memkind PATHS ${MEMKIND_ROOT}/lib)
        if (LIBMEMKIND)
            target_link_libraries(run_adj_list_bench_pmem PRIVATE ${LIBMEMKIND})
        else ()
            message(FATAL_ERROR "Cannot find memkind library")
        endif ()
    endif ()
    if (OpenMP_CXX_FOUND)
        target_link_libraries(run_adj_list_bench_pmem PRIVATE OpenMP::OpenMP_CXX)
    endif ()
endif ()

configure_file(run_bench.sh run_bench.sh COPYONLY)

add_subdirectory(edge_generator)
add_subdirectory(test)