mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-07-16 20:17:37 -04:00
rtla: Add libsubcmd dependency
In preparation for migrating RTLA to libsubcmd, build libsubcmd from the appropriate directory next to the RTLA build proper, and link the resulting object to RTLA. libsubcmd uses str_error_r() and strlcpy() at several places. To support these, also link the respective libraries from tools/lib. For completeness, also add tools/include to include path. This will allow other userspace functions and macros shipped with the kernel to be used in RTLA; perf and bpftool, two other users of libsubcmd, already do that. To prevent a name conflict, rename RTLA's run_command() function to run_tool_command(), and replace RTLA's own container_of implementation with the one in tools/include/linux/container_of.h. Assisted-by: Composer:composer-1 Link: https://lore.kernel.org/r/20260528103254.2990068-2-tglozar@redhat.com Signed-off-by: Tomas Glozar <tglozar@redhat.com>
This commit is contained in:
2
tools/tracing/rtla/.gitignore
vendored
2
tools/tracing/rtla/.gitignore
vendored
@@ -10,3 +10,5 @@ custom_filename.txt
|
||||
osnoise_irq_noise_hist.txt
|
||||
osnoise_trace.txt
|
||||
timerlat_trace.txt
|
||||
libsubcmd/
|
||||
lib/
|
||||
|
||||
@@ -27,6 +27,30 @@ endif
|
||||
RTLA := $(OUTPUT)rtla
|
||||
RTLA_IN := $(RTLA)-in.o
|
||||
|
||||
LIBSUBCMD_DIR = $(srctree)/tools/lib/subcmd/
|
||||
ifneq ($(OUTPUT),)
|
||||
LIBSUBCMD_OUTPUT = $(abspath $(OUTPUT))/libsubcmd
|
||||
else
|
||||
LIBSUBCMD_OUTPUT = $(CURDIR)/libsubcmd
|
||||
endif
|
||||
LIBSUBCMD = $(LIBSUBCMD_OUTPUT)/libsubcmd.a
|
||||
LIBSUBCMD_INCLUDES = $(LIBSUBCMD_OUTPUT)/include
|
||||
LIBSUBCMD_MAKEFLAGS = O=$(LIBSUBCMD_OUTPUT) DESTDIR=$(LIBSUBCMD_OUTPUT) prefix= subdir=
|
||||
|
||||
TOOLS_INCLUDES = -I$(srctree)/tools/include
|
||||
|
||||
ifneq ($(OUTPUT),)
|
||||
LIB_OUTPUT = $(abspath $(OUTPUT))/lib
|
||||
else
|
||||
LIB_OUTPUT = $(CURDIR)/lib
|
||||
endif
|
||||
|
||||
LIB_STRING = $(LIB_OUTPUT)/string.o
|
||||
LIB_STRING_SRC = $(srctree)/tools/lib/string.c
|
||||
|
||||
LIB_STR_ERROR_R = $(LIB_OUTPUT)/str_error_r.o
|
||||
LIB_STR_ERROR_R_SRC = $(srctree)/tools/lib/str_error_r.c
|
||||
|
||||
VERSION := $(shell sh -c "make -sC ../../.. kernelversion | grep -v make")
|
||||
DOCSRC := ../../../Documentation/tools/rtla/
|
||||
|
||||
@@ -66,7 +90,7 @@ ifeq ($(config),1)
|
||||
include Makefile.config
|
||||
endif
|
||||
|
||||
CFLAGS += $(INCLUDES) $(LIB_INCLUDES)
|
||||
CFLAGS += $(INCLUDES) $(LIB_INCLUDES) $(TOOLS_INCLUDES) -I$(LIBSUBCMD_INCLUDES)
|
||||
|
||||
export CFLAGS OUTPUT srctree
|
||||
|
||||
@@ -93,20 +117,48 @@ tests/bpf/bpf_action_map.o: tests/bpf/bpf_action_map.c
|
||||
$(Q)echo "BPF skeleton support is disabled, skipping tests/bpf/bpf_action_map.o"
|
||||
endif
|
||||
|
||||
$(RTLA): $(RTLA_IN)
|
||||
$(QUIET_LINK)$(CC) $(LDFLAGS) -o $(RTLA) $(RTLA_IN) $(EXTLIBS)
|
||||
$(RTLA): $(RTLA_IN) $(LIBSUBCMD) $(LIB_STRING) $(LIB_STR_ERROR_R)
|
||||
$(QUIET_LINK)$(CC) $(LDFLAGS) -o $(RTLA) $(RTLA_IN) $(LIBSUBCMD) $(LIB_STRING) $(LIB_STR_ERROR_R) $(EXTLIBS)
|
||||
|
||||
static: $(RTLA_IN)
|
||||
static: $(RTLA_IN) $(LIBSUBCMD) $(LIB_STRING) $(LIB_STR_ERROR_R)
|
||||
$(eval LDFLAGS += -static)
|
||||
$(QUIET_LINK)$(CC) -static $(LDFLAGS) -o $(RTLA)-static $(RTLA_IN) $(EXTLIBS)
|
||||
$(QUIET_LINK)$(CC) -static $(LDFLAGS) -o $(RTLA)-static $(RTLA_IN) $(LIBSUBCMD) $(LIB_STRING) $(LIB_STR_ERROR_R) $(EXTLIBS)
|
||||
|
||||
rtla.%: fixdep FORCE
|
||||
make -f $(srctree)/tools/build/Makefile.build dir=. $@
|
||||
|
||||
$(RTLA_IN): fixdep FORCE src/timerlat.skel.h
|
||||
$(RTLA_IN): fixdep FORCE src/timerlat.skel.h $(LIBSUBCMD_INCLUDES)
|
||||
make $(build)=rtla
|
||||
|
||||
clean: doc_clean fixdep-clean
|
||||
$(LIBSUBCMD_OUTPUT):
|
||||
$(Q)$(MKDIR) -p $@
|
||||
|
||||
$(LIBSUBCMD_INCLUDES): FORCE | $(LIBSUBCMD_OUTPUT)
|
||||
$(Q)$(MAKE) -C $(LIBSUBCMD_DIR) $(LIBSUBCMD_MAKEFLAGS) \
|
||||
install_headers
|
||||
|
||||
$(LIBSUBCMD): FORCE | $(LIBSUBCMD_OUTPUT)
|
||||
$(Q)$(MAKE) -C $(LIBSUBCMD_DIR) $(LIBSUBCMD_MAKEFLAGS) \
|
||||
$@
|
||||
|
||||
$(LIB_OUTPUT):
|
||||
$(Q)$(MKDIR) -p $@
|
||||
|
||||
$(LIB_STR_ERROR_R): $(LIB_STR_ERROR_R_SRC) | $(LIB_OUTPUT)
|
||||
$(QUIET_CC)$(CC) $(CFLAGS) -c -o $@ $<
|
||||
|
||||
$(LIB_STRING): $(LIB_STRING_SRC) | $(LIB_OUTPUT)
|
||||
$(QUIET_CC)$(CC) $(CFLAGS) -c -o $@ $<
|
||||
|
||||
libsubcmd-clean:
|
||||
$(call QUIET_CLEAN, libsubcmd)
|
||||
$(Q)$(RM) -r -- $(LIBSUBCMD_OUTPUT)
|
||||
|
||||
lib-clean:
|
||||
$(call QUIET_CLEAN, lib)
|
||||
$(Q)$(RM) -r -- $(LIB_OUTPUT)
|
||||
|
||||
clean: doc_clean fixdep-clean libsubcmd-clean lib-clean
|
||||
$(call QUIET_CLEAN, rtla)
|
||||
$(Q)find . -name '*.o' -delete -o -name '\.*.cmd' -delete -o -name '\.*.d' -delete
|
||||
$(Q)rm -f rtla rtla-static fixdep FEATURE-DUMP rtla-*
|
||||
|
||||
@@ -38,12 +38,12 @@ static void rtla_usage(int err)
|
||||
}
|
||||
|
||||
/*
|
||||
* run_command - try to run a rtla tool command
|
||||
* run_tool_command - try to run a rtla tool command
|
||||
*
|
||||
* It returns 0 if it fails. The tool's main will generally not
|
||||
* return as they should call exit().
|
||||
*/
|
||||
int run_command(int argc, char **argv, int start_position)
|
||||
int run_tool_command(int argc, char **argv, int start_position)
|
||||
{
|
||||
if (strcmp(argv[start_position], "osnoise") == 0) {
|
||||
osnoise_main(argc-start_position, &argv[start_position]);
|
||||
@@ -69,7 +69,7 @@ int main(int argc, char *argv[])
|
||||
int retval;
|
||||
|
||||
/* is it an alias? */
|
||||
retval = run_command(argc, argv, 0);
|
||||
retval = run_tool_command(argc, argv, 0);
|
||||
if (retval)
|
||||
exit(0);
|
||||
|
||||
@@ -82,7 +82,7 @@ int main(int argc, char *argv[])
|
||||
rtla_usage(0);
|
||||
}
|
||||
|
||||
retval = run_command(argc, argv, 1);
|
||||
retval = run_tool_command(argc, argv, 1);
|
||||
if (retval)
|
||||
exit(0);
|
||||
|
||||
|
||||
@@ -7,6 +7,8 @@
|
||||
#include <stdbool.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include <linux/container_of.h>
|
||||
|
||||
/*
|
||||
* '18446744073709551615\0'
|
||||
*/
|
||||
@@ -37,10 +39,6 @@ static inline bool str_has_prefix(const char *str, const char *prefix)
|
||||
return strncmp(str, prefix, strlen(prefix)) == 0;
|
||||
}
|
||||
|
||||
#define container_of(ptr, type, member)({ \
|
||||
const typeof(((type *)0)->member) *__mptr = (ptr); \
|
||||
(type *)((char *)__mptr - offsetof(type, member)) ; })
|
||||
|
||||
extern int config_debug;
|
||||
void debug_msg(const char *fmt, ...);
|
||||
void err_msg(const char *fmt, ...);
|
||||
|
||||
Reference in New Issue
Block a user