33include ../../../build/Build.include
44include ../../../scripts/Makefile.arch
55include ../../../scripts/Makefile.include
6- include ../lib.mk
76
8- ifneq ($(LLVM ) ,)
9- ifneq ($(filter % /,$(LLVM ) ) ,)
10- LLVM_PREFIX := $(LLVM )
11- else ifneq ($(filter -%,$(LLVM)),)
12- LLVM_SUFFIX := $(LLVM )
13- endif
14-
15- CC := $(LLVM_PREFIX ) clang$(LLVM_SUFFIX ) $(CLANG_FLAGS ) -fintegrated-as
16- else
17- CC := gcc
18- endif # LLVM
7+ TEST_GEN_PROGS := runner
198
20- ifneq ( $( CROSS_COMPILE ) ,)
21- $(error CROSS_COMPILE not supported for scx selftests)
22- endif # CROSS_COMPILE
9+ # override lib.mk's default rules
10+ OVERRIDE_TARGETS := 1
11+ include ../lib.mk
2312
2413CURDIR := $(abspath .)
2514REPOROOT := $(abspath ../../../..)
@@ -34,18 +23,23 @@ GENHDR := $(GENDIR)/autoconf.h
3423SCXTOOLSDIR := $(TOOLSDIR ) /sched_ext
3524SCXTOOLSINCDIR := $(TOOLSDIR ) /sched_ext/include
3625
37- OUTPUT_DIR := $(CURDIR ) /build
26+ OUTPUT_DIR := $(OUTPUT ) /build
3827OBJ_DIR := $(OUTPUT_DIR ) /obj
3928INCLUDE_DIR := $(OUTPUT_DIR ) /include
4029BPFOBJ_DIR := $(OBJ_DIR ) /libbpf
4130SCXOBJ_DIR := $(OBJ_DIR ) /sched_ext
4231BPFOBJ := $(BPFOBJ_DIR ) /libbpf.a
4332LIBBPF_OUTPUT := $(OBJ_DIR ) /libbpf/libbpf.a
44- DEFAULT_BPFTOOL := $(OUTPUT_DIR ) /sbin/bpftool
45- HOST_BUILD_DIR := $(OBJ_DIR )
46- HOST_OUTPUT_DIR := $(OUTPUT_DIR )
4733
48- VMLINUX_BTF_PATHS ?= ../../../../vmlinux \
34+ DEFAULT_BPFTOOL := $(OUTPUT_DIR ) /host/sbin/bpftool
35+ HOST_OBJ_DIR := $(OBJ_DIR ) /host/bpftool
36+ HOST_LIBBPF_OUTPUT := $(OBJ_DIR ) /host/libbpf/
37+ HOST_LIBBPF_DESTDIR := $(OUTPUT_DIR ) /host/
38+ HOST_DESTDIR := $(OUTPUT_DIR ) /host/
39+
40+ VMLINUX_BTF_PATHS ?= $(if $(O ) ,$(O ) /vmlinux) \
41+ $(if $(KBUILD_OUTPUT ) ,$(KBUILD_OUTPUT ) /vmlinux) \
42+ ../../../../vmlinux \
4943 /sys/kernel/btf/vmlinux \
5044 /boot/vmlinux-$(shell uname -r)
5145VMLINUX_BTF ?= $(abspath $(firstword $(wildcard $(VMLINUX_BTF_PATHS ) ) ) )
@@ -80,25 +74,31 @@ IS_LITTLE_ENDIAN = $(shell $(CC) -dM -E - </dev/null | \
8074# Use '-idirafter': Don't interfere with include mechanics except where the
8175# build would have failed anyways.
8276define get_sys_includes
83- $(shell $(1 ) -v -E - </dev/null 2>&1 \
77+ $(shell $(1 ) $( 2 ) -v -E - </dev/null 2>&1 \
8478 | sed -n '/<...> search starts here:/,/End of search list./{ s| \(/.* \) |-idirafter \1|p }') \
85- $(shell $(1 ) -dM -E - </dev/null | grep '__riscv_xlen ' | awk '{printf("-D__riscv_xlen=% d -D__BITS_PER_LONG=% d", $$3, $$3) }')
79+ $(shell $(1 ) $( 2 ) -dM -E - </dev/null | grep '__riscv_xlen ' | awk '{printf("-D__riscv_xlen=% d -D__BITS_PER_LONG=% d", $$3, $$3) }')
8680endef
8781
82+ ifneq ($(CROSS_COMPILE ) ,)
83+ CLANG_TARGET_ARCH = --target=$(notdir $(CROSS_COMPILE:%-=% ) )
84+ endif
85+
86+ CLANG_SYS_INCLUDES = $(call get_sys_includes,$(CLANG ) ,$(CLANG_TARGET_ARCH ) )
87+
8888BPF_CFLAGS = -g -D__TARGET_ARCH_$(SRCARCH ) \
8989 $(if $(IS_LITTLE_ENDIAN ) ,-mlittle-endian,-mbig-endian) \
9090 -I$(CURDIR ) /include -I$(CURDIR ) /include/bpf-compat \
9191 -I$(INCLUDE_DIR ) -I$(APIDIR ) -I$(SCXTOOLSINCDIR ) \
9292 -I$(REPOROOT ) /include \
93- $(call get_sys_includes, $( CLANG ) ) \
93+ $(CLANG_SYS_INCLUDES ) \
9494 -Wall -Wno-compare-distinct-pointer-types \
9595 -Wno-incompatible-function-pointer-types \
9696 -O2 -mcpu=v3
9797
9898# sort removes libbpf duplicates when not cross-building
9999MAKE_DIRS := $(sort $(OBJ_DIR ) /libbpf $(OBJ_DIR ) /libbpf \
100100 $(OBJ_DIR ) /bpftool $(OBJ_DIR ) /resolve_btfids \
101- $(INCLUDE_DIR ) $(SCXOBJ_DIR ) )
101+ $(HOST_OBJ_DIR ) $( INCLUDE_DIR ) $(SCXOBJ_DIR ) )
102102
103103$(MAKE_DIRS ) :
104104 $(call msg,MKDIR,,$@ )
@@ -108,18 +108,19 @@ $(BPFOBJ): $(wildcard $(BPFDIR)/*.[ch] $(BPFDIR)/Makefile) \
108108 $(APIDIR ) /linux/bpf.h \
109109 | $(OBJ_DIR ) /libbpf
110110 $(Q )$(MAKE ) $(submake_extras ) -C $(BPFDIR ) OUTPUT=$(OBJ_DIR ) /libbpf/ \
111+ ARCH=$(ARCH ) CC=" $( CC) " CROSS_COMPILE=$(CROSS_COMPILE ) \
111112 EXTRA_CFLAGS=' -g -O0 -fPIC' \
112113 DESTDIR=$(OUTPUT_DIR ) prefix= all install_headers
113114
114115$(DEFAULT_BPFTOOL ) : $(wildcard $(BPFTOOLDIR ) /* .[ch] $(BPFTOOLDIR ) /Makefile) \
115- $(LIBBPF_OUTPUT ) | $(OBJ_DIR ) /bpftool
116+ $(LIBBPF_OUTPUT ) | $(HOST_OBJ_DIR )
116117 $(Q )$(MAKE ) $(submake_extras ) -C $(BPFTOOLDIR ) \
117118 ARCH= CROSS_COMPILE= CC=$(HOSTCC ) LD=$(HOSTLD ) \
118119 EXTRA_CFLAGS=' -g -O0' \
119- OUTPUT=$(OBJ_DIR ) /bpftool / \
120- LIBBPF_OUTPUT=$(OBJ_DIR ) /libbpf/ \
121- LIBBPF_DESTDIR=$(OUTPUT_DIR ) / \
122- prefix= DESTDIR=$(OUTPUT_DIR ) / install-bin
120+ OUTPUT=$(HOST_OBJ_DIR ) / \
121+ LIBBPF_OUTPUT=$(HOST_LIBBPF_OUTPUT ) \
122+ LIBBPF_DESTDIR=$(HOST_LIBBPF_DESTDIR ) \
123+ prefix= DESTDIR=$(HOST_DESTDIR ) install-bin
123124
124125$(INCLUDE_DIR ) /vmlinux.h : $(VMLINUX_BTF ) $(BPFTOOL ) | $(INCLUDE_DIR )
125126ifeq ($(VMLINUX_H ) ,)
@@ -150,9 +151,7 @@ $(INCLUDE_DIR)/%.bpf.skel.h: $(SCXOBJ_DIR)/%.bpf.o $(INCLUDE_DIR)/vmlinux.h $(BP
150151
151152override define CLEAN
152153 rm -rf $(OUTPUT_DIR )
153- rm -f *.o *.bpf.o *.bpf.skel.h *.bpf.subskel.h
154154 rm -f $(TEST_GEN_PROGS )
155- rm -f runner
156155endef
157156
158157# Every testcase takes all of the BPF progs are dependencies by default. This
@@ -196,21 +195,15 @@ $(SCXOBJ_DIR)/runner.o: runner.c | $(SCXOBJ_DIR)
196195# function doesn't support using implicit rules otherwise.
197196$(testcase-targets ) : $(SCXOBJ_DIR ) /% .o: % .c $(SCXOBJ_DIR ) /runner.o $(all_test_bpfprogs ) | $(SCXOBJ_DIR )
198197 $(eval test=$(patsubst % .o,% .c,$(notdir $@ ) ) )
199- $(CC ) $(CFLAGS ) -c $< -o $@ $( SCXOBJ_DIR ) /runner.o
198+ $(CC ) $(CFLAGS ) -c $< -o $@
200199
201200$(SCXOBJ_DIR ) /util.o : util.c | $(SCXOBJ_DIR )
202201 $(CC ) $(CFLAGS ) -c $< -o $@
203202
204- runner : $(SCXOBJ_DIR ) /runner.o $(SCXOBJ_DIR ) /util.o $(BPFOBJ ) $(testcase-targets )
203+ $( OUTPUT ) / runner : $(SCXOBJ_DIR ) /runner.o $(SCXOBJ_DIR ) /util.o $(BPFOBJ ) $(testcase-targets )
205204 @echo " $( testcase-targets) "
206205 $(CC ) $(CFLAGS ) -o $@ $^ $(LDFLAGS )
207206
208- TEST_GEN_PROGS := runner
209-
210- all : runner
211-
212- .PHONY : all clean help
213-
214207.DEFAULT_GOAL := all
215208
216209.DELETE_ON_ERROR :
0 commit comments