Skip to content

Commit

Permalink
libct/dmz: Support compiling on all arches
Browse files Browse the repository at this point in the history
When we added nolibc, we use 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 <[email protected]>
  • Loading branch information
rata committed Oct 18, 2023
1 parent 96a61d3 commit f9f7932
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 3 deletions.
18 changes: 15 additions & 3 deletions libcontainer/dmz/Makefile
Original file line number Diff line number Diff line change
@@ -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 $@
2 changes: 2 additions & 0 deletions libcontainer/dmz/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
4 changes: 4 additions & 0 deletions libcontainer/dmz/_dmz.c
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
#ifdef RUNC_USE_STDLIB
#include <unistd.h>
#else
#include "xstat.h"
#include "nolibc/nolibc.h"
#endif

extern char **environ;

Expand Down

0 comments on commit f9f7932

Please sign in to comment.