prepare v1.1.4
[awesomized/libmemcached] / CMake / EnableDtrace.cmake
1 function(enable_dtrace_for TARGET PROBES_D PROBES_H)
2 if(HAVE_DTRACE AND NOT CMAKE_CROSSCOMPILING)
3 add_custom_command(
4 OUTPUT
5 ${CMAKE_CURRENT_BINARY_DIR}/${PROBES_H}
6 MAIN_DEPENDENCY
7 ${PROBES_D}
8 COMMAND
9 ${DTRACE_EXECUTABLE}
10 ARGS
11 -x nolibs -h
12 -s ${CMAKE_CURRENT_SOURCE_DIR}/${PROBES_D}
13 -o ${CMAKE_CURRENT_BINARY_DIR}/${PROBES_H}
14 )
15 target_sources(${TARGET} PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/${PROBES_H})
16 if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Linux")
17 add_custom_command(
18 OUTPUT
19 ${CMAKE_CURRENT_BINARY_DIR}/${TARGET}_probes.o
20 MAIN_DEPENDENCY
21 ${CMAKE_CURRENT_BINARY_DIR}/${PROBES_H}
22 COMMAND
23 ${DTRACE_EXECUTABLE}
24 ARGS
25 -x nolibs -G
26 -s ${CMAKE_CURRENT_SOURCE_DIR}/${PROBES_D}
27 -o ${CMAKE_CURRENT_BINARY_DIR}/${TARGET}_probes.o
28 )
29 target_sources(${TARGET} PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/${TARGET}_probes.o)
30 set_source_files_properties(${TARGET}_probes.o PROPERTIES
31 GENERATED true
32 EXTERNAL_OBJECT true)
33 return()
34 endif()
35 cmake_host_system_information(RESULT OS_RELEASE QUERY OS_RELEASE)
36 if(NOT (CMAKE_HOST_SYSTEM_NAME STREQUAL Darwin AND OS_RELEASE VERSION_GREATER_EQUAL 11))
37 set(PROBES_C ${TARGET}_probes.cc)
38 file(GENERATE
39 OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${PROBES_C}
40 CONTENT "#include \"${PROBES_H}\"\n"
41 )
42 add_custom_command(
43 TARGET ${TARGET}
44 PRE_LINK
45 DEPENDS
46 ${CMAKE_CURRENT_BINARY_DIR}/${PROBES_H}
47 COMMAND
48 rm -f ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${TARGET}.dir/${PROBES_C}.o
49 COMMAND
50 ${DTRACE_EXECUTABLE} -x nolibs -G
51 -s ${CMAKE_CURRENT_SOURCE_DIR}/${PROBES_D}
52 -o ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${TARGET}.dir/${PROBES_C}.o
53 ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${TARGET}.dir/*.o
54 )
55 target_sources(${TARGET} PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/${PROBES_C})
56 endif()
57 endif()
58 endfunction()