# Copyright (c) ONNX Project Contributors
#
# SPDX-License-Identifier: Apache-2.0

cmake_minimum_required(VERSION 3.26)
project(onnx_cross_protobuf LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
get_filename_component(ONNX_ROOT "${CMAKE_CURRENT_LIST_DIR}/../../.." ABSOLUTE)
include(FetchContent)

file(READ "${ONNX_ROOT}/sbom.cdx.json" _sbom)
string(JSON _count LENGTH "${_sbom}" components)
math(EXPR _last "${_count} - 1")
foreach(_index RANGE ${_last})
  string(JSON _name GET "${_sbom}" components ${_index} name)
  if(_name STREQUAL "abseil-cpp")
    set(_prefix _absl)
  elseif(_name STREQUAL "protobuf")
    set(_prefix _protobuf)
  else()
    continue()
  endif()
  string(JSON ${_prefix}_URL GET "${_sbom}" components ${_index} externalReferences 0 url)
  string(JSON ${_prefix}_SHA256 GET "${_sbom}" components ${_index} hashes 0 content)
endforeach()
set(ABSL_PROPAGATE_CXX_STD ON CACHE BOOL "" FORCE)
set(ABSL_ENABLE_INSTALL ON CACHE BOOL "" FORCE)
set(protobuf_BUILD_TESTS OFF CACHE BOOL "" FORCE)
set(protobuf_BUILD_PROTOC_BINARIES OFF CACHE BOOL "" FORCE)
set(protobuf_BUILD_LIBPROTOC OFF CACHE BOOL "" FORCE)
set(protobuf_BUILD_LIBUPB OFF CACHE BOOL "" FORCE)
set(protobuf_WITH_ZLIB OFF CACHE BOOL "" FORCE)
set(protobuf_INSTALL ON CACHE BOOL "" FORCE)
FetchContent_Declare(absl URL "${_absl_URL}" URL_HASH "SHA256=${_absl_SHA256}")
FetchContent_MakeAvailable(absl)
FetchContent_Declare(Protobuf URL "${_protobuf_URL}" URL_HASH "SHA256=${_protobuf_SHA256}")
FetchContent_MakeAvailable(Protobuf)
