| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222 |
- # Copyright The OpenTelemetry Authors
- # SPDX-License-Identifier: Apache-2.0
- macro(check_append_cxx_compiler_flag OUTPUT_VAR)
- foreach(CHECK_FLAG ${ARGN})
- check_cxx_compiler_flag(${CHECK_FLAG}
- "check_cxx_compiler_flag_${CHECK_FLAG}")
- if(check_cxx_compiler_flag_${CHECK_FLAG})
- list(APPEND ${OUTPUT_VAR} ${CHECK_FLAG})
- endif()
- endforeach()
- endmacro()
- if(NOT PATCH_PROTOBUF_SOURCES_OPTIONS_SET)
- if(MSVC)
- unset(PATCH_PROTOBUF_SOURCES_OPTIONS CACHE)
- set(PATCH_PROTOBUF_SOURCES_OPTIONS
- /wd4244
- /wd4251
- /wd4267
- /wd4309
- /wd4668
- /wd4946
- /wd6001
- /wd6244
- /wd6246)
- if(MSVC_VERSION GREATER_EQUAL 1922)
- # see
- # https://docs.microsoft.com/en-us/cpp/overview/cpp-conformance-improvements?view=vs-2019#improvements_162
- # for detail
- list(APPEND PATCH_PROTOBUF_SOURCES_OPTIONS /wd5054)
- endif()
- if(MSVC_VERSION GREATER_EQUAL 1925)
- list(APPEND PATCH_PROTOBUF_SOURCES_OPTIONS /wd4996)
- endif()
- if(MSVC_VERSION LESS 1910)
- list(APPEND PATCH_PROTOBUF_SOURCES_OPTIONS /wd4800)
- endif()
- else()
- unset(PATCH_PROTOBUF_SOURCES_OPTIONS CACHE)
- include(CheckCXXCompilerFlag)
- check_append_cxx_compiler_flag(
- PATCH_PROTOBUF_SOURCES_OPTIONS -Wno-type-limits
- -Wno-deprecated-declarations -Wno-unused-parameter)
- endif()
- set(PATCH_PROTOBUF_SOURCES_OPTIONS_SET TRUE)
- if(PATCH_PROTOBUF_SOURCES_OPTIONS)
- set(PATCH_PROTOBUF_SOURCES_OPTIONS
- ${PATCH_PROTOBUF_SOURCES_OPTIONS}
- CACHE INTERNAL
- "Options to disable warning of generated protobuf sources" FORCE)
- endif()
- endif()
- function(patch_protobuf_sources)
- if(PATCH_PROTOBUF_SOURCES_OPTIONS)
- foreach(PROTO_SRC ${ARGN})
- unset(PROTO_SRC_OPTIONS)
- get_source_file_property(PROTO_SRC_OPTIONS ${PROTO_SRC} COMPILE_OPTIONS)
- if(PROTO_SRC_OPTIONS)
- list(APPEND PROTO_SRC_OPTIONS ${PATCH_PROTOBUF_SOURCES_OPTIONS})
- else()
- set(PROTO_SRC_OPTIONS ${PATCH_PROTOBUF_SOURCES_OPTIONS})
- endif()
- set_source_files_properties(
- ${PROTO_SRC} PROPERTIES COMPILE_OPTIONS "${PROTO_SRC_OPTIONS}")
- endforeach()
- unset(PROTO_SRC)
- unset(PROTO_SRC_OPTIONS)
- endif()
- endfunction()
- function(patch_protobuf_targets)
- if(PATCH_PROTOBUF_SOURCES_OPTIONS)
- foreach(PROTO_TARGET ${ARGN})
- unset(PROTO_TARGET_OPTIONS)
- get_target_property(PROTO_TARGET_OPTIONS ${PROTO_TARGET} COMPILE_OPTIONS)
- if(PROTO_TARGET_OPTIONS)
- list(APPEND PROTO_TARGET_OPTIONS ${PATCH_PROTOBUF_SOURCES_OPTIONS})
- else()
- set(PROTO_TARGET_OPTIONS ${PATCH_PROTOBUF_SOURCES_OPTIONS})
- endif()
- set_target_properties(
- ${PROTO_TARGET} PROPERTIES COMPILE_OPTIONS "${PROTO_TARGET_OPTIONS}")
- endforeach()
- unset(PROTO_TARGET)
- unset(PROTO_TARGET_OPTIONS)
- endif()
- endfunction()
- function(project_build_tools_get_imported_location OUTPUT_VAR_NAME TARGET_NAME)
- # The following if statement was added to support cmake versions < 3.19
- get_target_property(TARGET_TYPE ${TARGET_NAME} TYPE)
- if(TARGET_TYPE STREQUAL "INTERFACE_LIBRARY")
- # For interface libraries, do not attempt to retrieve imported location.
- set(${OUTPUT_VAR_NAME} "" PARENT_SCOPE)
- return()
- endif()
- if(CMAKE_BUILD_TYPE)
- string(TOUPPER "IMPORTED_LOCATION_${CMAKE_BUILD_TYPE}"
- TRY_SPECIFY_IMPORTED_LOCATION)
- get_target_property(${OUTPUT_VAR_NAME} ${TARGET_NAME}
- ${TRY_SPECIFY_IMPORTED_LOCATION})
- endif()
- if(NOT ${OUTPUT_VAR_NAME})
- get_target_property(${OUTPUT_VAR_NAME} ${TARGET_NAME} IMPORTED_LOCATION)
- endif()
- if(NOT ${OUTPUT_VAR_NAME})
- get_target_property(
- project_build_tools_get_imported_location_IMPORTED_CONFIGURATIONS
- ${TARGET_NAME} IMPORTED_CONFIGURATIONS)
- foreach(
- project_build_tools_get_imported_location_IMPORTED_CONFIGURATION IN
- LISTS project_build_tools_get_imported_location_IMPORTED_CONFIGURATIONS)
- get_target_property(
- ${OUTPUT_VAR_NAME}
- ${TARGET_NAME}
- "IMPORTED_LOCATION_${project_build_tools_get_imported_location_IMPORTED_CONFIGURATION}"
- )
- if(${OUTPUT_VAR_NAME})
- break()
- endif()
- endforeach()
- endif()
- if(${OUTPUT_VAR_NAME})
- set(${OUTPUT_VAR_NAME}
- ${${OUTPUT_VAR_NAME}}
- PARENT_SCOPE)
- endif()
- endfunction()
- #[[
- If we build third party packages with a different CONFIG setting from building
- otel-cpp, cmake may not find a suitable file in imported targets (#705, #1359)
- when linking. But on some platforms, different CONFIG settings can be used when
- these CONFIG settings have the same ABI. For example, on Linux, we can build
- gRPC and protobuf with -DCMAKE_BUILD_TYPE=Release, but build otel-cpp with
- -DCMAKE_BUILD_TYPE=Debug and link these libraries together.
- The properties of imported targets can be found here:
- https://cmake.org/cmake/help/latest/manual/cmake-properties.7.html#properties-on-targets
- ]]
- function(project_build_tools_patch_default_imported_config)
- set(PATCH_VARS
- IMPORTED_IMPLIB
- IMPORTED_LIBNAME
- IMPORTED_LINK_DEPENDENT_LIBRARIES
- IMPORTED_LINK_INTERFACE_LANGUAGES
- IMPORTED_LINK_INTERFACE_LIBRARIES
- IMPORTED_LINK_INTERFACE_MULTIPLICITY
- IMPORTED_LOCATION
- IMPORTED_NO_SONAME
- IMPORTED_OBJECTS
- IMPORTED_SONAME)
- foreach(TARGET_NAME ${ARGN})
- if(TARGET ${TARGET_NAME})
- get_target_property(IS_IMPORTED_TARGET ${TARGET_NAME} IMPORTED)
- if(NOT IS_IMPORTED_TARGET)
- continue()
- endif()
- get_target_property(IS_ALIAS_TARGET ${TARGET_NAME} ALIASED_TARGET)
- if(IS_ALIAS_TARGET)
- continue()
- endif()
- if(CMAKE_VERSION VERSION_LESS "3.19.0")
- get_target_property(TARGET_TYPE_NAME ${TARGET_NAME} TYPE)
- if(TARGET_TYPE_NAME STREQUAL "INTERFACE_LIBRARY")
- continue()
- endif()
- endif()
- get_target_property(DO_NOT_OVERWRITE ${TARGET_NAME} IMPORTED_LOCATION)
- if(DO_NOT_OVERWRITE)
- continue()
- endif()
- # MSVC's STL and debug level must match the target, so we can only move
- # out IMPORTED_LOCATION_NOCONFIG
- if(MSVC)
- set(PATCH_IMPORTED_CONFIGURATION "NOCONFIG")
- else()
- get_target_property(PATCH_IMPORTED_CONFIGURATION ${TARGET_NAME}
- IMPORTED_CONFIGURATIONS)
- endif()
- if(NOT PATCH_IMPORTED_CONFIGURATION)
- continue()
- endif()
- get_target_property(PATCH_TARGET_LOCATION ${TARGET_NAME}
- "IMPORTED_LOCATION_${PATCH_IMPORTED_CONFIGURATION}")
- if(NOT PATCH_TARGET_LOCATION)
- continue()
- endif()
- foreach(PATCH_IMPORTED_KEY IN LISTS PATCH_VARS)
- get_target_property(
- PATCH_IMPORTED_VALUE ${TARGET_NAME}
- "${PATCH_IMPORTED_KEY}_${PATCH_IMPORTED_CONFIGURATION}")
- if(PATCH_IMPORTED_VALUE)
- set_target_properties(
- ${TARGET_NAME} PROPERTIES "${PATCH_IMPORTED_KEY}"
- "${PATCH_IMPORTED_VALUE}")
- if(CMAKE_BUILD_TYPE STREQUAL "Debug")
- message(
- STATUS
- "Patch: ${TARGET_NAME} ${PATCH_IMPORTED_KEY} will use ${PATCH_IMPORTED_KEY}_${PATCH_IMPORTED_CONFIGURATION}(\"${PATCH_IMPORTED_VALUE}\") by default."
- )
- endif()
- endif()
- endforeach()
- endif()
- endforeach()
- endfunction()
|