1362aecb2SWilly Tarreau# SPDX-License-Identifier: GPL-2.0 2362aecb2SWilly Tarreau# Makefile for nolibc tests 3362aecb2SWilly Tarreauinclude ../../../scripts/Makefile.include 4362aecb2SWilly Tarreau 5362aecb2SWilly Tarreau# we're in ".../tools/testing/selftests/nolibc" 6362aecb2SWilly Tarreauifeq ($(srctree),) 7362aecb2SWilly Tarreausrctree := $(patsubst %/tools/testing/selftests/,%,$(dir $(CURDIR))) 8362aecb2SWilly Tarreauendif 9362aecb2SWilly Tarreau 10362aecb2SWilly Tarreauifeq ($(ARCH),) 11362aecb2SWilly Tarreauinclude $(srctree)/scripts/subarch.include 12362aecb2SWilly TarreauARCH = $(SUBARCH) 13362aecb2SWilly Tarreauendif 14362aecb2SWilly Tarreau 15d248cabfSWilly Tarreau# kernel image names by architecture 16d248cabfSWilly TarreauIMAGE_i386 = arch/x86/boot/bzImage 17d248cabfSWilly TarreauIMAGE_x86 = arch/x86/boot/bzImage 18d248cabfSWilly TarreauIMAGE_arm64 = arch/arm64/boot/Image 19d248cabfSWilly TarreauIMAGE_arm = arch/arm/boot/zImage 20d248cabfSWilly TarreauIMAGE_mips = vmlinuz 21d248cabfSWilly TarreauIMAGE_riscv = arch/riscv/boot/Image 22*0043e6f2SSven SchnelleIMAGE_s390 = arch/s390/boot/bzImage 23d248cabfSWilly TarreauIMAGE = $(IMAGE_$(ARCH)) 24d248cabfSWilly TarreauIMAGE_NAME = $(notdir $(IMAGE)) 25d248cabfSWilly Tarreau 265c43fd79SWilly Tarreau# default kernel configurations that appear to be usable 275c43fd79SWilly TarreauDEFCONFIG_i386 = defconfig 285c43fd79SWilly TarreauDEFCONFIG_x86 = defconfig 295c43fd79SWilly TarreauDEFCONFIG_arm64 = defconfig 305c43fd79SWilly TarreauDEFCONFIG_arm = multi_v7_defconfig 315c43fd79SWilly TarreauDEFCONFIG_mips = malta_defconfig 325c43fd79SWilly TarreauDEFCONFIG_riscv = defconfig 33*0043e6f2SSven SchnelleDEFCONFIG_s390 = defconfig 345c43fd79SWilly TarreauDEFCONFIG = $(DEFCONFIG_$(ARCH)) 355c43fd79SWilly Tarreau 36662ea60eSWilly Tarreau# optional tests to run (default = all) 37662ea60eSWilly TarreauTEST = 38662ea60eSWilly Tarreau 39662ea60eSWilly Tarreau# QEMU_ARCH: arch names used by qemu 40662ea60eSWilly TarreauQEMU_ARCH_i386 = i386 41662ea60eSWilly TarreauQEMU_ARCH_x86 = x86_64 42662ea60eSWilly TarreauQEMU_ARCH_arm64 = aarch64 43662ea60eSWilly TarreauQEMU_ARCH_arm = arm 44662ea60eSWilly TarreauQEMU_ARCH_mips = mipsel # works with malta_defconfig 45662ea60eSWilly TarreauQEMU_ARCH_riscv = riscv64 46*0043e6f2SSven SchnelleQEMU_ARCH_s390 = s390x 47662ea60eSWilly TarreauQEMU_ARCH = $(QEMU_ARCH_$(ARCH)) 48662ea60eSWilly Tarreau 49662ea60eSWilly Tarreau# QEMU_ARGS : some arch-specific args to pass to qemu 50662ea60eSWilly TarreauQEMU_ARGS_i386 = -M pc -append "console=ttyS0,9600 i8042.noaux panic=-1 $(TEST:%=NOLIBC_TEST=%)" 51662ea60eSWilly TarreauQEMU_ARGS_x86 = -M pc -append "console=ttyS0,9600 i8042.noaux panic=-1 $(TEST:%=NOLIBC_TEST=%)" 52662ea60eSWilly TarreauQEMU_ARGS_arm64 = -M virt -cpu cortex-a53 -append "panic=-1 $(TEST:%=NOLIBC_TEST=%)" 53662ea60eSWilly TarreauQEMU_ARGS_arm = -M virt -append "panic=-1 $(TEST:%=NOLIBC_TEST=%)" 54662ea60eSWilly TarreauQEMU_ARGS_mips = -M malta -append "panic=-1 $(TEST:%=NOLIBC_TEST=%)" 55662ea60eSWilly TarreauQEMU_ARGS_riscv = -M virt -append "console=ttyS0 panic=-1 $(TEST:%=NOLIBC_TEST=%)" 56*0043e6f2SSven SchnelleQEMU_ARGS_s390 = -M s390-ccw-virtio -m 1G -append "console=ttyS0 panic=-1 $(TEST:%=NOLIBC_TEST=%)" 57662ea60eSWilly TarreauQEMU_ARGS = $(QEMU_ARGS_$(ARCH)) 58662ea60eSWilly Tarreau 59362aecb2SWilly Tarreau# OUTPUT is only set when run from the main makefile, otherwise 60362aecb2SWilly Tarreau# it defaults to this nolibc directory. 61362aecb2SWilly TarreauOUTPUT ?= $(CURDIR)/ 62362aecb2SWilly Tarreau 63362aecb2SWilly Tarreauifeq ($(V),1) 64362aecb2SWilly TarreauQ= 65362aecb2SWilly Tarreauelse 66362aecb2SWilly TarreauQ=@ 67362aecb2SWilly Tarreauendif 68362aecb2SWilly Tarreau 69*0043e6f2SSven SchnelleCFLAGS_s390 = -m64 70*0043e6f2SSven SchnelleCFLAGS ?= -Os -fno-ident -fno-asynchronous-unwind-tables $(CFLAGS_$(ARCH)) 71362aecb2SWilly TarreauLDFLAGS := -s 72362aecb2SWilly Tarreau 73ffc297feSWilly Tarreauhelp: 74ffc297feSWilly Tarreau @echo "Supported targets under selftests/nolibc:" 75ffc297feSWilly Tarreau @echo " all call the \"run\" target below" 76ffc297feSWilly Tarreau @echo " help this help" 77ffc297feSWilly Tarreau @echo " sysroot create the nolibc sysroot here (uses \$$ARCH)" 78ffc297feSWilly Tarreau @echo " nolibc-test build the executable (uses \$$CC and \$$CROSS_COMPILE)" 79ffc297feSWilly Tarreau @echo " initramfs prepare the initramfs with nolibc-test" 80ffc297feSWilly Tarreau @echo " defconfig create a fresh new default config (uses \$$ARCH)" 81ffc297feSWilly Tarreau @echo " kernel (re)build the kernel with the initramfs (uses \$$ARCH)" 82ffc297feSWilly Tarreau @echo " run runs the kernel in QEMU after building it (uses \$$ARCH, \$$TEST)" 83ffc297feSWilly Tarreau @echo " rerun runs a previously prebuilt kernel in QEMU (uses \$$ARCH, \$$TEST)" 84ffc297feSWilly Tarreau @echo " clean clean the sysroot, initramfs, build and output files" 85ffc297feSWilly Tarreau @echo "" 86ffc297feSWilly Tarreau @echo "The output file is \"run.out\". Test ranges may be passed using \$$TEST." 87ffc297feSWilly Tarreau @echo "" 88ffc297feSWilly Tarreau @echo "Currently using the following variables:" 89ffc297feSWilly Tarreau @echo " ARCH = $(ARCH)" 90ffc297feSWilly Tarreau @echo " CROSS_COMPILE = $(CROSS_COMPILE)" 91ffc297feSWilly Tarreau @echo " CC = $(CC)" 92ffc297feSWilly Tarreau @echo " OUTPUT = $(OUTPUT)" 93ffc297feSWilly Tarreau @echo " TEST = $(TEST)" 94ffc297feSWilly Tarreau @echo " QEMU_ARCH = $(if $(QEMU_ARCH),$(QEMU_ARCH),UNKNOWN_ARCH) [determined from \$$ARCH]" 95ffc297feSWilly Tarreau @echo " IMAGE_NAME = $(if $(IMAGE_NAME),$(IMAGE_NAME),UNKNOWN_ARCH) [determined from \$$ARCH]" 96ffc297feSWilly Tarreau @echo "" 97ffc297feSWilly Tarreau 98ffc297feSWilly Tarreauall: run 99362aecb2SWilly Tarreau 100b25c5284SWilly Tarreausysroot: sysroot/$(ARCH)/include 101b25c5284SWilly Tarreau 102b25c5284SWilly Tarreausysroot/$(ARCH)/include: 1034a95be7eSWilly Tarreau $(Q)rm -rf sysroot/$(ARCH) sysroot/sysroot 104b25c5284SWilly Tarreau $(QUIET_MKDIR)mkdir -p sysroot 105b25c5284SWilly Tarreau $(Q)$(MAKE) -C ../../../include/nolibc ARCH=$(ARCH) OUTPUT=$(CURDIR)/sysroot/ headers_standalone 106b25c5284SWilly Tarreau $(Q)mv sysroot/sysroot sysroot/$(ARCH) 107b25c5284SWilly Tarreau 108b25c5284SWilly Tarreaunolibc-test: nolibc-test.c sysroot/$(ARCH)/include 109362aecb2SWilly Tarreau $(QUIET_CC)$(CC) $(CFLAGS) $(LDFLAGS) -o $@ \ 110b25c5284SWilly Tarreau -nostdlib -static -Isysroot/$(ARCH)/include $< -lgcc 111362aecb2SWilly Tarreau 112362aecb2SWilly Tarreauinitramfs: nolibc-test 113362aecb2SWilly Tarreau $(QUIET_MKDIR)mkdir -p initramfs 114362aecb2SWilly Tarreau $(call QUIET_INSTALL, initramfs/init) 115362aecb2SWilly Tarreau $(Q)cp nolibc-test initramfs/init 116362aecb2SWilly Tarreau 1175c43fd79SWilly Tarreaudefconfig: 1185c43fd79SWilly Tarreau $(Q)$(MAKE) -C $(srctree) ARCH=$(ARCH) CC=$(CC) CROSS_COMPILE=$(CROSS_COMPILE) mrproper $(DEFCONFIG) prepare 1195c43fd79SWilly Tarreau 120d248cabfSWilly Tarreaukernel: initramfs 121d248cabfSWilly Tarreau $(Q)$(MAKE) -C $(srctree) ARCH=$(ARCH) CC=$(CC) CROSS_COMPILE=$(CROSS_COMPILE) $(IMAGE_NAME) CONFIG_INITRAMFS_SOURCE=$(CURDIR)/initramfs 122d248cabfSWilly Tarreau 123662ea60eSWilly Tarreau# run the tests after building the kernel 124662ea60eSWilly Tarreaurun: kernel 125662ea60eSWilly Tarreau $(Q)qemu-system-$(QEMU_ARCH) -display none -no-reboot -kernel "$(srctree)/$(IMAGE)" -serial stdio $(QEMU_ARGS) > "$(CURDIR)/run.out" 126662ea60eSWilly Tarreau $(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." 127662ea60eSWilly Tarreau 128662ea60eSWilly Tarreau# re-run the tests from an existing kernel 129662ea60eSWilly Tarreaurerun: 130662ea60eSWilly Tarreau $(Q)qemu-system-$(QEMU_ARCH) -display none -no-reboot -kernel "$(srctree)/$(IMAGE)" -serial stdio $(QEMU_ARGS) > "$(CURDIR)/run.out" 131662ea60eSWilly Tarreau $(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." 132662ea60eSWilly Tarreau 133362aecb2SWilly Tarreauclean: 134b25c5284SWilly Tarreau $(call QUIET_CLEAN, sysroot) 135b25c5284SWilly Tarreau $(Q)rm -rf sysroot 136362aecb2SWilly Tarreau $(call QUIET_CLEAN, nolibc-test) 137362aecb2SWilly Tarreau $(Q)rm -f nolibc-test 138362aecb2SWilly Tarreau $(call QUIET_CLEAN, initramfs) 139362aecb2SWilly Tarreau $(Q)rm -rf initramfs 140662ea60eSWilly Tarreau $(call QUIET_CLEAN, run.out) 141662ea60eSWilly Tarreau $(Q)rm -rf run.out 1424a95be7eSWilly Tarreau 1434a95be7eSWilly Tarreau.PHONY: sysroot/$(ARCH)/include 144