From bb4ff05d35fdd01dbd4cd61ae9740c01830d6d86 Mon Sep 17 00:00:00 2001 From: Ico Doornekamp Date: Thu, 1 Jun 2023 14:21:15 +0200 Subject: [PATCH] Added NO_AMALG flag to Makefile to build janet from the individual source files instead of from the amalgamated janet.c; this considerably speeds up parallel builds on modern CPUs --- Makefile | 25 ++++++++++++++++++++----- src/boot/boot.janet | 9 +++++---- 2 files changed, 25 insertions(+), 9 deletions(-) diff --git a/Makefile b/Makefile index cd5cfb3f..404f76f2 100644 --- a/Makefile +++ b/Makefile @@ -39,6 +39,8 @@ JANET_PATH?=$(LIBDIR)/janet JANET_MANPATH?=$(PREFIX)/share/man/man1/ JANET_PKG_CONFIG_PATH?=$(LIBDIR)/pkgconfig JANET_DIST_DIR?=janet-dist +JANET_BOOT_FLAGS:=. JANET_PATH '$(JANET_PATH)' +JANET_TARGET_OBJECTS=build/janet.o build/shell.o JPM_TAG?=master DEBUGGER=gdb SONAME_SETTER=-Wl,-soname, @@ -54,6 +56,12 @@ COMMON_CFLAGS:=-std=c99 -Wall -Wextra -Isrc/include -Isrc/conf -fvisibility=hidd BOOT_CFLAGS:=-DJANET_BOOTSTRAP -DJANET_BUILD=$(JANET_BUILD) -O0 $(COMMON_CFLAGS) -g BUILD_CFLAGS:=$(CFLAGS) $(COMMON_CFLAGS) +# Disable amalgamated build +ifeq ($(JANET_NO_AMALG), 1) + JANET_TARGET_OBJECTS+=$(patsubst src/%.c,build/%.bin.o,$(JANET_CORE_SOURCES)) + JANET_BOOT_FLAGS+=image-only +endif + # For installation LDCONFIG:=ldconfig "$(LIBDIR)" @@ -88,7 +96,7 @@ ifeq ($(findstring MINGW,$(UNAME)), MINGW) JANET_BOOT:=$(JANET_BOOT).exe endif -$(shell mkdir -p build/core build/c build/boot) +$(shell mkdir -p build/core build/c build/boot build/mainclient) all: $(JANET_TARGET) $(JANET_LIBRARY) $(JANET_STATIC_LIBRARY) build/janet.h ###################### @@ -172,9 +180,16 @@ $(JANET_BOOT): $(JANET_BOOT_OBJECTS) # Now the reason we bootstrap in the first place build/c/janet.c: $(JANET_BOOT) src/boot/boot.janet - $(RUN) $(JANET_BOOT) . JANET_PATH '$(JANET_PATH)' > $@ + $(RUN) $(JANET_BOOT) $(JANET_BOOT_FLAGS) > $@ cksum $@ +################## +##### Quicky ##### +################## + +build/%.bin.o: src/%.c $(JANET_HEADERS) $(JANET_LOCAL_HEADERS) Makefile + $(HOSTCC) $(BUILD_CFLAGS) -o $@ -c $< + ######################## ##### Amalgamation ##### ######################## @@ -200,13 +215,13 @@ build/janet.o: build/c/janet.c $(JANETCONF_HEADER) src/include/janet.h build/shell.o: build/c/shell.c $(JANETCONF_HEADER) src/include/janet.h $(HOSTCC) $(BUILD_CFLAGS) -c $< -o $@ -$(JANET_TARGET): build/janet.o build/shell.o +$(JANET_TARGET): $(JANET_TARGET_OBJECTS) $(HOSTCC) $(LDFLAGS) $(BUILD_CFLAGS) -o $@ $^ $(CLIBS) -$(JANET_LIBRARY): build/janet.o build/shell.o +$(JANET_LIBRARY): $(JANET_TARGET_OBJECTS) $(HOSTCC) $(LDFLAGS) $(BUILD_CFLAGS) $(SONAME_SETTER)$(SONAME) -shared -o $@ $^ $(CLIBS) -$(JANET_STATIC_LIBRARY): build/janet.o build/shell.o +$(JANET_STATIC_LIBRARY): $(JANET_TARGET_OBJECTS) $(HOSTAR) rcs $@ $^ ################### diff --git a/src/boot/boot.janet b/src/boot/boot.janet index 0004f954..b33f182e 100644 --- a/src/boot/boot.janet +++ b/src/boot/boot.janet @@ -4157,10 +4157,11 @@ (defn do-one-file [fname] - (print "\n/* " fname " */") - (print "#line 0 \"" fname "\"\n") - (def source (slurp fname)) - (print (string/replace-all "\r" "" source))) + (if-not (has-value? boot/args "image-only") (do + (print "\n/* " fname " */") + (print "#line 0 \"" fname "\"\n") + (def source (slurp fname)) + (print (string/replace-all "\r" "" source))))) (do-one-file feature-header)