cpp/cmake/OpenCensusHelpers.cmake (85 lines of code) (raw):

# Copyright 2018, OpenCensus Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Prepends opencensus_ to all deps that aren't in a :: namespace. function(prepend_opencensus OUT DEPS) set(_DEPS "") foreach(dep ${DEPS}) if("${dep}" MATCHES "::") list(APPEND _DEPS "${dep}") else() list(APPEND _DEPS "opencensus_${dep}") endif() endforeach() set(${OUT} ${_DEPS} PARENT_SCOPE) endfunction() # Helper function like bazel's cc_test. Usage: # # opencensus_test(trace_some_test internal/some_test.cc dep1 dep2...) function(opencensus_test NAME SRC) if(BUILD_TESTING) set(_NAME "opencensus_${NAME}") add_executable(${_NAME} ${SRC}) prepend_opencensus(DEPS "${ARGN}") target_link_libraries(${_NAME} "${DEPS}" gmock gtest_main) add_test(NAME ${_NAME} COMMAND ${_NAME}) endif() endfunction() # Helper function like bazel's cc_benchmark. Usage: # # opencensus_benchmark(trace_some_benchmark internal/some_benchmark.cc dep1 # dep2...) function(opencensus_benchmark NAME SRC) if(BUILD_TESTING) set(_NAME "opencensus_${NAME}") add_executable(${_NAME} ${SRC}) prepend_opencensus(DEPS "${ARGN}") target_link_libraries(${_NAME} "${DEPS}" benchmark) endif() endfunction() # Helper function like bazel's cc_library. Libraries are namespaced as # opencensus_* and public libraries are also aliased as opencensus-cpp::*. function(opencensus_lib NAME) cmake_parse_arguments(ARG "PUBLIC" "" "SRCS;DEPS" ${ARGN}) set(_NAME "opencensus_${NAME}") prepend_opencensus(ARG_DEPS "${ARG_DEPS}") if(ARG_SRCS) add_library(${_NAME} ${ARG_SRCS}) target_link_libraries(${_NAME} PUBLIC ${ARG_DEPS} opencensus_api) else() add_library(${_NAME} INTERFACE) target_link_libraries(${_NAME} INTERFACE ${ARG_DEPS} opencensus_api) endif() if(ARG_PUBLIC) add_library(opencensus::${NAME} ALIAS ${_NAME}) endif() endfunction() # Helper function for fuzzing. Usage: # # opencensus_fuzzer(trace_some_fuzzer internal/some_fuzzer.cc dep1 dep2...) function(opencensus_fuzzer NAME SRC) if(FUZZER) set(_NAME "opencensus_${NAME}") add_executable(${_NAME} ${SRC}) prepend_opencensus(DEPS "${ARGN}") target_link_libraries(${_NAME} "${DEPS}" ${FUZZER}) target_compile_options(${_NAME} PRIVATE ${FUZZER}) endif() endfunction()