diff options
author | Vladislav Vaintroub <vvaintroub@mysql.com> | 2009-12-11 15:51:39 +0100 |
---|---|---|
committer | Vladislav Vaintroub <vvaintroub@mysql.com> | 2009-12-11 15:51:39 +0100 |
commit | 55ccb35ba66e4e9168c412c95ebbb85106db8b2c (patch) | |
tree | fa038e3ac6dc4935686d55c7c0d764d5b0db0b64 /cmake/dtrace.cmake | |
parent | 1ec457961df55720e465a46f5ee340654429bed1 (diff) | |
download | mariadb-git-55ccb35ba66e4e9168c412c95ebbb85106db8b2c.tar.gz |
Introduce a workaround for Solaris' inability to deal with dtrace in static libraries.
Rerun dtrace -G on all objects that can contan dtrace probes (also objects that are
part of static libs) before linking mysqld to produce dtrace_probes_all.o and link
dtrace_probes_all.o with mysqld
This ugly workaround was inspired by handling dtrace using autotools.
Diffstat (limited to 'cmake/dtrace.cmake')
-rw-r--r-- | cmake/dtrace.cmake | 26 |
1 files changed, 20 insertions, 6 deletions
diff --git a/cmake/dtrace.cmake b/cmake/dtrace.cmake index 58fbbba022c..960a7aa4c84 100644 --- a/cmake/dtrace.cmake +++ b/cmake/dtrace.cmake @@ -83,16 +83,30 @@ MACRO (DTRACE_INSTRUMENT target) -DOUTFILE=${outfile} -DDFILE=${CMAKE_BINARY_DIR}/include/probes_mysql.d -DDTRACE_FLAGS=${DTRACE_FLAGS} + -DDIRS=. -P ${CMAKE_SOURCE_DIR}/cmake/dtrace_prelink.cmake WORKING_DIRECTORY ${objdir} ) - GET_TARGET_PROPERTY(target_link_flags ${target} LINK_FLAGS) - IF(NOT target_link_flags) - SET(target_link_flags) + # Add full object path to linker flags + GET_TARGET_PROPERTY(target_type ${target} TYPE) + IF(NOT target_type MATCHES "STATIC") + SET_TARGET_PROPERTIES(${target} PROPERTIES LINK_FLAGS "${outfile}") + ELSE() + # For static library flags, add the object to the library. + # Note: DTrace probes in static libraries are unusable currently + # (see http://opensolaris.org/jive/thread.jspa?messageID=432454) + # but maybe one day this will be fixed. + GET_TARGET_PROPERTY(target_location ${target} LOCATION) + ADD_CUSTOM_COMMAND( + TARGET ${target} POST_BUILD + COMMAND ${CMAKE_AR} r ${target_location} ${outfile} + COMMAND ${CMAKE_RANLIB} ${target_location} + ) + + # Remember the object directory (it is used to workaround lack of static + # library support when linking mysqld) + SET(TARGET_OBJECT_DIRECTORY_${target} ${objdir} CACHE INTERNAL "") ENDIF() - - SET_TARGET_PROPERTIES(${target} PROPERTIES LINK_FLAGS - "${target_link_flags} ${outfile}") ENDIF() ENDIF() ENDMACRO() |