diff --git a/MAKEHELP.md b/MAKEHELP.md
deleted file mode 100644
index ce27e1a5163ffc587d933d061ea1001d81ec82be..0000000000000000000000000000000000000000
--- a/MAKEHELP.md
+++ /dev/null
@@ -1,96 +0,0 @@
-Quick `make` guide for GHC
-==========================
-
-For a "Getting Started" guide, see:
-
-  - https://gitlab.haskell.org/ghc/ghc/wikis/building/quick-start
-  - https://gitlab.haskell.org/ghc/ghc/wikis/building/using
-  - https://gitlab.haskell.org/ghc/ghc/wikis/building/standard-targets
-
-Common commands:
-
-  - `make`
-
-    Builds everything: ghc stages 1 and 2, all libraries and tools.
-
-  - `make -j2`
-
-    Parallel build: runs up to 2 commands at a time.
-
-  - `cd <dir>; make`
-
-    Builds everything in the given directory.
-
-  - `cd <dir>; make help`
-
-    Shows the targets available in <dir>
-
-  - `make install`
-  - `make install-strip`
-
-    Installs GHC, libraries and tools under $(prefix). The install-strip
-    variant strips executable files while installing them.
-
-  - `make sdist`
-  - `make binary-dist`
-
-    Builds a source or binary distribution respectively
-
-  - `make show VALUE=<var>`
-  - `make show! VALUE=<var>`
-
-    Show the value of make variable <var>. The show! variant works right after
-    ./configure (it skips reading package-data.mk files).
-
-  - `make clean`
-  - `make distclean`
-  - `make maintainer-clean`
-
-    Various levels of cleaning: "clean" restores the tree to the
-    state after "./configure", "distclean" restores to the state
-    after "python3 boot", and maintainer-clean restores the tree to the
-    completely clean checked-out state.
-
-Using `make` in subdirectories
-==============================
-
-  - `make`
-
-    Builds everything in this directory (including dependencies elsewhere
-    in the tree, if necessary)
-
-  - `make fast`
-
-    The same as 'make', but omits some phases and does not
-    recalculate dependencies.  Useful for saving time if you are sure
-    the rest of the tree is up to date.
-
-  - `make clean`
-  - `make distclean`
-  - `make maintainer-clean`
-
-    Clean just this directory
-
-  - `make html`
-  - `make pdf`
-  - `make ps`
-
-    Make documentation in this directory (if any)
-
-  - `make show VALUE=<var>`
-  - `make show! VALUE=<var>`
-
-    Show the value of make variable <var>. The show! variant works right after
-    ./configure (it skips reading package-data.mk files).
-
-  - `make <file>`
-
-    Bring a particular file up to date, e.g. make dist/build/Module.o
-    The name <file> is relative to the current directory
-
-Useful links:
-=============
-
-See also "new Hadrian build system":
-
-  - https://gitlab.haskell.org/ghc/ghc/wikis/building/hadrian
diff --git a/Makefile b/Makefile
deleted file mode 100644
index 389bfd32f865413d0577a947819a26f9e4342aa0..0000000000000000000000000000000000000000
--- a/Makefile
+++ /dev/null
@@ -1,233 +0,0 @@
-# -----------------------------------------------------------------------------
-#
-# (c) 2009 The University of Glasgow
-#
-# This file is part of the GHC build system.
-#
-# To understand how the build system works and how to modify it, see
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/architecture
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/modifying
-#
-# -----------------------------------------------------------------------------
-
-# Eliminate use of the built-in implicit rules, and clear out the default list
-# of suffixes for suffix rules. Speeds up make quite a bit. Both are needed
-# for the shortest `make -d` output.
-# Don't set --no-builtin-variables; some rules might stop working if you do
-# (e.g. 'make clean' in testsuite/ currently relies on an implicit $RM).
-MAKEFLAGS += --no-builtin-rules
-.SUFFIXES:
-
-
-# -----------------------------------------------------------------------------
-# Sanitize environment
-
-# See #11530
-export GREP_OPTIONS :=
-
-ifneq "$(filter maintainer-clean distclean clean clean_% help,$(MAKECMDGOALS))" ""
--include mk/config.mk
-else
-include mk/config.mk
-ifeq "$(ProjectVersion)" ""
-$(error Please run ./configure first)
-endif
-endif
-
-include mk/custom-settings.mk
-
-
-ifeq "$(wildcard distrib/)" ""
-
-# We're in a bindist
-
-.PHONY: default
-default:
-	@echo 'Run "make install" to install'
-	@false
-
-.PHONY: install show
-install show:
-	$(MAKE) --no-print-directory -f ghc.mk $@ BINDIST=YES NO_INCLUDE_DEPS=YES
-
-# Note [install-strip]
-# ~~~~~~~~~~~~~~~~~~~~
-# install-strip is like install, but it strips the executable files while
-# installing them.
-#
-# From http://www.gnu.org/prep/standards/html_node/Standard-Targets.html:
-#
-#   "install-strip should not strip the executables in the build directory
-#   which are being copied for installation. It should only strip the copies
-#   that are installed. "
-
-.PHONY: install-strip
-install-strip:
-	# See Note [install-strip].
-	$(MAKE) --no-print-directory -f ghc.mk INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' install BINDIST=YES NO_INCLUDE_DEPS=YES
-
-else
-
-.PHONY: default
-default : all
-	@:
-
-# For help, type 'make help'
-.PHONY: help
-help:
-	@cat MAKEHELP.md
-
-# No need to update makefiles for these targets:
-# (the ones we're filtering out)
-REALGOALS=$(filter-out \
-    binary-dist \
-    binary-dist-prep \
-    install-strip \
-    sdist sdist-ghc \
-    sdist-ghc-prep \
-    sdist-windows-tarballs \
-    sdist-windows-tarballs-prep \
-    sdist-testsuite \
-    sdist-testsuite-prep \
-    bootstrapping-files \
-    framework-pkg \
-    clean \
-    clean_% \
-    distclean \
-    maintainer-clean \
-    show \
-    show! \
-    echo \
-    help \
-    test \
-    fulltest \
-    slowtest \
-    fasttest \
-    fast \
-  ,$(MAKECMDGOALS))
-
-# configure touches certain files even if they haven't changed.  This
-# can mean a lot of unnecessary recompilation after a re-configure, so
-# here we cache the old versions of these files so we can restore the
-# timestamps.
-%.old:  %
-	@set -x && test -f $@ && cmp -s $< $@ || cp -p $< $@
-	touch -r $@ $<
-
-
-# NB. not the same as saying '%: ...', which doesn't do the right thing:
-# it does nothing if we specify a target that already exists.
-.PHONY: $(REALGOALS) all
-$(REALGOALS) all: mk/config.mk.old mk/project.mk.old compiler/ghc.cabal.old
-ifneq "$(OMIT_PHASE_0)" "YES"
-	@echo "===--- building phase 0"
-	$(MAKE) --no-print-directory -f ghc.mk phase=0 phase_0_builds
-endif
-ifneq "$(OMIT_PHASE_1)" "YES"
-	@echo "===--- building phase 1"
-	$(MAKE) --no-print-directory -f ghc.mk phase=1 phase_1_builds
-endif
-	@echo "===--- building final phase"
-	$(MAKE) --no-print-directory -f ghc.mk phase=final $@
-
-# if BINARY_DIST_DIR is not set, assume we want the old
-# behaviour of placing the binary dist into the current
-# directory. Provide BINARY_DIST_DIR to put the final
-# binary distribution elsewhere.
-BINARY_DIST_DIR ?= .
-
-.PHONY: binary-dist
-binary-dist: binary-dist-prep
-	mv bindistprep/*.tar.$(TAR_COMP_EXT) "$(BINARY_DIST_DIR)"
-
-.PHONY: binary-dist-prep
-binary-dist-prep:
-ifeq "$(mingw32_TARGET_OS)" "1"
-	$(MAKE) --no-print-directory -f ghc.mk windows-binary-dist-prep
-else
-	rm -f bindist-list
-	$(MAKE) --no-print-directory -f ghc.mk bindist-list BINDIST=YES
-	$(MAKE) --no-print-directory -f ghc.mk unix-binary-dist-prep
-endif
-
-.PHONY: install-strip
-install-strip:
-	# See Note [install-strip].
-	$(MAKE) --no-print-directory -f ghc.mk INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' install
-
-.PHONY: sdist sdist-ghc sdist-ghc-prep sdist-windows-tarballs sdist-windows-tarballs-prep sdist-testsuite sdist-testsuite-prep
-# Just running `./boot && ./configure && make sdist` should work, so skip
-# phase 0 and 1 and don't build any dependency files.
-sdist sdist-ghc sdist-ghc-prep sdist-windows-tarballs sdist-windows-tarballs-prep sdist-testsuite sdist-testsuite-prep :
-	$(MAKE) --no-print-directory -f ghc.mk $@ NO_INCLUDE_DEPS=YES NO_INCLUDE_PKGDATA=YES
-
-.PHONY: clean distclean maintainer-clean
-clean distclean maintainer-clean:
-	$(MAKE) --no-print-directory -f ghc.mk $@ CLEANING=YES
-	test ! -d testsuite || $(MAKE) -C testsuite $@
-
-.PHONY: $(filter clean_%,$(MAKECMDGOALS))
-$(filter clean_%, $(MAKECMDGOALS)) : clean_% :
-	$(MAKE) --no-print-directory -f ghc.mk $@ CLEANING=YES
-
-.PHONY: bootstrapping-files show echo
-bootstrapping-files show echo:
-	$(MAKE) --no-print-directory -f ghc.mk $@
-
-.PHONY: show!
-show!:
-	$(MAKE) --no-print-directory -f ghc.mk show NO_INCLUDE_PKGDATA=YES
-
-ifeq "$(darwin_TARGET_OS)" "1"
-.PHONY: framework-pkg
-framework-pkg:
-	$(MAKE) -C distrib/MacOS $@
-endif
-
-# If the user says 'make A B', then we don't want to invoke two
-# instances of the rule above in parallel:
-.NOTPARALLEL:
-
-endif
-
-# Note [validate and testsuite speed]
-# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-# There are 3 different validate and testsuite speed settings:
-# fast, normal and slow.
-#
-#                              how    how   used
-#           cd tests  config.  many   many  by
-# validate  && make   speed=   tests  ways  whom
-# =============================================================================
-# --fast    fast      2        some   1+exs Travis (to stay within time limit)
-# --normal  test      1        all    1+exs Phabricator (slow takes too long?)
-# --slow    slow      0        all    all   Nightly (slow is ok)
-#
-#           accept    1        all    1
-#
-# `--fast` and `--normal` run one default way, as well as any other ways which
-# are explicitly requested by the test using extra_ways().
-#
-# `make accept` should run all tests exactly once. There is no point in
-# accepting a test for multiple ways, since it should produce the same output
-# for all ways.
-#
-# To make sure all .stderr and .stdout files in the testsuite are never
-# out-of-date, it is useful if Phabricator, via a normal `./validate` and `make
-# test`, runs each test at least once.
-.PHONY: fasttest
-fasttest:
-	$(MAKE) -C testsuite/tests SUMMARY_FILE=../../testsuite_summary.txt fast
-
-.PHONY: test
-test:
-	$(MAKE) -C testsuite/tests SUMMARY_FILE=../../testsuite_summary.txt
-
-.PHONY: slowtest fulltest
-slowtest fulltest:
-	$(MAKE) -C testsuite/tests SUMMARY_FILE=../../testsuite_summary.txt slow
-
-.PHONY: fast
-fast:
-	@echo "You can use 'make fast' only from inside a sub-component directory."
-	@exit 1
diff --git a/bindisttest/ghc.mk b/bindisttest/ghc.mk
deleted file mode 100644
index b1bd16d8ce53b4ff24669599aa0b4f02a918a866..0000000000000000000000000000000000000000
--- a/bindisttest/ghc.mk
+++ /dev/null
@@ -1,55 +0,0 @@
-# -----------------------------------------------------------------------------
-#
-# (c) 2009 The University of Glasgow
-#
-# This file is part of the GHC build system.
-#
-# To understand how the build system works and how to modify it, see
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/architecture
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/modifying
-#
-# -----------------------------------------------------------------------------
-
-ifeq "$(TEST_PREP)" "YES"
-BIN_DIST_TEST_TAR_COMP = $(BIN_DIST_PREP_TAR_COMP)
-else
-BIN_DIST_TEST_TAR_COMP = $(BIN_DIST_TAR_COMP)
-endif
-
-.PHONY: test_bindist
-test_bindist:
-	"$(RM)" $(RM_OPTS_REC) bindisttest/$(BIN_DIST_INST_SUBDIR)
-	"$(RM)" $(RM_OPTS_REC) bindisttest/a
-	"$(RM)" $(RM_OPTS) bindisttest/HelloWorld
-	"$(RM)" $(RM_OPTS) bindisttest/HelloWorld.o
-	"$(RM)" $(RM_OPTS) bindisttest/HelloWorld.hi
-	"$(RM)" $(RM_OPTS) bindisttest/output
-# We use the a/b/c subdirectory as configure looks for install-sh in
-# . .. ../.. and we don't want it to find the build system's install-sh.
-#
-# NB. tar has funny interpretation of filenames sometimes (thinking
-# c:/foo is a remote file), so it's safer to bzip and then pipe into
-# tar rather than using tar -xjf:
-	mkdir bindisttest/a
-	mkdir bindisttest/a/b
-	mkdir bindisttest/a/b/c
-	cd bindisttest/a/b/c/ && $(TAR_COMP_CMD) -cd ../../../../$(BIN_DIST_TEST_TAR_COMP) | $(TAR_CMD) -xf -
-	$(SHELL) bindisttest/checkBinaries.sh $(ProjectVersion)
-ifeq "$(Windows_Host)" "YES"
-	mv bindisttest/a/b/c/$(BIN_DIST_NAME) $(BIN_DIST_INST_DIR)
-else
-	cd bindisttest/a/b/c/$(BIN_DIST_NAME) && ./configure --prefix=$(TOP)/$(BIN_DIST_INST_DIR) CC="$(CC)"
-	cd bindisttest/a/b/c/$(BIN_DIST_NAME) && $(MAKE) install
-endif
-ifeq "$(GhcProfiled)" "NO"
-	$(BIN_DIST_INST_DIR)/bin/runghc bindisttest/HelloWorld > bindisttest/output
-	$(CONTEXT_DIFF) bindisttest/output bindisttest/expected_output
-endif
-	$(BIN_DIST_INST_DIR)/bin/ghc --make bindisttest/HelloWorld
-	bindisttest/HelloWorld > bindisttest/output
-	$(CONTEXT_DIFF) bindisttest/output bindisttest/expected_output
-# Without --no-user-package-db we might pick up random packages from ~/.ghc
-	$(BIN_DIST_INST_DIR)/bin/ghc-pkg check --no-user-package-db
-
-$(eval $(call clean-target,bindisttest,all,$(BIN_DIST_INST_DIR) $(wildcard bindisttest/a/b/c/*) bindisttest/HelloWorld bindisttest/HelloWorld.o bindisttest/HelloWorld.hi bindisttest/output))
-
diff --git a/boot b/boot
index a8cf8c49c05ed23e1b1f95dce7b2edb812110735..872eeb01f6521805ec9606e56bd61593224a2ef1 100755
--- a/boot
+++ b/boot
@@ -56,70 +56,6 @@ def check_boot_packages():
                     Maybe you haven't run 'git submodule update --init'?
                     """ % license_path)
 
-# Create libraries/*/{ghc.mk,GNUmakefile}
-def boot_pkgs():
-    library_dirs = []
-
-    for package in glob.glob("libraries/*/"):
-        packages_file = os.path.join(package, 'ghc-packages')
-        print(package)
-        if os.path.isfile(packages_file):
-            for subpkg in open(packages_file, 'r'):
-                library_dirs.append(os.path.join(package, subpkg.strip()))
-        elif package in EXCEPTIONS:
-            library_dirs.append(EXCEPTIONS[package])
-        else:
-            library_dirs.append(package)
-
-    for package in library_dirs:
-        if package[-1] == '/':
-            # drop trailing '/'
-            package = package[:-1]
-
-        dir_ = os.path.relpath(package, 'libraries')
-        cabals = glob.glob(os.path.join(package, '*.cabal.in'))
-        if len(cabals) == 0:
-            cabals = glob.glob(os.path.join(package, '*.cabal'))
-
-        if len(cabals) > 1:
-            die('Too many .cabal files in %s' % package)
-        elif len(cabals) == 1:
-            cabal = cabals[0]
-
-            if os.path.isfile(cabal):
-                # strip both .cabal and .in
-                pkg = os.path.splitext(os.path.splitext(os.path.basename(cabal))[0])[0]
-                top = os.path.join(*['..'] * len(os.path.normpath(package).split(os.path.sep)))
-
-                ghc_mk = os.path.join(package, 'ghc.mk')
-                if os.path.exists(ghc_mk):
-                    print('Skipping %s which already exists' % ghc_mk)
-                    continue
-                print('Creating %s' % ghc_mk)
-                with open(ghc_mk, 'w') as f:
-                    f.write(dedent(
-                        """\
-                        {package}_PACKAGE = {pkg}
-                        {package}_dist-install_GROUP = libraries
-                        $(if $(filter {dir},$(PACKAGES_STAGE0)),$(eval $(call build-package,{package},dist-boot,0)))
-                        $(if $(filter {dir},$(PACKAGES_STAGE1)),$(eval $(call build-package,{package},dist-install,1)))
-                        $(if $(filter {dir},$(PACKAGES_STAGE2)),$(eval $(call build-package,{package},dist-install,2)))
-                        """.format(package = package,
-                                pkg = pkg,
-                                dir = dir_)))
-
-                makefile = os.path.join(package, 'GNUmakefile')
-                with open(makefile, 'w') as f:
-                    f.write(dedent(
-                        """\
-                        dir = {package}
-                        TOP = {top}
-                        include $(TOP)/mk/sub-makefile.mk
-                        FAST_MAKE_OPTS += stage=0
-                        """.format(package = package, top = top)
-                    ))
-
-
 def autoreconf():
     # Run autoreconf on everything that needs it.
     processes = {}
@@ -154,24 +90,5 @@ def autoreconf():
     if fail:
         sys.exit(1)
 
-def check_build_mk():
-    if not args.validate and not os.path.isfile("mk/build.mk"):
-        print(dedent(
-            """
-            WARNING: You don't have a mk/build.mk file.
-
-            By default a standard GHC build will be done, which uses optimisation
-            and builds the profiling libraries. This will take a long time, so may
-            not be what you want if you are developing GHC or the libraries, rather
-            than simply building it to use it.
-
-            For information on creating a mk/build.mk file, please see:
-                https://gitlab.haskell.org/ghc/ghc/wikis/building/using#build-configuration
-            """))
-
 check_boot_packages()
-if not args.hadrian:
-    boot_pkgs()
 autoreconf()
-if not args.hadrian:
-    check_build_mk()
diff --git a/compiler/Makefile b/compiler/Makefile
deleted file mode 100644
index 514b345dd376c86d5566bde597460e033d8cee65..0000000000000000000000000000000000000000
--- a/compiler/Makefile
+++ /dev/null
@@ -1,24 +0,0 @@
-# -----------------------------------------------------------------------------
-#
-# (c) 2009 The University of Glasgow
-#
-# This file is part of the GHC build system.
-#
-# To understand how the build system works and how to modify it, see
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/architecture
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/modifying
-#
-# -----------------------------------------------------------------------------
-
-# If the user says 'make' or 'make stage=2' here, we behave as if they were
-# in the ghc directory instead, so that the executable GHC gets built.
-.PHONY: default_to_ghc all_ghc
-default_to_ghc : all_ghc
-
-dir = compiler
-
-include ../mk/compiler-ghc.mk
-
-all_ghc :
-	+$(TOPMAKE) all_ghc $(EXTRA_MAKE_OPTS)
-
diff --git a/compiler/ghc.mk b/compiler/ghc.mk
deleted file mode 100644
index 4b33936afa8792c79ffa0d6b8b452f698aa167d8..0000000000000000000000000000000000000000
--- a/compiler/ghc.mk
+++ /dev/null
@@ -1,294 +0,0 @@
-# -----------------------------------------------------------------------------
-#
-# (c) 2009-2012 The University of Glasgow
-#
-# This file is part of the GHC build system.
-#
-# To understand how the build system works and how to modify it, see
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/architecture
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/modifying
-#
-# -----------------------------------------------------------------------------
-
-# -----------------------------------------------------------------------------
-# Create compiler configuration
-#
-# The 'echo' commands simply spit the values of various make variables
-# into Config.hs, whence they can be compiled and used by GHC itself
-
-compiler_stage1_C_FILES_NODEPS = compiler/cbits/cutils.c
-
-# TODO(@Ericson2314) Get rid of compiler-specific stage indices. I think the
-# argument was stage n ghc is used to build stage n everything else, but I
-# don't buy that argument.
-
-ifneq "$(BINDIST)" "YES"
-
-$(foreach n,1 2 3, \
-    $(eval compiler/stage$n/package-data.mk : compiler/stage$n/build/GHC/Settings/Config.hs) \
-    $(eval compiler/stage$n/build/GHC/Platform/Constants.o: compiler/stage$n/build/GHC/Platform/Constants.hs) \
-  )
-endif
-
-BUILDPLATFORM_1 = $(BUILDPLATFORM)
-BUILDPLATFORM_2 = $(HOSTPLATFORM)
-BUILDPLATFORM_3 = $(TARGETPLATFORM)
-
-HOSTPLATFORM_1 = $(HOSTPLATFORM)
-HOSTPLATFORM_2 = $(TARGETPLATFORM)
-HOSTPLATFORM_3 = $(TARGETPLATFORM)
-
-define compilerConfig
-# $1 = compile stage (1-indexed)
-compiler/stage$1/build/GHC/Settings/Config.hs : mk/config.mk mk/project.mk | $$$$(dir $$$$@)/.
-	$$(call removeFiles,$$@)
-	@echo 'Creating $$@ ... '
-	@echo 'module GHC.Settings.Config'                                  >> $$@
-	@echo '  ( module GHC.Version'                                      >> $$@
-	@echo '  , cBuildPlatformString'                                    >> $$@
-	@echo '  , cHostPlatformString'                                     >> $$@
-	@echo '  , cProjectName'                                            >> $$@
-	@echo '  , cBooterVersion'                                          >> $$@
-	@echo '  , cStage'                                                  >> $$@
-	@echo '  ) where'                                                   >> $$@
-	@echo                                                               >> $$@
-	@echo 'import GHC.Prelude'                                          >> $$@
-	@echo                                                               >> $$@
-	@echo 'import GHC.Version'                                          >> $$@
-	@echo                                                               >> $$@
-	@echo 'cBuildPlatformString :: String'                              >> $$@
-	@echo 'cBuildPlatformString = "$(BUILDPLATFORM_$1)"'                >> $$@
-	@echo                                                               >> $$@
-	@echo 'cHostPlatformString :: String'                               >> $$@
-	@echo 'cHostPlatformString = "$(HOSTPLATFORM_$1)"'                  >> $$@
-	@echo                                                               >> $$@
-	@echo 'cProjectName          :: String'                             >> $$@
-	@echo 'cProjectName          = "$(ProjectName)"'                    >> $$@
-	@echo                                                               >> $$@
-	@echo 'cBooterVersion        :: String'                             >> $$@
-	@echo 'cBooterVersion        = "$(GhcVersion)"'                     >> $$@
-	@echo                                                               >> $$@
-	@echo 'cStage                :: String'                             >> $$@
-	@echo 'cStage                = show ($1 :: Int)'                    >> $$@
-	@echo done.
-
-compiler/stage$1/build/GHC/Platform/Constants.hs : $$(deriveConstants_INPLACE) | $$$$(dir $$$$@)/.
-	$$< --gen-haskell-type -o $$@
-endef
-
-$(eval $(call compilerConfig,1))
-$(eval $(call compilerConfig,2))
-$(eval $(call compilerConfig,3))
-
-# ----------------------------------------------------------------------------
-#		Generate supporting stuff for GHC/Builtin/PrimOps.hs
-#		from GHC/Builtin/primops.txt
-
-PRIMOP_BITS_NAMES = primop-data-decl.hs-incl        \
-                    primop-tag.hs-incl              \
-                    primop-list.hs-incl             \
-                    primop-has-side-effects.hs-incl \
-                    primop-out-of-line.hs-incl      \
-                    primop-commutable.hs-incl       \
-                    primop-code-size.hs-incl        \
-                    primop-can-fail.hs-incl         \
-                    primop-strictness.hs-incl       \
-                    primop-fixity.hs-incl           \
-                    primop-primop-info.hs-incl      \
-                    primop-vector-uniques.hs-incl   \
-                    primop-vector-tys.hs-incl       \
-                    primop-vector-tys-exports.hs-incl \
-                    primop-vector-tycons.hs-incl    \
-                    primop-docs.hs-incl
-
-PRIMOP_BITS_STAGE1 = $(addprefix compiler/stage1/build/,$(PRIMOP_BITS_NAMES))
-PRIMOP_BITS_STAGE2 = $(addprefix compiler/stage2/build/,$(PRIMOP_BITS_NAMES))
-PRIMOP_BITS_STAGE3 = $(addprefix compiler/stage3/build/,$(PRIMOP_BITS_NAMES))
-
-define preprocessCompilerFiles
-# $1 = compiler stage (build system stage + 1)
-compiler/stage$1/build/primops.txt: \
-		compiler/GHC/Builtin/primops.txt.pp
-	$$(HS_CPP) -P \
-		-x c $$< | grep -v '^#pragma GCC' > $$@
-
-compiler/stage$1/build/primop-data-decl.hs-incl: compiler/stage$1/build/primops.txt $$$$(genprimopcode_INPLACE)
-	"$$(genprimopcode_INPLACE)" --data-decl          < $$< > $$@
-compiler/stage$1/build/primop-tag.hs-incl: compiler/stage$1/build/primops.txt $$$$(genprimopcode_INPLACE)
-	"$$(genprimopcode_INPLACE)" --primop-tag         < $$< > $$@
-compiler/stage$1/build/primop-list.hs-incl: compiler/stage$1/build/primops.txt $$$$(genprimopcode_INPLACE)
-	"$$(genprimopcode_INPLACE)" --primop-list        < $$< > $$@
-compiler/stage$1/build/primop-has-side-effects.hs-incl: compiler/stage$1/build/primops.txt $$$$(genprimopcode_INPLACE)
-	"$$(genprimopcode_INPLACE)" --has-side-effects   < $$< > $$@
-compiler/stage$1/build/primop-out-of-line.hs-incl: compiler/stage$1/build/primops.txt $$$$(genprimopcode_INPLACE)
-	"$$(genprimopcode_INPLACE)" --out-of-line        < $$< > $$@
-compiler/stage$1/build/primop-commutable.hs-incl: compiler/stage$1/build/primops.txt $$$$(genprimopcode_INPLACE)
-	"$$(genprimopcode_INPLACE)" --commutable         < $$< > $$@
-compiler/stage$1/build/primop-code-size.hs-incl: compiler/stage$1/build/primops.txt $$$$(genprimopcode_INPLACE)
-	"$$(genprimopcode_INPLACE)" --code-size          < $$< > $$@
-compiler/stage$1/build/primop-can-fail.hs-incl: compiler/stage$1/build/primops.txt $$$$(genprimopcode_INPLACE)
-	"$$(genprimopcode_INPLACE)" --can-fail           < $$< > $$@
-compiler/stage$1/build/primop-strictness.hs-incl: compiler/stage$1/build/primops.txt $$$$(genprimopcode_INPLACE)
-	"$$(genprimopcode_INPLACE)" --strictness         < $$< > $$@
-compiler/stage$1/build/primop-fixity.hs-incl: compiler/stage$1/build/primops.txt $$$$(genprimopcode_INPLACE)
-	"$$(genprimopcode_INPLACE)" --fixity             < $$< > $$@
-compiler/stage$1/build/primop-primop-info.hs-incl: compiler/stage$1/build/primops.txt $$$$(genprimopcode_INPLACE)
-	"$$(genprimopcode_INPLACE)" --primop-primop-info < $$< > $$@
-compiler/stage$1/build/primop-vector-uniques.hs-incl: compiler/stage$1/build/primops.txt $$$$(genprimopcode_INPLACE)
-	"$$(genprimopcode_INPLACE)" --primop-vector-uniques     < $$< > $$@
-compiler/stage$1/build/primop-vector-tys.hs-incl: compiler/stage$1/build/primops.txt $$$$(genprimopcode_INPLACE)
-	"$$(genprimopcode_INPLACE)" --primop-vector-tys         < $$< > $$@
-compiler/stage$1/build/primop-vector-tys-exports.hs-incl: compiler/stage$1/build/primops.txt $$$$(genprimopcode_INPLACE)
-	"$$(genprimopcode_INPLACE)" --primop-vector-tys-exports < $$< > $$@
-compiler/stage$1/build/primop-vector-tycons.hs-incl: compiler/stage$1/build/primops.txt $$$$(genprimopcode_INPLACE)
-	"$$(genprimopcode_INPLACE)" --primop-vector-tycons      < $$< > $$@
-compiler/stage$1/build/primop-docs.hs-incl: compiler/stage$1/build/primops.txt $$$$(genprimopcode_INPLACE)
-	"$$(genprimopcode_INPLACE)" --wired-in-docs             < $$< > $$@
-
-# Usages aren't used any more; but the generator
-# can still generate them if we want them back
-compiler/stage$1/build/primop-usage.hs-incl: compiler/stage$1/build/primops.txt $$$$(genprimopcode_INPLACE)
-	"$$(genprimopcode_INPLACE)" --usage              < $$< > $$@
-
-endef
-
-$(eval $(call preprocessCompilerFiles,1))
-$(eval $(call preprocessCompilerFiles,2))
-$(eval $(call preprocessCompilerFiles,3))
-
-# -----------------------------------------------------------------------------
-# Configuration
-
-ifeq "$(GhcWithInterpreter)" "YES"
-compiler_stage2_CONFIGURE_OPTS += --flags=internal-interpreter
-
-endif
-
-ifeq "$(TargetOS_CPP)" "openbsd"
-compiler_CONFIGURE_OPTS += --ld-options=-E
-endif
-
-ifeq "$(WITH_TERMINFO)" "NO"
-compiler_stage2_CONFIGURE_OPTS += --flags=-terminfo
-endif
-
-# Careful optimisation of the parser: we don't want to throw everything
-# at it, because that takes too long and doesn't buy much, but we do want
-# to inline certain key external functions, so we instruct GHC not to
-# throw away inlinings as it would normally do in -O0 mode.
-# Since GHC version 7.8, we need -fcmm-sink to be
-# passed to the compiler. This is required on x86 to avoid the
-# register allocator running out of stack slots when compiling this
-# module with -fPIC -dynamic.
-# See #8182 for all the details
-compiler/stage1/build/Parser_HC_OPTS += -O0 -fno-ignore-interface-pragmas -fcmm-sink
-compiler/stage2/build/Parser_HC_OPTS += -O0 -fno-ignore-interface-pragmas -fcmm-sink
-compiler/stage3/build/Parser_HC_OPTS += -O0 -fno-ignore-interface-pragmas -fcmm-sink
-
-ifeq "$(GhcProfiled)" "YES"
-# If we're profiling GHC then we want SCCs.  However, adding -auto-all
-# everywhere tends to give a hard-to-read profile, and adds lots of
-# overhead.  A better approach is to proceed top-down; identify the
-# parts of the compiler of interest, and then add further cost centres
-# as necessary.  Turn on -fprof-auto for individual modules like this:
-
-# compiler/GHC/Driver/Pipeline_HC_OPTS += -fprof-auto
-compiler/GHC/Driver/Make_HC_OPTS     += -fprof-auto
-compiler/GHC_HC_OPTS                 += -fprof-auto
-
-# or alternatively add {-# OPTIONS_GHC -fprof-auto #-} to the top of
-# modules you're interested in.
-
-# We seem to still build the vanilla libraries even if we say
-# --disable-library-vanilla, but installation then fails, as Cabal
-# doesn't copy the vanilla .hi files, but ghc-pkg complains about
-# their absence when we register the package. So for now, we just
-# leave the vanilla libraries enabled.
-# compiler_stage2_CONFIGURE_OPTS += --disable-library-vanilla
-compiler_stage2_CONFIGURE_OPTS += --ghc-pkg-option=--force
-endif
-
-compiler_stage3_CONFIGURE_OPTS := $(compiler_stage2_CONFIGURE_OPTS)
-
-compiler/stage1/package-data.mk : compiler/ghc.mk
-compiler/stage2/package-data.mk : compiler/ghc.mk
-compiler/stage3/package-data.mk : compiler/ghc.mk
-
-# -----------------------------------------------------------------------------
-# And build the package
-
-compiler_PACKAGE = ghc
-
-# Don't do splitting for the GHC package, it takes too long and
-# there's not much benefit.
-compiler_stage1_SplitSections = NO
-compiler_stage2_SplitSections = NO
-compiler_stage3_SplitSections = NO
-
-# if stage is set to something other than "1" or "", disable stage 1
-# See Note [Stage1Only vs stage=1] in mk/config.mk.in.
-ifneq "$(filter-out 1,$(stage))" ""
-compiler_stage1_NOT_NEEDED = YES
-endif
-# if stage is set to something other than "2" or "", disable stage 2
-ifneq "$(filter-out 2,$(stage))" ""
-compiler_stage2_NOT_NEEDED = YES
-endif
-# stage 3 has to be requested explicitly with stage=3
-ifneq "$(stage)" "3"
-compiler_stage3_NOT_NEEDED = YES
-endif
-$(eval $(call build-package,compiler,stage1,0))
-$(eval $(call build-package,compiler,stage2,1))
-$(eval $(call build-package,compiler,stage3,2))
-
-# We only want to turn keepCAFs on if we will be loading dynamic
-# Haskell libraries with GHCi. We therefore filter the object file
-# out for non-dynamic ways.
-define keepCAFsForGHCiDynOnly
-# $1 = stage
-# $2 = way
-ifeq "$$(findstring dyn, $2)" ""
-compiler_stage$1_$2_C_OBJS := $$(filter-out %/keepCAFsForGHCi.$$($2_osuf),$$(compiler_stage$1_$2_C_OBJS))
-endif
-endef
-$(foreach w,$(compiler_stage1_WAYS),$(eval $(call keepCAFsForGHCiDynOnly,1,$w)))
-$(foreach w,$(compiler_stage2_WAYS),$(eval $(call keepCAFsForGHCiDynOnly,2,$w)))
-$(foreach w,$(compiler_stage3_WAYS),$(eval $(call keepCAFsForGHCiDynOnly,3,$w)))
-
-# after build-package, because that adds --enable-library-for-ghci
-# to compiler_stage*_CONFIGURE_OPTS:
-# We don't build the GHCi library for the ghc package. We can load it
-# the .a file instead, and as object splitting isn't on for the ghc
-# package this isn't much slower.However, not building the package saves
-# a significant chunk of disk space.
-compiler_stage1_CONFIGURE_OPTS += --disable-library-for-ghci
-compiler_stage2_CONFIGURE_OPTS += --disable-library-for-ghci
-compiler_stage3_CONFIGURE_OPTS += --disable-library-for-ghci
-
-# after build-package, because that sets compiler_stage1_HC_OPTS:
-
-ifeq "$(V)" "0"
-compiler_stage1_HC_OPTS += $(filter-out -Rghc-timing,$(GhcHcOpts)) $(GhcStage1HcOpts)
-compiler_stage2_HC_OPTS += $(filter-out -Rghc-timing,$(GhcHcOpts)) $(GhcStage2HcOpts)
-compiler_stage3_HC_OPTS += $(filter-out -Rghc-timing,$(GhcHcOpts)) $(GhcStage3HcOpts)
-else
-compiler_stage1_HC_OPTS += $(GhcHcOpts) $(GhcStage1HcOpts)
-compiler_stage2_HC_OPTS += $(GhcHcOpts) $(GhcStage2HcOpts)
-compiler_stage3_HC_OPTS += $(GhcHcOpts) $(GhcStage3HcOpts)
-endif
-
-ifneq "$(BINDIST)" "YES"
-
-$(compiler_stage1_depfile_haskell) : $(COMPILER_INCLUDES_DEPS) $(PRIMOP_BITS_STAGE1)
-$(compiler_stage2_depfile_haskell) : $(COMPILER_INCLUDES_DEPS) $(PRIMOP_BITS_STAGE2)
-$(compiler_stage3_depfile_haskell) : $(COMPILER_INCLUDES_DEPS) $(PRIMOP_BITS_STAGE3)
-
-$(foreach way,$(compiler_stage1_WAYS),\
-      compiler/stage1/build/PrimOp.$($(way)_osuf)) : $(PRIMOP_BITS_STAGE1)
-$(foreach way,$(compiler_stage2_WAYS),\
-      compiler/stage2/build/PrimOp.$($(way)_osuf)) : $(PRIMOP_BITS_STAGE2)
-$(foreach way,$(compiler_stage3_WAYS),\
-      compiler/stage3/build/PrimOp.$($(way)_osuf)) : $(PRIMOP_BITS_STAGE3)
-
-endif
diff --git a/docs/users_guide/ghc.mk b/docs/users_guide/ghc.mk
deleted file mode 100644
index af051227fc97648c9cd1030aed6de810cd8fa13b..0000000000000000000000000000000000000000
--- a/docs/users_guide/ghc.mk
+++ /dev/null
@@ -1,50 +0,0 @@
-# -----------------------------------------------------------------------------
-#
-# (c) 2009 The University of Glasgow
-#
-# This file is part of the GHC build system.
-#
-# To understand how the build system works and how to modify it, see
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/architecture
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/modifying
-#
-# -----------------------------------------------------------------------------
-
-
-docs/users_guide_RST_SOURCES := $(wildcard docs/users_guide/*.rst)
-
-$(eval $(call sphinx,docs/users_guide,users_guide))
-
-html_docs/users_guide : docs/users_guide/images/prof_scc.svg
-
-# man page
-docs/users_guide_MAN_RST_SOURCES := docs/users_guide/ghc.rst
-
-MAN_SECTION := 1
-MAN_PAGES := docs/users_guide/build-man/ghc.1
-
-ifneq "$(BINDIST)" "YES"
-$(MAN_PAGES): $(docs/users_guide_MAN_RST_SOURCES)
-	$(SPHINXBUILD) -b man -d docs/users_guide/.doctrees-man docs/users_guide docs/users_guide/build-man
-endif
-
-$(eval $(call clean-target,users-guide,manpage,docs/users_guide/.doctrees-man/ docs/users_guide/build-man/))
-
-man : $(MAN_PAGES)
-
-ifeq "$(BUILD_MAN)" "YES"
-ifeq "$(phase)" "final"
-$(eval $(call all-target,users_guide/man,$(MAN_PAGES)))
-endif
-
-INSTALL_MANPAGES += $(MAN_PAGES)
-
-install: install_man
-
-.PHONY: install_man
-install_man: $(MAN_PAGES)
-	$(INSTALL_DIR) "$(DESTDIR)$(mandir)"
-	$(INSTALL_DIR) "$(DESTDIR)$(mandir)/man$(MAN_SECTION)"
-	$(INSTALL_MAN) $(INSTALL_OPTS) $(MAN_PAGES) "$(DESTDIR)$(mandir)/man$(MAN_SECTION)"
-
-endif
diff --git a/driver/ghc.mk b/driver/ghc.mk
deleted file mode 100644
index c1adefe5dc52be7e3824e0c03df22340342c97a3..0000000000000000000000000000000000000000
--- a/driver/ghc.mk
+++ /dev/null
@@ -1,22 +0,0 @@
-# -----------------------------------------------------------------------------
-#
-# (c) 2009 The University of Glasgow
-#
-# This file is part of the GHC build system.
-#
-# To understand how the build system works and how to modify it, see
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/architecture
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/modifying
-#
-# -----------------------------------------------------------------------------
-
-$(eval $(call all-target,driver,$(INPLACE_LIB)/ghc-usage.txt $(INPLACE_LIB)/ghci-usage.txt))
-
-$(INPLACE_LIB)/ghc-usage.txt: driver/ghc-usage.txt
-	cp $< $@
-
-$(INPLACE_LIB)/ghci-usage.txt: driver/ghci-usage.txt
-	cp $< $@
-
-INSTALL_LIBS += driver/ghc-usage.txt driver/ghci-usage.txt
-
diff --git a/driver/ghc/ghc.mk b/driver/ghc/ghc.mk
deleted file mode 100644
index 46fccefdfa12b2ea5270df2caee6846ae1b2358e..0000000000000000000000000000000000000000
--- a/driver/ghc/ghc.mk
+++ /dev/null
@@ -1,24 +0,0 @@
-# -----------------------------------------------------------------------------
-#
-# (c) 2009 The University of Glasgow
-#
-# This file is part of the GHC build system.
-#
-# To understand how the build system works and how to modify it, see
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/architecture
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/modifying
-#
-# -----------------------------------------------------------------------------
-
-ifeq "$(Windows_Host)" "YES"
-
-driver/ghc_dist_C_SRCS   = ghc.c ../utils/cwrapper.c ../utils/getLocation.c
-driver/ghc_dist_CC_OPTS += -I driver/utils
-driver/ghc_dist_PROGNAME = ghc-$(ProjectVersion)
-driver/ghc_dist_INSTALL  = YES
-driver/ghc_dist_INSTALL_INPLACE = NO
-
-$(eval $(call build-prog,driver/ghc,dist,0))
-
-endif
-
diff --git a/driver/ghci/ghc.mk b/driver/ghci/ghc.mk
deleted file mode 100644
index 9ddab61649cde11513f0343b1e99e8e91c2e923e..0000000000000000000000000000000000000000
--- a/driver/ghci/ghc.mk
+++ /dev/null
@@ -1,67 +0,0 @@
-# -----------------------------------------------------------------------------
-#
-# (c) 2009 The University of Glasgow
-#
-# This file is part of the GHC build system.
-#
-# To understand how the build system works and how to modify it, see
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/architecture
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/modifying
-#
-# -----------------------------------------------------------------------------
-
-ifeq "$(GhcWithInterpreter)" "YES"
-ifneq "$(Windows_Host)" "YES"
-
-install: install_driver_ghci
-
-.PHONY: install_driver_ghci
-install_driver_ghci: WRAPPER=$(DESTDIR)$(bindir)/$(CrossCompilePrefix)ghci-$(ProjectVersion)
-install_driver_ghci:
-	$(INSTALL_DIR) "$(DESTDIR)$(bindir)"
-	$(call removeFiles,                                "$(WRAPPER)")
-	$(CREATE_SCRIPT)                                   "$(WRAPPER)"
-	echo '#!/bin/sh'                                   >> "$(WRAPPER)"
-	echo 'exec "$(bindir)/$(CrossCompilePrefix)ghc-$(ProjectVersion)" --interactive "$$@"' >> "$(WRAPPER)"
-	$(EXECUTABLE_FILE)                                 "$(WRAPPER)"
-	$(call removeFiles,"$(DESTDIR)$(bindir)/$(CrossCompilePrefix)ghci")
-	$(LN_S) $(CrossCompilePrefix)ghci-$(ProjectVersion) "$(DESTDIR)$(bindir)/$(CrossCompilePrefix)ghci"
-
-else # Windows_Host...
-
-driver/ghci_dist_C_SRCS  = ghci.c ../utils/cwrapper.c ../utils/getLocation.c ../utils/isMinTTY.c
-driver/ghci_dist_CC_OPTS += -I driver/utils
-driver/ghci_dist_PROGNAME = ghci
-driver/ghci_dist_INSTALL = YES
-driver/ghci_dist_INSTALL_INPLACE = YES
-driver/ghci_dist_OTHER_OBJS = driver/ghci/ghci.res
-
-$(eval $(call build-prog,driver/ghci,dist,1))
-
-driver/ghci_dist_PROG_VER = ghci-$(ProjectVersion)$(exeext1)
-
-INSTALL_BINS += driver/ghci/dist/build/tmp/$(driver/ghci_dist_PROG_VER)
-
-driver/ghci/ghci.res : driver/ghci/ghci.rc driver/ghci/ghci.ico
-	"$(WINDRES)" --preprocessor="$(CPP) -xc -DRC_INVOKED" -o driver/ghci/ghci.res -i driver/ghci/ghci.rc -O coff
-
-driver/ghci/dist/build/tmp/$(driver/ghci_dist_PROG_VER) : driver/ghci/dist/build/tmp/$(driver/ghci_dist_PROG)
-	"$(CP)" $< $@
-
-install : install_driver_ghcii
-
-.PHONY: install_driver_ghcii
-install_driver_ghcii: GHCII_SCRIPT=$(DESTDIR)$(bindir)/ghcii.sh
-install_driver_ghcii: GHCII_SCRIPT_VERSIONED = $(DESTDIR)$(bindir)/ghcii-$(ProjectVersion).sh
-install_driver_ghcii:
-	$(INSTALL_DIR) "$(DESTDIR)$(bindir)"
-	$(call removeFiles,"$(GHCII_SCRIPT)")
-	echo "#!/bin/sh"                                        >> $(GHCII_SCRIPT)
-	echo 'exec "$$(dirname "$$0")"/ghc --interactive "$$@"' >> $(GHCII_SCRIPT)
-	$(EXECUTABLE_FILE) $(GHCII_SCRIPT)
-	cp $(GHCII_SCRIPT) $(GHCII_SCRIPT_VERSIONED)
-	$(EXECUTABLE_FILE) $(GHCII_SCRIPT_VERSIONED)
-
-endif
-endif
-
diff --git a/driver/haddock/ghc.mk b/driver/haddock/ghc.mk
deleted file mode 100644
index 24417b8d7f883b7709f17f3adf7adb5bfc4eb722..0000000000000000000000000000000000000000
--- a/driver/haddock/ghc.mk
+++ /dev/null
@@ -1,24 +0,0 @@
-# -----------------------------------------------------------------------------
-#
-# (c) 2009 The University of Glasgow
-#
-# This file is part of the GHC build system.
-#
-# To understand how the build system works and how to modify it, see
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/architecture
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/modifying
-#
-# -----------------------------------------------------------------------------
-
-ifeq "$(Windows_Host)" "YES"
-
-driver/haddock_dist_C_SRCS   = haddock.c ../utils/cwrapper.c ../utils/getLocation.c
-driver/haddock_dist_CC_OPTS += -I driver/utils
-driver/haddock_dist_PROGNAME = haddock-$(ProjectVersion)
-driver/haddock_dist_INSTALL  = YES
-driver/haddock_dist_INSTALL_INPLACE = NO
-
-$(eval $(call build-prog,driver/haddock,dist,0))
-
-endif
-
diff --git a/ghc.mk b/ghc.mk
deleted file mode 100644
index f0b76b964041ee5dfda70e6c97691366852ac823..0000000000000000000000000000000000000000
--- a/ghc.mk
+++ /dev/null
@@ -1,1594 +0,0 @@
-# -----------------------------------------------------------------------------
-#
-# (c) 2009-2013 The University of Glasgow
-#
-# This file is part of the GHC build system.
-#
-# To understand how the build system works and how to modify it, see
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/architecture
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/modifying
-#
-# -----------------------------------------------------------------------------
-
-# ToDo List.
-#
-#   * remove old Makefiles, add new stubs for building in subdirs
-#     * docs/Makefile
-#     * docs/storage-mgmt/Makefile
-#     * docs/vh/Makefile
-#     * rts/dotnet/Makefile
-#     * utils/Makefile
-#   * add Makefiles for the rest of the utils/ programs that aren't built
-#     by default (need to exclude them from 'make all' too)
-
-# Possible cleanups:
-#
-#   * per-source-file dependencies instead of one .depend file?
-#   * eliminate undefined variables, and use --warn-undefined-variables?
-#   * put outputs from different ways in different subdirs of distdir/build,
-#     then we don't have to use -osuf/-hisuf.  We would have to install
-#     them in different places too, so we'd need ghc-pkg support for packages
-#     of different ways.
-#   * make PACKAGES_STAGE1 generated by './configure' or './boot'?
-#   * we should use a directory of package.conf files rather than a single
-#     file for the inplace package database, so that we can express
-#     dependencies more accurately.  Otherwise it's possible to get into
-#     a state where the package database is out of date, and the build
-#     system doesn't know.
-
-# Approximate build order.
-#
-# The actual build order is defined by dependencies, and the phase
-# ordering used to ensure correct ordering of makefile-generation; see
-#    https://gitlab.haskell.org/ghc/ghc/wikis/building/architecture/idiom/phase-ordering
-#
-#     * With bootstrapping compiler:
-#           o Build utils/ghc-cabal
-#           o Build utils/ghc-pkg
-#           o Build utils/hsc2hs
-#           o Build utils/genprimopcode
-#           o Build utils/deriveConstants
-#     * For each package:
-#	    o configure, generate package-data.mk and inplace-pkg-config
-#           o register each package into inplace/lib/package.conf
-#     * build libffi (if not disabled by --with-system-libffi)
-#     * With bootstrapping compiler:
-#	    o Build libraries/{filepath,hpc,Cabal}
-#           o Build compiler (stage 1)
-#     * With stage 1 compiler:
-#           o Build libraries/*
-#	    o Build rts
-#           o Build utils/* (except haddock)
-#           o Build compiler (stage 2)
-#     * With stage 2 compiler:
-#           o Build utils/haddock
-#           o Build compiler (stage 3) (optional)
-#     * With haddock:
-#           o libraries/*
-#           o compiler
-
-.PHONY: default all haddock
-
-# We need second expansion for the way we handle directories, so that
-#     | $$$$(dir $$$$@)/.
-# expands to the directory of a rule that uses a % pattern.
-.SECONDEXPANSION:
-
-default : all
-
-
-##################################################
-# Check that we have a new enough 'make'
-
-HAVE_EVAL := NO
-$(eval HAVE_EVAL := YES)
-
-ifeq "$(HAVE_EVAL)" "NO"
-$(error Your make does not support eval. You need GNU make >= 3.81)
-endif
-
-ifeq "$(abspath /)" ""
-$(error Your make does not support abspath. You need GNU make >= 3.81)
-endif
-##################################################
-
-# -----------------------------------------------------------------------------
-# Catch make if it runs away into an infinite loop
-ifeq      "$(MAKE_RESTARTS)" ""
-else ifeq "$(MAKE_RESTARTS)" "1"
-else
-$(error Make has restarted itself $(MAKE_RESTARTS) times; is there a makefile bug? See https://gitlab.haskell.org/ghc/ghc/wikis/building/troubleshooting#make-has-restarted-itself-3-times-is-there-a-makefile-bug for details)
-endif
-
-# -----------------------------------------------------------------------------
-# Misc GNU make utils
-
-nothing=
-space=$(nothing) $(nothing)
-comma=,
-
-# -----------------------------------------------------------------------------
-# Makefile debugging
-#
-# to see the effective value used for a Makefile variable, do
-#  make show VALUE=MY_VALUE
-#
-
-show:
-	@echo '$(VALUE)="$($(VALUE))"'
-
-# echo is used by the nightly builders to query the build system for
-# information.
-# Using printf means that we don't get a trailing newline. We escape
-# backslashes and double quotes in the string to protect them from the
-# shell, and percent signs to protect them from printf.
-echo:
-	@printf "$(subst %,%%,$(subst ",\",$(subst \,\\\\,$($(VALUE)))))"
-
-# -----------------------------------------------------------------------------
-# Include subsidiary build-system bits
-
-include mk/tree.mk
-
-ifneq "$(CLEANING)" "YES"
-include mk/config.mk
-ifeq "$(ProjectVersion)" ""
-$(error Please run ./configure first)
-endif
-endif
-
-include mk/ways.mk
-
-# (Optional) build-specific configuration
-include mk/custom-settings.mk
-
-# The user can reset SRC_HC_OPTS from mk/build.mk. Since we try to append
-# '-Wall' to it in mk/warnings.mk, we have to include mk/warnings.mk after
-# mk/custom-settings.mk.
-include mk/warnings.mk
-
-# -----------------------------------------------------------------------------
-# Check for inconsistent settings, after reading mk/build.mk.
-# Although mk/config.mk should always contain consistent settings (set by
-# configure), mk/build.mk can contain pretty much anything.
-
-ifneq "$(CLEANING)" "YES"
-
-ifeq "$(DYNAMIC_GHC_PROGRAMS)" "YES"
-ifeq "$(findstring dyn,$(GhcLibWays))" ""
-$(error dyn is not in $$(GhcLibWays), but $$(DYNAMIC_GHC_PROGRAMS) is YES)
-endif
-else
-ifeq "$(findstring v,$(GhcLibWays))" ""
-$(error v is not in $$(GhcLibWays), and $$(DYNAMIC_GHC_PROGRAMS) is not YES)
-endif
-endif
-
-ifeq "$(GhcProfiled)" "YES"
-ifeq "$(findstring p,$(GhcLibWays))" ""
-$(error p is not in $$(GhcLibWays), and $$(GhcProfiled) is YES)
-endif
-endif
-
-ifeq "$(BUILD_SPHINX_HTML)" "YES"
-ifeq "$(SPHINXBUILD)" ""
-$(error BUILD_SPHINX_HTML=YES, but `sphinx-build` was not found. \
-  Create a file `mk/validate.mk` containing `BUILD_SPHINX_HTML=NO` \
-  (when validating), or install `sphinx-build` and rerun `./configure`. \
-  See https://gitlab.haskell.org/ghc/ghc/wikis/building/preparation)
-endif
-endif
-
-ifeq "$(BUILD_SPHINX_PDF)" "YES"
-ifeq "$(XELATEX)" ""
-$(error BUILD_SPHINX_PDF=YES, but `xelatex` was not found. \
-  Install `xelatex`, then rerun `./configure`. \
-  See https://gitlab.haskell.org/ghc/ghc/wikis/building/preparation)
-endif
-ifeq "$(MAKEINDEX)" ""
-$(error BUILD_SPHINX_PDF=YES, but `makeindex` was not found. \
-  Install `xelatex`, then rerun `./configure`. \
-  See https://gitlab.haskell.org/ghc/ghc/wikis/building/preparation)
-endif
-endif
-
-ifeq "$(HSCOLOUR_SRCS)" "YES"
-ifeq "$(HSCOLOUR_CMD)" ""
-$(error HSCOLOUR_SRCS=YES, but HSCOLOUR_CMD is empty. \
-  Run `cabal install hscolour`, then rerun `./configure`. \
-  See https://gitlab.haskell.org/ghc/ghc/wikis/building/preparation)
-endif
-endif
-
-ifeq "$(HADDOCK_DOCS)" "YES"
-ifneq "$(CrossCompiling) $(Stage1Only)" "NO NO"
-$(error Can not build haddock docs when CrossCompiling or Stage1Only. \
-  Set HADDOCK_DOCS=NO in your mk/build.mk file. \
-  See Note [No stage2 packages when CrossCompiling or Stage1Only])
-endif
-endif
-
-endif # CLEANING
-
-# -----------------------------------------------------------------------------
-
-ifeq "$(phase)" ""
-phase = final
-endif
-
-# -----------------------------------------------------------------------------
-# Utility definitions
-
-include rules/prof.mk
-include rules/trace.mk
-include rules/library-path.mk
-include rules/add-dependency.mk
-include rules/make-command.mk
-include rules/pretty_commands.mk
-
-# -----------------------------------------------------------------------------
-# Macros for standard targets
-
-include rules/all-target.mk
-include rules/clean-target.mk
-
-# -----------------------------------------------------------------------------
-# The inplace tree
-
-$(eval $(call clean-target,root,inplace,inplace/bin inplace/lib))
-
-# -----------------------------------------------------------------------------
-# Whether to build dependencies or not
-
-# When we're just doing 'make clean' or 'make show', then we don't need
-# to build dependencies.
-
-ifeq "$(CLEANING)" "YES"
-NO_INCLUDE_DEPS = YES
-NO_INCLUDE_PKGDATA = YES
-endif
-ifneq "$(findstring bootstrapping-files,$(MAKECMDGOALS))" ""
-NO_INCLUDE_DEPS = YES
-NO_INCLUDE_PKGDATA = YES
-endif
-ifeq "$(findstring show,$(MAKECMDGOALS))" "show"
-NO_INCLUDE_DEPS = YES
-# We want package-data.mk for show
-endif
-
-# -----------------------------------------------------------------------------
-# Ways
-
-include rules/way-prelims.mk
-
-$(foreach way,$(ALL_WAYS),\
-  $(eval $(call way-prelims,$(way))))
-
-ifeq "$(DYNAMIC_GHC_PROGRAMS)" "YES"
-GHCI_WAY = dyn
-HADDOCK_WAY = dyn
-else
-GHCI_WAY = v
-HADDOCK_WAY = v
-endif
-
-WINDOWS_DYN_PROG_RTS := rts
-ifeq "$(GhcThreaded)" "YES"
-WINDOWS_DYN_PROG_RTS := $(WINDOWS_DYN_PROG_RTS)_thr
-endif
-ifeq "$(GhcDebugged)" "YES"
-WINDOWS_DYN_PROG_RTS := $(WINDOWS_DYN_PROG_RTS)_debug
-endif
-WINDOWS_DYN_PROG_RTS := $(WINDOWS_DYN_PROG_RTS)_dyn_LIB_FILE
-
-# -----------------------------------------------------------------------------
-# Compilation Flags
-
-include rules/distdir-opts.mk
-include rules/distdir-way-opts.mk
-
-# -----------------------------------------------------------------------------
-# Finding source files and object files
-
-include rules/hs-sources.mk
-include rules/c-sources.mk
-include rules/includes-sources.mk
-include rules/hs-objs.mk
-include rules/c-objs.mk
-include rules/cmm-objs.mk
-
-# -----------------------------------------------------------------------------
-# Suffix rules
-
-# Suffix rules cause "make clean" to fail on Windows (trac #3233)
-# so we don't make any when cleaning.
-ifneq "$(CLEANING)" "YES"
-include rules/hs-suffix-rules-srcdir.mk
-include rules/hs-suffix-way-rules-srcdir.mk
-include rules/hs-suffix-way-rules.mk
-include rules/hi-rule.mk
-include rules/c-suffix-rules.mk
-include rules/cxx-suffix-rules.mk
-include rules/cmm-suffix-rules.mk
-endif
-
-# -----------------------------------------------------------------------------
-# Building package-data.mk files from .cabal files
-
-include rules/package-config.mk
-
-# -----------------------------------------------------------------------------
-# Building dependencies
-
-include rules/dependencies.mk
-include rules/build-dependencies.mk
-include rules/include-dependencies.mk
-
-# -----------------------------------------------------------------------------
-# Build package-data.mk files
-
-include rules/build-package-data.mk
-
-# -----------------------------------------------------------------------------
-# Build and install a program
-
-include rules/build-prog.mk
-include rules/shell-wrapper.mk
-
-# -----------------------------------------------------------------------------
-# Build a package
-
-include rules/build-package.mk
-include rules/build-package-way.mk
-include rules/haddock.mk
-include rules/foreachLibrary.mk
-
-# -----------------------------------------------------------------------------
-# Registering hand-written package descriptions (used in rts)
-
-include rules/manual-package-config.mk
-
-# -----------------------------------------------------------------------------
-# Docs
-
-include rules/sphinx.mk
-
-# -----------------------------------------------------------------------------
-# Making bindists and sdists
-
-include rules/bindist.mk
-include rules/sdist-ghc-file.mk
-
-# -----------------------------------------------------------------------------
-# Directories
-
-# Don't try to delete directories:
-.PRECIOUS: %/.
-
-# Create build directories on demand.  NB. the | below: this indicates
-# that $(MKDIRHIER) is an order-only dependency, which means that this
-# rule fires after building mkdirhier, but we won't try to recreate
-# directories if mkdirhier changes.
-%/. : | $(MKDIRHIER)
-	"$(MKDIRHIER)" $@
-
-# -----------------------------------------------------------------------------
-# Lax dependencies
-
-ifeq "$(LAX_DEPENDENCIES)" "YES"
-LAX_DEPS_FOLLOW = |
-else
-LAX_DEPS_FOLLOW =
-endif
-
-# This is a bit of a hack. When LAX_DEPS_FOLLOW is | some rules end up
-# looking like
-#     target: a | b | c
-# The first | signals the start of the order-only dependencies, but make
-# treats the second | as a dependency. So we need to tell make how to
-# build that dependency.
-
-.PHONY: |
-| :
-	@:
-
-# -----------------------------------------------------------------------------
-# Packages to build
-# The lists of packages that we *actually* going to build in each stage:
-#
-#  $(PACKAGES_STAGE0)
-#  $(PACKAGES_STAGE1)
-#  $(PACKAGES_STAGE2)
-#
-# Note that we need to add them to these variables in dependency
-# order, as this is the order that they get configured in.
-
-ifeq "$(CLEANING)" "YES"
-
-define addLibraryForCleaning
-# We just add all packages to both the stage 0 and stage 1 lists.
-# Stage 2 gets cleaned in the same way as stage 1, so no need to
-# add it there.
-PACKAGES_STAGE0 += $1
-PACKAGES_STAGE1 += $1
-endef
-$(eval $(call foreachLibrary,addLibraryForCleaning))
-
-else # CLEANING
-
-# Packages that are built by stage0. These packages are dependencies of
-# programs such as GHC and ghc-pkg, that we do not assume the stage0
-# compiler already has installed (or up-to-date enough).
-# Note that these must be given in topological order.
-PACKAGES_STAGE0 = binary transformers mtl hpc ghc-boot-th ghc-boot template-haskell text parsec Cabal/Cabal-syntax Cabal/Cabal ghc-heap exceptions ghci
-ifeq "$(Windows_Host)" "NO"
-PACKAGES_STAGE0 += terminfo
-endif
-
-PACKAGES_STAGE1 += ghc-prim
-PACKAGES_STAGE1 += ghc-bignum
-PACKAGES_STAGE1 += base
-PACKAGES_STAGE1 += filepath
-PACKAGES_STAGE1 += array
-PACKAGES_STAGE1 += deepseq
-PACKAGES_STAGE1 += pretty
-PACKAGES_STAGE1 += ghc-boot-th
-PACKAGES_STAGE1 += template-haskell
-PACKAGES_STAGE1 += bytestring
-PACKAGES_STAGE1 += containers/containers
-
-ifeq "$(Windows_Target)" "YES"
-PACKAGES_STAGE1 += Win32
-endif
-PACKAGES_STAGE1 += time
-ifeq "$(Windows_Target)" "NO"
-PACKAGES_STAGE1 += unix
-endif
-
-PACKAGES_STAGE1 += directory
-PACKAGES_STAGE1 += process
-PACKAGES_STAGE1 += hpc
-PACKAGES_STAGE1 += binary
-PACKAGES_STAGE1 += transformers
-PACKAGES_STAGE1 += mtl
-PACKAGES_STAGE1 += ghc-boot
-PACKAGES_STAGE1 += text
-PACKAGES_STAGE1 += parsec
-PACKAGES_STAGE1 += Cabal/Cabal-syntax
-PACKAGES_STAGE1 += Cabal/Cabal
-PACKAGES_STAGE1 += ghc-compact
-PACKAGES_STAGE1 += ghc-heap
-PACKAGES_STAGE1 += integer-gmp # compat library
-
-ifeq "$(HADDOCK_DOCS)" "YES"
-PACKAGES_STAGE1 += xhtml
-endif
-
-ifeq "$(WITH_TERMINFO)" "YES"
-PACKAGES_STAGE1 += terminfo
-else
-libraries/haskeline_CONFIGURE_OPTS += --flags=-terminfo
-endif
-
-# ghc-cabal doesn't currently support packages containing both libraries
-# and executables. This flag disables the latter.
-libraries/haskeline_CONFIGURE_OPTS += --flags=-examples
-
-# Disable text's dependency on simdutf due to packaging considerations
-# described in #20724.
-libraries/text_CONFIGURE_OPTS += --flags=-simdutf
-
-# Filepath is vendored for template-haskell to avoid making it non-resinstallable.
-# see #21738
-libraries/template-haskell_CONFIGURE_OPTS += --flags=+vendor-filepath
-
-libraries/ghc-bignum_CONFIGURE_OPTS += -f $(BIGNUM_BACKEND)
-
-ifeq "$(BIGNUM_BACKEND)" "gmp"
-GMP_ENABLED = YES
-libraries/ghc-bignum_CONFIGURE_OPTS += --configure-option="--with-gmp"
-else
-GMP_ENABLED = NO
-endif
-
-PACKAGES_STAGE1 += stm
-PACKAGES_STAGE1 += exceptions
-PACKAGES_STAGE1 += haskeline
-PACKAGES_STAGE1 += ghci
-PACKAGES_STAGE1 += libiserv
-
-# See Note [No stage2 packages when CrossCompiling or Stage1Only].
-# See Note [Stage1Only vs stage=1] in mk/config.mk.in.
-ifeq "$(CrossCompiling) $(Stage1Only)" "NO NO"
-define addExtraPackage
-ifeq "$2" "-"
-# Do nothing; this package is already handled above
-else ifeq "$2" "extra"
-ifeq "$$(BUILD_EXTRA_PKGS)" "YES"
-PACKAGES_STAGE2 += $1
-endif
-else
-$$(error Unknown package tag: $2)
-endif
-endef
-$(eval $(call foreachLibrary,addExtraPackage))
-endif
-
-# We install all packages that we build.
-INSTALL_PACKAGES := $(addprefix libraries/,$(PACKAGES_STAGE1))
-# See Note [Stage1Only vs stage=1] in mk/config.mk.in.
-ifneq "$(Stage1Only)" "YES"
-INSTALL_PACKAGES += compiler
-endif
-INSTALL_PACKAGES += $(addprefix libraries/,$(PACKAGES_STAGE2))
-
-endif # CLEANING
-
-# Note [Dependencies between package-data.mk files]
-# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-# We cannot run ghc-cabal to configure a package until we have
-# configured and registered all of its dependencies.  So the following
-# hack forces all the configure steps to happen in exactly the following order:
-#
-#  $(PACKAGES_STAGE1) ghc(stage2) $(PACKAGES_STAGE2)
-#
-# Ideally we should use the correct dependencies here to allow more
-# parallelism, but we don't know the dependencies until we've
-# generated the package-data.mk files.
-define fixed_pkg_dep
-libraries/$1/$2/package-data.mk : $$(fixed_pkg_prev)
-fixed_pkg_prev:=libraries/$1/$2/package-data.mk
-endef
-
-ifneq "$(BINDIST)" "YES"
-fixed_pkg_prev=
-$(foreach pkg,$(PACKAGES_STAGE1),$(eval $(call fixed_pkg_dep,$(pkg),dist-install)))
-
-# Intermezzo: utils that we build with the stage1 compiler. They depend on
-# the stage1 packages, so we have to make sure those packages get configured
-# and registered before we can start with these. Note that they don't depend on
-# eachother, so we can configure them in parallel.
-utils/ghc-cabal/dist-install/package-data.mk: $(fixed_pkg_prev)
-utils/hpc/dist-install/package-data.mk: $(fixed_pkg_prev)
-utils/ghc-pkg/dist-install/package-data.mk: $(fixed_pkg_prev)
-utils/hsc2hs/dist-install/package-data.mk: $(fixed_pkg_prev)
-utils/compare_sizes/dist-install/package-data.mk: $(fixed_pkg_prev)
-utils/runghc/dist-install/package-data.mk: $(fixed_pkg_prev)
-utils/iserv/stage2/package-data.mk: $(fixed_pkg_prev)
-utils/iserv/stage2_p/package-data.mk: $(fixed_pkg_prev)
-utils/iserv/stage2_dyn/package-data.mk: $(fixed_pkg_prev)
-ifeq "$(Windows_Host)" "YES"
-utils/gen-dll/dist-install/package-data.mk: $(fixed_pkg_prev)
-endif
-linters/linters-common/dist-install/package-data.mk: $(fixed_pkg_prev)
-linters/lint-notes/dist-install/package-data.mk: $(fixed_pkg_prev) linters/linters-common/dist-install/package-data.mk
-linters/lint-whitespace/dist-install/package-data.mk: $(fixed_pkg_prev) linters/linters-common/dist-install/package-data.mk
-
-# the GHC package doesn't live in libraries/, so we add its dependency manually:
-compiler/stage2/package-data.mk: $(fixed_pkg_prev)
-
-# and continue with PACKAGES_STAGE2, which depend on GHC:
-fixed_pkg_prev:=compiler/stage2/package-data.mk
-$(foreach pkg,$(PACKAGES_STAGE2),$(eval $(call fixed_pkg_dep,$(pkg),dist-install)))
-
-ghc/stage1/package-data.mk: compiler/stage1/package-data.mk
-ghc/stage2/package-data.mk: compiler/stage2/package-data.mk
-
-# Utils that we build with the stage2 compiler.
-# They depend on the ghc library and some other libraries, but depending on
-# the ghc library's package-data.mk is sufficient, as that in turn depends on
-# all the other libraries' package-data.mk files.
-utils/haddock/dist/package-data.mk: compiler/stage2/package-data.mk
-utils/check-ppr/dist-install/package-data.mk: compiler/stage2/package-data.mk
-utils/check-exact/dist-install/package-data.mk: compiler/stage2/package-data.mk
-utils/count-deps/dist-install/package-data.mk: compiler/stage2/package-data.mk
-
-# ensure that system-cxx-std-lib is installed in the inplace compiler by
-# injecting a dependency from ghc-prim
-libraries/ghc-prim/dist-install/package-data.mk : inplace/lib/package.conf.d/system-cxx-std-lib-1.0.conf
-
-# add the final package.conf dependency: ghc-prim depends on RTS
-libraries/ghc-prim/dist-install/package-data.mk : rts/dist-install/package.conf.inplace
-endif
-
-# --------------------------------
-# Misc package-related settings
-
-# Run Haddock for the packages that will be installed. We need to handle
-# compiler specially due to the different dist directory name.
-$(foreach p,$(INSTALL_PACKAGES),$(eval $p_dist-install_DO_HADDOCK = YES))
-compiler_stage2_DO_HADDOCK = YES
-
-BOOT_PKG_CONSTRAINTS := \
-    $(foreach d,$(PACKAGES_STAGE0),\
-        $(foreach p,$(basename $(notdir $(wildcard libraries/$d/*.cabal))),\
-            --constraint "$p == $(shell grep -i "^Version:" libraries/$d/$p.cabal | sed "s/[^0-9.]//g")"))
-
-# The actual .a and .so/.dll files: needed for dependencies.
-$(foreach way,$(GhcLibWays),$(eval ALL_STAGE1_$(way)_LIBS = $$(foreach lib,$$(PACKAGES_STAGE1),$$(libraries/$$(lib)_dist-install_$(way)_LIB))))
-
-ALL_STAGE1_LIBS = $(ALL_STAGE1_v_LIBS)
-
-ifeq "$(BuildSharedLibs)" "YES"
-ALL_STAGE1_LIBS += $(foreach lib,$(PACKAGES_STAGE1),$(libraries/$(lib)_dist-install_dyn_LIB))
-endif
-BOOT_LIBS = $(foreach lib,$(PACKAGES_STAGE0),$(libraries/$(lib)_dist-boot_v_LIB))
-
-# Only build internal interpreter support for the stage2 ghci lib
-libraries/ghci_dist-install_CONFIGURE_OPTS += --flags=internal-interpreter
-
-# ----------------------------------------
-# Special magic for the ghc-prim package
-
-# We want the ghc-prim package to include the GHC.Prim module when it
-# is registered, but not when it is built, because GHC.Prim is not a
-# real source module, it is built-in to GHC.
-
-# Strip it out again before building the package:
-define libraries/ghc-prim_PACKAGE_MAGIC
-libraries/ghc-prim_dist-install_MODULES := $$(filter-out GHC.Prim,$$(libraries/ghc-prim_dist-install_MODULES))
-endef
-
-PRIMOPS_TXT_STAGE1 = compiler/stage1/build/primops.txt
-
-libraries/ghc-prim/dist-install/build/GHC/PrimopWrappers.hs : $$(genprimopcode_INPLACE) $(PRIMOPS_TXT_STAGE1) | $$(dir $$@)/.
-	"$(genprimopcode_INPLACE)" --make-haskell-wrappers < $(PRIMOPS_TXT_STAGE1) >$@
-
-# Required so that Haddock documents the primops.
-libraries/ghc-prim_dist-install_EXTRA_HADDOCK_SRCS = libraries/ghc-prim/dist-install/build/autogen/GHC/Prim.hs
-
-# -----------------------------------------------------------------------------
-# Include build instructions from all subdirs
-BUILD_DIRS += utils/mkdirhier
-BUILD_DIRS += utils/touchy
-BUILD_DIRS += utils/unlit
-BUILD_DIRS += utils/hp2ps
-BUILD_DIRS += utils/genprimopcode
-BUILD_DIRS += driver
-BUILD_DIRS += driver/ghci
-BUILD_DIRS += driver/ghc
-BUILD_DIRS += driver/haddock
-BUILD_DIRS += libffi
-BUILD_DIRS += utils/deriveConstants
-BUILD_DIRS += rts/include
-BUILD_DIRS += rts
-BUILD_DIRS += bindisttest
-BUILD_DIRS += utils/genapply
-ifeq "$(Windows_Host)" "YES"
-BUILD_DIRS += utils/gen-dll
-endif
-
-# When cleaning, don't add any library packages to BUILD_DIRS. We include
-# ghc.mk files for all BUILD_DIRS, but they don't exist until after running
-# `./boot`. Running `make clean` before anything else, as well as running
-# `make maintainer-clean` twice, should work.
-ifneq "$(CLEANING)" "YES"
-# These are deliberately in reverse order, so as to ensure that
-# there is no need to have them in dependency order. That's important
-# because it's tricky to ensure that they are in dependency order when
-# cross-compiling, as some packages may only be in PACKAGES_STAGE0
-# or PACKAGES_STAGE1.
-BUILD_DIRS += $(patsubst %, libraries/%, $(PACKAGES_STAGE2))
-BUILD_DIRS += $(patsubst %, libraries/%, $(PACKAGES_STAGE1))
-BUILD_DIRS += $(patsubst %, libraries/%, $(filter-out $(PACKAGES_STAGE1),$(PACKAGES_STAGE0)))
-endif
-
-ifeq "$(BIGNUM_BACKEND)" "gmp"
-BUILD_DIRS += libraries/ghc-bignum/gmp
-endif
-BUILD_DIRS += utils/haddock
-BUILD_DIRS += utils/haddock/doc
-BUILD_DIRS += compiler
-BUILD_DIRS += utils/hsc2hs
-BUILD_DIRS += utils/ghc-pkg
-BUILD_DIRS += utils/testremove
-BUILD_DIRS += utils/check-ppr
-BUILD_DIRS += utils/check-exact
-BUILD_DIRS += utils/count-deps
-BUILD_DIRS += utils/ghc-cabal
-BUILD_DIRS += utils/hpc
-BUILD_DIRS += utils/runghc
-BUILD_DIRS += ghc
-BUILD_DIRS += docs/users_guide
-BUILD_DIRS += utils/compare_sizes
-BUILD_DIRS += utils/iserv
-BUILD_DIRS += linters/linters-common
-BUILD_DIRS += linters/lint-notes
-BUILD_DIRS += linters/lint-whitespace
-
-# ----------------------------------------------
-# Actually include the sub-ghc.mk's
-
-ifeq "$(CLEANING)" "YES"
-# Don't exclude any BUILD_DIRS when cleaning. When you for example build
-# haddock once, but later set HADDOCK_DOCS back to NO, then 'make clean'
-# should still clean the haddock directory.
-else # CLEANING
-ifeq "$(BINDIST)" "YES"
-BUILD_DIRS := $(filter-out utils/mkdirhier,$(BUILD_DIRS))
-BUILD_DIRS := $(filter-out utils/genprimopcode,$(BUILD_DIRS))
-BUILD_DIRS := $(filter-out bindisttest,$(BUILD_DIRS))
-BUILD_DIRS := $(filter-out utils/genapply,$(BUILD_DIRS))
-endif
-ifeq "$(HADDOCK_DOCS)" "NO"
-BUILD_DIRS := $(filter-out utils/haddock,$(BUILD_DIRS))
-BUILD_DIRS := $(filter-out utils/haddock/doc,$(BUILD_DIRS))
-endif
-ifeq "$(BUILD_SPHINX_HTML) $(BUILD_SPHINX_PDF)" "NO NO"
-BUILD_DIRS := $(filter-out docs/users_guide,$(BUILD_DIRS))
-# Don't to build this little utility if we're not building the User's Guide.
-endif
-ifeq "$(Windows_Host)" "NO"
-BUILD_DIRS := $(filter-out utils/touchy,$(BUILD_DIRS))
-endif
-ifeq "$(GhcWithInterpreter)" "NO"
-# runghc is just GHCi in disguise
-BUILD_DIRS := $(filter-out utils/runghc,$(BUILD_DIRS))
-endif
-ifneq "$(CrossCompiling) $(Stage1Only)" "NO NO"
-# See Note [No stage2 packages when CrossCompiling or Stage1Only].
-# See Note [Stage1Only vs stage=1] in mk/config.mk.in.
-BUILD_DIRS := $(filter-out utils/check-ppr,$(BUILD_DIRS))
-BUILD_DIRS := $(filter-out utils/check-exact,$(BUILD_DIRS))
-BUILD_DIRS := $(filter-out utils/count-deps,$(BUILD_DIRS))
-endif
-endif # CLEANING
-
-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)
-
-# We need this extra dependency when building our own libffi, because
-# GHCi.FFI.hs #includes ffi.h
-ifneq "$(UseSystemLibFFI)" "YES"
-libraries/ghci/dist-install/build/GHCi/FFI.hs : $(libffi_HEADERS)
-endif
-
-# ----------------------------------------------
-# Per-package compiler flags
-#
-# If you want to add per-package compiler flags, see `mk/warnings.mk`.
-
-# Add $(GhcLib(Extra)HcOpts) to all package builds
-$(foreach pkg,$(PACKAGES_STAGE1) $(PACKAGES_STAGE2),$(eval libraries/$(pkg)_dist-install_HC_OPTS += $$(GhcLibHcOpts)))
-$(foreach pkg,$(PACKAGES_STAGE1) $(PACKAGES_STAGE2),$(eval libraries/$(pkg)_dist-install_EXTRA_HC_OPTS += $$(GhcLibExtraHcOpts)))
-
-# Add $(GhcBootLib(Extra)HcOpts) to all stage0 package builds
-$(foreach pkg,$(PACKAGES_STAGE0),$(eval libraries/$(pkg)_dist-boot_HC_OPTS += $$(GhcBootLibHcOpts)))
-$(foreach pkg,$(PACKAGES_STAGE0),$(eval libraries/$(pkg)_dist-boot_EXTRA_HC_OPTS += $$(GhcBootLibExtraHcOpts)))
-
-# -----------------------------------------------------------------------------
-# Bootstrapping libraries
-
-# We need to build a few libraries with the installed GHC, since GHC itself
-# and some of the tools depend on them:
-
-ifneq "$(BINDIST)" "YES"
-
-ifneq "$(BOOTSTRAPPING_CONF)" ""
-ifeq "$(wildcard $(BOOTSTRAPPING_CONF))" ""
-$(shell "$(GHC_PKG)" init $(BOOTSTRAPPING_CONF))
-endif
-endif
-
-$(eval $(call clean-target,root,bootstrapping_conf,$(BOOTSTRAPPING_CONF)))
-
-# register the boot packages in strict sequence, because running
-# multiple ghc-pkgs in parallel doesn't work (registrations may get
-# lost).
-fixed_pkg_prev=
-$(foreach pkg,$(PACKAGES_STAGE0),$(eval $(call fixed_pkg_dep,$(pkg),dist-boot)))
-# ghc-pkg, unlike other utils that we build with the stage0 compiler (TODO: is
-# this really true?), depends on several boot packages (e.g. Cabal and
-# ghc-boot). They need to be configured before ghc-pkg, so we add a
-# dependency between their package-data.mk files. See also Note
-# [Dependencies between package-data.mk files].
-utils/ghc-pkg/dist/package-data.mk: $(fixed_pkg_prev)
-compiler/stage1/package-data.mk:    $(fixed_pkg_prev)
-endif
-
-ifneq "$(BINDIST)" "YES"
-# Make sure we have all the GHCi libs by the time we've built
-# ghc-stage2.
-#
-GHCI_LIBS = \
-    $(foreach way,$(GhcLibWays),\
-        $(foreach lib,$(PACKAGES_STAGE1),\
-            $(libraries/$(lib)_dist-install_$(way)_GHCI_LIB)) \
-        $(compiler_stage2_$(way)_GHCI_LIB))
-
-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
-
-# -----------------------------------------------
-# Haddock-related bits
-
-# Build the Haddock contents and index
-ifeq "$(HADDOCK_DOCS)" "YES"
-libraries/dist-haddock/index.html: $(haddock_INPLACE) $(ALL_HADDOCK_FILES)
-	cd libraries && sh gen_contents_index --intree
-ifeq "$(phase)" "final"
-$(eval $(call all-target,library_doc_index,libraries/dist-haddock/index.html))
-endif
-INSTALL_LIBRARY_DOCS += libraries/dist-haddock/*
-endif
-
-# -----------------------------------------------------------------------------
-# system-cxx-std-lib
-
-inplace/lib/package.conf.d/system-cxx-std-lib-1.0.conf : mk/system-cxx-std-lib-1.0.conf $(ghc-pkg_INPLACE)
-	"$(ghc-pkg_INPLACE)" update --force $<
-
-# -----------------------------------------------------------------------------
-# Creating a local mingw copy on Windows
-
-ifeq "$(Windows_Host)" "YES"
-
-install : install_mingw
-.PHONY: install_mingw
-install_mingw : $(INPLACE_MINGW)
-	"$(CP)" -Rp $(INPLACE_MINGW) $(prefix)
-
-endif # Windows_Host
-
-# the following is the work around suggested by @carter in #17418 during install
-# time.  This should help us with code signing issues by removing extended
-# attribuets from all files.
-ifeq "$(Darwin_Host)" "YES"
-XATTR ?= /usr/bin/xattr
-
-install : install_darwin
-.PHONY: install_darwin
-install_darwin:
-	if [ -e "${XATTR}" ]; then "${XATTR}" -c -r .; fi
-endif # Darwin_Host
-
-ifneq "$(BINDIST)" "YES"
-$(ghc-prim-$(libraries/ghc-prim_dist-install_VERSION)_HADDOCK_FILE): \
-    libraries/ghc-prim/dist-install/build/autogen/GHC/Prim.hs
-endif # BINDIST
-
-libraries/ghc-prim/dist-install/build/autogen/GHC/Prim.hs: \
-                            $(PRIMOPS_TXT_STAGE1) $$(genprimopcode_INPLACE) \
-                          | $$(dir $$@)/.
-	"$(genprimopcode_INPLACE)" --make-haskell-source < $< > $@
-
-# -----------------------------------------------------------------------------
-# Installation
-
-install: install_libs install_packages install_libexecs \
-         install_bins install_libexec_scripts
-ifeq "$(HADDOCK_DOCS)" "YES"
-install: install_docs
-endif
-
-define installLibsTo
-# $1 = libraries to install
-# $2 = directory to install to
-#
-# The .dll case calls STRIP_CMD explicitly, instead of `install -s`, because
-# on Win64, "install -s" calls a strip that doesn't understand 64bit binaries.
-# For some reason, this means the DLLs end up non-executable, which means
-# executables that use them just segfault.
-	$(INSTALL_DIR) $2
-	for i in $1; do \
-		case $$i in \
-		  *.a) \
-		    $(INSTALL_DATA) $(INSTALL_OPTS) $$i $2; \
-		    $(RANLIB_CMD) $2/`basename $$i` ;; \
-		  *.dll) \
-		    $(INSTALL_PROGRAM) $(INSTALL_OPTS) $$i $2 ; \
-		    $(STRIP_CMD) $2/`basename $$i` ;; \
-		  *.so) \
-		    $(INSTALL_SHLIB) $(INSTALL_OPTS) $$i $2 ;; \
-		  *.dylib) \
-		    $(INSTALL_SHLIB) $(INSTALL_OPTS) $$i $2;; \
-		  *) \
-		    $(INSTALL_DATA) $(INSTALL_OPTS) $$i $2; \
-		esac; \
-	done
-endef
-
-install_bins: $(INSTALL_BINS) $(INSTALL_SCRIPTS)
-	$(INSTALL_DIR) "$(DESTDIR)$(bindir)"
-ifneq "$(INSTALL_BINS)" ""
-	for i in $(INSTALL_BINS); do \
-		$(INSTALL_PROGRAM) $(INSTALL_BIN_OPTS) $$i "$(DESTDIR)$(bindir)" ;  \
-	done
-endif
-ifneq "$(INSTALL_SCRIPTS)" ""
-	for i in $(INSTALL_SCRIPTS); do \
-		$(INSTALL_SCRIPT) $(INSTALL_OPTS) $$i "$(DESTDIR)$(bindir)" ;  \
-	done
-endif
-
-install_libs: $(INSTALL_LIBS)
-	$(call installLibsTo, $(INSTALL_LIBS), "$(DESTDIR)$(ghclibdir)")
-
-# We rename ghc-stage2, so that the right program name is used in error
-# messages etc. But not on windows.
-RENAME_LIBEXEC_GHC_STAGE_TO_GHC = YES
-ifeq "$(Stage1Only) $(Windows_Host)" "YES YES"
-# resulting ghc-stage1 is built to run on windows
-RENAME_LIBEXEC_GHC_STAGE_TO_GHC = NO
-endif
-ifeq "$(Stage1Only) $(Windows_Target)" "NO YES"
-# resulting ghc-stage1 is built to run on windows
-RENAME_LIBEXEC_GHC_STAGE_TO_GHC = NO
-endif
-
-install_libexecs:  $(INSTALL_LIBEXECS)
-ifneq "$(INSTALL_LIBEXECS)" ""
-	$(INSTALL_DIR) "$(DESTDIR)$(ghclibexecdir)/bin"
-	for i in $(INSTALL_LIBEXECS); do \
-		$(INSTALL_PROGRAM) $(INSTALL_BIN_OPTS) $$i "$(DESTDIR)$(ghclibexecdir)/bin"; \
-	done
-ifeq "$(RENAME_LIBEXEC_GHC_STAGE_TO_GHC)" "YES"
-	"$(MV)" "$(DESTDIR)$(ghclibexecdir)/bin/ghc-stage$(INSTALL_GHC_STAGE)" "$(DESTDIR)$(ghclibexecdir)/bin/ghc"
-endif
-endif
-
-install_libexec_scripts: $(INSTALL_LIBEXEC_SCRIPTS)
-ifneq "$(INSTALL_LIBEXEC_SCRIPTS)" ""
-	$(INSTALL_DIR) "$(DESTDIR)$(ghclibexecdir)/bin"
-	for i in $(INSTALL_LIBEXEC_SCRIPTS); do \
-		$(INSTALL_SCRIPT) $(INSTALL_OPTS) $$i "$(DESTDIR)$(ghclibexecdir)/bin"; \
-	done
-endif
-
-install_docs: $(INSTALL_DOCS)
-	$(INSTALL_DIR) "$(DESTDIR)$(docdir)"
-ifneq "$(INSTALL_DOCS)" ""
-	for i in $(INSTALL_DOCS); do \
-		$(INSTALL_DOC) $(INSTALL_OPTS) $$i "$(DESTDIR)$(docdir)"; \
-	done
-endif
-	$(INSTALL_DIR) "$(DESTDIR)$(docdir)/html"
-	$(INSTALL_DOC) $(INSTALL_OPTS) docs/index.html "$(DESTDIR)$(docdir)/html"
-ifneq "$(INSTALL_LIBRARY_DOCS)" ""
-	$(INSTALL_DIR) "$(DESTDIR)$(docdir)/html/libraries"
-	for i in $(INSTALL_LIBRARY_DOCS); do \
-		$(INSTALL_DOC) $(INSTALL_OPTS) $$i "$(DESTDIR)$(docdir)/html/libraries/"; \
-	done
-	$(INSTALL_DATA) $(INSTALL_OPTS) libraries/prologue.txt "$(DESTDIR)$(docdir)/html/libraries/"
-	$(INSTALL_SCRIPT) $(INSTALL_OPTS) libraries/gen_contents_index "$(DESTDIR)$(docdir)/html/libraries/"
-endif
-ifneq "$(INSTALL_HTML_DOC_DIRS)" ""
-	for i in $(INSTALL_HTML_DOC_DIRS); do \
-		$(CP) -Rp $$i "$(DESTDIR)$(docdir)/html"; \
-	done
-	for i in "$(DESTDIR)$(docdir)/html"/*/.doctrees; do \
-		if [ -d "$$i" ]; then \
-			rm -r "$$i"; \
-		fi \
-	done
-endif
-
-INSTALLED_PACKAGE_CONF=$(DESTDIR)$(topdir)/package.conf.d
-
-ifeq "$(BINDIST) $(CrossCompiling)" "NO YES"
-# when installing ghc-stage2 we can't run target's
-# 'ghc-pkg' and 'ghc-stage2' but those are needed for registration.
-INSTALLED_GHC_REAL=$(TOP)/inplace/bin/ghc-stage1
-INSTALLED_GHC_PKG_REAL=$(TOP)/$(ghc-pkg_DIST_BINARY)
-else # CrossCompiling
-# Install packages in the right order, so that ghc-pkg doesn't complain.
-# Also, install ghc-pkg first.
-ifeq "$(Windows_Host)" "NO"
-INSTALLED_GHC_REAL=$(DESTDIR)$(ghclibexecdir)/bin/ghc
-INSTALLED_GHC_PKG_REAL=$(DESTDIR)$(ghclibexecdir)/bin/ghc-pkg
-else
-INSTALLED_GHC_REAL=$(DESTDIR)$(bindir)/ghc.exe
-INSTALLED_GHC_PKG_REAL=$(DESTDIR)$(bindir)/ghc-pkg.exe
-endif
-endif # CrossCompiling
-
-# Set the INSTALL_DISTDIR_p for each package; compiler is special
-$(foreach p,$(filter-out compiler,$(INSTALL_PACKAGES)),\
-   $(eval INSTALL_DISTDIR_$p = dist-install))
-INSTALL_DISTDIR_compiler = stage2
-
-# Now we can do the installation
-install_packages: install_libexecs
-install_packages: rts/dist-install/package.conf.install mk/system-cxx-std-lib-1.0.conf
-	$(INSTALL_DIR) "$(DESTDIR)$(topdir)"
-	$(call removeTrees,"$(INSTALLED_PACKAGE_CONF)")
-	$(INSTALL_DIR) "$(INSTALLED_PACKAGE_CONF)"
-	$(INSTALL_DIR) "$(DESTDIR)$(topdir)/rts"
-	$(call installLibsTo, $(RTS_INSTALL_LIBS), "$(DESTDIR)$(topdir)/rts")
-	$(foreach p, $(INSTALL_PACKAGES),                             \
-	    $(call make-command,                                      \
-	           "$(ghc-cabal_INPLACE)" copy                        \
-	                                  $p $(INSTALL_DISTDIR_$p)    \
-	                                  "$(STRIP_CMD)"              \
-	                                  '$(DESTDIR)'                \
-	                                  '$(prefix)'                 \
-	                                  '$(ghclibdir)'              \
-	                                  '$(docdir)/html/libraries'  \
-	                                  '$(GhcLibWays)'))
-	"$(INSTALLED_GHC_PKG_REAL)" --force --global-package-db "$(INSTALLED_PACKAGE_CONF)" update rts/dist-install/package.conf.install
-	"$(INSTALLED_GHC_PKG_REAL)" --force --global-package-db "$(INSTALLED_PACKAGE_CONF)" update mk/system-cxx-std-lib-1.0.conf
-	$(foreach p, $(INSTALL_PACKAGES),                             \
-	    $(call make-command,                                      \
-	           "$(ghc-cabal_INPLACE)" register                    \
-	                                  $p $(INSTALL_DISTDIR_$p)    \
-	                                  "$(INSTALLED_GHC_REAL)"     \
-	                                  "$(INSTALLED_GHC_PKG_REAL)" \
-	                                  "$(DESTDIR)$(topdir)"       \
-	                                  '$(DESTDIR)'                \
-	                                  '$(prefix)'                 \
-	                                  '$(ghclibdir)'              \
-	                                  '$(docdir)/html/libraries'  \
-	                                  $(RelocatableBuild)))
-# when we install the packages above, ghc-pkg obeys umask when creating
-# the package.conf files, but for everything else we specify the
-# permissions. We therefore now fix the permissions of package.cache.
-# This means "sudo make install" does the right thing even if it runs
-# with an 077 umask.
-	for f in '$(INSTALLED_PACKAGE_CONF)'/*; do $(CREATE_DATA) "$$f"; done
-
-# Finally, update package.cache to ensure it's newer than the registration
-# files. This avoids #13375.
-	"$(INSTALLED_GHC_PKG_REAL)" --global-package-db "$(INSTALLED_PACKAGE_CONF)" recache
-
-# -----------------------------------------------------------------------------
-# Binary distributions
-
-ifneq "$(CLEANING)" "YES"
-# This rule seems to hold some files open on Windows which prevents
-# cleaning, perhaps due to the $(wildcard).
-
-$(eval $(call bindist-list,.,\
-    LICENSE \
-    README \
-    INSTALL \
-    configure config.sub config.guess install-sh \
-    llvm-targets \
-    llvm-passes \
-    packages \
-    Makefile \
-    mk/config.mk.in \
-    mk/system-cxx-std-lib-1.0.conf.in \
-    $(INPLACE_BIN)/mkdirhier \
-    utils/ghc-cabal/dist-install/build/tmp/ghc-cabal \
-    $(BINDIST_WRAPPERS) \
-    $(BINDIST_LIBS) \
-    $(BINDIST_HI) \
-    $(BINDIST_EXTRAS) \
-    rts/include/Makefile \
-    $(includes_dist-install_H_FILES) \
-    $(libffi_HEADERS) \
-    $(INSTALL_LIBEXECS) \
-    $(INSTALL_LIBEXEC_SCRIPTS) \
-    $(INSTALL_BINS) \
-    $(INSTALL_SCRIPTS) \
-    $(INSTALL_MANPAGES) \
-    $(INSTALL_DOCS) \
-    $(INSTALL_LIBRARY_DOCS) \
-    $(addsuffix /*,$(INSTALL_HTML_DOC_DIRS)) \
-    docs/index.html \
-    $(wildcard compiler/stage2/doc) \
-    $(wildcard libraries/*/dist-install/doc/) \
-    $(wildcard libraries/*/*/dist-install/doc/) \
-    $(filter-out llvm-targets llvm-passes $(includes_SETTINGS),$(INSTALL_LIBS)) \
-    $(RTS_INSTALL_LIBS) \
-    $(filter-out %/project.mk mk/config.mk %/mk/install.mk,$(MAKEFILE_LIST)) \
-    mk/project.mk \
-    mk/install.mk.in \
-    bindist.mk \
-    libraries/gen_contents_index \
-    libraries/prologue.txt \
- ))
-endif
-# mk/project.mk gets an absolute path, so we manually include it in
-# the bindist with a relative path
-
-BIN_DIST_MK = $(BIN_DIST_PREP_DIR)/bindist.mk
-
-# Note [Persist CrossCompiling in binary distributions]
-# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-#
-# The build system uses the CrossCompiling variable to decide whether or not we
-# should build various packages that must be built using the compiler.
-# Consequently, it is important that we persist its value in the binary
-# distribution so we know during `make install` not to go looking for files that
-# would have been built for these packages. Failing to do this causes #13325.
-#
-# See Note [No stage2 packages when CrossCompiling or Stage1Only].
-
-unix-binary-dist-prep: $(includes_dist-install_H_FILES_GENERATED)
-	$(call removeTrees,bindistprep/)
-	"$(MKDIRHIER)" $(BIN_DIST_PREP_DIR)
-	set -e; for i in packages LICENSE compiler ghc rts libraries linters utils docs libffi includes driver mk rules Makefile m4 aclocal.m4 config.sub config.guess install-sh llvm-targets llvm-passes ghc.mk inplace distrib/configure.ac distrib/README distrib/INSTALL; do ln -s ../../$$i $(BIN_DIST_PREP_DIR)/; done
-	echo "HADDOCK_DOCS       = $(HADDOCK_DOCS)"       >> $(BIN_DIST_MK)
-	echo "BUILD_SPHINX_HTML  = $(BUILD_SPHINX_HTML)"  >> $(BIN_DIST_MK)
-	echo "BUILD_SPHINX_PDF   = $(BUILD_SPHINX_PDF)"   >> $(BIN_DIST_MK)
-	echo "BUILD_MAN          = $(BUILD_MAN)"          >> $(BIN_DIST_MK)
-	echo "override ghc-cabal_INPLACE = utils/ghc-cabal/dist-install/build/tmp/ghc-cabal-bindist" >> $(BIN_DIST_MK)
-	echo "UseSystemLibFFI    = $(UseSystemLibFFI)"    >> $(BIN_DIST_MK)
-# See Note [Persist CrossCompiling in binary distributions]
-	echo "CrossCompiling     = $(CrossCompiling)"     >> $(BIN_DIST_MK)
-	cd $(BIN_DIST_PREP_DIR) && autoreconf
-	$(call removeFiles,$(BIN_DIST_PREP_TAR))
-# h means "follow symlinks", e.g. if aclocal.m4 is a symlink to a source
-# tree then we want to include the real file, not a symlink to it
-	sort bindist-list | uniq > bindist-list.uniq
-	cd bindistprep && "$(TAR_CMD)" hcf - -T ../bindist-list.uniq | $(TAR_COMP_CMD) -c > ../$(BIN_DIST_PREP_TAR_COMP)
-
-windows-binary-dist-prep:
-	$(call removeTrees,bindistprep/)
-	$(MAKE) prefix=$(TOP)/$(BIN_DIST_PREP_DIR) install
-	cd bindistprep && "$(TAR_CMD)" cf - $(BIN_DIST_NAME) | $(TAR_COMP_CMD) -c > ../$(BIN_DIST_PREP_TAR_COMP)
-
-# tryTimes tries to run its third argument multiple times, until it
-# succeeds. Don't call it directly; call try10Times instead.
-# The first and second argument to tryTimes are lists of values.
-# The length of the first argument is the number of times we have
-# already tried. The length of the second argument is the number more
-# times we will try.
-tryTimes = $(if $2, \
-                { echo 'Try $(words x $1): $3' ; $3 ; } || \
-                $(call tryTimes,x $1,$(wordlist 2,$(words $2),$2),$3), \
-                )
-
-# Try to run the argument 10 times. If all 10 fail, fail.
-try10Times = $(call tryTimes,,x x x x x x x x x x,$1) { echo Failed; false; }
-
-.PHONY: publish-binary-dist
-publish-binary-dist:
-	$(call try10Times,$(PublishCp) $(BIN_DIST_TAR_COMP) $(PublishLocation)/dist)
-
-ifeq "$(mingw32_TARGET_OS)" "1"
-DOCDIR_TO_PUBLISH = $(BIN_DIST_INST_DIR)/doc
-else
-DOCDIR_TO_PUBLISH = $(BIN_DIST_INST_DIR)/share/doc/ghc
-endif
-
-.PHONY: publish-docs
-publish-docs:
-	$(call try10Times,$(PublishCp) -r $(DOCDIR_TO_PUBLISH)/* $(PublishLocation)/docs)
-
-# -----------------------------------------------------------------------------
-# Source distributions
-
-# Do it like this:
-#
-#	$ ./boot
-#	$ ./configure
-#	$ make sdist
-#
-
-# A source dist is built from a (partial) build tree, because we
-# require some extra files not contained in a git checkout: the
-# output from Happy and Alex, for example.
-#
-# The steps performed by 'make sdist' are as follows:
-#   - build those extra files
-#   - create a complete link-tree of the current build tree in /tmp
-#   - run 'make distclean' on that tree
-#   - remove a bunch of other files that we know shouldn't be in the dist
-
-#
-# Directory in which we're going to build the src dist
-#
-SRC_DIST_ROOT      = sdistprep
-SRC_DIST_BASE_NAME = ghc-$(ProjectVersion)
-
-SRC_DIST_GHC_NAME                 = ghc-$(ProjectVersion)-src
-SRC_DIST_GHC_ROOT                 = $(SRC_DIST_ROOT)/ghc
-SRC_DIST_GHC_DIR                  = $(SRC_DIST_GHC_ROOT)/$(SRC_DIST_BASE_NAME)
-SRC_DIST_GHC_TARBALL              = $(SRC_DIST_ROOT)/$(SRC_DIST_GHC_NAME).tar.$(TAR_COMP_EXT)
-
-SRC_DIST_WINDOWS_TARBALLS_NAME    = ghc-$(ProjectVersion)-windows-extra-src
-SRC_DIST_WINDOWS_TARBALLS_ROOT    = $(SRC_DIST_ROOT)/windows-tarballs
-SRC_DIST_WINDOWS_TARBALLS_DIR     = $(SRC_DIST_WINDOWS_TARBALLS_ROOT)/$(SRC_DIST_BASE_NAME)
-SRC_DIST_WINDOWS_TARBALLS_TARBALL = $(SRC_DIST_ROOT)/$(SRC_DIST_WINDOWS_TARBALLS_NAME).tar.$(TAR_COMP_EXT)
-
-SRC_DIST_TESTSUITE_NAME           = ghc-$(ProjectVersion)-testsuite
-SRC_DIST_TESTSUITE_ROOT           = $(SRC_DIST_ROOT)/testsuite-ghc
-SRC_DIST_TESTSUITE_DIR            = $(SRC_DIST_TESTSUITE_ROOT)/$(SRC_DIST_BASE_NAME)
-SRC_DIST_TESTSUITE_TARBALL        = $(SRC_DIST_ROOT)/$(SRC_DIST_TESTSUITE_NAME).tar.$(TAR_COMP_EXT)
-
-#
-# Files to include in source distributions
-#
-SRC_DIST_GHC_DIRS = bindisttest compiler distrib docs driver ghc hadrian \
-    includes libffi libffi-tarballs libraries m4 mk rts rules utils
-SRC_DIST_GHC_FILES += \
-    GIT_COMMIT_ID HACKING.md INSTALL.md LICENSE MAKEHELP.md Makefile \
-    README.md VERSION aclocal.m4 boot config.guess config.sub configure \
-    configure.ac ghc.mk install-sh llvm-passes llvm-targets \
-    m4/ax_compare_version.m4 packages
-
-.PHONY: VERSION
-VERSION:
-	@if test -f $@ && test "`cat $@`" = "$(ProjectVersion)"; \
-	then echo "$@ needs no update"; \
-	else echo "update $@ ($(ProjectVersion))"; echo "$(ProjectVersion)" > $@; fi
-
-.PHONY: GIT_COMMIT_ID
-GIT_COMMIT_ID:
-	@if test -d .git && test "`git rev-parse HEAD`" != "$(ProjectGitCommitId)"; then \
-	   echo "******************************************************************************"; \
-	   echo "Stale ProjectGitCommitId (=$(ProjectGitCommitId)) detected!"; \
-           echo "'git rev-parse HEAD' says: `git rev-parse HEAD`"; \
-	   echo "Please re-run './configure' before creating source-distribution"; \
-	   echo "******************************************************************************"; \
-	   exit 1; \
-	fi
-	@if test -f $@ && test "`cat $@`" = "$(ProjectGitCommitId)"; \
-	then echo "$@ needs no update"; \
-	else echo "update $@ ($(ProjectGitCommitId))"; echo -n "$(ProjectGitCommitId)" > $@; fi
-
-sdist-ghc-prep-tree : VERSION GIT_COMMIT_ID
-
-.PHONY: sdist-ghc-prep-tree
-sdist-ghc-prep-tree :
-	$(call removeTrees,$(SRC_DIST_GHC_ROOT))
-	$(call removeFiles,$(SRC_DIST_GHC_TARBALL))
-	mkdir -p $(SRC_DIST_ROOT)
-	mkdir -p $(SRC_DIST_GHC_ROOT)
-	mkdir -p $(SRC_DIST_GHC_DIR)
-	cd $(SRC_DIST_GHC_DIR) && for i in $(SRC_DIST_GHC_DIRS); do mkdir -p $$i; ( cd $$i && lndir $(TOP)/$$i ); done
-	cd $(SRC_DIST_GHC_DIR) && for i in $(SRC_DIST_GHC_FILES); do $(LN_S) $(TOP)/$$i .; done
-	cd $(SRC_DIST_GHC_DIR) && $(MAKE) distclean
-	$(call removeTrees,$(SRC_DIST_GHC_DIR)/libraries/tarballs/)
-	$(call removeTrees,$(SRC_DIST_GHC_DIR)/libraries/stamp/)
-	$(call removeTrees,$(SRC_DIST_GHC_DIR)/hadrian/_build/)
-	$(call removeTrees,$(SRC_DIST_GHC_DIR)/hadrian/dist-newstyle/)
-	$(call removeTrees,$(SRC_DIST_GHC_DIR)/compiler/stage[123])
-	$(call removeFiles,$(SRC_DIST_GHC_DIR)/mk/build.mk)
-	$(call removeFiles,$(SRC_DIST_GHC_DIR)/rts/rts.cabal)
-	cd $(SRC_DIST_GHC_DIR) && "$(FIND)" $(SRC_DIST_GHC_DIRS) \( -name .git -o -name "autom4te*" -o -name "*~" -o -name "\#*" -o -name ".\#*" -o -name "log" -o -name "*-SAVE" -o -name "*.orig" -o -name "*.rej" \) -print | "$(XARGS)" $(XARGS_OPTS) "$(RM)" $(RM_OPTS_REC)
-
-# Add files generated by alex and happy.
-# These rules depend on sdist-ghc-prep-tree.
-$(eval $(call sdist-ghc-file,compiler,stage2,.,GHC/Cmm/Lexer,x))
-$(eval $(call sdist-ghc-file,compiler,stage2,.,GHC/Cmm/Parser,y))
-$(eval $(call sdist-ghc-file,compiler,stage2,.,GHC/Parser/Lexer,x))
-$(eval $(call sdist-ghc-file,compiler,stage2,.,GHC/Parser/HaddockLex,x))
-$(eval $(call sdist-ghc-file,compiler,stage2,.,GHC/Parser,y))
-$(eval $(call sdist-ghc-file,utils/hpc,dist-install,,HpcParser,y))
-$(eval $(call sdist-ghc-file,utils/genprimopcode,dist,,Lexer,x))
-$(eval $(call sdist-ghc-file,utils/genprimopcode,dist,,Parser,y))
-
-# Recent Cabal library versions have a pre-generated Lexer.hs in the source
-# repo, and have moved Lexer.x out of the way, so trying to generate it from
-# here no longer works, and is no longer necessary.
-# According to https://github.com/haskell/cabal/issues/4633 however, this is
-# only a temporary solution, so we will probably have to adjust to whatever
-# the proper solution is going to be once there is one.
-#
-# $(eval $(call sdist-ghc-file2,libraries/Cabal/Cabal,dist-install,Distribution/Parsec,Lexer,x))
-
-.PHONY: sdist-ghc-prep
-sdist-ghc-prep : sdist-ghc-prep-tree
-
-.PHONY: sdist-windows-tarballs-prep
-sdist-windows-tarballs-prep :
-	$(call removeTrees,$(SRC_DIST_WINDOWS_TARBALLS_ROOT))
-	$(call removeFiles,$(SRC_DIST_WINDOWS_TARBALLS_TARBALL))
-	mkdir -p $(SRC_DIST_ROOT)
-	mkdir -p $(SRC_DIST_WINDOWS_TARBALLS_ROOT)
-	mkdir -p $(SRC_DIST_WINDOWS_TARBALLS_DIR)
-	mkdir -p $(SRC_DIST_WINDOWS_TARBALLS_DIR)/ghc-tarballs
-	cd $(SRC_DIST_WINDOWS_TARBALLS_DIR)/ghc-tarballs && ln -s $(TOP)/ghc-tarballs/mingw-w64 .
-	$(call removeTrees,$(SRC_DIST_WINDOWS_TARBALLS_DIR)/ghc-tarballs/.git)
-
-.PHONY: sdist-testsuite-prep
-sdist-testsuite-prep :
-	$(call removeTrees,$(SRC_DIST_TESTSUITE_ROOT))
-	$(call removeFiles,$(SRC_DIST_TESTSUITE_TARBALL))
-	mkdir -p $(SRC_DIST_ROOT)
-	mkdir -p $(SRC_DIST_TESTSUITE_ROOT)
-	mkdir -p $(SRC_DIST_TESTSUITE_DIR)
-	mkdir -p $(SRC_DIST_TESTSUITE_DIR)/testsuite
-	cd $(SRC_DIST_TESTSUITE_DIR)/testsuite && lndir $(TOP)/testsuite
-	cd $(SRC_DIST_TESTSUITE_DIR)/testsuite && $(MAKE) distclean
-
-.PHONY: sdist-ghc
-sdist-ghc: sdist-ghc-prep
-	cd $(SRC_DIST_GHC_ROOT)              && "$(TAR_CMD)" chf - $(SRC_DIST_BASE_NAME) 2> src_ghc_log               | $(TAR_COMP_CMD) -c > $(TOP)/$(SRC_DIST_GHC_TARBALL)
-
-.PHONY: sdist-windows-tarballs
-sdist-windows-tarballs: sdist-windows-tarballs-prep
-	cd $(SRC_DIST_WINDOWS_TARBALLS_ROOT) && "$(TAR_CMD)" chf - $(SRC_DIST_BASE_NAME) 2> windows_extra_src_ghc_log | $(TAR_COMP_CMD) -c > $(TOP)/$(SRC_DIST_WINDOWS_TARBALLS_TARBALL)
-
-.PHONY: sdist-testsuite
-sdist-testsuite: sdist-testsuite-prep
-	cd $(SRC_DIST_TESTSUITE_ROOT)        && "$(TAR_CMD)" chf - $(SRC_DIST_BASE_NAME) 2> testsuite_log             | $(TAR_COMP_CMD) -c > $(TOP)/$(SRC_DIST_TESTSUITE_TARBALL)
-
-
-.PHONY: sdist
-sdist : sdist-ghc sdist-windows-tarballs sdist-testsuite
-
-sdist-manifest : $(SRC_DIST_GHC_TARBALL)
-	tar tjf $(SRC_DIST_GHC_TARBALL) | sed "s|^ghc-$(ProjectVersion)/||" | sort >sdist-manifest
-
-# Upload the distribution(s)
-# Retrying is to work around buggy firewalls that corrupt large file transfers
-# over SSH.
-ifneq "$(PublishLocation)" ""
-publish-sdist :
-	$(call try10Times,$(PublishCp) $(SRC_DIST_GHC_TARBALL) $(PublishLocation)/dist)
-	$(call try10Times,$(PublishCp) $(SRC_DIST_TESTSUITE_TARBALL) $(PublishLocation)/dist)
-endif
-
-# -----------------------------------------------------------------------------
-# sdisting libraries
-
-# Use manually, with e.g.:
-#     make sdist_directory
-
-sdist_%:
-	inplace/bin/ghc-cabal sdist libraries/$* dist-install
-
-# -----------------------------------------------------------------------------
-# Cleaning
-
-.PHONY: clean
-
-CLEAN_FILES += libraries/ghc-bignum/include/ghc-gmp.h
-CLEAN_FILES += libraries/ghc-bignum/include/HsIntegerGmp.h
-CLEAN_FILES += libraries/base/include/EventConfig.h
-CLEAN_FILES += mk/config.mk.old
-CLEAN_FILES += mk/project.mk.old
-CLEAN_FILES += compiler/ghc.cabal.old
-
-$(foreach h,$(includes_dist-install_H_FILES_GENERATED), \
-    $(eval CLEAN_FILES += $h))
-CLEAN_FILES += $(includes_SETTINGS)
-CLEAN_FILES += utils/ghc-pkg/Version.hs
-CLEAN_FILES += compiler/GHC/Builtin/primops.txt
-CLEAN_FILES += $(wildcard compiler/primop*incl)
-
-clean : clean_files clean_libraries
-
-.PHONY: clean_files
-clean_files :
-	$(call removeFiles,$(CLEAN_FILES))
-# this is here since CLEAN_FILES can't handle folders
-	$(call removeTrees,inplace/bin)
-	$(call removeTrees,inplace/lib)
-	$(call removeTrees,libraries/bootstrapping.conf)
-# Clean the files that ./validate creates.
-	$(call removeFiles,mk/are-validating.mk)
-
-.PHONY: clean_libraries
-clean_libraries: $(patsubst %,clean_libraries/%_dist-install,$(PACKAGES_STAGE1) $(PACKAGES_STAGE2))
-clean_libraries: $(patsubst %,clean_libraries/%_dist-boot,$(PACKAGES_STAGE0))
-
-clean_libraries:
-	$(call removeTrees,$(patsubst %, libraries/%/dist, $(PACKAGES_STAGE1) $(PACKAGES_STAGE2)))
-	$(call removeFiles,$(wildcard $(patsubst %.in, %, $(wildcard $(patsubst %, libraries/%/*.buildinfo.in, $(PACKAGES_STAGE1) $(PACKAGES_STAGE2))))))
-	$(call removeFiles,$(patsubst %, libraries/%/config.log, $(PACKAGES_STAGE1) $(PACKAGES_STAGE2)))
-	$(call removeFiles,$(patsubst %, libraries/%/config.status, $(PACKAGES_STAGE1) $(PACKAGES_STAGE2)))
-	$(call removeFiles,$(wildcard $(patsubst %, libraries/%/include/Hs*Config.h, $(PACKAGES_STAGE1) $(PACKAGES_STAGE2))))
-
-# We have to define a clean target for each library manually, because the
-# libraries/*/ghc.mk files are not included when we're cleaning.
-ifeq "$(CLEANING)" "YES"
-$(foreach lib,$(PACKAGES_STAGE0),\
-  $(eval $(call clean-target,libraries/$(lib),dist-boot,libraries/$(lib)/dist-boot)))
-$(foreach lib,$(PACKAGES_STAGE1) $(PACKAGES_STAGE2),\
-  $(eval $(call clean-target,libraries/$(lib),dist-install,libraries/$(lib)/dist-install)))
-endif
-
-clean : clean_haddock_index
-.PHONY: clean_haddock_index
-clean_haddock_index:
-	$(call removeTrees,libraries/dist-haddock)
-
-clean : clean_bindistprep
-.PHONY: clean_bindistprep
-clean_bindistprep:
-	$(call removeTrees,bindistprep/)
-
-distclean : clean
-# Clean the files that we ask ./configure to create.
-	$(call removeFiles,mk/config.mk)
-	$(call removeFiles,mk/install.mk)
-	$(call removeFiles,mk/project.mk)
-	$(call removeFiles,compiler/ghc.cabal)
-	$(call removeFiles,ghc/ghc-bin.cabal)
-	$(call removeFiles,libraries/ghci/ghci.cabal)
-	$(call removeFiles,utils/runghc/runghc.cabal)
-	$(call removeFiles,utils/gen-dll/gen-dll.cabal)
-	$(call removeFiles,settings)
-	$(call removeFiles,docs/users_guide/ug-book.xml)
-	$(call removeFiles,docs/users_guide/ug-ent.xml)
-	$(call removeFiles,docs/users_guide/ghc_config.py)
-	$(call removeFiles,libraries/prologue.txt)
-	$(call removeFiles,distrib/configure.ac)
-	$(call removeFiles,ch01.html ch02.html index.html)
-
-# ./configure also makes these.
-	$(call removeFiles,mk/config.h)
-
-# Internal files generated by ./configure for itself.
-	$(call removeFiles,config.cache config.status config.log)
-
-# The root Makefile makes .old versions of some files that configure
-# generates, so we clean those too.
-	$(call removeFiles,mk/config.mk.old)
-	$(call removeFiles,mk/project.mk.old)
-	$(call removeFiles,compiler/ghc.cabal.old)
-
-# Clean the *Config.h files generated by library configure scripts
-	$(call removeFiles,libraries/base/include/HsBaseConfig.h)
-	$(call removeFiles,libraries/base/include/EventConfig.h)
-	$(call removeFiles,libraries/directory/include/HsDirectoryConfig.h)
-	$(call removeFiles,libraries/process/include/HsProcessConfig.h)
-	$(call removeFiles,libraries/unix/include/HsUnixConfig.h)
-	$(call removeFiles,libraries/time/lib/include/HsTimeConfig.h)
-
-# The library configure scripts also like creating autom4te.cache
-# directories, so clean them all up.
-	$(call removeTrees,$(patsubst %, libraries/%/autom4te.cache, $(PACKAGES_STAGE1) $(PACKAGES_STAGE2)))
-
-# We make these when making or testing bindists
-	$(call removeFiles,bindist-list)
-	$(call removeFiles,bindist-list.uniq)
-	$(call removeTrees,bindisttest/a)
-
-# Also clean Windows-only inplace directories.
-# Don't delete 'inplace' itself, it contains source files.
-	$(call removeTrees,inplace/mingw)
-
-# Remove the download tarballs.  This is because updating
-# the tarballs doesn't remove old ones.  After a tarbal is updated
-# you end up with both in your tree and get a franken build.
-# The downside here is that a maintainer clean will trigger more
-# bandwidth usage from haskell.org
-	$(call removeTrees,ghc-tarballs)
-
-# Remove the fs utilities.
-	$(call removeFiles,utils/lndir/fs.h)
-	$(call removeFiles,utils/lndir/fs.c)
-	$(call removeFiles,utils/unlit/fs.h)
-	$(call removeFiles,utils/unlit/fs.c)
-	$(call removeFiles,rts/fs.h)
-	$(call removeFiles,rts/fs.c)
-	$(call removeFiles,libraries/base/include/fs.h)
-	$(call removeFiles,libraries/base/cbits/fs.c)
-
-CLEAN_LIBRARY_GHC_MK_FILES += $(patsubst %, libraries/%/ghc.mk, $(PACKAGES_STAGE1) $(PACKAGES_STAGE2))
-# Don't clean `libraries/ghc-boot/ghc.mk`, since it's intended to be version-controlled (#16953)
-CLEAN_LIBRARY_GHC_MK_FILES := $(filter-out libraries/ghc-boot/ghc.mk,$(CLEAN_LIBRARY_GHC_MK_FILES))
-
-maintainer-clean : distclean
-	$(call removeFiles,configure mk/config.h.in)
-	$(call removeTrees,autom4te.cache $(wildcard libraries/*/autom4te.cache))
-	$(call removeFiles,$(patsubst %, libraries/%/GNUmakefile, \
-	        $(PACKAGES_STAGE1) $(PACKAGES_STAGE2)))
-	$(call removeFiles,$(CLEAN_LIBRARY_GHC_MK_FILES))
-	$(call removeFiles,$(patsubst %, libraries/%/configure, \
-	        $(PACKAGES_STAGE1) $(PACKAGES_STAGE2)))
-	$(call removeFiles,libraries/base/include/HsBaseConfig.h.in)
-	$(call removeFiles,libraries/directory/include/HsDirectoryConfig.h.in)
-	$(call removeFiles,libraries/process/include/HsProcessConfig.h.in)
-	$(call removeFiles,libraries/unix/include/HsUnixConfig.h.in)
-	$(call removeFiles,libraries/time/lib/include/HsTimeConfig.h.in)
-
-.PHONY: all_libraries
-
-.PHONY: bootstrapping-files
-# See https://gitlab.haskell.org/ghc/ghc/wikis/building/porting
-bootstrapping-files: $(includes_DERIVEDCONSTANTS)
-bootstrapping-files: $(libffi_HEADERS)
-
-.DELETE_ON_ERROR:
-
-# -----------------------------------------------------------------------------
-
-ifeq "$(HADDOCK_DOCS)" "YES"
-BINDIST_HADDOCK_FLAG = --with-haddock="$(BINDIST_PREFIX)/bin/haddock"
-endif
-ifeq "$(DYNAMIC_GHC_PROGRAMS)" "YES"
-BINDIST_LIBRARY_FLAGS = --enable-shared --disable-library-vanilla
-else
-BINDIST_LIBRARY_FLAGS = --enable-library-vanilla --disable-shared
-endif
-BINDIST_LIBRARY_FLAGS += --disable-library-prof
-
-.PHONY: validate_build_xhtml
-validate_build_xhtml:
-	cd libraries/xhtml && "$(BINDIST_PREFIX)/bin/ghc" --make Setup
-	cd libraries/xhtml && ./Setup configure --with-ghc="$(BINDIST_PREFIX)/bin/ghc" $(BINDIST_HADDOCK_FLAG) $(BINDIST_LIBRARY_FLAGS) --global --builddir=dist-bindist --prefix="$(BINDIST_PREFIX)"
-	cd libraries/xhtml && ./Setup build   --builddir=dist-bindist
-ifeq "$(HADDOCK_DOCS)" "YES"
-	cd libraries/xhtml && ./Setup haddock -v0 --ghc-options=-optP-P --builddir=dist-bindist
-endif
-	cd libraries/xhtml && ./Setup install --builddir=dist-bindist
-	cd libraries/xhtml && ./Setup clean   --builddir=dist-bindist
-	cd libraries/xhtml && rm -f Setup Setup.exe Setup.hi Setup.o
-
-# Note [No stage2 packages when CrossCompiling or Stage1Only]
-# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-# (first read Note [CrossCompiling vs Stage1Only] and
-#  Note [Stage1Only vs stage=1] in mk/config.mk.in)
-#
-# When either CrossCompiling=YES or Stage1Only=YES, we have to exclude the
-# following packages from the build:
-#   * packages that we build with ghc-stage2 [1]
-#   * packages that depend on the ghc library [2]
-#
-# Here's why:
-#  - first of all, ghc-stage1 can't use stage0's ghc library (it's too old)
-#  - neither do we register the ghc library (compiler/stage1) that we build
-#    with stage0. TODO Why not? We do build it...
-#  - as a result, we need to a) use ghc-stage2 to build packages that depend on
-#    the ghc library and b) exclude those packages when ghc-stage2 is not
-#    available.
-#  - when Stage1Only=YES, it's clear that ghc-stage2 is not available (we just
-#    said we didn't want it), so we have to exclude the stage2 packages from
-#    the build. This includes the case where Stage1Only=YES is combined with
-#    CrossCompiling=YES (Building GHC as a cross-compiler [3]).
-#  - when CrossCompiling=YES, but Stage1Only=NO (Cross-compiling GHC itself
-#    [3]), we can not use ghc-stage2 either. The reason is that stage2 doesn't
-#    run on the host platform at all; it is built to run on $(TARGETPLATFORM)"
-#    [4]. Therefore in this case we also have to exclude the stage2 packages
-#    from the build.
-#
-# Because we omit certain packages from the build when CrossCompiling=YES,
-# it is important that we remember the value of CrossCompiling in binary
-# distributions that we produce. See Note [Persist CrossCompiling in binary
-# distributions].
-#
-#  [1] find utils -name ghc.mk | xargs grep -l 'build-prog.*,2'
-#
-#  [2]
-#  find utils -name package-data.mk | xargs grep -l 'DEP_NAMES =.* ghc\($\| \)'
-#
-#  [3] https://gitlab.haskell.org/ghc/ghc/wikis/building/cross-compiling
-#
-#  [4] * bc31dbe8ee22819054df60f5ef219fed393a1c54
-#      "Disable any packages built with stage 2 when cross-compiling
-#       Since we can't run stage 2 on the host."
-#
-#      * 72995160b0b190577b5c0cb8d7bd0426cc455b05
-#      "We cannot use the stage 2 compiler, it runs on $(TARGETPLATFORM)"
-
-# -----------------------------------------------------------------------------
-# Numbered phase targets
-
-# In phase 1, we'll be building dependency files for most things
-# built by the bootstrapping compiler while make is 'include'ing
-# makefiles. But in order to build dependency files, we'll need to
-# build any automatically generated .hs files, which means that
-# we'll need to be able to build any tools that generate .hs files
-# etc. But in order to do that, we need to already know the
-# dependencies for those tools, so we build their dependency files
-# here.
-.PHONY: phase_0_builds
-# hsc2hs is needed, e.g. to make the .hs files for hpc.
-phase_0_builds: $(utils/hsc2hs_dist_depfile_haskell)
-phase_0_builds: $(utils/hsc2hs_dist_depfile_c_asm)
-# genprimopcode is needed to make the .hs-incl files that are in the
-# ghc package.
-phase_0_builds: $(utils/genprimopcode_dist_depfile_haskell)
-phase_0_builds: $(utils/genprimopcode_dist_depfile_c_asm)
-# deriveConstants is used to create header files included in the
-# ghc-boot package.
-phase_0_builds: $(utils/deriveConstants_dist_depfile_haskell)
-phase_0_builds: $(utils/deriveConstants_dist_depfile_c_asm)
-
-.PHONY: phase_1_builds
-phase_1_builds: $(PACKAGE_DATA_MKS)
diff --git a/ghc/ghc.mk b/ghc/ghc.mk
deleted file mode 100644
index db5efbec9644ca2dce9ecee9803921ab287b97a3..0000000000000000000000000000000000000000
--- a/ghc/ghc.mk
+++ /dev/null
@@ -1,179 +0,0 @@
-# -----------------------------------------------------------------------------
-#
-# (c) 2009-2012 The University of Glasgow
-#
-# This file is part of the GHC build system.
-#
-# To understand how the build system works and how to modify it, see
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/architecture
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/modifying
-#
-# -----------------------------------------------------------------------------
-
-ghc_USES_CABAL = YES
-ghc_PACKAGE = ghc-bin
-ghc_EXECUTABLE = ghc
-
-ghc_stage1_CONFIGURE_OPTS += --flags=stage1
-ghc_stage2_CONFIGURE_OPTS += --flags=stage2
-ghc_stage3_CONFIGURE_OPTS += --flags=stage3
-
-ifeq "$(GhcWithInterpreter)" "YES"
-ghc_stage2_CONFIGURE_OPTS += --flags=internal-interpreter
-ghc_stage3_CONFIGURE_OPTS += --flags=internal-interpreter
-endif
-
-ghc_stage1_MORE_HC_OPTS = $(GhcStage1HcOpts)
-ghc_stage2_MORE_HC_OPTS = $(GhcStage2HcOpts)
-ghc_stage3_MORE_HC_OPTS = $(GhcStage3HcOpts)
-
-# We need __GLASGOW_HASKELL__ in hschooks.c, so we have to build C
-# sources with GHC:
-ghc_stage1_UseGhcForCC = YES
-ghc_stage2_UseGhcForCC = YES
-ghc_stage3_UseGhcForCC = YES
-
-ifeq "$(GhcDebugged)" "YES"
-ghc_stage1_MORE_HC_OPTS += -debug
-ghc_stage2_MORE_HC_OPTS += -debug
-ghc_stage3_MORE_HC_OPTS += -debug
-endif
-
-ifneq "$(GhcDynamic)" ""
-$(error GhcDynamic is no longer supported, use DYNAMIC_GHC_PROGRAMS instead)
-endif
-
-ifeq "$(GhcThreaded)" "YES"
-# Use threaded RTS with GHCi, so threads don't get blocked at the prompt.
-ghc_stage2_MORE_HC_OPTS += -threaded
-ghc_stage3_MORE_HC_OPTS += -threaded
-else
-# Opt out from threaded GHC. See ghc-bin.cabal.in
-ghc_stage2_CONFIGURE_OPTS += -f-threaded
-ghc_stage3_CONFIGURE_OPTS += -f-threaded
-endif
-
-# If stage 0 supplies a threaded RTS, we can use it for stage 1.
-# See Note [Linking ghc-bin against threaded stage0 RTS] in
-# hadrian/src/Settings/Packages.hs for details.
-ifeq "$(GhcThreadedRts)" "YES"
-ghc_stage1_MORE_HC_OPTS += -threaded
-else
-ghc_stage1_CONFIGURE_OPTS += -f-threaded
-endif
-
-ifeq "$(GhcProfiled)" "YES"
-ghc_stage2_PROGRAM_WAY = p
-endif
-
-ghc_stage1_PROGNAME = ghc-stage1
-ghc_stage2_PROGNAME = ghc-stage2
-ghc_stage3_PROGNAME = ghc-stage3
-
-ghc_stage1_SHELL_WRAPPER = YES
-ghc_stage2_SHELL_WRAPPER = YES
-ghc_stage3_SHELL_WRAPPER = YES
-ghc_stage1_SHELL_WRAPPER_NAME = ghc/ghc.wrapper
-ghc_stage2_SHELL_WRAPPER_NAME = ghc/ghc.wrapper
-ghc_stage3_SHELL_WRAPPER_NAME = ghc/ghc.wrapper
-ghc_stage1_INSTALL_INPLACE = YES
-ghc_stage2_INSTALL_INPLACE = YES
-ghc_stage3_INSTALL_INPLACE = YES
-
-ghc_stage$(INSTALL_GHC_STAGE)_INSTALL = YES
-ghc_stage$(INSTALL_GHC_STAGE)_INSTALL_SHELL_WRAPPER_NAME = ghc-$(ProjectVersion)
-
-# We override the program name to be ghc, rather than ghc-stage2.
-# This means the right program name is used in error messages etc.
-define ghc_stage$(INSTALL_GHC_STAGE)_INSTALL_SHELL_WRAPPER_EXTRA
-echo 'executablename="$$exedir/ghc"' >> "$(WRAPPER)"
-endef
-
-# if stage is set to something other than "1" or "", disable stage 1
-# See Note [Stage1Only vs stage=1] in mk/config.mk.in.
-ifneq "$(filter-out 1,$(stage))" ""
-ghc_stage1_NOT_NEEDED = YES
-endif
-# if stage is set to something other than "2" or "", disable stage 2
-ifneq "$(filter-out 2,$(stage))" ""
-ghc_stage2_NOT_NEEDED = YES
-endif
-# When cross-compiling, the stage 1 compiler is our release compiler, so omit stage 2
-# See Note [Stage1Only vs stage=1] in mk/config.mk.in.
-ifeq "$(Stage1Only)" "YES"
-ghc_stage2_NOT_NEEDED = YES
-endif
-# stage 3 has to be requested explicitly with stage=3
-ifneq "$(stage)" "3"
-ghc_stage3_NOT_NEEDED = YES
-endif
-$(eval $(call build-prog,ghc,stage1,0))
-$(eval $(call build-prog,ghc,stage2,1))
-$(eval $(call build-prog,ghc,stage3,2))
-
-ifneq "$(BINDIST)" "YES"
-
-ghc/stage1/build/tmp/$(ghc_stage1_PROG) : $(BOOT_LIBS)
-ifeq "$(GhcProfiled)" "YES"
-ghc/stage2/build/tmp/$(ghc_stage2_PROG) : $(compiler_stage2_p_LIB)
-ghc/stage2/build/tmp/$(ghc_stage2_PROG) : $(foreach lib,$(PACKAGES_STAGE1),$(libraries/$(lib)_dist-install_p_LIB))
-endif
-
-all_ghc_stage1 : $(GHC_STAGE1)
-all_ghc_stage2 : $(GHC_STAGE2)
-all_ghc_stage3 : $(GHC_STAGE3)
-
-$(INPLACE_LIB)/settings : $(includes_SETTINGS)
-	"$(CP)" $< $@
-
-$(INPLACE_LIB)/llvm-targets : llvm-targets
-	"$(CP)" $< $@
-
-$(INPLACE_LIB)/llvm-passes : llvm-passes
-	"$(CP)" $< $@
-
-# The GHC programs need to depend on all the helper programs they might call,
-# and the settings files they use
-
-GHC_DEPENDENCIES += $$(unlit_INPLACE)
-GHC_DEPENDENCIES += $(INPLACE_LIB)/settings
-GHC_DEPENDENCIES += $(INPLACE_LIB)/llvm-targets
-GHC_DEPENDENCIES += $(INPLACE_LIB)/llvm-passes
-
-$(GHC_STAGE1) : | $(GHC_DEPENDENCIES)
-$(GHC_STAGE2) : | $(GHC_DEPENDENCIES)
-$(GHC_STAGE3) : | $(GHC_DEPENDENCIES)
-
-ifeq "$(Windows_Host)" "YES"
-$(GHC_STAGE1) : | $$(touchy_INPLACE)
-$(GHC_STAGE2) : | $$(touchy_INPLACE)
-$(GHC_STAGE3) : | $$(touchy_INPLACE)
-endif
-
-# Modules like vector:Data.Vector.Fusion.Stream.Monadic use annotations,
-# which means they depend on GHC.Desugar. To ensure that This module is
-# available by the time it is needed, we make the stage 2 compiler
-# depend on it.
-$(GHC_STAGE2) : $(foreach w,$(GhcLibWays),libraries/base/dist-install/build/GHC/Desugar.$($w_osuf))
-
-endif
-
-INSTALL_LIBS += $(includes_SETTINGS)
-INSTALL_LIBS += llvm-targets
-INSTALL_LIBS += llvm-passes
-
-ifeq "$(Windows_Host)" "NO"
-install: install_ghc_link
-.PHONY: install_ghc_link
-install_ghc_link:
-	$(call removeFiles,"$(DESTDIR)$(bindir)/$(CrossCompilePrefix)ghc")
-	$(LN_S) $(CrossCompilePrefix)ghc-$(ProjectVersion) "$(DESTDIR)$(bindir)/$(CrossCompilePrefix)ghc"
-else
-# On Windows we install the main binary as $(bindir)/ghc.exe
-# To get ghc-<version>.exe we have a little C program in driver/ghc
-install: install_ghc_post
-.PHONY: install_ghc_post
-install_ghc_post: install_bins
-	$(call removeFiles,"$(DESTDIR)$(bindir)/ghc.exe")
-	"$(MV)" -f $(DESTDIR)$(bindir)/ghc-stage$(INSTALL_GHC_STAGE).exe $(DESTDIR)$(bindir)/$(CrossCompilePrefix)ghc.exe
-endif
diff --git a/libffi/ghc.mk b/libffi/ghc.mk
deleted file mode 100644
index c82cb783e31781415d756fe730544de98e93b909..0000000000000000000000000000000000000000
--- a/libffi/ghc.mk
+++ /dev/null
@@ -1,132 +0,0 @@
-# -----------------------------------------------------------------------------
-#
-# (c) 2009 The University of Glasgow
-#
-# This file is part of the GHC build system.
-#
-# To understand how the build system works and how to modify it, see
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/architecture
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/modifying
-#
-# -----------------------------------------------------------------------------
-
-
-libffi_STAMP_STATIC_CONFIGURE = libffi/stamp.ffi.static.configure
-libffi_STAMP_STATIC_BUILD     = libffi/stamp.ffi.static.build
-libffi_STAMP_STATIC_INSTALL   = libffi/stamp.ffi.static.install
-
-libffi_STAMP_STATIC_SHARED_CONFIGURE = libffi/stamp.ffi.static-shared.configure
-libffi_STAMP_STATIC_SHARED_BUILD     = libffi/stamp.ffi.static-shared.build
-libffi_STAMP_STATIC_SHARED_INSTALL   = libffi/stamp.ffi.static-shared.install
-
-ifeq "$(BuildSharedLibs)" "YES"
-libffi_STAMP_CONFIGURE = $(libffi_STAMP_STATIC_SHARED_CONFIGURE)
-libffi_STAMP_BUILD     = $(libffi_STAMP_STATIC_SHARED_BUILD)
-libffi_STAMP_INSTALL   = $(libffi_STAMP_STATIC_SHARED_INSTALL)
-libffi_EnableShared    = yes
-else
-libffi_STAMP_CONFIGURE = $(libffi_STAMP_STATIC_CONFIGURE)
-libffi_STAMP_BUILD     = $(libffi_STAMP_STATIC_BUILD)
-libffi_STAMP_INSTALL   = $(libffi_STAMP_STATIC_INSTALL)
-libffi_EnableShared    = no
-endif
-
-libffi_STATIC_LIB  = libffi/build/inst/lib/libffi.a
-libffi_HEADERS     = rts/dist-install/build/include/ffi.h \
-                     rts/dist-install/build/include/ffitarget.h
-
-ifeq "$(HostOS_CPP)" "mingw32"
-LIBFFI_NAME = ffi-6
-else
-LIBFFI_NAME = ffi
-endif
-LIBFFI_DLL = lib$(LIBFFI_NAME).dll
-
-ifneq "$(BINDIST)" "YES"
-$(libffi_STAMP_CONFIGURE): $(TOUCH_DEP)
-	$(call removeFiles,$(libffi_STAMP_STATIC_CONFIGURE))
-	$(call removeFiles,$(libffi_STAMP_STATIC_BUILD))
-	$(call removeFiles,$(libffi_STAMP_STATIC_INSTALL))
-	$(call removeFiles,$(libffi_STAMP_STATIC_SHARED_CONFIGURE))
-	$(call removeFiles,$(libffi_STAMP_STATIC_SHARED_BUILD))
-	$(call removeFiles,$(libffi_STAMP_STATIC_SHARED_INSTALL))
-	$(call removeTrees,$(LIBFFI_DIR) libffi/build)
-	cat libffi-tarballs/libffi*.tar.gz | $(GZIP_CMD) -d | { cd libffi && $(TAR_CMD) -xf - ; }
-	mv libffi/libffi-* libffi/build
-
-# update config.guess/config.sub
-	$(CP) "$(TOP)/config.guess" libffi/build/config.guess
-	$(CP) "$(TOP)/config.sub"   libffi/build/config.sub
-
-# We have to fake a non-working ln for configure, so that the fallback
-# option (cp -p) gets used instead.  Otherwise the libffi build system
-# will use cygwin symbolic links which cannot be read by mingw gcc.
-	chmod +x libffi/ln
-
-	# We need to use -MMD rather than -MD, as otherwise we get paths
-	# like c:/... in the dependency files on Windows, and the extra
-	# colons break make
-	mv libffi/build/Makefile.in libffi/build/Makefile.in.orig
-	sed "s/-MD/-MMD/" < libffi/build/Makefile.in.orig > libffi/build/Makefile.in
-
-	# We attempt to specify the installation directory below with --libdir,
-	# but libffi installs into 'toolexeclibdir' instead, which may differ
-	# on systems where gcc has multilib support. Force libffi to use libdir.
-	# (https://sourceware.org/ml/libffi-discuss/2014/msg00016.html)
-	mv libffi/build/Makefile.in libffi/build/Makefile.in.orig
-	sed 's:@toolexeclibdir@:$$(libdir):g' < libffi/build/Makefile.in.orig > libffi/build/Makefile.in
-
-	# install-sh is used when /usr/bin/install is missing; ensure its
-	# path in libffi's Makefile is correct. See GHC #11109.
-	mv libffi/build/Makefile.in libffi/build/Makefile.in.orig
-	sed 's|@INSTALL@|$$(subst ../install-sh,$(TOP)/install-sh,@INSTALL@)|g' < libffi/build/Makefile.in.orig > libffi/build/Makefile.in
-
-# * Because -Werror may be in SRC_CC_OPTS/SRC_LD_OPTS, we need to turn
-#   warnings off or the compilation of libffi might fail due to warnings;
-#   hence the -w flags.
-# * We specify --libdir, as we need to know the path to libffi.a, but on
-#   some platforms it defaults to .../lib64/ rather than .../lib/.
-	cd libffi && \
-	    cd build && \
-	    CC=$(CC_STAGE1) \
-	    CXX=$(CC_STAGE1) \
-	    LD=$(LD) \
-	    AR=$(AR_STAGE1) \
-	    NM=$(NM) \
-	    RANLIB=$(REAL_RANLIB_CMD) \
-        CFLAGS="$(SRC_CC_OPTS) $(CONF_CC_OPTS_STAGE1) -w" \
-        LDFLAGS="$(SRC_LD_OPTS) -w" \
-        "$(SHELL)" ./configure \
-	          --prefix=$(TOP)/libffi/build/inst \
-	          --libdir=$(TOP)/libffi/build/inst/lib \
-	          --disable-docs \
-	          --enable-static=yes \
-	          --enable-shared=$(libffi_EnableShared) \
-	          --host=$(TargetPlatformFull)
-
-	# wc on OS X has spaces in its output, which libffi's Makefile
-	# doesn't expect, so we tweak it to sed them out
-	mv libffi/build/Makefile libffi/build/Makefile.orig
-	sed "s#wc -w#wc -w | sed 's/ //g'#" < libffi/build/Makefile.orig > libffi/build/Makefile
-
-	"$(TOUCH_CMD)" $@
-
-$(libffi_STAMP_BUILD): $(libffi_STAMP_CONFIGURE) $(TOUCH_DEP)
-	# Use 'sync' as a temporary solution for #11960 (parallelisation bug).
-	sync; $(MAKE) -C libffi/build MAKEFLAGS=
-	"$(TOUCH_CMD)" $@
-
-$(libffi_STAMP_INSTALL): $(libffi_STAMP_BUILD) $(TOUCH_DEP)
-	$(MAKE) -C libffi/build MAKEFLAGS= install
-	"$(TOUCH_CMD)" $@
-
-$(libffi_STATIC_LIB): $(libffi_STAMP_INSTALL)
-	@test -f $@ || { echo "$< exists, but $@ does not."; echo "Suggest removing $<."; exit 1; }
-
-$(libffi_HEADERS): $(libffi_STAMP_INSTALL) | $$(dir $$@)/.
-	cp -f libffi/build/inst/include/$(notdir $@) $@
-
-$(eval $(call clean-target,libffi,, \
-    libffi/build $(wildcard libffi/stamp.ffi.*) libffi/dist-install))
-
-endif
diff --git a/libraries/ghc-bignum/gmp/ghc.mk b/libraries/ghc-bignum/gmp/ghc.mk
deleted file mode 100644
index 9a7ae8857777662b51b091210273ebbeab9573ad..0000000000000000000000000000000000000000
--- a/libraries/ghc-bignum/gmp/ghc.mk
+++ /dev/null
@@ -1,141 +0,0 @@
-# -----------------------------------------------------------------------------
-#
-# (c) 2009 The University of Glasgow
-#
-# This file is part of the GHC build system.
-#
-# To understand how the build system works and how to modify it, see
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/architecture
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/modifying
-#
-# -----------------------------------------------------------------------------
-
-# We use a tarball like gmp-4.2.4-nodoc.tar.bz2, which is
-# gmp-4.2.4.tar.bz2 repacked without the doc/ directory contents.
-# That's because the doc/ directory contents are under the GFDL,
-# which causes problems for Debian.
-
-ifneq "$(BINDIST)" "YES"
-GMP_TARBALL := $(wildcard libraries/ghc-bignum/gmp/gmp-tarballs/gmp*.tar.bz2)
-GMP_DIR := $(patsubst libraries/ghc-bignum/gmp/gmp-tarballs/%-nodoc.tar.bz2,%,$(GMP_TARBALL))
-
-ifeq "$(GMP_TARBALL)" ""
-$(error "GMP tarball is missing; you may need to run 'git submodule update --init'.")
-endif
-endif
-
-ifneq "$(NO_CLEAN_GMP)" "YES"
-$(eval $(call clean-target,gmp,,\
-  libraries/ghc-bignum/include/ghc-gmp.h \
-  libraries/ghc-bignum/gmp/libgmp.a \
-  libraries/ghc-bignum/gmp/gmp.h \
-  libraries/ghc-bignum/gmp/gmpbuild \
-  libraries/ghc-bignum/gmp/$(GMP_DIR)))
-
-clean : clean_gmp
-.PHONY: clean_gmp
-clean_gmp:
-	$(call removeTrees,libraries/ghc-bignum/gmp/objs)
-	$(call removeTrees,libraries/ghc-bignum/gmp/gmpbuild)
-endif
-
-ifeq "$(GMP_PREFER_FRAMEWORK)" "YES"
-libraries/ghc-bignum_CONFIGURE_OPTS += --with-gmp-framework-preferred
-endif
-
-ifneq "$(CLEANING)" "YES"
-# Hack. The file config.mk doesn't exist yet after running ./configure in
-# the toplevel (ghc) directory. To let some toplevel make commands such as
-# sdist go through, right after ./configure, don't consider this an error.
--include libraries/ghc-bignum/dist-install/build/config.mk
-endif
-
-gmp_CC_OPTS += $(addprefix -I,$(GMP_INCLUDE_DIRS))
-gmp_LD_OPTS += $(addprefix -L,$(GMP_LIB_DIRS))
-
-# Compile GMP only if we don't have it already
-#
-# We use GMP's own configuration stuff, because it's all rather hairy
-# and not worth re-implementing in our Makefile framework.
-
-ifeq "$(findstring dyn, $(GhcRTSWays))" "dyn"
-BUILD_SHARED=yes
-else
-BUILD_SHARED=no
-endif
-
-# In a bindist, we don't want to know whether /this/ machine has gmp,
-# but whether the machine the bindist was built on had gmp.
-ifeq "$(BINDIST)" "YES"
-ifeq "$(wildcard libraries/ghc-bignum/gmp/libgmp.a)" ""
-HaveLibGmp = YES
-HaveFrameworkGMP = YES
-else
-HaveLibGmp = NO
-HaveFrameworkGMP = NO
-endif
-endif
-
-UseIntreeGmp = NO
-ifneq "$(HaveLibGmp)" "YES"
-ifneq "$(HaveFrameworkGMP)" "YES"
-UseIntreeGmp = YES
-endif
-endif
-
-# gmp_wrappers.c includes "ghc-gmp.h"
-libraries/ghc-bignum/cbits/gmp_wrappers.c: libraries/ghc-bignum/include/ghc-gmp.h
-
-ifeq "$(UseIntreeGmp)" "YES"
-# Copy header from in-tree build (gmp.h => ghc-gmp.h)
-libraries/ghc-bignum/include/ghc-gmp.h: libraries/ghc-bignum/gmp/gmp.h
-	$(CP) $< $@
-
-# Link in-tree GMP objects
-libraries/ghc-bignum_dist-install_EXTRA_OBJS += libraries/ghc-bignum/gmp/objs/*.o
-
-else
-
-# Copy header from source tree
-libraries/ghc-bignum/include/ghc-gmp.h: libraries/ghc-bignum/gmp/ghc-gmp.h
-	$(CP) $< $@
-
-endif
-
-libraries/ghc-bignum_dist-install_EXTRA_CC_OPTS += $(gmp_CC_OPTS)
-
-ifneq "$(CLEANING)" "YES"
-# When running `make clean` before `./configure`, CC_STAGE1 is undefined.
-CLANG = $(findstring clang, $(shell $(CC_STAGE1) --version))
-
-ifeq "$(CLANG)" "clang"
-CCX = $(CLANG)
-else
-CCX = $(CC_STAGE1)
-endif
-
-libraries/ghc-bignum/gmp/libgmp.a libraries/ghc-bignum/gmp/gmp.h:
-	$(RM) -rf libraries/ghc-bignum/gmp/$(GMP_DIR) libraries/ghc-bignum/gmp/gmpbuild libraries/ghc-bignum/gmp/objs
-	cat $(GMP_TARBALL) | $(BZIP2_CMD) -d | { cd libraries/ghc-bignum/gmp && $(TAR_CMD) -xf - ; }
-	mv libraries/ghc-bignum/gmp/$(GMP_DIR) libraries/ghc-bignum/gmp/gmpbuild
-	cd libraries/ghc-bignum/gmp && $(PATCH_CMD) -p0 < gmpsrc.patch
-	chmod +x libraries/ghc-bignum/gmp/ln
-
-	# Note: We must pass `TARGETPLATFORM` to the `--host` argument of GMP's
-	#       `./configure`, not `HOSTPLATFORM`: the 'host' on which GMP will
-	#       run is the 'target' platform of the compiler we're building.
-	# Note2: we pass --with-readline=no, to prevent getting an indirect
-	#        dependency on ncurses through gmp.  readline is only relevant
-	#        for gmp test programs. (See gmp's configure)
-	cd libraries/ghc-bignum/gmp/gmpbuild; \
-	    CC=$(CCX) CXX=$(CCX) NM=$(NM) AR=$(AR_STAGE1) ./configure \
-	          --enable-shared=no --with-pic=yes --with-readline=no \
-	          --host=$(TARGETPLATFORM) --build=$(BUILDPLATFORM)
-	$(MAKE) -C libraries/ghc-bignum/gmp/gmpbuild MAKEFLAGS=
-	$(CP) libraries/ghc-bignum/gmp/gmpbuild/gmp.h libraries/ghc-bignum/gmp/
-	$(CP) libraries/ghc-bignum/gmp/gmpbuild/.libs/libgmp.a libraries/ghc-bignum/gmp/
-	$(MKDIRHIER) libraries/ghc-bignum/gmp/objs
-	cd libraries/ghc-bignum/gmp/objs && $(AR_STAGE1) x ../libgmp.a
-	$(RANLIB_CMD) libraries/ghc-bignum/gmp/libgmp.a
-
-endif # CLEANING
diff --git a/libraries/ghc-boot/ghc.mk b/libraries/ghc-boot/ghc.mk
deleted file mode 100644
index daa3e3fc5596c82ba20d6e79cf6a9a5cac178dda..0000000000000000000000000000000000000000
--- a/libraries/ghc-boot/ghc.mk
+++ /dev/null
@@ -1,58 +0,0 @@
-libraries/ghc-boot_PACKAGE = ghc-boot
-libraries/ghc-boot_dist-install_GROUP = libraries
-$(if $(filter ghc-boot,$(PACKAGES_STAGE0)),$(eval $(call build-package,libraries/ghc-boot,dist-boot,0)))
-$(if $(filter ghc-boot,$(PACKAGES_STAGE1)),$(eval $(call build-package,libraries/ghc-boot,dist-install,1)))
-$(if $(filter ghc-boot,$(PACKAGES_STAGE2)),$(eval $(call build-package,libraries/ghc-boot,dist-install,2)))
-
-libraries/ghc-boot/dist-boot/build/GHC/Version.hs \
-libraries/ghc-boot/dist-install/build/GHC/Version.hs: mk/project.mk | $$(dir $$@)/.
-	$(call removeFiles,$@)
-	@echo "module GHC.Version where"                                    >> $@
-	@echo                                                               >> $@
-	@echo 'import Prelude -- See Note [Why do we import Prelude here?]' >> $@
-	@echo                                                               >> $@
-	@echo 'cProjectGitCommitId   :: String'                             >> $@
-	@echo 'cProjectGitCommitId   = "$(ProjectGitCommitId)"'             >> $@
-	@echo                                                               >> $@
-	@echo 'cProjectVersion       :: String'                             >> $@
-	@echo 'cProjectVersion       = "$(ProjectVersion)"'                 >> $@
-	@echo                                                               >> $@
-	@echo 'cProjectVersionInt    :: String'                             >> $@
-	@echo 'cProjectVersionInt    = "$(ProjectVersionInt)"'              >> $@
-	@echo                                                               >> $@
-	@echo 'cProjectPatchLevel    :: String'                             >> $@
-	@echo 'cProjectPatchLevel    = "$(ProjectPatchLevel)"'              >> $@
-	@echo                                                               >> $@
-	@echo 'cProjectPatchLevel1   :: String'                             >> $@
-	@echo 'cProjectPatchLevel1   = "$(ProjectPatchLevel1)"'             >> $@
-	@echo                                                               >> $@
-	@echo 'cProjectPatchLevel2   :: String'                             >> $@
-	@echo 'cProjectPatchLevel2   = "$(ProjectPatchLevel2)"'             >> $@
-	@echo done.
-
-libraries/ghc-boot/dist-boot/package-data.mk: \
-	libraries/ghc-boot/dist-boot/build/GHC/Version.hs
-libraries/ghc-boot/dist-install/package-data.mk: \
-	libraries/ghc-boot/dist-install/build/GHC/Version.hs
-
-libraries/ghc-boot/dist-boot/build/GHC/Platform/Host.hs \
-libraries/ghc-boot/dist-install/build/GHC/Platform/Host.hs: mk/project.mk | $$(dir $$@)/.
-	$(call removeFiles,$@)
-	@echo "module GHC.Platform.Host where"                              >> $@
-	@echo                                                               >> $@
-	@echo 'import GHC.Platform.ArchOS'                                  >> $@
-	@echo                                                               >> $@
-	@echo 'hostPlatformArch   :: Arch'                                  >> $@
-	@echo 'hostPlatformArch   = $(HaskellHostArch)'                     >> $@
-	@echo                                                               >> $@
-	@echo 'hostPlatformOS     :: OS'                                    >> $@
-	@echo 'hostPlatformOS     = $(HaskellHostOs)'                       >> $@
-	@echo                                                               >> $@
-	@echo 'hostPlatformArchOS :: ArchOS'                                >> $@
-	@echo 'hostPlatformArchOS = ArchOS hostPlatformArch hostPlatformOS' >> $@
-	@echo done.
-
-libraries/ghc-boot/dist-boot/package-data.mk: \
-	libraries/ghc-boot/dist-boot/build/GHC/Platform/Host.hs
-libraries/ghc-boot/dist-install/package-data.mk: \
-	libraries/ghc-boot/dist-install/build/GHC/Platform/Host.hs
diff --git a/mk/compiler-ghc.mk b/mk/compiler-ghc.mk
deleted file mode 100644
index 739f6157d5ab1714a87c8a0a5793ba85fb08e192..0000000000000000000000000000000000000000
--- a/mk/compiler-ghc.mk
+++ /dev/null
@@ -1,58 +0,0 @@
-# -----------------------------------------------------------------------------
-#
-# (c) 2009 The University of Glasgow
-#
-# This file is part of the GHC build system.
-#
-# To understand how the build system works and how to modify it, see
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/architecture
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/modifying
-#
-# -----------------------------------------------------------------------------
-
-TOP = ..
-SPEC_TARGETS = 1 2 3 re1 re2 re3
-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 \
-                  ghc_stage1_NO_BUILD_DEPS=YES \
-                  ghc_stage2_NO_BUILD_DEPS=YES \
-                  ghc_stage3_NO_BUILD_DEPS=YES
-
-.PHONY: 1 2 3
-
-1:
-	+$(TOPMAKE) stage=1 all_ghc_stage1 $(FAST_MAKE_OPTS) ONLY_DEPS_FOR="compiler_stage1 ghc_stage1"
-
-2:
-	+$(TOPMAKE) stage=2 all_ghc_stage2 $(FAST_MAKE_OPTS) ONLY_DEPS_FOR="compiler_stage2 ghc_stage2" NO_STAGE2_DEPS=YES
-
-3:
-	+$(TOPMAKE) stage=3 all_ghc_stage3 $(FAST_MAKE_OPTS) ONLY_DEPS_FOR="compiler_stage3 ghc_stage3" NO_STAGE3_DEPS=YES
-
-
-# 'make re2' rebuilds stage2, removing the old executable first.  Useful for
-# something like 'make re2 GhcDebugged=YES'.
-
-.PHONY: re1 re2 re3
-re1:
-	$(RM) $(TOP)/ghc/stage1/build/tmp/ghc-stage1
-	$(MAKE) 1
-re2:
-	$(RM) $(TOP)/ghc/stage2/build/tmp/ghc-stage2
-	$(MAKE) 2
-re3:
-	$(RM) $(TOP)/ghc/stage3/build/tmp/ghc-stage3
-	$(MAKE) 3
-
-.PHONY: extra-help
-help : extra-help
-extra-help :
-	@echo "  make 1"
-	@echo "  make 2"
-	@echo "  make 3"
-	@echo
-	@echo "     Build the stage 1, 2 or 3 GHC respectively, omitting dependencies"
-	@echo "     and initial phases for speed."
diff --git a/mk/custom-settings.mk b/mk/custom-settings.mk
deleted file mode 100644
index 2b4b1271023b53608673e402b4bb17550c7ba6d8..0000000000000000000000000000000000000000
--- a/mk/custom-settings.mk
+++ /dev/null
@@ -1,14 +0,0 @@
-
--include mk/are-validating.mk
-
-ifeq "$(Validating)" "YES"
-include mk/flavours/validate.mk
--include mk/validate.mk
-else
--include $(firstword $(wildcard mk/$(TargetPlatformFull)-build.mk) mk/build.mk)
-endif
-
-ifeq "$(BINDIST)" "YES"
--include bindist.mk
-endif
-
diff --git a/mk/flavours/bench-cross-ncg.mk b/mk/flavours/bench-cross-ncg.mk
deleted file mode 100644
index d52eb1ca80672bf408bc6aebd32ba4e22d27cf3d..0000000000000000000000000000000000000000
--- a/mk/flavours/bench-cross-ncg.mk
+++ /dev/null
@@ -1,15 +0,0 @@
-SRC_HC_OPTS        = -O -H64m
-GhcStage1HcOpts    = -O2
-GhcStage2HcOpts    = -O0
-GhcLibHcOpts       = -O2
-BUILD_PROF_LIBS    = NO
-SplitSections      = NO
-HADDOCK_DOCS       = NO
-BUILD_SPHINX_HTML  = NO
-BUILD_SPHINX_PDF   = NO
-BUILD_MAN          = NO
-WITH_TERMINFO      = NO
-
-BIGNUM_BACKEND       = native
-Stage1Only           = YES
-DYNAMIC_GHC_PROGRAMS = NO
diff --git a/mk/flavours/bench-cross.mk b/mk/flavours/bench-cross.mk
deleted file mode 100644
index 98f0531bc74f716a79c46452e7e31805cc6bdca6..0000000000000000000000000000000000000000
--- a/mk/flavours/bench-cross.mk
+++ /dev/null
@@ -1,15 +0,0 @@
-SRC_HC_OPTS        = -O -H64m
-GhcStage1HcOpts    = -O
-GhcStage2HcOpts    = -O0 -fllvm
-GhcLibHcOpts       = -O2 -fllvm
-BUILD_PROF_LIBS    = NO
-SplitSections      = NO
-HADDOCK_DOCS       = NO
-BUILD_SPHINX_HTML  = NO
-BUILD_SPHINX_PDF   = NO
-BUILD_MAN          = NO
-WITH_TERMINFO      = NO
-
-BIGNUM_BACKEND       = native
-Stage1Only           = YES
-DYNAMIC_GHC_PROGRAMS = NO
diff --git a/mk/flavours/bench-llvm.mk b/mk/flavours/bench-llvm.mk
deleted file mode 100644
index 58fb92df214bf0ac4aa34e32a5a1f131567b0fe1..0000000000000000000000000000000000000000
--- a/mk/flavours/bench-llvm.mk
+++ /dev/null
@@ -1,10 +0,0 @@
-SRC_HC_OPTS        = -O -H64m -fllvm
-GhcStage1HcOpts    = -O
-GhcStage2HcOpts    = -O0
-GhcLibHcOpts       = -O2
-BUILD_PROF_LIBS    = NO
-SplitSections      = NO
-HADDOCK_DOCS       = NO
-BUILD_SPHINX_HTML  = NO
-BUILD_SPHINX_PDF   = NO
-BUILD_MAN          = NO
diff --git a/mk/flavours/bench.mk b/mk/flavours/bench.mk
deleted file mode 100644
index ecfc535178b435118aad5e1029c5c2d094f378dc..0000000000000000000000000000000000000000
--- a/mk/flavours/bench.mk
+++ /dev/null
@@ -1,10 +0,0 @@
-SRC_HC_OPTS        = -O -H64m
-GhcStage1HcOpts    = -O2
-GhcStage2HcOpts    = -O0
-GhcLibHcOpts       = -O2
-BUILD_PROF_LIBS    = NO
-SplitSections      = NO
-HADDOCK_DOCS       = NO
-BUILD_SPHINX_HTML  = NO
-BUILD_SPHINX_PDF   = NO
-BUILD_MAN          = NO
diff --git a/mk/flavours/devel-cross-ncg.mk b/mk/flavours/devel-cross-ncg.mk
deleted file mode 100644
index 0d5325dd25e266d3a40a968c4a2ffecd07c9b71f..0000000000000000000000000000000000000000
--- a/mk/flavours/devel-cross-ncg.mk
+++ /dev/null
@@ -1,18 +0,0 @@
-SRC_HC_OPTS        = -O0 -H64m
-GhcStage1HcOpts    = -O2 -DDEBUG
-GhcStage2HcOpts    = -O0
-GhcLibHcOpts       = -O
-BUILD_PROF_LIBS    = NO
-SplitSections      = NO
-HADDOCK_DOCS       = NO
-BUILD_SPHINX_HTML  = NO
-BUILD_SPHINX_PDF   = NO
-BUILD_MAN          = NO
-WITH_TERMINFO      = NO
-
-BIGNUM_BACKEND       = native
-Stage1Only           = YES
-DYNAMIC_BY_DEFAULT   = NO
-DYNAMIC_GHC_PROGRAMS = NO
-
-libraries/Cabal_dist-install_HC_OPTS += -O0
diff --git a/mk/flavours/devel1.mk b/mk/flavours/devel1.mk
deleted file mode 100644
index 1c03aff10b51fa08c0a24dbe7193a7f62b68ca8b..0000000000000000000000000000000000000000
--- a/mk/flavours/devel1.mk
+++ /dev/null
@@ -1,16 +0,0 @@
-SRC_HC_OPTS        = -O -H64m
-GhcStage1HcOpts    = -O0 -DDEBUG
-GhcStage2HcOpts    = -O
-GhcLibHcOpts       = -O -dcore-lint
-BUILD_PROF_LIBS    = NO
-SplitSections      = NO
-HADDOCK_DOCS       = NO
-BUILD_SPHINX_HTML  = NO
-BUILD_SPHINX_PDF   = NO
-BUILD_MAN          = NO
-
-LAX_DEPENDENCIES   = YES
-
-# Reduce optimisation when building Cabal; this makes a significant difference
-# in overall build time. See #16817.
-libraries/Cabal_dist-install_HC_OPTS += -O0
diff --git a/mk/flavours/devel2.mk b/mk/flavours/devel2.mk
deleted file mode 100644
index 2d7d3b38843cc83b50612fee44782044d1115315..0000000000000000000000000000000000000000
--- a/mk/flavours/devel2.mk
+++ /dev/null
@@ -1,16 +0,0 @@
-SRC_HC_OPTS        = -O -H64m
-GhcStage1HcOpts    = -O2
-GhcStage2HcOpts    = -O0 -DDEBUG
-GhcLibHcOpts       = -O -dcore-lint
-BUILD_PROF_LIBS    = NO
-SplitSections      = NO
-HADDOCK_DOCS       = NO
-BUILD_SPHINX_HTML  = NO
-BUILD_SPHINX_PDF   = NO
-BUILD_MAN          = NO
-
-LAX_DEPENDENCIES   = YES
-
-# Reduce optimisation when building Cabal; this makes a significant difference
-# in overall build time. See #16817.
-libraries/Cabal_dist-install_HC_OPTS += -O0
diff --git a/mk/flavours/dwarf.mk b/mk/flavours/dwarf.mk
deleted file mode 100644
index 15f16e2c370ec3c95527625729cebbb684342c69..0000000000000000000000000000000000000000
--- a/mk/flavours/dwarf.mk
+++ /dev/null
@@ -1,14 +0,0 @@
-# Build flavour which produces a compiler, RTS, and core libraries with DWARF
-# debug information. For best results run ./configure with
-# --enable-dwarf-unwind.
-
-SRC_HC_OPTS        = -O -H64m
-GhcStage1HcOpts    = -O2
-GhcStage2HcOpts    = -O2 -g3
-GhcRtsHcOpts       = -O2 -g3
-GhcLibHcOpts       = -O2 -g3
-BUILD_PROF_LIBS    = YES
-#SplitObjs
-#HADDOCK_DOCS
-#BUILD_SPHINX_HTML
-#BUILD_SPHINX_PDF
diff --git a/mk/flavours/perf-cross-ncg.mk b/mk/flavours/perf-cross-ncg.mk
deleted file mode 100644
index 61db9b5d431a63ec921ec1cd5285ab6be7b73b5e..0000000000000000000000000000000000000000
--- a/mk/flavours/perf-cross-ncg.mk
+++ /dev/null
@@ -1,14 +0,0 @@
-SRC_HC_OPTS        = -O -H64m
-GhcStage1HcOpts    = -O2
-GhcStage2HcOpts    = -O2
-GhcLibHcOpts       = -O2
-BUILD_PROF_LIBS    = YES
-HADDOCK_DOCS       = NO
-BUILD_SPHINX_HTML  = NO
-BUILD_SPHINX_PDF   = NO
-BUILD_MAN          = NO
-WITH_TERMINFO      = NO
-
-BIGNUM_BACKEND       = native
-Stage1Only           = YES
-DYNAMIC_GHC_PROGRAMS = NO
diff --git a/mk/flavours/perf-cross.mk b/mk/flavours/perf-cross.mk
deleted file mode 100644
index 7b85cc6979b7ff88bb3b7b3ded0c1b0e0d30127d..0000000000000000000000000000000000000000
--- a/mk/flavours/perf-cross.mk
+++ /dev/null
@@ -1,14 +0,0 @@
-SRC_HC_OPTS        = -O -H64m
-GhcStage1HcOpts    = -O2
-GhcStage2HcOpts    = -O2 -fllvm
-GhcLibHcOpts       = -O2 -fllvm
-BUILD_PROF_LIBS    = YES
-HADDOCK_DOCS       = NO
-BUILD_SPHINX_HTML  = NO
-BUILD_SPHINX_PDF   = NO
-BUILD_MAN          = NO
-WITH_TERMINFO      = NO
-
-BIGNUM_BACKEND       = native
-Stage1Only           = YES
-DYNAMIC_GHC_PROGRAMS = NO
diff --git a/mk/flavours/perf-llvm.mk b/mk/flavours/perf-llvm.mk
deleted file mode 100644
index 2598f4a40d6775cbd4ccf4a0e279a26737fdadfe..0000000000000000000000000000000000000000
--- a/mk/flavours/perf-llvm.mk
+++ /dev/null
@@ -1,8 +0,0 @@
-SRC_HC_OPTS        = -O -H64m -fllvm
-GhcStage1HcOpts    = -O
-GhcStage2HcOpts    = -O2
-GhcLibHcOpts       = -O2
-BUILD_PROF_LIBS    = YES
-#HADDOCK_DOCS
-#BUILD_SPHINX_HTML
-#BUILD_SPHINX_PDF
diff --git a/mk/flavours/perf.mk b/mk/flavours/perf.mk
deleted file mode 100644
index ee856626add872960c50fbcec5e5f1ed2a63b736..0000000000000000000000000000000000000000
--- a/mk/flavours/perf.mk
+++ /dev/null
@@ -1,8 +0,0 @@
-SRC_HC_OPTS        = -O -H64m
-GhcStage1HcOpts    = -O2
-GhcStage2HcOpts    = -O2
-GhcLibHcOpts       = -O2
-BUILD_PROF_LIBS    = YES
-#HADDOCK_DOCS
-#BUILD_SPHINX_HTML
-#BUILD_SPHINX_PDF
diff --git a/mk/flavours/prof-llvm.mk b/mk/flavours/prof-llvm.mk
deleted file mode 100644
index 9c284432aa918f19387672d99a8d811bfc754108..0000000000000000000000000000000000000000
--- a/mk/flavours/prof-llvm.mk
+++ /dev/null
@@ -1,12 +0,0 @@
-SRC_HC_OPTS        = -O0 -H64m -fllvm
-GhcStage1HcOpts    = -O
-GhcStage2HcOpts    = -O
-GhcLibHcOpts       = -O
-BUILD_PROF_LIBS    = YES
-SplitSections      = NO
-HADDOCK_DOCS       = NO
-BUILD_SPHINX_HTML  = NO
-BUILD_SPHINX_PDF   = NO
-BUILD_MAN          = NO
-
-GhcProfiled        = YES
diff --git a/mk/flavours/prof.mk b/mk/flavours/prof.mk
deleted file mode 100644
index 6c4a6baac3f6bea3412d5e4758de75ad13d411b5..0000000000000000000000000000000000000000
--- a/mk/flavours/prof.mk
+++ /dev/null
@@ -1,11 +0,0 @@
-SRC_HC_OPTS        = -O0 -H64m
-GhcStage1HcOpts    = -O2
-GhcStage2HcOpts    = -O
-GhcLibHcOpts       = -O
-BUILD_PROF_LIBS    = YES
-HADDOCK_DOCS       = NO
-BUILD_SPHINX_HTML  = NO
-BUILD_SPHINX_PDF   = NO
-BUILD_MAN          = NO
-
-GhcProfiled        = YES
diff --git a/mk/flavours/quick-cross-ncg.mk b/mk/flavours/quick-cross-ncg.mk
deleted file mode 100644
index 748720f01c7cf8b586b6b54ea3c697aba8c96f2b..0000000000000000000000000000000000000000
--- a/mk/flavours/quick-cross-ncg.mk
+++ /dev/null
@@ -1,15 +0,0 @@
-SRC_HC_OPTS        = -O0 -H64m
-GhcStage1HcOpts    = -O2
-GhcStage2HcOpts    = -O0
-GhcLibHcOpts       = -O
-BUILD_PROF_LIBS    = NO
-SplitSections      = NO
-HADDOCK_DOCS       = NO
-BUILD_SPHINX_HTML  = NO
-BUILD_SPHINX_PDF   = NO
-BUILD_MAN          = NO
-WITH_TERMINFO      = NO
-
-BIGNUM_BACKEND       = native
-Stage1Only           = YES
-DYNAMIC_GHC_PROGRAMS = NO
diff --git a/mk/flavours/quick-cross.mk b/mk/flavours/quick-cross.mk
deleted file mode 100644
index 4e3f47fd6749fcb604c4b51c6e1e10affd578107..0000000000000000000000000000000000000000
--- a/mk/flavours/quick-cross.mk
+++ /dev/null
@@ -1,15 +0,0 @@
-SRC_HC_OPTS        = -O0 -H64m
-GhcStage1HcOpts    = -O
-GhcStage2HcOpts    = -O0 -fllvm
-GhcLibHcOpts       = -O -fllvm
-BUILD_PROF_LIBS    = NO
-SplitSections      = NO
-HADDOCK_DOCS       = NO
-BUILD_SPHINX_HTML  = NO
-BUILD_SPHINX_PDF   = NO
-BUILD_MAN          = NO
-WITH_TERMINFO      = NO
-
-BIGNUM_BACKEND       = native
-Stage1Only           = YES
-DYNAMIC_GHC_PROGRAMS = NO
diff --git a/mk/flavours/quick-llvm.mk b/mk/flavours/quick-llvm.mk
deleted file mode 100644
index 9869041012d11c4434d609525e538b120345679e..0000000000000000000000000000000000000000
--- a/mk/flavours/quick-llvm.mk
+++ /dev/null
@@ -1,10 +0,0 @@
-SRC_HC_OPTS        = -O0 -H64m -fllvm
-GhcStage1HcOpts    = -O
-GhcStage2HcOpts    = -O0
-GhcLibHcOpts       = -O
-BUILD_PROF_LIBS    = NO
-SplitSections      = NO
-HADDOCK_DOCS       = NO
-BUILD_SPHINX_HTML  = NO
-BUILD_SPHINX_PDF   = NO
-BUILD_MAN          = NO
diff --git a/mk/flavours/quick.mk b/mk/flavours/quick.mk
deleted file mode 100644
index 286cb2ed23e9c594a4f2fcc0e4d00733a3717e1c..0000000000000000000000000000000000000000
--- a/mk/flavours/quick.mk
+++ /dev/null
@@ -1,10 +0,0 @@
-SRC_HC_OPTS        = -O0 -H64m
-GhcStage1HcOpts    = -O2
-GhcStage2HcOpts    = -O0
-GhcLibHcOpts       = -O
-BUILD_PROF_LIBS    = NO
-SplitSections      = NO
-HADDOCK_DOCS       = NO
-BUILD_SPHINX_HTML  = NO
-BUILD_SPHINX_PDF   = NO
-BUILD_MAN          = NO
diff --git a/mk/flavours/quickest.mk b/mk/flavours/quickest.mk
deleted file mode 100644
index 5583748eb9f93614363456941b1be838c3e03b56..0000000000000000000000000000000000000000
--- a/mk/flavours/quickest.mk
+++ /dev/null
@@ -1,10 +0,0 @@
-SRC_HC_OPTS        = -O0 -H64m
-GhcStage1HcOpts    = -O2
-GhcStage2HcOpts    = -O0
-GhcLibHcOpts       = -O0
-BUILD_PROF_LIBS    = NO
-SplitSections      = NO
-HADDOCK_DOCS       = NO
-BUILD_SPHINX_HTML  = NO
-BUILD_SPHINX_PDF   = NO
-BUILD_MAN          = NO
diff --git a/mk/flavours/validate.mk b/mk/flavours/validate.mk
deleted file mode 100644
index eddd22fb822b74e85d71b9d9a648e2be5fd197ff..0000000000000000000000000000000000000000
--- a/mk/flavours/validate.mk
+++ /dev/null
@@ -1,56 +0,0 @@
-SRC_HC_OPTS        = -O0 -H64m
-SRC_HC_OPTS_STAGE1 = -fllvm-fill-undef-with-garbage   # See #11487
-GhcStage1HcOpts    = -O2 -DDEBUG
-GhcStage2HcOpts    = -O -dcore-lint -dno-debug-output
-GhcLibHcOpts       = -O -dcore-lint -dno-debug-output
-BUILD_PROF_LIBS    = NO
-SplitSections      = NO
-HADDOCK_DOCS       = YES
-BUILD_SPHINX_HTML ?= YES
-BUILD_SPHINX_PDF  ?= NO
-
-ifeq "$(ValidateHpc)" "YES"
-GhcStage2HcOpts   += -fhpc -hpcdir $(TOP)/testsuite/hpc_output/
-endif
-
-ifeq "$(ValidateSpeed)" "SLOW"
-GhcStage2HcOpts   += -DDEBUG
-endif
-
-ifeq "$(ValidateSpeed)" "SLOW"
-BUILD_PROF_LIBS    = YES
-endif
-
-ifneq "$(ValidateSpeed)" "FAST"
-BUILD_EXTRA_PKGS   = YES
-endif
-
-WERROR             = -Werror
-
-# Reduce optimisation when building Cabal; this makes a significant difference
-# in overall build time. See #16817.
-libraries/Cabal_dist-install_HC_OPTS += -O0
-
-# DO NOT EDIT THIS FILE! Instead, create a file mk/validate.mk, whose settings
-# will override these. See also mk/custom-settings.mk.
-#
-#
-# (Note: these comments are at the end of this file, to make it easier to diff
-# this file with other build flavours.)
-#
-#
-# Note [validate build settings]
-# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-#
-# Using GhcStage2HcOpts=-O (rather than -O0) here bringes my validate down from
-# 22mins to 16 mins. Compiling stage2 takes longer, but we gain a faster
-# haddock, faster running of the tests, and faster building of the utils to be
-# installed
-#
-# dblatex with miktex under msys/mingw can't build the PS and PDF docs,
-# and just building the HTML docs is sufficient to check that the
-# markup is correct, so we turn off PS and PDF doc building when
-# validating.
-#
-# We set BUILD_EXTRA_PKGS=YES to build the "extra" packages (see ./packages),
-# so that we can test them.
diff --git a/mk/sub-makefile.mk b/mk/sub-makefile.mk
deleted file mode 100644
index 73d98c992caf97916e4969c5d3ffad952026fcf8..0000000000000000000000000000000000000000
--- a/mk/sub-makefile.mk
+++ /dev/null
@@ -1,67 +0,0 @@
-# This file is included by all the "stub makefiles" in every directory
-# in the tree except the root.  Its job is to invoke $(MAKE) on the
-# top-level Makefile, but modifying the target so that it applies to
-# the current directory only.
-#
-# eg.
-#  make foo.o  ==>  make -C $(TOP) dir/foo.o
-#  make all    ==>  make -C $(TOP) all_dir
-#  make clean  ==>  make -C $(TOP) clean_dir
-#
-
-# Eliminate use of the built-in implicit rules, and clear out the default list
-# of suffixes for suffix rules. Speeds up make quite a bit. Both are needed
-# for the shortest `make -d` output.
-# Don't set --no-builtin-variables; some rules might stop working if you do
-# (e.g. 'make clean' in testsuite/ currently relies on an implicit $RM).
-MAKEFLAGS += --no-builtin-rules
-.SUFFIXES:
-
-TOPMAKE = $(MAKE) -C $(TOP)
-
-default: all
-
-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 \
-  NO_GENERATED_MAKEFILE_RULES=YES \
-  OMIT_PHASE_0=YES OMIT_PHASE_1=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:
-
-STD_TARGETS = all clean distclean maintainer_clean install html ps pdf
-DIRECTORY_INDEPENDENT_TARGETS = show show!
-
-# The + tells make that we're recursively invoking make, otherwise 'make -j2'
-# goes wrong.
-$(STD_TARGETS): 
-	+$(TOPMAKE) $@_$(dir) $(EXTRA_MAKE_OPTS)
-
-$(DIRECTORY_INDEPENDENT_TARGETS):
-	+$(TOPMAKE) $@ $(EXTRA_MAKE_OPTS)
-
-OTHERTARGETS=$(filter-out fast help $(DIRECTORY_INDEPENDENT_TARGETS) $(STD_TARGETS) $(SPEC_TARGETS),$(MAKECMDGOALS))
-.PHONY: $(OTHERTARGETS)
-$(OTHERTARGETS):
-	+$(TOPMAKE) $(dir)/$@ $(EXTRA_MAKE_OPTS)
-
-.PHONY: help
-help : sub-help
-
-.PHONY: sub-help
-sub-help :
-	@echo "You are in subdirectory \"$(dir)\"."
-	@echo "Useful targets in this directory:"
-	@sed '1,/Using `make` in subdirectories/d' $(TOP)/MAKEHELP.md
diff --git a/mk/tree.mk b/mk/tree.mk
deleted file mode 100644
index a8925d60c313f2c658b2f1907692aeba0a5feb49..0000000000000000000000000000000000000000
--- a/mk/tree.mk
+++ /dev/null
@@ -1,73 +0,0 @@
-
-################################################################################
-#
-#	Layout of the source tree
-#
-################################################################################
-
-# Here we provide defines for the various directories in the source tree,
-# so we can move things around more easily.  A define $(GHC_FOO_DIR)
-# indicates a directory relative to the top of the source tree.
-
-GHC_UTILS_DIR           = utils
-GHC_RTS_DIR             = rts
-GHC_DRIVER_DIR          = driver
-
-INPLACE                 = inplace
-INPLACE_BIN             = $(INPLACE)/bin
-INPLACE_LIB             = $(INPLACE)/lib
-INPLACE_TOPDIR          = $(INPLACE)/lib
-INPLACE_MINGW           = $(INPLACE)/mingw
-
-################################################################################
-#
-#    Bindist testing directory
-#
-################################################################################
-
-# See Note [Spaces in TEST_HC].
-# Directory contains multiple spaces, to test that multiple spaces aren't
-# getting collapsed into a single space.
-BIN_DIST_INST_SUBDIR = "install   dir"
-BIN_DIST_INST_DIR = bindisttest/$(BIN_DIST_INST_SUBDIR)
-
-################################################################################
-#
-#    rm
-#
-################################################################################
-
-# These are here, rather than in config.mk, as they need to exist in an
-# unconfigured tree so that the various clean targets can be used
-# without configuring:
-ifeq "$(ONLY_SHOW_CLEANS)" "YES"
-RM = utils/testremove/wouldrm
-RM_OPTS = CLEAN_FILES
-RM_OPTS_REC = CLEAN_REC
-else
-RM = rm
-RM_OPTS = -f
-RM_OPTS_REC = -rf
-endif
-
-# If $1 is empty then we don't do anything (as "rm -rf" fails on
-# Solaris; trac #4916).
-# If $1 contains a * then we fail; globbing needs to be done at the call
-# site using $(wildcard ...). This makes it a little safer, as it's
-# harder to accidentally delete something you didn't mean to.
-# Similarly, we fail if any argument contains ".." or starts with a "/".
-
-removeFiles = $(call removeHelper,removeFiles,"$(RM)",$(RM_OPTS),$1)
-removeTrees = $(call removeHelper,removeTrees,"$(RM)",$(RM_OPTS_REC),$1)
-
-removeHelper = $(if $(strip $4),\
-                   $(if $(findstring *,$4),\
-                       $(error $1: Got a star: $4),\
-                   $(if $(findstring ..,$4),\
-                       $(error $1: Got dot-dot: $4),\
-                   $(if $(filter /%,$4),\
-                       $(error $1: Got leading slash: $4),\
-                       $2 $3 $4\
-                    )))\
-                )
-
diff --git a/mk/validate.mk.sample b/mk/validate.mk.sample
deleted file mode 100644
index 83c2c40afd1837f1cda2242291773e3b51204cc8..0000000000000000000000000000000000000000
--- a/mk/validate.mk.sample
+++ /dev/null
@@ -1,4 +0,0 @@
-# These settings override mk/flavours/validate.mk (see
-# mk/custom-settings.mk).
-#HADDOCK_DOCS       = NO
-#BUILD_SPHINX_HTML  = NO
diff --git a/mk/warnings.mk b/mk/warnings.mk
deleted file mode 100644
index bdbdc79213edbfb11c77cb8c975cd489d5e13419..0000000000000000000000000000000000000000
--- a/mk/warnings.mk
+++ /dev/null
@@ -1,155 +0,0 @@
-# See Note [Order of warning flags].
-SRC_CC_OPTS     += -Wall $(WERROR)
-SRC_HC_OPTS     += -Wall
-# Don't add -Werror to SRC_HC_OPTS_STAGE0 (or SRC_HC_OPTS), because otherwise
-# validate may unnecessarily fail when booting with an older compiler.
-# It would be better to only exclude certain warnings from becoming errors
-# (e.g. '-Werror -Wno-error=unused-imports -Wno-error=...'), but -Wno-error
-# isn't supported yet (https://gitlab.haskell.org/ghc/ghc/wikis/design/warnings).
-#
-# See Note [Stage number in build variables] in mk/config.mk.in.
-SRC_HC_OPTS_STAGE1 += $(WERROR)
-SRC_HC_OPTS_STAGE2 += $(WERROR)
-
-# Enable -Wcpp-undef for GHC components only, as we don't (currently) expect
-# core libraries to build in this configuration (see #13636).
-GhcRtsHcOpts    += -Wcpp-undef
-GhcStage1HcOpts += -Wcpp-undef
-GhcStage2HcOpts += -Wcpp-undef -Wincomplete-uni-patterns -Wincomplete-record-updates
-
-ifneq "$(CcLlvmBackend)" "YES"
-
-# Debian doesn't turn -Werror=unused-but-set-variable on by default, so
-# we turn it on explicitly for consistency with other users
-# Never set the flag on Windows as the host gcc may be too old.
-ifneq "$(HostOS_CPP)" "mingw32"
-SRC_CC_WARNING_OPTS += -Werror=unused-but-set-variable
-endif
-
-# Suppress the warning about __sync_fetch_and_nand (#9678).
-libraries/ghc-prim/cbits/atomic_CC_OPTS += -Wno-sync-nand
-# gcc 4.6 gives 3 warnings for giveCapabilityToTask not being inlined
-# gcc 4.4 gives 2 warnings for lockClosure not being inlined
-SRC_CC_WARNING_OPTS += -Wno-error=inline
-
-else
-
-# Don't warn about unknown GCC pragmas when using clang
-SRC_CC_WARNING_OPTS += -Wno-unknown-pragmas
-
-endif
-
-SRC_HC_WARNING_OPTS_STAGE1 += -Wnoncanonical-monad-instances
-SRC_HC_WARNING_OPTS_STAGE2 += -Wnoncanonical-monad-instances
-
-
-######################################################################
-# Disable some warnings in packages we use
-
-# NB: The GHC version used for bootstrapping may not support the
-# `-W`-aliases for `-f(no-)warn` flags introduced in GHC 8.0, so in
-# some cases (watch out for make-variables with a name containing
-# "boot") we need to pass the legacy `-f(no-)warn`-flags instead.
-
-# Libraries that have dubious RULES
-libraries/bytestring_dist-install_EXTRA_HC_OPTS += -Wno-inline-rule-shadowing
-
-# Turn off import warnings for bad unused imports
-utils/haddock_dist_EXTRA_HC_OPTS += -Wno-unused-imports
-libraries/vector_dist-install_EXTRA_HC_OPTS += -Wno-unused-imports
-libraries/directory_dist-install_EXTRA_HC_OPTS += -Wno-unused-imports
-
-# haddock's attoparsec uses deprecated `inlinePerformIO`
-utils/haddock_dist_EXTRA_HC_OPTS += -Wno-deprecations
-# binary too
-libraries/binary_dist-install_EXTRA_HC_OPTS += -Wno-deprecations
-
-# On Windows, there are/were some unused import warnings
-ifeq "$(HostOS_CPP)" "mingw32"
-libraries/time_dist-install_EXTRA_HC_OPTS += -Wno-unused-imports -Wno-identities
-endif
-
-# On Windows, the pattern for CallConv is already exhaustive. Ignore the warning
-ifeq "$(HostOS_CPP)" "mingw32"
-libraries/ghci_dist-install_EXTRA_HC_OPTS += -Wno-overlapping-patterns
-endif
-
-# haskeline has warnings about deprecated use of block/unblock
-libraries/haskeline_dist-install_EXTRA_HC_OPTS += -Wno-deprecations
-libraries/haskeline_dist-install_EXTRA_HC_OPTS += -Wno-unused-imports
-libraries/haskeline_dist-install_EXTRA_HC_OPTS += -Wno-redundant-constraints
-libraries/haskeline_dist-install_EXTRA_HC_OPTS += -Wno-simplifiable-class-constraints
-
-
-# temporarily turn off unused-imports warnings for pretty
-libraries/pretty_dist-install_EXTRA_HC_OPTS += -Wno-unused-imports
-
-# primitive has a warning about deprecated use of GHC.IOBase
-libraries/primitive_dist-install_EXTRA_HC_OPTS += -Wno-unused-imports
-# primitive uses deprecated Control.Monad.Trans.Error
-libraries/primitive_dist-install_EXTRA_HC_OPTS += -Wno-deprecations
-
-# See https://github.com/haskell/random/pull/20
-libraries/random_dist-install_EXTRA_HC_OPTS += -Wno-redundant-constraints
-
-# temporarily turn off unused-imports warnings for terminfo
-libraries/terminfo_dist-boot_EXTRA_HC_OPTS += -fno-warn-unused-imports
-libraries/terminfo_dist-install_EXTRA_HC_OPTS += -Wno-unused-imports
-
-# vector has some unused match warnings
-libraries/vector_dist-install_EXTRA_HC_OPTS += -Wwarn
-
-# temporarily turn off unused-imports warnings for xhtml
-libraries/xhtml_dist-install_EXTRA_HC_OPTS += -Wno-unused-imports
-libraries/xhtml_dist-install_EXTRA_HC_OPTS += -Wno-tabs
-
-libraries/dph/dph-base_dist-install_EXTRA_HC_OPTS += -Wwarn
-libraries/dph/dph-prim-interface_dist-install_EXTRA_HC_OPTS += -Wwarn
-libraries/dph/dph-prim-seq_dist-install_EXTRA_HC_OPTS += -Wwarn
-libraries/dph/dph-prim-par_dist-install_EXTRA_HC_OPTS += -Wwarn
-libraries/dph/dph-lifted-common-install_EXTRA_HC_OPTS += -Wwarn
-
-# transformers has unused function parameters warnings
-libraries/transformers_dist-boot_EXTRA_HC_OPTS += -fno-warn-unused-matches -fno-warn-unused-imports
-libraries/transformers_dist-install_EXTRA_HC_OPTS += -Wno-unused-matches -Wno-unused-imports
-libraries/transformers_dist-install_EXTRA_HC_OPTS += -Wno-redundant-constraints
-libraries/transformers_dist-install_EXTRA_HC_OPTS += -Wno-orphans
-
-# parsec has various warnings
-libraries/parsec_dist-install_EXTRA_HC_OPTS += -Wno-name-shadowing -Wno-unused-matches
-libraries/parsec_dist-install_EXTRA_HC_OPTS += -Wno-unused-do-bind -Wno-missing-signatures
-libraries/parsec_dist-install_EXTRA_HC_OPTS += -Wno-unused-imports -Wno-type-defaults
-
-# text warns with integer-simple
-libraries/text_dist-install_EXTRA_HC_OPTS += -Wno-unused-imports
-
-# Turn of trustworthy-safe warning
-libraries/base_dist-install_EXTRA_HC_OPTS += -Wno-trustworthy-safe
-libraries/ghc-prim_dist-install_EXTRA_HC_OPTS += -Wno-trustworthy-safe
-libraries/Win32_dist-install_EXTRA_HC_OPTS += -Wno-trustworthy-safe
-
-# We need -Wno-deprecated-flags to avoid failure with -Werror
-GhcLibExtraHcOpts += -Wno-deprecated-flags
-GhcBootLibExtraHcOpts += -fno-warn-deprecated-flags
-
-# Note [Order of warning flags]
-# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-# In distdir-way-opts, build flags are added in the following order (this
-# list is not exhaustive):
-#
-#   * SRC_HC_OPTS(_STAGE$4)
-#   * ghc-options from .cabal files ($1_$2_HC_OPTS)
-#   * SRC_HC_WARNING_OPTS(_STAGE$4)
-#
-# Considerations:
-#
-#   * Most .cabal files specify -Wall. But not all, and not all building we
-#   do relies on .cabal files. So we have to add -Wall ourselves somewhere.
-#
-#   * Some .cabal also specify warning suppression flags. Because -Wall
-#   overrides any warning suppression flags that come before it, we have to
-#   make sure -Wall comes before any warning suppression flags. So we add it
-#   to SRC_HC_OPTS.
-#
-#   * Similarly, our own warning suppression should come after the -Wall from
-#   the .cabal files, so we do *not* add them to SRC_HC_OPTS.
diff --git a/mk/ways.mk b/mk/ways.mk
deleted file mode 100644
index 53f900f80e35a4a195f56de5a7ec771542d736b5..0000000000000000000000000000000000000000
--- a/mk/ways.mk
+++ /dev/null
@@ -1,105 +0,0 @@
-#
-# Options for compiling in different `ways'.
-#
-# To configure up your own way, have a look at some of the standard ways
-# such as profiling, and create your own set of WAY_*_OPTS defs below.
-# After having done that, add your way string to WAYS, and after having
-# run the configure script, the different projects will add the new way
-# to the list of ways they support.
-#
-
-#
-# Definitions of the different ways:
-#
-#   * their name:
-#          - tag, e.g., p
-#          - description, e.g., profiling
-#   * what they mean to the driver:
-#          - WAY_p_HC_OPTS gives the list of command-line options
-#            to the driver.
-#
-# For consistency, the way name should be formed from the tags in the following
-# order (the same ordering defined in DynFlags.Way),
-#
-#    - thr:   threaded
-#    - debug: debugging
-#    - p:     profiled
-#    - dyn:   dynamically-linked
-
-#
-# The ways currently defined.
-#
-ALL_WAYS=v debug dyn thr p_dyn p debug_dyn thr_dyn thr_p_dyn thr_debug_dyn thr_debug debug_p thr_debug_p thr_p
-
-#
-# The following ways currently are treated specially,
-# as the driver script treats these guys specially and needs to carefully be told
-# about the options for these. Hence, we hide the required command line options
-# for these in the driver, as this is the only place they are needed.
-#
-# If you want to add to these default options, fill in the variables below:
-
-# Way 'v':
-WAY_v_NAME=vanilla
-WAY_v_HC_OPTS= -static
-
-# Way 'p':
-WAY_p_NAME=profiling
-WAY_p_HC_OPTS= -static -prof
-
-#
-# These ways apply to the RTS only:
-#
-
-# Way 'thr':
-WAY_thr_NAME=threaded
-WAY_thr_HC_OPTS= -static -optc-DTHREADED_RTS
-
-# Way 'thr_p':
-WAY_thr_p_NAME=threaded profiling
-WAY_thr_p_HC_OPTS= -static -prof -optc-DTHREADED_RTS
-
-# Way 'debug':
-WAY_debug_NAME=debug
-WAY_debug_HC_OPTS= -static -optc-DDEBUG -ticky -DTICKY_TICKY -optc-DTICKY_TICKY
-
-# Way 'debug_p':
-WAY_debug_p_NAME=debug profiled
-WAY_debug_p_HC_OPTS= -static -optc-DDEBUG -prof
-
-# Way 'p':
-WAY_p_NAME=profiling
-WAY_p_HC_OPTS= -static -prof
-
-# Way 'thr_debug':
-WAY_thr_debug_NAME=threaded debug
-WAY_thr_debug_HC_OPTS= -static -optc-DTHREADED_RTS -optc-DDEBUG
-
-# Way 'thr_debug_p':
-WAY_thr_debug_p_NAME=threaded debug profiling
-WAY_thr_debug_p_HC_OPTS= -static -optc-DTHREADED_RTS -optc-DDEBUG -prof
-
-# Way 'dyn': build dynamic shared libraries
-WAY_dyn_NAME=dyn
-WAY_dyn_HC_OPTS=-fPIC -dynamic
-
-# Way 'p_dyn':
-WAY_p_dyn_NAME=p_dyn
-WAY_p_dyn_HC_OPTS=-fPIC -dynamic -prof
-
-# Way 'thr_p_dyn':
-WAY_thr_p_dyn_NAME=thr_p_dyn
-WAY_thr_p_dyn_HC_OPTS=-fPIC -dynamic -prof -optc-DTHREADED_RTS
-
-# Way 'thr_dyn':
-WAY_thr_dyn_NAME=thr_dyn
-WAY_thr_dyn_HC_OPTS=-fPIC -dynamic -optc-DTHREADED_RTS
-
-# Way 'thr_debug_dyn':
-WAY_thr_debug_dyn_NAME=thr_debug_dyn
-WAY_thr_debug_dyn_HC_OPTS=-fPIC -dynamic -optc-DTHREADED_RTS -optc-DDEBUG
-
-# Way 'debug_dyn':
-WAY_debug_dyn_NAME=debug_dyn
-WAY_debug_dyn_HC_OPTS=-fPIC -dynamic -optc-DDEBUG -ticky -DTICKY_TICKY -optc-DTICKY_TICKY
-
diff --git a/rts/ghc.mk b/rts/ghc.mk
deleted file mode 100644
index 099e6531cd39055c3233856b7de85a8f909f4c78..0000000000000000000000000000000000000000
--- a/rts/ghc.mk
+++ /dev/null
@@ -1,684 +0,0 @@
-# -----------------------------------------------------------------------------
-#
-# (c) 2009 The University of Glasgow
-#
-# This file is part of the GHC build system.
-#
-# To understand how the build system works and how to modify it, see
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/architecture
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/modifying
-#
-# -----------------------------------------------------------------------------
-
-# -----------------------------------------------------------------------------
-# Building the RTS
-
-# We build the RTS with stage 1
-rts_dist-install_HC = $(GHC_STAGE1)
-
-rts_INSTALL_INFO = rts
-rts_VERSION = 1.0.2
-
-# Minimum supported Windows version.
-# These numbers can be found at:
-#  https://msdn.microsoft.com/en-us/library/windows/desktop/aa383745(v=vs.85).aspx
-# If we're compiling on windows, enforce that we only support Windows 7+
-# Adding this here means it doesn't have to be done in individual .c files
-# and also centralizes the versioning.
-rts_WINVER = 0x06010000
-
-# merge GhcLibWays and GhcRTSWays but strip out duplicates
-rts_WAYS = $(GhcLibWays) $(filter-out $(GhcLibWays),$(GhcRTSWays))
-rts_dist-install_WAYS = $(rts_WAYS)
-
-ALL_RTS_LIBS = $(foreach way,$(rts_WAYS),rts/dist-install/build/libHSrts$($(way)_libsuf))
-$(eval $(call all-target,rts,$(ALL_RTS_LIBS)))
-
-# -----------------------------------------------------------------------------
-# Defining the sources
-
-ALL_DIRS = hooks sm eventlog linker linker/macho
-
-ifeq "$(TargetOS_CPP)" "mingw32"
-ALL_DIRS += win32
-else
-ALL_DIRS += posix
-endif
-
-tmp_rts_C_SRCS := $(wildcard rts/*.c $(foreach dir,$(ALL_DIRS),rts/$(dir)/*.c))
-# We shouldn't include this file in the binary, it's a common function so
-# it will likely clash with something later. See #19948
-rts_C_SRCS = $(filter-out rts/xxhash.c, $(tmp_rts_C_SRCS))
-rts_C_HOOK_SRCS := $(wildcard rts/hooks/*.c)
-rts_CMM_SRCS := $(wildcard rts/*.cmm)
-
-# Don't compile .S files when bootstrapping a new arch
-ifneq "$(PORTING_HOST)" "YES"
-
-# unregisterised builds use the mini interpreter
-ifneq "$(GhcUnregisterised)" "YES"
-# use StgCRunAsm.S on ppc, ppc64, s390x, and riscv64
-ifneq "$(findstring $(TargetArch_CPP), ppc) $(findstring $(TargetArch_CPP), ppc64) $(findstring $(TargetArch_CPP), s390x) $(findstring $(TargetArch_CPP), riscv64)" ""
-rts_S_SRCS += rts/StgCRunAsm.S
-endif
-endif
-
-# select adjustor implementation. This much match the logic in rts.cabal.in.
-ifneq "$(CLEANING)" "YES"
-# N.B. we don't source config.mk when CLEANING=YES so none of the below
-# variables will be set. See #20166.
-rts_C_SRCS += rts/adjustor/AdjustorPool.c
-ifeq "$(UseLibffiForAdjustors)" "YES"
-rts_C_SRCS += rts/adjustor/LibffiAdjustor.c
-else
-ifneq "$(findstring $(TargetArch_CPP), i386)" ""
-rts_S_SRCS += rts/adjustor/Nativei386Asm.S
-rts_C_SRCS += rts/adjustor/Nativei386.c
-else
-ifneq "$(findstring $(TargetArch_CPP), x86_64)" ""
-ifneq "$(findstring $(TargetOS_CPP), mingw32)" ""
-rts_S_SRCS += rts/adjustor/NativeAmd64MingwAsm.S
-rts_C_SRCS += rts/adjustor/NativeAmd64Mingw.c
-else
-rts_S_SRCS += rts/adjustor/NativeAmd64Asm.S
-rts_C_SRCS += rts/adjustor/NativeAmd64.c
-endif
-else
-ifneq "$(findstring $(TargetArch_CPP), powerpc64le powerpc)" ""
-rts_S_SRCS += rts/AdjustorAsm.S
-rts_C_SRCS += rts/adjustor/NativePowerPC.c
-else
-$(error Target architecture has no native adjustor implementation)
-endif
-endif
-endif
-endif
-endif
-endif
-
-ifeq "$(GhcUnregisterised)" "YES"
-GENAPPLY_OPTS = -u
-endif
-
-rts_AUTO_APPLY_CMM = rts/dist-install/build/AutoApply.cmm
-
-$(rts_AUTO_APPLY_CMM): $$(genapply_INPLACE)
-	"$(genapply_INPLACE)" >$@
-
-
-rts_H_FILES := $(wildcard rts/*.h rts/*/*.h)
-
-ifeq "$(USE_DTRACE)" "YES"
-DTRACEPROBES_H = rts/dist-install/build/include/RtsProbes.h
-rts_H_FILES += $(DTRACEPROBES_H)
-endif
-
-# collect the -l and -L flags that we need to link the rts dyn lib.
-# Note that, as sed on OS X doesn't handle \+, we use [^ ][^ ]* rather
-# than [^ ]\+
-rts/dist-install/libs.depend : $$(ghc-pkg_INPLACE) | $$(dir $$@)/.
-	"$(ghc-pkg_INPLACE)" --simple-output field rts extra-libraries \
-	  | sed -e 's/\([^ ][^ ]*\)/-l\1/g' > $@
-	"$(ghc-pkg_INPLACE)" --simple-output field rts library-dirs \
-	  | sed -e 's/\([^ ][^ ]*\)/-L\1/g' >> $@
-
-
-# ----------------------------------------------------------------------------
-# On Windows, as the RTS and base libraries have recursive imports,
-# 	we have to break the loop with "import libraries".
-# 	These are made from rts/win32/libHS*.def which contain lists of
-# 	all the symbols in those libraries used by the RTS.
-#
-ifeq "$(TargetOS_CPP)" "mingw32"
-
-ALL_RTS_DEF_LIBNAMES 	= base ghc-prim
-ALL_RTS_DEF_LIBS	= \
-	rts/dist-install/build/win32/libHSbase.dll.a \
-	rts/dist-install/build/win32/libHSghc-prim.dll.a
-
-# -- import libs for the regular Haskell libraries
-define make-importlib-def # args $1 = lib name
-rts/dist-install/build/win32/libHS$1.def : rts/win32/libHS$1.def
-	cat rts/win32/libHS$1.def \
-		| sed "s/@LibVersion@/$$(libraries/$1_dist-install_VERSION)/" \
-		| sed "s/@ProjectVersion@/$$(ProjectVersion)/" \
-		> rts/dist-install/build/win32/libHS$1.def
-
-rts/dist-install/build/win32/libHS$1.dll.a : rts/dist-install/build/win32/libHS$1.def
-	"$$(DLLTOOL)" 	-d rts/dist-install/build/win32/libHS$1.def \
-			-l rts/dist-install/build/win32/libHS$1.dll.a
-endef
-$(foreach lib,$(ALL_RTS_DEF_LIBNAMES),$(eval $(call make-importlib-def,$(lib))))
-endif
-
-ifneq "$(BINDIST)" "YES"
-ifneq "$(UseSystemLibFFI)" "YES"
-ifeq "$(TargetOS_CPP)" "mingw32"
-rts/dist-install/build/$(LIBFFI_DLL): libffi/build/inst/bin/$(LIBFFI_DLL)
-	cp $< $@
-else
-# This is a little hacky. We don't know the SO version, so we only
-# depend on libffi.so, but copy libffi.so*
-rts/dist-install/build/lib$(LIBFFI_NAME)$(soext): libffi/build/inst/lib/lib$(LIBFFI_NAME)$(soext)
-	cp libffi/build/inst/lib/lib$(LIBFFI_NAME)$(soext)* rts/dist-install/build
-ifeq "$(TargetOS_CPP)" "darwin"
-	install_name_tool -id @rpath/lib$(LIBFFI_NAME)$(soext) rts/dist-install/build/lib$(LIBFFI_NAME)$(soext)
-endif
-endif
-endif
-endif
-
-
-ifeq "$(USE_DTRACE)" "YES"
-ifneq "$(findstring $(TargetOS_CPP), linux solaris2 freebsd)" ""
-NEED_DTRACE_PROBES_OBJ = YES
-endif
-endif
-
-#-----------------------------------------------------------------------------
-# Building one way
-define build-rts-way # args: $1 = way
-
-ifneq "$$(BINDIST)" "YES"
-
-rts_dist-install_$1_HC_OPTS := $$(GhcRtsHcOpts)
-rts_dist-install_$1_CC_OPTS := $$(GhcRtsCcOpts)
-
-# The per-way CC_OPTS
-ifneq "$$(findstring debug, $1)" ""
-rts_dist-install_$1_HC_OPTS += -O0
-rts_dist-install_$1_CC_OPTS += -fno-omit-frame-pointer -O0 -g3
-# Useful to ensure that inline functions can be called within GDB but not
-# supported by clang
-#rts_dist-install_$1_CC_OPTS += -fkeep-inline-functions
-endif
-
-ifneq "$$(findstring dyn, $1)" ""
-ifeq "$$(TargetOS_CPP)" "mingw32"
-rts_dist-install_$1_CC_OPTS += -DCOMPILING_WINDOWS_DLL
-endif
-rts_dist-install_$1_CC_OPTS += -DDYNAMIC
-endif
-
-
-$(call distdir-way-opts,rts,dist-install,$1,1) # 1 because the rts is built with stage1
-$(call c-suffix-rules,rts,dist-install,$1,YES)
-$(call cmm-suffix-rules,rts,dist-install,$1)
-
-rts_$1_LIB_FILE = libHSrts$$($1_libsuf)
-rts_$1_LIB = rts/dist-install/build/$$(rts_$1_LIB_FILE)
-
-rts_$1_C_OBJS      = $$(patsubst rts/%.c,rts/dist-install/build/%.$$($1_osuf),$$(rts_C_SRCS)) $$(patsubst %.c,%.$$($1_osuf),$$(rts_$1_EXTRA_C_SRCS))
-rts_$1_CXX_OBJS    = $$(patsubst rts/%.c,rts/dist-install/build/%.$$($1_osuf),$$(rts_CXX_SRCS))
-rts_$1_C_HOOK_OBJS = $$(patsubst rts/hooks/%.c,rts/dist-install/build/hooks/%.$$($1_osuf),$$(rts_C_HOOK_SRCS))
-rts_$1_S_OBJS      = $$(patsubst rts/%.S,rts/dist-install/build/%.$$($1_osuf),$$(rts_S_SRCS))
-rts_$1_CMM_OBJS    = $$(patsubst rts/%.cmm,rts/dist-install/build/%.$$($1_osuf),$$(rts_CMM_SRCS)) $$(patsubst %.cmm,%.$$($1_osuf),$$(rts_AUTO_APPLY_CMM))
-
-rts_$1_OBJS = $$(rts_$1_C_OBJS) $$(rts_$1_CXX_OBJS) $$(rts_$1_S_OBJS) $$(rts_$1_CMM_OBJS)
-
-ifeq "$(USE_DTRACE)" "YES"
-ifeq "$(NEED_DTRACE_PROBES_OBJ)" "YES"
-# On Darwin we don't need to generate binary containing probes defined
-# in DTrace script, but DTrace on Solaris expects generation of binary
-# from the DTrace probes definitions
-rts_$1_DTRACE_OBJS = rts/dist-install/build/RtsProbes.$$($1_osuf)
-
-$$(rts_$1_DTRACE_OBJS) : $$(rts_$1_OBJS)
-	$(DTRACE) -G -C \
-		$$(addprefix -Irts/,$$(rts_dist-install_DIST_INCLUDE_DIRS)) \
-		-DDTRACE -s rts/RtsProbes.d \
-		-o $$@ \
-		$$(rts_$1_OBJS)
-endif
-endif
-
-rts_dist-install_$1_CC_OPTS += -DRtsWay=\"rts_$1\"
-
-# If we're compiling on windows, enforce that we only support XP+
-# Adding this here means it doesn't have to be done in individual .c files
-# and also centralizes the versioning.
-ifeq "$$(TargetOS_CPP)" "mingw32"
-rts_dist-install_$1_CC_OPTS += -D_WIN32_WINNT=$(rts_WINVER)
-endif
-
-ifneq "$$(UseSystemLibFFI)" "YES"
-rts_dist-install_FFI_SO = rts/dist-install/build/lib$$(LIBFFI_NAME)$$(soext)
-else
-rts_dist-install_FFI_SO =
-endif
-
-# Making a shared library for the RTS.
-ifneq "$$(findstring dyn, $1)" ""
-ifeq "$$(TargetOS_CPP)" "mingw32"
-$$(rts_$1_LIB) : $$(rts_$1_OBJS) $$(ALL_RTS_DEF_LIBS) rts/dist-install/libs.depend rts/dist-install/build/$$(LIBFFI_DLL)
-	"$$(RM)" $$(RM_OPTS) $$@
-	# Call out to the shell script to decide how to build the dll.
-	# Making a shared library for the RTS.
-	# $$1  = dir
-	# $$2  = distdir
-	# $$3  = way
-	# $$4  = extra flags
-	# $$5  = extra libraries to link
-	# $$6  = object files to link
-	# $$7  = output filename
-	# $$8  = link command
-	# $$9  = create delay load import lib
-	# $$10 = SxS Name
-	# $$11 = SxS Version
-	$$(gen-dll_INPLACE) link "rts/dist-install/build" "rts/dist-install/build" "" "" "$$(ALL_RTS_DEF_LIBS)" "$$(rts_$1_OBJS)" "$$@" "$$(rts_dist-install_HC) -this-unit-id rts -no-hs-main -shared -dynamic -dynload deploy \
-         -no-auto-link-packages -Lrts/dist-install/build -l$$(LIBFFI_NAME) \
-         `cat rts/dist-install/libs.depend | tr '\n' ' '` \
-         $$(rts_dist-install_$1_GHC_LD_OPTS)" "NO" \
-         "$(rts_INSTALL_INFO)-$(subst dyn,,$(subst _dyn,,$(subst v,,$1)))" "$(ProjectVersion)"
-
-else
-ifneq "$$(UseSystemLibFFI)" "YES"
-LIBFFI_LIBS = -Lrts/dist-install/build -l$$(LIBFFI_NAME)
-ifeq "$$(TargetElf)" "YES"
-LIBFFI_LIBS += -optl-Wl,-rpath -optl-Wl,'$$$$ORIGIN' -optl-Wl,-zorigin
-endif
-ifeq "$(TargetOS_CPP)" "darwin"
-LIBFFI_LIBS += -optl-Wl,-rpath -optl-Wl,@loader_path
-endif
-
-else
-# flags will be taken care of in rts/dist-install/libs.depend
-LIBFFI_LIBS =
-endif
-$$(rts_$1_LIB) : $$(rts_$1_OBJS) $$(rts_$1_DTRACE_OBJS) rts/dist-install/libs.depend $$(rts_dist-install_FFI_SO)
-	"$$(RM)" $$(RM_OPTS) $$@
-	"$$(rts_dist-install_HC)" -this-unit-id rts -shared -dynamic -dynload deploy \
-	  -no-auto-link-packages $$(LIBFFI_LIBS) `cat rts/dist-install/libs.depend` $$(rts_$1_OBJS) \
-          $$(rts_dist-install_$1_GHC_LD_OPTS) \
-	  $$(rts_$1_DTRACE_OBJS) -o $$@
-endif
-else
-
-ifeq "$(USE_DTRACE)" "YES"
-ifeq "$(NEED_DTRACE_PROBES_OBJ)" "YES"
-# A list of objects that do not get included in the RTS object that is created
-# during the linking step. To prevent future linking errors, especially when
-# using the compiler as a bootstrap compiler, we need to exclude the hook
-# objects from being re-linked into the single LINKED_OBJS object file. When the
-# hooks are being linked into the RTS object this will result in duplicated
-# symbols causing the linker to fail (e.g. `StackOverflowHook` in RTS.o and
-# hschooks.o). The excluded objects do not get relinked into the RTS object but
-# get included separately so prevent linker errors.
-# (see issue #15040)
-rts_$1_EXCLUDED_OBJS = $$(rts_$1_C_HOOK_OBJS)
-# The RTS object that gets generated to package up all of the runtime system
-# with the dtrace probe code.
-rts_$1_LINKED_OBJS = rts/dist-install/build/RTS.$$($1_osuf)
-
-$$(rts_$1_LINKED_OBJS) : $$(rts_$1_OBJS) $$(rts_$1_DTRACE_OBJS) $$(rts_$1_C_HOOK_OBJS)
-	"$$(RM)" $$(RM_OPTS) $$@
-
-	# When linking an archive the linker will only include the object files that
-	# are actually needed during linking. It therefore does not include the dtrace
-	# specific code for initializing the probes. By creating a single object that
-	# also includes the probe object code we force the linker to include the
-	# probes when linking the static runtime.
-	#
-	# The reason why we are re-linking all the objects into a single object file
-	# is stated in this thread:
-	# https://thr3ads.net/dtrace-discuss/2005/08/384778-Problem-with-probes-defined-in-static-libraries
-	$(LD) -r -o $$(rts_$1_LINKED_OBJS) $$(rts_$1_DTRACE_OBJS) $$(filter-out $$(rts_$1_EXCLUDED_OBJS), $$(rts_$1_OBJS))
-else
-rts_$1_EXCLUDED_OBJS =
-rts_$1_LINKED_OBJS = $$(rts_$1_OBJS)
-endif
-else
-rts_$1_EXCLUDED_OBJS =
-rts_$1_LINKED_OBJS = $$(rts_$1_OBJS)
-endif
-
-
-$$(rts_$1_LIB) : $$(rts_$1_LINKED_OBJS)
-	"$$(RM)" $$(RM_OPTS) $$@
-
-	echo $$(rts_$1_LINKED_OBJS) $$(rts_$1_EXCLUDED_OBJS) | "$$(XARGS)" $$(XARGS_OPTS) "$$(AR_STAGE1)" \
-		$$(AR_OPTS_STAGE1) $$(EXTRA_AR_ARGS_STAGE1) $$@
-
-ifneq "$$(UseSystemLibFFI)" "YES"
-$$(rts_$1_LIB) : rts/dist-install/build/libC$$(LIBFFI_NAME)$$($1_libsuf)
-rts/dist-install/build/libC$$(LIBFFI_NAME)$$($1_libsuf): libffi/build/inst/lib/libffi.a
-	cp $$< $$@
-endif
-
-endif
-
-endif
-
-endef
-
-# And expand the above for each way:
-$(foreach way,$(rts_WAYS),$(eval $(call build-rts-way,$(way))))
-
-$(eval $(call distdir-opts,rts,dist-install,1))
-
-#-----------------------------------------------------------------------------
-# Flags for compiling every file
-
-# We like plenty of warnings.
-WARNING_OPTS += -Wall
-WARNING_OPTS += -Wextra
-WARNING_OPTS += -Wstrict-prototypes
-WARNING_OPTS += -Wmissing-prototypes
-WARNING_OPTS += -Wmissing-declarations
-WARNING_OPTS += -Winline
-WARNING_OPTS += -Wpointer-arith
-WARNING_OPTS += -Wmissing-noreturn
-WARNING_OPTS += -Wnested-externs
-WARNING_OPTS += -Wredundant-decls
-# Some gccs annoyingly enable this archaic specimen by default
-WARNING_OPTS += -Wno-aggregate-return
-WARNING_OPTS += -Wno-unused-label
-
-# These ones are hard to avoid:
-#WARNING_OPTS += -Wconversion
-#WARNING_OPTS += -Wbad-function-cast
-#WARNING_OPTS += -Wshadow
-#WARNING_OPTS += -Wcast-qual
-
-# This one seems buggy on GCC 4.1.2, which is the only GCC version we
-# have that can bootstrap the SPARC build. We end up with lots of spurious
-# warnings of the form "cast increases required alignment of target type".
-# Some legitimate warnings can be fixed by adding an intermediate cast to
-# (void*), but we get others in rts/sm/GCUtils.c concerning the gct var
-# that look innocuous to me. We could enable this again once we deprecate
-# support for registerised builds on this arch. -- BL 2010/02/03
-# WARNING_OPTS += -Wcast-align
-
-rts_INCLUDE_DIRS = \
-	$(addprefix include/,$(includes_INCLUDE_DIRS)) \
-	.
-
-rts_dist-install_INCLUDE_DIRS = \
-	$(addprefix include/,$(includes_dist-install_INCLUDE_DIRS))
-
-# COMPILING_RTS is only used when building Win32 DLL support.
-rts_CPP_OPTS += -DCOMPILING_RTS -DFS_NAMESPACE=rts
-
-# HC_OPTS is included in both .c and .cmm compilations, whereas CC_OPTS is
-# only included in .c compilations.  HC_OPTS included the WAY_* opts, which
-# must be included in both types of compilations.
-
-rts_CC_OPTS += $(WARNING_OPTS)
-
-rts_HC_OPTS += -this-unit-id rts
-
-ifneq "$(GhcWithSMP)" "YES"
-rts_CC_OPTS += -DNOSMP
-rts_HC_OPTS += -optc-DNOSMP
-endif
-
-# We *want* type-checking of hand-written cmm.
-rts_HC_OPTS += -dcmm-lint
-
-# -fno-strict-aliasing is required for the runtime, because we often
-# use a variety of types to represent closure pointers (StgPtr,
-# StgClosure, StgMVar, etc.), and without -fno-strict-aliasing gcc is
-# allowed to assume that these pointers do not alias.  eg. without
-# this flag we get problems in sm/Evac.c:copy() with gcc 3.4.3, the
-# upd_evacuee() assignments get moved before the object copy.
-rts_CC_OPTS += -fno-strict-aliasing
-
-rts_CC_OPTS += -fno-common
-
-ifeq "$(BeConservative)" "YES"
-rts_CC_OPTS += -DBE_CONSERVATIVE
-endif
-
-# Set Windows version
-ifeq "$$(TargetOS_CPP)" "mingw32"
-rts_CC_OPTS += -DWINVER=$(rts_WINVER)
-endif
-
-#-----------------------------------------------------------------------------
-# Flags for compiling specific files
-rts/RtsMessages_CC_OPTS += -DProjectVersion=\"$(ProjectVersion)\"
-rts/RtsUtils_CC_OPTS += -DProjectVersion=\"$(ProjectVersion)\"
-rts/Trace_CC_OPTS += -DProjectVersion=\"$(ProjectVersion)\"
-#
-rts/RtsUtils_CC_OPTS += -DHostPlatform=\"$(HOSTPLATFORM)\"
-rts/RtsUtils_CC_OPTS += -DHostArch=\"$(HostArch_CPP)\"
-rts/RtsUtils_CC_OPTS += -DHostOS=\"$(HostOS_CPP)\"
-rts/RtsUtils_CC_OPTS += -DHostVendor=\"$(HostVendor_CPP)\"
-#
-rts/RtsUtils_CC_OPTS += -DBuildPlatform=\"$(BUILDPLATFORM)\"
-rts/RtsUtils_CC_OPTS += -DBuildArch=\"$(BuildArch_CPP)\"
-rts/RtsUtils_CC_OPTS += -DBuildOS=\"$(BuildOS_CPP)\"
-rts/RtsUtils_CC_OPTS += -DBuildVendor=\"$(BuildVendor_CPP)\"
-#
-rts/RtsUtils_CC_OPTS += -DTargetPlatform=\"$(TARGETPLATFORM)\"
-rts/RtsUtils_CC_OPTS += -DTargetArch=\"$(TargetArch_CPP)\"
-rts/RtsUtils_CC_OPTS += -DTargetOS=\"$(TargetOS_CPP)\"
-rts/RtsUtils_CC_OPTS += -DTargetVendor=\"$(TargetVendor_CPP)\"
-#
-rts/RtsUtils_CC_OPTS += -DGhcUnregisterised=\"$(GhcUnregisterised)\"
-rts/RtsUtils_CC_OPTS += -DTablesNextToCode=\"$(TablesNextToCode)\"
-#
-rts/Hash_CC_OPTS += -O3
-
-# Compile various performance-critical pieces *without* -fPIC -dynamic
-# even when building a shared library.  If we don't do this, then the
-# GC runs about 50% slower on x86 due to the overheads of PIC.  The
-# cost of doing this is a little runtime linking and less sharing, but
-# not much.
-#
-# On x86_64 this doesn't work, because all objects in a shared library
-# must be compiled with -fPIC (since the 32-bit relocations generated
-# by the default small memory can't be resolved at runtime).  So we
-# only do this on i386.
-#
-# This apparently doesn't work on OS X (Darwin) nor on Solaris.
-# On Darwin we get errors of the form
-#
-#  ld: absolute addressing (perhaps -mdynamic-no-pic) used in _stg_ap_0_fast from rts/dist-install/build/Apply.dyn_o not allowed in slidable image
-#
-# and lots of these warnings:
-#
-#  ld: warning codegen in _stg_ap_pppv_fast (offset 0x0000005E) prevents image from loading in dyld shared cache
-#
-# On Solaris we get errors like:
-#
-# Text relocation remains                         referenced
-#     against symbol                  offset      in file
-# .rodata (section)                   0x11        rts/dist-install/build/Apply.dyn_o
-#   ...
-# ld: fatal: relocations remain against allocatable but non-writable sections
-# collect2: ld returned 1 exit status
-
-ifeq "$(TargetArch_CPP)" "i386"
-i386_SPEED_HACK := "YES"
-ifeq "$(TargetOS_CPP)" "darwin"
-i386_SPEED_HACK := "NO"
-endif
-ifeq "$(TargetOS_CPP)" "solaris2"
-i386_SPEED_HACK := "NO"
-endif
-endif
-
-ifeq "$(TargetArch_CPP)" "i386"
-ifeq "$(i386_SPEED_HACK)" "YES"
-rts/sm/Evac_HC_OPTS           += -fno-PIC
-rts/sm/Evac_thr_HC_OPTS       += -fno-PIC
-rts/sm/Scav_HC_OPTS           += -fno-PIC
-rts/sm/Scav_thr_HC_OPTS       += -fno-PIC
-rts/sm/Compact_HC_OPTS        += -fno-PIC
-rts/sm/GC_HC_OPTS             += -fno-PIC
-
-# -static is also necessary for these bits, otherwise the NCG
-# -generates dynamic references:
-rts/Updates_HC_OPTS += -fno-PIC -static
-rts/StgMiscClosures_HC_OPTS += -fno-PIC -static
-rts/PrimOps_HC_OPTS += -fno-PIC -static
-rts/Apply_HC_OPTS += -fno-PIC -static
-rts/dist-install/build/AutoApply_HC_OPTS += -fno-PIC -static
-endif
-endif
-
-# add CFLAGS for libffi
-ifeq "$(UseSystemLibFFI)" "YES"
-LIBFFI_CFLAGS = $(addprefix -I,$(FFIIncludeDir))
-rts/Interpreter_CC_OPTS += $(LIBFFI_CFLAGS)
-rts/Adjustor_CC_OPTS    += $(LIBFFI_CFLAGS)
-rts/sm/Storage_CC_OPTS  += $(LIBFFI_CFLAGS)
-endif
-
-# inlining warnings happen in Compact
-rts/sm/Compact_CC_OPTS += -Wno-inline
-
-# emits warnings about call-clobbered registers on x86_64
-rts/StgCRun_CC_OPTS += -w
-
-# On Windows:
-rts/win32/ConsoleHandler_CC_OPTS += -w
-rts/win32/ThrIOManager_CC_OPTS += -w
-# The above warning suppression flags are a temporary kludge.
-# While working on this module you are encouraged to remove it and fix
-# any warnings in the module. See
-#     https://gitlab.haskell.org/ghc/ghc/wikis/working-conventions#Warnings
-# for details
-
-# Without this, thread_obj will not be inlined (at least on x86 with GCC 4.1.0)
-ifneq "$(CcLlvmBackend)" "YES"
-rts/sm/Compact_CC_OPTS += -finline-limit=2500
-endif
-
-# -O3 helps unroll some loops (especially in copy() with a constant argument).
-rts/sm/Evac_CC_OPTS += -funroll-loops
-rts/sm/Evac_thr_HC_OPTS += -optc-funroll-loops
-
-
-#-----------------------------------------------------------------------------
-# Use system provided libffi
-
-ifeq "$(UseSystemLibFFI)" "YES"
-
-rts_PACKAGE_CPP_OPTS += -DFFI_INCLUDE_DIR=$(FFIIncludeDir)
-rts_PACKAGE_CPP_OPTS += -DFFI_LIB_DIR=$(FFILibDir)
-rts_PACKAGE_CPP_OPTS += '-DFFI_LIB='
-
-else # UseSystemLibFFI==YES
-
-rts_PACKAGE_CPP_OPTS += -DFFI_INCLUDE_DIR=
-rts_PACKAGE_CPP_OPTS += -DFFI_LIB_DIR=
-rts_PACKAGE_CPP_OPTS += '-DFFI_LIB="C$(LIBFFI_NAME)"'
-
-endif
-
-ifeq "$(UseLibdw)" "YES"
-rts_PACKAGE_CPP_OPTS += -DLIBDW_INCLUDE_DIR=$(LibdwIncludeDir)
-rts_PACKAGE_CPP_OPTS += -DLIBDW_LIB_DIR=$(LibdwLibDir)
-else
-rts_PACKAGE_CPP_OPTS += -DLIBDW_INCLUDE_DIR=
-rts_PACKAGE_CPP_OPTS += -DLIBDW_LIB_DIR=
-endif
-
-# -----------------------------------------------------------------------------
-# dependencies
-
-rts_WAYS_DASHED = $(subst $(space),,$(patsubst %,-%,$(strip $(rts_WAYS))))
-rts_dist-install_depfile_base = rts/dist-install/build/.depend$(rts_WAYS_DASHED)
-
-rts_dist-install_C_SRCS    = $(rts_C_SRCS) $(rts_thr_EXTRA_C_SRCS)
-rts_dist-install_S_SRCS    = $(rts_S_SRCS)
-rts_dist-install_CMM_SRCS  = $(rts_CMM_SRCS)
-rts_dist-install_C_FILES   = $(rts_dist-install_C_SRCS)
-rts_dist-install_CXX_FILES = $(rts_dist-install_CXX_SRCS)
-rts_dist-install_S_FILES   = $(rts_dist-install_S_SRCS)
-rts_dist-install_CMM_FILES = $(rts_dist-install_CMM_SRCS)
-
-# Hack: we define every way-related option here, so that we get (hopefully)
-# a superset of the dependencies.  To do this properly, we should generate
-# a different set of dependencies for each way.  Further hack: PROFILING an
-
-# TICKY_TICKY can't be used together, so we omit TICKY_TICKY for now.
-rts_dist-install_MKDEPENDC_OPTS += -DPROFILING -DTHREADED_RTS -DDEBUG
-
-ifeq "$(USE_DTRACE)" "YES"
-
-rts_dist-install_MKDEPENDC_OPTS += -Irts/dist-install/build
-
-endif
-
-$(eval $(call dependencies,rts,dist-install,1))
-
-$(rts_dist-install_depfile_c_asm) : $(includes_dist-install_H_FILES)
-
-$(rts_dist-install_depfile_c_asm) : $(DTRACEPROBES_H)
-ifneq "$(UseSystemLibFFI)" "YES"
-$(rts_dist-install_depfile_c_asm) : $(libffi_HEADERS)
-endif
-
-# -----------------------------------------------------------------------------
-# compile dtrace probes if dtrace is supported
-
-ifeq "$(USE_DTRACE)" "YES"
-
-rts_CC_OPTS		+= -DDTRACE
-rts_HC_OPTS		+= -DDTRACE
-
-# Apple's dtrace (the only one supported by ghc at the moment) uses
-# gcc as its preprocessor. If gcc isn't at /usr/bin/gcc, or we need
-# to force it to use a different gcc, we need to give the path in
-# the option cpppath.
-
-ifeq "$(TargetOS_CPP)" "darwin"
-# Darwin has a flag to tell dtrace which cpp to use.
-# Unfortunately, this isn't supported on Solaris (See Solaris Dynamic Tracing
-# Guide, Chapter 16, for the configuration variables available on Solaris)
-DTRACE_FLAGS = -x cpppath=$(CC)
-endif
-
-DTRACEPROBES_SRC = rts/RtsProbes.d
-$(DTRACEPROBES_H): $(DTRACEPROBES_SRC) $(includes_1_H_CONFIG) $(includes_1_H_PLATFORM) | $$(dir $$@)/.
-	"$(DTRACE)" $(filter -I%,$(rts_dist-install_DIST_CC_OPTS)) -C $(DTRACE_FLAGS) -h -o $@ -s $<
-endif
-
-# -----------------------------------------------------------------------------
-# The RTS package config
-
-# If -DDEBUG is in effect, adjust package conf accordingly..
-ifneq "$(strip $(filter -optc-DDEBUG,$(GhcRtsHcOpts)))" ""
-rts_PACKAGE_CPP_OPTS += -DDEBUG
-endif
-
-ifeq "$(HaveLibMingwEx)" "YES"
-rts_PACKAGE_CPP_OPTS += -DHAVE_LIBMINGWEX
-endif
-
-rts_dist-install_PACKAGE_CPP_OPTS = \
-	$(rts_PACKAGE_CPP_OPTS) \
-	$(addprefix -Irts/,$(rts_dist-install_DIST_INCLUDE_DIRS))
-
-$(eval $(call manual-package-config,rts,dist-install))
-
-rts/dist-install/package.conf.inplace : $(includes_dist-install_H_FILES)
-rts/dist-install/package.conf.install : $(includes_dist-install_H_FILES)
-
-# -----------------------------------------------------------------------------
-# installing
-
-RTS_INSTALL_LIBS += $(ALL_RTS_LIBS)
-ifneq "$(UseSystemLibFFI)" "YES"
-RTS_INSTALL_LIBS += $(wildcard rts/dist-install/build/lib$(LIBFFI_NAME)*$(soext)*)
-RTS_INSTALL_LIBS += $(foreach w,$(filter-out %dyn,$(rts_WAYS)),rts/dist-install/build/libC$(LIBFFI_NAME)$($w_libsuf))
-endif
-
-ifneq "$(UseSystemLibFFI)" "YES"
-install: install_libffi_headers
-endif
-
-.PHONY: install_libffi_headers
-install_libffi_headers :
-	$(INSTALL_DIR) "$(DESTDIR)$(ghcheaderdir)"
-	$(INSTALL_HEADER) $(INSTALL_OPTS) $(libffi_HEADERS) "$(DESTDIR)$(ghcheaderdir)/"
-
-# -----------------------------------------------------------------------------
-# cleaning
-
-$(eval $(call clean-target,rts,dist-install,rts/dist-install))
-
-BINDIST_EXTRAS += rts/package.conf.in
diff --git a/rts/include/ghc.mk b/rts/include/ghc.mk
deleted file mode 100644
index d4a765ab8d6263fc6c9cb1a94a0a3f785e94d3da..0000000000000000000000000000000000000000
--- a/rts/include/ghc.mk
+++ /dev/null
@@ -1,303 +0,0 @@
-# -----------------------------------------------------------------------------
-#
-# (c) 2009 The University of Glasgow
-#
-# This file is part of the GHC build system.
-#
-# To understand how the build system works and how to modify it, see
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/architecture
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/modifying
-#
-# -----------------------------------------------------------------------------
-
-#
-# Header files built from the configure script's findings
-#
-includes_1_H_CONFIG   = rts/dist-install/build/include/ghcautoconf.h
-includes_2_H_CONFIG   = $(includes_1_H_CONFIG)
-
-includes_1_H_PLATFORM = rts/dist-install/build/include/ghcplatform.h
-includes_2_H_PLATFORM = $(includes_1_H_PLATFORM)
-
-includes_INCLUDE_DIRS = .
-# "includes" isn't really a separate component, but just part of the RTS that
-# is in a separate ghc.mk for historical reasons. The ../dist-install puts the
-# build products with the rest of the RTS's.
-includes_dist-install_INCLUDE_DIRS = ../dist-install/build/include
-
-includes_dist-install_DIST_INCLUDE_DIRS = \
-	$(includes_INCLUDE_DIRS) \
-	$(includes_dist-install_INCLUDE_DIRS)
-
-#
-# All header files are in rts/include/{one of these subdirectories}
-#
-includes_H_SUBDIRS += .
-includes_H_SUBDIRS += rts
-includes_H_SUBDIRS += rts/prof
-includes_H_SUBDIRS += rts/storage
-includes_H_SUBDIRS += stg
-
-includes_H_FILES := $(wildcard $(patsubst %,rts/include/%/*.h,$(includes_H_SUBDIRS)))
-# This isn't necessary, but it makes the paths look a little prettier
-includes_H_FILES := $(subst /./,/,$(includes_H_FILES))
-
-includes_H_FILES_GENERATED = \
-    ghcautoconf.h \
-    ghcplatform.h
-
-# Unlike above, include generated files. We still need the previous list
-# without the generated files separately and not just as part of this due to
-# lingering issues like the derived constants generation snooping the RTS
-# headers.
-includes_dist_H_FILES = \
-	$(includes_H_FILES)
-includes_dist-install_H_FILES = \
-	$(includes_H_FILES) \
-	$(includes_dist-install_H_FILES_GENERATED)
-includes_dist-install_H_FILES_GENERATED = \
-	$(patsubst %,rts/dist-install/build/include/%,$(includes_H_FILES_GENERATED))
-
-#
-# Options
-#
-
-includes_CC_OPTS += $(SRC_CC_OPTS)
-includes_CC_OPTS += $(SRC_CC_WARNING_OPTS)
-includes_CC_OPTS += $(CONF_CC_OPTS_STAGE1)
-
-ifeq "$(GhcUnregisterised)" "YES"
-includes_CC_OPTS += -DUSE_MINIINTERPRETER
-endif
-
-includes_CC_OPTS += $(addprefix -Irts/,$(rts_dist-install_DIST_INCLUDE_DIRS))
-
-ifneq "$(GhcWithSMP)" "YES"
-includes_CC_OPTS += -DNOSMP
-endif
-
-ifneq "$(BINDIST)" "YES"
-
-define includesHeaderConfig
-# $1 = stage
-$$(includes_$1_H_CONFIG) : mk/config.h mk/config.mk rts/include/ghc.mk | $$$$(dir $$$$@)/.
-	$$(call removeFiles,$$@)
-	@echo "Creating $$@..."
-	@echo "#if !defined(__GHCAUTOCONF_H__)"  > $$@
-	@echo "#define __GHCAUTOCONF_H__" >> $$@
-#
-#	Copy the contents of mk/config.h, turning '#define PACKAGE_FOO
-#	"blah"' into '/* #undef PACKAGE_FOO */' to avoid clashes.
-#
-	@sed \
-		-e 's,^\([	 ]*\)#[	 ]*define[	 ][	 ]*\(PACKAGE_[A-Z]*\)[	 ][ 	]*".*".*$$$$,\1/* #undef \2 */,' \
-		-e '/__GLASGOW_HASKELL/d' \
-		-e '/REMOVE ME/d' \
-		mk/config.h \
-		>> $$@
-#
-	@echo "#endif /* __GHCAUTOCONF_H__ */"          >> $$@
-	@echo "Done."
-
-endef
-
-$(eval $(call includesHeaderConfig,0))
-$(eval $(call includesHeaderConfig,1))
-
-BuildPlatform_0_CPP = $(BuildPlatform_CPP)
-BuildPlatform_1_CPP = $(HostPlatform_CPP)
-BuildPlatform_2_CPP = $(TargetPlatform_CPP)
-
-HostPlatform_0_CPP = $(HostPlatform_CPP)
-HostPlatform_1_CPP = $(TargetPlatform_CPP)
-HostPlatform_2_CPP = $(TargetPlatform_CPP)
-
-BuildArch_0_CPP = $(BuildArch_CPP)
-BuildArch_1_CPP = $(HostArch_CPP)
-BuildArch_2_CPP = $(TargetArch_CPP)
-
-HostArch_0_CPP = $(HostArch_CPP)
-HostArch_1_CPP = $(TargetArch_CPP)
-HostArch_2_CPP = $(TargetArch_CPP)
-
-BuildOS_0_CPP = $(BuildOS_CPP)
-BuildOS_1_CPP = $(HostOS_CPP)
-BuildOS_2_CPP = $(TargetOS_CPP)
-
-HostOS_0_CPP = $(HostOS_CPP)
-HostOS_1_CPP = $(TargetOS_CPP)
-HostOS_2_CPP = $(TargetOS_CPP)
-
-BuildVendor_0_CPP = $(BuildVendor_CPP)
-BuildVendor_1_CPP = $(HostVendor_CPP)
-BuildVendor_2_CPP = $(TargetVendor_CPP)
-
-HostVendor_0_CPP = $(HostVendor_CPP)
-HostVendor_1_CPP = $(TargetVendor_CPP)
-HostVendor_2_CPP = $(TargetVendor_CPP)
-
-define includesHeaderPlatform
-# $1 = stage
-$$(includes_$1_H_PLATFORM) : rts/include/ghc.mk rts/include/Makefile | $$$$(dir $$$$@)/.
-	$$(call removeFiles,$$@)
-	@echo "Creating $$@..."
-	@echo "#if !defined(__GHCPLATFORM_H__)"                      > $$@
-	@echo "#define __GHCPLATFORM_H__"                           >> $$@
-	@echo                                                       >> $$@
-	@echo "#define BuildPlatform_TYPE  $(BuildPlatform_$1_CPP)" >> $$@
-	@echo "#define HostPlatform_TYPE   $(HostPlatform_$1_CPP)"  >> $$@
-	@echo                                                       >> $$@
-	@echo "#define $(BuildPlatform_$1_CPP)_BUILD  1"            >> $$@
-	@echo "#define $(HostPlatform_$1_CPP)_HOST  1"              >> $$@
-	@echo                                                       >> $$@
-	@echo "#define $(BuildArch_$1_CPP)_BUILD_ARCH  1"           >> $$@
-	@echo "#define $(HostArch_$1_CPP)_HOST_ARCH  1"             >> $$@
-	@echo "#define BUILD_ARCH  \"$(BuildArch_$1_CPP)\""         >> $$@
-	@echo "#define HOST_ARCH  \"$(HostArch_$1_CPP)\""           >> $$@
-	@echo                                                       >> $$@
-	@echo "#define $(BuildOS_$1_CPP)_BUILD_OS  1"               >> $$@
-	@echo "#define $(HostOS_$1_CPP)_HOST_OS  1"                 >> $$@
-	@echo "#define BUILD_OS  \"$(BuildOS_$1_CPP)\""             >> $$@
-	@echo "#define HOST_OS  \"$(HostOS_$1_CPP)\""               >> $$@
-	@echo                                                       >> $$@
-	@echo "#define $(BuildVendor_$1_CPP)_BUILD_VENDOR  1"       >> $$@
-	@echo "#define $(HostVendor_$1_CPP)_HOST_VENDOR  1"         >> $$@
-	@echo "#define BUILD_VENDOR  \"$(BuildVendor_$1_CPP)\""     >> $$@
-	@echo "#define HOST_VENDOR  \"$(HostVendor_$1_CPP)\""       >> $$@
-	@echo                                                       >> $$@
-ifeq "$$(GhcUnregisterised)" "YES"
-	@echo "#define UnregisterisedCompiler 1"                    >> $$@
-endif
-	@echo                                                       >> $$@
-	@echo "#endif /* __GHCPLATFORM_H__ */"                      >> $$@
-	@echo "Done."
-endef
-
-endif
-
-$(eval $(call includesHeaderPlatform,0))
-$(eval $(call includesHeaderPlatform,1))
-
-# -----------------------------------------------------------------------------
-# Settings
-
-# These settings are read by GHC at runtime, so as to not cause spurious
-# rebuilds.
-# See Note [tooldir: How GHC finds mingw on Windows]
-
-includes_SETTINGS = rts/dist-install/build/include/settings
-
-# N.B. this is duplicated in hadrian/bindist/Makefile.
-$(includes_SETTINGS) : rts/include/Makefile | $$(dir $$@)/.
-	$(call removeFiles,$@)
-	@echo '[("GCC extra via C opts", "$(GccExtraViaCOpts)")' >> $@
-	@echo ',("C compiler command", "$(SettingsCCompilerCommand)")' >> $@
-	@echo ',("C compiler flags", "$(SettingsCCompilerFlags)")' >> $@
-	@echo ',("C++ compiler command", "$(SettingsCxxCompilerCommand)")' >> $@
-	@echo ',("C++ compiler flags", "$(SettingsCxxCompilerFlags)")' >> $@
-	@echo ',("C compiler link flags", "$(SettingsCCompilerLinkFlags)")' >> $@
-	@echo ',("C compiler supports -no-pie", "$(SettingsCCompilerSupportsNoPie)")' >> $@
-	@echo ',("Haskell CPP command", "$(SettingsHaskellCPPCommand)")' >> $@
-	@echo ',("Haskell CPP flags", "$(SettingsHaskellCPPFlags)")' >> $@
-	@echo ',("ld command", "$(SettingsLdCommand)")' >> $@
-	@echo ',("ld flags", "$(SettingsLdFlags)")' >> $@
-	@echo ',("ld supports compact unwind", "$(LdHasNoCompactUnwind)")' >> $@
-	@echo ',("ld supports filelist", "$(LdHasFilelist)")' >> $@
-	@echo ',("ld is GNU ld", "$(LdIsGNULd)")' >> $@
-	@echo ',("Merge objects command", "$(SettingsMergeObjectsCommand)")' >> $@
-	@echo ',("Merge objects flags", "$(SettingsMergeObjectsFlags)")' >> $@
-	@echo ',("ar command", "$(SettingsArCommand)")' >> $@
-	@echo ',("ar flags", "$(ArArgs)")' >> $@
-	@echo ',("ar supports at file", "$(ArSupportsAtFile)")' >> $@
-	@echo ',("ar supports -L", "$(ArSupportsDashL)")' >> $@
-	@echo ',("ranlib command", "$(SettingsRanlibCommand)")' >> $@
-	@echo ',("otool command", "$(SettingsOtoolCommand)")' >> $@
-	@echo ',("install_name_tool command", "$(SettingsInstallNameToolCommand)")' >> $@
-	@echo ',("touch command", "$(SettingsTouchCommand)")' >> $@
-	@echo ',("dllwrap command", "$(SettingsDllWrapCommand)")' >> $@
-	@echo ',("windres command", "$(SettingsWindresCommand)")' >> $@
-	@echo ',("unlit command", "$$topdir/bin/$(utils/unlit_dist_PROG)")' >> $@
-	@echo ',("cross compiling", "$(CrossCompiling)")' >> $@
-	@echo ',("target platform string", "$(TARGETPLATFORM)")' >> $@
-	@echo ',("target os", "$(HaskellTargetOs)")' >> $@
-	@echo ',("target arch", "$(HaskellTargetArch)")' >> $@
-	@echo ',("target word size", "$(TargetWordSize)")' >> $@
-	@echo ',("target word big endian", "$(TargetWordBigEndian)")' >> $@
-	@echo ',("target has GNU nonexec stack", "$(TargetHasGnuNonexecStack)")' >> $@
-	@echo ',("target has .ident directive", "$(TargetHasIdentDirective)")' >> $@
-	@echo ',("target has subsections via symbols", "$(TargetHasSubsectionsViaSymbols)")' >> $@
-	@echo ',("target has RTS linker", "$(TargetHasRTSLinker)")' >> $@
-	@echo ',("target has libm", "$(TargetHasLibm)")' >> $@
-	@echo ',("Unregisterised", "$(GhcUnregisterised)")' >> $@
-	@echo ',("LLVM target", "$(LLVMTarget_CPP)")' >> $@
-	@echo ',("LLVM llc command", "$(SettingsLlcCommand)")' >> $@
-	@echo ',("LLVM opt command", "$(SettingsOptCommand)")' >> $@
-	@echo ',("LLVM clang command", "$(SettingsClangCommand)")' >> $@
-	@echo ',("Use inplace MinGW toolchain", "$(SettingsUseDistroMINGW)")' >> $@
-	@echo
-	@echo ',("Use interpreter", "$(GhcWithInterpreter)")' >> $@
-	@echo ',("Support SMP", "$(GhcWithSMP)")' >> $@
-	@echo ',("RTS ways", "$(GhcRTSWays)")' >> $@
-	@echo ',("Tables next to code", "$(TablesNextToCode)")' >> $@
-	@echo ',("Leading underscore", "$(LeadingUnderscore)")' >> $@
-	@echo ',("Use LibFFI", "$(UseLibffiForAdjustors)")' >> $@
-	@echo ',("RTS expects libdw", "$(GhcRtsWithLibdw)")' >> $@
-	@echo "]" >> $@
-
-
-# ---------------------------------------------------------------------------
-# Make DerivedConstants.h for the compiler
-
-includes_DERIVEDCONSTANTS = rts/dist-install/build/include/DerivedConstants.h
-includes_EVENTLOG_CONSTANTS = rts/dist-install/build/include/rts/EventLogConstants.h
-includes_EVENT_TYPES = rts/dist-install/build/include/rts/EventTypes.h
-
-DERIVE_CONSTANTS_FLAGS_FOR_HEADER += --gcc-program "$(CC)"
-DERIVE_CONSTANTS_FLAGS_FOR_HEADER += $(addprefix --gcc-flag$(space),$(includes_CC_OPTS) -fcommon)
-DERIVE_CONSTANTS_FLAGS_FOR_HEADER += --nm-program "$(NM)"
-ifneq "$(OBJDUMP)" ""
-DERIVE_CONSTANTS_FLAGS_FOR_HEADER += --objdump-program "$(OBJDUMP)"
-endif
-DERIVE_CONSTANTS_FLAGS_FOR_HEADER += --target-os "$(TargetOS_CPP)"
-
-ifneq "$(BINDIST)" "YES"
-$(includes_DERIVEDCONSTANTS):           $$(includes_H_FILES) $$(rts_H_FILES)
-
-$(includes_DERIVEDCONSTANTS): $(deriveConstants_INPLACE) $(includes_1_H_CONFIG) $(includes_1_H_PLATFORM) | $$(dir $$@)/.
-	$< --gen-header -o $@ --tmpdir $(dir $@) $(DERIVE_CONSTANTS_FLAGS_FOR_HEADER)
-
-$(includes_EVENTLOG_CONSTANTS): rts/gen_event_types.py
-	mkdir -p $(dir $@)
-	${PYTHON} $< --event-types-defines=$@
-
-$(includes_EVENT_TYPES): rts/gen_event_types.py
-	mkdir -p $(dir $@)
-	${PYTHON} $< --event-types-array=$@
-
-includes/EventLog.h : $(includes_EVENTLOG_CONSTANTS) $(includes_EVENT_TYPES)
-endif
-
-includes_dist-install_H_FILES_GENERATED += $(includes_DERIVEDCONSTANTS)
-includes_dist-install_H_FILES_GENERATED += $(includes_EVENTLOG_CONSTANTS)
-includes_dist-install_H_FILES_GENERATED += $(includes_EVENT_TYPES)
-
-# ---------------------------------------------------------------------------
-# Install all header files
-
-$(eval $(call clean-target,includes,,$(includes_dist-install_H_FILES_GENERATED)))
-
-$(eval $(call all-target,includes,$(includes_dist-install_H_FILES_GENERATED)))
-
-install: install_includes
-
-.PHONY: install_includes
-install_includes : $(includes_dist-install_H_FILES_GENERATED)
-	$(INSTALL_DIR) "$(DESTDIR)$(ghcheaderdir)"
-	$(foreach d,$(includes_H_SUBDIRS), \
-	    $(INSTALL_DIR) "$(DESTDIR)$(ghcheaderdir)/$d" && \
-	    $(INSTALL_HEADER) $(INSTALL_OPTS) rts/include/$d/*.h "$(DESTDIR)$(ghcheaderdir)/$d/" && \
-	) true
-	$(INSTALL_HEADER) $(INSTALL_OPTS) \
-		$(includes_dist-install_H_FILES_GENERATED) \
-		"$(DESTDIR)$(ghcheaderdir)/"
-
diff --git a/rules/add-dependency.mk b/rules/add-dependency.mk
deleted file mode 100644
index 1b5a666e86f2d7b30093465971f683a8223239a3..0000000000000000000000000000000000000000
--- a/rules/add-dependency.mk
+++ /dev/null
@@ -1,15 +0,0 @@
-# -----------------------------------------------------------------------------
-#
-# (c) 2010 The University of Glasgow
-#
-# This file is part of the GHC build system.
-#
-# To understand how the build system works and how to modify it, see
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/architecture
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/modifying
-#
-# -----------------------------------------------------------------------------
-
-define add-dependency
-$1: $2
-endef
diff --git a/rules/all-target.mk b/rules/all-target.mk
deleted file mode 100644
index 52fbc02b1e96105b076f6a125cc36896981f28ac..0000000000000000000000000000000000000000
--- a/rules/all-target.mk
+++ /dev/null
@@ -1,18 +0,0 @@
-# -----------------------------------------------------------------------------
-#
-# (c) 2009 The University of Glasgow
-#
-# This file is part of the GHC build system.
-#
-# To understand how the build system works and how to modify it, see
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/architecture
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/modifying
-#
-# -----------------------------------------------------------------------------
-
-define all-target # args: $1 = dir, $2 = deps
-all : all_$1
-.PHONY: all_$1
-all_$1 : $2
-endef
-
diff --git a/rules/bindist.mk b/rules/bindist.mk
deleted file mode 100644
index af3b144222b45568bb9639819d68e51d0bb31d12..0000000000000000000000000000000000000000
--- a/rules/bindist.mk
+++ /dev/null
@@ -1,32 +0,0 @@
-# -----------------------------------------------------------------------------
-#
-# (c) 2009 The University of Glasgow
-#
-# This file is part of the GHC build system.
-#
-# To understand how the build system works and how to modify it, see
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/architecture
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/modifying
-#
-# -----------------------------------------------------------------------------
-
-
-# Add files to the bindist-list. Invoke like this:
-#
-# $(eval $(call bindist-list,utils/genapply,ghc.mk))
-
-define bindist-list
-# $1 = name
-# $2 = files
-
-.PHONY: bindist-list_$1
-bindist-list: bindist-list_$1
-
-bindist-list_$1:
-	$(foreach i,$2,\
-	    $(call make-command,\
-	        for f in $i; do echo $(BIN_DIST_NAME)/$$$$f >> bindist-list; done \
-	    ) \
-	    )
-endef
-
diff --git a/rules/build-dependencies.mk b/rules/build-dependencies.mk
deleted file mode 100644
index cc438c80eb597eb961d45f96c0fcc1bce91b2a12..0000000000000000000000000000000000000000
--- a/rules/build-dependencies.mk
+++ /dev/null
@@ -1,161 +0,0 @@
-# -----------------------------------------------------------------------------
-#
-# (c) 2009 The University of Glasgow
-#
-# This file is part of the GHC build system.
-#
-# To understand how the build system works and how to modify it, see
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/architecture
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/modifying
-#
-# -----------------------------------------------------------------------------
-
-define build-dependencies
-$(call trace, build-dependencies($1,$2,$3))
-$(call profStart, build-dependencies($1,$2,$3))
-# $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_CXX_FILES_DEPS = $$(filter-out $$($1_$2_CXX_FILES_NODEPS),$$($1_$2_CXX_FILES))
-
-$1_$2_MKDEPENDHS_FLAGS = -dep-makefile $$($1_$2_depfile_haskell).tmp $$(foreach way,$$($1_$2_WAYS),-dep-suffix "$$(patsubst %o,%,$$($$(way)_osuf))")
-$1_$2_MKDEPENDHS_FLAGS += -include-pkg-deps
-$1_$2_MKDEPENDHS_FLAGS += $(addprefix -I,$($1_INCLUDE_DIRS))
-
-ifneq "$$(NO_GENERATED_MAKEFILE_RULES)" "YES"
-
-# Some of the Haskell files (e.g. utils/hsc2hs/Main.hs) (directly or
-# indirectly) include the generated includes files.
-$$($1_$2_depfile_haskell) : $$(includes_$3_H_CONFIG) $$(includes_$3_H_PLATFORM)
-
-$$($1_$2_depfile_haskell) : $$($1_$2_HS_SRCS) $$($1_$2_HS_BOOT_SRCS) $$$$($1_$2_HC_MK_DEPEND_DEP) | $$$$(dir $$$$@)/.
-	$$(call removeFiles,$$@.tmp)
-ifneq "$$($1_$2_HS_SRCS)" ""
-	"$$($1_$2_HC_MK_DEPEND)" -M \
-	    $$($1_$2_$$(firstword $$($1_$2_WAYS))_MOST_DIR_HC_OPTS) \
-	    $$($1_$2_MKDEPENDHS_FLAGS) \
-	    $$($1_$2_HS_SRCS)
-endif
-	echo "$1_$2_depfile_haskell_EXISTS = YES" >> $$@.tmp
-ifneq "$$($1_$2_SLASH_MODS)" ""
-	for dir in $$(sort $$(foreach mod,$$($1_$2_SLASH_MODS),$1/$2/build/$$(dir $$(mod)))); do \
-		if test ! -d $$$$dir; then mkdir -p $$$$dir; fi \
-	done
-endif
-#    Some packages are from the bootstrapping compiler, so are not
-#    within the build tree. On Windows this causes a problem as they look
-#    like bad rules, due to the two colons, so we filter them out.
-	grep -v ' : [a-zA-Z]:/' $$@.tmp > $$@.tmp2
-# Insert the calls to hi-rule. Basically, we look for the
-#     Foo.dyn_o Foo.o : Foo.hs
-# lines, and create corresponding hi-rule lines
-#     <dollar>(eval <dollar>(call hi-rule,Foo.dyn_hi Foo.hi : %hi: %o Foo.hs))
-	sed -e '/hs$$$$/ p' -e '/hs$$$$/ s/o /hi /g' \
-             -e '/hs$$$$/ s/:/ : %hi: %o /'                       \
-             -e '/hs$$$$/ s/^/$$$$(eval $$$$(call hi-rule,/'      \
-             -e '/hs$$$$/ s/$$$$/))/'                             \
-             -e '/hs-boot$$$$/ p' -e '/hs-boot$$$$/ s/o-boot /hi-boot /g' \
-             -e '/hs-boot$$$$/ s/:/ : %hi-boot: %o-boot /'        \
-             -e '/hs-boot$$$$/ s/^/$$$$(eval $$$$(call hi-rule,/' \
-             -e '/hs-boot$$$$/ s/$$$$/))/'                        \
-             $$@.tmp2 > $$@
-# Some of the C files (directly or indirectly) include the generated
-# includes files.
-$$($1_$2_depfile_c_asm) : $$(includes_$3_H_CONFIG) $$(includes_$3_H_PLATFORM)
-
-$$($1_$2_depfile_c_asm) : $$($1_$2_C_FILES_DEPS) $$($1_$2_CXX_FILES_DEPS) $$($1_$2_S_FILES) $$($1_$2_CMM_FILES) | $$$$(dir $$$$@)/.
-	$$(call removeFiles,$$@.tmp)
-ifneq "$$(strip $$($1_$2_C_FILES_DEPS) $$($1_$2_CXX_FILES_DEPS) $$($1_$2_S_FILES)) $$($1_$2_CMM_FILES))" ""
-# We ought to actually do this for each way in $$($1_$2_WAYS), but then
-# it takes a long time to make the C deps for the RTS (30 seconds rather
-# than 3), so instead we just pass the list of ways in and let addCFileDeps
-# copy the deps for each way on the assumption that they are the same
-	$$(foreach f,$$($1_$2_C_FILES_DEPS) $$($1_$2_S_FILES) $$($1_$2_CMM_FILES), \
-	    $$(call addCFileDeps,$1,$2,$$($1_$2_depfile_c_asm),$$f,$$($1_$2_WAYS),"c"))
-	$$(foreach f,$$($1_$2_CXX_FILES_DEPS), \
-	    $$(call addCFileDeps,$1,$2,$$($1_$2_depfile_c_asm),$$f,$$($1_$2_WAYS),"c++"))
-	$$(call removeFiles,$$@.bit)
-endif
-	echo "$1_$2_depfile_c_asm_EXISTS = YES" >> $$@.tmp
-	mv $$@.tmp $$@
-
-endif # NO_GENERATED_MAKEFILE_RULES
-
-# Note sed magic above: mkdependC can't do -odir stuff, so we have to
-# munge the dependencies it generates to refer to the correct targets.
-
-$(call profEnd, build-dependencies($1,$2,$3))
-endef
-
-# This comment is outside the "define addCFileDeps" as that definition
-# is a list of command lines, and if it is inside it then we pass this
-# comment to the shell every time we call the definition.
-# $1 = dir
-# $2 = distdir
-# $3 = depfile
-# $4 = file
-# $5 = ways
-# $6 = lang (c or c++)
-#
-# The formatting of this definition (e.g. the blank line above) is
-# important, in order to get make to generate the right makefile code.
-#
-# 's|\\|/|g'
-#    We first normalise all slashes to be forward slashes. Note that
-#    $(TOP) also uses forward slashes.
-# 's| /$$| \\|'
-#    But now we need to fix the line continuation characters that we
-#    just broke.
-# "1s|\.o|\.$($w_osuf)|"
-#    We will have dependencies for .o files, so we need to fix them up
-#    for the right object suffix for the way we're doing
-# "1s|^|$(dir $4)|"
-#    We always get deps for just foo.o when the file we're making is
-#    a/b/c/foo.o, so we need to prepend the directory of the source file
-# "1s|$1/|$1/$2/build/|"
-#    Well, almost. We actually need to insert e.g. "dist/build" in the
-#    middle of that directory
-# "1s|$2/build/$2/build|$2/build|g"
-#    But some source files, e.g. sm/Evac_thr.c, are also inside the
-#    "dist/build" directory, so now we've just made
-#    "dist/build/dist/build", so we need to remove the duplication
-#    again
-# "s|$(TOP)/||g$(CASE_INSENSITIVE_SED)"
-#    Finally, when making deps for packages like ghc stage2, we have
-#    some include paths for packages registered in the in-tree package
-#    database. These include paths are full (i.e. not relative) paths,
-#    which means that the "cpp -MM" output uses full paths in some cases.
-#    This causes 2 problems:
-#    * they don't match up with the rules to rebuild the files, where
-#      appropriate.
-#    * on Windows, make interprets the colon in c:/foo/bar.h as make
-#      syntax.
-#    So we sed off $(TOP). Unfortunately, on Windows, the case for the
-#    drive letter is sometimes different in what $(TOP) starts with, and
-#    what the path in the package database starts with. We therefore
-#	 need to do the substitution case-insensitively on Windows. But
-#    the s///i modifier isn't portable, so we set CASE_INSENSITIVE_SED
-#    to "i" on Windows and "" on any other platform.
-
-# We use this not only for .c files, but also for .S and .cmm files.
-# As gcc doesn't know what a .cmm file is, it treats it as a linker
-# input and ignores it. We therefore tell gcc that all files are C
-# files with "-x c" so that it actually processes them all.
-
-define addCFileDeps
-
-	$(CPP) $($1_$2_MKDEPENDC_OPTS) $($1_$2_$(firstword $($1_$2_WAYS))_ALL_CC_OPTS) $($(basename $4)_CC_OPTS) -MM -x $6 $4 -MF $3.bit
-	$(foreach w,$5,sed -e 's|\\|/|g' -e 's| /$$| \\|' -e "1s|\.o|\.$($w_osuf)|" -e "1s|^|$(dir $4)|" -e "1s|$1/|$1/$2/build/|" -e "1s|$2/build/$2/build|$2/build|g" -e "s|^$(TOP)/||g$(CASE_INSENSITIVE_SED)" $3.bit >> $3.tmp &&) true
-endef
-
-ifeq "$(Windows_Host)" "YES"
-CASE_INSENSITIVE_SED = i
-else
-CASE_INSENSITIVE_SED =
-endif
-
diff --git a/rules/build-package-data.mk b/rules/build-package-data.mk
deleted file mode 100644
index a8c9c12823f736116e914922dcad287acfb434d9..0000000000000000000000000000000000000000
--- a/rules/build-package-data.mk
+++ /dev/null
@@ -1,145 +0,0 @@
-# -----------------------------------------------------------------------------
-#
-# (c) 2009 The University of Glasgow
-#
-# This file is part of the GHC build system.
-#
-# To understand how the build system works and how to modify it, see
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/architecture
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/modifying
-#
-# -----------------------------------------------------------------------------
-
-define build-package-data
-$(call trace, build-package-data($1,$2,$3))
-$(call profStart, build-package-data($1,$2,$3))
-# args:
-# $1 = dir
-# $2 = distdir
-# $3 = GHC stage to use (0 == bootstrapping compiler)
-
-ifeq "$(V)" "0"
-$1_$2_CONFIGURE_OPTS += -v0 --configure-option=--quiet
-
-# Cabal always passes --with-compiler and --with-gcc to library configure
-# scripts, resulting in the following useless (for us) warning in the logs:
-# "configure: WARNING: unrecognized options: --with-compiler, --with-gcc"
-$1_$2_CONFIGURE_OPTS += --configure-option=--disable-option-checking
-
-$1_$2_GHC_PKG_OPTS += -v0
-endif
-
-$1_$2_CONFIGURE_OPTS += --disable-library-for-ghci
-ifeq "$$(filter v,$$($1_$2_WAYS))" "v"
-$1_$2_CONFIGURE_OPTS += --enable-library-vanilla
-# Build the GHCi lib even if GHCi is dynamic (and therefore won't use
-# these by default), because they will be used by
-#  (a) ghci -fexternal-interpreter
-#  (b) statically-linked binaries that use the GHC package
-ifeq "$$(GhcWithInterpreter)" "YES"
-$1_$2_CONFIGURE_OPTS += --enable-library-for-ghci
-endif
-else
-$1_$2_CONFIGURE_OPTS += --disable-library-vanilla
-endif
-
-ifeq "$$(filter p,$$($1_$2_WAYS))" "p"
-$1_$2_CONFIGURE_OPTS += --enable-library-profiling
-else
-$1_$2_CONFIGURE_OPTS += --disable-library-profiling
-endif
-
-ifeq "$$(filter dyn,$$($1_$2_WAYS))" "dyn"
-$1_$2_CONFIGURE_OPTS += --enable-shared
-else
-$1_$2_CONFIGURE_OPTS += --disable-shared
-endif
-
-ifeq "$$(HSCOLOUR_SRCS)" "YES"
-$1_$2_CONFIGURE_OPTS += --with-hscolour="$$(HSCOLOUR_CMD)"
-endif
-
-# We filter out -Werror from SRC_CC_OPTS, because when configure tests
-# for a feature it may not generate warning-free C code, and thus may
-# think that the feature doesn't exist if -Werror is on.
-#
-# Do `-iquote $(TOP)/$1` so package configure scripts can access their own source.
-$1_$2_CONFIGURE_CFLAGS = $$(filter-out -Werror,$$(SRC_CC_OPTS)) $$(CONF_CC_OPTS_STAGE$3) $$($1_CC_OPTS) $$($1_$2_CC_OPTS) $$(SRC_CC_WARNING_OPTS) -iquote $(TOP)/$1
-$1_$2_CONFIGURE_LDFLAGS = $$(SRC_LD_OPTS) $$($1_LD_OPTS) $$($1_$2_LD_OPTS)
-$1_$2_CONFIGURE_CPPFLAGS = $$(SRC_CPP_OPTS) $$(CONF_CPP_OPTS_STAGE$3) $$($1_CPP_OPTS) $$($1_$2_CPP_OPTS)
-
-$1_$2_CONFIGURE_OPTS += --configure-option=CFLAGS="$$($1_$2_CONFIGURE_CFLAGS)"
-$1_$2_CONFIGURE_OPTS += --configure-option=LDFLAGS="$$($1_$2_CONFIGURE_LDFLAGS)"
-$1_$2_CONFIGURE_OPTS += --configure-option=CPPFLAGS="$$($1_$2_CONFIGURE_CPPFLAGS)"
-
-# Also pass these as gcc-options, because Cabal uses them to check for
-# the existence of foreign libraries.
-$1_$2_CONFIGURE_OPTS += --gcc-options="$$($1_$2_CONFIGURE_CFLAGS) $$($1_$2_CONFIGURE_LDFLAGS)"
-
-ifneq "$$(ICONV_INCLUDE_DIRS)" ""
-$1_$2_CONFIGURE_OPTS += --configure-option=--with-iconv-includes="$$(ICONV_INCLUDE_DIRS)"
-endif
-
-ifneq "$$(ICONV_LIB_DIRS)" ""
-$1_$2_CONFIGURE_OPTS += --configure-option=--with-iconv-libraries="$$(ICONV_LIB_DIRS)"
-endif
-
-ifneq "$$(GMP_INCLUDE_DIRS)" ""
-$1_$2_CONFIGURE_OPTS += --configure-option=--with-gmp-includes="$$(GMP_INCLUDE_DIRS)"
-endif
-
-ifneq "$$(GMP_LIB_DIRS)" ""
-$1_$2_CONFIGURE_OPTS += --configure-option=--with-gmp-libraries="$$(GMP_LIB_DIRS)"
-endif
-
-ifeq "$$(GMP_PREFER_FRAMEWORK)" "YES"
-$1_$2_CONFIGURE_OPTS += --configure-option=--with-gmp-framework-preferred
-endif
-
-ifeq "$$(GMP_FORCE_INTREE)" "YES"
-$1_$2_CONFIGURE_OPTS += --configure-option=--with-intree-gmp
-endif
-
-ifeq "$$(GMP_ENABLED)" "YES"
-$1_$2_CONFIGURE_OPTS += --configure-option=--with-gmp
-endif
-
-
-ifneq "$$(CURSES_LIB_DIRS)" ""
-$1_$2_CONFIGURE_OPTS += --configure-option=--with-curses-libraries="$$(CURSES_LIB_DIRS)"
-endif
-
-$1_$2_CONFIGURE_OPTS += --configure-option=--host=$(TargetPlatformFull)
-
-ifeq "$3" "0"
-$1_$2_CONFIGURE_OPTS += $$(BOOT_PKG_CONSTRAINTS)
-endif
-
-$1_$2_CONFIGURE_OPTS += --with-gcc="$$(CC_STAGE$3)"
-$1_$2_CONFIGURE_OPTS += --with-ld="$$(LD_STAGE$3)"
-$1_$2_CONFIGURE_OPTS += --with-ar="$$(AR_STAGE$3)"
-$1_$2_CONFIGURE_OPTS += $$(if $$(ALEX),--with-alex="$$(ALEX)")
-$1_$2_CONFIGURE_OPTS += $$(if $$(HAPPY),--with-happy="$$(HAPPY)")
-
-$1_$2_PKGDATA = $1/$2/package-data.mk
-
-ifneq "$$(BINDIST)" "YES"
-ifneq "$$(NO_GENERATED_MAKEFILE_RULES)" "YES"
-$1/$2/inplace-pkg-config : $$($1_$2_PKGDATA)
-$1/$2/build/$$(or $$($1_EXECUTABLE),$$($1_$2_PROGNAME),.)/autogen/cabal_macros.h : $$($1_$2_PKGDATA)
-
-# This rule configures the package, generates the package-data.mk file
-# for our build system, and registers the package for use in-place in
-# the build tree.
-$$($1_$2_PKGDATA) : $$$$(ghc-cabal_INPLACE) $$($1_$2_GHC_PKG_DEP) $1/$$($1_PACKAGE).cabal $$(wildcard $1/configure) $$(LAX_DEPS_FOLLOW) $$$$($1_$2_HC_CONFIG_DEP)
-	"$$(ghc-cabal_INPLACE)" configure $1 $2 --with-ghc="$$($1_$2_HC_CONFIG)" --with-ghc-pkg="$$($1_$2_GHC_PKG)" $$($1_CONFIGURE_OPTS) $$($1_$2_CONFIGURE_OPTS)
-ifeq "$$($1_$2_PROG)" ""
-	$$(call cmd,$1_$2_GHC_PKG) update -v0 --force $$($1_$2_GHC_PKG_OPTS) $1/$2/inplace-pkg-config
-endif
-endif # NO_GENERATED_MAKEFILE_RULES
-endif # BINDIST
-
-PACKAGE_DATA_MKS += $$($1_$2_PKGDATA)
-
-$(call profEnd, build-package-data($1,$2,$3))
-endef
diff --git a/rules/build-package-way.mk b/rules/build-package-way.mk
deleted file mode 100644
index 2f7af28ecb5a89d26ff865e4137afea272190f47..0000000000000000000000000000000000000000
--- a/rules/build-package-way.mk
+++ /dev/null
@@ -1,151 +0,0 @@
-# -----------------------------------------------------------------------------
-#
-# (c) 2009 The University of Glasgow
-#
-# This file is part of the GHC build system.
-#
-# To understand how the build system works and how to modify it, see
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/architecture
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/modifying
-#
-# -----------------------------------------------------------------------------
-
-
-define build-package-way # $1 = dir, $2 = distdir, $3 = way, $4 = stage
-$(call trace, build-package-way($1,$2,$3))
-$(call profStart, build-package-way($1,$2,$3))
-
-$(call distdir-way-opts,$1,$2,$3,$4)
-$(call hs-suffix-way-rules,$1,$2,$3)
-
-$(call hs-objs,$1,$2,$3)
-
-# The .a/.so library file, indexed by two different sets of vars:
-# the first is indexed by the dir, distdir and way
-# the second is indexed by the package id, distdir and way
-$1_$2_$3_LIB_FILE = libHS$$($1_$2_COMPONENT_ID)$(subst .,%,$$($3_libsuf))
-$1_$2_$3_LIB = $1/$2/build/$$($1_$2_$3_LIB_FILE)
-$$($1_$2_COMPONENT_ID)_$2_$3_LIB = $$($1_$2_$3_LIB)
-
-# Note [inconsistent distdirs]
-# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-# hack: the DEPS_LIBS mechanism assumes that the distdirs for packages
-# that depend on each other are the same, but that is not the case for
-# ghc where we use stage1/stage2 rather than dist/dist-install.
-# Really we should use a consistent scheme for distdirs, but in the
-# meantime we work around it by defining ghc-<ver>_dist-install_way_LIB:
-#
-# A similar hack is applied to the PROGRAM_DEP_LIB mechanism in
-# rules/build-package.mk.
-ifeq "$$($1_PACKAGE) $2" "ghc stage2"
-$$($1_$2_COMPONENT_ID)_dist-install_$3_LIB = $$($1_$2_$3_LIB)
-endif
-
-# All the .a/.so library file dependencies for this library.
-#
-# The $(subst stage2,dist-install,..) is needed due to Note
-# [inconsistent distdirs].
-#
-# NB: Use DEP_COMPONENT_IDS for the /directory/ parameter.
-$1_$2_$3_DEPS_LIBS=$$(foreach dep,$$($1_$2_DEP_COMPONENT_IDS),$$($$(dep)_$(subst stage2,dist-install,$2)_$3_LIB))
-
-$1_$2_$3_NON_HS_OBJS = $$($1_$2_$3_CMM_OBJS) $$($1_$2_$3_C_OBJS) $$($1_$2_$3_CXX_OBJS)  $$($1_$2_$3_S_OBJS) $$($1_$2_EXTRA_OBJS)
-$1_$2_$3_ALL_OBJS = $$($1_$2_$3_HS_OBJS) $$($1_$2_$3_NON_HS_OBJS)
-
-ifeq "$3" "dyn"
-
-# Link a dynamic library
-# On windows we have to supply the extra libs this one links to when building it.
-ifeq "$$(TargetOS_CPP)" "mingw32"
-$$($1_$2_$3_LIB) : $$($1_$2_$3_ALL_OBJS) $$(ALL_RTS_LIBS) $$($1_$2_$3_DEPS_LIBS)
-	$$(call build-dll,$1,$2,$3,-L$1/$2/build,,$$($1_$2_$3_HS_OBJS) $$($1_$2_$3_NON_HS_OBJS),"$$@","NO","$$($1_PACKAGE)","$$($1_$2_VERSION)")
-
-else # ifneq "$$(TargetOS_CPP)" "mingw32"
-$$($1_$2_$3_LIB) : $$($1_$2_$3_ALL_OBJS) $$(ALL_RTS_LIBS) $$($1_$2_$3_DEPS_LIBS)
-	$$(call cmd,$1_$2_HC) $$($1_$2_$3_ALL_HC_OPTS) $$($1_$2_$3_GHC_LD_OPTS) $$($1_$2_$3_ALL_OBJS) \
-         -shared -dynamic -dynload deploy \
-	 $$(addprefix -l,$$($1_$2_EXTRA_LIBRARIES)) $$(addprefix -L,$$($1_$2_EXTRA_LIBDIRS)) \
-         -no-auto-link-packages \
-         -o $$@
-endif # "$$(TargetOS_CPP)" "mingw32"
-
-else # ifneq "$3" "dyn"
-
-# Build the ordinary .a library
-$$($1_$2_$3_LIB) : $$($1_$2_$3_ALL_OBJS)
-	$$(call removeFiles,$$@ $$@.contents)
-	echo $$($1_$2_$3_ALL_OBJS) >> $$@.contents
-ifeq "$$($1_$2_ArSupportsAtFile)" "YES"
-	$$(call cmd,$1_$2_AR) $$($1_$2_AR_OPTS) $$($1_$2_EXTRA_AR_ARGS) $$@ @$$@.contents
-else
-	"$$(XARGS)" $$(XARGS_OPTS) "$$($1_$2_AR)" $$($1_$2_AR_OPTS) $$($1_$2_EXTRA_AR_ARGS) $$@ < $$@.contents
-endif
-	$$(call removeFiles,$$@.contents)
-
-endif # "$3" "dyn"
-
-$(call all-target,$1_$2,all_$1_$2_$3)
-$(call all-target,$1_$2_$3,$$($1_$2_$3_LIB))
-
-# Don't put bootstrapping packages in the bindist
-ifneq "$4" "0"
-BINDIST_HI += $$($1_$2_$3_HI)
-BINDIST_LIBS += $$($1_$2_$3_LIB)
-# Need to put the split libs and import libraries here
-endif
-
-ifeq "$$($1_$2_SplitSections)" "YES"
-ifeq "$(LdIsGNULd)" "YES"
-ifeq "$$(HostOS_CPP)" "mingw32"
-$1_$2_LD_SCRIPT_CMD =
-$1_$2_LD_SCRIPT = driver/utils/merge_sections_pe.ld
-else
-$1_$2_LD_SCRIPT_CMD = -T
-$1_$2_LD_SCRIPT = driver/utils/merge_sections.ld
-endif
-endif
-endif
-
-# Build the GHCi library
-# See Note [Merging object files for GHCi] in GHC.Driver.Pipeline.
-ifneq "$(filter $3, v p)" ""
-$1_$2_$3_GHCI_LIB = $1/$2/build/HS$$($1_$2_COMPONENT_ID).$$($3_osuf)
-ifeq "$$($1_$2_BUILD_GHCI_LIB)" "YES"
-# Don't put bootstrapping packages in the bindist
-ifneq "$4" "0"
-BINDIST_LIBS += $$($1_$2_$3_GHCI_LIB)
-endif
-endif
-$$($1_$2_$3_GHCI_LIB) : $$($1_$2_$3_HS_OBJS) $$($1_$2_$3_CMM_OBJS) $$($1_$2_$3_C_OBJS) $$($1_$2_$3_CXX_OBJS) $$($1_$2_$3_S_OBJS) $$($1_$2_EXTRA_OBJS) $$($1_$2_LD_SCRIPT)
-	$$(call cmd,MERGE_OBJS_STAGE$4) $(MERGE_OBJS_STAGE$4_FLAGS) $$(if $$($1_$2_LD_SCRIPT),$$($1_$2_LD_SCRIPT_CMD) $$($1_$2_LD_SCRIPT)) -o $$@ $$(EXTRA_LD_LINKER_OPTS) $$($1_$2_$3_HS_OBJS) $$($1_$2_$3_CMM_OBJS) $$($1_$2_$3_C_OBJS) $$($1_$2_$3_CXX_OBJS) $$($1_$2_$3_S_OBJS) $$($1_$2_EXTRA_OBJS)
-ifeq "$$($1_$2_BUILD_GHCI_LIB)" "YES"
-# Don't bother making ghci libs for bootstrapping packages
-ifneq "$4" "0"
-$(call all-target,$1_$2,$$($1_$2_$3_GHCI_LIB))
-endif
-endif # "$$($1_$2_BUILD_GHCI_LIB)" "YES"
-endif # "$(filter $3, v p)" ""
-
-$(call profEnd, build-package-way($1,$2,$3))
-endef # build-package-way
-
-define build-dll
-# Call out to the shell script to decide how to build the util dll.
-# 1  = dir
-# 2  = distdir
-# 3  = way
-# 4  = extra flags
-# 5  = extra libraries to link
-# 6  = object files to link
-# 7  = output filename
-# 8  = link command
-# 9  = create delay load import lib
-# 10 = SxS Name
-# 11 = SxS Version
-$(gen-dll_INPLACE) link "$1" "$2" "$3" "$4" "$5" "$6" "$7" "$(call cmd,$1_$2_HC) $(subst -no-hs-main,,$($1_$2_$3_ALL_HC_OPTS) $($1_$2_$3_GHC_LD_OPTS)) \
-           -shared -dynamic -dynload deploy \
-           $(addprefix -l,$($1_$2_EXTRA_LIBRARIES)) \
-           -no-auto-link-packages" "$8" \
-           "$9" "${10}"
-endef
-
diff --git a/rules/build-package.mk b/rules/build-package.mk
deleted file mode 100644
index 12381d88924f83d2418eb4fedbbb2addea110e19..0000000000000000000000000000000000000000
--- a/rules/build-package.mk
+++ /dev/null
@@ -1,171 +0,0 @@
-# -----------------------------------------------------------------------------
-#
-# (c) 2009 The University of Glasgow
-#
-# This file is part of the GHC build system.
-#
-# To understand how the build system works and how to modify it, see
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/architecture
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/modifying
-#
-# -----------------------------------------------------------------------------
-
-
-# Build a package with the stage-1 compiler, multiple ways.  A typical
-# libraries/foo/ghc.mk will look like this:
-#
-# $(eval $(call build-package,libraries/base,dist-install))
-#
-# The package metadata is generated from the .cabal file and placed in
-# package-data.mk.  It will look something like this:
-#
-# libraries/base_dist_MODULES = GHC.Base Data.Tuple ...
-# libraries/base_dist_PACKAGE = base
-# libraries/base_dist_VERSION = 4.0.0.0
-# libraries/base_dist_HC_OPTS = -package ghc-prim-0.1.0.0 -XRank2Types ...
-# libraries/base_dist_C_SRCS  = cbits/PrelIOUtils.c ...
-# libraries/base_dist_S_SRCS  = cbits/foo.S ...
-# libraries/base_dist_CC_OPTS = -Iinclude ...
-# libraries/base_dist_LD_OPTS = -package ghc-prim-0.1.0.0
-
-define build-package
-$(call trace, build-package($1,$2,$3))
-$(call profStart, build-package($1,$2,$3))
-# $1 = dir
-# $2 = distdir
-# $3 = GHC stage to use (0 == bootstrapping compiler)
-
-ifeq "$$(findstring $3,0 1 2)" ""
-$$(error $1/$2: stage argument to build-package should be 0, 1, or 2)
-endif
-
-$(call clean-target,$1,$2,$1/$2)
-
-distclean : clean_$1_$2_config
-
-.PHONY: clean_$1_$2_config
-clean_$1_$2_config:
-	$$(call removeFiles,$1/config.log $1/config.status $(wildcard $1/include/Hs*Config.h))
-	$$(call removeTrees,$1/autom4te.cache)
-
-ifneq "$$($1_$2_NOT_NEEDED)" "YES"
-$$(eval $$(call build-package-helper,$1,$2,$3))
-endif
-$(call profEnd, build-package($1,$2,$3))
-endef
-
-
-define build-package-helper
-# $1 = dir
-# $2 = distdir
-# $3 = GHC stage to use (0 == bootstrapping compiler)
-
-# --- CONFIGURATION
-
-$(call package-config,$1,$2,$3)
-
-ifeq "$3" "1"
-$$($1_PACKAGE)_INSTALL_INFO = $1_$2
-endif
-
-# Bootstrapping libs are only built one way
-ifeq "$3" "0"
-$1_$2_WAYS = v
-else
-$1_$2_WAYS = $$(filter-out $$($1_$2_EXCLUDED_WAYS),$$(GhcLibWays))
-endif
-
-$1_$2_DYNAMIC_TOO = NO
-ifneq "$$(DYNAMIC_TOO)" "NO"
-ifneq "$$(filter v,$$($1_$2_WAYS))" ""
-ifneq "$$(filter dyn,$$($1_$2_WAYS))" ""
-$1_$2_DYNAMIC_TOO = YES
-endif
-endif
-endif
-
-# We must use a different dependency file if $(GhcLibWays) changes, so
-# encode the ways into the name of the file.
-$1_$2_WAYS_DASHED = $$(subst $$(space),,$$(patsubst %,-%,$$(strip $$($1_$2_WAYS))))
-$1_$2_depfile_base = $1/$2/build/.depend$$($1_$2_WAYS_DASHED)
-
-$(call build-package-data,$1,$2,$3)
-ifneq "$$(NO_INCLUDE_PKGDATA)" "YES"
-ifeq "$3" "0"
-include $1/$2/package-data.mk
-else ifeq "$(phase)" "final"
-include $1/$2/package-data.mk
-endif
-# Each Haskell compilation in this package will depend on the
-# package-data.mk file because e.g. if the version of the package
-# changes we need to recompile everything in it.
-$1_$2_PKGDATA_DEP = $$($1_$2_PKGDATA)
-endif
-
-$(call hs-sources,$1,$2)
-$(call c-sources,$1,$2)
-$(call includes-sources,$1,$2)
-$(call distdir-opts,$1,$2,$3)
-
-$(call dependencies,$1,$2,$3)
-
-# Now generate all the build rules for each way in this directory:
-$$(foreach way,$$($1_$2_WAYS),$$(eval \
-    $$(call c-objs,$1,$2,$$(way)) \
-		$$(call c-suffix-rules,$1,$2,$$(way),YES) \
-    $$(call cxx-suffix-rules,$1,$2,$$(way),YES) \
-    $$(call cmm-objs,$1,$2,$$(way)) \
-    $$(call cmm-suffix-rules,$1,$2,$$(way)) \
-    $$(call build-package-way,$1,$2,$$(way),$3) \
-  ))
-
-# Programs will need to depend on either the vanilla lib (if -static
-# is the default) or the dyn lib (if -dynamic is the default). We
-# conservatively make them depend on both, to keep things simple.
-# If dyn libs are not being built then $$($1_$2_dyn_LIB) will just
-# expand to the empty string, and be ignored.
-$1_$2_PROGRAM_DEP_LIB = $$($1_$2_v_LIB) $$($1_$2_dyn_LIB)
-$$($1_$2_COMPONENT_ID)_$2_PROGRAM_DEP_LIB = $$($1_$2_PROGRAM_DEP_LIB)
-
-# See Note [inconsistent distdirs] in rules/build-package-way.mk.
-ifeq "$$($1_PACKAGE) $2" "ghc stage1"
-$$($1_$2_COMPONENT_ID)_dist-boot_PROGRAM_DEP_LIB = $$($1_$2_PROGRAM_DEP_LIB)
-endif
-ifeq "$$($1_PACKAGE) $2" "ghc stage2"
-$$($1_$2_COMPONENT_ID)_dist-install_PROGRAM_DEP_LIB = $$($1_$2_PROGRAM_DEP_LIB)
-endif
-
-# C and S files are possibly built the "dyn" way.
-ifeq "$$(BuildSharedLibs)" "YES"
-$(call c-objs,$1,$2,dyn)
-$(call c-suffix-rules,$1,$2,dyn,YES)
-$(call cxx-suffix-rules,$1,$2,dyn,YES)
-$(call cmm-objs,$1,$2,dyn)
-$(call cmm-suffix-rules,$1,$2,dyn,YES)
-endif
-$$(foreach dir,$$($1_$2_HS_SRC_DIRS),\
-  $$(eval $$(call hs-suffix-rules-srcdir,$1,$2,$$(dir))))
-
-$(call all-target,$1,all_$1_$2)
-# This give us things like
-#     all_libraries: all_libraries/base_dist-install
-ifneq "$$($1_$2_GROUP)" ""
-all_$$($1_$2_GROUP): all_$1_$2
-endif
-
-ifneq "$3" "0"
-$(call haddock,$1,$2)
-endif
-
-# Don't put bootstrapping packages in the bindist
-#
-# See Note [inconsistent distdirs] in rules/build-package-way.mk for why
-# we hard-code dist-install; GHC will use stage2/stage3 here so we
-# cannot use the distdir parameter.
-ifneq "$3" "0"
-BINDIST_EXTRAS += $1/*.cabal $$(wildcard $1/*.buildinfo) $$(wildcard $1/dist-install/build/*.buildinfo) $1/$2/setup-config $1/LICENSE
-BINDIST_EXTRAS += $$($1_$2_INSTALL_INCLUDES_SRCS)
-endif
-
-endef
-
diff --git a/rules/build-prog.mk b/rules/build-prog.mk
deleted file mode 100644
index 8d2bcd25c50d4b5ba1fe03c25cc5560e1c01e74f..0000000000000000000000000000000000000000
--- a/rules/build-prog.mk
+++ /dev/null
@@ -1,336 +0,0 @@
-# -----------------------------------------------------------------------------
-#
-# (c) 2009 The University of Glasgow
-#
-# This file is part of the GHC build system.
-#
-# To understand how the build system works and how to modify it, see
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/architecture
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/modifying
-#
-# -----------------------------------------------------------------------------
-
-
-# Build a program.
-#
-# $(eval $(call build-prog,utils/genapply,dist-install,1))
-
-define build-prog
-$(call trace, build-prog($1,$2,$3))
-$(call profStart, build-prog($1,$2,$3))
-# $1 = dir
-# $2 = distdir
-# $3 = GHC stage to use (0 == bootstrapping compiler)
-
-ifeq "$$($1_$2_PROGNAME)" ""
-$$(error $1_$2_PROGNAME is not set)
-endif
-ifneq "$$($1_$2_PROG)" ""
-$$(error $1_$2_PROG is set)
-endif
-$1_$2_PROG = $$($1_$2_PROGNAME)$$(exeext$3)
-
-ifeq "$$(findstring $3,0 1 2)" ""
-$$(error $1/$2: stage argument to build-prog should be 0, 1, or 2)
-endif
-
-$(call clean-target,$1,$2,$1/$2)
-
-$$(eval $$(call build-prog-vars,$1,$2,$3))
-
-ifneq "$$($1_$2_NOT_NEEDED)" "YES"
-$$(eval $$(call build-prog-helper,$1,$2,$3))
-endif
-$(call profEnd, build-prog($1,$2,$3))
-endef
-
-
-
-
-
-define build-prog-vars
-# $1 = dir
-# $2 = distdir
-# $3 = GHC stage to use (0 == bootstrapping compiler)
-
-ifeq "$$($1_USES_CABAL)" "YES"
-$1_$2_USES_CABAL = YES
-endif
-
-ifeq "$$(Windows_Host)" "YES"
-$1_$2_WANT_INPLACE_WRAPPER = NO
-else ifneq "$$($1_$2_INSTALL_INPLACE)" "YES"
-$1_$2_WANT_INPLACE_WRAPPER = NO
-else ifeq "$$($1_$2_SHELL_WRAPPER)" "YES"
-$1_$2_WANT_INPLACE_WRAPPER = YES
-else ifeq "$$(DYNAMIC_GHC_PROGRAMS)" "YES"
-$1_$2_WANT_INPLACE_WRAPPER = YES
-else
-$1_$2_WANT_INPLACE_WRAPPER = NO
-endif
-
-ifeq "$$(Windows_Host)" "YES"
-$1_$2_WANT_INSTALLED_WRAPPER = NO
-else ifneq "$$($1_$2_INSTALL)" "YES"
-$1_$2_WANT_INSTALLED_WRAPPER = NO
-else ifeq "$$($1_$2_SHELL_WRAPPER)" "YES"
-$1_$2_WANT_INSTALLED_WRAPPER = YES
-else
-$1_$2_WANT_INSTALLED_WRAPPER = NO
-endif
-
-$1_$2_depfile_base = $1/$2/build/.depend
-
-ifeq "$$($1_$2_INSTALL_INPLACE)" "NO"
-ifneq "$$(CLEANING)" "YES"
-$1_$2_INPLACE = $$(error $1_$2 should not be installed inplace, but INPLACE var evaluated)
-else
-$1_$2_INPLACE =
-endif
-else
-ifneq "$$($$($1_$2_PROGNAME)_INPLACE)" ""
-$$(error $$($1_$2_PROGNAME)_INPLACE defined twice)
-endif
-#
-# Where do we install the wrapper and the binary?
-#   $$($1_$2_PROGNAME)_INPLACE  The thing we run (script or binary)
-#   $1_$2_INPLACE               The binary
-#
-ifeq "$$($1_$2_TOPDIR)" "YES"
-$$($1_$2_PROGNAME)_INPLACE = $$(INPLACE_LIB)/bin/$$($1_$2_PROG)
-ifeq "$$($1_$2_WANT_INPLACE_WRAPPER)" "YES"
-$1_$2_INPLACE = $$(INPLACE_LIB)/bin/$$($1_$2_PROG).bin
-else
-$1_$2_INPLACE = $$(INPLACE_LIB)/bin/$$($1_$2_PROG)
-endif
-else
-$$($1_$2_PROGNAME)_INPLACE = $$(INPLACE_BIN)/$$($1_$2_PROG)
-ifeq "$$($1_$2_WANT_INPLACE_WRAPPER)" "YES"
-$1_$2_INPLACE = $$(INPLACE_LIB)/bin/$$($1_$2_PROG)
-else
-$1_$2_INPLACE = $$($$($1_$2_PROGNAME)_INPLACE)
-endif
-endif
-endif
-
-endef
-
-
-
-
-
-define build-prog-helper
-# $1 = dir
-# $2 = distdir
-# $3 = GHC stage to use (0 == bootstrapping compiler)
-
-$(call package-config,$1,$2,$3)
-
-ifeq "$$($1_$2_USES_CABAL)" "YES"
-$(call build-package-data,$1,$2,$3)
-ifneq "$$(NO_INCLUDE_PKGDATA)" "YES"
-ifeq "$3" "0"
-include $1/$2/package-data.mk
-else ifeq "$(phase)" "final"
-include $1/$2/package-data.mk
-endif
-endif
-endif
-
-$(call all-target,$1,all_$1_$2)
-$(call all-target,$1_$2,$1/$2/build/tmp/$$($1_$2_PROG))
-
-$(call shell-wrapper,$1,$2)
-
-ifeq "$$($1_$2_PROGRAM_WAY)" ""
-ifeq "$3" "0"
-$1_$2_PROGRAM_WAY = v
-else ifeq "$$(DYNAMIC_GHC_PROGRAMS)" "YES"
-$1_$2_PROGRAM_WAY = dyn
-else
-$1_$2_PROGRAM_WAY = v
-endif
-endif
-
-$1_$2_WAYS = $$($1_$2_PROGRAM_WAY)
-
-$1_$2_DYNAMIC_TOO = NO
-
-$(call hs-sources,$1,$2)
-$(call c-sources,$1,$2)
-
-# --- IMPLICIT RULES
-
-$(call distdir-opts,$1,$2,$3)
-$(call distdir-way-opts,$1,$2,$$($1_$2_PROGRAM_WAY),$3)
-
-ifeq "$3" "0"
-# For stage 0, we use GHC to compile C sources so that we don't have to
-# worry about where the RTS header files are
-$(call c-suffix-rules,$1,$2,$$($1_$2_PROGRAM_WAY),YES)
-else
-ifeq "$$($1_$2_UseGhcForCC)" "YES"
-$(call c-suffix-rules,$1,$2,$$($1_$2_PROGRAM_WAY),YES)
-else
-$(call c-suffix-rules,$1,$2,$$($1_$2_PROGRAM_WAY),NO)
-endif
-endif
-
-$$(foreach dir,$$($1_$2_HS_SRC_DIRS),\
-  $$(eval $$(call hs-suffix-rules-srcdir,$1,$2,$$(dir))))
-$(call hs-suffix-way-rules,$1,$2,$$($1_$2_PROGRAM_WAY))
-
-$(call c-objs,$1,$2,$$($1_$2_PROGRAM_WAY))
-$(call hs-objs,$1,$2,$$($1_$2_PROGRAM_WAY))
-
-$1_$2_LINK_WITH_GCC = NO
-
-ifeq "$$($1_$2_$$($1_$2_PROGRAM_WAY)_HS_OBJS)" ""
-# We don't want to link the GHC RTS into C-only programs. There's no
-# point, and it confuses the test that all GHC-compiled programs
-# were compiled with the right GHC.
-$1_$2_$$($1_$2_PROGRAM_WAY)_GHC_LD_OPTS += -no-auto-link-packages -no-hs-main
-endif
-
-ifneq "$$(BINDIST)" "YES"
-
-# The quadrupled $'s here are because the _<way>_LIB variables aren't
-# necessarily set when this part of the makefile is read
-#
-# See Note [inconsistent distdirs] in rules/build-package-way.mk for why
-# we are computing the dist-dir from the GHC stage and not just using
-# the distdir parameter.
-$1/$2/build/tmp/$$($1_$2_PROG) $1/$2/build/tmp/$$($1_$2_PROG).dll : \
-    $$(foreach dep,$$($1_$2_TRANSITIVE_DEP_COMPONENT_IDS),\
-        $$$$($$(dep)_dist-$(if $(filter 0,$3),boot,install)_PROGRAM_DEP_LIB))
-# Workaround: We use TRANSITIVE_DEP_COMPONENT_IDS here as a workaround for
-# #12078.
-
-$1_$2_PROG_NEEDS_C_WRAPPER = NO
-$1_$2_PROG_INPLACE = $$($1_$2_PROG)
-ifeq "$$(Windows_Host) $$($1_$2_PROGRAM_WAY)" "YES dyn"
-ifneq "$$($1_$2_HS_SRCS)" ""
-$1_$2_PROG_NEEDS_C_WRAPPER = YES
-$1_$2_PROG_INPLACE = inplace-$$($1_$2_PROG)
-endif
-endif
-
-ifeq "$$($1_$2_PROG_NEEDS_C_WRAPPER)" "YES"
-
-$1_$2_RTS_OPTS_FLAG = $$(lastword $$(filter -rtsopts -rtsopts=all -rtsopts=some -rtsopts=none -no-rtsopts,$$($1_$2_$$($1_$2_PROGRAM_WAY)_ALL_HC_OPTS)))
-ifeq "$$($1_$2_RTS_OPTS_FLAG)" "-rtsopts"
-$1_$2_RTS_OPTS = RtsOptsAll
-else ifeq "$$($1_$2_RTS_OPTS_FLAG)" "-rtsopts=all"
-$1_$2_RTS_OPTS = RtsOptsAll
-else ifeq "$$($1_$2_RTS_OPTS_FLAG)" "-rtsopts=some"
-$1_$2_RTS_OPTS = RtsOptsSafeOnly
-else ifeq "$$($1_$2_RTS_OPTS_FLAG)" "-rtsopts=none"
-$1_$2_RTS_OPTS = RtsOptsNone
-else ifeq "$$($1_$2_RTS_OPTS_FLAG)" "-no-rtsopts"
-$1_$2_RTS_OPTS = RtsOptsNone
-else
-$1_$2_RTS_OPTS = RtsOptsSafeOnly
-endif
-
-$1/$2/build/tmp/$$($1_$2_PROG)-inplace-wrapper.c: driver/utils/dynwrapper.c | $$$$(dir $$$$@)/.
-	$$(call removeFiles,$$@)
-	echo '#include <windows.h>' >> $$@
-	echo '#include "Rts.h"' >> $$@
-	echo 'LPTSTR path_dirs[] = {' >> $$@
-	$$(foreach d,$$($1_$2_DEP_LIB_REL_DIRS),$$(call make-command,echo '    TEXT("/../../$$d")$$(comma)' >> $$@))
-	echo '    TEXT("/../../$1/$2/build/tmp/"),' >> $$@
-	echo '    NULL};' >> $$@
-	echo 'LPTSTR progDll = TEXT("../../$1/$2/build/tmp/$$($1_$2_PROG).dll");' >> $$@
-	echo 'LPTSTR rtsDll = TEXT("$$($$(WINDOWS_DYN_PROG_RTS))");' >> $$@
-	echo 'int rtsOpts = $$($1_$2_RTS_OPTS);' >> $$@
-	cat driver/utils/dynwrapper.c >> $$@
-
-$1/$2/build/tmp/$$($1_$2_PROG)-wrapper.c: driver/utils/dynwrapper.c | $$$$(dir $$$$@)/.
-	$$(call removeFiles,$$@)
-	echo '#include <windows.h>' >> $$@
-	echo '#include "Rts.h"' >> $$@
-	echo 'LPTSTR path_dirs[] = {' >> $$@
-	$$(foreach p,$$($1_$2_TRANSITIVE_DEP_COMPONENT_IDS),$$(call make-command,echo '    TEXT("/../lib/$$p")$$(comma)' >> $$@))
-	echo '    TEXT("/../lib/"),' >> $$@
-	echo '    NULL};' >> $$@
-	echo 'LPTSTR progDll = TEXT("../lib/$$($1_$2_PROG).dll");' >> $$@
-	echo 'LPTSTR rtsDll = TEXT("$$($$(WINDOWS_DYN_PROG_RTS))");' >> $$@
-	echo 'int rtsOpts = $$($1_$2_RTS_OPTS);' >> $$@
-	cat driver/utils/dynwrapper.c >> $$@
-
-$1/$2/build/tmp/$$($1_$2_PROG_INPLACE) : $1/$2/build/tmp/$$($1_$2_PROG)-inplace-wrapper.c $1/$2/build/tmp/$$($1_$2_PROG).dll | $$$$(dir $$$$@)/.
-	$$(call cmd,$1_$2_HC) -no-hs-main -no-auto-link-packages -optc-g -optc-O0 $$< -o $$@
-
-$1/$2/build/tmp/$$($1_$2_PROG) : $1/$2/build/tmp/$$($1_$2_PROG)-wrapper.c $1/$2/build/tmp/$$($1_$2_PROG).dll | $$$$(dir $$$$@)/.
-	$$(call cmd,$1_$2_HC) -no-hs-main -no-auto-link-packages -optc-g -optc-O0 $$< -o $$@
-
-$1/$2/build/tmp/$$($1_$2_PROG).dll : $$($1_$2_$$($1_$2_PROGRAM_WAY)_HS_OBJS) $$($1_$2_$$($1_$2_PROGRAM_WAY)_C_OBJS) $$($1_$2_$$($1_$2_PROGRAM_WAY)_CXX_OBJS) $$($1_$2_$$($1_$2_PROGRAM_WAY)_S_OBJS) $$($1_$2_OTHER_OBJS) | $$$$(dir $$$$@)/.
-	$$(call build-dll,$1,$2,$$($1_$2_PROGRAM_WAY),,$$($1_$2_$$($1_$2_PROGRAM_WAY)_HS_OBJS) $$($1_$2_$$($1_$2_PROGRAM_WAY)_C_OBJS) $$($1_$2_$$($1_$2_PROGRAM_WAY)_CXX_OBJS) $$($1_$2_$$($1_$2_PROGRAM_WAY)_S_OBJS) $$($1_$2_OTHER_OBJS),$$@)
-else # $1_$2_PROG_NEEDS_C_WRAPPER=NO
-ifeq "$$($1_$2_LINK_WITH_GCC)" "NO"
-$1/$2/build/tmp/$$($1_$2_PROG) : $$($1_$2_$$($1_$2_PROGRAM_WAY)_HS_OBJS) $$($1_$2_$$($1_$2_PROGRAM_WAY)_C_OBJS) $$($1_$2_$$($1_$2_PROGRAM_WAY)_CXX_OBJS) $$($1_$2_$$($1_$2_PROGRAM_WAY)_S_OBJS) $$($1_$2_OTHER_OBJS) | $$$$(dir $$$$@)/.
-	$$(call cmd,$1_$2_HC) -o $$@ $$($1_$2_$$($1_$2_PROGRAM_WAY)_ALL_HC_OPTS) $$($1_$2_$$($1_$2_PROGRAM_WAY)_GHC_LD_OPTS) $$($1_$2_$$($1_$2_PROGRAM_WAY)_HS_OBJS) $$($1_$2_$$($1_$2_PROGRAM_WAY)_C_OBJS) $$($1_$2_$$($1_$2_PROGRAM_WAY)_CXX_OBJS) $$($1_$2_$$($1_$2_PROGRAM_WAY)_S_OBJS) $$($1_$2_OTHER_OBJS) $$(addprefix -l,$$($1_$2_EXTRA_LIBRARIES))
-
-else
-$1/$2/build/tmp/$$($1_$2_PROG) : $$($1_$2_$$($1_$2_PROGRAM_WAY)_HS_OBJS) $$($1_$2_$$($1_$2_PROGRAM_WAY)_C_OBJS) $$($1_$2_$$($1_$2_PROGRAM_WAY)_CXX_OBJS) $$($1_$2_$$($1_$2_PROGRAM_WAY)_S_OBJS) $$($1_$2_OTHER_OBJS) | $$$$(dir $$$$@)/.
-	$$(call cmd,$1_$2_CC) -o $$@ $$($1_$2_$$($1_$2_PROGRAM_WAY)_ALL_CC_OPTS) $$($1_$2_$$($1_$2_PROGRAM_WAY)_ALL_LD_OPTS) $$($1_$2_$$($1_$2_PROGRAM_WAY)_HS_OBJS) $$($1_$2_$$($1_$2_PROGRAM_WAY)_C_OBJS) $$($1_$2_$$($1_$2_PROGRAM_WAY)_CXX_OBJS) $$($1_$2_$$($1_$2_PROGRAM_WAY)_S_OBJS) $$($1_$2_OTHER_OBJS) $$($1_$2_$$($1_$2_PROGRAM_WAY)_EXTRA_CC_OPTS) $$(addprefix -l,$$($1_$2_EXTRA_LIBRARIES))
-endif
-endif # $1_$2_PROG_NEEDS_C_WRAPPER
-
-# Note [lib-depends]
-# ~~~~~~~~~~~~~~~~~~
-# If this program is built with stage1 or greater, we
-# need to depend on the libraries too.  NB. since $(ALL_STAGE1_LIBS) and
-# $(ALL_RTS_LIBS) are not defined until after libraries/*/ghc.mk have
-# been included, this introduces an ordering dependency.
-ifneq "$$(CLEANING)" "YES"
-ifneq "$3" "0"
-ifneq "$$($1_$2_HS_SRCS)" ""
-ifeq "$$(strip $$(ALL_STAGE1_$$($1_$2_PROGRAM_WAY)_LIBS))" ""
-$$(error ordering failure in $1 ($2): ALL_STAGE1_$$($1_$2_PROGRAM_WAY)_LIBS is empty)
-endif
-$1/$2/build/tmp/$$($1_$2_PROG) : $$(ALL_STAGE1_$$($1_$2_PROGRAM_WAY)_LIBS) $$(ALL_RTS_LIBS)
-endif
-endif
-endif
-
-ifeq "$$($1_$2_INSTALL_INPLACE)" "YES"
-$$($1_$2_INPLACE) : $1/$2/build/tmp/$$($1_$2_PROG_INPLACE) | $$$$(dir $$$$@)/.
-	$$(INSTALL) -m 755 $$< $$@
-endif
-
-endif # BINDIST
-
-ifneq "$$($1_$2_INSTALL_INPLACE)" "NO"
-$(call all-target,$1_$2,$$($1_$2_INPLACE))
-endif
-$(call clean-target,$1,$2_inplace,$$($1_$2_INPLACE))
-
-ifeq "$$($1_$2_INSTALL)" "YES"
-ifeq "$$($1_$2_PROG_NEEDS_C_WRAPPER)" "YES"
-INSTALL_LIBS     += $1/$2/build/tmp/$$($1_$2_PROG).dll
-endif
-ifeq "$$($1_$2_WANT_INSTALLED_WRAPPER)" "YES"
-INSTALL_LIBEXECS += $1/$2/build/tmp/$$($1_$2_PROG)
-else ifeq "$$($1_$2_TOPDIR)" "YES"
-INSTALL_LIBEXECS += $1/$2/build/tmp/$$($1_$2_PROG)
-else
-INSTALL_BINS     += $1/$2/build/tmp/$$($1_$2_PROG)
-endif
-endif
-
-$(call dependencies,$1,$2,$3)
-
-# The Main module of a program implicitly depends on GHC.TopHandler
-# so we need to add a dependency for that. As we don't know which
-# module contains Main, we just make all modules in the program
-# depend on it.
-#
-# See Note [inconsistent distdirs] in rules/build-package-way.mk for why
-# we hard-code dist-install; GHC will use stage2/stage3 here so we
-# cannot use the distdir parameter.
-ifneq "$3" "0"
-$$(foreach o,$$($1_$2_$$($1_$2_PROGRAM_WAY)_HS_OBJS),$$(eval $$(call add-dependency,$$o,libraries/base/dist-install/build/GHC/TopHandler.$$($$($1_$2_PROGRAM_WAY)_osuf))))
-endif
-
-endef
diff --git a/rules/c-objs.mk b/rules/c-objs.mk
deleted file mode 100644
index 6b43fb54cdd2cba43a0cbe4dce51b52d29b23f45..0000000000000000000000000000000000000000
--- a/rules/c-objs.mk
+++ /dev/null
@@ -1,18 +0,0 @@
-# -----------------------------------------------------------------------------
-#
-# (c) 2009 The University of Glasgow
-#
-# This file is part of the GHC build system.
-#
-# To understand how the build system works and how to modify it, see
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/architecture
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/modifying
-#
-# -----------------------------------------------------------------------------
-
-define c-objs  # args: $1 = dir, $2 = distdir, $3 = way
-# C, C++, and S files are usually only built for way "v", but sometimes "dyn" too
-$1_$2_$3_C_OBJS   = $$(patsubst %.c,$1/$2/build/%.$$($3_osuf),$$($1_$2_C_SRCS))
-$1_$2_$3_CXX_OBJS = $$(patsubst %.cpp,$1/$2/build/%.$$($3_osuf),$$($1_$2_CXX_SRCS))
-$1_$2_$3_S_OBJS   = $$(patsubst %.S,$1/$2/build/%.$$($3_osuf),$$($1_$2_S_SRCS))
-endef
diff --git a/rules/c-sources.mk b/rules/c-sources.mk
deleted file mode 100644
index edc0cdbf046ea473b1eef36cb202a9f32584403c..0000000000000000000000000000000000000000
--- a/rules/c-sources.mk
+++ /dev/null
@@ -1,18 +0,0 @@
-# -----------------------------------------------------------------------------
-#
-# (c) 2009 The University of Glasgow
-#
-# This file is part of the GHC build system.
-#
-# To understand how the build system works and how to modify it, see
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/architecture
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/modifying
-#
-# -----------------------------------------------------------------------------
-
-define c-sources  # args: $1 = dir, $2 = distdir
-$1_$2_C_FILES   = $$(patsubst %,$1/%,$$($1_$2_C_SRCS))
-$1_$2_CXX_FILES = $$(patsubst %,$1/%,$$($1_$2_CXX_SRCS))
-$1_$2_S_FILES   = $$(patsubst %,$1/%,$$($1_$2_S_SRCS))
-$1_$2_CMM_FILES = $$(patsubst %,$1/%,$$($1_$2_CMM_SRCS))
-endef
diff --git a/rules/c-suffix-rules.mk b/rules/c-suffix-rules.mk
deleted file mode 100644
index d405d155c03085b1a84a95e164619c09cfbf0656..0000000000000000000000000000000000000000
--- a/rules/c-suffix-rules.mk
+++ /dev/null
@@ -1,64 +0,0 @@
-# -----------------------------------------------------------------------------
-#
-# (c) 2009 The University of Glasgow
-#
-# This file is part of the GHC build system.
-#
-# To understand how the build system works and how to modify it, see
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/architecture
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/modifying
-#
-# -----------------------------------------------------------------------------
-
-
-define c-suffix-rules 
-# $1 = dir
-# $2 = distdir
-# $3 = way
-# $4 = use GHC (YES/NO)
-
-ifneq "$$(BINDIST)" "YES"
-
-ifeq "$4" "YES"
-
-$1/$2/build/%.$$($3_osuf) : $1/%.c $$(LAX_DEPS_FOLLOW) $$$$($1_$2_HC_DEP) | $$$$(dir $$$$@)/.
-	$$(call cmd,$1_$2_HC) $$($1_$2_$3_GHC_CC_OPTS) -c $$< -o $$@
-
-$1/$2/build/%.$$($3_osuf) : $1/$2/build/%.c $$(LAX_DEPS_FOLLOW) $$$$($1_$2_HC_DEP)
-	$$(call cmd,$1_$2_HC) $$($1_$2_$3_GHC_CC_OPTS) -c $$< -o $$@
-
-$1/$2/build/%.$$($3_osuf) : $1/$2/build/%.$$($3_ssuf) $$(LAX_DEPS_FOLLOW) $$$$($1_$2_HC_DEP)
-	$$(call cmd,$1_$2_HC) $$($1_$2_$3_GHC_CC_OPTS) -c $$< -o $$@
-
-$1/$2/build/%.$$($3_osuf) : $1/%.S $$(LAX_DEPS_FOLLOW) $$$$($1_$2_HC_DEP) | $$$$(dir $$$$@)/.
-	$$(call cmd,$1_$2_HC) $$($1_$2_$3_GHC_CC_OPTS) -c $$< -o $$@
-
-$1/$2/build/%.$$($3_ssuf) : $1/$2/build/%.c $$(LAX_DEPS_FOLLOW) $$$$($1_$2_HC_DEP)
-	$$(call cmd,$1_$2_HC) $$($1_$2_$3_GHC_CC_OPTS) -S $$< -o $$@
-
-$1/$2/build/%.$$($3_ssuf) : $1/%.c $$(LAX_DEPS_FOLLOW) $$$$($1_$2_HC_DEP)
-	$$(call cmd,$1_$2_HC) $$($1_$2_$3_GHC_CC_OPTS) -S $$< -o $$@
-
-else
-
-$1/$2/build/%.$$($3_osuf) : $1/%.c | $$$$(dir $$$$@)/.
-	$$(call cmd,$1_$2_CC) $$($1_$2_$3_ALL_CC_OPTS) -c $$< -o $$@
-
-$1/$2/build/%.$$($3_osuf) : $1/$2/build/%.c
-	$$(call cmd,$1_$2_CC) $$($1_$2_$3_ALL_CC_OPTS) -c $$< -o $$@
-
-$1/$2/build/%.$$($3_osuf) : $1/$2/build/%.$$($3_ssuf)
-	$$(call cmd,$1_$2_AS) $$($1_$2_$3_ALL_AS_OPTS) -o $$@ $$<
-
-$1/$2/build/%.$$($3_osuf) : $1/%.S | $$$$(dir $$$$@)/.
-	$$(call cmd,$1_$2_CC) $$($1_$2_$3_ALL_CC_OPTS) -c $$< -o $$@
-
-$1/$2/build/%.$$($3_ssuf) : $1/$2/build/%.c
-	$$(call cmd,$1_$2_CC) $$($1_$2_$3_ALL_CC_OPTS) -S $$< -o $$@
-
-endif
-
-endif
-
-endef
-
diff --git a/rules/clean-target.mk b/rules/clean-target.mk
deleted file mode 100644
index 8b37624af7ff72d44a2fea797d2a2f99395ade0e..0000000000000000000000000000000000000000
--- a/rules/clean-target.mk
+++ /dev/null
@@ -1,21 +0,0 @@
-# -----------------------------------------------------------------------------
-#
-# (c) 2009 The University of Glasgow
-#
-# This file is part of the GHC build system.
-#
-# To understand how the build system works and how to modify it, see
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/architecture
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/modifying
-#
-# -----------------------------------------------------------------------------
-
-
-define clean-target # args: $1 = dir, $2 = key, $3 = files/dirs to clean
-clean : clean_$1
-.PHONY: clean_$1
-clean_$1 : clean_$1_$2
-.PHONY: clean_$1_$2
-clean_$1_$2:
-	$$(call removeTrees,$3)
-endef
diff --git a/rules/cmm-objs.mk b/rules/cmm-objs.mk
deleted file mode 100644
index dc517cbf34db5d68153195d9c96beeb9c07d020b..0000000000000000000000000000000000000000
--- a/rules/cmm-objs.mk
+++ /dev/null
@@ -1,16 +0,0 @@
-# -----------------------------------------------------------------------------
-#
-# (c) 2009 The University of Glasgow
-#
-# This file is part of the GHC build system.
-#
-# To understand how the build system works and how to modify it, see
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/architecture
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/modifying
-#
-# -----------------------------------------------------------------------------
-
-define cmm-objs  # args: $1 = dir, $2 = distdir, $3 = way
-
-$1_$2_$3_CMM_OBJS = $$(patsubst %.cmm,$1/$2/build/%.$$($3_osuf),$$($1_$2_CMM_SRCS))
-endef
diff --git a/rules/cmm-suffix-rules.mk b/rules/cmm-suffix-rules.mk
deleted file mode 100644
index bb7acce06f7fc7143da995edfc0fc613a6eef854..0000000000000000000000000000000000000000
--- a/rules/cmm-suffix-rules.mk
+++ /dev/null
@@ -1,52 +0,0 @@
-# -----------------------------------------------------------------------------
-#
-# (c) 2009 The University of Glasgow
-#
-# This file is part of the GHC build system.
-#
-# To understand how the build system works and how to modify it, see
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/architecture
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/modifying
-#
-# -----------------------------------------------------------------------------
-
-
-define cmm-suffix-rules
-# $1 = dir
-# $2 = distdir
-# $3 = way
-
-# .cmm files depend on all the .h files, to a first approximation.
-
-ifneq "$$(CLEANING)" "YES"
-
-$1/$2/build/%.$$($3_osuf) : $1/%.cmm $$(rts_H_FILES) $$(includes_$2_H_FILES) $$(LAX_DEPS_FOLLOW) $$$$($1_$2_HC_DEP) | $$$$(dir $$$$@)/.
-	$$(call cmd,$1_$2_HC) $$($1_$2_$3_MOST_HC_OPTS) -c $$< -o $$@
-
-$1/$2/build/%.$$($3_osuf) : $1/$2/build/%.cmm $$(rts_H_FILES) $$(includes_$2_H_FILES) $$(LAX_DEPS_FOLLOW) $$$$($1_$2_HC_DEP) | $$$$(dir $$$$@)/.
-	$$(call cmd,$1_$2_HC) $$($1_$2_$3_MOST_HC_OPTS) -c $$< -o $$@
-
-$1/$2/build/%.$$($3_hcsuf) : $1/%.cmm $$(rts_H_FILES) $$(includes_$2_H_FILES) $$(LAX_DEPS_FOLLOW) $$$$($1_$2_HC_DEP) | $$$$(dir $$$$@)/.
-	$$(call cmd,$1_$2_HC) $$($1_$2_$3_MOST_HC_OPTS) -C $$< -o $$@
-
-$1/$2/build/%.$$($3_hcsuf) : $1/$2/build/%.cmm $$(rts_H_FILES) $$(includes_$2_H_FILES) $$(LAX_DEPS_FOLLOW) $$$$($1_$2_HC_DEP) | $$$$(dir $$$$@)/.
-	$$(call cmd,$1_$2_HC) $$($1_$2_$3_MOST_HC_OPTS) -C $$< -o $$@
-
-# XXX
-# When we started using "| $$$$(dir $$$$@)/." for directory deps, these
-# rules started getting used when object splitting is enabled for some
-# reason. But they fail with
-#   **splitmangle**: openBinaryFile: does not exist (No such file or directory)
-# so for now they're commented out. They aren't needed, as we can always
-# go directly to .o files.
-#
-# $1/$2/build/%.$$($3_ssuf) : $1/%.cmm $$(rts_H_FILES) $$(includes_$2_H_FILES) $$(LAX_DEPS_FOLLOW) $$$$($1_$2_HC_DEP) | $$$$(dir $$$$@)/.
-# 	$$(call cmd,$1_$2_HC) $$($1_$2_$3_MOST_HC_OPTS) -S $$< -o $$@
-#
-# $1/$2/build/%.$$($3_ssuf) : $1/$2/build/%.cmm $$(rts_H_FILES) $$(includes_$2_H_FILES) $$(LAX_DEPS_FOLLOW) $$$$($1_$2_HC_DEP) | $$$$(dir $$$$@)/.
-# 	$$(call cmd,$1_$2_HC) $$($1_$2_$3_MOST_HC_OPTS) -S $$< -o $$@
-
-endif
-
-endef
-
diff --git a/rules/cxx-suffix-rules.mk b/rules/cxx-suffix-rules.mk
deleted file mode 100644
index 25b3d5212c9930bd714e6b1b7d43fe8669fd199c..0000000000000000000000000000000000000000
--- a/rules/cxx-suffix-rules.mk
+++ /dev/null
@@ -1,44 +0,0 @@
-# -----------------------------------------------------------------------------
-#
-# (c) 2009 The University of Glasgow
-#
-# This file is part of the GHC build system.
-#
-# To understand how the build system works and how to modify it, see
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/architecture
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/modifying
-#
-# -----------------------------------------------------------------------------
-
-
-define cxx-suffix-rules
-# $1 = dir
-# $2 = distdir
-# $3 = way
-# $4 = use GHC (YES/NO)
-
-ifneq "$$(BINDIST)" "YES"
-
-ifeq "$4" "YES"
-
-$1/$2/build/%.$$($3_osuf) : $1/%.cpp $$(LAX_DEPS_FOLLOW) $$$$($1_$2_HC_DEP) | $$$$(dir $$$$@)/.
-	$$(call cmd,$1_$2_HC) $$($1_$2_$3_GHC_CC_OPTS) -c $$< -o $$@
-
-$1/$2/build/%.$$($3_osuf) : $1/$2/build/%.cpp $$(LAX_DEPS_FOLLOW) $$$$($1_$2_HC_DEP)
-	$$(call cmd,$1_$2_HC) $$($1_$2_$3_GHC_CC_OPTS) -c $$< -o $$@
-
-
-else
-
-$1/$2/build/%.$$($3_osuf) : $1/%.cpp | $$$$(dir $$$$@)/.
-	$$(call cmd,$1_$2_CC) $$($1_$2_$3_ALL_CC_OPTS) -c $$< -o $$@
-
-$1/$2/build/%.$$($3_osuf) : $1/$2/build/%.cpp
-	$$(call cmd,$1_$2_CC) $$($1_$2_$3_ALL_CC_OPTS) -c $$< -o $$@
-
-endif
-
-endif
-
-endef
-
diff --git a/rules/dependencies.mk b/rules/dependencies.mk
deleted file mode 100644
index 4aae78e4e360bb908eee61bcb80fb316a9955109..0000000000000000000000000000000000000000
--- a/rules/dependencies.mk
+++ /dev/null
@@ -1,38 +0,0 @@
-# -----------------------------------------------------------------------------
-#
-# (c) 2009 The University of Glasgow
-#
-# This file is part of the GHC build system.
-#
-# To understand how the build system works and how to modify it, see
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/architecture
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/modifying
-#
-# -----------------------------------------------------------------------------
-
-define dependencies
-$(call trace, dependencies($1,$2,$3))
-$(call profStart, dependencies($1,$2,$3))
-# $1 = dir
-# $2 = distdir
-# $3 = GHC stage to use (0 == bootstrapping compiler)
-
-# We always have the dependency rules available, as we need to know
-# how to build hsc2hs's dependency file in phase 0
-$(call build-dependencies,$1,$2,$3)
-
-ifneq "$(phase)" "0"
-# From phase 1 we actually include the dependency files for the
-# bootstrapping stuff
-ifeq "$3" "0"
-$(call include-dependencies,$1,$2,$3)
-else ifeq "$(phase)" "final"
-# In the final phase, we also include the dependency files for
-# everything else
-$(call include-dependencies,$1,$2,$3)
-endif
-endif
-
-$(call profEnd, dependencies($1,$2,$3))
-endef
-
diff --git a/rules/distdir-opts.mk b/rules/distdir-opts.mk
deleted file mode 100644
index ebe56c1fd54ee3524c6869ff83f0bd24a93fa069..0000000000000000000000000000000000000000
--- a/rules/distdir-opts.mk
+++ /dev/null
@@ -1,111 +0,0 @@
-# -----------------------------------------------------------------------------
-#
-# (c) 2009 The University of Glasgow
-#
-# This file is part of the GHC build system.
-#
-# To understand how the build system works and how to modify it, see
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/architecture
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/modifying
-#
-# -----------------------------------------------------------------------------
-
-
-# Set compilation flags that do not depend on a particular way
-
-define distdir-opts # args: $1 = dir, $2 = distdir, $3 = stage
-
-ifeq "$3" ""
-$$(error Stage not given for distdir-opts $1 $2)
-endif
-
-ifneq ($$(strip $$($1_$2_DEP_INCLUDE_DIRS_SINGLE_QUOTED)),)
-$1_$2_CC_INC_FLAGS := $$(subst $$(space)',$$(space)-I',$$(space)$$($1_$2_DEP_INCLUDE_DIRS_SINGLE_QUOTED))
-endif
-
-# The CONF_CC_OPTS_STAGE$3 options are what we use to get gcc to
-# behave correctly, but they are specific to the gcc that we are using.
-# If GHC is compiling C code then it will take care of that for us,
-# and in the case of the stage 0 compiler it may be using a different
-# gcc, so we don't want to use our gcc-specific options.
-$1_$2_DIST_GCC_CC_OPTS = \
- $$(CONF_CC_OPTS_STAGE$3) \
- $$($1_$2_DIST_CC_OPTS)
-
-$1_$2_DIST_INCLUDE_DIRS = \
- $$($1_$2_INCLUDE_DIRS) \
- $$($1_INCLUDE_DIRS)
-
-$1_$2_DIST_CPP_OPTS = \
- $$(foreach dir,$$(filter-out /%,$$($1_$2_DIST_INCLUDE_DIRS)),-I$1/$$(dir)) \
- $$(foreach dir,$$(filter /%,$$($1_$2_DIST_INCLUDE_DIRS)),-I$$(dir)) \
- $$($1_$2_CPP_OPTS) \
- $$($1_CPP_OPTS)
-
-$1_$2_DIST_CC_OPTS = \
- $$(SRC_CC_OPTS) \
- $$($1_CC_OPTS) \
- -I$1/$2/build/$$(or $$($1_EXECUTABLE),$$($1_$2_PROGNAME),.)/autogen \
- $$($1_$2_DIST_CPP_OPTS) \
- $$($1_$2_CC_OPTS) \
- $$($1_$2_CC_INC_FLAGS) \
- $$($1_$2_DEP_CC_OPTS) \
- $$(SRC_CC_WARNING_OPTS)
-
-$1_$2_DIST_LD_OPTS = \
- $$(SRC_LD_OPTS) \
- $$($1_LD_OPTS) \
- $$($1_$2_LD_OPTS) \
- $$($1_$2_DIST_LD_LIB_DIRS) \
- $$($1_$2_DEP_LD_OPTS)
-
-# c.f. Cabal's Distribution.Simple.PreProcess.ppHsc2hs
-# We use '' around cflags and lflags to handle paths with backslashes in
-# on Windows
-ifneq ($$(strip $$($1_$2_DIST_GCC_CC_OPTS)),)
-$1_$2_HSC2HS_CC_OPTS:=$$(shell for i in $$($1_$2_DIST_GCC_CC_OPTS); do echo \'--cflag=$$$$i\'; done)
-endif
-ifneq ($$(strip $$($1_$2_DIST_LD_OPTS)),)
-$1_$2_HSC2HS_LD_OPTS:=$$(shell for i in $$($1_$2_DIST_LD_OPTS); do echo \'--lflag=$$$$i\'; done)
-endif
-
-$1_$2_ALL_HSC2HS_OPTS = \
- '--cc=$$(CC_STAGE$3)' \
- '--ld=$$(CC_STAGE$3)' \
- $$(CONF_HSC2HS_OPTS) \
- $$(SRC_HSC2HS_OPTS) \
- $$(SRC_HSC2HS_OPTS_STAGE$3) \
- --cflag=-D__GLASGOW_HASKELL__=$$(if $$(filter 0,$3),$$(GhcCanonVersion),$$(ProjectVersionInt)) \
- $$($1_$2_HSC2HS_CC_OPTS) \
- $$($1_$2_HSC2HS_LD_OPTS) \
- --cflag=-I$1/$2/build/$$(or $$($1_EXECUTABLE),$$($1_$2_PROGNAME),.)/autogen \
- $$(if $$($1_PACKAGE),--cflag=-include --cflag=$1/$2/build/$$(or $$($1_EXECUTABLE),$$($1_$2_PROGNAME),.)/autogen/cabal_macros.h) \
- $$($$(basename $$<)_HSC2HS_OPTS) \
- $$(EXTRA_HSC2HS_OPTS)
-
-$1_$2_ALL_ALEX_OPTS = \
- $$(CONF_ALEX_OPTS) \
- $$(SRC_ALEX_OPTS) \
- $$($1_ALEX_OPTS) \
- $$($1_$2_ALEX_OPTS) \
- $$(EXTRA_ALEX_OPTS)
-
-$1_$2_ALL_HAPPY_OPTS = \
- $$(CONF_HAPPY_OPTS) \
- $$(SRC_HAPPY_OPTS) \
- $$($1_HAPPY_OPTS) \
- $$($1_$2_HAPPY_OPTS) \
- $$(EXTRA_HAPPY_OPTS)
-
-# Disable split sections when building with stage0, it won't be supported yet
-# and it's probably not very relevant anyway (smaller stage1 ghc?).
-ifeq "$$($1_$2_SplitSections)" ""
-ifeq "$3" "1"
-$1_$2_SplitSections = $(SplitSections)
-else
-$1_$2_SplitSections = NO
-endif
-endif
-
-endef
-
diff --git a/rules/distdir-way-opts.mk b/rules/distdir-way-opts.mk
deleted file mode 100644
index 098af4f8da2c0e6855e6ddf5d1c714c171251ca4..0000000000000000000000000000000000000000
--- a/rules/distdir-way-opts.mk
+++ /dev/null
@@ -1,220 +0,0 @@
-# -----------------------------------------------------------------------------
-#
-# (c) 2009 The University of Glasgow
-#
-# This file is part of the GHC build system.
-#
-# To understand how the build system works and how to modify it, see
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/architecture
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/modifying
-#
-# -----------------------------------------------------------------------------
-
-
-# Set compilation flags that additionally depend on a particular way
-
-define distdir-way-opts # args: $1 = dir, $2 = distdir, $3 = way, $4 = stage
-
-# Here is how the command line for a Haskell compilation is constructed.
-#   $1 is the directory we're building in
-#   $2 is the distdir (e.g. "dist", "dist-install" etc.)
-#   $3 is the way (e.g. "v", "p", etc.)
-#   $4 is the stage ("0", "1", "2") that the options are passed to
-#                                   See Note [Stage number in build variables]
-#                                   in mk/config.mk.in.
-# 
-# -----------------------------
-# The variables affecting Haskell compilations are as follows, including
-# the places in the build system that may define them.
-#
-#  Variable              Purpose                           Defined by
-#  --------------        ------------------------------    --------------
-#  $1_PACKAGE            Package name for this dir,        $1/$2/ghc.mk
-#                        if it is a package
-#
-#  CONF_HC_OPTS          GHC options from ./configure      mk/config.mk.in
-#
-#  CONF_CPP_OPTS_STAGE$4 CPP options from ./configure      mk/config.mk.in
-#
-#  CONF_CC_OPTS_STAGE$4  C compiler options from           mk/config.mk.in
-#                        ./configure
-#
-#  CONF_HC_OPTS_STAGE$4  GHC options from ./configure      mk/config.mk.in
-#                        specific to stage $4
-#
-#  CONF_LD_LINKER_OPTS_STAGE$4
-#                        GHC options from ./configure      mk/config.mk.in
-#                        specific to stage $4
-#
-#  WAY_$3_HC_OPTS        GHC options specific to way $3    mk/ways.mk
-#   
-#  SRC_HC_OPTS           source-tree-wide GHC options      mk/config.mk.in
-#                                                          mk/build.mk
-#                                                          mk/validate.mk
-#                                                          mk/warnings.mk
-#
-#  SRC_HC_OPTS_STAGE$4   source-tree-wide GHC options,     mk/config.mk.in
-#                        supplied to the stage $4          mk/build.mk
-#                        compiler only                     mk/validate.mk
-#                                                          mk/warnings.mk
-#
-#  SRC_HC_WARNING_OPTS   source-tree-wide GHC warning      mk/config.mk.in
-#                        options                           mk/build.mk
-#                                                          mk/validate.mk
-#                                                          mk/warnings.mk
-#
-#  SRC_HC_WARNING_OPTS_STAGE$4                             mk/config.mk.in
-#                        source-tree-wide GHC warning      mk/build.mk
-#                        options, supplied to the          mk/validate.mk
-#                        stage $4 compiler only            mk/warnings.mk
-#   
-#  EXTRA_HC_OPTS         for supplying extra options on    make EXTRA_HC_OPTS=...
-#                        the command line   
-#   
-#  $1_HC_OPTS            GHC options specific to this      $1/$2/package-data.mk
-#                        dir
-#   
-#  $1_$2_HC_OPTS         GHC options specific to this      $1/$2/package-data.mk
-#                        dir and distdir
-#   
-#  $1_$2_$3_HC_OPTS      GHC options specific to this      $1/$2/package-data.mk
-#                        dir, distdir and way
-#   
-#  $1_$2_MORE_HC_OPTS    GHC options for this dir/distdir  ???
-#   
-#  $1_$2_EXTRA_HC_OPTS   GHC options for this dir/distdir  mk/build.mk
-#                                                          mk/warnings.mk
-#   
-#  $1_$2_HC_PKGCONF      -package-db flag if necessary   rules/package-config.mk
-#   
-#  $1_$2_HS_SRC_DIRS     dirs relative to $1 containing    $1/$2/package-data.mk
-#                        source files   
-#   
-#  $1_$2_CPP_OPTS        CPP options                       $1/$2/package-data.mk
-#
-#  <file>_HC_OPTS        GHC options for this source       $1/$2/ghc.mk
-#                        file (without the extension)
-
-# -----------------------------
-
-# The actual options passed to a Haskell compilation are defined
-# below.  Note that in general, more specific sets of options come
-# after the less specific, so that we can override global options
-# on a per-directory or per-way basis, for example.
-
-# $1_$2_$3_MOST_HC_OPTS is also passed to C compilations when we use
-# GHC as the C compiler.
-
-$1_$2_$4_DEP_OPTS = \
- $$(foreach pkg,$$($1_$2_DEP_IPIDS),-package-id $$(pkg))
-
-$4_THIS_UNIT_ID = -this-unit-id
-
-$1_$2_$3_MOST_HC_OPTS = \
- $$(WAY_$3_HC_OPTS) \
- $$(CONF_HC_OPTS) \
- $$(SRC_HC_OPTS) \
- $$(SRC_HC_OPTS_STAGE$4) \
- $$($1_HC_OPTS) \
- $$($1_$2_HC_PKGCONF) \
- $$(if $$($1_$2_PROG),, \
-        $$(if $$($1_PACKAGE),$$($4_THIS_UNIT_ID) $$($1_$2_COMPONENT_ID))) \
- $$(if $$($1_PACKAGE),-hide-all-packages) \
- -package-env - \
- -i $$(if $$($1_$2_HS_SRC_DIRS),$$(foreach dir,$$($1_$2_HS_SRC_DIRS),-i$1/$$(dir)),-i$1) \
- -i$1/$2/build \
- -I$1/$2/build \
- -i$1/$2/build/$$(or $$($1_EXECUTABLE),$$($1_$2_PROGNAME),.)/autogen \
- -I$1/$2/build/$$(or $$($1_EXECUTABLE),$$($1_$2_PROGNAME),.)/autogen \
- $$(foreach dir,$$(filter -I%,$$($1_$2_DIST_CPP_OPTS)),$$(dir)) \
- $$(foreach opt,$$(filter-out -I%,$$($1_$2_DIST_CPP_OPTS)),-optP$$(opt)) \
- $$(if $$($1_PACKAGE),-optP-include \
-    -optP$1/$2/build/$$(or $$($1_EXECUTABLE),$$($1_$2_PROGNAME),.)/autogen/cabal_macros.h) \
- $$($1_$2_$4_DEP_OPTS) \
- $$($1_$2_HC_OPTS) \
- $$(CONF_HC_OPTS_STAGE$4) \
- $$($1_$2_MORE_HC_OPTS) \
- $$($1_EXTRA_HC_OPTS) \
- $$($1_$2_EXTRA_HC_OPTS) \
- $$($1_$2_$3_HC_OPTS) \
- $$($$(basename $$(subst ./,,$$<))_HC_OPTS) \
- $$(SRC_HC_WARNING_OPTS) \
- $$(SRC_HC_WARNING_OPTS_STAGE$4) \
- $$(EXTRA_HC_OPTS)
-
-# What is going on with $1_EXECUTABLE?  Recent version of Cabal
-# place the cabal_macros.h for executables in build/exename/autogen
-# rather than the traditional build/autogen.  This is Right(TM)
-# thing to do, but we have to accommodate it.  Usually, it suffices
-# to look in the PROGNAME, but for ghc the PROGNAME is ghc-stage1
-# while Cabal puts it in 'ghc', so we $1_EXECUTABLE is for that
-# case.
-
-$1_$2_$3_MOST_DIR_HC_OPTS = \
- $$($1_$2_$3_MOST_HC_OPTS) \
- -outputdir $1/$2/build
-
-# NB. CONF_HC_OPTS_STAGE$4 has to be late enough to override $1_$2_HC_OPTS, so
-# that -O0 is effective (see #5484)
-
-# $1_$2_$3_ALL_HC_OPTS: this is all the options we will pass to GHC
-# for a given ($1,$2,$3).
-$1_$2_$3_ALL_HC_OPTS = \
- -hisuf $$($3_hisuf) -osuf  $$($3_osuf) -hcsuf $$($3_hcsuf) \
- $$($1_$2_$3_MOST_DIR_HC_OPTS) \
- $$(if $$(findstring YES,$$($1_$2_SplitSections)),$$(if $$(findstring dyn,$3),,-split-sections),) \
- $$(if $$(findstring YES,$$($1_$2_DYNAMIC_TOO)),$$(if $$(findstring v,$3),-dynamic-too))
-
-$1_$2_$3_ALL_CC_OPTS = \
- $$(WAY_$3_CC_OPTS) \
- $$($1_$2_DIST_GCC_CC_OPTS) \
- $$($1_$2_$3_CC_OPTS) \
- $$($$(basename $$<)_CC_OPTS) \
- $$($1_$2_EXTRA_CC_OPTS) \
- $$(EXTRA_CC_OPTS) \
- $$(if $$(findstring YES,$$($1_$2_SplitSections)),-ffunction-sections -fdata-sections)
-
-$1_$2_$3_GHC_CC_OPTS = \
- $$(addprefix -optc, $$($1_$2_$3_ALL_CC_OPTS)) \
- $$($1_$2_$3_MOST_HC_OPTS)
-
-# Options for passing to gcc for linking
-$1_$2_$3_ALL_LD_OPTS = \
- $$(WAY_$3_LD_OPTS) \
- $$($1_$2_DIST_LD_OPTS) \
- $$($1_$2_$3_LD_OPTS) \
- $$($1_$2_EXTRA_LD_OPTS) \
- $$(EXTRA_LD_OPTS) \
- $$(foreach o,$$(EXTRA_LD_LINKER_OPTS),-Wl$$(comma)$$o) \
- $$(foreach o,$$(CONF_LD_LINKER_OPTS_STAGE$4),-Wl$$(comma)$$o)
-
-# Options for passing to GHC when we use it for linking
-$1_$2_$3_GHC_LD_OPTS = \
- $$(addprefix -optl, $$($1_$2_$3_ALL_LD_OPTS)) \
- $$($1_$2_$3_MOST_HC_OPTS)
-
-$1_$2_$3_ALL_AS_OPTS = \
- $$(CONF_AS_OPTS) \
- $$(SRC_AS_OPTS) \
- $$(WAY_$3_AS_OPTS) \
- $$($1_AS_OPTS) \
- $$($1_$2_AS_OPTS) \
- $$($1_$2_$3_AS_OPTS) \
- $$(EXTRA_AS_OPTS)
-
-ifeq "$3" "dyn"
-ifneq "$4" "0"
-ifeq "$$(TargetElf)" "YES"
-$1_$2_$3_GHC_LD_OPTS += \
-    -fno-use-rpaths \
-    $$(foreach d,$$($1_$2_TRANSITIVE_DEP_COMPONENT_IDS),-optl-Wl$$(comma)-rpath -optl-Wl$$(comma)'$$$$ORIGIN/../$$d') -optl-Wl,-zorigin
-else ifeq "$$(TargetOS_CPP)" "darwin"
-$1_$2_$3_GHC_LD_OPTS += \
-    -fno-use-rpaths \
-    $$(foreach d,$$($1_$2_TRANSITIVE_DEP_COMPONENT_IDS),-optl-Wl$$(comma)-rpath -optl-Wl$$(comma)'@loader_path/../$$d')
-endif
-endif
-endif
-
-endef
-
diff --git a/rules/foreachLibrary.mk b/rules/foreachLibrary.mk
deleted file mode 100644
index 60dd0d3a82393ca3124558ab3bbd2dc1950553ce..0000000000000000000000000000000000000000
--- a/rules/foreachLibrary.mk
+++ /dev/null
@@ -1,59 +0,0 @@
-# -----------------------------------------------------------------------------
-#
-# (c) 2010 The University of Glasgow
-#
-# This file is part of the GHC build system.
-#
-# To understand how the build system works and how to modify it, see
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/architecture
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/modifying
-#
-# -----------------------------------------------------------------------------
-
-# For each line in $(TOP)/packages:
-#     libraries/foo    tag    ...
-# this calls
-#     $(call $1,foo,tag)
-#
-# Except! If there's a libraries/foo/ghc-packages then it calls
-#     $(call $1,foo/bar,tag)
-# for each word 'bar' in libraries/foo/ghc-packages.
-#
-
-# We use an FEL_ prefix for the variable names, to avoid trampling on
-# other variables, as make has no concept of local variables.
-
-# We need to handle the following packages specially, as those don't
-# have an entry in the packages file, since they don't live in
-# repositories of their own:
-#
-#  - base
-#  - ghc-boot
-#  - ghc-boot-th
-#  - ghc-prim
-#  - integer-gmp
-#  - ghc-bignum
-#  - template-haskell
-
-define foreachLibrary
-# $1 = function to call for each library
-# We will give it the package path and the tag as arguments
-$$(foreach hashline,libraries/ghc-boot-th#-#no-remote-repo#no-vcs           \
-                    libraries/ghc-boot#-#no-remote-repo#no-vcs              \
-                    libraries/ghci#-#no-remote-repo#no-vcs                  \
-                    libraries/base#-#no-remote-repo#no-vcs                  \
-                    libraries/ghc-prim#-#no-remote-repo#no-vcs              \
-                    libraries/integer-gmp#-#no-remote-repo#no-vcs           \
-                    libraries/ghc-bignum#-#no-remote-repo#no-vcs            \
-                    libraries/template-haskell#-#no-remote-repo#no-vcs      \
-                    $$(shell grep '^libraries/' packages | sed 's/  */#/g'),\
-    $$(eval FEL_line    := $$(subst #,$$(space),$$(hashline)))              \
-    $$(eval FEL_libdir  := $$(word 1,$$(FEL_line)))                         \
-    $$(eval FEL_tag     := $$(word 2,$$(FEL_line)))                         \
-    $$(eval FEL_libroot := $$(patsubst libraries/%,%,$$(FEL_libdir)))       \
-    $$(if $$(wildcard $$(FEL_libdir)/ghc-packages),                         \
-        $$(foreach lib,$$(shell cat $$(FEL_libdir)/ghc-packages),           \
-            $$(eval $$(call $1,$$(FEL_libroot)/$$(lib),$$(FEL_tag)))),      \
-        $$(if $$(wildcard $$(FEL_libdir)/),                                 \
-            $$(eval $$(call $1,$$(FEL_libroot),$$(FEL_tag))))))
-endef
diff --git a/rules/haddock.mk b/rules/haddock.mk
deleted file mode 100644
index b6d8e9705175ba91f6f1c253c40092429935018d..0000000000000000000000000000000000000000
--- a/rules/haddock.mk
+++ /dev/null
@@ -1,93 +0,0 @@
-# -----------------------------------------------------------------------------
-#
-# (c) 2009 The University of Glasgow
-#
-# This file is part of the GHC build system.
-#
-# To understand how the build system works and how to modify it, see
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/architecture
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/modifying
-#
-# -----------------------------------------------------------------------------
-
-ifneq "$(BINDIST)" "YES"
-HADDOCK_VER := $(shell grep "^version:" utils/haddock/haddock.cabal | sed "s/version: *//")
-HADDOCK_MAJOR_VER := $(shell echo $(HADDOCK_VER) | sed 's/\([0-9]\{1,\}\)\.\([0-9]\{1,\}\)\.\([0-9]\{1,\}\)/\1/')
-HADDOCK_MINOR_VER := $(shell echo $(HADDOCK_VER) | sed 's/\([0-9]\{1,\}\)\.\([0-9]\{1,\}\)\.\([0-9]\{1,\}\)/\2/')
-HADDOCK_PATCH_VER := $(shell echo $(HADDOCK_VER) | sed 's/\([0-9]\{1,\}\)\.\([0-9]\{1,\}\)\.\([0-9]\{1,\}\)/\3/')
-HADDOCK_VERSION_STRING := $(shell echo $$(($(HADDOCK_MAJOR_VER) * 1000 + $(HADDOCK_MINOR_VER) * 10 + $(HADDOCK_PATCH_VER))))
-endif
-
-define haddock  # args: $1 = dir,  $2 = distdir
-$(call trace, haddock($1,$2))
-$(call profStart, haddock($1,$2))
-
-ifeq "$$($1_$2_DO_HADDOCK)" "YES"
-
-ifeq "$$($$($1_PACKAGE)-$$($1_$2_VERSION)_HADDOCK_FILE)" ""
-$$($1_PACKAGE)-$$($1_$2_VERSION)_HADDOCK_FILE = $1/$2/doc/html/$$($1_PACKAGE)/$$($1_PACKAGE).haddock
-ALL_HADDOCK_FILES += $$($$($1_PACKAGE)-$$($1_$2_VERSION)_HADDOCK_FILE)
-else
-$$(error Already got a haddock file for $$($1_PACKAGE))
-endif
-
-haddock: html_$1
-
-ifeq "$$(HADDOCK_DOCS)" "YES"
-$(call all-target,$1_$2_haddock,html_$1)
-endif
-
-.PHONY: html_$1
-html_$1 : $$($$($1_PACKAGE)-$$($1_$2_VERSION)_HADDOCK_FILE)
-
-# See Note [inconsistent distdirs] in rules/build-package-way.mk for why
-# we hard-code dist-install; GHC will use stage2/stage3 here so we
-# cannot use the distdir parameter.
-$$($1_PACKAGE)-$$($1_$2_VERSION)_HADDOCK_DEPS = $$(foreach n,$$($1_$2_DEPS),$$($$n_HADDOCK_FILE) $$($$n_dist-install_$$(HADDOCK_WAY)_LIB))
-
-# We don't pass -dcore-lint to haddock because it caused a performance regression in #13789
-$1_$2_HADDOCK_GHC_OPTS = $$(foreach opt, $$(filter-out -dcore-lint,$$($1_$2_$$(HADDOCK_WAY)_ALL_HC_OPTS)),--optghc=$$(opt))
-
-ifeq "$$(HSCOLOUR_SRCS)" "YES"
-$1_$2_HADDOCK_FLAGS += --source-module=src/%{MODULE/./-}.html --source-entity=src/%{MODULE/./-}.html\#%{NAME}
-endif
-
-ifneq "$$(BINDIST)" "YES"
-
-# We need the quadruple dollars for the dependencies, as it isn't
-# guaranteed that we are processing the packages in dependency order,
-# so we don't want to expand it yet.
-$$($$($1_PACKAGE)-$$($1_$2_VERSION)_HADDOCK_FILE) : $$$$(haddock_INPLACE) $$$$(ghc-cabal_INPLACE) $$($1_$2_HS_SRCS) $$$$($$($1_PACKAGE)-$$($1_$2_VERSION)_HADDOCK_DEPS) | $$$$(dir $$$$@)/.
-ifeq "$$(HSCOLOUR_SRCS)" "YES"
-	"$$(ghc-cabal_INPLACE)" hscolour $1 $2
-endif
-	# N.B. in a source tree from tarball the testsuite/ directory may not exist
-	mkdir -p $$(TOP)/testsuite/tests/perf/haddock
-	"$$(TOP)/$$(INPLACE_BIN)/haddock" \
-		--verbosity=0 \
-		--odir="$1/$2/doc/html/$$($1_PACKAGE)" \
-		--dump-interface=$$($$($1_PACKAGE)-$$($1_$2_VERSION)_HADDOCK_FILE) \
-		--html \
-		--hoogle \
-		--quickjump \
-		--title="$$($1_PACKAGE)-$$($1_$2_VERSION)$$(if $$(strip $$($1_$2_SYNOPSIS)),: $$(strip $$($1_$2_SYNOPSIS)),)" \
-		--prologue="$1/$2/haddock-prologue.txt" \
-		--optghc="-D__HADDOCK_VERSION__=$$(HADDOCK_VERSION_STRING)" \
-		$$(foreach mod,$$($1_$2_HIDDEN_MODULES),--hide=$$(mod)) \
-		$$(foreach pkg,$$($1_$2_DEPS),$$(if $$($$(pkg)_HADDOCK_FILE),--read-interface=../$$(pkg)$$(comma)../$$(pkg)/src/%{MODULE/./-}.html\#%{NAME}$$(comma)$$($$(pkg)_HADDOCK_FILE))) \
-		$$($1_$2_HADDOCK_GHC_OPTS) \
-		$$($1_$2_HADDOCK_FLAGS) $$($1_$2_HADDOCK_OPTS) \
-		$$($1_$2_HS_SRCS) \
-		$$($1_$2_EXTRA_HADDOCK_SRCS) \
-		$$(EXTRA_HADDOCK_OPTS) \
-		+RTS -t"$$(TOP)/testsuite/tests/perf/haddock/$$($1_PACKAGE).t" --machine-readable
-
-# Make the haddocking depend on the library .a file, to ensure
-# that we wait until the library is fully built before we haddock it
-$$($$($1_PACKAGE)-$$($1_$2_VERSION)_HADDOCK_FILE) : $$($1_$2_$$(HADDOCK_WAY)_LIB)
-endif
-
-endif # $1_$2_DO_HADDOCK
-
-$(call profEnd, haddock($1,$2))
-endef
diff --git a/rules/hi-rule.mk b/rules/hi-rule.mk
deleted file mode 100644
index be4a460abe7196af0fbe40cd1393f527c2c144e5..0000000000000000000000000000000000000000
--- a/rules/hi-rule.mk
+++ /dev/null
@@ -1,110 +0,0 @@
-# -----------------------------------------------------------------------------
-#
-# (c) 2009 The University of Glasgow
-#
-# This file is part of the GHC build system.
-#
-# To understand how the build system works and how to modify it, see
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/architecture
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/modifying
-#
-# -----------------------------------------------------------------------------
-
-
-# Here's an interesting rule!
-
-# The .hi file may or may not change when we compile the corresponding
-# .hs file.  If GHC figures out that the .hi file has not changed, it
-# doesn't touch it.  This is a useful optimisation, because it means
-# some modules may not get recompiled if the .hi files of the modules
-# they depend on have not changed.
-#
-# See:
-#   https://gitlab.haskell.org/ghc/ghc/wikis/commentary/compiler/recompilation-avoidance
-#
-# So how do we express this dependency to make?  The exact form of
-# this rule is quite fragile.  Here are some versions that don't work
-# very well:
-#
-# %.hi : %.o
-# 	@if [ ! -f $@ ] ; then \
-# 	    echo Panic! $< exists, but $@ does not.; \
-# 	    exit 1; \
-# 	fi
-#
-# This version adds a useful sanity check, and is a good solution,
-# except that it means spawning a shell. This can be expensive,
-# especially on Windows where spawning a shell takes about 0.3s.
-# We'd like to avoid the shell if necessary.  This also hides the
-# message "nothing to be done for 'all'", since make thinks it has
-# actually done something. Therefore we only use this version
-# if ExtraMakefileSanityChecks is enabled.
-#
-# %.hi : %.o
-#
-# This version doesn't work: GNU make knows it has't done anything to
-# update the .hi file, so even if the .o file has been updated, it
-# won't rebuild anything that depends on the .hi file.  So you might
-# think a more correct way is to change the .hs rule:
-#
-# %.hi %.o : %.hs
-#	$(HC) ...
-#
-# this says "compiling %.hs updates both %.hi and %.o", but that's not
-# true, since compiling the .hs file might not update the .hi file, if
-# the .hi file didn't change.  And if we use this version, then make
-# will keep trying to rebuild %.hi if it is out of date with respect
-# to %.hs.
-#
-# Using this form seems to be the best compromise:
-#
-# %.hi : %.o ;
-#
-# the ';' at the end signifies an "empty command" (see the GNU make
-# documentation).  An empty command is enough to get GNU make to think
-# it has updated %.hi, but without actually spawning a shell to do so.
-#
-# However, given that rule, make thinks that it can make .hi files
-# for any object file, even if the object file was created from e.g.
-# a C source file. We therefore also add a dependency on the .hs/.lhs
-# source file, which means we end up with rules like:
-#
-# a/%.hi : a/%.o b/%.hs ;
-#
-# But! If a file is not explicitly mentioned in a makefile, then if
-# make needs to build it using such a %-rule then it treats it as an
-# 'intermediate file', and deletes it when it is finished. Most .hi
-# files are mentioned in .depend* files, as some other module depends on
-# them, but there are some library modules that aren't imported by
-# anything in the tree.
-#
-# We could stop make from deleting the .hi files by declaring
-# ".SECONDARY:", but if we do that then make takes a pathologically long
-# time with our build system. So we now generate (by calling hi-rule
-# from .depend* files) rules that look like
-#
-# a/B.hi a/B.dyn_hi : %hi : %o x/B.hs
-#
-# Now all the .hi files are explicitly mentioned in the makefiles, so
-# make doesn't think they are merely intermediate files, and doesn't
-# delete them.
-
-ifeq "$(ExtraMakefileSanityChecks)" "NO"
-
-define hi-rule # $1 = rule header
-$1 ;
-endef
-
-else
-
-define hi-rule # $1 = rule header
-$1
-	@if [ ! -f $$@ ] ; then \
-	    echo "Panic! $$< exists, but $$@ does not."; \
-	    exit 1; \
-	fi
-
-endef
-
-endif
-
diff --git a/rules/hs-objs.mk b/rules/hs-objs.mk
deleted file mode 100644
index f46e5273432bc215860fdc4ed3e82667bdc13f75..0000000000000000000000000000000000000000
--- a/rules/hs-objs.mk
+++ /dev/null
@@ -1,17 +0,0 @@
-# -----------------------------------------------------------------------------
-#
-# (c) 2009 The University of Glasgow
-#
-# This file is part of the GHC build system.
-#
-# To understand how the build system works and how to modify it, see
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/architecture
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/modifying
-#
-# -----------------------------------------------------------------------------
-
-
-define hs-objs  # args: $1 = dir, $2 = distdir, $3 = way
-$1_$2_$3_HS_OBJS = $$(patsubst %,$1/$2/build/%.$$($3_osuf),$$($1_$2_SLASH_MODS))
-$1_$2_$3_HI      = $$(patsubst %,$1/$2/build/%.$$($3_hisuf),$$($1_$2_SLASH_MODS))
-endef
diff --git a/rules/hs-sources.mk b/rules/hs-sources.mk
deleted file mode 100644
index 1df4ed7a894b391501caffd19aafb886a63f1890..0000000000000000000000000000000000000000
--- a/rules/hs-sources.mk
+++ /dev/null
@@ -1,58 +0,0 @@
-# -----------------------------------------------------------------------------
-#
-# (c) 2009 The University of Glasgow
-#
-# This file is part of the GHC build system.
-#
-# To understand how the build system works and how to modify it, see
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/architecture
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/modifying
-#
-# -----------------------------------------------------------------------------
-
-
-define hs-sources # args: $1 = dir, $2 = distdir
-
-ifeq "$$($1_$2_HS_SRC_DIRS)" ""
-$1_$2_HS_SRC_DIRS = .
-endif
-
-# Here we collect all the .hs/.lhs source files that we can find.  If
-# we can't find a Haskell source file for a given module, then presumably
-# it can be generated by preprocessing something (.hsc, .y, .x etc.), so
-# we depend on dist/build/Foo.hs in anticipation that the implicit rules
-# will put the preprocessed source file there.
-#
-# NB. use :=, we only want this thing evaluated once.
-#
-$1_$2_HS_SRCS := $$(foreach file,$$($1_$2_SLASH_MODS),\
-                 $$(firstword \
-                   $$(wildcard \
-                     $$(foreach dir,$$($1_$2_HS_SRC_DIRS) $2/build/$$(or $$($1_EXECUTABLE),$$($1_$2_PROGNAME),.)/autogen,\
-                        $1/$$(dir)/$$(file).hs $1/$$(dir)/$$(file).lhs)) \
-                   $1/$2/build/$$(file).hs))
-
-# .hs-boot files must be in the same place as the .hs file they go
-# with (GHC assumes this).  When we preprocess a source file, and
-# that module has a .hs-boot or .lhs-boot file, we must arrange to
-# copy the file into the distdir so that it ends up alongside the
-# preprocessed .hs file.  This complicated macro figures out for which
-# files we need to do this, so we can add them as dependencies of the
-# .depend file rule.
-#
-# for each .hs file in the build dir,
-# if there is a .hs-boot or .lhs-boot file for it in a source dir,
-# we want that file in the build dir.
-#
-# NB. use :=, we only want this thing evaluated once.
-#
-$1_$2_HS_BOOT_SRCS := $$(foreach dir,$$($1_$2_HS_SRC_DIRS),\
-                       $$(subst $1/$$(dir),$1/$2/build,\
-                        $$(wildcard \
-                         $$(subst $1/$2/build,$1/$$(dir),\
-                          $$(foreach file,\
-                           $$(filter $1/$2/build%,$$($1_$2_HS_SRCS)),\
-                           $$(patsubst %.hs,%.hs-boot,$$(file)) \
-                           $$(patsubst %.hs,%.lhs-boot,$$(file)))))))
-
-endef
diff --git a/rules/hs-suffix-rules-srcdir.mk b/rules/hs-suffix-rules-srcdir.mk
deleted file mode 100644
index 1798bfb0b19564ee70e13f90059af802e668ffc5..0000000000000000000000000000000000000000
--- a/rules/hs-suffix-rules-srcdir.mk
+++ /dev/null
@@ -1,50 +0,0 @@
-# -----------------------------------------------------------------------------
-#
-# (c) 2009 The University of Glasgow
-#
-# This file is part of the GHC build system.
-#
-# To understand how the build system works and how to modify it, see
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/architecture
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/modifying
-#
-# -----------------------------------------------------------------------------
-
-
-define hs-suffix-rules-srcdir
-# args: $1 = dir,  $2 = distdir, $3 = srcdir
-
-# Preprocessing Haskell source
-
-ifneq "$$(BINDIST)" "YES"
-
-$1/$2/build/%.hs : $1/$3/%.ly | $$$$(dir $$$$@)/.
-	$$(call cmd,HAPPY) $$($1_$2_ALL_HAPPY_OPTS) $$< -o $$@
-
-$1/$2/build/%.hs : $1/$3/%.y | $$$$(dir $$$$@)/.
-	$$(call cmd,HAPPY) $$($1_$2_ALL_HAPPY_OPTS) $$< -o $$@
-
-$1/$2/build/%.hs : $1/$2/build/%.ly | $$$$(dir $$$$@)/.
-	$$(call cmd,HAPPY) $$($1_$2_ALL_HAPPY_OPTS) $$< -o $$@
-
-$1/$2/build/%.hs : $1/$2/build/%.y | $$$$(dir $$$$@)/.
-	$$(call cmd,HAPPY) $$($1_$2_ALL_HAPPY_OPTS) $$< -o $$@
-
-$1/$2/build/%.hs : $1/$3/%.x | $$$$(dir $$$$@)/.
-	$$(call cmd,ALEX) $$($1_$2_ALL_ALEX_OPTS) $$< -o $$@
-
-$1/$2/build/%_hsc.c $1/$2/build/%_hsc.h $1/$2/build/%.hs : $1/$3/%.hsc $$$$(hsc2hs_INPLACE) | $$$$(dir $$$$@)/.
-	$$(call cmd,hsc2hs_INPLACE) $$($1_$2_ALL_HSC2HS_OPTS) $$< -o $$@
-
-# Now the rules for hs-boot files.
-
-$1/$2/build/%.hs-boot : $1/$3/%.hs-boot | $$$$(dir $$$$@)/.
-	"$$(CP)" $$< $$@
-
-$1/$2/build/%.lhs-boot : $1/$3/%.lhs-boot | $$$$(dir $$$$@)/.
-	"$$(CP)" $$< $$@
-
-endif
-
-endef
-
diff --git a/rules/hs-suffix-way-rules-srcdir.mk b/rules/hs-suffix-way-rules-srcdir.mk
deleted file mode 100644
index 7223b553bab1b74399c6beee2fd68d09b41123ab..0000000000000000000000000000000000000000
--- a/rules/hs-suffix-way-rules-srcdir.mk
+++ /dev/null
@@ -1,94 +0,0 @@
-# -----------------------------------------------------------------------------
-#
-# (c) 2009 The University of Glasgow
-#
-# This file is part of the GHC build system.
-#
-# To understand how the build system works and how to modify it, see
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/architecture
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/modifying
-#
-# -----------------------------------------------------------------------------
-
-
-define hs-suffix-way-rules-srcdir
-# args: $1 = dir,  $2 = distdir, $3 = way, $4 = srcdir
-
-ifneq "$$(BINDIST)" "YES"
-
-# Compiling Haskell source
-
-$1/$2/build/%.$$($3_osuf) : $1/$4/%.hs $$(LAX_DEPS_FOLLOW) $$$$($1_$2_HC_DEP) $$($1_$2_PKGDATA_DEP)
-	$$(call cmd,$1_$2_HC) $$($1_$2_$3_ALL_HC_OPTS) -c $$< -o $$@ $$(if $$(findstring YES,$$($1_$2_DYNAMIC_TOO)),-dyno $$(addsuffix .$$(dyn_osuf),$$(basename $$@)))
-	$$(call ohi-sanity-check,$1,$2,$3,$1/$2/build/$$*)
-
-$1/$2/build/%.$$($3_osuf) : $1/$4/%.lhs $$(LAX_DEPS_FOLLOW) $$$$($1_$2_HC_DEP) $$($1_$2_PKGDATA_DEP)
-	$$(call cmd,$1_$2_HC) $$($1_$2_$3_ALL_HC_OPTS) -c $$< -o $$@ $$(if $$(findstring YES,$$($1_$2_DYNAMIC_TOO)),-dyno $$(addsuffix .$$(dyn_osuf),$$(basename $$@)))
-	$$(call ohi-sanity-check,$1,$2,$3,$1/$2/build/$$*)
-
-$1/$2/build/%.$$($3_hcsuf) : $1/$4/%.hs $$(LAX_DEPS_FOLLOW) $$$$($1_$2_HC_DEP) $$($1_$2_PKGDATA_DEP)
-	$$(call cmd,$1_$2_HC) $$($1_$2_$3_ALL_HC_OPTS) -C $$< -o $$@
-
-$1/$2/build/%.$$($3_hcsuf) : $1/$4/%.lhs $$(LAX_DEPS_FOLLOW) $$$$($1_$2_HC_DEP) $$($1_$2_PKGDATA_DEP)
-	$$(call cmd,$1_$2_HC) $$($1_$2_$3_ALL_HC_OPTS) -C $$< -o $$@
-
-# XXX: for some reason these get used in preference to the direct
-# .hs->.o rule, I don't know why --SDM
-
-$1/$2/build/%.$$($3_osuf) : $1/$4/%.hc | $$$$(dir $$$$@)/.
-	$$(call cmd,$1_$2_CC) \
-		$$($1_$2_$3_ALL_CC_OPTS) \
-		-x c -c $$< -o $$@ \
-		$$(if $$(findstring YES,$$($1_$2_DYNAMIC_TOO)),-dyno $$(addsuffix .$$(dyn_osuf),$$(basename $$@)))
-
-$1/$2/build/%.$$($3_osuf) : $1/$2/build/%.hc
-	$$(call cmd,$1_$2_CC) \
-		$$($1_$2_$3_ALL_CC_OPTS) \
-		-x c -c $$< -o $$@ \
-		$$(if $$(findstring YES,$$($1_$2_DYNAMIC_TOO)),-dyno $$(addsuffix .$$(dyn_osuf),$$(basename $$@)))
-
-# $1/$2/build/%.$$($3_osuf) : $1/$2/build/%.$$($3_hcsuf)
-# 	$$(call cmd,$1_$2_HC) $$($1_$2_$3_ALL_HC_OPTS) -c $$< -o $$@
-#
-# $1/$2/build/%.$$($3_osuf) : $1/$2/build/%.hc
-# 	$$(call cmd,$1_$2_HC) $$($1_$2_$3_ALL_HC_OPTS) -c $$< -o $$@
-#
-# $1/$2/build/%.$$($3_ssuf) : $1/$2/build/%.$$($3_hcsuf)
-# 	$$(call cmd,$1_$2_HC) $$($1_$2_$3_ALL_HC_OPTS) -S $$< -o $$@
-
-# Now the rules for hs-boot files.
-
-$1/$2/build/%.$$($3_o-bootsuf) : $1/$4/%.hs-boot $$(LAX_DEPS_FOLLOW) $$$$($1_$2_HC_DEP) $$($1_$2_PKGDATA_DEP)
-	$$(call cmd,$1_$2_HC) $$($1_$2_$3_ALL_HC_OPTS) -c $$< -o $$@ $$(if $$(findstring YES,$$($1_$2_DYNAMIC_TOO)),-dyno $$(addsuffix .$$(dyn_osuf)-boot,$$(basename $$@)))
-
-$1/$2/build/%.$$($3_o-bootsuf) : $1/$4/%.lhs-boot $$(LAX_DEPS_FOLLOW) $$$$($1_$2_HC_DEP) $$($1_$2_PKGDATA_DEP)
-	$$(call cmd,$1_$2_HC) $$($1_$2_$3_ALL_HC_OPTS) -c $$< -o $$@ $$(if $$(findstring YES,$$($1_$2_DYNAMIC_TOO)),-dyno $$(addsuffix .$$(dyn_osuf)-boot,$$(basename $$@)))
-
-# stubs are automatically generated and compiled by GHC
-
-$1/$2/build/%_stub.$$($3_osuf): $1/$2/build/%.$$($3_osuf)
-	@:
-
-endif
-
-endef
-
-ifeq "$(ExtraMakefileSanityChecks)" "NO"
-ohi-sanity-check =
-else
-# We don't look for the .hi file if this is for a program, as if the
-# Main module is in foo.hs then we get foo.o but Main.hi
-define ohi-sanity-check
-	@for f in $4.$($3_osuf) \
-	          $(if $($1_$2_PROG),,$4.$($3_hisuf)) \
-	          $(if $(findstring v,$3), \
-	              $(if $(findstring YES,$($1_$2_DYNAMIC_TOO)), \
-	                  $4.$(dyn_osuf) $4.$(dyn_hisuf))); do \
-	    if [ ! -f $$f ]; then \
-	        echo "Panic! $$f not created."; \
-	        exit 1; \
-	    fi; \
-	done
-endef
-endif
-
diff --git a/rules/hs-suffix-way-rules.mk b/rules/hs-suffix-way-rules.mk
deleted file mode 100644
index e75d7b458ed885d3a2734303b23ea421f7ac9ccb..0000000000000000000000000000000000000000
--- a/rules/hs-suffix-way-rules.mk
+++ /dev/null
@@ -1,132 +0,0 @@
-# -----------------------------------------------------------------------------
-#
-# (c) 2009 The University of Glasgow
-#
-# This file is part of the GHC build system.
-#
-# To understand how the build system works and how to modify it, see
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/architecture
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/modifying
-#
-# -----------------------------------------------------------------------------
-
-
-define hs-suffix-way-rules  # args: $1 = dir,  $2 = distdir, $3 = way
-
-ifeq "$3 $$($1_$2_DYNAMIC_TOO)" "dyn YES"
-# We only want this rule to be used for Haskell sources, not for
-# e.g. C sources, so we depend on the v_hisuf rather than v_osuf.
-$1/$2/build/%.$$(dyn_osuf): $1/$2/build/%.$$(v_hisuf)
-	@if [ ! -f $$@ ] ; then \
-	    echo "Panic! $$< exists, but $$@ does not."; \
-	    exit 1; \
-	fi
-
-$1/$2/build/%.$$(dyn_osuf)-boot: $1/$2/build/%.$$(v_hisuf)-boot
-	@if [ ! -f $$@ ] ; then \
-	    echo "Panic! $$< exists, but $$@ does not."; \
-	    exit 1; \
-	fi
-else
-
-# Note [Implicit rule search algorithm]
-# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-# The order in which implicit rules are defined can influence a build.
-#
-# Case study: genprimops/Lexer.hs
-#
-# We have two implicit rules for creating .o files, which after instantiating
-# with a specific directory ($1=utils/genprimops) and distdir ($2=dist) look
-# like this:
-#
-# utils/genprimops/dist/build/%.o : utils/genprimops/dist/build/%.hs
-# 	<recipe1>
-# utils/genprimops/dist/build/%.o : utils/genprimops/./%.hs
-# 	<recipe2>
-#
-# The first rule is defined in hs-suffix-way-rules.mk (this file), the other
-# in hs-suffix-way-rules-srcdir.mk.
-#
-# Assume for rest of this story that %=Lexer.
-#
-# In a normal repository checkout, neither Lexer.hs exists, but we have a rule
-# to generate the one in the build directory by running alex on Lexer.x (the
-# rule for that operation is defined in hs-suffix-rules-srcdir.mk). Since make
-# needs to make a choice which of the above two implicit rules to follow (it
-# never runs 2 recipes for the same target, unless double colon rules are
-# used, which we don't), logically it will choose the first rule: Lexer.o will
-# depend on Lexer.hs in the build directory, that file will be built, and then
-# Lexer.o can be built.
-#
-# In an sdist however, Lexer.hs is present in the source directory. It was
-# copied there during the creation of the sdist by a rule in
-# sdist-ghc-file.mk. And this time we *don't* know how to generate the
-# Lexer.hs in the build directory, because 1) alex is not installed when
-# building from sdist and 2) the sdist creation process renamed Lexer.x to
-# Lexer.x.source. So normally make would now choose the second rule: Lexer.o
-# will depend on Lexer.hs in the source directory, for which nothing needs to
-# be done, and then Lexer.o can be built.
-#
-# There is however another actor in play, a rule in sdist-ghc-file.mk, which
-# after after instantiating with the same directory ($1=utils/genprimops) and
-# distdir ($2=dist) looks like this:
-#
-#     sdist_utils/genprimops_dist_Lexer : utils/genprimops/dist/build/Lexer.hs
-#
-# Note that this is not an implicit rule, there aren't any %'s. This rule
-# *explicitly* depends on Lexer.hs in the build directory. What follows is the
-# following:
-#
-#    * make thinks Lexer.hs in the build directory "ought to exist" [1],
-#      because it is an explicit dependency of /some/ target.
-#
-#    * this puts our two implicit rules on equal footing: one depends on a
-#      file that exists, the other on a file that ought to exist. Make's
-#      implicit rule search algorithm doesn't distinguish between these two
-#      cases [1].
-#
-#    * to break the tie, make chooses the rule that is defined first. Lexer.o
-#      will depend on Lexer.hs in the build directory, which doesn't exist,
-#      and which make doesn't know how to build, causing a build failure.
-#
-# To prevent this from happening we define rules for haskell source files in
-# the source directory before those in the distdir.
-#
-# Alternative solutions:
-#
-#     * Don't include the explicit rule above when not creating an sdist, as
-#       that is the only time when it is needed.
-#
-#     * Merge the two implicit rules, with help from $1_$2_HS_SRCS from
-#       hs-sources.mk, which is sdist aware.
-#
-#     * Require alex and happy to be installed when building from an sdist,
-#       simplifying all this drastically.
-#
-# [1] https://www.gnu.org/software/make/manual/make.html#Implicit-Rule-Search
-
-$$(foreach dir,$$($1_$2_HS_SRC_DIRS),\
-  $$(eval $$(call hs-suffix-way-rules-srcdir,$1,$2,$3,$$(dir))))
-
-
-ifneq "$$(BINDIST)" "YES"
-
-$1/$2/build/%.$$($3_hcsuf) : $1/$2/build/%.hs $$(LAX_DEPS_FOLLOW) $$$$($1_$2_HC_DEP)
-	$$(call cmd,$1_$2_HC) $$($1_$2_$3_ALL_HC_OPTS) -C $$< -o $$@
-
-$1/$2/build/%.$$($3_osuf) : $1/$2/build/%.hs $$(LAX_DEPS_FOLLOW) $$$$($1_$2_HC_DEP)
-	$$(call cmd,$1_$2_HC) $$($1_$2_$3_ALL_HC_OPTS) -c $$< -o $$@ $$(if $$(findstring YES,$$($1_$2_DYNAMIC_TOO)),-dyno $$(addsuffix .$$(dyn_osuf),$$(basename $$@)))
-
-$1/$2/build/%.$$($3_hcsuf) : $1/$2/build/$$(or $$($1_EXECUTABLE),$$($1_$2_PROGNAME),.)/autogen/%.hs $$(LAX_DEPS_FOLLOW) $$$$($1_$2_HC_DEP)
-	$$(call cmd,$1_$2_HC) $$($1_$2_$3_ALL_HC_OPTS) -C $$< -o $$@
-
-$1/$2/build/%.$$($3_osuf) : $1/$2/build/$$(or $$($1_EXECUTABLE),$$($1_$2_PROGNAME),.)/autogen/%.hs $$(LAX_DEPS_FOLLOW) $$$$($1_$2_HC_DEP)
-	$$(call cmd,$1_$2_HC) $$($1_$2_$3_ALL_HC_OPTS) -c $$< -o $$@ $$(if $$(findstring YES,$$($1_$2_DYNAMIC_TOO)),-dyno $$(addsuffix .$$(dyn_osuf),$$(basename $$@)))
-
-endif
-
-
-endif
-
-endef # hs-suffix-way-rules
-
diff --git a/rules/include-dependencies.mk b/rules/include-dependencies.mk
deleted file mode 100644
index 7d4c38b73bd2231ecfc33664cf2da092bd1b6914..0000000000000000000000000000000000000000
--- a/rules/include-dependencies.mk
+++ /dev/null
@@ -1,45 +0,0 @@
-# -----------------------------------------------------------------------------
-#
-# (c) 2009 The University of Glasgow
-#
-# This file is part of the GHC build system.
-#
-# To understand how the build system works and how to modify it, see
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/architecture
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/modifying
-#
-# -----------------------------------------------------------------------------
-
-define include-dependencies
-$(call trace, include-dependencies($1,$2,$3))
-$(call profStart, include-dependencies($1,$2,$3))
-# $1 = dir
-# $2 = distdir
-# $3 = GHC stage to use (0 == bootstrapping compiler)
-
-$1_$2_INCLUDE_DEPFILES = YES
-ifeq "$$(NO_INCLUDE_DEPS)" "YES"
-$1_$2_INCLUDE_DEPFILES = NO
-endif
-ifneq "$$(ONLY_DEPS_FOR)" ""
-ifeq "$$(filter $1_$2,$$(ONLY_DEPS_FOR))" ""
-$1_$2_INCLUDE_DEPFILES = NO
-endif
-endif
-
-ifeq "$$($1_$2_INCLUDE_DEPFILES)" "YES"
-ifneq "$$(strip $$($1_$2_HS_SRCS) $$($1_$2_HS_BOOT_SRCS))" ""
-ifneq "$$(NO_STAGE$3_DEPS)" "YES"
-include $$($1_$2_depfile_haskell)
-endif
-endif
-include $$($1_$2_depfile_c_asm)
-else
-ifeq "$$(DEBUG)" "YES"
-$$(warning not building dependencies in $1)
-endif
-endif
-
-$(call profEnd, include-dependencies($1,$2,$3))
-endef
-
diff --git a/rules/includes-sources.mk b/rules/includes-sources.mk
deleted file mode 100644
index fca114bffd68bc690b2686401a366fd58a17ab5b..0000000000000000000000000000000000000000
--- a/rules/includes-sources.mk
+++ /dev/null
@@ -1,26 +0,0 @@
-# -----------------------------------------------------------------------------
-#
-# (c) 2009 The University of Glasgow
-#
-# This file is part of the GHC build system.
-#
-# To understand how the build system works and how to modify it, see
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/architecture
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/modifying
-#
-# -----------------------------------------------------------------------------
-
-
-define includes-sources # args: $1 = dir, $2 = distdir
-
-ifeq "$$($1_$2_INCLUDE_DIRS)" ""
-$1_$2_INCLUDE_DIRS = .
-endif
-
-$1_$2_INSTALL_INCLUDES_SRCS :=\
-    $$(foreach file,$$($1_$2_INSTALL_INCLUDES),\
-        $$(firstword \
-            $$(wildcard \
-                $$(foreach dir,$$($1_$2_INCLUDE_DIRS),\
-                    $1/$$(dir)/$$(file)))))
-endef
diff --git a/rules/library-path.mk b/rules/library-path.mk
deleted file mode 100644
index 9a398eebf06533b548c3b04c254aade3540d247b..0000000000000000000000000000000000000000
--- a/rules/library-path.mk
+++ /dev/null
@@ -1,21 +0,0 @@
-# -----------------------------------------------------------------------------
-#
-# (c) 2010 The University of Glasgow
-#
-# This file is part of the GHC build system.
-#
-# To understand how the build system works and how to modify it, see
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/architecture
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/modifying
-#
-# -----------------------------------------------------------------------------
-
-# $1 = paths to prepend
-ifeq "$(TargetOS_CPP)" "mingw32"
-prependLibraryPath = $(error Do not know how to prependLibraryPath on Windows)
-else ifeq "$(TargetOS_CPP)" "darwin"
-prependLibraryPath = export DYLD_LIBRARY_PATH="$1$${DYLD_LIBRARY_PATH:+:$$DYLD_LIBRARY_PATH}"
-else
-prependLibraryPath = export LD_LIBRARY_PATH="$1$${LD_LIBRARY_PATH:+:$$LD_LIBRARY_PATH}"
-endif
-
diff --git a/rules/make-command.mk b/rules/make-command.mk
deleted file mode 100644
index 17d09215254beadc1ed53e9636c1befdfa9712af..0000000000000000000000000000000000000000
--- a/rules/make-command.mk
+++ /dev/null
@@ -1,21 +0,0 @@
-# -----------------------------------------------------------------------------
-#
-# (c) 2010 The University of Glasgow
-#
-# This file is part of the GHC build system.
-#
-# To understand how the build system works and how to modify it, see
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/architecture
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/modifying
-#
-# -----------------------------------------------------------------------------
-
-# $1 = the line
-# The formatting of this definition (in particular, the blank line at
-# the start) is important, in order to get make to generate the right
-# makefile code.
-
-define make-command
-
-	$1
-endef
diff --git a/rules/manual-package-config.mk b/rules/manual-package-config.mk
deleted file mode 100644
index a9993d9faed25de1643aba9ec75382a4e8c6ed51..0000000000000000000000000000000000000000
--- a/rules/manual-package-config.mk
+++ /dev/null
@@ -1,45 +0,0 @@
-# -----------------------------------------------------------------------------
-#
-# (c) 2009 The University of Glasgow
-#
-# This file is part of the GHC build system.
-#
-# To understand how the build system works and how to modify it, see
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/architecture
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/modifying
-#
-# -----------------------------------------------------------------------------
-
-
-define manual-package-config
-# args:
-# $1 = dir
-# $2 = distdir
-$(call trace, manual-package-config($1, $2))
-$(call profStart, manual-package-config($1, $2))
-
-$1/$2/package.conf.inplace : $1/package.conf.in $$$$(ghc-pkg_INPLACE) | $$$$(dir $$$$@)/.
-	$$(HS_CPP) -P \
-		-DTOP='"$$(TOP)"' \
-		$$($1_$2_PACKAGE_CPP_OPTS) \
-		-x c $$< -o $$@.raw
-	grep -v '^#pragma GCC' $$@.raw | \
-	    sed -e 's/""//g' -e 's/:[ 	]*,/: /g' > $$@
-
-	"$$(ghc-pkg_INPLACE)" update --force $$@
-
-# This is actually a real file, but we need to recreate it on every
-# "make install", so we declare it as phony
-.PHONY: $1/$2/package.conf.install
-$1/$2/package.conf.install : $1/package.conf.in | $$$$(dir $$$$@)/.
-	$$(HS_CPP) -P \
-		-DINSTALLING \
-		-DLIB_DIR='"$$(if $$(filter YES,$$(RelocatableBuild)),$$$$topdir,$$(ghclibdir))/$1"' \
-		-DINCLUDE_DIR='"$$(if $$(filter YES,$$(RelocatableBuild)),$$$$topdir,$$(ghclibdir))/$1/include"' \
-		$$($1_$2_PACKAGE_CPP_OPTS) \
-		-x c $1/package.conf.in -o $$@.raw
-	grep -v '^#pragma GCC' $$@.raw | \
-	    sed -e 's/""//g' -e 's/:[ 	]*,/: /g' >$$@
-
-$(call profEnd, manual-package-config($1))
-endef
diff --git a/rules/package-config.mk b/rules/package-config.mk
deleted file mode 100644
index 86054071adcd3a14d101049b32aa902eacae7e56..0000000000000000000000000000000000000000
--- a/rules/package-config.mk
+++ /dev/null
@@ -1,69 +0,0 @@
-# -----------------------------------------------------------------------------
-#
-# (c) 2009 The University of Glasgow
-#
-# This file is part of the GHC build system.
-#
-# To understand how the build system works and how to modify it, see
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/architecture
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/modifying
-#
-# -----------------------------------------------------------------------------
-
-
-define package-config # args: $1 = dir, $2 = distdir, $3 = GHC stage
-$(call trace, package-config($1,$2,$3))
-$(call profStart, package-config($1,$2,$3))
-
-$1_$2_HC = $$(GHC_STAGE$3)
-$1_$2_CC = $$(CC_STAGE$3)
-$1_$2_AS = $$(AS_STAGE$3)
-$1_$2_AR = $$(AR_STAGE$3)
-$1_$2_AR_OPTS = $$(AR_OPTS_STAGE$3)
-$1_$2_EXTRA_AR_ARGS = $$(EXTRA_AR_ARGS_STAGE$3)
-$1_$2_ArSupportsAtFile = $$(ArSupportsAtFile_STAGE$3)
-
-# configuration stuff that depends on which GHC we're building with
-ifeq "$3" "0"
-$1_$2_HC_CONFIG = $$(GHC_STAGE0)
-$1_$2_HC_CONFIG_DEP =
-$1_$2_GHC_PKG = $$(GHC_PKG)
-$1_$2_GHC_PKG_DEP = 
-$1_$2_HC_MK_DEPEND = $$($1_$2_HC)
-# We can't make rules depend on the bootstrapping compiler, as then
-# on cygwin we get a dep on c:/ghc/..., and make gets confused by the :
-$1_$2_HC_MK_DEPEND_DEP =
-$1_$2_HC_DEP =
-$1_$2_HC_PKGCONF = -package-db $$(BOOTSTRAPPING_CONF)
-$1_$2_GHC_PKG_OPTS = --package-db=$$(BOOTSTRAPPING_CONF)
-$1_$2_CONFIGURE_OPTS += --package-db=$$(TOP)/$$(BOOTSTRAPPING_CONF)
-$1_$2_MORE_HC_OPTS += -no-user-package-db
-$1_$2_MORE_HC_OPTS += -rtsopts
-else
-$1_$2_HC_PKGCONF = 
-$1_$2_HC_CONFIG = $$(TOP)/$$(GHC_STAGE1)
-$1_$2_HC_CONFIG_DEP = $$(GHC_STAGE1)
-$1_$2_GHC_PKG = $$(TOP)/$$(ghc-pkg_INPLACE)
-$1_$2_GHC_PKG_DEP = $$$$(ghc-pkg_INPLACE)
-$1_$2_GHC_PKG_OPTS =
-# If stage is not 0 then we always use stage1 for making .depend, as later
-# stages aren't available early enough
-$1_$2_HC_MK_DEPEND = $$(GHC_STAGE1)
-$1_$2_HC_MK_DEPEND_DEP = $$($1_$2_HC_MK_DEPEND)
-$1_$2_HC_DEP = $$($1_$2_HC)
-$1_$2_MORE_HC_OPTS += -no-user-package-db
-$1_$2_MORE_HC_OPTS += -rtsopts
-endif
-
-# Used by pretty_commands.mk
-label_$1_$2_CC=CC
-label_$1_$2_AS=AS
-label_$1_$2_AR=AR
-label_$1_$2_HC=HC [stage $3]
-label_$1_$2_GHC_PKG=GHC PKG
-
-# Useful later
-$1_$2_SLASH_MODS = $$(subst .,/,$$($1_$2_MODULES))
-
-$(call profEnd, package-config($1,$2,$3))
-endef
diff --git a/rules/pretty_commands.mk b/rules/pretty_commands.mk
deleted file mode 100644
index f7576e171fcf41179f015f9340a598aa2837f340..0000000000000000000000000000000000000000
--- a/rules/pretty_commands.mk
+++ /dev/null
@@ -1,13 +0,0 @@
-ifneq ($(V),1)
-cmd = @echo '  $(if $(label_$1),$(label_$1),$1) $@'; "$($1)"
-else
-cmd = "$($1)"
-endif
-
-label_ALEX=ALEX
-label_HAPPY=HAPPY
-label_hsc2hs_INPLACE=HSC2HS
-
-
-
-
diff --git a/rules/prof.mk b/rules/prof.mk
deleted file mode 100644
index 5733b415cacb259ba6bb34f08267939a4f9acfad..0000000000000000000000000000000000000000
--- a/rules/prof.mk
+++ /dev/null
@@ -1,20 +0,0 @@
-# -----------------------------------------------------------------------------
-#
-# (c) 2010 The University of Glasgow
-#
-# This file is part of the GHC build system.
-#
-# To understand how the build system works and how to modify it, see
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/architecture
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/modifying
-#
-# -----------------------------------------------------------------------------
-
-define profStart
-$$(if $(PROF),$$(info $$(shell date +%s.%N): Start $1))
-endef
-
-define profEnd
-$$(if $(PROF),$$(info $$(shell date +%s.%N): End   $1))
-endef
-
diff --git a/rules/sdist-ghc-file.mk b/rules/sdist-ghc-file.mk
deleted file mode 100644
index b1e13a1ea0ec4c47b79f744e289fde493a16c27e..0000000000000000000000000000000000000000
--- a/rules/sdist-ghc-file.mk
+++ /dev/null
@@ -1,77 +0,0 @@
-# -----------------------------------------------------------------------------
-#
-# This file is part of the GHC build system.
-#
-# To understand how the build system works and how to modify it, see
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/architecture
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/modifying
-#
-# -----------------------------------------------------------------------------
-
-
-# Add files generated by alex and happy to a source distribution.
-#
-# Invoke like this:
-#
-# $(eval $(call sdist-ghc-file,compiler,stage2,parser,Parser,y))
-#
-# This adds the file 'compiler/stage2/build/Parser.hs' to the sdist, in the
-# same directory as 'compiler/GHC/Parser.y' (which is renamed).
-
-define sdist-ghc-file
-# $1 = dir
-# $2 = distdir
-# $3 = srcdir (can be empty)
-# $4 = filename
-# $5 = extension
-
-.PHONY: sdist_$1_$2_$4
-
-# We should do this before creating the `sdist-ghc` tarball, or when just
-# running `make sdist-ghc-prep`.
-sdist-ghc-prep : sdist_$1_$2_$4
-
-# But first create SRC_DIST_GHC_DIR.
-sdist_$1_$2_$4 : sdist-ghc-prep-tree
-
-# Generate the .hs files if they don't exist yet, then do actual copying and
-# moving.
-sdist_$1_$2_$4 : $1/$2/build/$4.hs
-	"$(CP)" $1/$2/build/$4.hs $(SRC_DIST_GHC_DIR)/$1/$3/$$(dir $4)
-	mv $(SRC_DIST_GHC_DIR)/$1/$3/$4.$5 $(SRC_DIST_GHC_DIR)/$1/$3/$4.$5.source
-
-# And make sure the rules for generating the .hs files exist, even when we
-# didn't generate all package-data.mk files.
-$$(eval $$(call hs-suffix-rules-srcdir,$1,$2,$3))
-endef
-
-# -----------------------------------------------------------------------------
-# Variant of sdist-ghc-file whose `$3`-argument is interpreted
-# differently in a more appropriate way for cabal-packages
-
-define sdist-ghc-file2
-# $1 = dir
-# $2 = distdir
-# $3 = moduledir
-# $4 = filename
-# $5 = extension
-
-.PHONY: sdist_$1_$2_$4
-
-# We should do this before creating the `sdist-ghc` tarball, or when just
-# running `make sdist-ghc-prep`.
-sdist-ghc-prep : sdist_$1_$2_$4
-
-# But first create SRC_DIST_GHC_DIR.
-sdist_$1_$2_$4 : sdist-ghc-prep-tree
-
-# Generate the .hs files if they don't exist yet, then do actual copying and
-# moving.
-sdist_$1_$2_$4 : $1/$2/build/$3/$4.hs
-	"$(CP)" $1/$2/build/$3/$4.hs $(SRC_DIST_GHC_DIR)/$1/$3
-	mv $(SRC_DIST_GHC_DIR)/$1/$3/$4.$5 $(SRC_DIST_GHC_DIR)/$1/$3/$4.$5.source
-
-# And make sure the rules for generating the .hs files exist, even when we
-# didn't generate all package-data.mk files.
-$$(eval $$(call hs-suffix-rules-srcdir,$1,$2,$3))
-endef
diff --git a/rules/shell-wrapper.mk b/rules/shell-wrapper.mk
deleted file mode 100644
index 37d01e6ecd02b6f1bacf876c1cabf85c70cf0868..0000000000000000000000000000000000000000
--- a/rules/shell-wrapper.mk
+++ /dev/null
@@ -1,120 +0,0 @@
-# -----------------------------------------------------------------------------
-#
-# (c) 2009-2012 The University of Glasgow
-#
-# This file is part of the GHC build system.
-#
-# To understand how the build system works and how to modify it, see
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/architecture
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/modifying
-#
-# -----------------------------------------------------------------------------
-
-define shell-wrapper
-$(call trace, shell-wrapper($1,$2))
-$(call profStart, shell-wrapper($1,$2))
-# $1 = dir
-# $2 = distdir
-
-ifeq "$$($1_$2_SHELL_WRAPPER_NAME)" ""
-$1_$2_SHELL_WRAPPER_NAME = $1/$$($1_$2_PROGNAME).wrapper
-endif
-
-
-ifeq "$$($1_$2_WANT_INPLACE_WRAPPER)" "YES"
-
-$1_$2_INPLACE_SHELL_WRAPPER_NAME = $$($1_$2_PROG)
-
-ifeq "$$($1_$2_TOPDIR)" "YES"
-$1_$2_INPLACE_WRAPPER = $$(INPLACE_LIB)/bin/$$($1_$2_INPLACE_SHELL_WRAPPER_NAME)
-else
-$1_$2_INPLACE_WRAPPER = $$(INPLACE_BIN)/$$($1_$2_INPLACE_SHELL_WRAPPER_NAME)
-endif
-
-all_$1_$2 : $$($1_$2_INPLACE_WRAPPER)
-
-$(call clean-target,$1,$2_inplace_wrapper,$$($1_$2_INPLACE_WRAPPER))
-
-$$($1_$2_INPLACE_WRAPPER): WRAPPER=$$@
-ifeq "$$($1_$2_SHELL_WRAPPER)" "YES"
-$$($1_$2_INPLACE_WRAPPER): $$($1_$2_SHELL_WRAPPER_NAME)
-endif
-$$($1_$2_INPLACE_WRAPPER): $$($1_$2_INPLACE)
-	$$(call removeFiles,                                                    $$@)
-	echo '#!/bin/sh'                                                     >> $$@
-	echo 'executablename="$$(TOP)/$$<"'                                  >> $$@
-	echo 'datadir="$$(TOP)/$$(INPLACE_LIB)"'                             >> $$@
-	echo 'bindir="$$(TOP)/$$(INPLACE_BIN)"'                              >> $$@
-	echo 'topdir="$$(TOP)/$$(INPLACE_TOPDIR)"'                           >> $$@
-	echo 'pgmgcc="$$(CC)"'                                               >> $$@
-	$$($1_$2_SHELL_WRAPPER_EXTRA)
-	$$($1_$2_INPLACE_SHELL_WRAPPER_EXTRA)
-ifeq "$$(DYNAMIC_GHC_PROGRAMS)" "YES"
-	echo '$$(call prependLibraryPath,$$($1_$2_DEP_LIB_DIRS_SEARCHPATH))' >> $$@
-endif
-ifeq "$$($1_$2_SHELL_WRAPPER)" "YES"
-	cat $$($1_$2_SHELL_WRAPPER_NAME)                                     >> $$@
-else
-	echo 'exec "$$$$executablename" $$$${1+"$$$$@"}'                     >> $$@
-endif
-	$$(EXECUTABLE_FILE)                                                     $$@
-
-endif # $1_$2_WANT_INPLACE_WRAPPER
-
-
-ifeq "$$($1_$2_WANT_INSTALLED_WRAPPER)" "YES"
-
-ifeq "$$($1_$2_INSTALL_SHELL_WRAPPER_NAME)" ""
-$1_$2_INSTALL_SHELL_WRAPPER_NAME = $$($1_$2_PROG)
-endif
-
-# Install the binary in $(ghclibexecdir), and install a shell wrapper in $(bindir)
-INSTALL_LIBEXECS += $1/$2/build/tmp/$$($1_$2_PROG)
-BINDIST_WRAPPERS += $$($1_$2_SHELL_WRAPPER_NAME)
-
-install: install_$1_$2_wrapper
-
-.PHONY: install_$1_$2_wrapper
-install_$1_$2_wrapper: WRAPPER=$$(DESTDIR)$$(bindir)/$(CrossCompilePrefix)$$($1_$2_INSTALL_SHELL_WRAPPER_NAME)
-install_$1_$2_wrapper:
-	$$(INSTALL_DIR) "$$(DESTDIR)$$(bindir)"
-	$$(call removeFiles,                                        "$$(WRAPPER)")
-	$$(CREATE_SCRIPT)                                           "$$(WRAPPER)"
-	echo '#!/bin/sh'                                         >> "$$(WRAPPER)"
-	echo 'exedir="$$(ghclibexecdir)/bin"'                    >> "$$(WRAPPER)"
-	echo 'exeprog="$$($1_$2_PROG)"'                          >> "$$(WRAPPER)"
-	echo 'executablename="$$$$exedir/$$$$exeprog"'           >> "$$(WRAPPER)"
-	echo 'datadir="$$(datadir)"'                             >> "$$(WRAPPER)"
-	echo 'bindir="$$(bindir)"'                               >> "$$(WRAPPER)"
-	echo 'topdir="$$(topdir)"'                               >> "$$(WRAPPER)"
-	$$($1_$2_SHELL_WRAPPER_EXTRA)
-	$$($1_$2_INSTALL_SHELL_WRAPPER_EXTRA)
-	cat $$($1_$2_SHELL_WRAPPER_NAME)                         >> "$$(WRAPPER)"
-	$$(EXECUTABLE_FILE)                                         "$$(WRAPPER)"
-
-endif # $1_$2_WANT_INSTALLED_WRAPPER
-
-
-ifeq "$$($1_$2_WANT_BINDIST_WRAPPER)" "YES"
-ifneq "$$(TargetOS_CPP)" "mingw32"
-
-$1_$2_BINDIST_WRAPPER = $1/$2/build/tmp/$$($1_$2_PROGNAME)-bindist
-
-all_$1_$2 : $$($1_$2_BINDIST_WRAPPER)
-
-BINDIST_EXTRAS += $$($1_$2_BINDIST_WRAPPER)
-
-$$($1_$2_BINDIST_WRAPPER): $1/$2/build/tmp/$$($1_$2_PROG)
-	$$(call removeFiles,                                                  $$@)
-	echo '#!/bin/sh'                                                   >> $$@
-ifeq "$$(DYNAMIC_GHC_PROGRAMS)" "YES"
-	echo '$$(call prependLibraryPath,$$($1_$2_DEP_LIB_REL_DIRS_SEARCHPATH))' >> $$@
-endif
-	echo 'exec "$$<" $$$${1+"$$$$@"}'                                  >> $$@
-	$$(EXECUTABLE_FILE)                                                   $$@
-
-endif
-endif # $1_$2_WANT_BINDIST_WRAPPER
-
-$(call profEnd, shell-wrapper($1,$2))
-endef
diff --git a/rules/sphinx.mk b/rules/sphinx.mk
deleted file mode 100644
index 38692a8cdb9756469a74564513ffd1ee9e7748c6..0000000000000000000000000000000000000000
--- a/rules/sphinx.mk
+++ /dev/null
@@ -1,77 +0,0 @@
-# -----------------------------------------------------------------------------
-#
-# (c) 2009 The University of Glasgow
-#
-# This file is part of the GHC build system.
-#
-# To understand how the build system works and how to modify it, see
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/architecture
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/modifying
-#
-# -----------------------------------------------------------------------------
-
-
-# Build Sphinx documentation
-
-# We are careful not to use the same directory the doctree files for the
-# various Sphinx targets as make may run them in parallel (see #10950).
-
-define sphinx
-$(call trace, sphinx($1,$2))
-$(call profStart, sphinx($1,$2))
-# $1 = dir
-# $2 = docname
-
-$(eval $(call clean-target,$1,sphinx,$1/.doctrees-html/ $1/.doctrees-pdf/ $1/build-html/ $1/build-pdf/ $1/$2.pdf))
-
-# empty "all_$1" target just in case we're not building docs at all
-$(call all-target,$1,)
-
-.PHONY: html_$1
-ifeq "$$(phase)" "final"
-ifeq "$$(BUILD_SPHINX_HTML)" "YES"
-$(call all-target,$1,html_$1)
-INSTALL_HTML_DOC_DIRS += $1/build-html/$2
-endif
-endif
-
-html_$1 : $1/build-html/$2/index.html
-html : html_$1
-
-ifneq "$$(BINDIST)" "YES"
-$1/build-html/$2/index.html: $1/conf.py $$($1_RST_SOURCES)
-	$(SPHINXBUILD) -b html -d $1/.doctrees-html -w $1/.log -n $(SPHINXOPTS) $1 $1/build-html/$2
-endif
-
-
-.PHONY: pdf_$1
-ifeq "$$(phase)" "final"
-ifeq "$$(BUILD_SPHINX_PDF)" "YES"
-$(call all-target,$1,pdf_$1)
-INSTALL_DOCS += $1/$2.pdf
-endif
-endif
-
-pdf_$1 : $1/$2.pdf
-pdf : pdf_$1
-
-ifneq "$$(BINDIST)" "YES"
-# N.B. If we don't redirect latex output to /dev/null then we end up with literally
-# 30% of the build output being warnings, even in a successful build. However,
-# to make sure that we don't silence errors we allow each xelatex invocation
-# besides the last to fail.
-
-$1/$2.pdf: $1/conf.py $$($1_RST_SOURCES)
-	$(SPHINXBUILD) -b latex -d $1/.doctrees-pdf -w $1/.log -n $(SPHINXOPTS) $1 $1/build-pdf/$2
-	cd $1/build-pdf/$2 ; $(XELATEX) -halt-on-error $2.tex 2>/dev/null >/dev/null || true
-	cd $1/build-pdf/$2 ; $(XELATEX) -halt-on-error $2.tex 2>/dev/null >/dev/null || true
-	cd $1/build-pdf/$2 ; $(XELATEX) -halt-on-error $2.tex 2>/dev/null >/dev/null || true
-	cd $1/build-pdf/$2 ; $(MAKEINDEX) -s python.ist $2.idx
-	cd $1/build-pdf/$2 ; $(XELATEX) -halt-on-error $2.tex 2>/dev/null >/dev/null || true
-	cd $1/build-pdf/$2 ; $(XELATEX) -halt-on-error $2.tex
-	cp $1/build-pdf/$2/$2.pdf $1/$2.pdf
-endif
-
-
-$(call profEnd, sphinx($1,$2))
-endef
diff --git a/rules/trace.mk b/rules/trace.mk
deleted file mode 100644
index ec92fea1d51c0e2b627b1bfded6adce6cb1e17db..0000000000000000000000000000000000000000
--- a/rules/trace.mk
+++ /dev/null
@@ -1,21 +0,0 @@
-# -----------------------------------------------------------------------------
-#
-# (c) 2010 The University of Glasgow
-#
-# This file is part of the GHC build system.
-#
-# To understand how the build system works and how to modify it, see
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/architecture
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/modifying
-#
-# -----------------------------------------------------------------------------
-
-# A helpful little debug macro.  Call it from a macro like this:
-# 
-#  $(call trace, this-macro($1,$2,$3))
-#
-# And invoke the build system with TRACE=1 to turn on tracing.
-
-define trace
-$$(if $(TRACE),$$(warning $1),)
-endef
diff --git a/rules/way-prelims.mk b/rules/way-prelims.mk
deleted file mode 100644
index 4709149dff4bbeab19bd22d37762af8cfc6cf7be..0000000000000000000000000000000000000000
--- a/rules/way-prelims.mk
+++ /dev/null
@@ -1,36 +0,0 @@
-# -----------------------------------------------------------------------------
-#
-# (c) 2009 The University of Glasgow
-#
-# This file is part of the GHC build system.
-#
-# To understand how the build system works and how to modify it, see
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/architecture
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/modifying
-#
-# -----------------------------------------------------------------------------
-
-define way-prelims # $1 = way
-ifeq "$1" "v"
-$1__way  =
-$1_way_  =
-else
-$1__way  = _$1
-$1_way_  = $1_
-endif
-$1_osuf      = $$($1_way_)o
-$1_o-bootsuf = $$($1_way_)o-boot
-$1_hisuf     = $$($1_way_)hi
-$1_hcsuf     = $$($1_way_)hc
-$1_ssuf      = $$($1_way_)s
-
-ifneq "$(findstring dyn,$1)" ""
-#  If the way includes "dyn" then it's a dynamic lib way. We mangle the
-#  way name to remove "dyn" (or "_dyn") and we change the suffix to
-#  include the versioned dynamic lib extension (eg .so or .dynlib).
-#  For example: thr_debug_dyn_libsuf="_thr_debug-ghc6.11.20090426.so"
-$1_libsuf  = $$($(subst dyn,,$(subst _dyn,,$1))__way)-ghc$(ProjectVersion)$(soext)
-else
-$1_libsuf  = $$($1__way).a
-endif
-endef
diff --git a/testsuite/driver/testglobals.py b/testsuite/driver/testglobals.py
index 7ccbaa30249b85b23747198a41ead6f065a9450c..4c5f8d545b590ec079f60c4992425a2ddcb8e0ab 100644
--- a/testsuite/driver/testglobals.py
+++ b/testsuite/driver/testglobals.py
@@ -89,7 +89,7 @@ class TestConfig:
         # Verbosity level
         self.verbose = 2
 
-        # See Note [validate and testsuite speed] in toplevel Makefile.
+        # See Note [validate and testsuite speed] in `validate`
         self.speed = 1
 
         self.list_broken = False
diff --git a/testsuite/driver/testlib.py b/testsuite/driver/testlib.py
index 813e26f832735e6f9bdd87c873f3428e3ac9e5b0..432b19605306a84f1747c6acaa404782a0c0dc1d 100644
--- a/testsuite/driver/testlib.py
+++ b/testsuite/driver/testlib.py
@@ -1092,7 +1092,7 @@ def test_common_work(watcher: testutil.Watcher,
         do_ways = list(filter (ok_way,all_ways))
 
         # Only run all ways in slow mode.
-        # See Note [validate and testsuite speed] in toplevel Makefile.
+        # See Note [validate and testsuite speed] in `validate`
         if config.accept:
             # Only ever run one way
             do_ways = do_ways[:1]
diff --git a/testsuite/mk/test.mk b/testsuite/mk/test.mk
index 4728ab400e596fa56d70a14789bd0115100bd748..4ce9bbb8a0f0e90d7e39a279761ce67a4db91155 100644
--- a/testsuite/mk/test.mk
+++ b/testsuite/mk/test.mk
@@ -300,7 +300,7 @@ else
 set_list_broken =
 endif
 
-# See Note [validate and testsuite speed] in toplevel Makefile.
+# See Note [validate and testsuite speed] in `validate`
 ifneq "$(SPEED)" ""
 setspeed = -e config.speed="$(SPEED)"
 else ifeq "$(fast)" "YES"
@@ -356,7 +356,7 @@ accept:
 	$(MAKE) accept=YES
 
 fast fasttest:
-	# See Note [validate and testsuite speed] in toplevel Makefile.
+	# See Note [validate and testsuite speed] in `validate`
 	$(MAKE) SPEED=2
 
 slow slowtest:
diff --git a/testsuite/tests/linters/notes.stdout b/testsuite/tests/linters/notes.stdout
index f7f4ba63e1d18c490e7e4291a038fd6aeef5dbfe..00b3388183b9a22aab78d423097aebf71baf3d5a 100644
--- a/testsuite/tests/linters/notes.stdout
+++ b/testsuite/tests/linters/notes.stdout
@@ -50,7 +50,6 @@ ref    compiler/Language/Haskell/Syntax/Binds.hs:204:31:     Note [fun_id in Mat
 ref    compiler/Language/Haskell/Syntax/Pat.hs:336:12:     Note [Disambiguating record fields]
 ref    configure.ac:212:10:     Note [Linking ghc-bin against threaded stage0 RTS]
 ref    docs/core-spec/core-spec.mng:177:6:     Note [TyBinders]
-ref    ghc/ghc.mk:62:6:     Note [Linking ghc-bin against threaded stage0 RTS]
 ref    hadrian/src/Expression.hs:130:30:     Note [Linking ghc-bin against threaded stage0 RTS]
 ref    libraries/base/GHC/ST.hs:134:7:     Note [Definition of runRW#]
 ref    linters/lint-notes/Notes.hs:32:29:     Note [" <> T.unpack x <> "]
@@ -75,5 +74,4 @@ ref    testsuite/tests/typecheck/should_compile/tc228.hs:9:7:     Note [Inferenc
 ref    testsuite/tests/typecheck/should_compile/tc231.hs:12:16:     Note [Important subtlety in oclose]
 ref    testsuite/tests/typecheck/should_fail/UnliftedNewtypesMultiFieldGadt.hs:11:28:     Note [Kind-checking the field type]
 ref    testsuite/tests/typecheck/should_fail/tcfail093.hs:13:7:     Note [Important subtlety in oclose]
-ref    validate:412:14:     Note [Why is there no stage1 setup function?]
 
diff --git a/utils/check-exact/ghc.mk b/utils/check-exact/ghc.mk
deleted file mode 100644
index f8ad02948b8abd40b90feab0eac9225038381983..0000000000000000000000000000000000000000
--- a/utils/check-exact/ghc.mk
+++ /dev/null
@@ -1,18 +0,0 @@
-# -----------------------------------------------------------------------------
-#
-# (c) 2009 The University of Glasgow
-#
-# This file is part of the GHC build system.
-#
-# To understand how the build system works and how to modify it, see
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/architecture
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/modifying
-#
-# -----------------------------------------------------------------------------
-
-utils/check-exact_USES_CABAL                   = YES
-utils/check-exact_PACKAGE                      = check-exact
-utils/check-exact_dist-install_PROGNAME        = check-exact
-utils/check-exact_dist-install_INSTALL         = NO
-utils/check-exact_dist-install_INSTALL_INPLACE = YES
-$(eval $(call build-prog,utils/check-exact,dist-install,2))
diff --git a/utils/check-ppr/ghc.mk b/utils/check-ppr/ghc.mk
deleted file mode 100644
index 08e4062256d51335246423d12868fe5366e00203..0000000000000000000000000000000000000000
--- a/utils/check-ppr/ghc.mk
+++ /dev/null
@@ -1,18 +0,0 @@
-# -----------------------------------------------------------------------------
-#
-# (c) 2009 The University of Glasgow
-#
-# This file is part of the GHC build system.
-#
-# To understand how the build system works and how to modify it, see
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/architecture
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/modifying
-#
-# -----------------------------------------------------------------------------
-
-utils/check-ppr_USES_CABAL                   = YES
-utils/check-ppr_PACKAGE                      = check-ppr
-utils/check-ppr_dist-install_PROGNAME        = check-ppr
-utils/check-ppr_dist-install_INSTALL         = NO
-utils/check-ppr_dist-install_INSTALL_INPLACE = YES
-$(eval $(call build-prog,utils/check-ppr,dist-install,2))
diff --git a/utils/compare_sizes/ghc.mk b/utils/compare_sizes/ghc.mk
deleted file mode 100644
index d659a5e6d8816dbc7657df92ec246bd17f4fc93c..0000000000000000000000000000000000000000
--- a/utils/compare_sizes/ghc.mk
+++ /dev/null
@@ -1,9 +0,0 @@
-
-utils/compare_sizes_USES_CABAL = YES
-utils/compare_sizes_PACKAGE = compareSizes
-utils/compare_sizes_MODULES = Main
-utils/compare_sizes_dist-install_PROGNAME = compareSizes
-utils/compare_sizes_dist-install_INSTALL_INPLACE = NO
-
-$(eval $(call build-prog,utils/compare_sizes,dist-install,1))
-
diff --git a/utils/count-deps/ghc.mk b/utils/count-deps/ghc.mk
deleted file mode 100644
index 45259efee68fa448d66189f0b0e52358c25ad4dc..0000000000000000000000000000000000000000
--- a/utils/count-deps/ghc.mk
+++ /dev/null
@@ -1,18 +0,0 @@
-# -----------------------------------------------------------------------------
-#
-# (c) 2009 The University of Glasgow
-#
-# This file is part of the GHC build system.
-#
-# To understand how the build system works and how to modify it, see
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/architecture
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/modifying
-#
-# -----------------------------------------------------------------------------
-
-utils/count-deps_USES_CABAL                   = YES
-utils/count-deps_PACKAGE                      = count-deps
-utils/count-deps_dist-install_PROGNAME        = count-deps
-utils/count-deps_dist-install_INSTALL         = NO
-utils/count-deps_dist-install_INSTALL_INPLACE = YES
-$(eval $(call build-prog,utils/count-deps,dist-install,2))
diff --git a/utils/deriveConstants/ghc.mk b/utils/deriveConstants/ghc.mk
deleted file mode 100644
index 98c8633666f22790cc46b08624b5577aa34b3559..0000000000000000000000000000000000000000
--- a/utils/deriveConstants/ghc.mk
+++ /dev/null
@@ -1,20 +0,0 @@
-# -----------------------------------------------------------------------------
-#
-# (c) 2009-2012 The University of Glasgow
-#
-# This file is part of the GHC build system.
-#
-# To understand how the build system works and how to modify it, see
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/architecture
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/modifying
-#
-# -----------------------------------------------------------------------------
-
-utils/deriveConstants_USES_CABAL           = YES
-utils/deriveConstants_PACKAGE              = deriveConstants
-utils/deriveConstants_dist_PROGNAME        = deriveConstants
-utils/deriveConstants_dist_INSTALL         = NO
-utils/deriveConstants_dist_INSTALL_INPLACE = YES
-
-$(eval $(call build-prog,utils/deriveConstants,dist,0))
-
diff --git a/utils/gen-dll/ghc.mk b/utils/gen-dll/ghc.mk
deleted file mode 100644
index 77c75f07ed6fd684b3ff258ff2e7bef4b13ec843..0000000000000000000000000000000000000000
--- a/utils/gen-dll/ghc.mk
+++ /dev/null
@@ -1,19 +0,0 @@
-# -----------------------------------------------------------------------------
-#
-# (c) 2009 The University of Glasgow
-#
-# This file is part of the GHC build system.
-#
-# To understand how the build system works and how to modify it, see
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/architecture
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/modifying
-#
-# -----------------------------------------------------------------------------
-
-utils/gen-dll_USES_CABAL           = YES
-utils/gen-dll_PACKAGE              = gen-dll
-utils/gen-dll_dist_PROGNAME        = gen-dll
-utils/gen-dll_dist_INSTALL         = NO
-utils/gen-dll_dist_INSTALL_INPLACE = YES
-
-$(eval $(call build-prog,utils/gen-dll,dist,0))
diff --git a/utils/genapply/ghc.mk b/utils/genapply/ghc.mk
deleted file mode 100644
index 5721c9069a8e38ef163a41369b49d93701626de4..0000000000000000000000000000000000000000
--- a/utils/genapply/ghc.mk
+++ /dev/null
@@ -1,30 +0,0 @@
-# -----------------------------------------------------------------------------
-#
-# (c) 2009 The University of Glasgow
-#
-# This file is part of the GHC build system.
-#
-# To understand how the build system works and how to modify it, see
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/architecture
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/modifying
-#
-# -----------------------------------------------------------------------------
-
-utils/genapply_USES_CABAL           = YES
-utils/genapply_PACKAGE              = genapply
-utils/genapply_dist_PROGNAME        = genapply
-utils/genapply_dist_INSTALL         = NO
-utils/genapply_dist_INSTALL_INPLACE = YES
-
-utils/dist/package-data.mk : $(includes_1_H_PLATFORM)
-utils/dist/package-data.mk : $(includes_1_H_CONFIG)
-
-ifeq "$(GhcUnregisterised)" "YES"
-utils/genapply_CONFIGURE_OPTS = --flag unregisterised
-endif
-
-$(eval $(call build-prog,utils/genapply,dist,0))
-
-# Purposely do the wrong stage for HOST := TARGET hack.
-# See Note [Genapply target as host for RTS macros].
-utils/genapply_dist_CC_OPTS += $(addprefix -Irts/include,$(includes_dist-install_DIST_INCLUDE_DIRS))
diff --git a/utils/genprimopcode/ghc.mk b/utils/genprimopcode/ghc.mk
deleted file mode 100644
index 47250711a914af6ca5101666d6bc5b0a65e999fe..0000000000000000000000000000000000000000
--- a/utils/genprimopcode/ghc.mk
+++ /dev/null
@@ -1,19 +0,0 @@
-# -----------------------------------------------------------------------------
-#
-# (c) 2009 The University of Glasgow
-#
-# This file is part of the GHC build system.
-#
-# To understand how the build system works and how to modify it, see
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/architecture
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/modifying
-#
-# -----------------------------------------------------------------------------
-
-utils/genprimopcode_USES_CABAL           = YES
-utils/genprimopcode_PACKAGE              = genprimopcode
-utils/genprimopcode_dist_PROGNAME        = genprimopcode
-utils/genprimopcode_dist_INSTALL         = NO
-utils/genprimopcode_dist_INSTALL_INPLACE = YES
-
-$(eval $(call build-prog,utils/genprimopcode,dist,0))
diff --git a/utils/ghc-cabal/ghc.mk b/utils/ghc-cabal/ghc.mk
deleted file mode 100644
index 035ee8adaaf824b31aedcad76d249bf934d7979d..0000000000000000000000000000000000000000
--- a/utils/ghc-cabal/ghc.mk
+++ /dev/null
@@ -1,97 +0,0 @@
-# -----------------------------------------------------------------------------
-#
-# (c) 2009 The University of Glasgow
-#
-# This file is part of the GHC build system.
-#
-# To understand how the build system works and how to modify it, see
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/architecture
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/modifying
-#
-# -----------------------------------------------------------------------------
-
-# Bootstrapping ghc-cabal
-
-# Euch, hideous hack:
-# XXX This should be in a different Makefile
-CABAL_DOTTED_VERSION := $(shell grep "^version:" libraries/Cabal/Cabal/Cabal.cabal | sed "s/^version: *//")
-CABAL_VERSION := $(subst .,$(comma),$(CABAL_DOTTED_VERSION))
-CABAL_CONSTRAINT := --constraint="Cabal == $(CABAL_DOTTED_VERSION)"
-
-# Starting with GHC 8.0 we make use of GHC's native ability to
-# generate MIN_VERSION_<pkgname>() CPP macros. The generation of those
-# macros is triggered by `-hide-all-packages`, so we have to explicitly
-# enumerate all packages we need in scope.
-CABAL_BUILD_DEPS := ghc-prim base binary array transformers time containers bytestring deepseq process pretty directory filepath template-haskell text
-ifeq "$(Windows_Host)" "YES"
-CABAL_BUILD_DEPS += Win32
-else
-CABAL_BUILD_DEPS += unix
-endif
-
-ghc-cabal_DIST_BINARY_NAME = ghc-cabal$(exeext0)
-ghc-cabal_DIST_BINARY = utils/ghc-cabal/dist/build/tmp/$(ghc-cabal_DIST_BINARY_NAME)
-ghc-cabal_INPLACE = inplace/bin/$(ghc-cabal_DIST_BINARY_NAME)
-
-ifneq "$(BINDIST)" "YES"
-$(ghc-cabal_INPLACE) : $(ghc-cabal_DIST_BINARY) | $$(dir $$@)/.
-	"$(CP)" $< $@
-
-CABAL_LEXER_DEP := libraries/Cabal/Cabal-syntax/src/Distribution/Fields/Lexer.hs
-
-$(ghc-cabal_DIST_BINARY): $(wildcard libraries/Cabal/Cabal/src/Distribution/*/*/*.hs)
-$(ghc-cabal_DIST_BINARY): $(wildcard libraries/Cabal/Cabal/src/Distribution/*/*.hs)
-$(ghc-cabal_DIST_BINARY): $(wildcard libraries/Cabal/Cabal/src/Distribution/*.hs)
-$(ghc-cabal_DIST_BINARY): $(wildcard libraries/Cabal/Cabal-syntax/src/Distribution/*.hs)
-
-# N.B. Compile with -O0 since this is not a performance-critical executable
-# and the Cabal takes nearly twice as long to build with -O1. See #16817.
-$(ghc-cabal_DIST_BINARY): $(CABAL_LEXER_DEP) utils/ghc-cabal/Main.hs $(TOUCH_DEP) | $$(dir $$@)/. bootstrapping/.
-	"$(GHC)" $(SRC_HC_OPTS) \
-	       $(addprefix -optc, $(SRC_CC_OPTS) $(CONF_CC_OPTS_STAGE0)) \
-	       $(addprefix -optl, $(SRC_LD_OPTS) $(CONF_GCC_LINKER_OPTS_STAGE0)) \
-		   -O0 \
-		   -XHaskell2010 \
-	       -hide-all-packages \
-	       -package-env - \
-	       $(addprefix -package , $(CABAL_BUILD_DEPS)) \
-	       --make utils/ghc-cabal/Main.hs -o $@ \
-	       -no-user-package-db \
-	       -Wall -fno-warn-unused-imports -fno-warn-warnings-deprecations \
-	       -DCABAL_VERSION=$(CABAL_VERSION) \
-	       -DBOOTSTRAPPING \
-	       -odir  bootstrapping \
-	       -hidir bootstrapping \
-	       $(CABAL_LEXER_DEP) \
-	       -ilibraries/Cabal/Cabal/src \
-	       -ilibraries/Cabal/Cabal-syntax/src \
-	       -ilibraries/binary/src \
-	       -ilibraries/filepath \
-	       -ilibraries/hpc \
-	       -ilibraries/mtl \
-	       -ilibraries/parsec/src \
-	       $(utils/ghc-cabal_dist_EXTRA_HC_OPTS) \
-	       $(EXTRA_HC_OPTS)
-	"$(TOUCH_CMD)" $@
-endif
-
-# touch is required, because otherwise if mkdirhier is newer, we
-# repeatedly rebuild ghc-cabal.
-
-$(eval $(call clean-target,utils/ghc-cabal,dist,\
-   utils/ghc-cabal/dist bootstrapping))
-
-$(eval $(call all-target,utils/ghc-cabal,$(ghc-cabal_INPLACE)))
-
-# -----------------------------------------------------------------------------
-# Now make another copy that goes in bindists. This needs to be built
-# with the in-tree compiler.
-
-utils/ghc-cabal_USES_CABAL                   = YES
-utils/ghc-cabal_PACKAGE                      = ghc-cabal
-utils/ghc-cabal_dist-install_PROGNAME        = ghc-cabal
-utils/ghc-cabal_dist-install_INSTALL_INPLACE = NO
-utils/ghc-cabal_dist-install_WANT_BINDIST_WRAPPER = YES
-utils/ghc-cabal_dist-install_MODULES         = Main
-
-$(eval $(call build-prog,utils/ghc-cabal,dist-install,1))
diff --git a/utils/ghc-pkg/ghc.mk b/utils/ghc-pkg/ghc.mk
deleted file mode 100644
index 029d0b86e6e77908ab744849309676ea0d7c84fc..0000000000000000000000000000000000000000
--- a/utils/ghc-pkg/ghc.mk
+++ /dev/null
@@ -1,98 +0,0 @@
-# -----------------------------------------------------------------------------
-#
-# (c) 2009-2012 The University of Glasgow
-#
-# This file is part of the GHC build system.
-#
-# To understand how the build system works and how to modify it, see
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/architecture
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/modifying
-#
-# -----------------------------------------------------------------------------
-
-# -----------------------------------------------------------------------------
-# Bootstrapping ghc-pkg
-
-utils/ghc-pkg_PACKAGE = ghc-pkg
-
-# Note [Why build certain utils twice?]
-# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-# We build certain utils twice: once with stage0, and once with stage1.
-# Examples are ghc-pkg and hsc2hs.
-#
-# These tools are needed during the bootstrapping process, so we have to use
-# stage0 to build them at first (stage1 doesn't exist yet). (side note: they're
-# also used later in the build process). We install them inplace.
-#
-# But we can't install these copies when you run 'make install'. The reason is
-# that when DYNAMIC_GHC_PROGRAMS=YES, we want to install copies that are
-# dynamically linked. But the stage0 copies are either statically linked, or
-# linked against libraries on the build machine.
-#
-# Therefore we build fresh copies, using the stage1 compiler, and install them
-# when you run 'make install'. They are not used for any other purpose.
-
-# -----------------------------------------------------------------------------
-# Build ghc-pkg with the stage0 compiler in the dist directory, and install
-# inplace. This is the copy we use during in-tree development.
-utils/ghc-pkg_dist_USES_CABAL = YES
-utils/ghc-pkg_dist_PROGNAME = ghc-pkg
-utils/ghc-pkg_dist_SHELL_WRAPPER = YES
-utils/ghc-pkg_dist_INSTALL_INPLACE = YES
-
-# When cross-built ghc-stage2 is installed 'make install' needs to call
-# native ghc-pkg (not the cross-built one) to register installed packages
-# 'ghc-pkg_DIST_BINARY' variable only refer to native binary.
-ghc-pkg_DIST_BINARY_NAME = ghc-pkg$(exeext0)
-ghc-pkg_DIST_BINARY = utils/ghc-pkg/dist/build/tmp/$(ghc-pkg_DIST_BINARY_NAME)
-
-# See Note [Stage1Only vs stage=1] in mk/config.mk.in.
-ifeq "$(Stage1Only)" "YES"
-# Install the copy of ghc-pkg from the dist directory when running 'make
-# install' (it's the only copy we have at this stage).
-utils/ghc-pkg_dist_INSTALL = YES
-utils/ghc-pkg_dist_INSTALL_SHELL_WRAPPER_NAME = ghc-pkg-$(ProjectVersion)
-endif
-
-ifeq "$(WITH_TERMINFO)" "NO"
-utils/ghc-pkg_dist-install_CONFIGURE_OPTS += -f-terminfo
-endif
-
-$(eval $(call build-prog,utils/ghc-pkg,dist,0))
-
-# ghc-pkg uses `settings` to figure out the target platform to figure out a
-# subdirectory for the user pkg db. So make sure `settings` exists (alternative
-# is to specify global package db only).
-$(ghc-pkg_INPLACE) : | $(INPLACE_PACKAGE_CONF)/. $(INPLACE_LIB)/settings
-
-# -----------------------------------------------------------------------------
-# Build another copy of ghc-pkg with the stage1 compiler in the dist-install
-# directory. Don't install it inplace (we use the dist copy there), but do
-# install it when running 'make install'.
-#
-# See Note [Why build certain utils twice?].
-
-# See Note [Stage1Only vs stage=1] in mk/config.mk.in.
-ifneq "$(Stage1Only)" "YES"
-utils/ghc-pkg_dist-install_USES_CABAL = YES
-utils/ghc-pkg_dist-install_PROGNAME = ghc-pkg
-utils/ghc-pkg_dist-install_SHELL_WRAPPER = YES
-utils/ghc-pkg_dist-install_INSTALL_INPLACE = NO
-utils/ghc-pkg_dist-install_INSTALL = YES
-utils/ghc-pkg_dist-install_INSTALL_SHELL_WRAPPER_NAME = ghc-pkg-$(ProjectVersion)
-
-$(eval $(call build-prog,utils/ghc-pkg,dist-install,1))
-endif
-
-# -----------------------------------------------------------------------------
-# Link ghc-pkg to ghc-pkg-$(ProjectVersion) when installing
-
-ifeq "$(Windows_Host)" "NO"
-install: install_utils/ghc-pkg_link
-
-.PHONY: install_utils/ghc-pkg_link
-install_utils/ghc-pkg_link: 
-	$(INSTALL_DIR) "$(DESTDIR)$(bindir)"
-	$(call removeFiles,"$(DESTDIR)$(bindir)/$(CrossCompilePrefix)ghc-pkg")
-	$(LN_S) $(CrossCompilePrefix)ghc-pkg-$(ProjectVersion) "$(DESTDIR)$(bindir)/$(CrossCompilePrefix)ghc-pkg"
-endif
diff --git a/utils/hp2ps/ghc.mk b/utils/hp2ps/ghc.mk
deleted file mode 100644
index d7797be3e930d1a23a2fcbb525fc9842f58738f4..0000000000000000000000000000000000000000
--- a/utils/hp2ps/ghc.mk
+++ /dev/null
@@ -1,42 +0,0 @@
-# -----------------------------------------------------------------------------
-#
-# (c) 2009 The University of Glasgow
-#
-# This file is part of the GHC build system.
-#
-# To understand how the build system works and how to modify it, see
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/architecture
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/modifying
-#
-# -----------------------------------------------------------------------------
-
-# stage0
-utils/hp2ps_dist_C_SRCS          = AreaBelow.c Curves.c Error.c Main.c \
-                                   Reorder.c TopTwenty.c AuxFile.c Deviation.c \
-                                   HpFile.c Marks.c Scale.c TraceElement.c \
-                                   Axes.c Dimensions.c Key.c PsFile.c Shade.c \
-                                   Utilities.c
-utils/hp2ps_dist_EXTRA_LIBRARIES = m
-utils/hp2ps_dist_PROGNAME        = hp2ps
-utils/hp2ps_dist_INSTALL_INPLACE = YES
-utils/hp2ps_dist_SHELL_WRAPPER              = YES
-utils/hp2ps_dist_INSTALL_SHELL_WRAPPER_NAME = hp2ps
-
-# stage 1
-utils/hp2ps_dist-install_C_SRCS = $(utils/hp2ps_dist_C_SRCS)
-utils/hp2ps_dist-install_EXTRA_LIBRARIES = $(utils/hp2ps_dist_EXTRA_LIBRARIES)
-utils/hp2ps_dist-install_PROGNAME        = $(utils/hp2ps_dist_PROGNAME)
-utils/hp2ps_dist-install_INSTALL_INPLACE = NO
-utils/hp2ps_dist-install_SHELL_WRAPPER              = YES
-utils/hp2ps_dist-install_INSTALL_SHELL_WRAPPER_NAME = $(utils/hp2ps_dist_INSTALL_SHELL_WRAPPER_NAME)
-
-ifeq "$(Stage1Only)" "YES"
-utils/hp2ps_dist_INSTALL         = YES
-utils/hp2ps_dist-install_INSTALL = NO
-else
-utils/hp2ps_dist_INSTALL         = NO
-utils/hp2ps_dist-install_INSTALL = YES
-endif
-
-$(eval $(call build-prog,utils/hp2ps,dist,0))
-$(eval $(call build-prog,utils/hp2ps,dist-install,1))
diff --git a/utils/hpc/ghc.mk b/utils/hpc/ghc.mk
deleted file mode 100644
index 9b2bce238eac9bae7db753c19d29632c7f7b27b6..0000000000000000000000000000000000000000
--- a/utils/hpc/ghc.mk
+++ /dev/null
@@ -1,21 +0,0 @@
-# -----------------------------------------------------------------------------
-#
-# (c) 2009 The University of Glasgow
-#
-# This file is part of the GHC build system.
-#
-# To understand how the build system works and how to modify it, see
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/architecture
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/modifying
-#
-# -----------------------------------------------------------------------------
-
-utils/hpc_USES_CABAL                   = YES
-utils/hpc_PACKAGE                      = hpc-bin
-utils/hpc_dist-install_INSTALL         = YES
-utils/hpc_dist-install_INSTALL_INPLACE = YES
-utils/hpc_dist-install_PROGNAME        = hpc
-utils/hpc_dist-install_SHELL_WRAPPER   = YES
-utils/hpc_dist-install_INSTALL_SHELL_WRAPPER_NAME = hpc
-
-$(eval $(call build-prog,utils/hpc,dist-install,1))
diff --git a/utils/iserv/ghc.mk b/utils/iserv/ghc.mk
deleted file mode 100644
index 74f90e60b7ac29ce1e01307652a19cc73d47676c..0000000000000000000000000000000000000000
--- a/utils/iserv/ghc.mk
+++ /dev/null
@@ -1,113 +0,0 @@
-# -----------------------------------------------------------------------------
-#
-# (c) 2009-2012 The University of Glasgow
-#
-# This file is part of the GHC build system.
-#
-# To understand how the build system works and how to modify it, see
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/architecture
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/modifying
-#
-# -----------------------------------------------------------------------------
-
-utils/iserv_USES_CABAL = YES
-utils/iserv_PACKAGE = iserv
-utils/iserv_EXECUTABLE = iserv
-
-ifeq "$(GhcDebugged)" "YES"
-utils/iserv_stage2_MORE_HC_OPTS += -debug
-utils/iserv_stage2_p_MORE_HC_OPTS += -debug
-utils/iserv_stage2_dyn_MORE_HC_OPTS += -debug
-endif
-
-ifeq "$(GhcThreaded)" "YES"
-utils/iserv_stage2_MORE_HC_OPTS += -threaded
-utils/iserv_stage2_p_MORE_HC_OPTS += -threaded
-utils/iserv_stage2_dyn_MORE_HC_OPTS += -threaded
-endif
-
-# Add -Wl,--export-dynamic enables GHCi to load dynamic objects that
-# refer to the RTS.  This is harmless if you don't use it (adds a bit
-# of overhead to startup and increases the binary sizes) but if you
-# need it there's no alternative.
-ifeq "$(TargetElf)" "YES"
-ifneq "$(TargetOS_CPP)" "solaris2"
-# The Solaris linker does not support --export-dynamic option. It also
-# does not need it since it exports all dynamic symbols by default
-utils/iserv_stage2_MORE_HC_OPTS += -optl-Wl,--export-dynamic
-utils/iserv_stage2_p_MORE_HC_OPTS += -optl-Wl,--export-dynamic
-utils/iserv_stage2_dyn_MORE_HC_OPTS += -optl-Wl,--export-dynamic
-endif
-endif
-
-# Override the default way, because we want a specific version of this
-# program for each way.  Note that it's important to do this even for
-# the vanilla version, otherwise we get a dynamic executable when
-# DYNAMIC_GHC_PROGRAMS=YES.
-utils/iserv_stage2_PROGRAM_WAY = v
-utils/iserv_stage2_p_PROGRAM_WAY = p
-utils/iserv_stage2_dyn_PROGRAM_WAY = dyn
-
-utils/iserv_stage2_PROGNAME = ghc-iserv
-utils/iserv_stage2_p_PROGNAME = ghc-iserv-prof
-utils/iserv_stage2_dyn_PROGNAME = ghc-iserv-dyn
-
-utils/iserv_stage2_MORE_HC_OPTS += -no-hs-main
-utils/iserv_stage2_p_MORE_HC_OPTS += -no-hs-main
-utils/iserv_stage2_dyn_MORE_HC_OPTS += -no-hs-main
-
-utils/iserv_stage2_INSTALL = YES
-utils/iserv_stage2_p_INSTALL = YES
-utils/iserv_stage2_dyn_INSTALL = YES
-
-# Install in $(libexec), not in $(bindir)
-utils/iserv_stage2_TOPDIR = YES
-utils/iserv_stage2_p_TOPDIR = YES
-utils/iserv_stage2_dyn_TOPDIR = YES
-
-utils/iserv_stage2_INSTALL_INPLACE = YES
-utils/iserv_stage2_p_INSTALL_INPLACE = YES
-utils/iserv_stage2_dyn_INSTALL_INPLACE = YES
-
-ifeq "$(CLEANING)" "YES"
-
-NEED_iserv = YES
-NEED_iserv_p = YES
-NEED_iserv_dyn = YES
-
-else
-
-ifneq "$(findstring v, $(GhcLibWays))" ""
-NEED_iserv = YES
-else
-NEED_iserv = NO
-endif
-
-ifneq "$(findstring p, $(GhcLibWays))" ""
-NEED_iserv_p = YES
-else
-NEED_iserv_p = NO
-endif
-
-ifneq "$(findstring dyn, $(GhcLibWays))" ""
-NEED_iserv_dyn = YES
-else
-NEED_iserv_dyn = NO
-endif
-endif
-
-ifeq "$(NEED_iserv)" "YES"
-$(eval $(call build-prog,utils/iserv,stage2,1))
-endif
-
-ifeq "$(NEED_iserv_p)" "YES"
-$(eval $(call build-prog,utils/iserv,stage2_p,1))
-endif
-
-ifeq "$(NEED_iserv_dyn)" "YES"
-$(eval $(call build-prog,utils/iserv,stage2_dyn,1))
-endif
-
-all_ghc_stage2 : $(iserv-stage2_INPLACE)
-all_ghc_stage2 : $(iserv-stage2_p_INPLACE)
-all_ghc_stage2 : $(iserv-stage2_dyn_INPLACE)
diff --git a/utils/mkdirhier/ghc.mk b/utils/mkdirhier/ghc.mk
deleted file mode 100644
index a574b8686116bf2a48c719af4b94f4063f6bb7f5..0000000000000000000000000000000000000000
--- a/utils/mkdirhier/ghc.mk
+++ /dev/null
@@ -1,22 +0,0 @@
-# -----------------------------------------------------------------------------
-#
-# (c) 2009 The University of Glasgow
-#
-# This file is part of the GHC build system.
-#
-# To understand how the build system works and how to modify it, see
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/architecture
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/modifying
-#
-# -----------------------------------------------------------------------------
-
-$(MKDIRHIER) : utils/mkdirhier/mkdirhier.sh
-	mkdir -p $(INPLACE_BIN)
-	mkdir -p $(INPLACE_LIB)
-	$(call removeFiles,$@)
-	echo '#!/bin/sh'  		 >> $@
-	cat utils/mkdirhier/mkdirhier.sh >> $@
-	$(EXECUTABLE_FILE) $@
-
-$(eval $(call all-target,utils/mkdirhier,$(MKDIRHIER)))
-$(eval $(call clean-target,utils/mkdirhier,,$(MKDIRHIER)))
diff --git a/utils/remote-iserv/ghc.mk b/utils/remote-iserv/ghc.mk
deleted file mode 100644
index f0cd9ffa499b980f09695d0fdd21e6d845e630f8..0000000000000000000000000000000000000000
--- a/utils/remote-iserv/ghc.mk
+++ /dev/null
@@ -1,113 +0,0 @@
-# -----------------------------------------------------------------------------
-#
-# (c) 2009-2012 The University of Glasgow
-#
-# This file is part of the GHC build system.
-#
-# To understand how the build system works and how to modify it, see
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/architecture
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/modifying
-#
-# -----------------------------------------------------------------------------
-
-utils/remote-iserv_USES_CABAL = YES
-utils/remote-iserv_PACKAGE = remote-iserv
-utils/remote-iserv_EXECUTABLE = remote-iserv
-
-ifeq "$(GhcDebugged)" "YES"
-utils/remote-iserv_stage2_MORE_HC_OPTS += -debug
-utils/remote-iserv_stage2_p_MORE_HC_OPTS += -debug
-utils/remote-iserv_stage2_dyn_MORE_HC_OPTS += -debug
-endif
-
-ifeq "$(GhcThreaded)" "YES"
-utils/remote-iserv_stage2_MORE_HC_OPTS += -threaded
-utils/remote-iserv_stage2_p_MORE_HC_OPTS += -threaded
-utils/remote-iserv_stage2_dyn_MORE_HC_OPTS += -threaded
-endif
-
-# Add -Wl,--export-dynamic enables GHCi to load dynamic objects that
-# refer to the RTS.  This is harmless if you don't use it (adds a bit
-# of overhead to startup and increases the binary sizes) but if you
-# need it there's no alternative.
-ifeq "$(TargetElf)" "YES"
-ifneq "$(TargetOS_CPP)" "solaris2"
-# The Solaris linker does not support --export-dynamic option. It also
-# does not need it since it exports all dynamic symbols by default
-utils/remote-iserv_stage2_MORE_HC_OPTS += -optl-Wl,--export-dynamic
-utils/remote-iserv_stage2_p_MORE_HC_OPTS += -optl-Wl,--export-dynamic
-utils/remote-iserv_stage2_dyn_MORE_HC_OPTS += -optl-Wl,--export-dynamic
-endif
-endif
-
-# Override the default way, because we want a specific version of this
-# program for each way.  Note that it's important to do this even for
-# the vanilla version, otherwise we get a dynamic executable when
-# DYNAMIC_GHC_PROGRAMS=YES.
-utils/remote-iserv_stage2_PROGRAM_WAY = v
-utils/remote-iserv_stage2_p_PROGRAM_WAY = p
-utils/remote-iserv_stage2_dyn_PROGRAM_WAY = dyn
-
-utils/remote-iserv_stage2_PROGNAME = ghc-iserv
-utils/remote-iserv_stage2_p_PROGNAME = ghc-iserv-prof
-utils/remote-iserv_stage2_dyn_PROGNAME = ghc-iserv-dyn
-
-utils/remote-iserv_stage2_MORE_HC_OPTS += -no-hs-main
-utils/remote-iserv_stage2_p_MORE_HC_OPTS += -no-hs-main
-utils/remote-iserv_stage2_dyn_MORE_HC_OPTS += -no-hs-main
-
-utils/remote-iserv_stage2_INSTALL = YES
-utils/remote-iserv_stage2_p_INSTALL = YES
-utils/remote-iserv_stage2_dyn_INSTALL = YES
-
-# Install in $(libexec), not in $(bindir)
-utils/remote-iserv_stage2_TOPDIR = YES
-utils/remote-iserv_stage2_p_TOPDIR = YES
-utils/remote-iserv_stage2_dyn_TOPDIR = YES
-
-utils/remote-iserv_stage2_INSTALL_INPLACE = YES
-utils/remote-iserv_stage2_p_INSTALL_INPLACE = YES
-utils/remote-iserv_stage2_dyn_INSTALL_INPLACE = YES
-
-ifeq "$(CLEANING)" "YES"
-
-NEED_iserv = YES
-NEED_iserv_p = YES
-NEED_iserv_dyn = YES
-
-else
-
-ifneq "$(findstring v, $(GhcLibWays))" ""
-NEED_iserv = YES
-else
-NEED_iserv = NO
-endif
-
-ifneq "$(findstring p, $(GhcLibWays))" ""
-NEED_iserv_p = YES
-else
-NEED_iserv_p = NO
-endif
-
-ifneq "$(findstring dyn, $(GhcLibWays))" ""
-NEED_iserv_dyn = YES
-else
-NEED_iserv_dyn = NO
-endif
-endif
-
-ifeq "$(NEED_iserv)" "YES"
-$(eval $(call build-prog,utils/remote-iserv,stage2,1))
-endif
-
-ifeq "$(NEED_iserv_p)" "YES"
-$(eval $(call build-prog,utils/remote-iserv,stage2_p,1))
-endif
-
-ifeq "$(NEED_iserv_dyn)" "YES"
-$(eval $(call build-prog,utils/remote-iserv,stage2_dyn,1))
-endif
-
-all_ghc_stage2 : $(remote-iserv-stage2_INPLACE)
-all_ghc_stage2 : $(remote-iserv-stage2_p_INPLACE)
-all_ghc_stage2 : $(remote-iserv-stage2_dyn_INPLACE)
diff --git a/utils/runghc/ghc.mk b/utils/runghc/ghc.mk
deleted file mode 100644
index 76272d9d80a8faf3234e91bf846463310291acf9..0000000000000000000000000000000000000000
--- a/utils/runghc/ghc.mk
+++ /dev/null
@@ -1,43 +0,0 @@
-# -----------------------------------------------------------------------------
-#
-# (c) 2009 The University of Glasgow
-#
-# This file is part of the GHC build system.
-#
-# To understand how the build system works and how to modify it, see
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/architecture
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/modifying
-#
-# -----------------------------------------------------------------------------
-
-utils/runghc_PACKAGE = runghc
-utils/runghc_dist-install_USES_CABAL = YES
-utils/runghc_dist-install_PROGNAME = runghc
-utils/runghc_dist-install_SHELL_WRAPPER = YES
-utils/runghc_dist-install_INSTALL = YES
-utils/runghc_dist-install_INSTALL_INPLACE = YES
-utils/runghc_dist-install_INSTALL_SHELL_WRAPPER_NAME = runghc-$(ProjectVersion)
-
-# Be explicit about which version of ghc to call (#9054).
-define utils/runghc_dist-install_INPLACE_SHELL_WRAPPER_EXTRA
-echo 'ghcprog="$(ghc_stage2_INPLACE_SHELL_WRAPPER_NAME)"' >> "$(WRAPPER)"
-endef
-define utils/runghc_dist-install_INSTALL_SHELL_WRAPPER_EXTRA
-echo 'ghcprog="$(ghc_stage$(INSTALL_GHC_STAGE)_INSTALL_SHELL_WRAPPER_NAME)"' >> "$(WRAPPER)"
-endef
-
-$(eval $(call build-prog,utils/runghc,dist-install,1))
-
-install: install_runhaskell
-
-.PHONY: install_runhaskell
-ifeq "$(Windows_Host)" "YES"
-install_runhaskell: install_bins
-	"$(CP)" $(DESTDIR)$(bindir)/$(CrossCompilePrefix)runghc$(exeext1) $(DESTDIR)$(bindir)/$(CrossCompilePrefix)runhaskell$(exeext1)
-else
-install_runhaskell:
-	$(call removeFiles,"$(DESTDIR)$(bindir)/$(CrossCompilePrefix)runhaskell")
-	$(LN_S) $(CrossCompilePrefix)runghc "$(DESTDIR)$(bindir)/$(CrossCompilePrefix)runhaskell"
-	$(call removeFiles,"$(DESTDIR)$(bindir)/$(CrossCompilePrefix)runghc")
-	$(LN_S) $(CrossCompilePrefix)runghc-$(ProjectVersion) "$(DESTDIR)$(bindir)/$(CrossCompilePrefix)runghc"
-endif
diff --git a/utils/testremove/ghc.mk b/utils/testremove/ghc.mk
deleted file mode 100644
index ac9ef6ce03115b4b41dc71715f9dec9aa4f31f9b..0000000000000000000000000000000000000000
--- a/utils/testremove/ghc.mk
+++ /dev/null
@@ -1,9 +0,0 @@
-
-.PHONY: utils/testremove_all
-utils/testremove_all: utils/testremove/wouldrm utils/testremove/checkremove
-
-utils/testremove/wouldrm: $$@.hs
-	$(GHC_STAGE1) --make -O $@
-
-utils/testremove/checkremove: $$@.hs
-	$(GHC_STAGE1) --make -O $@
diff --git a/utils/touchy/ghc.mk b/utils/touchy/ghc.mk
deleted file mode 100644
index 9c093c19cf5b5d8a79774b5acac26d1e2e8edcfd..0000000000000000000000000000000000000000
--- a/utils/touchy/ghc.mk
+++ /dev/null
@@ -1,18 +0,0 @@
-# -----------------------------------------------------------------------------
-#
-# (c) 2009 The University of Glasgow
-#
-# This file is part of the GHC build system.
-#
-# To understand how the build system works and how to modify it, see
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/architecture
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/modifying
-#
-# -----------------------------------------------------------------------------
-
-utils/touchy_dist_C_SRCS          = touchy.c
-utils/touchy_dist_PROGNAME        = touchy
-utils/touchy_dist_TOPDIR          = YES
-utils/touchy_dist_INSTALL         = YES
-utils/touchy_dist_INSTALL_INPLACE = YES
-$(eval $(call build-prog,utils/touchy,dist,0))
diff --git a/utils/unlit/ghc.mk b/utils/unlit/ghc.mk
deleted file mode 100644
index fe38cbbd0fd0f640b3ea5c7e7688cf55ded58f6b..0000000000000000000000000000000000000000
--- a/utils/unlit/ghc.mk
+++ /dev/null
@@ -1,34 +0,0 @@
-# -----------------------------------------------------------------------------
-#
-# (c) 2009 The University of Glasgow
-#
-# This file is part of the GHC build system.
-#
-# To understand how the build system works and how to modify it, see
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/architecture
-#      https://gitlab.haskell.org/ghc/ghc/wikis/building/modifying
-#
-# -----------------------------------------------------------------------------
-
-# built by ghc-stage0
-utils/unlit_dist_C_SRCS  = unlit.c fs.c
-utils/unlit_dist_PROGNAME = unlit
-utils/unlit_dist_TOPDIR  = YES
-utils/unlit_dist_INSTALL_INPLACE = YES
-
-# built by ghc-stage1
-utils/unlit_dist-install_C_SRCS = $(utils/unlit_dist_C_SRCS)
-utils/unlit_dist-install_PROGNAME = $(utils/unlit_dist_PROGNAME)
-utils/unlit_dist-install_TOPDIR = $(utils/unlit_dist_TOPDIR)
-utils/unlit_dist-install_INSTALL_INPLACE = NO
-
-ifeq "$(Stage1Only)" "YES"
-utils/unlit_dist_INSTALL         = YES
-utils/unlit_dist-install_INSTALL = NO
-else
-utils/unlit_dist_INSTALL         = NO
-utils/unlit_dist-install_INSTALL = YES
-endif
-
-$(eval $(call build-prog,utils/unlit,dist,0))
-$(eval $(call build-prog,utils/unlit,dist-install,1))
diff --git a/validate b/validate
index 6031b7d5ca777f4c9af7c8349bcbf26591d8b028..685009634988d283f1a6e0ab9c21810315d23f48 100755
--- a/validate
+++ b/validate
@@ -65,6 +65,42 @@ Flags:
 EOF
 }
 
+# Note [validate and testsuite speed]
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+# There are 3 different validate and testsuite speed settings:
+# fast, normal and slow.
+#
+#                              how    how   used
+#           cd tests  config.  many   many  by
+# validate  && make   speed=   tests  ways  whom
+# =============================================================================
+# --fast    fast      2        some   1+exs Travis (to stay within time limit)
+# --normal  test      1        all    1+exs Phabricator (slow takes too long?)
+# --slow    slow      0        all    all   Nightly (slow is ok)
+#
+#           accept    1        all    1
+#
+# `--fast` and `--normal` run one default way, as well as any other ways which
+# are explicitly requested by the test using extra_ways().
+#
+# `make accept` should run all tests exactly once. There is no point in
+# accepting a test for multiple ways, since it should produce the same output
+# for all ways.
+#
+# To make sure all .stderr and .stdout files in the testsuite are never
+# out-of-date, it is useful if CI runs each test at least once.
+
+# Note [Default build system verbosity]
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+# From https://gitlab.haskell.org/ghc/ghc/wikis/design/build-system:
+#
+#   "The build system should clearly report what it's doing (and sometimes
+#   why), without being too verbose. It should emit actual command lines as
+#   much as possible, so that they can be inspected and cut & pasted."
+#
+# That should be the default. Only suppress commands, by setting V=0 and using
+# `make -s`, when user explicitly asks for it with `./validate --quiet`.
+
 no_clean=0
 testsuite_only=0
 build_only=0