| # 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 |
| $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}> |
| ) |
| 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() |