From 706907185814ebe270ed12f2268cae98d47bbb9d Mon Sep 17 00:00:00 2001 From: Sam Clegg Date: Wed, 1 Mar 2023 17:14:42 -0800 Subject: [PATCH] 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. --- Makefile | 34 ++++++++++++++++------------------ 1 file changed, 16 insertions(+), 18 deletions(-) diff --git a/Makefile b/Makefile index 8084ea8f..c31e3d7d 100644 --- a/Makefile +++ b/Makefile @@ -20,7 +20,7 @@ MALLOC_IMPL ?= dlmalloc # yes or no BUILD_LIBC_TOP_HALF ?= yes # 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 # 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 # the source tree. -DLMALLOC_DIR = $(CURDIR)/dlmalloc +DLMALLOC_DIR = dlmalloc DLMALLOC_SRC_DIR = $(DLMALLOC_DIR)/src DLMALLOC_SOURCES = $(DLMALLOC_SRC_DIR)/dlmalloc.c DLMALLOC_INC = $(DLMALLOC_DIR)/include -EMMALLOC_DIR = $(CURDIR)/emmalloc +EMMALLOC_DIR = emmalloc 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_INC = $(LIBC_BOTTOM_HALF_CLOUDLIBC_SRC)/include 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)/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_DIR = libc-top-half 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_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 # the build tree. -objs = $(patsubst $(CURDIR)/%.c,$(OBJDIR)/%.o,$(1)) -asmobjs = $(patsubst $(CURDIR)/%.s,$(OBJDIR)/%.o,$(1)) +objs = $(patsubst %.c,$(OBJDIR)/%.o,$(1)) +asmobjs = $(patsubst %.s,$(OBJDIR)/%.o,$(1)) DLMALLOC_OBJS = $(call objs,$(DLMALLOC_SOURCES)) EMMALLOC_OBJS = $(call objs,$(EMMALLOC_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_SIGNAL_OBJS = $(call objs,$(LIBWASI_EMULATED_SIGNAL_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 # directories in the generated sysroot tree. @@ -514,19 +515,19 @@ $(BULK_MEMORY_OBJS): CFLAGS += \ $(LIBWASI_EMULATED_SIGNAL_MUSL_OBJS): CFLAGS += \ -D_WASI_EMULATED_SIGNAL -$(OBJDIR)/%.long-double.o: $(CURDIR)/%.c include_dirs +$(OBJDIR)/%.long-double.o: %.c include_dirs @mkdir -p "$(@D)" $(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)" $(CC) $(CFLAGS) -MD -MP -o $@ -c $< -$(OBJDIR)/%.o: $(CURDIR)/%.c include_dirs +$(OBJDIR)/%.o: %.c include_dirs @mkdir -p "$(@D)" $(CC) $(CFLAGS) -MD -MP -o $@ -c $< -$(OBJDIR)/%.o: $(CURDIR)/%.s include_dirs +$(OBJDIR)/%.o: %.s include_dirs @mkdir -p "$(@D)" $(CC) $(ASMFLAGS) -o $@ -c $< @@ -582,15 +583,12 @@ include_dirs: # Remove selected header files. $(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)" && \ - mv *.o "$(SYSROOT_LIB)" + cp $(LIBC_BOTTOM_HALF_CRT_OBJS) "$(SYSROOT_LIB)" libc: include_dirs \ $(SYSROOT_LIB)/libc.a \ @@ -708,7 +706,7 @@ check-symbols: startup_files libc # Check that the computed metadata matches the expected metadata. # 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 mkdir -p "$(INSTALL_DIR)"