Don't rebuild dependency files unnecessarily when doing "make 1" etc
[ghc-hetmet.git] / rules / build-dependencies.mk
index 7a05803..a1b55b6 100644 (file)
 #
 # -----------------------------------------------------------------------------
 
-define build-dependencies # args: $1 = dir, $2 = distdir
+define build-dependencies
+# $1 = dir
+# $2 = distdir
+# $3 = GHC stage to use (0 == bootstrapping compiler)
 
 $1_$2_depfile_haskell = $$($1_$2_depfile_base).haskell
 $1_$2_depfile_c_asm = $$($1_$2_depfile_base).c_asm
 
 $1_$2_C_FILES_DEPS = $$(filter-out $$($1_$2_C_FILES_NODEPS),$$($1_$2_C_FILES))
 
-$1_$2_MKDEPENDHS_FLAGS = -include-pkg-deps -dep-makefile $$($1_$2_depfile_haskell).tmp $$(foreach way,$$(filter-out v,$$($1_$2_WAYS)),-dep-suffix $$(way))
+$1_$2_MKDEPENDHS_FLAGS = -dep-makefile $$($1_$2_depfile_haskell).tmp $$(foreach way,$$(filter-out v,$$($1_$2_WAYS)),-dep-suffix $$(way))
+ifneq "$3" "0"
+$1_$2_MKDEPENDHS_FLAGS += -include-pkg-deps
+endif
 
 ifneq "$$($1_$2_NO_BUILD_DEPS)" "YES"
 
@@ -61,13 +67,22 @@ endif # $1_$2_NO_BUILD_DEPS
 $$($1_$2_depfile_haskell) : $$(UNLIT)
 
 ifneq "$$(NO_INCLUDE_DEPS)" "YES"
+# This next test stops us rebuilding all the dep files when doing e.g.
+# "make 1" in compiler or ghc. If stage is blank (just building normally.
+# so we want all deps), or if $3 is stage-1 (when building stage n, we
+# use stage n-1, so we want any dependencies used by the stage n-1
+# compiler), then we want to include the dependencies.
+ifneq "$$(or $$(if $$(stage),,YES),$$(findstring $3,$$(word $$(stage),0 1 2 3)))" ""
+ifneq "$$(strip $$($1_$2_HS_SRCS) $$($1_$2_HS_BOOT_SRCS))" ""
 include $$($1_$2_depfile_haskell)
+endif
 include $$($1_$2_depfile_c_asm)
 else
 ifeq "$$(DEBUG)" "YES"
 $$(warning not building dependencies in $1)
 endif
 endif
+endif
 
 endef