| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397 |
- # Copyright The OpenTelemetry Authors
- # SPDX-License-Identifier: Apache-2.0
- #
- # The dependency on opentelemetry-proto can be provided different ways. By order
- # of decreasing priority, options are:
- #
- # 1 - Use a provided package
- #
- # This is useful to build opentelemetry-cpp as part of a super project.
- #
- # The super project provides the path to the opentelemetry-proto source code
- # using variable ${OTELCPP_PROTO_PATH}
- #
- # 2 - Search for a opentelemetry-proto git submodule
- #
- # When git submodule is used, the opentelemetry-proto code is located in:
- # third_party/opentelemetry-proto
- #
- # 3 - Download opentelemetry-proto from github
- #
- # Code from the required version is used, unless a specific release tag is
- # provided in variable ${opentelemetry-proto}
- #
- if(OTELCPP_PROTO_PATH)
- if(NOT EXISTS
- "${OTELCPP_PROTO_PATH}/opentelemetry/proto/common/v1/common.proto")
- message(
- FATAL_ERROR
- "OTELCPP_PROTO_PATH does not point to a opentelemetry-proto repository")
- endif()
- message(STATUS "opentelemetry-proto dependency satisfied by: external path")
- set(PROTO_PATH ${OTELCPP_PROTO_PATH})
- set(needs_proto_download FALSE)
- else()
- if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/third_party/opentelemetry-proto/.git)
- message(STATUS "opentelemetry-proto dependency satisfied by: git submodule")
- set(PROTO_PATH
- "${CMAKE_CURRENT_SOURCE_DIR}/third_party/opentelemetry-proto")
- set(needs_proto_download FALSE)
- else()
- message(
- STATUS "opentelemetry-proto dependency satisfied by: github download")
- if("${opentelemetry-proto}" STREQUAL "")
- file(READ "${CMAKE_CURRENT_LIST_DIR}/../third_party_release"
- OTELCPP_THIRD_PARTY_RELEASE_CONTENT)
- if(OTELCPP_THIRD_PARTY_RELEASE_CONTENT MATCHES
- "opentelemetry-proto=[ \\t]*([A-Za-z0-9_\\.\\-]+)")
- set(opentelemetry-proto "${CMAKE_MATCH_1}")
- else()
- set(opentelemetry-proto "v1.6.0")
- endif()
- unset(OTELCPP_THIRD_PARTY_RELEASE_CONTENT)
- endif()
- include(ExternalProject)
- ExternalProject_Add(
- opentelemetry-proto
- GIT_REPOSITORY https://github.com/open-telemetry/opentelemetry-proto.git
- GIT_TAG "${opentelemetry-proto}"
- UPDATE_COMMAND ""
- BUILD_COMMAND ""
- INSTALL_COMMAND ""
- CONFIGURE_COMMAND ""
- TEST_AFTER_INSTALL 0
- DOWNLOAD_NO_PROGRESS 1
- LOG_CONFIGURE 1
- LOG_BUILD 1
- LOG_INSTALL 1)
- ExternalProject_Get_Property(opentelemetry-proto INSTALL_DIR)
- set(PROTO_PATH "${INSTALL_DIR}/src/opentelemetry-proto")
- set(needs_proto_download TRUE)
- endif()
- endif()
- set(COMMON_PROTO "${PROTO_PATH}/opentelemetry/proto/common/v1/common.proto")
- set(RESOURCE_PROTO
- "${PROTO_PATH}/opentelemetry/proto/resource/v1/resource.proto")
- set(TRACE_PROTO "${PROTO_PATH}/opentelemetry/proto/trace/v1/trace.proto")
- set(LOGS_PROTO "${PROTO_PATH}/opentelemetry/proto/logs/v1/logs.proto")
- set(METRICS_PROTO "${PROTO_PATH}/opentelemetry/proto/metrics/v1/metrics.proto")
- set(PROFILES_PROTO
- "${PROTO_PATH}/opentelemetry/proto/profiles/v1development/profiles.proto")
- set(TRACE_SERVICE_PROTO
- "${PROTO_PATH}/opentelemetry/proto/collector/trace/v1/trace_service.proto")
- set(LOGS_SERVICE_PROTO
- "${PROTO_PATH}/opentelemetry/proto/collector/logs/v1/logs_service.proto")
- set(METRICS_SERVICE_PROTO
- "${PROTO_PATH}/opentelemetry/proto/collector/metrics/v1/metrics_service.proto"
- )
- set(PROFILES_SERVICE_PROTO
- "${PROTO_PATH}/opentelemetry/proto/collector/profiles/v1development/profiles_service.proto"
- )
- set(GENERATED_PROTOBUF_PATH
- "${CMAKE_BINARY_DIR}/generated/third_party/opentelemetry-proto")
- file(MAKE_DIRECTORY "${GENERATED_PROTOBUF_PATH}")
- set(COMMON_PB_CPP_FILE
- "${GENERATED_PROTOBUF_PATH}/opentelemetry/proto/common/v1/common.pb.cc")
- set(COMMON_PB_H_FILE
- "${GENERATED_PROTOBUF_PATH}/opentelemetry/proto/common/v1/common.pb.h")
- set(RESOURCE_PB_CPP_FILE
- "${GENERATED_PROTOBUF_PATH}/opentelemetry/proto/resource/v1/resource.pb.cc")
- set(RESOURCE_PB_H_FILE
- "${GENERATED_PROTOBUF_PATH}/opentelemetry/proto/resource/v1/resource.pb.h")
- set(TRACE_PB_CPP_FILE
- "${GENERATED_PROTOBUF_PATH}/opentelemetry/proto/trace/v1/trace.pb.cc")
- set(TRACE_PB_H_FILE
- "${GENERATED_PROTOBUF_PATH}/opentelemetry/proto/trace/v1/trace.pb.h")
- set(LOGS_PB_CPP_FILE
- "${GENERATED_PROTOBUF_PATH}/opentelemetry/proto/logs/v1/logs.pb.cc")
- set(LOGS_PB_H_FILE
- "${GENERATED_PROTOBUF_PATH}/opentelemetry/proto/logs/v1/logs.pb.h")
- set(METRICS_PB_CPP_FILE
- "${GENERATED_PROTOBUF_PATH}/opentelemetry/proto/metrics/v1/metrics.pb.cc")
- set(METRICS_PB_H_FILE
- "${GENERATED_PROTOBUF_PATH}/opentelemetry/proto/metrics/v1/metrics.pb.h")
- set(TRACE_SERVICE_PB_CPP_FILE
- "${GENERATED_PROTOBUF_PATH}/opentelemetry/proto/collector/trace/v1/trace_service.pb.cc"
- )
- set(TRACE_SERVICE_PB_H_FILE
- "${GENERATED_PROTOBUF_PATH}/opentelemetry/proto/collector/trace/v1/trace_service.pb.h"
- )
- #
- # Notes about the PROFILES signal: - *.proto files added in opentelemetry-proto
- # 1.3.0 - C++ code is generated from proto files - The generated code is not
- # used yet.
- #
- set(PROFILES_CPP_FILE
- "${GENERATED_PROTOBUF_PATH}/opentelemetry/proto/profiles/v1development/profiles.pb.cc"
- )
- set(PROFILES_H_FILE
- "${GENERATED_PROTOBUF_PATH}/opentelemetry/proto/profiles/v1development/profiles.pb.h"
- )
- set(PROFILES_SERVICE_PB_H_FILE
- "${GENERATED_PROTOBUF_PATH}/opentelemetry/proto/collector/profiles/v1development/profiles_service.pb.h"
- )
- set(PROFILES_SERVICE_PB_CPP_FILE
- "${GENERATED_PROTOBUF_PATH}/opentelemetry/proto/collector/profiles/v1development/profiles_service.pb.cc"
- )
- if(WITH_OTLP_GRPC)
- set(PROFILES_SERVICE_GRPC_PB_H_FILE
- "${GENERATED_PROTOBUF_PATH}/opentelemetry/proto/collector/profiles/v1development/profiles_service.grpc.pb.h"
- )
- set(PROFILES_SERVICE_GRPC_PB_CPP_FILE
- "${GENERATED_PROTOBUF_PATH}/opentelemetry/proto/collector/profiles/v1development/profiles_service.grpc.pb.cc"
- )
- endif()
- if(WITH_OTLP_GRPC)
- set(TRACE_SERVICE_GRPC_PB_CPP_FILE
- "${GENERATED_PROTOBUF_PATH}/opentelemetry/proto/collector/trace/v1/trace_service.grpc.pb.cc"
- )
- set(TRACE_SERVICE_GRPC_PB_H_FILE
- "${GENERATED_PROTOBUF_PATH}/opentelemetry/proto/collector/trace/v1/trace_service.grpc.pb.h"
- )
- endif()
- set(LOGS_SERVICE_PB_CPP_FILE
- "${GENERATED_PROTOBUF_PATH}/opentelemetry/proto/collector/logs/v1/logs_service.pb.cc"
- )
- set(LOGS_SERVICE_PB_H_FILE
- "${GENERATED_PROTOBUF_PATH}/opentelemetry/proto/collector/logs/v1/logs_service.pb.h"
- )
- if(WITH_OTLP_GRPC)
- set(LOGS_SERVICE_GRPC_PB_CPP_FILE
- "${GENERATED_PROTOBUF_PATH}/opentelemetry/proto/collector/logs/v1/logs_service.grpc.pb.cc"
- )
- set(LOGS_SERVICE_GRPC_PB_H_FILE
- "${GENERATED_PROTOBUF_PATH}/opentelemetry/proto/collector/logs/v1/logs_service.grpc.pb.h"
- )
- endif()
- set(METRICS_SERVICE_PB_CPP_FILE
- "${GENERATED_PROTOBUF_PATH}/opentelemetry/proto/collector/metrics/v1/metrics_service.pb.cc"
- )
- set(METRICS_SERVICE_PB_H_FILE
- "${GENERATED_PROTOBUF_PATH}/opentelemetry/proto/collector/metrics/v1/metrics_service.pb.h"
- )
- if(WITH_OTLP_GRPC)
- set(METRICS_SERVICE_GRPC_PB_CPP_FILE
- "${GENERATED_PROTOBUF_PATH}/opentelemetry/proto/collector/metrics/v1/metrics_service.grpc.pb.cc"
- )
- set(METRICS_SERVICE_GRPC_PB_H_FILE
- "${GENERATED_PROTOBUF_PATH}/opentelemetry/proto/collector/metrics/v1/metrics_service.grpc.pb.h"
- )
- endif()
- foreach(IMPORT_DIR ${PROTOBUF_IMPORT_DIRS})
- list(APPEND PROTOBUF_INCLUDE_FLAGS "-I${IMPORT_DIR}")
- endforeach()
- if(WITH_OTLP_GRPC)
- if(CMAKE_CROSSCOMPILING)
- find_program(gRPC_CPP_PLUGIN_EXECUTABLE grpc_cpp_plugin)
- else()
- if(TARGET gRPC::grpc_cpp_plugin)
- project_build_tools_get_imported_location(gRPC_CPP_PLUGIN_EXECUTABLE
- gRPC::grpc_cpp_plugin)
- else()
- find_program(gRPC_CPP_PLUGIN_EXECUTABLE grpc_cpp_plugin)
- endif()
- endif()
- message(STATUS "gRPC_CPP_PLUGIN_EXECUTABLE=${gRPC_CPP_PLUGIN_EXECUTABLE}")
- endif()
- set(PROTOBUF_COMMON_FLAGS "--proto_path=${PROTO_PATH}"
- "--cpp_out=${GENERATED_PROTOBUF_PATH}")
- # --experimental_allow_proto3_optional is available from 3.13 and be stable and
- # enabled by default from 3.16
- if(Protobuf_VERSION AND Protobuf_VERSION VERSION_LESS "3.16")
- list(APPEND PROTOBUF_COMMON_FLAGS "--experimental_allow_proto3_optional")
- elseif(PROTOBUF_VERSION AND PROTOBUF_VERSION VERSION_LESS "3.16")
- list(APPEND PROTOBUF_COMMON_FLAGS "--experimental_allow_proto3_optional")
- endif()
- set(PROTOBUF_GENERATED_FILES
- ${COMMON_PB_H_FILE}
- ${COMMON_PB_CPP_FILE}
- ${RESOURCE_PB_H_FILE}
- ${RESOURCE_PB_CPP_FILE}
- ${TRACE_PB_H_FILE}
- ${TRACE_PB_CPP_FILE}
- ${LOGS_PB_H_FILE}
- ${LOGS_PB_CPP_FILE}
- ${METRICS_PB_H_FILE}
- ${METRICS_PB_CPP_FILE}
- ${PROFILES_H_FILE}
- ${PROFILES_CPP_FILE}
- ${TRACE_SERVICE_PB_H_FILE}
- ${TRACE_SERVICE_PB_CPP_FILE}
- ${LOGS_SERVICE_PB_H_FILE}
- ${LOGS_SERVICE_PB_CPP_FILE}
- ${METRICS_SERVICE_PB_H_FILE}
- ${METRICS_SERVICE_PB_CPP_FILE}
- ${PROFILES_SERVICE_PB_H_FILE}
- ${PROFILES_SERVICE_PB_CPP_FILE})
- if(WITH_OTLP_GRPC)
- list(APPEND PROTOBUF_COMMON_FLAGS
- "--grpc_out=generate_mock_code=true:${GENERATED_PROTOBUF_PATH}"
- --plugin=protoc-gen-grpc="${gRPC_CPP_PLUGIN_EXECUTABLE}")
- list(
- APPEND
- PROTOBUF_GENERATED_FILES
- ${TRACE_SERVICE_GRPC_PB_H_FILE}
- ${TRACE_SERVICE_GRPC_PB_CPP_FILE}
- ${LOGS_SERVICE_GRPC_PB_H_FILE}
- ${LOGS_SERVICE_GRPC_PB_CPP_FILE}
- ${METRICS_SERVICE_GRPC_PB_H_FILE}
- ${METRICS_SERVICE_GRPC_PB_CPP_FILE}
- ${PROFILES_SERVICE_GRPC_PB_H_FILE}
- ${PROFILES_SERVICE_GRPC_PB_CPP_FILE})
- endif()
- set(PROTOBUF_RUN_PROTOC_COMMAND "\"${PROTOBUF_PROTOC_EXECUTABLE}\"")
- foreach(
- PROTOBUF_RUN_PROTOC_ARG
- ${PROTOBUF_COMMON_FLAGS}
- ${PROTOBUF_INCLUDE_FLAGS}
- ${COMMON_PROTO}
- ${RESOURCE_PROTO}
- ${TRACE_PROTO}
- ${LOGS_PROTO}
- ${METRICS_PROTO}
- ${PROFILES_PROTO}
- ${TRACE_SERVICE_PROTO}
- ${LOGS_SERVICE_PROTO}
- ${METRICS_SERVICE_PROTO}
- ${PROFILES_SERVICE_PROTO})
- set(PROTOBUF_RUN_PROTOC_COMMAND
- "${PROTOBUF_RUN_PROTOC_COMMAND} \"${PROTOBUF_RUN_PROTOC_ARG}\"")
- endforeach()
- add_custom_command(
- OUTPUT ${PROTOBUF_GENERATED_FILES}
- COMMAND
- ${PROTOBUF_PROTOC_EXECUTABLE} ${PROTOBUF_COMMON_FLAGS}
- ${PROTOBUF_INCLUDE_FLAGS} ${COMMON_PROTO} ${RESOURCE_PROTO} ${TRACE_PROTO}
- ${LOGS_PROTO} ${METRICS_PROTO} ${TRACE_SERVICE_PROTO} ${LOGS_SERVICE_PROTO}
- ${METRICS_SERVICE_PROTO} ${PROFILES_PROTO} ${PROFILES_SERVICE_PROTO}
- COMMENT "[Run]: ${PROTOBUF_RUN_PROTOC_COMMAND}"
- DEPENDS ${PROTOBUF_PROTOC_EXECUTABLE})
- unset(OTELCPP_PROTO_TARGET_OPTIONS)
- if(CMAKE_SYSTEM_NAME MATCHES "Windows|MinGW|WindowsStore")
- list(APPEND OTELCPP_PROTO_TARGET_OPTIONS STATIC)
- elseif(NOT DEFINED BUILD_SHARED_LIBS OR BUILD_SHARED_LIBS)
- list(APPEND OTELCPP_PROTO_TARGET_OPTIONS SHARED)
- else()
- list(APPEND OTELCPP_PROTO_TARGET_OPTIONS STATIC)
- endif()
- set(OPENTELEMETRY_PROTO_TARGETS opentelemetry_proto)
- add_library(
- opentelemetry_proto
- ${OTELCPP_PROTO_TARGET_OPTIONS}
- ${COMMON_PB_CPP_FILE}
- ${RESOURCE_PB_CPP_FILE}
- ${TRACE_PB_CPP_FILE}
- ${LOGS_PB_CPP_FILE}
- ${METRICS_PB_CPP_FILE}
- ${TRACE_SERVICE_PB_CPP_FILE}
- ${LOGS_SERVICE_PB_CPP_FILE}
- ${METRICS_SERVICE_PB_CPP_FILE})
- set_target_version(opentelemetry_proto)
- target_include_directories(
- opentelemetry_proto
- PUBLIC "$<BUILD_INTERFACE:${GENERATED_PROTOBUF_PATH}>"
- "$<INSTALL_INTERFACE:include>")
- # Disable include-what-you-use on generated code.
- set_target_properties(opentelemetry_proto PROPERTIES CXX_INCLUDE_WHAT_YOU_USE
- "")
- if(NOT Protobuf_INCLUDE_DIRS AND TARGET protobuf::libprotobuf)
- get_target_property(Protobuf_INCLUDE_DIRS protobuf::libprotobuf
- INTERFACE_INCLUDE_DIRECTORIES)
- endif()
- if(Protobuf_INCLUDE_DIRS)
- target_include_directories(
- opentelemetry_proto BEFORE
- PUBLIC "$<BUILD_INTERFACE:${Protobuf_INCLUDE_DIRS}>")
- endif()
- if(WITH_OTLP_GRPC)
- add_library(
- opentelemetry_proto_grpc
- ${OTELCPP_PROTO_TARGET_OPTIONS} ${TRACE_SERVICE_GRPC_PB_CPP_FILE}
- ${LOGS_SERVICE_GRPC_PB_CPP_FILE} ${METRICS_SERVICE_GRPC_PB_CPP_FILE})
- set_target_version(opentelemetry_proto_grpc)
- # Disable include-what-you-use on generated code.
- set_target_properties(opentelemetry_proto_grpc
- PROPERTIES CXX_INCLUDE_WHAT_YOU_USE "")
- list(APPEND OPENTELEMETRY_PROTO_TARGETS opentelemetry_proto_grpc)
- target_link_libraries(opentelemetry_proto_grpc PUBLIC opentelemetry_proto)
- get_target_property(grpc_lib_type gRPC::grpc++ TYPE)
- if(grpc_lib_type STREQUAL "SHARED_LIBRARY")
- target_link_libraries(opentelemetry_proto_grpc PUBLIC gRPC::grpc++)
- endif()
- set_target_properties(opentelemetry_proto_grpc PROPERTIES EXPORT_NAME
- proto_grpc)
- patch_protobuf_targets(opentelemetry_proto_grpc)
- get_target_property(GRPC_INCLUDE_DIRECTORY gRPC::grpc++
- INTERFACE_INCLUDE_DIRECTORIES)
- if(GRPC_INCLUDE_DIRECTORY)
- target_include_directories(
- opentelemetry_proto_grpc BEFORE
- PUBLIC "$<BUILD_INTERFACE:${GRPC_INCLUDE_DIRECTORY}>")
- endif()
- endif()
- if(needs_proto_download)
- add_dependencies(opentelemetry_proto opentelemetry-proto)
- endif()
- set_target_properties(opentelemetry_proto PROPERTIES EXPORT_NAME proto)
- patch_protobuf_targets(opentelemetry_proto)
- if(OPENTELEMETRY_INSTALL)
- install(
- DIRECTORY ${GENERATED_PROTOBUF_PATH}/opentelemetry
- DESTINATION include
- COMPONENT exporters_otlp_common
- FILES_MATCHING
- PATTERN "*.h")
- endif()
- if(TARGET protobuf::libprotobuf)
- target_link_libraries(opentelemetry_proto PUBLIC protobuf::libprotobuf)
- else() # cmake 3.8 or lower
- target_link_libraries(opentelemetry_proto PUBLIC ${Protobuf_LIBRARIES})
- endif()
- # this is needed on some older grcp versions specifically conan recipe for grpc/1.54.3
- if(WITH_OTLP_GRPC)
- if(TARGET absl::synchronization)
- target_link_libraries(opentelemetry_proto_grpc
- PUBLIC "$<BUILD_INTERFACE:absl::synchronization>")
- endif()
- endif()
- if(BUILD_SHARED_LIBS)
- foreach(proto_target ${OPENTELEMETRY_PROTO_TARGETS})
- set_property(TARGET ${proto_target} PROPERTY POSITION_INDEPENDENT_CODE ON)
- endforeach()
- endif()
|