set(KAMINPAR_SOURCE_FILES
  algorithm/parallel_label_propagation.h
  algorithm/graph_contraction.cc
  algorithm/graph_contraction.h
  algorithm/graph_utils.cc
  algorithm/graph_utils.h
  algorithm/extract_subgraphs.cc
  algorithm/extract_subgraphs.h
  coarsening/i_coarsener.h
  coarsening/parallel_label_propagation_coarsener.h
  datastructure/graph.cc
  datastructure/graph.h
  datastructure/binary_heap.h
  datastructure/fast_reset_array.h
  datastructure/rating_map.h
  datastructure/sparse_map.h
  datastructure/fixed_size_sparse_map.h
  datastructure/marker.h
  datastructure/queue.h
  datastructure/static_array.h
  initial_partitioning/bfs_bipartitioner.h
  initial_partitioning/bfs_bipartitioner.cc
  initial_partitioning/greedy_graph_growing_bipartitioner.cc
  initial_partitioning/greedy_graph_growing_bipartitioner.h
  initial_partitioning/i_bipartitioner.h
  initial_partitioning/pool_bipartitioner.h
  initial_partitioning/random_bipartitioner.h
  initial_partitioning/initial_coarsener.cc
  initial_partitioning/initial_coarsener.h
  initial_partitioning/sequential_graph_hierarchy.cc
  initial_partitioning/sequential_graph_hierarchy.h
  initial_partitioning/initial_refiner.cc
  initial_partitioning/initial_refiner.h
  initial_partitioning/initial_partitioning_facade.h
  partitioning_scheme/parallel_recursive_bisection.cc
  partitioning_scheme/parallel_recursive_bisection.h
  partitioning_scheme/helper.cc
  partitioning_scheme/helper.h
  partitioning_scheme/parallel_initial_partitioner.cc
  partitioning_scheme/parallel_initial_partitioner.h
  partitioning_scheme/parallel_synchronized_initial_partitioner.cc
  partitioning_scheme/parallel_synchronized_initial_partitioner.h
  partitioning_scheme/parallel_simple_recursive_bisection.h
  partitioning_scheme/partitioning.cc
  partitioning_scheme/partitioning.h
  refinement/i_balancer.h
  refinement/i_refiner.h
  refinement/parallel_balancer.cc
  refinement/parallel_balancer.h
  refinement/parallel_label_propagation_refiner.h
  utility/utility.cc
  utility/utility.h
  utility/timer.cc
  utility/timer.h
  utility/random.cc
  utility/random.h
  utility/metrics.cc
  utility/metrics.h
  utility/logger.cc
  utility/logger.h
  utility/console_io.cc
  utility/console_io.h
  utility/math.h
  context.cc
  context.h
  io.cc
  io.h
  factories.cc
  factories.h
  parallel.h)

add_library(kaminpar_impl OBJECT ${KAMINPAR_SOURCE_FILES})
target_include_directories(kaminpar_impl PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})

# Link TBB
find_package(Threads REQUIRED)
find_package(TBB REQUIRED)
target_link_libraries(kaminpar_impl PUBLIC ${TBB_LIBRARIES})
target_include_directories(kaminpar_impl PUBLIC ${TBB_INCLUDE_DIRS})

# Link libnuma on Linux
if (UNIX AND NOT APPLE)
    target_link_libraries(kaminpar_impl PUBLIC numa)
endif ()