X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc.mk;h=150ca7d06037afac3a2155336dc2889782ba11ed;hb=5e578e123d59c9590b4cf72515db448380de89bb;hp=3348d47b535b8c887ef8bbe509d85f2a86ca0f5d;hpb=b6fa4b36c7b0c38f36d79b2a74f1575fa0bee052;p=ghc-hetmet.git diff --git a/ghc.mk b/ghc.mk index 3348d47..150ca7d 100644 --- a/ghc.mk +++ b/ghc.mk @@ -285,17 +285,24 @@ include rules/bindist.mk # Packages # -------------------------------- -# Subsets of packages +# Properties of packages +# These lists say "if this package is built, here's a property it has" +# They do not say "this package will be built"; see $(PACKAGES_xx) for that # Packages that are built but not installed INTREE_ONLY_PACKAGES := haskeline mtl terminfo utf8-string xhtml +DPH_PACKAGES := dph/dph-base dph/dph-prim-interface dph/dph-prim-seq \ + dph/dph-common dph/dph-prim-par dph/dph-par dph/dph-seq \ + vector primitive + # Packages that, if present, must be built by the stage2 compiler, # because they use TH and/or annotations, or depend on other stage2 -# packages. -STAGE2_PACKAGES := dph/dph-base dph/dph-prim-interface dph/dph-prim-seq \ - dph/dph-common dph/dph-prim-par dph/dph-par dph/dph-seq \ - vector +# packages: +STAGE2_PACKAGES := $(DPH_PACKAGES) haskell98 haskell2010 +# Packages that we shouldn't build if we don't have TH (e.g. because +# we're building a profiled compiler): +TH_PACKAGES := $(DPH_PACKAGES) # Packages that are built by stage0, in addition to stage1. These # packages are dependencies of GHC, that we do not assume the stage0 @@ -305,11 +312,24 @@ STAGE2_PACKAGES := dph/dph-base dph/dph-prim-interface dph/dph-prim-seq \ # so we don't have to include it below. STAGE0_PACKAGES = Cabal hpc extensible-exceptions binary bin-package-db -# -------------------------------- -# Building the lists of packages +# These packages are installed, but are installed hidden +# Why install them at all? Because the 'ghc' package depends on them +HIDDEN_PACKAGES = binary -# We need to build two lists: -# +# $(EXTRA_PACKAGES) is another classification, of packages built but +# not installed +# It is set in rules/extra-package.mk, +# by $(call extra-packages) a little further down +# this ghc.mk + + +# -------------------------------- +# Packages to build +# The lists of packages that we *actually* going to build in each stage: +# +# $(STAGE0_PACKAGE) does double duty; it really is the list of packages +# we build the bootstrap compiler in stage 0 +# # $(PACKAGES) A list of directories relative to libraries/ containing # packages that will be built by stage1, in dependency # order. @@ -333,11 +353,13 @@ define addPackageGeneral endef define addPackage # args: $1 = package, $2 = condition +ifneq "$(filter $1,$(TH_PACKAGES)) $(GhcProfiled)" "$1 YES" ifeq "$(filter $1,$(STAGE2_PACKAGES))" "$1" $(call addPackageGeneral,PACKAGES_STAGE2,$1,$2) else $(call addPackageGeneral,PACKAGES,$1,$2) endif +endif endef $(eval $(call addPackage,ghc-prim)) @@ -417,6 +439,7 @@ utils/haddock/dist/package-data.mk: compiler/stage2/package-data.mk utils/ghc-pkg/dist-install/package-data.mk: compiler/stage2/package-data.mk utils/hsc2hs/dist-install/package-data.mk: compiler/stage2/package-data.mk utils/compare_sizes/dist/package-data.mk: compiler/stage2/package-data.mk +utils/runghc/dist/package-data.mk: compiler/stage2/package-data.mk # add the final two package.conf dependencies: ghc-prim depends on RTS, # and RTS depends on libffi. @@ -435,9 +458,6 @@ ifeq "$(BuildSharedLibs)" "YES" ALL_STAGE1_LIBS += $(foreach lib,$(PACKAGES),$(libraries/$(lib)_dist-install_dyn_LIB)) endif BOOT_LIBS = $(foreach lib,$(STAGE0_PACKAGES),$(libraries/$(lib)_dist-boot_v_LIB)) -# A useful pseudo-target -.PHONY: stage1_libs -stage1_libs : $(ALL_STAGE1_LIBS) OTHER_LIBS = libffi/dist-install/build/libHSffi$(v_libsuf) libffi/dist-install/build/HSffi.o ifeq "$(BuildSharedLibs)" "YES" @@ -548,7 +568,6 @@ BUILD_DIRS += \ docs/users_guide \ docs/ext-core \ docs/man \ - libraries/Cabal/doc \ $(GHC_UNLIT_DIR) \ $(GHC_HP2PS_DIR) @@ -657,6 +676,11 @@ endif include $(patsubst %, %/ghc.mk, $(BUILD_DIRS)) +# A useful pseudo-target (must be after the include above, because it needs +# the value of things like $(libraries/base_dist-install_v_LIB). +.PHONY: stage1_libs +stage1_libs : $(ALL_STAGE1_LIBS) + # ---------------------------------------------- # Per-package compiler flags # @@ -752,6 +776,17 @@ ifeq "$(UseArchivesForGhci)" "NO" ghc/stage2/build/tmp/$(ghc_stage2_PROG) : $(GHCI_LIBS) endif +ifeq "$(UseArchivesForGhci)" "YES" +GHCI_lib_way = v +else +GHCI_lib_way = GHCI +endif + +# Deps for TH uses in libraries +$(foreach way, $(GhcLibWays),$(eval \ +libraries/vector/dist-install/build/Data/Vector/Fusion/Stream/Monadic.$($(way)_osuf): \ + $(libraries/primitive_dist-install_$(GHCI_lib_way)_LIB) \ + )) endif # ----------------------------------------------------------------------------- @@ -773,8 +808,7 @@ endif # Windows ifneq "$(BINDIST)" "YES" $(ghc-prim-$(libraries/ghc-prim_dist-install_VERSION)_HADDOCK_FILE): \ - libraries/ghc-prim/dist-install/build/autogen/GHC/Prim.hs \ - libraries/ghc-prim/dist-install/build/autogen/GHC/PrimopWrappers.hs + libraries/ghc-prim/dist-install/build/autogen/GHC/Prim.hs endif # BINDIST libraries/ghc-prim/dist-install/build/autogen/GHC/Prim.hs: \ @@ -782,11 +816,6 @@ libraries/ghc-prim/dist-install/build/autogen/GHC/Prim.hs: \ | $$(dir $$@)/. "$(GENPRIMOP_INPLACE)" --make-haskell-source < $< > $@ -libraries/ghc-prim/dist-install/build/autogen/GHC/PrimopWrappers.hs: \ - $(PRIMOPS_TXT) $(GENPRIMOP_INPLACE) \ - | $$(dir $$@)/. - "$(GENPRIMOP_INPLACE)" --make-haskell-wrappers < $< > $@ - .PHONY: tags tags: tags_compiler @@ -897,28 +926,22 @@ INSTALLED_GHC_REAL=$(DESTDIR)$(bindir)/ghc.exe INSTALLED_GHC_PKG_REAL=$(DESTDIR)$(bindir)/ghc-pkg.exe endif -INSTALLED_PACKAGES := $(filter-out $(INTREE_ONLY_PACKAGES),$(PACKAGES)) +INSTALLED_PKG_DIRS := $(addprefix libraries/,$(PACKAGES)) \ + compiler \ + $(addprefix libraries/,$(PACKAGES_STAGE2)) ifeq "$(InstallExtraPackages)" "NO" -INSTALLED_PACKAGES := $(filter-out $(EXTRA_PACKAGES), $(INSTALLED_PACKAGES)) +INSTALLED_PKG_DIRS := $(filter-out $(addprefix libraries/,$(EXTRA_PACKAGES)),\ + $(INSTALLED_PKG_DIRS)) endif +INSTALLED_PKG_DIRS := $(filter-out $(addprefix libraries/,$(INTREE_ONLY_PACKAGES)),\ + $(INSTALLED_PKG_DIRS)) -HIDDEN_PACKAGES = binary - -define set_INSTALL_DISTDIR -# $1 = libraries/base, $2 = dist-install -# => -# INSTALL_DISTDIR_libraries/base = dist-install -INSTALL_DISTDIR_$1 = $2 -endef - -$(eval $(foreach p,$(INSTALLED_PACKAGES) $(PACKAGES_STAGE2),\ -$(call set_INSTALL_DISTDIR,libraries/$p,dist-install))) +# Set the INSTALL_DISTDIR_p for each package; compiler is special +$(foreach p,$(filter-out compiler,$(INSTALLED_PKG_DIRS)),\ + $(eval INSTALL_DISTDIR_$p = dist-install)) INSTALL_DISTDIR_compiler = stage2 -ALL_INSTALLED_PACKAGES = $(addprefix libraries/,$(INSTALLED_PACKAGES)) \ - compiler \ - $(addprefix libraries/,$(PACKAGES_STAGE2)) - +# Now we can do the installation install_packages: install_libexecs install_packages: libffi/package.conf.install rts/package.conf.install $(INSTALL_DIR) "$(DESTDIR)$(topdir)" @@ -926,7 +949,7 @@ install_packages: libffi/package.conf.install rts/package.conf.install $(INSTALL_DIR) "$(INSTALLED_PACKAGE_CONF)" "$(INSTALLED_GHC_PKG_REAL)" --force --global-conf "$(INSTALLED_PACKAGE_CONF)" update libffi/package.conf.install "$(INSTALLED_GHC_PKG_REAL)" --force --global-conf "$(INSTALLED_PACKAGE_CONF)" update rts/package.conf.install - $(foreach p, $(ALL_INSTALLED_PACKAGES), \ + $(foreach p, $(INSTALLED_PKG_DIRS), \ $(call make-command, \ "$(GHC_CABAL_INPLACE)" install \ "$(INSTALLED_GHC_REAL)" \