@@ -33,6 +33,13 @@ OPT_FLAGS	?= $(if $(RELEASE),-O2,-O0)
3333LIBELF_CFLAGS 	:= $(shell  $(PKG_CONFIG )  libelf --cflags 2>/dev/null) 
3434LIBELF_LIBS 	:= $(shell  $(PKG_CONFIG )  libelf --libs 2>/dev/null || echo -lelf) 
3535
36+ ifeq  ($(srctree ) ,)
37+ srctree  := $(patsubst  % /,% ,$(dir  $(CURDIR ) ) ) 
38+ srctree  := $(patsubst  % /,% ,$(dir  $(srctree ) ) ) 
39+ srctree  := $(patsubst  % /,% ,$(dir  $(srctree ) ) ) 
40+ srctree  := $(patsubst  % /,% ,$(dir  $(srctree ) ) ) 
41+ endif 
42+ 
3643CFLAGS  += -g $(OPT_FLAGS )  -rdynamic					\ 
3744	  -Wall -Werror -fno-omit-frame-pointer				\ 
3845	  $(GENFLAGS )  $(SAN_CFLAGS )  $(LIBELF_CFLAGS ) 			\ 
@@ -60,6 +67,9 @@ progs/timer_crash.c-CFLAGS := -fno-strict-aliasing
6067progs/test_global_func9.c-CFLAGS  := -fno-strict-aliasing
6168progs/verifier_nocsr.c-CFLAGS  := -fno-strict-aliasing
6269
70+ #  Some utility functions use LLVM libraries
71+ jit_disasm_helpers.c-CFLAGS  = $(LLVM_CFLAGS ) 
72+ 
6373ifneq  ($(LLVM ) ,)
6474#  Silence some warnings when compiled with clang
6575CFLAGS  += -Wno-unused-command-line-argument
@@ -168,6 +178,31 @@ endef
168178
169179include  ../lib.mk
170180
181+ NON_CHECK_FEAT_TARGETS  := clean docs-clean
182+ CHECK_FEAT  := $(filter-out  $(NON_CHECK_FEAT_TARGETS ) ,$(or  $(MAKECMDGOALS ) , "none") ) 
183+ ifneq  ($(CHECK_FEAT ) ,)
184+ FEATURE_USER  := .selftests
185+ FEATURE_TESTS  := llvm
186+ FEATURE_DISPLAY  := $(FEATURE_TESTS ) 
187+ 
188+ #  Makefile.feature expects OUTPUT to end with a slash
189+ $(let OUTPUT,$(OUTPUT)/,\
190+ 	$(eval include ../../../build/Makefile.feature))
191+ endif 
192+ 
193+ ifeq  ($(feature-llvm ) ,1)
194+   LLVM_CFLAGS   += -DHAVE_LLVM_SUPPORT
195+   LLVM_CONFIG_LIB_COMPONENTS  := mcdisassembler all-targets
196+   #  both llvm-config and lib.mk add -D_GNU_SOURCE, which ends up as conflict
197+   LLVM_CFLAGS   += $(filter-out  -D_GNU_SOURCE,$(shell  $(LLVM_CONFIG )  --cflags) ) 
198+   LLVM_LDLIBS   += $(shell  $(LLVM_CONFIG )  --libs $(LLVM_CONFIG_LIB_COMPONENTS ) ) 
199+   ifeq ($(shell $(LLVM_CONFIG) --shared-mode),static)
200+     LLVM_LDLIBS  += $(shell  $(LLVM_CONFIG )  --system-libs $(LLVM_CONFIG_LIB_COMPONENTS ) ) 
201+     LLVM_LDLIBS  += -lstdc++
202+   endif
203+   LLVM_LDFLAGS  += $(shell  $(LLVM_CONFIG )  --ldflags) 
204+ endif 
205+ 
171206SCRATCH_DIR  := $(OUTPUT ) /tools
172207BUILD_DIR  := $(SCRATCH_DIR ) /build
173208INCLUDE_DIR  := $(SCRATCH_DIR ) /include
@@ -612,6 +647,10 @@ ifeq ($(filter clean docs-clean,$(MAKECMDGOALS)),)
612647include  $(wildcard  $(TRUNNER_TEST_OBJS   
613648endif 
614649
650+ #  add per extra obj CFGLAGS definitions
651+ $(foreach  N,$(patsubst  $(TRUNNER_OUTPUT ) /% .o,% ,$(TRUNNER_EXTRA_OBJS ) ) ,	\ 
652+ 	$(eval  $(TRUNNER_OUTPUT ) /$(N ) .o: CFLAGS += $($(N ) .c-CFLAGS) ) ) 
653+ 
615654$(TRUNNER_EXTRA_OBJS ) : $(TRUNNER_OUTPUT ) /%.o:				\
616655		       %.c						\
617656		       $(TRUNNER_EXTRA_HDRS ) 				\
@@ -628,6 +667,9 @@ ifneq ($2:$(OUTPUT),:$(shell pwd))
628667	$(Q)rsync -aq $$^ $(TRUNNER_OUTPUT)/
629668endif 
630669
670+ $(OUTPUT ) /$(TRUNNER_BINARY ) : LDLIBS += $$(LLVM_LDLIBS ) 
671+ $(OUTPUT ) /$(TRUNNER_BINARY ) : LDFLAGS += $$(LLVM_LDFLAGS ) 
672+ 
631673#  some X.test.o files have runtime dependencies on Y.bpf.o files
632674$(OUTPUT ) /$(TRUNNER_BINARY ) : | $(TRUNNER_BPF_OBJS ) 
633675
@@ -637,7 +679,7 @@ $(OUTPUT)/$(TRUNNER_BINARY): $(TRUNNER_TEST_OBJS)			\
637679			     $(TRUNNER_BPFTOOL ) 				\
638680			     | $(TRUNNER_BINARY ) -extras
639681	$$(call  msg,BINARY,,$$@ ) 
640- 	$(Q )$$(CC )  $$(CFLAGS )  $$(filter  % .a % .o,$$^ )  $$(LDLIBS )  -o $$@ 
682+ 	$(Q )$$(CC )  $$(CFLAGS )  $$(filter  % .a % .o,$$^ )  $$(LDLIBS )  $$( LDFLAGS )   -o $$@ 
641683	$(Q )$(RESOLVE_BTFIDS )  --btf $(TRUNNER_OUTPUT ) /btf_data.bpf.o $$@ 
642684	$(Q ) ln -sf $(if  $2,..,.) /tools/build/bpftool/$(USE_BOOTSTRAP ) bpftool \
643685		   $(OUTPUT ) /$(if  $2,$2/) bpftool
@@ -656,6 +698,7 @@ TRUNNER_EXTRA_SOURCES := test_progs.c		\
656698			 cap_helpers.c		\ 
657699			 unpriv_helpers.c 	\ 
658700			 netlink_helpers.c	\ 
701+ 			 jit_disasm_helpers.c	\ 
659702			 test_loader.c		\ 
660703			 xsk.c			\ 
661704			 disasm.c		\ 
@@ -798,7 +841,8 @@ EXTRA_CLEAN := $(SCRATCH_DIR) $(HOST_SCRATCH_DIR)			\
798841	$(addprefix  $(OUTPUT ) /,* .o * .d * .skel.h * .lskel.h * .subskel.h	\ 
799842			       no_alu32 cpuv4 bpf_gcc bpf_testmod.ko	\ 
800843			       bpf_test_no_cfi.ko			\ 
801- 			       liburandom_read.so) 
844+ 			       liburandom_read.so) 			\ 
845+ 	$(OUTPUT ) /FEATURE-DUMP.selftests
802846
803847.PHONY : docs docs-clean
804848
0 commit comments