ffc297fe22
It presents the supported targets, and becomes the default target to save the user from having to read the makefile. The "all" target was placed after it and now points to "run" to do everything since it's no longer the default one. Signed-off-by: Willy Tarreau <w@1wt.eu> Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
136 lines
5.0 KiB
Makefile
136 lines
5.0 KiB
Makefile
# SPDX-License-Identifier: GPL-2.0
|
|
# Makefile for nolibc tests
|
|
include ../../../scripts/Makefile.include
|
|
|
|
# we're in ".../tools/testing/selftests/nolibc"
|
|
ifeq ($(srctree),)
|
|
srctree := $(patsubst %/tools/testing/selftests/,%,$(dir $(CURDIR)))
|
|
endif
|
|
|
|
ifeq ($(ARCH),)
|
|
include $(srctree)/scripts/subarch.include
|
|
ARCH = $(SUBARCH)
|
|
endif
|
|
|
|
# kernel image names by architecture
|
|
IMAGE_i386 = arch/x86/boot/bzImage
|
|
IMAGE_x86 = arch/x86/boot/bzImage
|
|
IMAGE_arm64 = arch/arm64/boot/Image
|
|
IMAGE_arm = arch/arm/boot/zImage
|
|
IMAGE_mips = vmlinuz
|
|
IMAGE_riscv = arch/riscv/boot/Image
|
|
IMAGE = $(IMAGE_$(ARCH))
|
|
IMAGE_NAME = $(notdir $(IMAGE))
|
|
|
|
# default kernel configurations that appear to be usable
|
|
DEFCONFIG_i386 = defconfig
|
|
DEFCONFIG_x86 = defconfig
|
|
DEFCONFIG_arm64 = defconfig
|
|
DEFCONFIG_arm = multi_v7_defconfig
|
|
DEFCONFIG_mips = malta_defconfig
|
|
DEFCONFIG_riscv = defconfig
|
|
DEFCONFIG = $(DEFCONFIG_$(ARCH))
|
|
|
|
# optional tests to run (default = all)
|
|
TEST =
|
|
|
|
# QEMU_ARCH: arch names used by qemu
|
|
QEMU_ARCH_i386 = i386
|
|
QEMU_ARCH_x86 = x86_64
|
|
QEMU_ARCH_arm64 = aarch64
|
|
QEMU_ARCH_arm = arm
|
|
QEMU_ARCH_mips = mipsel # works with malta_defconfig
|
|
QEMU_ARCH_riscv = riscv64
|
|
QEMU_ARCH = $(QEMU_ARCH_$(ARCH))
|
|
|
|
# QEMU_ARGS : some arch-specific args to pass to qemu
|
|
QEMU_ARGS_i386 = -M pc -append "console=ttyS0,9600 i8042.noaux panic=-1 $(TEST:%=NOLIBC_TEST=%)"
|
|
QEMU_ARGS_x86 = -M pc -append "console=ttyS0,9600 i8042.noaux panic=-1 $(TEST:%=NOLIBC_TEST=%)"
|
|
QEMU_ARGS_arm64 = -M virt -cpu cortex-a53 -append "panic=-1 $(TEST:%=NOLIBC_TEST=%)"
|
|
QEMU_ARGS_arm = -M virt -append "panic=-1 $(TEST:%=NOLIBC_TEST=%)"
|
|
QEMU_ARGS_mips = -M malta -append "panic=-1 $(TEST:%=NOLIBC_TEST=%)"
|
|
QEMU_ARGS_riscv = -M virt -append "console=ttyS0 panic=-1 $(TEST:%=NOLIBC_TEST=%)"
|
|
QEMU_ARGS = $(QEMU_ARGS_$(ARCH))
|
|
|
|
# OUTPUT is only set when run from the main makefile, otherwise
|
|
# it defaults to this nolibc directory.
|
|
OUTPUT ?= $(CURDIR)/
|
|
|
|
ifeq ($(V),1)
|
|
Q=
|
|
else
|
|
Q=@
|
|
endif
|
|
|
|
CFLAGS ?= -Os -fno-ident -fno-asynchronous-unwind-tables
|
|
LDFLAGS := -s
|
|
|
|
help:
|
|
@echo "Supported targets under selftests/nolibc:"
|
|
@echo " all call the \"run\" target below"
|
|
@echo " help this help"
|
|
@echo " sysroot create the nolibc sysroot here (uses \$$ARCH)"
|
|
@echo " nolibc-test build the executable (uses \$$CC and \$$CROSS_COMPILE)"
|
|
@echo " initramfs prepare the initramfs with nolibc-test"
|
|
@echo " defconfig create a fresh new default config (uses \$$ARCH)"
|
|
@echo " kernel (re)build the kernel with the initramfs (uses \$$ARCH)"
|
|
@echo " run runs the kernel in QEMU after building it (uses \$$ARCH, \$$TEST)"
|
|
@echo " rerun runs a previously prebuilt kernel in QEMU (uses \$$ARCH, \$$TEST)"
|
|
@echo " clean clean the sysroot, initramfs, build and output files"
|
|
@echo ""
|
|
@echo "The output file is \"run.out\". Test ranges may be passed using \$$TEST."
|
|
@echo ""
|
|
@echo "Currently using the following variables:"
|
|
@echo " ARCH = $(ARCH)"
|
|
@echo " CROSS_COMPILE = $(CROSS_COMPILE)"
|
|
@echo " CC = $(CC)"
|
|
@echo " OUTPUT = $(OUTPUT)"
|
|
@echo " TEST = $(TEST)"
|
|
@echo " QEMU_ARCH = $(if $(QEMU_ARCH),$(QEMU_ARCH),UNKNOWN_ARCH) [determined from \$$ARCH]"
|
|
@echo " IMAGE_NAME = $(if $(IMAGE_NAME),$(IMAGE_NAME),UNKNOWN_ARCH) [determined from \$$ARCH]"
|
|
@echo ""
|
|
|
|
all: run
|
|
|
|
sysroot: sysroot/$(ARCH)/include
|
|
|
|
sysroot/$(ARCH)/include:
|
|
$(QUIET_MKDIR)mkdir -p sysroot
|
|
$(Q)$(MAKE) -C ../../../include/nolibc ARCH=$(ARCH) OUTPUT=$(CURDIR)/sysroot/ headers_standalone
|
|
$(Q)mv sysroot/sysroot sysroot/$(ARCH)
|
|
|
|
nolibc-test: nolibc-test.c sysroot/$(ARCH)/include
|
|
$(QUIET_CC)$(CC) $(CFLAGS) $(LDFLAGS) -o $@ \
|
|
-nostdlib -static -Isysroot/$(ARCH)/include $< -lgcc
|
|
|
|
initramfs: nolibc-test
|
|
$(QUIET_MKDIR)mkdir -p initramfs
|
|
$(call QUIET_INSTALL, initramfs/init)
|
|
$(Q)cp nolibc-test initramfs/init
|
|
|
|
defconfig:
|
|
$(Q)$(MAKE) -C $(srctree) ARCH=$(ARCH) CC=$(CC) CROSS_COMPILE=$(CROSS_COMPILE) mrproper $(DEFCONFIG) prepare
|
|
|
|
kernel: initramfs
|
|
$(Q)$(MAKE) -C $(srctree) ARCH=$(ARCH) CC=$(CC) CROSS_COMPILE=$(CROSS_COMPILE) $(IMAGE_NAME) CONFIG_INITRAMFS_SOURCE=$(CURDIR)/initramfs
|
|
|
|
# run the tests after building the kernel
|
|
run: kernel
|
|
$(Q)qemu-system-$(QEMU_ARCH) -display none -no-reboot -kernel "$(srctree)/$(IMAGE)" -serial stdio $(QEMU_ARGS) > "$(CURDIR)/run.out"
|
|
$(Q)grep -w FAIL "$(CURDIR)/run.out" && echo "See all results in $(CURDIR)/run.out" || echo "$$(grep -c ^[0-9].*OK $(CURDIR)/run.out) test(s) passed."
|
|
|
|
# re-run the tests from an existing kernel
|
|
rerun:
|
|
$(Q)qemu-system-$(QEMU_ARCH) -display none -no-reboot -kernel "$(srctree)/$(IMAGE)" -serial stdio $(QEMU_ARGS) > "$(CURDIR)/run.out"
|
|
$(Q)grep -w FAIL "$(CURDIR)/run.out" && echo "See all results in $(CURDIR)/run.out" || echo "$$(grep -c ^[0-9].*OK $(CURDIR)/run.out) test(s) passed."
|
|
|
|
clean:
|
|
$(call QUIET_CLEAN, sysroot)
|
|
$(Q)rm -rf sysroot
|
|
$(call QUIET_CLEAN, nolibc-test)
|
|
$(Q)rm -f nolibc-test
|
|
$(call QUIET_CLEAN, initramfs)
|
|
$(Q)rm -rf initramfs
|
|
$(call QUIET_CLEAN, run.out)
|
|
$(Q)rm -rf run.out
|