From ab1d5052de53479377c961d1e966f0cf0b82c592 Mon Sep 17 00:00:00 2001 From: Simon Marlow Date: Fri, 3 Jul 2009 07:45:27 +0000 Subject: [PATCH] Improved infrastructure for fast-rebuilding of parts of the tree e.g. cd compiler make FAST=YES stage1/build/HscTypes.o builds just the specified .o file, without rebuilding dependencies, and omitting some of the makefile phases. FAST=YES works anywhere, to omit depenencies and phases. 'make fast' is shorthand for 'make all FAST=YES'. --- compiler/Makefile | 8 +++++--- ghc/Makefile | 8 +++++--- mk/sub-makefile.mk | 22 +++++++++++++++++----- 3 files changed, 27 insertions(+), 11 deletions(-) diff --git a/compiler/Makefile b/compiler/Makefile index 7618f68..cde254a 100644 --- a/compiler/Makefile +++ b/compiler/Makefile @@ -15,16 +15,18 @@ TOP = .. SPEC_TARGETS = 1 2 3 include $(TOP)/mk/sub-makefile.mk +FAST_MAKE_OPTS += compiler_stage1_NO_BUILD_DEPS=YES compiler_stage2_NO_BUILD_DEPS=YES compiler_stage3_NO_BUILD_DEPS=YES + .PHONY: 1 2 3 1: - +$(TOPMAKE) stage=1 all_ghc_stage1 compiler_stage1_NO_BUILD_DEPS=YES OMIT_PHASE_1=YES OMIT_PHASE_2=YES OMIT_PHASE_3=YES + +$(TOPMAKE) stage=1 all_ghc_stage1 $(FAST_MAKE_OPTS) 2: - +$(TOPMAKE) stage=2 all_ghc_stage2 compiler_stage2_NO_BUILD_DEPS=YES OMIT_PHASE_1=YES OMIT_PHASE_2=YES OMIT_PHASE_3=YES + +$(TOPMAKE) stage=2 all_ghc_stage2 $(FAST_MAKE_OPTS) 3: - +$(TOPMAKE) stage=3 all_ghc_stage3 compiler_stage3_NO_BUILD_DEPS=YES OMIT_PHASE_1=YES OMIT_PHASE_2=YES OMIT_PHASE_3=YES + +$(TOPMAKE) stage=3 all_ghc_stage3 $(FAST_MAKE_OPTS) .PHONY: extra-help help : extra-help diff --git a/ghc/Makefile b/ghc/Makefile index 7e6b416..669c938 100644 --- a/ghc/Makefile +++ b/ghc/Makefile @@ -15,16 +15,18 @@ TOP = .. SPEC_TARGETS = 1 2 3 include $(TOP)/mk/sub-makefile.mk +FAST_MAKE_OPTS += compiler_stage1_NO_BUILD_DEPS=YES compiler_stage2_NO_BUILD_DEPS=YES compiler_stage3_NO_BUILD_DEPS=YES + .PHONY: 1 2 3 1: - +$(TOPMAKE) stage=1 all_ghc_stage1 compiler_stage1_NO_BUILD_DEPS=YES + +$(TOPMAKE) stage=1 all_ghc_stage1 $(FAST_MAKE_OPTS) 2: - +$(TOPMAKE) stage=2 all_ghc_stage2 compiler_stage2_NO_BUILD_DEPS=YES + +$(TOPMAKE) stage=2 all_ghc_stage2 $(FAST_MAKE_OPTS) 3: - +$(TOPMAKE) stage=3 all_ghc_stage3 compiler_stage3_NO_BUILD_DEPS=YES + +$(TOPMAKE) stage=3 all_ghc_stage3 $(FAST_MAKE_OPTS) .PHONY: extra-help help : extra-help diff --git a/mk/sub-makefile.mk b/mk/sub-makefile.mk index 989c0c9..caeefa6 100644 --- a/mk/sub-makefile.mk +++ b/mk/sub-makefile.mk @@ -16,9 +16,21 @@ TOPMAKE = $(MAKE) -C $(TOP) default: all -fast : - +$(TOPMAKE) all_$(dir) $(dir)_dist-install_NO_BUILD_DEPS=YES \ - OMIT_PHASE_1=YES OMIT_PHASE_2=YES OMIT_PHASE_3=YES +fast: all + +FAST_MAKE_OPTS =\ + $(dir)_dist_NO_BUILD_DEPS=YES \ + $(dir)_dist-boot_NO_BUILD_DEPS=YES \ + $(dir)_dist-install_NO_BUILD_DEPS=YES \ + OMIT_PHASE_1=YES OMIT_PHASE_2=YES OMIT_PHASE_3=YES + +ifneq "$(filter fast,$(MAKECMDGOALS))" "" +EXTRA_MAKE_OPTS += $(FAST_MAKE_OPTS) +else +ifeq "$(FAST)" "YES" +EXTRA_MAKE_OPTS += $(FAST_MAKE_OPTS) +endif +endif # We must not execute multiple recursive invocations of make in parallel. .NOTPARALLEL: @@ -28,12 +40,12 @@ STD_TARGETS = all clean distclean maintainer_clean install html ps pdf # The + tells make that we're recursively invoking make, otherwise 'make -j2' # goes wrong. $(STD_TARGETS): - +$(TOPMAKE) $@_$(dir) + +$(TOPMAKE) $@_$(dir) $(EXTRA_MAKE_OPTS) OTHERTARGETS=$(filter-out fast help $(STD_TARGETS) $(SPEC_TARGETS),$(MAKECMDGOALS)) .PHONY: $(OTHERTARGETS) $(OTHERTARGETS): - +$(TOPMAKE) $(dir)/$@ + +$(TOPMAKE) $(dir)/$@ $(EXTRA_MAKE_OPTS) .PHONY: help help : sub-help -- 1.7.10.4