Browse Source

Avoid using absolute pathnames in Makefile. NFC (#400)

This makes the output of the build a lot more concise and easy to read.

The only real change here is to build each of the crt1 startup files
individually instead to trying to build them all in a single clang
invocation (that latter doesn't allow for -o to be specified which is
a pretty severe limitation, so its best avoided anyway).

It also reduces the size of the `ar` command line for libc itself from
78017 to 43609 (on my machine), which sadly is still tool long for win32
I believe.
pull/399/head
Sam Clegg 2 years ago
committed by GitHub
parent
commit
7069071858
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 34
      Makefile

34
Makefile

@ -20,7 +20,7 @@ MALLOC_IMPL ?= dlmalloc
# yes or no # yes or no
BUILD_LIBC_TOP_HALF ?= yes BUILD_LIBC_TOP_HALF ?= yes
# The directory where we will store intermediate artifacts. # The directory where we will store intermediate artifacts.
OBJDIR ?= $(CURDIR)/build/$(TARGET_TRIPLE) OBJDIR ?= build/$(TARGET_TRIPLE)
# When the length is no larger than this threshold, we consider the # When the length is no larger than this threshold, we consider the
# overhead of bulk memory opcodes to outweigh the performance benefit, # overhead of bulk memory opcodes to outweigh the performance benefit,
@ -43,13 +43,13 @@ endif
# These variables describe the locations of various files and directories in # These variables describe the locations of various files and directories in
# the source tree. # the source tree.
DLMALLOC_DIR = $(CURDIR)/dlmalloc DLMALLOC_DIR = dlmalloc
DLMALLOC_SRC_DIR = $(DLMALLOC_DIR)/src DLMALLOC_SRC_DIR = $(DLMALLOC_DIR)/src
DLMALLOC_SOURCES = $(DLMALLOC_SRC_DIR)/dlmalloc.c DLMALLOC_SOURCES = $(DLMALLOC_SRC_DIR)/dlmalloc.c
DLMALLOC_INC = $(DLMALLOC_DIR)/include DLMALLOC_INC = $(DLMALLOC_DIR)/include
EMMALLOC_DIR = $(CURDIR)/emmalloc EMMALLOC_DIR = emmalloc
EMMALLOC_SOURCES = $(EMMALLOC_DIR)/emmalloc.c EMMALLOC_SOURCES = $(EMMALLOC_DIR)/emmalloc.c
LIBC_BOTTOM_HALF_DIR = $(CURDIR)/libc-bottom-half LIBC_BOTTOM_HALF_DIR = libc-bottom-half
LIBC_BOTTOM_HALF_CLOUDLIBC_SRC = $(LIBC_BOTTOM_HALF_DIR)/cloudlibc/src 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_CLOUDLIBC_SRC_INC = $(LIBC_BOTTOM_HALF_CLOUDLIBC_SRC)/include
LIBC_BOTTOM_HALF_HEADERS_PUBLIC = $(LIBC_BOTTOM_HALF_DIR)/headers/public LIBC_BOTTOM_HALF_HEADERS_PUBLIC = $(LIBC_BOTTOM_HALF_DIR)/headers/public
@ -79,7 +79,7 @@ LIBWASI_EMULATED_SIGNAL_MUSL_SOURCES = \
$(LIBC_TOP_HALF_MUSL_SRC_DIR)/signal/psignal.c \ $(LIBC_TOP_HALF_MUSL_SRC_DIR)/signal/psignal.c \
$(LIBC_TOP_HALF_MUSL_SRC_DIR)/string/strsignal.c $(LIBC_TOP_HALF_MUSL_SRC_DIR)/string/strsignal.c
LIBC_BOTTOM_HALF_CRT_SOURCES = $(wildcard $(LIBC_BOTTOM_HALF_DIR)/crt/*.c) LIBC_BOTTOM_HALF_CRT_SOURCES = $(wildcard $(LIBC_BOTTOM_HALF_DIR)/crt/*.c)
LIBC_TOP_HALF_DIR = $(CURDIR)/libc-top-half LIBC_TOP_HALF_DIR = libc-top-half
LIBC_TOP_HALF_MUSL_DIR = $(LIBC_TOP_HALF_DIR)/musl LIBC_TOP_HALF_MUSL_DIR = $(LIBC_TOP_HALF_DIR)/musl
LIBC_TOP_HALF_MUSL_SRC_DIR = $(LIBC_TOP_HALF_MUSL_DIR)/src LIBC_TOP_HALF_MUSL_SRC_DIR = $(LIBC_TOP_HALF_MUSL_DIR)/src
LIBC_TOP_HALF_MUSL_INC = $(LIBC_TOP_HALF_MUSL_DIR)/include LIBC_TOP_HALF_MUSL_INC = $(LIBC_TOP_HALF_MUSL_DIR)/include
@ -346,8 +346,8 @@ CFLAGS += -isystem "$(SYSROOT_INC)"
# These variables describe the locations of various files and directories in # These variables describe the locations of various files and directories in
# the build tree. # the build tree.
objs = $(patsubst $(CURDIR)/%.c,$(OBJDIR)/%.o,$(1)) objs = $(patsubst %.c,$(OBJDIR)/%.o,$(1))
asmobjs = $(patsubst $(CURDIR)/%.s,$(OBJDIR)/%.o,$(1)) asmobjs = $(patsubst %.s,$(OBJDIR)/%.o,$(1))
DLMALLOC_OBJS = $(call objs,$(DLMALLOC_SOURCES)) DLMALLOC_OBJS = $(call objs,$(DLMALLOC_SOURCES))
EMMALLOC_OBJS = $(call objs,$(EMMALLOC_SOURCES)) EMMALLOC_OBJS = $(call objs,$(EMMALLOC_SOURCES))
LIBC_BOTTOM_HALF_ALL_OBJS = $(call objs,$(LIBC_BOTTOM_HALF_ALL_SOURCES)) LIBC_BOTTOM_HALF_ALL_OBJS = $(call objs,$(LIBC_BOTTOM_HALF_ALL_SOURCES))
@ -376,6 +376,7 @@ LIBWASI_EMULATED_PROCESS_CLOCKS_OBJS = $(call objs,$(LIBWASI_EMULATED_PROCESS_CL
LIBWASI_EMULATED_GETPID_OBJS = $(call objs,$(LIBWASI_EMULATED_GETPID_SOURCES)) LIBWASI_EMULATED_GETPID_OBJS = $(call objs,$(LIBWASI_EMULATED_GETPID_SOURCES))
LIBWASI_EMULATED_SIGNAL_OBJS = $(call objs,$(LIBWASI_EMULATED_SIGNAL_SOURCES)) LIBWASI_EMULATED_SIGNAL_OBJS = $(call objs,$(LIBWASI_EMULATED_SIGNAL_SOURCES))
LIBWASI_EMULATED_SIGNAL_MUSL_OBJS = $(call objs,$(LIBWASI_EMULATED_SIGNAL_MUSL_SOURCES)) LIBWASI_EMULATED_SIGNAL_MUSL_OBJS = $(call objs,$(LIBWASI_EMULATED_SIGNAL_MUSL_SOURCES))
LIBC_BOTTOM_HALF_CRT_OBJS = $(call objs,$(LIBC_BOTTOM_HALF_CRT_SOURCES))
# These variables describe the locations of various files and # These variables describe the locations of various files and
# directories in the generated sysroot tree. # directories in the generated sysroot tree.
@ -514,19 +515,19 @@ $(BULK_MEMORY_OBJS): CFLAGS += \
$(LIBWASI_EMULATED_SIGNAL_MUSL_OBJS): CFLAGS += \ $(LIBWASI_EMULATED_SIGNAL_MUSL_OBJS): CFLAGS += \
-D_WASI_EMULATED_SIGNAL -D_WASI_EMULATED_SIGNAL
$(OBJDIR)/%.long-double.o: $(CURDIR)/%.c include_dirs $(OBJDIR)/%.long-double.o: %.c include_dirs
@mkdir -p "$(@D)" @mkdir -p "$(@D)"
$(CC) $(CFLAGS) -MD -MP -o $@ -c $< $(CC) $(CFLAGS) -MD -MP -o $@ -c $<
$(OBJDIR)/%.no-floating-point.o: $(CURDIR)/%.c include_dirs $(OBJDIR)/%.no-floating-point.o: %.c include_dirs
@mkdir -p "$(@D)" @mkdir -p "$(@D)"
$(CC) $(CFLAGS) -MD -MP -o $@ -c $< $(CC) $(CFLAGS) -MD -MP -o $@ -c $<
$(OBJDIR)/%.o: $(CURDIR)/%.c include_dirs $(OBJDIR)/%.o: %.c include_dirs
@mkdir -p "$(@D)" @mkdir -p "$(@D)"
$(CC) $(CFLAGS) -MD -MP -o $@ -c $< $(CC) $(CFLAGS) -MD -MP -o $@ -c $<
$(OBJDIR)/%.o: $(CURDIR)/%.s include_dirs $(OBJDIR)/%.o: %.s include_dirs
@mkdir -p "$(@D)" @mkdir -p "$(@D)"
$(CC) $(ASMFLAGS) -o $@ -c $< $(CC) $(ASMFLAGS) -o $@ -c $<
@ -582,15 +583,12 @@ include_dirs:
# Remove selected header files. # Remove selected header files.
$(RM) $(patsubst %,$(SYSROOT_INC)/%,$(MUSL_OMIT_HEADERS)) $(RM) $(patsubst %,$(SYSROOT_INC)/%,$(MUSL_OMIT_HEADERS))
startup_files: include_dirs startup_files: include_dirs $(LIBC_BOTTOM_HALF_CRT_OBJS)
# #
# Build the startup files. # Install the startup files (crt1.o etc).
# #
@mkdir -p "$(OBJDIR)"
cd "$(OBJDIR)" && \
$(CC) $(CFLAGS) -c $(LIBC_BOTTOM_HALF_CRT_SOURCES) -MD -MP && \
mkdir -p "$(SYSROOT_LIB)" && \ mkdir -p "$(SYSROOT_LIB)" && \
mv *.o "$(SYSROOT_LIB)" cp $(LIBC_BOTTOM_HALF_CRT_OBJS) "$(SYSROOT_LIB)"
libc: include_dirs \ libc: include_dirs \
$(SYSROOT_LIB)/libc.a \ $(SYSROOT_LIB)/libc.a \
@ -708,7 +706,7 @@ check-symbols: startup_files libc
# Check that the computed metadata matches the expected metadata. # Check that the computed metadata matches the expected metadata.
# This ignores whitespace because on Windows the output has CRLF line endings. # This ignores whitespace because on Windows the output has CRLF line endings.
diff -wur "$(CURDIR)/expected/$(TARGET_TRIPLE)" "$(SYSROOT_SHARE)" diff -wur "expected/$(TARGET_TRIPLE)" "$(SYSROOT_SHARE)"
install: finish install: finish
mkdir -p "$(INSTALL_DIR)" mkdir -p "$(INSTALL_DIR)"

Loading…
Cancel
Save