Improved infrastructure for fast-rebuilding of parts of the tree
authorSimon Marlow <marlowsd@gmail.com>
Fri, 3 Jul 2009 07:45:27 +0000 (07:45 +0000)
committerSimon Marlow <marlowsd@gmail.com>
Fri, 3 Jul 2009 07:45:27 +0000 (07:45 +0000)
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
ghc/Makefile
mk/sub-makefile.mk

index 7618f68..cde254a 100644 (file)
@@ -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
index 7e6b416..669c938 100644 (file)
@@ -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
index 989c0c9..caeefa6 100644 (file)
@@ -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