cmake_minimum_required(VERSION 3.20)
project(ess_python LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)

find_package(pybind11 CONFIG REQUIRED)

add_library(ess_core
  cpp/core/src/core.cpp
  cpp/core/src/ewald_shared.cpp
  cpp/core/src/guide_supercell.cpp
  cpp/core/src/guide_recipe_allocation.cpp
  cpp/core/src/guide_ready_writer.cpp
  cpp/core/src/guide_poscar_writer.cpp
  cpp/core/src/guide_rg_optimizer.cpp
  cpp/core/src/guide_add_ions.cpp
  cpp/core/src/solve_recipe_state.cpp
  cpp/core/src/solve_candidate_decode.cpp
  cpp/core/src/solve_first_enumeration.cpp
  cpp/core/src/solve_search_space.cpp
  cpp/core/src/solve_slice_window.cpp
  cpp/core/src/solve_window_evaluation.cpp
  cpp/core/src/solve_work_slice.cpp
  cpp/core/src/solve_global_reduction.cpp
  cpp/core/src/solve_generalized_swap.cpp
  cpp/core/src/solve_swap_loop.cpp
  cpp/core/src/solve_swap_cache.cpp
  cpp/core/src/add_sites_mc.cpp
  cpp/adapters/src/guider_text_adapter.cpp
  cpp/adapters/src/add_sites_text_adapter.cpp
  cpp/adapters/src/poscar_adapter.cpp
  cpp/adapters/src/guider_normalize.cpp
  cpp/adapters/src/wyc_adapter.cpp
)

target_include_directories(ess_core
  PUBLIC
    cpp/core/include
    cpp/adapters/include
)

set_property(TARGET ess_core PROPERTY POSITION_INDEPENDENT_CODE ON)

pybind11_add_module(_esspy
  cpp/bindings/pybind_module.cpp
)

target_link_libraries(_esspy PRIVATE ess_core)

install(TARGETS _esspy DESTINATION esspy)
