]> git.proxmox.com Git - wasi-libc.git/blobdiff - Makefile
Add -Wno-ignored-pragmas.
[wasi-libc.git] / Makefile
index a19507dcd818e77ee34f1358433a5a183b99c28d..bfa49bdbfcfe3fe7709b5e67f62c47801d2e1d0e 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -12,21 +12,13 @@ INSTALL_DIR ?= /usr/local
 THREAD_MODEL ?= single
 # yes or no
 BUILD_DLMALLOC ?= yes
-BUILD_LIBC_BOTTOM_HALF ?= yes
 BUILD_LIBC_TOP_HALF ?= yes
 # The directory where we're store intermediate artifacts.
 OBJDIR ?= $(CURDIR)/build
 
 # Check dependencies.
-ifeq ($(BUILD_LIBC_TOP_HALF),yes)
-ifneq ($(BUILD_LIBC_BOTTOM_HALF),yes)
-$(error BUILD_LIBC_TOP_HALF=yes depends on BUILD_LIBC_BOTTOM_HALF=yes)
-endif
-endif
-ifeq ($(BUILD_LIBC_BOTTOM_HALF),yes)
 ifneq ($(BUILD_DLMALLOC),yes)
-$(error BUILD_LIBC_BOTTOM_HALF=yes depends on BUILD_DLMALLOC=yes)
-endif
+$(error build currently depends on BUILD_DLMALLOC=yes)
 endif
 
 # Variables from this point on are not meant to be overridable via the
@@ -39,12 +31,6 @@ MULTIARCH_TRIPLE = wasm32-wasi
 
 # These variables describe the locations of various files and directories in
 # the source tree.
