Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
What's new
10
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Open sidebar
jberryman
GHC
Commits
d7c2a370
Commit
d7c2a370
authored
Apr 27, 2009
by
Simon Marlow
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
remove commentary that is now in the wiki
parent
61bf169b
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
0 additions
and
81 deletions
+0
-81
Makefile
Makefile
+0
-81
No files found.
Makefile
View file @
d7c2a370
...
...
@@ -18,87 +18,6 @@ show:
else
# The problem we need to solve is as follows.
#
# GNU make supports included Makefiles, and it is clever enough to try
# to update those Makefiles when they are out-of-date or missing. It
# first reads all the Makefiles, and then tries to build each one if
# it is out-of-date, using the rules in the Makefiles themselves.
# When it has brought all the Makefiles up-to-date, it restarts itself
# to read the newly-generated Makefiles.
#
# This works fine, unless there are dependencies *between* the
# Makefiles. For example in the GHC build, for each package we have a
# package-data.mk file which is generated by the ghc-cabal program,
# and we have a .depend file. The .depend file cannot be generated
# until package-data.mk has been generated and make has been restarted
# to read in its contents, because it is the package-data.mk file that
# tells us which modules are in the package. But make always makes
# all the Makefiles before restarting - it doesn't take into account a
# dependency between Makefiles and restart itself earlier.
# Consider the following makefile:
# --------------------
# all :
#
# include inc1.mk
#
# inc1.mk : Makefile
# echo "X = C" >$@
#
# include inc2.mk
#
# inc2.mk : inc1.mk
# echo "Y = $(X)" >$@
# --------------------
# Now try it:
#
# $ make -f fail.mk
# fail.mk:3: inc1.mk: No such file or directory
# fail.mk:8: inc2.mk: No such file or directory
# echo "X = C" >inc1.mk
# echo "Y = " >inc2.mk
# make: Nothing to be done for `all'.
# make built both inc1.mk and inc2.mk without restarting itself
# between the two (even though we added a dependency on inc1.mk from
# inc2.mk).
#
# The solution we adopt in the GHC build system is essentially this:
# --------------------
# PHASE = 0
#
# ifeq "$(PHASE)" "0"
# all :
# $(MAKE) PHASE=1
# else
# all :
# endif
#
# -include inc1.mk
#
# inc1.mk : Makefile
# echo "X = C" >$@
#
# ifneq "$(PHASE)" "0"
# include inc2.mk
#
# inc2.mk : inc1.mk
# echo "Y = $(X)" >$@
# endif
#
# clean :
# rm -f inc1.mk inc2.mk
# --------------------
# That is, every time make is invoked, we force it to update inc1.mk
# and then restart. In the GHC build system we need to divide the
# build into 4 phases in fact, with a restart between each phase. See
# ghc.mk for the details on what happens in each phase and why.
default
:
all
@
:
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment