From: "Yordan Karadzhov (VMware)" <y.karadz@gmail.com>
To: rostedt@goodmis.org
Cc: linux-trace-devel@vger.kernel.org,
"Yordan Karadzhov (VMware)" <y.karadz@gmail.com>
Subject: [PATCH v7 03/32] kernel-shark: Use libtraceevent and libtracefs
Date: Fri, 11 Dec 2020 16:44:42 +0200 [thread overview]
Message-ID: <20201211144511.575346-4-y.karadz@gmail.com> (raw)
In-Reply-To: <20201211144511.575346-1-y.karadz@gmail.com>
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@gmail.com>
---
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
next prev parent reply other threads:[~2020-12-11 15:13 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-12-11 14:44 [PATCH v7 00/32] Start KernelShark v2 transformation Yordan Karadzhov (VMware)
2020-12-11 14:44 ` [PATCH v7 01/32] kernel-shark: Add license information Yordan Karadzhov (VMware)
2020-12-11 14:44 ` [PATCH v7 02/32] kernel-shark: Change the CMake minimum version required Yordan Karadzhov (VMware)
2020-12-11 14:44 ` Yordan Karadzhov (VMware) [this message]
2020-12-11 19:38 ` [PATCH v7 03/32] kernel-shark: Use libtraceevent and libtracefs Steven Rostedt
2020-12-11 14:44 ` [PATCH v7 04/32] kernel-shark: Update README Yordan Karadzhov (VMware)
2020-12-11 14:44 ` [PATCH v7 05/32] kernel-shark: Define build target for JSONC Yordan Karadzhov (VMware)
2020-12-11 14:44 ` [PATCH v7 06/32] kernel-shark: Use only signed types in kshark_entry Yordan Karadzhov (VMware)
2020-12-11 14:44 ` [PATCH v7 07/32] kernel-shark: Add stream_id to kshark_entry Yordan Karadzhov (VMware)
2020-12-11 14:44 ` [PATCH v7 08/32] kernel-shark: Introduce libkshark-hash Yordan Karadzhov (VMware)
2020-12-11 14:44 ` [PATCH v7 09/32] kernel-shark: Introduce Data streams Yordan Karadzhov (VMware)
2020-12-11 14:44 ` [PATCH v7 10/32] kernel-shark: Rename static methods in libkshark Yordan Karadzhov (VMware)
2020-12-11 14:44 ` [PATCH v7 11/32] kernel-shark: Add basic methods for Data streams Yordan Karadzhov (VMware)
2020-12-11 15:07 [PATCH v7 00/32] Start KernelShark v2 transformation Yordan Karadzhov (VMware)
2020-12-11 15:07 ` [PATCH v7 03/32] kernel-shark: Use libtraceevent and libtracefs Yordan Karadzhov (VMware)
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20201211144511.575346-4-y.karadz@gmail.com \
--to=y.karadz@gmail.com \
--cc=linux-trace-devel@vger.kernel.org \
--cc=rostedt@goodmis.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).