3
3
include ../../../build/Build.include
4
4
include ../../../scripts/Makefile.arch
5
5
include ../../../scripts/Makefile.include
6
- include ../lib.mk
7
6
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
19
8
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
23
12
24
13
CURDIR := $(abspath .)
25
14
REPOROOT := $(abspath ../../../..)
@@ -34,18 +23,23 @@ GENHDR := $(GENDIR)/autoconf.h
34
23
SCXTOOLSDIR := $(TOOLSDIR ) /sched_ext
35
24
SCXTOOLSINCDIR := $(TOOLSDIR ) /sched_ext/include
36
25
37
- OUTPUT_DIR := $(CURDIR ) /build
26
+ OUTPUT_DIR := $(OUTPUT ) /build
38
27
OBJ_DIR := $(OUTPUT_DIR ) /obj
39
28
INCLUDE_DIR := $(OUTPUT_DIR ) /include
40
29
BPFOBJ_DIR := $(OBJ_DIR ) /libbpf
41
30
SCXOBJ_DIR := $(OBJ_DIR ) /sched_ext
42
31
BPFOBJ := $(BPFOBJ_DIR ) /libbpf.a
43
32
LIBBPF_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 )
47
33
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 \
49
43
/sys/kernel/btf/vmlinux \
50
44
/boot/vmlinux-$(shell uname -r)
51
45
VMLINUX_BTF ?= $(abspath $(firstword $(wildcard $(VMLINUX_BTF_PATHS ) ) ) )
@@ -80,25 +74,31 @@ IS_LITTLE_ENDIAN = $(shell $(CC) -dM -E - </dev/null | \
80
74
# Use '-idirafter': Don't interfere with include mechanics except where the
81
75
# build would have failed anyways.
82
76
define get_sys_includes
83
- $(shell $(1 ) -v -E - </dev/null 2>&1 \
77
+ $(shell $(1 ) $( 2 ) -v -E - </dev/null 2>&1 \
84
78
| 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) }')
86
80
endef
87
81
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
+
88
88
BPF_CFLAGS = -g -D__TARGET_ARCH_$(SRCARCH ) \
89
89
$(if $(IS_LITTLE_ENDIAN ) ,-mlittle-endian,-mbig-endian) \
90
90
-I$(CURDIR ) /include -I$(CURDIR ) /include/bpf-compat \
91
91
-I$(INCLUDE_DIR ) -I$(APIDIR ) -I$(SCXTOOLSINCDIR ) \
92
92
-I$(REPOROOT ) /include \
93
- $(call get_sys_includes, $( CLANG ) ) \
93
+ $(CLANG_SYS_INCLUDES ) \
94
94
-Wall -Wno-compare-distinct-pointer-types \
95
95
-Wno-incompatible-function-pointer-types \
96
96
-O2 -mcpu=v3
97
97
98
98
# sort removes libbpf duplicates when not cross-building
99
99
MAKE_DIRS := $(sort $(OBJ_DIR ) /libbpf $(OBJ_DIR ) /libbpf \
100
100
$(OBJ_DIR ) /bpftool $(OBJ_DIR ) /resolve_btfids \
101
- $(INCLUDE_DIR ) $(SCXOBJ_DIR ) )
101
+ $(HOST_OBJ_DIR ) $( INCLUDE_DIR ) $(SCXOBJ_DIR ) )
102
102
103
103
$(MAKE_DIRS ) :
104
104
$(call msg,MKDIR,,$@ )
@@ -108,18 +108,19 @@ $(BPFOBJ): $(wildcard $(BPFDIR)/*.[ch] $(BPFDIR)/Makefile) \
108
108
$(APIDIR ) /linux/bpf.h \
109
109
| $(OBJ_DIR ) /libbpf
110
110
$(Q )$(MAKE ) $(submake_extras ) -C $(BPFDIR ) OUTPUT=$(OBJ_DIR ) /libbpf/ \
111
+ ARCH=$(ARCH ) CC=" $( CC) " CROSS_COMPILE=$(CROSS_COMPILE ) \
111
112
EXTRA_CFLAGS=' -g -O0 -fPIC' \
112
113
DESTDIR=$(OUTPUT_DIR ) prefix= all install_headers
113
114
114
115
$(DEFAULT_BPFTOOL ) : $(wildcard $(BPFTOOLDIR ) /* .[ch] $(BPFTOOLDIR ) /Makefile) \
115
- $(LIBBPF_OUTPUT ) | $(OBJ_DIR ) /bpftool
116
+ $(LIBBPF_OUTPUT ) | $(HOST_OBJ_DIR )
116
117
$(Q )$(MAKE ) $(submake_extras ) -C $(BPFTOOLDIR ) \
117
118
ARCH= CROSS_COMPILE= CC=$(HOSTCC ) LD=$(HOSTLD ) \
118
119
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
123
124
124
125
$(INCLUDE_DIR ) /vmlinux.h : $(VMLINUX_BTF ) $(BPFTOOL ) | $(INCLUDE_DIR )
125
126
ifeq ($(VMLINUX_H ) ,)
@@ -150,9 +151,7 @@ $(INCLUDE_DIR)/%.bpf.skel.h: $(SCXOBJ_DIR)/%.bpf.o $(INCLUDE_DIR)/vmlinux.h $(BP
150
151
151
152
override define CLEAN
152
153
rm -rf $(OUTPUT_DIR )
153
- rm -f *.o *.bpf.o *.bpf.skel.h *.bpf.subskel.h
154
154
rm -f $(TEST_GEN_PROGS )
155
- rm -f runner
156
155
endef
157
156
158
157
# 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)
196
195
# function doesn't support using implicit rules otherwise.
197
196
$(testcase-targets ) : $(SCXOBJ_DIR ) /% .o: % .c $(SCXOBJ_DIR ) /runner.o $(all_test_bpfprogs ) | $(SCXOBJ_DIR )
198
197
$(eval test=$(patsubst % .o,% .c,$(notdir $@ ) ) )
199
- $(CC ) $(CFLAGS ) -c $< -o $@ $( SCXOBJ_DIR ) /runner.o
198
+ $(CC ) $(CFLAGS ) -c $< -o $@
200
199
201
200
$(SCXOBJ_DIR ) /util.o : util.c | $(SCXOBJ_DIR )
202
201
$(CC ) $(CFLAGS ) -c $< -o $@
203
202
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 )
205
204
@echo " $( testcase-targets) "
206
205
$(CC ) $(CFLAGS ) -o $@ $^ $(LDFLAGS )
207
206
208
- TEST_GEN_PROGS := runner
209
-
210
- all : runner
211
-
212
- .PHONY : all clean help
213
-
214
207
.DEFAULT_GOAL := all
215
208
216
209
.DELETE_ON_ERROR :
0 commit comments