cmake_minimum_required(VERSION 3.16)
project(synkit_canon VERSION 1.6.5 LANGUAGES CXX)
add_library(synkit_canon SHARED src/canonical.cpp)
target_compile_definitions(synkit_canon PRIVATE SYNKIT_CANON_BUILD)
target_compile_features(synkit_canon PUBLIC cxx_std_17)
target_include_directories(synkit_canon PUBLIC
  $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
  $<INSTALL_INTERFACE:include>)
set_target_properties(synkit_canon PROPERTIES CXX_EXTENSIONS OFF)
if(MSVC)
  target_compile_options(synkit_canon PRIVATE /W4)
else()
  target_compile_options(synkit_canon PRIVATE -Wall -Wextra -Wpedantic)
endif()
option(SYNKIT_CANON_BUILD_EXAMPLES "Build standalone graph example" OFF)
if(SYNKIT_CANON_BUILD_EXAMPLES)
  add_executable(canonical_graph examples/canonical_graph.cpp)
  target_link_libraries(canonical_graph PRIVATE synkit_canon)
endif()
option(SYNKIT_CANON_BUILD_TESTS "Build independent native symmetry checks" OFF)
if(SYNKIT_CANON_BUILD_TESTS)
  enable_testing()
  add_executable(canonical_symmetry_tests tests/symmetry.cpp)
  target_compile_features(canonical_symmetry_tests PRIVATE cxx_std_17)
  target_include_directories(canonical_symmetry_tests PRIVATE src)
  add_test(NAME canonical_symmetry COMMAND canonical_symmetry_tests)
endif()
include(GNUInstallDirs)
option(SYNKIT_CANON_WHEEL "Install the runtime library inside the Python wheel" OFF)
if(SYNKIT_CANON_WHEEL)
  if(MSVC)
    set_property(TARGET synkit_canon PROPERTY MSVC_RUNTIME_LIBRARY
      "MultiThreaded$<$<CONFIG:Debug>:Debug>")
  endif()
  install(TARGETS synkit_canon
    LIBRARY DESTINATION synkit/Graph/Canon/_native/lib
    RUNTIME DESTINATION synkit/Graph/Canon/_native/lib)
else()
  install(TARGETS synkit_canon LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
    RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
  install(DIRECTORY include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
endif()
