Skip to content

Commit 7941b83

Browse files
bjorn-rivoshtejun
authored andcommitted
selftests: sched_ext: Add sched_ext as proper selftest target
The sched_ext selftests is missing proper cross-compilation support, a proper target entry, and out-of-tree build support. When building the kselftest suite, e.g.: make ARCH=riscv CROSS_COMPILE=riscv64-linux-gnu- \ TARGETS=sched_ext SKIP_TARGETS="" O=/output/foo \ -C tools/testing/selftests install or: make ARCH=arm64 LLVM=1 TARGETS=sched_ext SKIP_TARGETS="" \ O=/output/foo -C tools/testing/selftests install The expectation is that the sched_ext is included, cross-built, the correct toolchain is picked up, and placed into /output/foo. In contrast to the BPF selftests, the sched_ext suite does not use bpftool at test run-time, so it is sufficient to build bpftool for the build host only. Add ARCH, CROSS_COMPILE, OUTPUT, and TARGETS support to the sched_ext selftest. Also, remove some variables that were unused by the Makefile. Signed-off-by: Björn Töpel <[email protected]> Reviewed-by: Shuah Khan <[email protected]> Acked-by: David Vernet <[email protected]> Tested-by: Mark Brown <[email protected]> Reviewed-by: Mark Brown <[email protected]> Signed-off-by: Tejun Heo <[email protected]>
1 parent e0ed521 commit 7941b83

File tree

2 files changed

+37
-43
lines changed

2 files changed

+37
-43
lines changed

tools/testing/selftests/Makefile

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@ TARGETS += rlimits
8888
TARGETS += rseq
8989
TARGETS += rtc
9090
TARGETS += rust
91+
TARGETS += sched_ext
9192
TARGETS += seccomp
9293
TARGETS += sgx
9394
TARGETS += sigaltstack
@@ -129,10 +130,10 @@ ifeq ($(filter net/lib,$(TARGETS)),)
129130
endif
130131
endif
131132

132-
# User can optionally provide a TARGETS skiplist. By default we skip
133-
# BPF since it has cutting edge build time dependencies which require
134-
# more effort to install.
135-
SKIP_TARGETS ?= bpf
133+
# User can optionally provide a TARGETS skiplist. By default we skip
134+
# targets using BPF since it has cutting edge build time dependencies
135+
# which require more effort to install.
136+
SKIP_TARGETS ?= bpf sched_ext
136137
ifneq ($(SKIP_TARGETS),)
137138
TMP := $(filter-out $(SKIP_TARGETS), $(TARGETS))
138139
override TARGETS := $(TMP)

tools/testing/selftests/sched_ext/Makefile

Lines changed: 32 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -3,23 +3,12 @@
33
include ../../../build/Build.include
44
include ../../../scripts/Makefile.arch
55
include ../../../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

2413
CURDIR := $(abspath .)
2514
REPOROOT := $(abspath ../../../..)
@@ -34,18 +23,23 @@ GENHDR := $(GENDIR)/autoconf.h
3423
SCXTOOLSDIR := $(TOOLSDIR)/sched_ext
3524
SCXTOOLSINCDIR := $(TOOLSDIR)/sched_ext/include
3625

37-
OUTPUT_DIR := $(CURDIR)/build
26+
OUTPUT_DIR := $(OUTPUT)/build
3827
OBJ_DIR := $(OUTPUT_DIR)/obj
3928
INCLUDE_DIR := $(OUTPUT_DIR)/include
4029
BPFOBJ_DIR := $(OBJ_DIR)/libbpf
4130
SCXOBJ_DIR := $(OBJ_DIR)/sched_ext
4231
BPFOBJ := $(BPFOBJ_DIR)/libbpf.a
4332
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)
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)
5145
VMLINUX_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.
8276
define 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)}')
8680
endef
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+
8888
BPF_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
9999
MAKE_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)
125126
ifeq ($(VMLINUX_H),)
@@ -150,9 +151,7 @@ $(INCLUDE_DIR)/%.bpf.skel.h: $(SCXOBJ_DIR)/%.bpf.o $(INCLUDE_DIR)/vmlinux.h $(BP
150151

151152
override 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
156155
endef
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

Comments
 (0)