chore: build Lean .os in parallel to rest of core (#3682)

Previously, we only did `Init/*.{o,olean}+Lean/*.olean` in parallel
This commit is contained in:
Sebastian Ullrich 2024-03-14 16:14:37 +01:00 committed by GitHub
parent f89ed40618
commit fb2ec54b60
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 10 additions and 7 deletions

View file

@ -36,9 +36,12 @@ export LEAN_PATH += @LEAN_PATH_SEPARATOR@$(OLEAN_OUT)
OBJS = $(addprefix $(OLEAN_OUT)/, $(SRCS:.lean=.olean))
ifdef C_ONLY
# There are no .lean files in stage0/src/
REL_OS = $(patsubst %.c,%.o,$(shell cd $(C_OUT); find $(PKG) $(PKG).c -name '*.c' 2> /dev/null))
NAT_OBJS = $(patsubst %.c,$(TEMP_OUT)/%.o,$(shell cd $(C_OUT); find $(PKG) $(PKG).c -name '*.c' 2> /dev/null))
ALL_NAT_OBJS = $(NAT_OBJS)
else
REL_OS = $(patsubst %.lean,%.o,$(shell find $(PKG) $(PKG).lean -name '*.lean' 2> /dev/null))
NAT_OBJS = $(patsubst %.lean,$(TEMP_OUT)/%.o,$(shell find $(PKG) $(PKG).lean -name '*.lean' 2> /dev/null))
# include `EXTRA_SRC_ROOTS` when compiling individual `.o`s but not when building libraries
ALL_NAT_OBJS = $(patsubst %.lean,$(TEMP_OUT)/%.o,$(SRCS))
endif
SHELL = /usr/bin/env bash -euo pipefail
@ -47,7 +50,7 @@ SHELL = /usr/bin/env bash -euo pipefail
# Disable all default make rules
.SUFFIXES:
objs: $(OBJS)
objs: $(OBJS) $(ALL_NAT_OBJS)
bin: $(BIN_OUT)/$(BIN_NAME)
@ -111,7 +114,7 @@ else
$(LEANC) -c -o $@ $< $(LEANC_OPTS)
endif
$(BIN_OUT)/$(BIN_NAME): $(addprefix $(TEMP_OUT)/,$(REL_OS)) | $(BIN_OUT)
$(BIN_OUT)/$(BIN_NAME): $(NAT_OBJS) | $(BIN_OUT)
ifdef CMAKE_LIKE_OUTPUT
@echo "[ ] Linking $@"
endif
@ -124,13 +127,13 @@ else
endif
ifeq (@CMAKE_SYSTEM_NAME@, Windows)
$(LIB_OUT)/$(STATIC_LIB_NAME): $(addprefix $(TEMP_OUT)/,$(REL_OS)) | $(LIB_OUT)
$(LIB_OUT)/$(STATIC_LIB_NAME): $(NAT_OBJS) | $(LIB_OUT)
@rm -f $@
$(file >$@.in) $(foreach O,$^,$(file >>$@.in,"$O"))
@$(LEAN_AR) rcs $@ @$@.in
@rm -f $@.in
else
$(LIB_OUT)/$(STATIC_LIB_NAME): $(addprefix $(TEMP_OUT)/,$(REL_OS)) | $(LIB_OUT)
$(LIB_OUT)/$(STATIC_LIB_NAME): $(NAT_OBJS) | $(LIB_OUT)
@rm -f $@
# no response file support on macOS, but also no need for them
@$(LEAN_AR) rcs $@ $^

View file

@ -35,7 +35,7 @@ endif
Init:
@mkdir -p "${LIB}/lean/Lean" "${LIB}/lean/Lake"
# Use `+` to use the Make jobserver with `leanmake` for parallelized builds
# Build .oleans of downstream libraries as well for better parallelism
# Build `.olean/.o`s of downstream libraries as well for better parallelism
+"${LEAN_BIN}/leanmake" objs lib PKG=Init $(LEANMAKE_OPTS) LEANC_OPTS+=-DLEAN_EXPORTING \
EXTRA_SRC_ROOTS="Lean Lean.lean"