aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYordan Karadzhov (VMware) <y.karadz@gmail.com>2020-12-11 17:07:27 +0200
committerSteven Rostedt (VMware) <rostedt@goodmis.org>2020-12-21 12:25:13 -0500
commit8b7cab926760cfce6066895cc1fc8872c048539c (patch)
tree73e8c1fd5d5efb2489e74ba1d2c2a7047f33ab77
parent76b3f0b8440c553694f47fe88f4da8a033f5c2b9 (diff)
downloadkernel-shark-8b7cab926760cfce6066895cc1fc8872c048539c.tar.gz
kernel-shark: Use libtraceevent and libtracefs
libtraceevent and libtracefs are now stand-alone libraries, independent form trace-cmd. Start building and linking KernelShark against those independent libraries. Link: https://lore.kernel.org/linux-trace-devel/20201211150756.577366-4-y.karadz@gmail.com Signed-off-by: Yordan Karadzhov (VMware) <y.karadz@gmail.com> Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
-rw-r--r--CMakeLists.txt8
-rw-r--r--build/FindTraceCmd.cmake53
-rw-r--r--build/FindTraceEvent.cmake75
-rw-r--r--build/FindTraceFS.cmake75
-rw-r--r--src/CMakeLists.txt4
-rw-r--r--src/libkshark.c10
6 files changed, 166 insertions, 59 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index e7303986..007f46a6 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 02f45298..5df2789f 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 00000000..8525697b
--- /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 00000000..982a61d6
--- /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 457c1007..7474e9db 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 52aacd30..a14d3c5b 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,