mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-07-23 02:47:31 -04:00
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>
173 lines
4.9 KiB
Makefile
173 lines
4.9 KiB
Makefile
# SPDX-License-Identifier: GPL-2.0-only
|
|
|
|
ifeq ($(srctree),)
|
|
srctree := $(patsubst %/,%,$(dir $(CURDIR)))
|
|
srctree := $(patsubst %/,%,$(dir $(srctree)))
|
|
srctree := $(patsubst %/,%,$(dir $(srctree)))
|
|
endif
|
|
|
|
include $(srctree)/tools/scripts/Makefile.include
|
|
|
|
# O is an alias for OUTPUT
|
|
OUTPUT := $(O)
|
|
|
|
ifeq ($(OUTPUT),)
|
|
OUTPUT := $(CURDIR)
|
|
else
|
|
# subdir is used by the ../Makefile in $(call descend,)
|
|
ifneq ($(subdir),)
|
|
OUTPUT := $(OUTPUT)/$(subdir)
|
|
endif
|
|
endif
|
|
|
|
ifneq ($(patsubst %/,,$(lastword $(OUTPUT))),)
|
|
OUTPUT := $(OUTPUT)/
|
|
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/
|
|
|
|
FEATURE_TESTS := libtraceevent
|
|
FEATURE_TESTS += libtracefs
|
|
FEATURE_TESTS += libcpupower
|
|
FEATURE_TESTS += libcheck
|
|
FEATURE_TESTS += libbpf
|
|
FEATURE_TESTS += clang-bpf-co-re
|
|
FEATURE_TESTS += bpftool-skeletons
|
|
FEATURE_DISPLAY := libtraceevent
|
|
FEATURE_DISPLAY += libtracefs
|
|
FEATURE_DISPLAY += libcpupower
|
|
FEATURE_DISPLAY += libcheck
|
|
FEATURE_DISPLAY += libbpf
|
|
FEATURE_DISPLAY += clang-bpf-co-re
|
|
FEATURE_DISPLAY += bpftool-skeletons
|
|
|
|
all: $(RTLA)
|
|
|
|
include $(srctree)/tools/build/Makefile.include
|
|
include Makefile.rtla
|
|
include tests/unit/Makefile.unit
|
|
|
|
# check for dependencies only on required targets
|
|
NON_CONFIG_TARGETS := clean install tarball doc doc_clean doc_install
|
|
|
|
config := 1
|
|
ifdef MAKECMDGOALS
|
|
ifeq ($(filter-out $(NON_CONFIG_TARGETS),$(MAKECMDGOALS)),)
|
|
config := 0
|
|
endif
|
|
endif
|
|
|
|
ifeq ($(config),1)
|
|
include $(srctree)/tools/build/Makefile.feature
|
|
include Makefile.config
|
|
endif
|
|
|
|
CFLAGS += $(INCLUDES) $(LIB_INCLUDES) $(TOOLS_INCLUDES) -I$(LIBSUBCMD_INCLUDES)
|
|
|
|
export CFLAGS OUTPUT srctree
|
|
|
|
ifeq ($(BUILD_BPF_SKEL),1)
|
|
src/timerlat.bpf.o: src/timerlat.bpf.c
|
|
$(QUIET_CLANG)$(CLANG) -g -O2 -target bpf -c $(filter %.c,$^) -o $@
|
|
|
|
src/timerlat.skel.h: src/timerlat.bpf.o
|
|
$(QUIET_GENSKEL)$(SYSTEM_BPFTOOL) gen skeleton $< > $@
|
|
|
|
example/timerlat_bpf_action.o: example/timerlat_bpf_action.c
|
|
$(QUIET_CLANG)$(CLANG) -g -O2 -target bpf -c $(filter %.c,$^) -o $@
|
|
|
|
tests/bpf/bpf_action_map.o: tests/bpf/bpf_action_map.c
|
|
$(QUIET_CLANG)$(CLANG) -g -O2 -target bpf -c $(filter %.c,$^) -o $@
|
|
else
|
|
src/timerlat.skel.h:
|
|
$(Q)echo '/* BPF skeleton is disabled */' > src/timerlat.skel.h
|
|
|
|
example/timerlat_bpf_action.o: example/timerlat_bpf_action.c
|
|
$(Q)echo "BPF skeleton support is disabled, skipping example/timerlat_bpf_action.o"
|
|
|
|
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) $(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) $(LIBSUBCMD) $(LIB_STRING) $(LIB_STR_ERROR_R)
|
|
$(eval LDFLAGS += -static)
|
|
$(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 $(LIBSUBCMD_INCLUDES)
|
|
make $(build)=rtla
|
|
|
|
$(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-*
|
|
$(Q)rm -rf feature
|
|
$(Q)rm -f src/timerlat.bpf.o src/timerlat.skel.h example/timerlat_bpf_action.o
|
|
$(Q)rm -f $(UNIT_TESTS)
|
|
|
|
check: $(RTLA) tests/bpf/bpf_action_map.o
|
|
RTLA=$(RTLA) BPFTOOL=$(SYSTEM_BPFTOOL) prove -o -f -v tests/
|
|
examples: example/timerlat_bpf_action.o
|
|
.PHONY: FORCE clean check
|