libtraceevent and libtracefs are now stand-alone libraries, independent form trace-cmd. Start building and linking KernelShark against those independent libraries. Signed-off-by: Yordan Karadzhov (VMware) <y.karadz@xxxxxxxxx> --- CMakeLists.txt | 8 +++- build/FindTraceCmd.cmake | 53 ++------------------------- build/FindTraceEvent.cmake | 75 ++++++++++++++++++++++++++++++++++++++ build/FindTraceFS.cmake | 75 ++++++++++++++++++++++++++++++++++++++ src/CMakeLists.txt | 4 +- src/libkshark.c | 10 ++--- 6 files changed, 166 insertions(+), 59 deletions(-) create mode 100644 build/FindTraceEvent.cmake create mode 100644 build/FindTraceFS.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index e730398..007f46a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -22,6 +22,11 @@ if (NOT _LIBDIR) endif (NOT _LIBDIR) include(${KS_DIR}/build/FindTraceCmd.cmake) + +set(CMAKE_MODULE_PATH "${KS_DIR}/build") +find_package(TraceEvent REQUIRED) +find_package(TraceFS REQUIRED) + include(${KS_DIR}/build/FindJSONC.cmake) find_package(Doxygen) @@ -80,8 +85,7 @@ endif (CMAKE_BUILD_TYPE MATCHES Package) include_directories(${KS_DIR}/src/ ${KS_DIR}/build/src/ ${JSONC_INCLUDE_DIR} - ${TRACECMD_INCLUDE_DIR} - ${TRACEFS_INCLUDE_DIR}) + ${TRACECMD_INCLUDE_DIR}) message("") message(STATUS "C flags : " ${CMAKE_C_FLAGS}) diff --git a/build/FindTraceCmd.cmake b/build/FindTraceCmd.cmake index 02f4529..5df2789 100644 --- a/build/FindTraceCmd.cmake +++ b/build/FindTraceCmd.cmake @@ -32,30 +32,15 @@ find_path(TRACECMD_INCLUDE_DIR NAMES trace-cmd/trace-cmd.h PATHS $ENV{TRACE_CMD}/include/ NO_DEFAULT_PATH) -find_path(TRACEFS_INCLUDE_DIR NAMES tracefs/tracefs.h - PATHS $ENV{TRACE_CMD}/include/ - NO_DEFAULT_PATH) - find_library(TRACECMD_LIBRARY NAMES trace-cmd/libtracecmd.a PATHS $ENV{TRACE_CMD}/lib/ NO_DEFAULT_PATH) -find_library(TRACEFS_LIBRARY NAMES tracefs/libtracefs.a - PATHS $ENV{TRACE_CMD}/lib/ - NO_DEFAULT_PATH) - -find_library(TRACEEVENT_LIBRARY NAMES traceevent/libtraceevent.a - PATHS $ENV{TRACE_CMD}/lib/ - NO_DEFAULT_PATH) - # If not found, search in the default system paths. Note that if the previous # search was successful "find_path" will do nothing this time. -find_program(TRACECMD_EXECUTABLE NAMES trace-cmd) -find_path(TRACECMD_INCLUDE_DIR NAMES trace-cmd/trace-cmd.h) -find_path(TRACEFS_INCLUDE_DIR NAMES tracefs/tracefs.h) -find_library(TRACECMD_LIBRARY NAMES trace-cmd/libtracecmd.so) -find_library(TRACEFS_LIBRARY NAMES tracefs/libtracefs.so) -find_library(TRACEEVENT_LIBRARY NAMES traceevent/libtraceevent.so) +find_program(TRACECMD_EXECUTABLE NAMES trace-cmd) +find_path(TRACECMD_INCLUDE_DIR NAMES trace-cmd/trace-cmd.h) +find_library(TRACECMD_LIBRARY NAMES trace-cmd/libtracecmd.so) IF (TRACECMD_INCLUDE_DIR AND TRACECMD_LIBRARY) @@ -72,35 +57,3 @@ ELSE (TRACECMD_FOUND) MESSAGE(FATAL_ERROR "\nCould not find trace-cmd!\n") ENDIF (TRACECMD_FOUND) - -IF (TRACEFS_INCLUDE_DIR AND TRACEFS_LIBRARY) - - SET(TRACEFS_FOUND TRUE) - -ENDIF (TRACEFS_INCLUDE_DIR AND TRACEFS_LIBRARY) - -IF (TRACEFS_FOUND) - - MESSAGE(STATUS "Found tracefs: ${TRACEFS_LIBRARY}") - -ELSE (TRACEFS_FOUND) - - MESSAGE(FATAL_ERROR "\nCould not find tracefs!\n") - -ENDIF (TRACEFS_FOUND) - -IF (TRACEEVENT_LIBRARY) - - SET(TRACEEVENT_FOUND TRUE) - -ENDIF (TRACEEVENT_LIBRARY) - -IF (TRACEEVENT_FOUND) - - MESSAGE(STATUS "Found traceevent: ${TRACEEVENT_LIBRARY}") - -ELSE (TRACEEVENT_FOUND) - - MESSAGE(FATAL_ERROR "\nCould not find libtraceevent!\n") - -ENDIF (TRACEEVENT_FOUND) diff --git a/build/FindTraceEvent.cmake b/build/FindTraceEvent.cmake new file mode 100644 index 0000000..8525697 --- /dev/null +++ b/build/FindTraceEvent.cmake @@ -0,0 +1,75 @@ + +#[=======================================================================[.rst: +FindTraceevent +------- + +Finds the traceevent library. + +Imported Targets +^^^^^^^^^^^^^^^^ + +This module defines the :prop_tgt:`IMPORTED` targets: + +``trace::event`` + Defined if the system has libtraceevent. + +Result Variables +^^^^^^^^^^^^^^^^ + +``TraceEvent_FOUND`` + True if the system has the libtraceevent library. +``TraceEvent_VERSION`` + The version of the libtraceevent library which was found. +``TraceEvent_INCLUDE_DIRS`` + Include directories needed to use libtraceevent. +``TraceEvent_LIBRARIES`` + Libraries needed to link to libtraceevent. + +Cache Variables +^^^^^^^^^^^^^^^ + +``TraceEvent_INCLUDE_DIR`` + The directory containing ``event-parse.h``. +``TraceEvent_LIBRARY`` + The path to the traceevent library. + +#]=======================================================================] + +find_package(PkgConfig QUIET) +pkg_check_modules(PC_TraceEvent QUIET libtraceevent) + +set(TraceEvent_VERSION ${PC_TraceEvent_VERSION}) +set(TraceEvent_DEFINITIONS ${PC_TraceEvent_CFLAGS_OTHER}) + +find_path(TraceEvent_INCLUDE_DIR NAMES traceevent/event-parse.h + HINTS ${PC_TraceEvent_INCLUDE_DIRS} + ${PC_TraceEvent_INCLUDEDIR}) + +find_library(TraceEvent_LIBRARY NAMES traceevent libtraceevent + HINTS ${PC_TraceEvent_LIBDIR} + ${PC_TraceEventLIBRARY_DIRS}) + +mark_as_advanced(TraceEvent_INCLUDE_DIR TraceEvent_LIBRARY) + +include(FindPackageHandleStandardArgs) + +find_package_handle_standard_args(TraceEvent DEFAULT_MSG + TraceEvent_LIBRARY TraceEvent_INCLUDE_DIR) + +if(TraceEvent_FOUND) + + set(TraceEvent_LIBRARIES ${TraceEvent_LIBRARY}) + set(TraceEvent_INCLUDE_DIRS ${TraceEvent_INCLUDE_DIR}) + + if(NOT TARGET trace::event) + add_library(trace::event UNKNOWN IMPORTED) + + set_target_properties(trace::event + PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${TraceEvent_INCLUDE_DIRS}" + INTERFACE_COMPILE_DEFINITIONS "${TraceEvent_DEFINITIONS}" + IMPORTED_LINK_INTERFACE_LANGUAGES "C" + IMPORTED_LOCATION "${TraceEvent_LIBRARIES}") + endif() + +endif() diff --git a/build/FindTraceFS.cmake b/build/FindTraceFS.cmake new file mode 100644 index 0000000..982a61d --- /dev/null +++ b/build/FindTraceFS.cmake @@ -0,0 +1,75 @@ + +#[=======================================================================[.rst: +FindTraceFS +------- + +Finds the tracefs library. + +Imported Targets +^^^^^^^^^^^^^^^^ + +This module defines the :prop_tgt:`IMPORTED` targets: + +``trace::fs`` + Defined if the system has libtracefs. + +Result Variables +^^^^^^^^^^^^^^^^ + +``TraceFS_FOUND`` + True if the system has the libtracefs library. +``TraceFS_VERSION`` + The version of the libtracefs library which was found. +``TraceFS_INCLUDE_DIRS`` + Include directories needed to use libtracefs. +``TraceFS_LIBRARIES`` + Libraries needed to link to libtracefs. + +Cache Variables +^^^^^^^^^^^^^^^ + +``TraceFS_INCLUDE_DIR`` + The directory containing ``tracefs.h``. +``TraceFS_LIBRARY`` + The path to the tracefs library. + +#]=======================================================================] + +find_package(PkgConfig QUIET) +pkg_check_modules(PC_TraceFS QUIET libtracefs) + +set(TraceFS_VERSION ${PC_TraceFS_VERSION}) +set(TraceFS_DEFINITIONS ${PC_TraceFS_CFLAGS_OTHER}) + +find_path(TraceFS_INCLUDE_DIR NAMES tracefs/tracefs.h + HINTS ${PC_TraceFS_INCLUDE_DIRS} + ${PC_TraceFS_INCLUDEDIR}) + +find_library(TraceFS_LIBRARY NAMES tracefs libtracefs + HINTS ${PC_TraceFS_LIBDIR} + ${PC_TraceFSLIBRARY_DIRS}) + +mark_as_advanced(TraceFS_INCLUDE_DIR TraceFS_LIBRARY) + +include(FindPackageHandleStandardArgs) + +find_package_handle_standard_args(TraceFS DEFAULT_MSG + TraceFS_LIBRARY TraceFS_INCLUDE_DIR) + +if(TraceFS_FOUND) + + set(TraceFS_LIBRARIES ${TraceFS_LIBRARY}) + set(TraceFS_INCLUDE_DIRS ${TraceFS_INCLUDE_DIR}) + + if(NOT TARGET trace::fs) + add_library(trace::fs UNKNOWN IMPORTED) + + set_target_properties(trace::fs + PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${TraceFS_INCLUDE_DIRS}" + INTERFACE_COMPILE_DEFINITIONS "${TraceFS_DEFINITIONS}" + IMPORTED_LINK_INTERFACE_LANGUAGES "C" + IMPORTED_LOCATION "${TraceFS_LIBRARIES}") + endif() + +endif() diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 457c100..7474e9d 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -8,8 +8,8 @@ add_library(kshark SHARED libkshark.c libkshark-collection.c) target_link_libraries(kshark ${TRACECMD_LIBRARY} - ${TRACEFS_LIBRARY} - ${TRACEEVENT_LIBRARY} + trace::fs + trace::event ${JSONC_LIBRARY} ${CMAKE_DL_LIBS}) diff --git a/src/libkshark.c b/src/libkshark.c index 52aacd3..a14d3c5 100644 --- a/src/libkshark.c +++ b/src/libkshark.c @@ -141,7 +141,7 @@ bool kshark_open(struct kshark_context *kshark_ctx, const char *file) kshark_free_task_list(kshark_ctx); - handle = tracecmd_open(file); + handle = tracecmd_open_head(file); if (!handle) return false; @@ -696,7 +696,7 @@ static ssize_t get_records(struct kshark_context *kshark_ctx, int pid; int cpu; - n_cpus = tracecmd_cpus(kshark_ctx->handle); + n_cpus = tep_get_cpus(kshark_ctx->pevent); cpu_list = calloc(n_cpus, sizeof(*cpu_list)); if (!cpu_list) return -ENOMEM; @@ -867,7 +867,7 @@ ssize_t kshark_load_data_entries(struct kshark_context *kshark_ctx, if (total < 0) goto fail; - n_cpus = tracecmd_cpus(kshark_ctx->handle); + n_cpus = tep_get_cpus(kshark_ctx->pevent); rows = calloc(total, sizeof(struct kshark_entry *)); if (!rows) @@ -923,7 +923,7 @@ ssize_t kshark_load_data_records(struct kshark_context *kshark_ctx, if (total < 0) goto fail; - n_cpus = tracecmd_cpus(kshark_ctx->handle); + n_cpus = tep_get_cpus(kshark_ctx->pevent); rows = calloc(total, sizeof(struct tep_record *)); if (!rows) @@ -1047,7 +1047,7 @@ size_t kshark_load_data_matrix(struct kshark_context *kshark_ctx, if (total < 0) goto fail; - n_cpus = tracecmd_cpus(kshark_ctx->handle); + n_cpus = tep_get_cpus(kshark_ctx->pevent); status = data_matrix_alloc(total, offset_array, cpu_array, -- 2.25.1