libct/dmz: Support compiling on all arches

When we added nolibc, we started using it unconditionally. But runc is
currently being compiled on more arches than supported by nolibc, like
MIPS.

Let's compile using stdlib if the arch we are compiling on is not
supported by nolibc.

If compilation is broken in some arch, just removing it from the
NOLIBC_GOARCHES variable should fix the compilation, as it will fallback
to use the C stdlib.

Signed-off-by: Rodrigo Campos <rodrigoca@microsoft.com>
This commit is contained in:
Rodrigo Campos
2023-10-18 14:42:16 +02:00
parent ac78d13271
commit b6a0c483b7
3 changed files with 23 additions and 5 deletions
+15 -3
View File
@@ -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
ifneq (,$(filter $(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 $@
+2
View File
@@ -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
+6 -2
View File
@@ -1,5 +1,9 @@
#include "xstat.h"
#include "nolibc/nolibc.h"
#ifdef RUNC_USE_STDLIB
# include <unistd.h>
#else
# include "xstat.h"
# include "nolibc/nolibc.h"
#endif
extern char **environ;