fix segfault: dtrace build on solaris
[m6w6/libmemcached] / CMake / EnableDtrace.cmake
1 function(enable_dtrace_for TARGET PROBES_D PROBES_H)
2 if(HAVE_DTRACE AND NOT CMAKE_CROSSCOMPILING)
3 target_sources(${TARGET} PRIVATE ${PROBES_H})
4 add_custom_command(
5 OUTPUT
6 ${PROBES_H}
7 MAIN_DEPENDENCY
8 ${PROBES_D}
9 COMMAND
10 ${DTRACE_EXECUTABLE}
11 ARGS
12 -x nolibs -h
13 -s ${CMAKE_CURRENT_SOURCE_DIR}/${PROBES_D}
14 -o ${PROBES_H}
15 )
16 if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Linux")
17 add_custom_command(
18 OUTPUT
19 ${TARGET}_probes.o
20 MAIN_DEPENDENCY
21 ${PROBES_H}
22 COMMAND
23 ${DTRACE_EXECUTABLE}
24 ARGS
25 -x nolibs -G
26 -s ${CMAKE_CURRENT_SOURCE_DIR}/${PROBES_D}
27 -o ${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 else() # not Linux
34 set(PROBES_C ${TARGET}_probes.cc)
35 file(GENERATE
36 OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${PROBES_C}
37 CONTENT "#include \"${PROBES_H}\"\n"
38 )
39 add_custom_command(
40 TARGET ${TARGET}
41 PRE_LINK
42 DEPENDS
43 ${PROBES_H}
44 COMMAND
45 rm -f ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${TARGET}.dir/${PROBES_C}.o
46 COMMAND
47 ${DTRACE_EXECUTABLE} -x nolibs -G
48 -s ${CMAKE_CURRENT_SOURCE_DIR}/${PROBES_D}
49 -o ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${TARGET}.dir/${PROBES_C}.o
50 ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${TARGET}.dir/*.o
51 )
52 target_sources(${TARGET} PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/${PROBES_C})
53 endif()
54 endif()
55 endfunction()