]> git.proxmox.com Git - wasi-libc.git/blobdiff - Makefile
Don't create dummy libs for libc++/libc++abi (#68)
[wasi-libc.git] / Makefile
index 9acbc60eef92a34ff08775dfb67c08d4941f5c10..8bb1135ed53a971fc2bce0025dc8383ad4bc6b46 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -33,9 +33,8 @@ endif
 # directories in the source tree.
 BASICS_DIR = $(CURDIR)/basics
 BASICS_INC = $(BASICS_DIR)/include
-BASICS_LIBC_DIR = $(BASICS_DIR)/libc
-BASICS_CRT_SOURCES = $(wildcard $(BASICS_LIBC_DIR)/crt*.c)
-BASICS_LIBC_SOURCES = $(BASICS_LIBC_DIR)/string.c
+BASICS_CRT_SOURCES = $(wildcard $(BASICS_DIR)/crt/*.c)
+BASICS_SOURCES = $(wildcard $(BASICS_DIR)/sources/*.c)
 DLMALLOC_DIR = $(CURDIR)/dlmalloc
 DLMALLOC_SRC_DIR = $(DLMALLOC_DIR)/src
 DLMALLOC_SOURCES = $(DLMALLOC_SRC_DIR)/dlmalloc.c
@@ -80,15 +79,26 @@ LIBC_TOP_HALF_MUSL_SOURCES = \
     $(LIBC_TOP_HALF_MUSL_SRC_DIR)/network/htons.c \
     $(LIBC_TOP_HALF_MUSL_SRC_DIR)/network/ntohl.c \
     $(LIBC_TOP_HALF_MUSL_SRC_DIR)/network/ntohs.c \
+    $(LIBC_TOP_HALF_MUSL_SRC_DIR)/network/inet_ntop.c \
+    $(LIBC_TOP_HALF_MUSL_SRC_DIR)/network/inet_pton.c \
+    $(LIBC_TOP_HALF_MUSL_SRC_DIR)/network/inet_aton.c \
+    $(LIBC_TOP_HALF_MUSL_SRC_DIR)/network/in6addr_any.c \
+    $(LIBC_TOP_HALF_MUSL_SRC_DIR)/network/in6addr_loopback.c \
     $(LIBC_TOP_HALF_MUSL_SRC_DIR)/fenv/fenv.c \
     $(LIBC_TOP_HALF_MUSL_SRC_DIR)/fenv/fesetround.c \
+    $(LIBC_TOP_HALF_MUSL_SRC_DIR)/fenv/feupdateenv.c \
+    $(LIBC_TOP_HALF_MUSL_SRC_DIR)/fenv/fesetexceptflag.c \
+    $(LIBC_TOP_HALF_MUSL_SRC_DIR)/fenv/fegetexceptflag.c \
+    $(LIBC_TOP_HALF_MUSL_SRC_DIR)/fenv/feholdexcept.c \
     $(LIBC_TOP_HALF_MUSL_SRC_DIR)/exit/exit.c \
     $(LIBC_TOP_HALF_MUSL_SRC_DIR)/exit/atexit.c \
     $(LIBC_TOP_HALF_MUSL_SRC_DIR)/exit/assert.c \
     $(LIBC_TOP_HALF_MUSL_SRC_DIR)/exit/quick_exit.c \
     $(LIBC_TOP_HALF_MUSL_SRC_DIR)/exit/at_quick_exit.c \
     $(LIBC_TOP_HALF_MUSL_SRC_DIR)/time/strftime.c \
+    $(LIBC_TOP_HALF_MUSL_SRC_DIR)/time/asctime.c \
     $(LIBC_TOP_HALF_MUSL_SRC_DIR)/time/asctime_r.c \
+    $(LIBC_TOP_HALF_MUSL_SRC_DIR)/time/ctime.c \
     $(LIBC_TOP_HALF_MUSL_SRC_DIR)/time/ctime_r.c \
     $(LIBC_TOP_HALF_MUSL_SRC_DIR)/time/wcsftime.c \
     $(LIBC_TOP_HALF_MUSL_SRC_DIR)/time/strptime.c \
@@ -137,12 +147,15 @@ LIBC_TOP_HALF_MUSL_SOURCES = \
     $(wildcard $(LIBC_TOP_HALF_MUSL_SRC_DIR)/prng/*.c) \
     $(wildcard $(LIBC_TOP_HALF_MUSL_SRC_DIR)/conf/*.c) \
     $(wildcard $(LIBC_TOP_HALF_MUSL_SRC_DIR)/ctype/*.c) \
-    $(wildcard $(LIBC_TOP_HALF_MUSL_SRC_DIR)/math/*.c) \
+    $(filter-out %/__signbit.c %/__signbitf.c %/__signbitl.c \
+                 %/__fpclassify.c %/__fpclassifyf.c %/__fpclassifyl.c, \
+                 $(wildcard $(LIBC_TOP_HALF_MUSL_SRC_DIR)/math/*.c)) \
     $(wildcard $(LIBC_TOP_HALF_MUSL_SRC_DIR)/complex/*.c) \
     $(wildcard $(LIBC_TOP_HALF_MUSL_SRC_DIR)/crypt/*.c)
 MUSL_PRINTSCAN_SOURCES = \
     $(LIBC_TOP_HALF_MUSL_SRC_DIR)/internal/floatscan.c \
     $(LIBC_TOP_HALF_MUSL_SRC_DIR)/stdio/vfprintf.c \
+    $(LIBC_TOP_HALF_MUSL_SRC_DIR)/stdio/vfwprintf.c \
     $(LIBC_TOP_HALF_MUSL_SRC_DIR)/stdio/vfscanf.c \
     $(LIBC_TOP_HALF_MUSL_SRC_DIR)/stdlib/strtod.c \
     $(LIBC_TOP_HALF_MUSL_SRC_DIR)/stdlib/wcstod.c
@@ -152,9 +165,9 @@ LIBC_TOP_HALF_ALL_SOURCES = \
     $(LIBC_TOP_HALF_MUSL_SOURCES) \
     $(shell find $(LIBC_TOP_HALF_SOURCES) -name \*.c)
 
-# Set the target variables. The multiarch triple is the same as the
-# regular triple for wasm, except that it excludes the vendor field.
-TARGET_TRIPLE = wasm32-unknown-wasi
+# Set the target variables. Multiarch triples notably omit the vendor
+# field, which happens to be what we do for the main target triple too.
+TARGET_TRIPLE = wasm32-wasi
 MULTIARCH_TRIPLE = wasm32-wasi
 
 # These variables describe the locations of various files and
@@ -183,11 +196,11 @@ endif
 override WASM_CFLAGS += --sysroot="$(SYSROOT)"
 
 objs = $(patsubst $(CURDIR)/%.c,$(OBJDIR)/%.o,$(1))
-override BASICS_LIBC_OBJS = $(call objs,$(BASICS_LIBC_SOURCES))
+override BASICS_OBJS = $(call objs,$(BASICS_SOURCES))
 override DLMALLOC_OBJS = $(call objs,$(DLMALLOC_SOURCES))
 override LIBC_BOTTOM_HALF_ALL_OBJS = $(call objs,$(LIBC_BOTTOM_HALF_ALL_SOURCES))
 override LIBC_TOP_HALF_ALL_OBJS = $(call objs,$(LIBC_TOP_HALF_ALL_SOURCES))
-override LIBC_OBJS := $(BASICS_LIBC_OBJS)
+override LIBC_OBJS := $(BASICS_OBJS)
 ifeq ($(BUILD_DLMALLOC),yes)
 override LIBC_OBJS += $(DLMALLOC_OBJS)
 endif
@@ -232,15 +245,15 @@ $(MUSL_PRINTSCAN_NO_FLOATING_POINT_OBJS): override WASM_CFLAGS += \
            -D__wasilibc_printscan_no_floating_point \
            -D__wasilibc_printscan_floating_point_support_option="\"remove -lc-printscan-no-floating-point from the link command\""
 
-$(OBJDIR)/%.long-double.o: $(CURDIR)/%.c $(SYSROOT_INC)
+$(OBJDIR)/%.long-double.o: $(CURDIR)/%.c include_dirs
        @mkdir -p "$(@D)"
        "$(WASM_CC)" $(WASM_CFLAGS) -MD -MP -o $@ -c $<
 
-$(OBJDIR)/%.no-floating-point.o: $(CURDIR)/%.c $(SYSROOT_INC)
+$(OBJDIR)/%.no-floating-point.o: $(CURDIR)/%.c include_dirs
        @mkdir -p "$(@D)"
        "$(WASM_CC)" $(WASM_CFLAGS) -MD -MP -o $@ -c $<
 
-$(OBJDIR)/%.o: $(CURDIR)/%.c $(SYSROOT_INC)
+$(OBJDIR)/%.o: $(CURDIR)/%.c include_dirs
        @mkdir -p "$(@D)"
        "$(WASM_CC)" $(WASM_CFLAGS) -MD -MP -o $@ -c $<
 
@@ -270,9 +283,7 @@ $(LIBC_TOP_HALF_ALL_OBJS) $(MUSL_PRINTSCAN_LONG_DOUBLE_OBJS) $(MUSL_PRINTSCAN_NO
     -Wno-dangling-else \
     -Wno-unknown-pragmas
 
-$(SYSROOT): startup_files libc finish check
-
-$(SYSROOT_INC):
+include_dirs:
        $(RM) -r "$(SYSROOT)"
 
        #
@@ -368,7 +379,18 @@ $(SYSROOT_INC):
              "$(SYSROOT_INC)/spawn.h" \
              "$(SYSROOT_INC)/ucontext.h" \
              "$(SYSROOT_INC)/sys/ucontext.h" \
-             "$(SYSROOT_INC)/sys/membarrier.h"
+             "$(SYSROOT_INC)/sys/membarrier.h" \
+             "$(SYSROOT_INC)/sys/signalfd.h" \
+             "$(SYSROOT_INC)/termios.h" \
+             "$(SYSROOT_INC)/sys/termios.h" \
+             "$(SYSROOT_INC)/bits/termios.h" \
+             "$(SYSROOT_INC)/net/if.h" \
+             "$(SYSROOT_INC)/net/if_arp.h" \
+             "$(SYSROOT_INC)/net/ethernet.h" \
+             "$(SYSROOT_INC)/net/route.h" \
+             "$(SYSROOT_INC)/netinet/if_ether.h" \
+             "$(SYSROOT_INC)/netinet/ether.h" \
+             "$(SYSROOT_INC)/sys/timerfd.h"
 ifeq ($(THREAD_MODEL), single)
        $(RM) "$(SYSROOT_INC)/aio.h" \
              "$(SYSROOT_INC)/pthread.h"
@@ -380,7 +402,7 @@ else
 override CRT_SOURCES = $(LIBC_BOTTOM_HALF_CRT_SOURCES)
 endif
 
-startup_files: $(SYSROOT_INC)
+startup_files: include_dirs
        #
        # Build the startup files.
        #
@@ -390,17 +412,17 @@ startup_files: $(SYSROOT_INC)
        mkdir -p "$(SYSROOT_LIB)" && \
        mv *.o "$(SYSROOT_LIB)"
 
-libc: $(SYSROOT_INC) \
+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
 
-finish: $(SYSROOT_INC) libc
+finish: startup_files libc
        #
        # Create empty placeholder libraries.
        #
-       for name in m rt pthread crypt util xnet resolv dl c++ c++abi; do \
+       for name in m rt pthread crypt util xnet resolv dl; do \
            $(WASM_AR) crs "$(SYSROOT_LIB)/lib$${name}.a"; \
        done
 
@@ -459,12 +481,12 @@ finish: $(SYSROOT_INC) libc
        # The build succeeded! The generated sysroot is in $(SYSROOT).
        #
 
-check: $(SYSROOT) finish
+check: finish
        # Check that the computed metadata matches the expected metadata.
        diff -ur "$(CURDIR)/expected/$(MULTIARCH_TRIPLE)" "$(SYSROOT_SHARE)"
 
-install: $(SYSROOT)
+install: finish
        mkdir -p "$(INSTALL_DIR)"
        cp -r "$(SYSROOT)/lib" "$(SYSROOT)/share" "$(SYSROOT)/include" "$(INSTALL_DIR)"
 
-.PHONY: $(SYSROOT) default startup_files libc finish check install $(SYSROOT_INC)
+.PHONY: default startup_files libc finish check install include_dirs