From 94500fb127b56a518ec845ad10d1d2958071c210 Mon Sep 17 00:00:00 2001 From: Sam Clegg Date: Thu, 19 Oct 2017 17:28:13 -0700 Subject: [PATCH] [WebAssembly] Enable building with 'make' command This change enables all of the .c sources in musl be built with the clang -target wasm32-unknown-unknown-wasm --- Makefile | 20 ++++++++++++++------ arch/wasm32/atomic_arch.h | 4 +++- arch/wasm32/bits/fcntl.h | 1 + arch/wasm32/bits/float.h | 6 +++--- arch/wasm32/bits/signal.h | 5 +++++ arch/wasm32/bits/syscall.h | 3 +++ arch/wasm32/pthread_arch.h | 2 ++ arch/wasm32/reloc.h | 1 + 8 files changed, 32 insertions(+), 10 deletions(-) create mode 100644 arch/wasm32/reloc.h diff --git a/Makefile b/Makefile index de30a607..cc6550a5 100644 --- a/Makefile +++ b/Makefile @@ -53,13 +53,27 @@ ARCH_INCLUDES = $(wildcard $(srcdir)/arch/$(ARCH)/bits/*.h) INCLUDES = $(wildcard $(srcdir)/include/*.h $(srcdir)/include/*/*.h) ALL_INCLUDES = $(sort $(INCLUDES:$(srcdir)/%=%) $(GENH:obj/%=%) $(ARCH_INCLUDES:$(srcdir)/arch/$(ARCH)/%=include/%)) +-include config.mak + +ifeq ($(ARCH),) +$(error Please set ARCH in config.mak before running make.) +endif + EMPTY_LIB_NAMES = m rt pthread crypt util xnet resolv dl EMPTY_LIBS = $(EMPTY_LIB_NAMES:%=lib/lib%.a) +ifeq ($(ARCH),wasm32) +CRT_LIBS = lib/crt1.o lib/Scrt1.o lib/rcrt1.o +else CRT_LIBS = lib/crt1.o lib/Scrt1.o lib/rcrt1.o lib/crti.o lib/crtn.o +endif STATIC_LIBS = lib/libc.a SHARED_LIBS = lib/libc.so TOOL_LIBS = lib/musl-gcc.specs +ifeq ($(ARCH),wasm32) +ALL_LIBS = $(CRT_LIBS) $(STATIC_LIBS) $(EMPTY_LIBS) $(TOOL_LIBS) +else ALL_LIBS = $(CRT_LIBS) $(STATIC_LIBS) $(SHARED_LIBS) $(EMPTY_LIBS) $(TOOL_LIBS) +endif ALL_TOOLS = obj/musl-gcc WRAPCC_GCC = gcc @@ -67,12 +81,6 @@ WRAPCC_CLANG = clang LDSO_PATHNAME = $(syslibdir)/ld-musl-$(ARCH)$(SUBARCH).so.1 --include config.mak - -ifeq ($(ARCH),) -$(error Please set ARCH in config.mak before running make.) -endif - all: $(ALL_LIBS) $(ALL_TOOLS) OBJ_DIRS = $(sort $(patsubst %/,%,$(dir $(ALL_LIBS) $(ALL_TOOLS) $(OBJS) $(LDSO_OBJS) $(GENH) $(GENH_INT))) $(addprefix obj/, crt crt/$(ARCH) include)) diff --git a/arch/wasm32/atomic_arch.h b/arch/wasm32/atomic_arch.h index f881bb2a..d067050b 100644 --- a/arch/wasm32/atomic_arch.h +++ b/arch/wasm32/atomic_arch.h @@ -1,7 +1,9 @@ #ifndef __NR_restart_syscall -#include +#include #endif +#include + #define a_barrier() syscall(__NR_membarrier) #define a_cas(p, t, s) (abort(), s) diff --git a/arch/wasm32/bits/fcntl.h b/arch/wasm32/bits/fcntl.h index 97bdfd61..900601b1 100644 --- a/arch/wasm32/bits/fcntl.h +++ b/arch/wasm32/bits/fcntl.h @@ -15,6 +15,7 @@ #define O_DIRECT 040000 #define O_LARGEFILE 0100000 #define O_NOATIME 01000000 +#define O_PATH 010000000 #define O_TMPFILE 020000000 #define O_NDELAY O_NONBLOCK diff --git a/arch/wasm32/bits/float.h b/arch/wasm32/bits/float.h index c4a655e7..71cf6ebb 100644 --- a/arch/wasm32/bits/float.h +++ b/arch/wasm32/bits/float.h @@ -5,9 +5,9 @@ #define LDBL_MAX 1.79769313486231570815e+308L #define LDBL_EPSILON 2.22044604925031308085e-16L -#define LDBL_MANT_DIG 53 -#define LDBL_MIN_EXP (-1021) -#define LDBL_MAX_EXP 1024 +#define LDBL_MANT_DIG 64 +#define LDBL_MIN_EXP (-16381) +#define LDBL_MAX_EXP 16384 #define LDBL_DIG 15 #define LDBL_MIN_10_EXP (-307) diff --git a/arch/wasm32/bits/signal.h b/arch/wasm32/bits/signal.h index 523a61d2..58bc5e2c 100644 --- a/arch/wasm32/bits/signal.h +++ b/arch/wasm32/bits/signal.h @@ -1,6 +1,11 @@ #if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \ || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) || defined(_BSD_SOURCE) +#if defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) || defined(_BSD_SOURCE) +#define MINSIGSTKSZ 2048 +#define SIGSTKSZ 8192 +#endif + #ifdef _GNU_SOURCE #define REG_GS 0 #define REG_FS 1 diff --git a/arch/wasm32/bits/syscall.h b/arch/wasm32/bits/syscall.h index 082403dd..a4ee355d 100644 --- a/arch/wasm32/bits/syscall.h +++ b/arch/wasm32/bits/syscall.h @@ -697,4 +697,7 @@ #define SYS_process_vm_writev 348 #define SYS_kcmp 349 #define SYS_finit_module 350 +#define SYS_recvmmsg 357 +#define SYS_fanotify_init 367 +#define SYS_fanotify_mark 368 #define SYS_membarrier 375 diff --git a/arch/wasm32/pthread_arch.h b/arch/wasm32/pthread_arch.h index 683847bc..72e68781 100644 --- a/arch/wasm32/pthread_arch.h +++ b/arch/wasm32/pthread_arch.h @@ -3,3 +3,5 @@ static inline struct pthread *__pthread_self(void) { return pthread_self(); } #define TP_ADJ(p) (p) #define CANCEL_REG_IP 16 + +#define MC_PC gregs[REG_EIP] diff --git a/arch/wasm32/reloc.h b/arch/wasm32/reloc.h new file mode 100644 index 00000000..91b48403 --- /dev/null +++ b/arch/wasm32/reloc.h @@ -0,0 +1 @@ +#define LDSO_ARCH "wasm32"