mirror of
https://gitlab.com/redhat/centos-stream/src/kernel/centos-stream-9.git
synced 2026-09-09 12:05:30 +08:00
JIRA: https://issues.redhat.com/browse/RHEL-77358 commit 814d051ebed40b27285ab3c5e2454bd01a0f9631 Author: Tomas Glozar <tglozar@redhat.com> Date: Wed Mar 26 01:40:18 2025 +0100 tools/build: Use SYSTEM_BPFTOOL for system bpftool The feature test for system bpftool uses BPFTOOL as the variable to set its path, defaulting to just "bpftool" if not set by the user. This conflicts with selftests and a few other utilities, which expect BPFTOOL to be set to the in-tree bpftool path by default. For example, bpftool selftests fail to build: $ make -C tools/testing/selftests/bpf/ make: Entering directory '/home/tglozar/dev/linux/tools/testing/selftests/bpf' make: *** No rule to make target 'bpftool', needed by '/home/tglozar/dev/linux/tools/testing/selftests/bpf/tools/include/vmlinux.h'. Stop. make: Leaving directory '/home/tglozar/dev/linux/tools/testing/selftests/bpf' Fix the problem by renaming the variable used for system bpftool from BPFTOOL to SYSTEM_BPFTOOL, so that the new usage does not conflict with the existing one of BPFTOOL. Cc: John Kacur <jkacur@redhat.com> Cc: Luis Goncalves <lgoncalv@redhat.com> Link: https://lore.kernel.org/20250326004018.248357-1-tglozar@redhat.com Fixes: 8a635c3856dd ("tools/build: Add bpftool-skeletons feature test") Closes: https://lore.kernel.org/linux-kernel/5df6968a-2e5f-468e-b457-fc201535dd4c@linux.ibm.com/ Reported-by: Venkat Rao Bagalkote <venkat88@linux.ibm.com> Tested-by: Venkat Rao Bagalkote <venkat88@linux.ibm.com> Suggested-by: Quentin Monnet <qmo@kernel.org> Acked-by: Quentin Monnet <qmo@kernel.org> Signed-off-by: Tomas Glozar <tglozar@redhat.com> Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org> Signed-off-by: Tomas Glozar <tglozar@redhat.com>
189 lines
5.8 KiB
Makefile
189 lines
5.8 KiB
Makefile
# SPDX-License-Identifier: GPL-2.0
|
|
ifneq ($(O),)
|
|
ifeq ($(origin O), command line)
|
|
$(if $(shell cd $(PWD); test -d $(O) || echo $(O)),$(error O=$(O) does not exist),)
|
|
ABSOLUTE_O := $(shell cd $(PWD); cd $(O) ; pwd)
|
|
OUTPUT := $(ABSOLUTE_O)/$(if $(subdir),$(subdir)/)
|
|
COMMAND_O := O=$(ABSOLUTE_O)
|
|
ifeq ($(objtree),)
|
|
objtree := $(O)
|
|
endif
|
|
endif
|
|
endif
|
|
|
|
# check that the output directory actually exists
|
|
ifneq ($(OUTPUT),)
|
|
OUTDIR := $(shell cd $(OUTPUT) && pwd)
|
|
$(if $(OUTDIR),, $(error output directory "$(OUTPUT)" does not exist))
|
|
endif
|
|
|
|
#
|
|
# Include saner warnings here, which can catch bugs:
|
|
#
|
|
EXTRA_WARNINGS := -Wbad-function-cast
|
|
EXTRA_WARNINGS += -Wdeclaration-after-statement
|
|
EXTRA_WARNINGS += -Wformat-security
|
|
EXTRA_WARNINGS += -Wformat-y2k
|
|
EXTRA_WARNINGS += -Winit-self
|
|
EXTRA_WARNINGS += -Wmissing-declarations
|
|
EXTRA_WARNINGS += -Wmissing-prototypes
|
|
EXTRA_WARNINGS += -Wnested-externs
|
|
EXTRA_WARNINGS += -Wno-system-headers
|
|
EXTRA_WARNINGS += -Wold-style-definition
|
|
EXTRA_WARNINGS += -Wpacked
|
|
EXTRA_WARNINGS += -Wredundant-decls
|
|
EXTRA_WARNINGS += -Wstrict-prototypes
|
|
EXTRA_WARNINGS += -Wswitch-default
|
|
EXTRA_WARNINGS += -Wswitch-enum
|
|
EXTRA_WARNINGS += -Wundef
|
|
EXTRA_WARNINGS += -Wwrite-strings
|
|
EXTRA_WARNINGS += -Wformat
|
|
EXTRA_WARNINGS += -Wno-type-limits
|
|
|
|
# Makefiles suck: This macro sets a default value of $(2) for the
|
|
# variable named by $(1), unless the variable has been set by
|
|
# environment or command line. This is necessary for CC and AR
|
|
# because make sets default values, so the simpler ?= approach
|
|
# won't work as expected.
|
|
define allow-override
|
|
$(if $(or $(findstring environment,$(origin $(1))),\
|
|
$(findstring command line,$(origin $(1)))),,\
|
|
$(eval $(1) = $(2)))
|
|
endef
|
|
|
|
ifneq ($(LLVM),)
|
|
$(call allow-override,CC,clang)
|
|
$(call allow-override,AR,llvm-ar)
|
|
$(call allow-override,LD,ld.lld)
|
|
$(call allow-override,CXX,clang++)
|
|
$(call allow-override,STRIP,llvm-strip)
|
|
else
|
|
# Allow setting various cross-compile vars or setting CROSS_COMPILE as a prefix.
|
|
$(call allow-override,CC,$(CROSS_COMPILE)gcc)
|
|
$(call allow-override,AR,$(CROSS_COMPILE)ar)
|
|
$(call allow-override,LD,$(CROSS_COMPILE)ld)
|
|
$(call allow-override,CXX,$(CROSS_COMPILE)g++)
|
|
$(call allow-override,STRIP,$(CROSS_COMPILE)strip)
|
|
endif
|
|
|
|
CC_NO_CLANG := $(shell $(CC) -dM -E -x c /dev/null | grep -Fq "__clang__"; echo $$?)
|
|
|
|
ifneq ($(LLVM),)
|
|
HOSTAR ?= llvm-ar
|
|
HOSTCC ?= clang
|
|
HOSTLD ?= ld.lld
|
|
else
|
|
HOSTAR ?= ar
|
|
HOSTCC ?= gcc
|
|
HOSTLD ?= ld
|
|
endif
|
|
|
|
# Some tools require Clang, LLC and/or LLVM utils
|
|
CLANG ?= clang
|
|
LLC ?= llc
|
|
LLVM_CONFIG ?= llvm-config
|
|
LLVM_OBJCOPY ?= llvm-objcopy
|
|
LLVM_STRIP ?= llvm-strip
|
|
|
|
# Some tools require bpftool
|
|
SYSTEM_BPFTOOL ?= bpftool
|
|
|
|
ifeq ($(CC_NO_CLANG), 1)
|
|
EXTRA_WARNINGS += -Wstrict-aliasing=3
|
|
|
|
else ifneq ($(CROSS_COMPILE),)
|
|
# Allow userspace to override CLANG_CROSS_FLAGS to specify their own
|
|
# sysroots and flags or to avoid the GCC call in pure Clang builds.
|
|
ifeq ($(CLANG_CROSS_FLAGS),)
|
|
CLANG_CROSS_FLAGS := --target=$(notdir $(CROSS_COMPILE:%-=%))
|
|
GCC_TOOLCHAIN_DIR := $(dir $(shell which $(CROSS_COMPILE)gcc))
|
|
ifneq ($(GCC_TOOLCHAIN_DIR),)
|
|
CLANG_CROSS_FLAGS += --prefix=$(GCC_TOOLCHAIN_DIR)$(notdir $(CROSS_COMPILE))
|
|
CLANG_CROSS_FLAGS += --sysroot=$(shell $(CROSS_COMPILE)gcc -print-sysroot)
|
|
CLANG_CROSS_FLAGS += --gcc-toolchain=$(realpath $(GCC_TOOLCHAIN_DIR)/..)
|
|
endif # GCC_TOOLCHAIN_DIR
|
|
endif # CLANG_CROSS_FLAGS
|
|
CFLAGS += $(CLANG_CROSS_FLAGS)
|
|
AFLAGS += $(CLANG_CROSS_FLAGS)
|
|
else
|
|
CLANG_CROSS_FLAGS :=
|
|
endif # CROSS_COMPILE
|
|
|
|
# Hack to avoid type-punned warnings on old systems such as RHEL5:
|
|
# We should be changing CFLAGS and checking gcc version, but this
|
|
# will do for now and keep the above -Wstrict-aliasing=3 in place
|
|
# in newer systems.
|
|
# Needed for the __raw_cmpxchg in tools/arch/x86/include/asm/cmpxchg.h
|
|
#
|
|
# See https://lore.kernel.org/lkml/9a8748490611281710g78402fbeh8ff7fcc162dbcbca@mail.gmail.com/
|
|
# and https://gcc.gnu.org/gcc-4.8/changes.html,
|
|
# that takes into account Linus's comments (search for Wshadow) for the reasoning about
|
|
# -Wshadow not being interesting before gcc 4.8.
|
|
|
|
ifneq ($(filter 3.%,$(MAKE_VERSION)),) # make-3
|
|
EXTRA_WARNINGS += -fno-strict-aliasing
|
|
EXTRA_WARNINGS += -Wno-shadow
|
|
else
|
|
EXTRA_WARNINGS += -Wshadow
|
|
endif
|
|
|
|
ifneq ($(findstring $(MAKEFLAGS), w),w)
|
|
PRINT_DIR = --no-print-directory
|
|
else
|
|
NO_SUBDIR = :
|
|
endif
|
|
|
|
# If the user is running make -s (silent mode), suppress echoing of commands
|
|
# make-4.0 (and later) keep single letter options in the 1st word of MAKEFLAGS.
|
|
ifeq ($(filter 3.%,$(MAKE_VERSION)),)
|
|
short-opts := $(firstword -$(MAKEFLAGS))
|
|
else
|
|
short-opts := $(filter-out --%,$(MAKEFLAGS))
|
|
endif
|
|
|
|
ifneq ($(findstring s,$(short-opts)),)
|
|
silent=1
|
|
endif
|
|
|
|
#
|
|
# Define a callable command for descending to a new directory
|
|
#
|
|
# Call by doing: $(call descend,directory[,target])
|
|
#
|
|
descend = \
|
|
+mkdir -p $(OUTPUT)$(1) && \
|
|
$(MAKE) $(COMMAND_O) subdir=$(if $(subdir),$(subdir)/$(1),$(1)) $(PRINT_DIR) -C $(1) $(2)
|
|
|
|
QUIET_SUBDIR0 = +$(MAKE) $(COMMAND_O) -C # space to separate -C and subdir
|
|
QUIET_SUBDIR1 =
|
|
|
|
ifneq ($(silent),1)
|
|
ifneq ($(V),1)
|
|
QUIET_CC = @echo ' CC '$@;
|
|
QUIET_CC_FPIC = @echo ' CC FPIC '$@;
|
|
QUIET_CLANG = @echo ' CLANG '$@;
|
|
QUIET_AR = @echo ' AR '$@;
|
|
QUIET_LINK = @echo ' LINK '$@;
|
|
QUIET_MKDIR = @echo ' MKDIR '$@;
|
|
QUIET_GEN = @echo ' GEN '$@;
|
|
QUIET_SUBDIR0 = +@subdir=
|
|
QUIET_SUBDIR1 = ;$(NO_SUBDIR) \
|
|
echo ' SUBDIR '$$subdir; \
|
|
$(MAKE) $(PRINT_DIR) -C $$subdir
|
|
QUIET_FLEX = @echo ' FLEX '$@;
|
|
QUIET_BISON = @echo ' BISON '$@;
|
|
QUIET_GENSKEL = @echo ' GENSKEL '$@;
|
|
|
|
descend = \
|
|
+@echo ' DESCEND '$(1); \
|
|
mkdir -p $(OUTPUT)$(1) && \
|
|
$(MAKE) $(COMMAND_O) subdir=$(if $(subdir),$(subdir)/$(1),$(1)) $(PRINT_DIR) -C $(1) $(2)
|
|
|
|
QUIET_CLEAN = @printf ' CLEAN %s\n' $1;
|
|
QUIET_INSTALL = @printf ' INSTALL %s\n' $1;
|
|
QUIET_UNINST = @printf ' UNINST %s\n' $1;
|
|
endif
|
|
endif
|
|
|
|
pound := \#
|