# Copyright 2024 The IREE Authors # # Licensed under the Apache License v2.0 with LLVM Exceptions. # See https://llvm.org/LICENSE.txt for license information. # SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception include(FetchContent) # disable some targets we don't use set(protobuf_INSTALL OFF) set(protobuf_BUILD_TESTS OFF) # to prevent protobuf itself from using `find_package` set(protobuf_FORCE_FETCH_DEPENDENCIES ON) # pin the version of protobuf set(protobuf_VERSION 29.1) FetchContent_Declare( protobuf GIT_REPOSITORY https://github.com/protocolbuffers/protobuf GIT_TAG v${protobuf_VERSION} GIT_SHALLOW ON ) FetchContent_MakeAvailable(protobuf) # make protobuf_generate() function available include(${protobuf_SOURCE_DIR}/cmake/protobuf-generate.cmake) # iree_pjrt_protobuf_cc_library() # # CMake function to invoke the protoc compiler. # # Parameters: # NAME: name of target # SRCS: List of source files for the library # PROTOC_ARGS: List of protoc arguments. # PUBLIC: Add this so that this library will be exported under iree:: # Also in IDE, target will appear in IREE folder while non PUBLIC will be in IREE/internal. # TESTONLY: When added, this target will only be built if user passes -DIREE_BUILD_TESTS=ON to CMake. # # iree_pjrt_protobuf_cc_library( # NAME # some_def # SRC # some_def.proto # PUBLIC # ) function(iree_pjrt_protobuf_cc_library) cmake_parse_arguments(_RULE "PUBLIC;TESTONLY" "NAME" "SRCS;PROTOC_ARGS" ${ARGN} ) if(_RULE_TESTONLY AND NOT IREE_BUILD_TESTS) return() endif() # Prefix the library with the package name, so we get: iree_package_name iree_package_name(_PACKAGE_NAME) set(_NAME "${_PACKAGE_NAME}_${_RULE_NAME}") add_library(${_NAME} ${_RULE_SRCS}) protobuf_generate( TARGET ${_NAME} LANGUAGE cpp PROTOC_OPTIONS ${_RULE_PROTOC_ARGS} IMPORT_DIRS ${protobuf_SOURCE_DIR}/src ${CMAKE_CURRENT_SOURCE_DIR} ) target_include_directories(${_NAME} PUBLIC $ ) target_link_libraries(${_NAME} PUBLIC protobuf::libprotobuf ${IREE_DEFAULT_LINKOPTS} ) iree_install_targets( TARGETS ${_NAME} ) # Alias the iree_package_name library to iree::package::name. # This lets us more clearly map to Bazel and makes it possible to # disambiguate the underscores in paths vs. the separators. iree_package_ns(_PACKAGE_NS) iree_add_alias_library(${_PACKAGE_NS}::${_RULE_NAME} ${_NAME}) endfunction()