-BASICS_DIR = $(CURDIR)/basics
-BASICS_INC = $(BASICS_DIR)/include
-BASICS_CRT_SOURCES = $(wildcard $(BASICS_DIR)/crt/*.c)
-BASICS_SOURCES = \
-    $(wildcard $(BASICS_DIR)/sources/*.c) \
-    $(wildcard $(BASICS_DIR)/sources/math/*.c)
 DLMALLOC_DIR = $(CURDIR)/dlmalloc
 DLMALLOC_SRC_DIR = $(DLMALLOC_DIR)/src
 DLMALLOC_SOURCES = $(DLMALLOC_SRC_DIR)/dlmalloc.c
@@ -54,14 +40,25 @@ LIBC_BOTTOM_HALF_CLOUDLIBC_SRC = $(LIBC_BOTTOM_HALF_DIR)/cloudlibc/src
 LIBC_BOTTOM_HALF_CLOUDLIBC_SRC_INC = $(LIBC_BOTTOM_HALF_CLOUDLIBC_SRC)/include
 LIBC_BOTTOM_HALF_HEADERS_PUBLIC = $(LIBC_BOTTOM_HALF_DIR)/headers/public
 LIBC_BOTTOM_HALF_HEADERS_PRIVATE = $(LIBC_BOTTOM_HALF_DIR)/headers/private
-LIBC_BOTTOM_HALF_LIBPREOPEN_DIR = $(LIBC_BOTTOM_HALF_DIR)/libpreopen
 LIBC_BOTTOM_HALF_SOURCES = $(LIBC_BOTTOM_HALF_DIR)/sources
 LIBC_BOTTOM_HALF_ALL_SOURCES = \
     $(shell find $(LIBC_BOTTOM_HALF_CLOUDLIBC_SRC) -name \*.c) \
-    $(LIBC_BOTTOM_HALF_LIBPREOPEN_DIR)/libpreopen.c \
     $(shell find $(LIBC_BOTTOM_HALF_SOURCES) -name \*.c)
+
+# FIXME(https://reviews.llvm.org/D85567) - due to a bug in LLD the weak
+# references to a function defined in `chdir.c` only work if `chdir.c` is at the
+# end of the archive, but once that LLD review lands and propagates into LLVM
+# then we don't have to do this.
+LIBC_BOTTOM_HALF_ALL_SOURCES := $(filter-out $(LIBC_BOTTOM_HALF_SOURCES)/chdir.c,$(LIBC_BOTTOM_HALF_ALL_SOURCES))
+LIBC_BOTTOM_HALF_ALL_SOURCES := $(LIBC_BOTTOM_HALF_ALL_SOURCES) $(LIBC_BOTTOM_HALF_SOURCES)/chdir.c
+
 LIBWASI_EMULATED_MMAN_SOURCES = \
     $(shell find $(LIBC_BOTTOM_HALF_DIR)/mman -name \*.c)
+LIBWASI_EMULATED_SIGNAL_SOURCES = \
+    $(shell find $(LIBC_BOTTOM_HALF_DIR)/signal -name \*.c)
+LIBWASI_EMULATED_SIGNAL_MUSL_SOURCES = \
+    $(LIBC_TOP_HALF_MUSL_SRC_DIR)/signal/psignal.c \
+    $(LIBC_TOP_HALF_MUSL_SRC_DIR)/string/strsignal.c
 LIBC_BOTTOM_HALF_CRT_SOURCES = $(wildcard $(LIBC_BOTTOM_HALF_DIR)/crt/*.c)
 LIBC_TOP_HALF_DIR = $(CURDIR)/libc-top-half
 LIBC_TOP_HALF_MUSL_DIR = $(LIBC_TOP_HALF_DIR)/musl
@@ -187,44 +184,44 @@ LIBC_TOP_HALF_ALL_SOURCES = \
     $(shell find $(LIBC_TOP_HALF_SOURCES) -name \*.c)
 
 # Set the target.
-WASM_CFLAGS += --target=$(TARGET_TRIPLE)
+CFLAGS = $(WASM_CFLAGS) --target=$(TARGET_TRIPLE)
 # WebAssembly floating-point match doesn't trap.
 # TODO: Add -fno-signaling-nans when the compiler supports it.
-WASM_CFLAGS += -fno-trapping-math
+CFLAGS += -fno-trapping-math
+# Add all warnings, but disable a few which occur in third-party code.
+CFLAGS += -Wall -Wextra -Werror \
+  -Wno-null-pointer-arithmetic \
+  -Wno-unused-parameter \
+  -Wno-sign-compare \
+  -Wno-unused-variable \
+  -Wno-unused-function \
+  -Wno-ignored-attributes \
+  -Wno-missing-braces \
+  -Wno-ignored-pragmas
 
 # Configure support for threads.
 ifeq ($(THREAD_MODEL), single)
-WASM_CFLAGS += -mthread-model single
+CFLAGS += -mthread-model single
 endif
 ifeq ($(THREAD_MODEL), posix)
-WASM_CFLAGS += -mthread-model posix -pthread
+CFLAGS += -mthread-model posix -pthread
 endif
 
 # Set the sysroot.
-WASM_CFLAGS += --sysroot="$(SYSROOT)"
+CFLAGS += --sysroot="$(SYSROOT)"
 
 # These variables describe the locations of various files and directories in
 # the build tree.
 objs = $(patsubst $(CURDIR)/%.c,$(OBJDIR)/%.o,$(1))
-BASICS_OBJS = $(call objs,$(BASICS_SOURCES))
 DLMALLOC_OBJS = $(call objs,$(DLMALLOC_SOURCES))
 LIBC_BOTTOM_HALF_ALL_OBJS = $(call objs,$(LIBC_BOTTOM_HALF_ALL_SOURCES))
 LIBC_TOP_HALF_ALL_OBJS = $(call objs,$(LIBC_TOP_HALF_ALL_SOURCES))
-LIBC_OBJS := $(BASICS_OBJS)
 ifeq ($(BUILD_DLMALLOC),yes)
 LIBC_OBJS += $(DLMALLOC_OBJS)
 endif
-ifeq ($(BUILD_LIBC_BOTTOM_HALF),yes)
-# Override basics' string.o with libc-bottom-half's.
-LIBC_OBJS := $(filter-out %/string.o,$(LIBC_OBJS))
 # Add libc-bottom-half's objects.
 LIBC_OBJS += $(LIBC_BOTTOM_HALF_ALL_OBJS)
-endif
 ifeq ($(BUILD_LIBC_TOP_HALF),yes)
-# Override libc-bottom-half's string.o with libc-top-half's.
-LIBC_OBJS := $(filter-out %/string.o,$(LIBC_OBJS))
-# Override libc-bottom-half's qsort.o with libc-top-half's.
-LIBC_OBJS := $(filter-out %/qsort.o,$(LIBC_OBJS))
 # libc-top-half is musl.
 LIBC_OBJS += $(LIBC_TOP_HALF_ALL_OBJS)
 endif
@@ -232,6 +229,8 @@ MUSL_PRINTSCAN_OBJS = $(call objs,$(MUSL_PRINTSCAN_SOURCES))
 MUSL_PRINTSCAN_LONG_DOUBLE_OBJS = $(patsubst %.o,%.long-double.o,$(MUSL_PRINTSCAN_OBJS))
 MUSL_PRINTSCAN_NO_FLOATING_POINT_OBJS = $(patsubst %.o,%.no-floating-point.o,$(MUSL_PRINTSCAN_OBJS))
 LIBWASI_EMULATED_MMAN_OBJS = $(call objs,$(LIBWASI_EMULATED_MMAN_SOURCES))
+LIBWASI_EMULATED_SIGNAL_OBJS = $(call objs,$(LIBWASI_EMULATED_SIGNAL_SOURCES))
+LIBWASI_EMULATED_SIGNAL_MUSL_OBJS = $(call objs,$(LIBWASI_EMULATED_SIGNAL_MUSL_SOURCES))
 
 # These variables describe the locations of various files and
 # directories in the generated sysroot tree.
@@ -316,8 +315,7 @@ MUSL_OMIT_HEADERS += \
     "netinet/ether.h" \
     "sys/timerfd.h" \
     "libintl.h" \
-    "sys/sysmacros.h" \
-    "utime.h"
+    "sys/sysmacros.h"
 
 ifeq ($(THREAD_MODEL), single)
 # Remove headers not supported in single-threaded mode.
@@ -334,6 +332,8 @@ $(SYSROOT_LIB)/libc-printscan-no-floating-point.a: $(MUSL_PRINTSCAN_NO_FLOATING_
 
 $(SYSROOT_LIB)/libwasi-emulated-mman.a: $(LIBWASI_EMULATED_MMAN_OBJS)
 
+$(SYSROOT_LIB)/libwasi-emulated-signal.a: $(LIBWASI_EMULATED_SIGNAL_OBJS) $(LIBWASI_EMULATED_SIGNAL_MUSL_OBJS)
+
 %.a:
        @mkdir -p "$(@D)"
        # On Windows, the commandline for the ar invocation got too long, so it needs to be split up.
@@ -345,37 +345,40 @@ $(SYSROOT_LIB)/libwasi-emulated-mman.a: $(LIBWASI_EMULATED_MMAN_OBJS)
        # silently dropping the tail.
        $(WASM_AR) crs $@ $(wordlist 800, 100000, $^)
 
-$(MUSL_PRINTSCAN_OBJS): WASM_CFLAGS += \
+$(MUSL_PRINTSCAN_OBJS): CFLAGS += \
            -D__wasilibc_printscan_no_long_double \
            -D__wasilibc_printscan_full_support_option="\"add -lc-printscan-long-double to the link command\""
 
-$(MUSL_PRINTSCAN_NO_FLOATING_POINT_OBJS): WASM_CFLAGS += \
+$(MUSL_PRINTSCAN_NO_FLOATING_POINT_OBJS): CFLAGS += \
            -D__wasilibc_printscan_no_floating_point \
            -D__wasilibc_printscan_floating_point_support_option="\"remove -lc-printscan-no-floating-point from the link command\""
 
+$(LIBWASI_EMULATED_SIGNAL_MUSL_OBJS): CFLAGS += \
+           -D_WASI_EMULATED_SIGNAL
+
 $(OBJDIR)/%.long-double.o: $(CURDIR)/%.c include_dirs
        @mkdir -p "$(@D)"
-       "$(WASM_CC)" $(WASM_CFLAGS) -MD -MP -o $@ -c $<
+       "$(WASM_CC)" $(CFLAGS) -MD -MP -o $@ -c $<
 
 $(OBJDIR)/%.no-floating-point.o: $(CURDIR)/%.c include_dirs
        @mkdir -p "$(@D)"
-       "$(WASM_CC)" $(WASM_CFLAGS) -MD -MP -o $@ -c $<
+       "$(WASM_CC)" $(CFLAGS) -MD -MP -o $@ -c $<
 
 $(OBJDIR)/%.o: $(CURDIR)/%.c include_dirs
        @mkdir -p "$(@D)"
-       "$(WASM_CC)" $(WASM_CFLAGS) -MD -MP -o $@ -c $<
+       "$(WASM_CC)" $(CFLAGS) -MD -MP -o $@ -c $<
 
 -include $(shell find $(OBJDIR) -name \*.d)
 
-$(DLMALLOC_OBJS): WASM_CFLAGS += \
+$(DLMALLOC_OBJS): CFLAGS += \
     -I$(DLMALLOC_INC)
 
-startup_files $(LIBC_BOTTOM_HALF_ALL_OBJS): WASM_CFLAGS += \
+startup_files $(LIBC_BOTTOM_HALF_ALL_OBJS): CFLAGS += \
     -I$(LIBC_BOTTOM_HALF_HEADERS_PRIVATE) \
     -I$(LIBC_BOTTOM_HALF_CLOUDLIBC_SRC_INC) \
     -I$(LIBC_BOTTOM_HALF_CLOUDLIBC_SRC)
 
-$(LIBC_TOP_HALF_ALL_OBJS) $(MUSL_PRINTSCAN_LONG_DOUBLE_OBJS) $(MUSL_PRINTSCAN_NO_FLOATING_POINT_OBJS): WASM_CFLAGS += \
+$(LIBC_TOP_HALF_ALL_OBJS) $(MUSL_PRINTSCAN_LONG_DOUBLE_OBJS) $(MUSL_PRINTSCAN_NO_FLOATING_POINT_OBJS) $(LIBWASI_EMULATED_SIGNAL_MUSL_OBJS): CFLAGS += \
     -I$(LIBC_TOP_HALF_MUSL_SRC_DIR)/include \
     -I$(LIBC_TOP_HALF_MUSL_SRC_DIR)/internal \
     -I$(LIBC_TOP_HALF_MUSL_DIR)/arch/wasm32 \
@@ -396,7 +399,6 @@ include_dirs:
        # Install the include files.
        #
        mkdir -p "$(SYSROOT_INC)"
-       cp -r "$(BASICS_INC)" "$(SYSROOT)"
        cp -r "$(LIBC_BOTTOM_HALF_HEADERS_PUBLIC)"/* "$(SYSROOT_INC)"
 
        # Generate musl's bits/alltypes.h header.
@@ -415,19 +417,13 @@ include_dirs:
        # Remove selected header files.
        $(RM) $(patsubst %,$(SYSROOT_INC)/%,$(MUSL_OMIT_HEADERS))
 
-ifeq ($(BUILD_LIBC_BOTTOM_HALF),no)
-CRT_SOURCES = $(BASICS_CRT_SOURCES)
-else
-CRT_SOURCES = $(LIBC_BOTTOM_HALF_CRT_SOURCES)
-endif
-
 startup_files: include_dirs
        #
        # Build the startup files.
        #
        @mkdir -p "$(OBJDIR)"
        cd "$(OBJDIR)" && \
-       "$(WASM_CC)" $(WASM_CFLAGS) -c $(CRT_SOURCES) -MD -MP && \
+       "$(WASM_CC)" $(CFLAGS) -c $(LIBC_BOTTOM_HALF_CRT_SOURCES) -MD -MP && \
        mkdir -p "$(SYSROOT_LIB)" && \
        mv *.o "$(SYSROOT_LIB)"
 
@@ -435,7 +431,8 @@ libc: include_dirs \
     $(SYSROOT_LIB)/libc.a \
     $(SYSROOT_LIB)/libc-printscan-long-double.a \
     $(SYSROOT_LIB)/libc-printscan-no-floating-point.a \
-    $(SYSROOT_LIB)/libwasi-emulated-mman.a
+    $(SYSROOT_LIB)/libwasi-emulated-mman.a \
+    $(SYSROOT_LIB)/libwasi-emulated-signal.a
 
 finish: startup_files libc
        #
@@ -459,7 +456,7 @@ finish: startup_files libc
        @# since these dependencies can vary between llvm versions.
        "$(WASM_NM)" --defined-only "$(SYSROOT_LIB)"/libc.a "$(SYSROOT_LIB)"/*.o \
            |grep ' [[:upper:]] ' |sed 's/.* [[:upper:]] //' |LC_ALL=C sort > "$(SYSROOT_SHARE)/defined-symbols.txt"
-       for undef_sym in $$("$(WASM_NM)" --undefined-only "$(SYSROOT_LIB)"/*.a "$(SYSROOT_LIB)"/*.o \
+       for undef_sym in $$("$(WASM_NM)" --undefined-only "$(SYSROOT_LIB)"/libc.a "$(SYSROOT_LIB)"/libc-*.a "$(SYSROOT_LIB)"/*.o \
            |grep ' U ' |sed 's/.* U //' |LC_ALL=C sort |uniq); do \
            grep -q '\<'$$undef_sym'\>' "$(SYSROOT_SHARE)/defined-symbols.txt" || echo $$undef_sym; \
        done | grep -v "^__mul" > "$(SYSROOT_SHARE)/undefined-symbols.txt"
@@ -470,7 +467,7 @@ finish: startup_files libc
        # Generate a test file that includes all public header files.
        #
        cd "$(SYSROOT)" && \
-         for header in $$(find include -type f -not -name mman.h |grep -v /bits/); do \
+         for header in $$(find include -type f -not -name mman.h -not -name signal.h |grep -v /bits/); do \
              echo '#include <'$$header'>' | sed 's/include\///' ; \
        done |LC_ALL=C sort >share/$(MULTIARCH_TRIPLE)/include-all.c ; \
        cd - >/dev/null
@@ -478,7 +475,7 @@ finish: startup_files libc
        #
        # Test that it compiles.
        #
-       "$(WASM_CC)" $(WASM_CFLAGS) -fsyntax-only "$(SYSROOT_SHARE)/include-all.c" -Wno-\#warnings
+       "$(WASM_CC)" $(CFLAGS) -fsyntax-only "$(SYSROOT_SHARE)/include-all.c" -Wno-\#warnings
 
        #
        # Collect all the predefined macros, except for compiler version macros
@@ -494,7 +491,7 @@ finish: startup_files libc
        @#
        @# TODO: Undefine __FLOAT128__ for now since it's not in clang 8.0.
        @# TODO: Filter out __FLT16_* for now, as not all versions of clang have these.
-       "$(WASM_CC)" $(WASM_CFLAGS) "$(SYSROOT_SHARE)/include-all.c" \
+       "$(WASM_CC)" $(CFLAGS) "$(SYSROOT_SHARE)/include-all.c" \
            -isystem $(SYSROOT_INC) \
            -std=gnu17 \
            -E -dM -Wno-\#warnings \