find_package(ZLIB REQUIRED)
find_package(BZip2 REQUIRED)
+#option for LTTng
+option(WITH_LTTNG "LTTng tracing is enabled" ON)
+if(${WITH_LTTNG})
+ find_package(lttng-ust)
+ set(WITH_LTTNG ${LTTNG_FOUND})
+endif(${WITH_LTTNG})
+
# Now create a useable config.h
configure_file(
${PROJECT_SOURCE_DIR}/src/include/config-h.in.cmake
--- /dev/null
+# - Find LTTng
+# Find the Linux Trace Toolkit - next generation with associated includes path.
+# See http://lttng.org/
+#
+# This module accepts the following optional variables:
+# LTTNG_PATH_HINT = A hint on LTTNG install path.
+#
+# This module defines the following variables:
+# LTTNG_FOUND = Was LTTng found or not?
+# LTTNG_EXECUTABLE = The path to lttng command
+# LTTNG_LIBRARIES = The list of libraries to link to when using LTTng
+# LTTNG_INCLUDE_DIR = The path to LTTng include directory
+#
+# On can set LTTNG_PATH_HINT before using find_package(LTTng) and the
+# module with use the PATH as a hint to find LTTng.
+#
+# The hint can be given on the command line too:
+# cmake -DLTTNG_PATH_HINT=/DATA/ERIC/LTTng /path/to/source
+
+if(LTTNG_PATH_HINT)
+ message(STATUS "FindLTTng: using PATH HINT: ${LTTNG_PATH_HINT}")
+else()
+ set(LTTNG_PATH_HINT)
+endif()
+
+#One can add his/her own builtin PATH.
+#FILE(TO_CMAKE_PATH "/DATA/ERIC/LTTng" MYPATH)
+#list(APPEND LTTNG_PATH_HINT ${MYPATH})
+
+find_path(LTTNG_INCLUDE_DIR
+ NAMES lttng/tracepoint.h
+ PATHS ${LTTNG_PATH_HINT}
+ PATH_SUFFIXES include
+ DOC "The LTTng include headers")
+
+find_path(LTTNG_LIBRARY_DIR
+ NAMES liblttng-ust.so
+ PATHS ${LTTNG_PATH_HINT}
+ PATH_SUFFIXES lib lib64
+ DOC "The LTTng libraries")
+
+find_library(LTTNG_UST_LIBRARY lttng-ust PATHS ${LTTNG_LIBRARY_DIR})
+find_library(URCU_LIBRARY urcu-bp PATHS ${LTTNG_LIBRARY_DIR})
+find_library(UUID_LIBRARY uuid)
+
+set(LTTNG_LIBRARIES ${LTTNG_UST_LIBRARY} ${URCU_LIBRARY} ${UUID_LIBRARY})
+
+message(STATUS "Looking for lttng executable...")
+set(LTTNG_NAMES "lttng;lttng-ctl")
+# FIND_PROGRAM twice using NO_DEFAULT_PATH on first shot
+find_program(LTTNG_EXECUTABLE
+ NAMES ${LTTNG_NAMES}
+ PATHS ${LTTNG_PATH_HINT}/bin
+ NO_DEFAULT_PATH
+ DOC "The LTTNG command line tool")
+find_program(LEX_PROGRAM
+ NAMES ${LTTNG_NAMES}
+ PATHS ${LTTNG_PATH_HINT}/bin
+ DOC "The LTTNG command line tool")
+
+# handle the QUIETLY and REQUIRED arguments and set PRELUDE_FOUND to TRUE if
+# all listed variables are TRUE
+include(FindPackageHandleStandardArgs)
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(LTTNG
+ REQUIRED_VARS LTTNG_INCLUDE_DIR LTTNG_LIBRARY_DIR)
+# VERSION FPHSA options not handled by CMake version < 2.8.2)
+# VERSION_VAR)
+mark_as_advanced(LTTNG_INCLUDE_DIR)
+mark_as_advanced(LTTNG_LIBRARY_DIR)
+
add_library(common_utf8 STATIC common/utf8.c)
-target_link_libraries( common json_spirit common_utf8 erasure_code rt uuid ${CRYPTO_LIBS} ${Boost_LIBRARIES} ${BLKID_LIBRARIES})
+target_link_libraries(common json_spirit common_utf8 erasure_code rt uuid ${CRYPTO_LIBS} ${Boost_LIBRARIES} ${BLKID_LIBRARIES})
+
+if(${WITH_LTTNG})
+ add_subdirectory(tracing)
+endif(${WITH_LTTNG})
set(libglobal_srcs
global/global_init.cc
$<TARGET_OBJECTS:global_common_objs>)
target_link_libraries(global common ${CMAKE_THREAD_LIBS_INIT} ${CRYPTO_LIBS}
${EXTRALIBS})
+if(${WITH_LTTNG})
+ target_link_libraries(global lttng-ust dl)
+endif(${WITH_LTTNG})
if(${ENABLE_SHARED})
set_target_properties(global PROPERTIES
OUTPUT_NAME ceph-global VERSION "1.0.0" SOVERSION "1")
target_link_libraries(librados PRIVATE osdc osd os global common cls_lock_client
${BLKID_LIBRARIES}
${CRYPTO_LIBS} ${EXTRALIBS} ${ALLOC_LIBS})
+if(${WITH_LTTNG})
+ target_link_libraries(librados PUBLIC librados_tp)
+endif(${WITH_LTTNG})
if(${ENABLE_SHARED})
set_target_properties(librados PROPERTIES OUTPUT_NAME rados VERSION 2.0.0
SOVERSION 2)
if(${HAVE_LIBAIO})
target_link_libraries(os aio)
endif(${HAVE_LIBAIO})
+if(${WITH_LTTNG})
+ target_link_libraries(os libos_tp)
+endif(${WITH_LTTNG})
target_link_libraries(os kv leveldb snappy rocksdb)
set(cls_references_files objclass/class_api.cc)
add_library(osd STATIC ${osd_srcs} $<TARGET_OBJECTS:osd_mon_objs>
$<TARGET_OBJECTS:cls_references_objs>)
target_link_libraries(osd dl leveldb)
+if(${WITH_LTTNG})
+ target_link_libraries(osd libosd_tp)
+endif(${WITH_LTTNG})
set(ceph_osd_srcs
ceph_osd.cc
target_link_libraries(librbd PRIVATE librados common journal
cls_lock_client cls_rbd_client cls_journal_client
${CMAKE_DL_LIBS})
+ if(${WITH_LTTNG})
+ target_link_libraries(librbd PUBLIC librbd_tp)
+ endif(${WITH_LTTNG})
if(${ENABLE_SHARED})
set_target_properties(librbd PROPERTIES VERSION "1.0.0" SOVERSION "1"
OUTPUT_NAME rbd)
template <const Traits &traits>
static void initialize(CephContext *cct) {
-#if WITH_LTTNG
+#ifdef WITH_LTTNG
TypedSingleton<traits> *singleton;
cct->lookup_or_create_singleton_object(singleton, traits.library);
#endif
/* Defined if XIO */
#cmakedefine HAVE_XIO
+/* Defined if LTTNG */
+#cmakedefine WITH_LTTNG 1
+
/* Defined if you have librocksdb enabled */
#cmakedefine HAVE_LIBROCKSDB
#include "include/rados/rados_types.hpp"
#ifdef WITH_LTTNG
-#include "tracing/osd.h" // ??
+#include "tracing/osd.h"
#else
#define tracepoint(...)
#endif
add_dependencies(check unittest_librbd)
set_target_properties(unittest_librbd PROPERTIES COMPILE_FLAGS
${UNITTEST_CXX_FLAGS})
+if(${WITH_LTTNG})
+ target_link_libraries(unittest_librbd librbd_tp)
+endif(${WITH_LTTNG})
target_link_libraries(unittest_librbd
librbd
librados
--- /dev/null
+add_custom_target(lttng_gen_tp
+ ALL
+ COMMAND
+ lttng-gen-tp tracing/librados.tp -o tracing/librados.h &&
+ lttng-gen-tp tracing/librbd.tp -o tracing/librbd.h &&
+ lttng-gen-tp tracing/objectstore.tp -o tracing/objectstore.h &&
+ lttng-gen-tp tracing/oprequest.tp -o tracing/oprequest.h &&
+ lttng-gen-tp tracing/osd.tp -o tracing/osd.h &&
+ lttng-gen-tp tracing/pg.tp -o tracing/pg.h
+ WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/src
+ COMMENT "lttng-gen-tp generated .h files")
+
+add_library(libosd_tp STATIC
+ oprequest.c
+ osd.c
+ pg.c)
+target_link_libraries(libosd_tp lttng-ust dl)
+target_include_directories(libosd_tp PUBLIC ${CMAKE_SOURCE_DIR}/src/tracing)
+add_dependencies(libosd_tp lttng_gen_tp)
+set_target_properties(libosd_tp PROPERTIES OUTPUT_NAME osd_tp VERSION 1.0.0 SOVERSION 1)
+
+add_library(librados_tp STATIC librados.c)
+target_link_libraries(librados_tp lttng-ust dl)
+target_include_directories(librados_tp PUBLIC ${CMAKE_SOURCE_DIR}/src/tracing)
+add_dependencies(librados_tp lttng_gen_tp)
+set_target_properties(librados_tp PROPERTIES OUTPUT_NAME rados_tp VERSION 2.0.0 SOVERSION 2)
+
+add_library(librbd_tp STATIC librbd.c)
+target_link_libraries(librbd_tp lttng-ust dl)
+target_include_directories(librbd_tp PUBLIC ${CMAKE_SOURCE_DIR}/src/tracing)
+add_dependencies(librbd_tp lttng_gen_tp)
+set_target_properties(librbd_tp PROPERTIES OUTPUT_NAME rbd_tp VERSION 1.0.0 SOVERSION 1)
+
+add_library(libos_tp STATIC objectstore.c)
+target_link_libraries(libos_tp lttng-ust dl)
+target_include_directories(libos_tp PUBLIC ${CMAKE_SOURCE_DIR}/src/tracing)
+add_dependencies(libos_tp lttng_gen_tp)
+set_target_properties(libos_tp PROPERTIES OUTPUT_NAME os_tp VERSION 1.0.0 SOVERSION 1)