summaryrefslogtreecommitdiff
path: root/Makefile
diff options
context:
space:
mode:
authorManuel M T Chakravarty <chak@cse.unsw.edu.au>2008-02-18 06:18:09 +0000
committerManuel M T Chakravarty <chak@cse.unsw.edu.au>2008-02-18 06:18:09 +0000
commit3e2748164e3e2e2dc21ca511959671f0f5f2e37f (patch)
tree83bad04ee4581aa0ba12b7ef3d3a074f5334550b /Makefile
parent82dc0d197b39b6462d1a19e4c556f7acdf376ee9 (diff)
downloadhaskell-3e2748164e3e2e2dc21ca511959671f0f5f2e37f.tar.gz
All installed Haskell prgms have an inplace and an installed version
- GHC installs a range of compiled Haskell programs in addition to the actual compiler. To ensure that they all run on the platform targeted by the build (which may have different libraries installed than the build host), we need to make sure that all compiled Haskell code going into an install is build with the stage 1 compiler, not the bootstrap compiler. Getting this right is especially important on the Mac to enable builds that work on Mac OS X versions that are older than the one performing the build. - For all installed utils implemented in Haskell (i.e., ghc-pkg, hasktags, hsc2hs, runghc, hpc, and pwd) we compile two versions, an inplace version and a version for installation. The former is build by the bootstrap compiler during the stage 1 build and the latter is build by the stage 1 compiler during the stage 2 build. - This is really very much as the setup for ghc itself, only that we don't use separate stage1/ and stage2/ build directories. Instead, we clean before each build. CAVEAT: This only works properly if invoked from the toplevel Makefile. - Instead of UseStage1=YES (as used by the previous binary-dist-specific recompilation), we now use the same $(stage) variables as used for the compiler proper - to increase uniformity and to avoid extra conditionals for the install target.
Diffstat (limited to 'Makefile')
-rw-r--r--Makefile30
1 files changed, 15 insertions, 15 deletions
diff --git a/Makefile b/Makefile
index b89257fe38..73443f6cd4 100644
--- a/Makefile
+++ b/Makefile
@@ -98,6 +98,7 @@ endif
endif
stage1 : $(GCC_LIB_DEP) check-packages
+ $(MAKE) -C utils mostlyclean
$(MAKE) -C utils/mkdependC boot
@case '${MFLAGS}' in *-[ik]*) x_on_err=0;; *-r*[ik]*) x_on_err=0;; *) x_on_err=1;; esac; \
for i in $(SUBDIRS_BUILD); do \
@@ -119,9 +120,23 @@ stage1 : $(GCC_LIB_DEP) check-packages
$(MAKE) -C libraries boot
$(MAKE) -C libraries all
+# When making distributions (i.e., whether with binary-dist or using the
+# vanilla install target to create an installer package), we can have problems
+# if some things (e.g. ghc-pkg) are compiled with the bootstrapping compiler
+# and some (e.g. the stage 2 compiler) with the stage1 compiler. See #1860 for
+# an example. Thus, we explicitly build a second version with the stage 1
+# compiler of all utils that get installed and of all extra support binaries
+# includes in binary dists.
stage2 : check-packages
+ $(MAKE) -C utils mostlyclean
+ $(MAKE) -C utils stage=2
$(MAKE) -C compiler boot stage=2
$(MAKE) -C compiler stage=2
+ $(RM) -f libraries/ifBuildable/ifBuildable
+ $(MAKE) -C libraries stage=2 ifBuildable/ifBuildable
+ $(RM) -f libraries/installPackage/installPackage
+ $(MAKE) -C libraries stage=2 installPackage/installPackage
+
stage3 : check-packages
$(MAKE) -C compiler boot stage=3
@@ -259,21 +274,6 @@ binary-dist::
-rm -rf $(BIN_DIST_DIR)
-$(RM) $(BIN_DIST_TARBALL)
-# When making bindists, we can have problems if some things (e.g. ghc-pkg)
-# are compiled with the bootstrapping compiler and some (e.g. the stage 2
-# compiler) with the stage1 compiler. See #1860 for an example.
-# Thus we rebuild the utils with stage 1 here. This is a bit unpleasant,
-# as binary-dist really shouldn't actually build anything, but it works.
-# We need to do the same for utilities used during library package installation.
-binary-dist::
- $(MAKE) -C utils clean
- $(MAKE) -C utils UseStage1=YES boot
- $(MAKE) -C utils UseStage1=YES
- $(RM) -f libraries/ifBuildable/ifBuildable
- $(MAKE) -C libraries UseStage1=YES ifBuildable/ifBuildable
- $(RM) -f libraries/installPackage/installPackage
- $(MAKE) -C libraries UseStage1=YES installPackage/installPackage
-
ifeq "$(TARGETPLATFORM)" "i386-unknown-mingw32"
binary-dist::