cmake_minimum_required(VERSION 3.20)
project(cf_pipeline_engine LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_POLICY_VERSION_MINIMUM 3.5)

find_package(Python3 REQUIRED COMPONENTS Interpreter)

set(TYPE_REGISTRY_V0_SOURCE_PATH
  "${CMAKE_CURRENT_SOURCE_DIR}/resources/type_registry.v0.json"
)

include(FetchContent)
FetchContent_Declare(
  nlohmann_json
  GIT_REPOSITORY https://github.com/nlohmann/json.git
  GIT_TAG v3.11.2
)
FetchContent_MakeAvailable(nlohmann_json)

add_library(cf_pipeline_v2_utils STATIC
  src/common/sha256.cpp
  src/common/type_registry.cc
  src/compiler/rdf_loader.cpp
  src/compiler/signature.cpp
)

target_include_directories(cf_pipeline_v2_utils PUBLIC
  ${CMAKE_CURRENT_SOURCE_DIR}/include
  ${CMAKE_CURRENT_SOURCE_DIR}/src
)

set(TYPE_REGISTRY_V0_FILENAME "type_registry.v0.json")

if (NOT EXISTS "${TYPE_REGISTRY_V0_SOURCE_PATH}")
  message(FATAL_ERROR "Bundled type_registry.v0.json not found in '${TYPE_REGISTRY_V0_SOURCE_PATH}'.")
endif()

file(TO_CMAKE_PATH "${TYPE_REGISTRY_V0_SOURCE_PATH}" TYPE_REGISTRY_V0_SOURCE_PATH)

target_compile_definitions(cf_pipeline_v2_utils PRIVATE
  CF_TYPE_REGISTRY_V0_PATH="${TYPE_REGISTRY_V0_SOURCE_PATH}"
  CF_TYPE_REGISTRY_V0_FILENAME="${TYPE_REGISTRY_V0_FILENAME}"
)

target_link_libraries(cf_pipeline_v2_utils PUBLIC nlohmann_json::nlohmann_json)

add_executable(cf_siggen tools/cf_siggen_main.cpp)
target_include_directories(cf_siggen PRIVATE
  ${CMAKE_CURRENT_SOURCE_DIR}/include
  ${CMAKE_CURRENT_SOURCE_DIR}/src
)
target_link_libraries(cf_siggen PRIVATE cf_pipeline_v2_utils)

install(TARGETS cf_siggen RUNTIME DESTINATION bin)
install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/include/ DESTINATION include)
