* [PATCH 0/7] selftests/nolibc: some build matrix cleanups and optimizations
@ 2026-04-29 20:58 Thomas Weißschuh
2026-04-29 20:58 ` [PATCH 1/7] selftests/nolibc: align QEMU_ARCH_mips32be Thomas Weißschuh
` (7 more replies)
0 siblings, 8 replies; 9+ messages in thread
From: Thomas Weißschuh @ 2026-04-29 20:58 UTC (permalink / raw)
To: Willy Tarreau; +Cc: linux-kernel, Thomas Weißschuh
Signed-off-by: Thomas Weißschuh <linux@weissschuh.net>
---
Thomas Weißschuh (7):
selftests/nolibc: align QEMU_ARCH_mips32be
selftests/nolibc: drop riscv configuration
selftests/nolibc: use QEMU_ARCH for QEMU_ARCH_USER
selftests/nolibc: trim QEMU_ARCH mappings
selftests/nolibc: trim DEFCONFIG mappings
selftests/nolibc: trim IMAGE mappings
selftests/nolibc: use vmlinux for MIPS tests
tools/testing/selftests/nolibc/Makefile.nolibc | 42 +++-----------------------
1 file changed, 5 insertions(+), 37 deletions(-)
---
base-commit: 266df86c4893fed1a7f027e767fe1c7f6456b100
change-id: 20260429-nolibc-qemu-arch-7b1e73161db8
Best regards,
--
Thomas Weißschuh <linux@weissschuh.net>
^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 1/7] selftests/nolibc: align QEMU_ARCH_mips32be
2026-04-29 20:58 [PATCH 0/7] selftests/nolibc: some build matrix cleanups and optimizations Thomas Weißschuh
@ 2026-04-29 20:58 ` Thomas Weißschuh
2026-04-29 20:58 ` [PATCH 2/7] selftests/nolibc: drop riscv configuration Thomas Weißschuh
` (6 subsequent siblings)
7 siblings, 0 replies; 9+ messages in thread
From: Thomas Weißschuh @ 2026-04-29 20:58 UTC (permalink / raw)
To: Willy Tarreau; +Cc: linux-kernel, Thomas Weißschuh
The variable is slightly misaligned. Fix that.
Signed-off-by: Thomas Weißschuh <linux@weissschuh.net>
---
tools/testing/selftests/nolibc/Makefile.nolibc | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tools/testing/selftests/nolibc/Makefile.nolibc b/tools/testing/selftests/nolibc/Makefile.nolibc
index f30bc68470cc..509ab0dfd2ca 100644
--- a/tools/testing/selftests/nolibc/Makefile.nolibc
+++ b/tools/testing/selftests/nolibc/Makefile.nolibc
@@ -142,7 +142,7 @@ QEMU_ARCH_arm64 = aarch64
QEMU_ARCH_arm = arm
QEMU_ARCH_armthumb = arm
QEMU_ARCH_mips32le = mipsel # works with malta_defconfig
-QEMU_ARCH_mips32be = mips
+QEMU_ARCH_mips32be = mips
QEMU_ARCH_mipsn32le = mips64el
QEMU_ARCH_mipsn32be = mips64
QEMU_ARCH_mips64le = mips64el
--
2.54.0
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH 2/7] selftests/nolibc: drop riscv configuration
2026-04-29 20:58 [PATCH 0/7] selftests/nolibc: some build matrix cleanups and optimizations Thomas Weißschuh
2026-04-29 20:58 ` [PATCH 1/7] selftests/nolibc: align QEMU_ARCH_mips32be Thomas Weißschuh
@ 2026-04-29 20:58 ` Thomas Weißschuh
2026-04-29 20:58 ` [PATCH 3/7] selftests/nolibc: use QEMU_ARCH for QEMU_ARCH_USER Thomas Weißschuh
` (5 subsequent siblings)
7 siblings, 0 replies; 9+ messages in thread
From: Thomas Weißschuh @ 2026-04-29 20:58 UTC (permalink / raw)
To: Willy Tarreau; +Cc: linux-kernel, Thomas Weißschuh
The riscv configuration is just a duplication of the riscv64 one.
Remove it. Passing ARCH=riscv will be rerouted to riscv64 anyways.
Signed-off-by: Thomas Weißschuh <linux@weissschuh.net>
---
tools/testing/selftests/nolibc/Makefile.nolibc | 4 ----
1 file changed, 4 deletions(-)
diff --git a/tools/testing/selftests/nolibc/Makefile.nolibc b/tools/testing/selftests/nolibc/Makefile.nolibc
index 509ab0dfd2ca..e9370f7a89de 100644
--- a/tools/testing/selftests/nolibc/Makefile.nolibc
+++ b/tools/testing/selftests/nolibc/Makefile.nolibc
@@ -83,7 +83,6 @@ IMAGE_mips64be = vmlinuz
IMAGE_ppc = vmlinux
IMAGE_ppc64 = vmlinux
IMAGE_ppc64le = arch/powerpc/boot/zImage
-IMAGE_riscv = arch/riscv/boot/Image
IMAGE_riscv32 = arch/riscv/boot/Image
IMAGE_riscv64 = arch/riscv/boot/Image
IMAGE_s390x = arch/s390/boot/bzImage
@@ -112,7 +111,6 @@ DEFCONFIG_mips64be = malta_defconfig generic/64r2.config generic/eb.config
DEFCONFIG_ppc = pmac32_defconfig
DEFCONFIG_ppc64 = powernv_be_defconfig
DEFCONFIG_ppc64le = powernv_defconfig
-DEFCONFIG_riscv = defconfig
DEFCONFIG_riscv32 = rv32_defconfig
DEFCONFIG_riscv64 = defconfig
DEFCONFIG_s390x = defconfig
@@ -150,7 +148,6 @@ QEMU_ARCH_mips64be = mips64
QEMU_ARCH_ppc = ppc
QEMU_ARCH_ppc64 = ppc64
QEMU_ARCH_ppc64le = ppc64
-QEMU_ARCH_riscv = riscv64
QEMU_ARCH_riscv32 = riscv32
QEMU_ARCH_riscv64 = riscv64
QEMU_ARCH_s390x = s390x
@@ -190,7 +187,6 @@ QEMU_ARGS_mips64be = -M malta -cpu 5KEc -append "panic=-1 $(TEST:%=NOLIBC_TEST
QEMU_ARGS_ppc = -M g3beige -append "console=ttyS0 panic=-1 $(TEST:%=NOLIBC_TEST=%)"
QEMU_ARGS_ppc64 = -M powernv -append "console=hvc0 panic=-1 $(TEST:%=NOLIBC_TEST=%)"
QEMU_ARGS_ppc64le = -M powernv -append "console=hvc0 panic=-1 $(TEST:%=NOLIBC_TEST=%)"
-QEMU_ARGS_riscv = -M virt -append "console=ttyS0 panic=-1 $(TEST:%=NOLIBC_TEST=%)"
QEMU_ARGS_riscv32 = -M virt -append "console=ttyS0 panic=-1 $(TEST:%=NOLIBC_TEST=%)"
QEMU_ARGS_riscv64 = -M virt -append "console=ttyS0 panic=-1 $(TEST:%=NOLIBC_TEST=%)"
QEMU_ARGS_s390x = -M s390-ccw-virtio -append "console=ttyS0 panic=-1 $(TEST:%=NOLIBC_TEST=%)"
--
2.54.0
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH 3/7] selftests/nolibc: use QEMU_ARCH for QEMU_ARCH_USER
2026-04-29 20:58 [PATCH 0/7] selftests/nolibc: some build matrix cleanups and optimizations Thomas Weißschuh
2026-04-29 20:58 ` [PATCH 1/7] selftests/nolibc: align QEMU_ARCH_mips32be Thomas Weißschuh
2026-04-29 20:58 ` [PATCH 2/7] selftests/nolibc: drop riscv configuration Thomas Weißschuh
@ 2026-04-29 20:58 ` Thomas Weißschuh
2026-04-29 20:58 ` [PATCH 4/7] selftests/nolibc: trim QEMU_ARCH mappings Thomas Weißschuh
` (4 subsequent siblings)
7 siblings, 0 replies; 9+ messages in thread
From: Thomas Weißschuh @ 2026-04-29 20:58 UTC (permalink / raw)
To: Willy Tarreau; +Cc: linux-kernel, Thomas Weißschuh
The current logic forces the XARCH to QEMU_ARCH mapping to contain
entries for all architectures. This will change. To avoid duplication
of that logic, reuse the already computed QEMU_ARCH variable.
Signed-off-by: Thomas Weißschuh <linux@weissschuh.net>
---
tools/testing/selftests/nolibc/Makefile.nolibc | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tools/testing/selftests/nolibc/Makefile.nolibc b/tools/testing/selftests/nolibc/Makefile.nolibc
index e9370f7a89de..6b424716a9f8 100644
--- a/tools/testing/selftests/nolibc/Makefile.nolibc
+++ b/tools/testing/selftests/nolibc/Makefile.nolibc
@@ -161,7 +161,7 @@ QEMU_ARCH = $(QEMU_ARCH_$(XARCH))
QEMU_ARCH_USER_ppc64le = ppc64le
QEMU_ARCH_USER_mipsn32le = mipsn32el
QEMU_ARCH_USER_mipsn32be = mipsn32
-QEMU_ARCH_USER = $(or $(QEMU_ARCH_USER_$(XARCH)),$(QEMU_ARCH_$(XARCH)))
+QEMU_ARCH_USER = $(or $(QEMU_ARCH_USER_$(XARCH)),$(QEMU_ARCH))
QEMU_BIOS_DIR = /usr/share/edk2/
QEMU_BIOS_loongarch = $(QEMU_BIOS_DIR)/loongarch64/OVMF_CODE.fd
--
2.54.0
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH 4/7] selftests/nolibc: trim QEMU_ARCH mappings
2026-04-29 20:58 [PATCH 0/7] selftests/nolibc: some build matrix cleanups and optimizations Thomas Weißschuh
` (2 preceding siblings ...)
2026-04-29 20:58 ` [PATCH 3/7] selftests/nolibc: use QEMU_ARCH for QEMU_ARCH_USER Thomas Weißschuh
@ 2026-04-29 20:58 ` Thomas Weißschuh
2026-04-29 20:58 ` [PATCH 5/7] selftests/nolibc: trim DEFCONFIG mappings Thomas Weißschuh
` (3 subsequent siblings)
7 siblings, 0 replies; 9+ messages in thread
From: Thomas Weißschuh @ 2026-04-29 20:58 UTC (permalink / raw)
To: Willy Tarreau; +Cc: linux-kernel, Thomas Weißschuh
For many configurations QEMU_ARCH is the same as XARCH.
Slim down the table by automatically falling back to XARCH.
Signed-off-by: Thomas Weißschuh <linux@weissschuh.net>
---
tools/testing/selftests/nolibc/Makefile.nolibc | 13 +------------
1 file changed, 1 insertion(+), 12 deletions(-)
diff --git a/tools/testing/selftests/nolibc/Makefile.nolibc b/tools/testing/selftests/nolibc/Makefile.nolibc
index 6b424716a9f8..57bbc28c52f4 100644
--- a/tools/testing/selftests/nolibc/Makefile.nolibc
+++ b/tools/testing/selftests/nolibc/Makefile.nolibc
@@ -132,12 +132,9 @@ EXTRACONFIG = $(EXTRACONFIG_$(XARCH))
TEST =
# QEMU_ARCH: arch names used by qemu
-QEMU_ARCH_i386 = i386
-QEMU_ARCH_x86_64 = x86_64
QEMU_ARCH_x32 = x86_64
QEMU_ARCH_x86 = x86_64
QEMU_ARCH_arm64 = aarch64
-QEMU_ARCH_arm = arm
QEMU_ARCH_armthumb = arm
QEMU_ARCH_mips32le = mipsel # works with malta_defconfig
QEMU_ARCH_mips32be = mips
@@ -145,18 +142,10 @@ QEMU_ARCH_mipsn32le = mips64el
QEMU_ARCH_mipsn32be = mips64
QEMU_ARCH_mips64le = mips64el
QEMU_ARCH_mips64be = mips64
-QEMU_ARCH_ppc = ppc
-QEMU_ARCH_ppc64 = ppc64
QEMU_ARCH_ppc64le = ppc64
-QEMU_ARCH_riscv32 = riscv32
-QEMU_ARCH_riscv64 = riscv64
-QEMU_ARCH_s390x = s390x
QEMU_ARCH_loongarch = loongarch64
QEMU_ARCH_sparc32 = sparc
-QEMU_ARCH_sparc64 = sparc64
-QEMU_ARCH_m68k = m68k
-QEMU_ARCH_sh4 = sh4
-QEMU_ARCH = $(QEMU_ARCH_$(XARCH))
+QEMU_ARCH = $(or $(QEMU_ARCH_$(XARCH)),$(XARCH))
QEMU_ARCH_USER_ppc64le = ppc64le
QEMU_ARCH_USER_mipsn32le = mipsn32el
--
2.54.0
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH 5/7] selftests/nolibc: trim DEFCONFIG mappings
2026-04-29 20:58 [PATCH 0/7] selftests/nolibc: some build matrix cleanups and optimizations Thomas Weißschuh
` (3 preceding siblings ...)
2026-04-29 20:58 ` [PATCH 4/7] selftests/nolibc: trim QEMU_ARCH mappings Thomas Weißschuh
@ 2026-04-29 20:58 ` Thomas Weißschuh
2026-04-29 20:58 ` [PATCH 6/7] selftests/nolibc: trim IMAGE mappings Thomas Weißschuh
` (2 subsequent siblings)
7 siblings, 0 replies; 9+ messages in thread
From: Thomas Weißschuh @ 2026-04-29 20:58 UTC (permalink / raw)
To: Willy Tarreau; +Cc: linux-kernel, Thomas Weißschuh
For many configurations DEFCONFIG is simply 'defconfig'.
Slim down the table by automatically falling back to 'defconfig'.
Signed-off-by: Thomas Weißschuh <linux@weissschuh.net>
---
tools/testing/selftests/nolibc/Makefile.nolibc | 10 +---------
1 file changed, 1 insertion(+), 9 deletions(-)
diff --git a/tools/testing/selftests/nolibc/Makefile.nolibc b/tools/testing/selftests/nolibc/Makefile.nolibc
index 57bbc28c52f4..1db1c7d9eeee 100644
--- a/tools/testing/selftests/nolibc/Makefile.nolibc
+++ b/tools/testing/selftests/nolibc/Makefile.nolibc
@@ -95,11 +95,6 @@ IMAGE = $(objtree)/$(IMAGE_$(XARCH))
IMAGE_NAME = $(notdir $(IMAGE))
# default kernel configurations that appear to be usable
-DEFCONFIG_i386 = defconfig
-DEFCONFIG_x86_64 = defconfig
-DEFCONFIG_x32 = defconfig
-DEFCONFIG_x86 = defconfig
-DEFCONFIG_arm64 = defconfig
DEFCONFIG_arm = multi_v7_defconfig
DEFCONFIG_armthumb = multi_v7_defconfig
DEFCONFIG_mips32le = malta_defconfig
@@ -112,14 +107,11 @@ DEFCONFIG_ppc = pmac32_defconfig
DEFCONFIG_ppc64 = powernv_be_defconfig
DEFCONFIG_ppc64le = powernv_defconfig
DEFCONFIG_riscv32 = rv32_defconfig
-DEFCONFIG_riscv64 = defconfig
-DEFCONFIG_s390x = defconfig
-DEFCONFIG_loongarch = defconfig
DEFCONFIG_sparc32 = sparc32_defconfig
DEFCONFIG_sparc64 = sparc64_defconfig
DEFCONFIG_m68k = virt_defconfig
DEFCONFIG_sh4 = rts7751r2dplus_defconfig
-DEFCONFIG = $(DEFCONFIG_$(XARCH))
+DEFCONFIG = $(or $(DEFCONFIG_$(XARCH)),defconfig)
EXTRACONFIG_x32 = -e CONFIG_X86_X32_ABI
EXTRACONFIG_arm = -e CONFIG_NAMESPACES
--
2.54.0
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH 6/7] selftests/nolibc: trim IMAGE mappings
2026-04-29 20:58 [PATCH 0/7] selftests/nolibc: some build matrix cleanups and optimizations Thomas Weißschuh
` (4 preceding siblings ...)
2026-04-29 20:58 ` [PATCH 5/7] selftests/nolibc: trim DEFCONFIG mappings Thomas Weißschuh
@ 2026-04-29 20:58 ` Thomas Weißschuh
2026-04-29 20:58 ` [PATCH 7/7] selftests/nolibc: use vmlinux for MIPS tests Thomas Weißschuh
2026-05-01 7:57 ` [PATCH 0/7] selftests/nolibc: some build matrix cleanups and optimizations Willy Tarreau
7 siblings, 0 replies; 9+ messages in thread
From: Thomas Weißschuh @ 2026-04-29 20:58 UTC (permalink / raw)
To: Willy Tarreau; +Cc: linux-kernel, Thomas Weißschuh
For many configurations QEMU_ARCH is simply 'vmlinux'.
Slim down the table by automatically falling back to 'vmlinux'.
Signed-off-by: Thomas Weißschuh <linux@weissschuh.net>
---
tools/testing/selftests/nolibc/Makefile.nolibc | 5 +----
1 file changed, 1 insertion(+), 4 deletions(-)
diff --git a/tools/testing/selftests/nolibc/Makefile.nolibc b/tools/testing/selftests/nolibc/Makefile.nolibc
index 1db1c7d9eeee..b728c3ef31a1 100644
--- a/tools/testing/selftests/nolibc/Makefile.nolibc
+++ b/tools/testing/selftests/nolibc/Makefile.nolibc
@@ -80,8 +80,6 @@ IMAGE_mipsn32le = vmlinuz
IMAGE_mipsn32be = vmlinuz
IMAGE_mips64le = vmlinuz
IMAGE_mips64be = vmlinuz
-IMAGE_ppc = vmlinux
-IMAGE_ppc64 = vmlinux
IMAGE_ppc64le = arch/powerpc/boot/zImage
IMAGE_riscv32 = arch/riscv/boot/Image
IMAGE_riscv64 = arch/riscv/boot/Image
@@ -89,9 +87,8 @@ IMAGE_s390x = arch/s390/boot/bzImage
IMAGE_loongarch = arch/loongarch/boot/vmlinuz.efi
IMAGE_sparc32 = arch/sparc/boot/image
IMAGE_sparc64 = arch/sparc/boot/image
-IMAGE_m68k = vmlinux
IMAGE_sh4 = arch/sh/boot/zImage
-IMAGE = $(objtree)/$(IMAGE_$(XARCH))
+IMAGE = $(objtree)/$(or $(IMAGE_$(XARCH)),vmlinux)
IMAGE_NAME = $(notdir $(IMAGE))
# default kernel configurations that appear to be usable
--
2.54.0
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH 7/7] selftests/nolibc: use vmlinux for MIPS tests
2026-04-29 20:58 [PATCH 0/7] selftests/nolibc: some build matrix cleanups and optimizations Thomas Weißschuh
` (5 preceding siblings ...)
2026-04-29 20:58 ` [PATCH 6/7] selftests/nolibc: trim IMAGE mappings Thomas Weißschuh
@ 2026-04-29 20:58 ` Thomas Weißschuh
2026-05-01 7:57 ` [PATCH 0/7] selftests/nolibc: some build matrix cleanups and optimizations Willy Tarreau
7 siblings, 0 replies; 9+ messages in thread
From: Thomas Weißschuh @ 2026-04-29 20:58 UTC (permalink / raw)
To: Willy Tarreau; +Cc: linux-kernel, Thomas Weißschuh
QEMU for MIPS can also load 'vmlinux'. Slim down the table by using
that from the fallback.
Signed-off-by: Thomas Weißschuh <linux@weissschuh.net>
---
tools/testing/selftests/nolibc/Makefile.nolibc | 6 ------
1 file changed, 6 deletions(-)
diff --git a/tools/testing/selftests/nolibc/Makefile.nolibc b/tools/testing/selftests/nolibc/Makefile.nolibc
index b728c3ef31a1..41d616a01db5 100644
--- a/tools/testing/selftests/nolibc/Makefile.nolibc
+++ b/tools/testing/selftests/nolibc/Makefile.nolibc
@@ -74,12 +74,6 @@ IMAGE_x86 = arch/x86/boot/bzImage
IMAGE_arm64 = arch/arm64/boot/Image
IMAGE_arm = arch/arm/boot/zImage
IMAGE_armthumb = arch/arm/boot/zImage
-IMAGE_mips32le = vmlinuz
-IMAGE_mips32be = vmlinuz
-IMAGE_mipsn32le = vmlinuz
-IMAGE_mipsn32be = vmlinuz
-IMAGE_mips64le = vmlinuz
-IMAGE_mips64be = vmlinuz
IMAGE_ppc64le = arch/powerpc/boot/zImage
IMAGE_riscv32 = arch/riscv/boot/Image
IMAGE_riscv64 = arch/riscv/boot/Image
--
2.54.0
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH 0/7] selftests/nolibc: some build matrix cleanups and optimizations
2026-04-29 20:58 [PATCH 0/7] selftests/nolibc: some build matrix cleanups and optimizations Thomas Weißschuh
` (6 preceding siblings ...)
2026-04-29 20:58 ` [PATCH 7/7] selftests/nolibc: use vmlinux for MIPS tests Thomas Weißschuh
@ 2026-05-01 7:57 ` Willy Tarreau
7 siblings, 0 replies; 9+ messages in thread
From: Willy Tarreau @ 2026-05-01 7:57 UTC (permalink / raw)
To: Thomas Weißschuh; +Cc: linux-kernel
Hi Thomas,
On Wed, Apr 29, 2026 at 10:58:34PM +0200, Thomas Weißschuh wrote:
> Signed-off-by: Thomas Weißschuh <linux@weissschuh.net>
> ---
> Thomas Weißschuh (7):
> selftests/nolibc: align QEMU_ARCH_mips32be
> selftests/nolibc: drop riscv configuration
> selftests/nolibc: use QEMU_ARCH for QEMU_ARCH_USER
> selftests/nolibc: trim QEMU_ARCH mappings
> selftests/nolibc: trim DEFCONFIG mappings
> selftests/nolibc: trim IMAGE mappings
> selftests/nolibc: use vmlinux for MIPS tests
>
> tools/testing/selftests/nolibc/Makefile.nolibc | 42 +++-----------------------
> 1 file changed, 5 insertions(+), 37 deletions(-)
The whole series looks good, thank you!
Acked-by: Willy Tarreau <w@1wt.eu>
Willy
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2026-05-01 7:57 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-04-29 20:58 [PATCH 0/7] selftests/nolibc: some build matrix cleanups and optimizations Thomas Weißschuh
2026-04-29 20:58 ` [PATCH 1/7] selftests/nolibc: align QEMU_ARCH_mips32be Thomas Weißschuh
2026-04-29 20:58 ` [PATCH 2/7] selftests/nolibc: drop riscv configuration Thomas Weißschuh
2026-04-29 20:58 ` [PATCH 3/7] selftests/nolibc: use QEMU_ARCH for QEMU_ARCH_USER Thomas Weißschuh
2026-04-29 20:58 ` [PATCH 4/7] selftests/nolibc: trim QEMU_ARCH mappings Thomas Weißschuh
2026-04-29 20:58 ` [PATCH 5/7] selftests/nolibc: trim DEFCONFIG mappings Thomas Weißschuh
2026-04-29 20:58 ` [PATCH 6/7] selftests/nolibc: trim IMAGE mappings Thomas Weißschuh
2026-04-29 20:58 ` [PATCH 7/7] selftests/nolibc: use vmlinux for MIPS tests Thomas Weißschuh
2026-05-01 7:57 ` [PATCH 0/7] selftests/nolibc: some build matrix cleanups and optimizations Willy Tarreau
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox