build: remove the depend phase/barrier from the top Makefile
With per-file dependencies now generated during compilation (previous commit),
the serial `depend` phase and its barrier are obsolete. Drop SUBDIRS_DEPEND and
the `<dir>/Depend: ${DATABASE_H}` rule, and replace the `module@/lib@/tech@ %:
depend` prerequisite with `: ${DATABASE_H}` -- the only real ordering constraint
is the generated header, not a whole dependency-scanning pass. Modules therefore
start compiling in parallel immediately instead of waiting for every subdir's
deps to be scanned first.
`make depend` is kept as a top-level no-op (the WASM build script still calls
`emmake make depend`).
Verified out-of-tree serial and -j12 and in-tree -j12: rc=0, 375 files, serial
and -j installs byte-identical, zero Depend files, source tree clean.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
1bc8537b5d
commit
eaf42fab01
28
Makefile.in
28
Makefile.in
|
|
@ -96,15 +96,16 @@ ${DATABASE_H}: ${MAGICSRC}/database/database.h.in
|
||||||
prepare: ${DATABASE_H}
|
prepare: ${DATABASE_H}
|
||||||
|
|
||||||
# module@<dir> builds <dir>/lib<dir>.o; lib@<dir> builds <dir>/lib<dir>.a.
|
# module@<dir> builds <dir>/lib<dir>.o; lib@<dir> builds <dir>/lib<dir>.a.
|
||||||
# Every module@/lib@ waits for the whole `depend` phase first (it used to be a
|
# The only thing they must wait for is the generated header (${DATABASE_H}).
|
||||||
# prereq of the `modules`/`libs` aggregates; moving it onto each per-dir target
|
# Header *dependencies* are now discovered automatically per source (.deps, see
|
||||||
# keeps depend before compilation even under -j).
|
# rules.mak), so there is no separate `depend` phase to gate on -- modules start
|
||||||
|
# compiling in parallel immediately.
|
||||||
MODULE_TARGETS := $(addprefix module@,${MODULES})
|
MODULE_TARGETS := $(addprefix module@,${MODULES})
|
||||||
LIB_TARGETS := $(addprefix lib@,${MODULES})
|
LIB_TARGETS := $(addprefix lib@,${MODULES})
|
||||||
.PHONY: $(MODULE_TARGETS) $(LIB_TARGETS)
|
.PHONY: $(MODULE_TARGETS) $(LIB_TARGETS)
|
||||||
$(MODULE_TARGETS): module@%: depend
|
$(MODULE_TARGETS): module@%: ${DATABASE_H}
|
||||||
@$(call submake,$*,module)
|
@$(call submake,$*,module)
|
||||||
$(LIB_TARGETS): lib@%: depend
|
$(LIB_TARGETS): lib@%: ${DATABASE_H}
|
||||||
@$(call submake,$*,lib)
|
@$(call submake,$*,lib)
|
||||||
|
|
||||||
# Cross-module archive edge (-j correctness): libdatabase.a physically archives
|
# Cross-module archive edge (-j correctness): libdatabase.a physically archives
|
||||||
|
|
@ -129,23 +130,20 @@ SUBDIRS = bplane cmwind commands database dbwind debug drc extflat extract graph
|
||||||
|
|
||||||
BUNDLED_MODULES = readline lisp
|
BUNDLED_MODULES = readline lisp
|
||||||
|
|
||||||
# Unique list of all subdir that might have Depend file, we have to deduplicate otherwise
|
# Unique, deduplicated subdir list (used by the clean fan-out below).
|
||||||
# MAKE will warning loudly. This list is somewhat empty when defs.mak does not exist
|
|
||||||
SUBDIRS_FILTERED := $(shell echo ${MODULES} ${PROGRAMS} ${SUBDIRS} | tr ' ' '\n' | sort | uniq)
|
SUBDIRS_FILTERED := $(shell echo ${MODULES} ${PROGRAMS} ${SUBDIRS} | tr ' ' '\n' | sort | uniq)
|
||||||
|
|
||||||
SUBDIRS_DEPEND = $(addsuffix /Depend, ${SUBDIRS_FILTERED})
|
# Dependencies are generated automatically as a side effect of compiling (see
|
||||||
|
# rules.mak .deps); there is no depend phase to run. "make depend" is kept as a
|
||||||
${SUBDIRS_DEPEND}: ${DATABASE_H}
|
# no-op so callers that still invoke it (e.g. the WASM build script) do not error.
|
||||||
@echo --- making dependencies
|
|
||||||
@$(call submake,$(patsubst %/,%,$(dir $@)),depend)
|
|
||||||
|
|
||||||
.PHONY: depend
|
.PHONY: depend
|
||||||
depend: defs.mak ${SUBDIRS_DEPEND}
|
depend:
|
||||||
|
@echo "--- dependencies are generated automatically during compilation"
|
||||||
|
|
||||||
# tech@<dir>: build a technology dir (goal "all").
|
# tech@<dir>: build a technology dir (goal "all").
|
||||||
TECH_TARGETS := $(addprefix tech@,${TECHS})
|
TECH_TARGETS := $(addprefix tech@,${TECHS})
|
||||||
.PHONY: $(TECH_TARGETS)
|
.PHONY: $(TECH_TARGETS)
|
||||||
$(TECH_TARGETS): tech@%: depend
|
$(TECH_TARGETS): tech@%: ${DATABASE_H}
|
||||||
@$(call submake,$*,all)
|
@$(call submake,$*,all)
|
||||||
|
|
||||||
.PHONY: techs
|
.PHONY: techs
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue