From 86fa1f92cfeda0dacf2ea7e1a8c3486ca18b1b01 Mon Sep 17 00:00:00 2001 From: Saleem Abdulrasool Date: Wed, 28 Jun 2017 12:10:24 -0700 Subject: [PATCH] build: add dtrace USDT probe support Add the missing support for dtrace header script support. --- cmake/modules/DTrace.cmake | 26 ++++++++++++++++++++++++++ src/CMakeLists.txt | 10 ++++++++++ 2 files changed, 36 insertions(+) create mode 100644 cmake/modules/DTrace.cmake diff --git a/cmake/modules/DTrace.cmake b/cmake/modules/DTrace.cmake new file mode 100644 index 000000000..20a28ccaa --- /dev/null +++ b/cmake/modules/DTrace.cmake @@ -0,0 +1,26 @@ + +function(dtrace_usdt_probe script) + set(options) + set(single_parameter_options TARGET_NAME OUTPUT_SOURCES) + set(multiple_parameter_options) + + cmake_parse_arguments("" "${options}" "${single_parameter_options}" "${multiple_parameter_options}" ${ARGN}) + + get_filename_component(script_we ${script} NAME_WE) + + add_custom_command(OUTPUT + ${CMAKE_CURRENT_BINARY_DIR}/${script_we}.h + COMMAND + ${dtrace_EXECUTABLE} -h -s ${script} -o ${CMAKE_CURRENT_BINARY_DIR}/${script_we}.h + DEPENDS + ${script}) + add_custom_target(dtrace-usdt-header-${script_we} + DEPENDS + ${CMAKE_CURRENT_BINARY_DIR}/${script_we}.h) + if(_TARGET_NAME) + set(${_TARGET_NAME} dtrace-usdt-header-${script_we} PARENT_SCOPE) + endif() + if(_OUTPUT_SOURCES) + set(${_OUTPUT_SOURCES} ${CMAKE_CURRENT_BINARY_DIR}/${script_we}.h PARENT_SCOPE) + endif() +endfunction() diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index bbc7f461a..ac2b30a9b 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,5 +1,6 @@ include(SwiftSupport) +include(DTrace) add_library(dispatch allocator.c @@ -103,11 +104,20 @@ if(CMAKE_SWIFT_COMPILER) swift/DispatchStubs.cc ${CMAKE_CURRENT_BINARY_DIR}/swiftDispatch.o) endif() +if(dtrace_EXECUTABLE) + dtrace_usdt_probe(${CMAKE_CURRENT_SOURCE_DIR}/provider.d + OUTPUT_SOURCES + dispatch_dtrace_provider_headers) + target_sources(dispatch + PRIVATE + ${dispatch_dtrace_provider_headers}) +endif() target_include_directories(dispatch PRIVATE ${CMAKE_BINARY_DIR} ${CMAKE_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR} + ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_SOURCE_DIR}/private) if(WITH_PTHREAD_WORKQUEUES) target_include_directories(dispatch