diff --git a/libcontainer/dmz/Makefile b/libcontainer/dmz/Makefile index 57ff782bd50..c294678b2a8 100644 --- a/libcontainer/dmz/Makefile +++ b/libcontainer/dmz/Makefile @@ -1,7 +1,19 @@ -# Get CC values for cross-compilation. +# Get GO, GOARCH and CC values for cross-compilation. include ../../cc_platform.mk -# We use the flags suggested in nolibc/nolibc.h, it makes the binary very small. +# List of GOARCH that nolibc supports, from: +# https://go.dev/doc/install/source#environment (with GOOS=linux) +# +# See nolibc supported arches in ./nolibc/arch-*.h +NOLIBC_GOARCHES := 386 amd64 arm arm64 loong64 ppc64le riscv64 s390x + +ifeq ($(GOARCH), $(findstring $(GOARCH), $(NOLIBC_GOARCHES))) + # We use the flags suggested in nolibc/nolibc.h, it makes the binary very small. + CFLAGS += -fno-asynchronous-unwind-tables -fno-ident -s -Os -nostdlib -lgcc +else + CFLAGS += -DRUNC_USE_STDLIB +endif + runc-dmz: _dmz.c - $(CC) $(CFLAGS) -fno-asynchronous-unwind-tables -fno-ident -s -Os -nostdlib -lgcc -static -o $@ $^ + $(CC) $(CFLAGS) -static -o $@ $^ $(STRIP) -gs $@ diff --git a/libcontainer/dmz/README.md b/libcontainer/dmz/README.md index 72d577019c1..3cfa913ff68 100644 --- a/libcontainer/dmz/README.md +++ b/libcontainer/dmz/README.md @@ -13,4 +13,6 @@ The current version in that folder is from Linux 6.6-rc3 tag (556fb7131e03b02836 It also support all the architectures we support in runc. +If the GOARCH we use for compiling doesn't support nolibc, it fallbacks to using the C stdlib. + [nolibc-upstream]: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/tools/include/nolibc?h=v6.6-rc3 diff --git a/libcontainer/dmz/_dmz.c b/libcontainer/dmz/_dmz.c index 73ecf25412a..937f7d52273 100644 --- a/libcontainer/dmz/_dmz.c +++ b/libcontainer/dmz/_dmz.c @@ -1,5 +1,9 @@ +#ifdef RUNC_USE_STDLIB +#include +#else #include "xstat.h" #include "nolibc/nolibc.h" +#endif extern char **environ;