summaryrefslogtreecommitdiff
path: root/docs/comm/genesis/makefiles.html
diff options
context:
space:
mode:
Diffstat (limited to 'docs/comm/genesis/makefiles.html')
-rw-r--r--docs/comm/genesis/makefiles.html51
1 files changed, 51 insertions, 0 deletions
diff --git a/docs/comm/genesis/makefiles.html b/docs/comm/genesis/makefiles.html
new file mode 100644
index 0000000000..957a82eb85
--- /dev/null
+++ b/docs/comm/genesis/makefiles.html
@@ -0,0 +1,51 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+ <head>
+ <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
+ <title>The GHC Commentary - Mindboggling Makefiles</title>
+ </head>
+
+ <body BGCOLOR="FFFFFF">
+ <h1>The GHC Commentary - Mindboggling Makefiles</h1>
+ <p>
+ The size and structure of GHC's makefiles makes it quite easy to scream
+ out loud - in pain - during the process of tracking down problems in the
+ make system or when attempting to alter it. GHC's <a
+ href="http://haskell.cs.yale.edu/ghc/docs/latest/building/building-guide.html">Building
+ Guide</a> has valuable information on <a
+ href="http://haskell.cs.yale.edu/ghc/docs/latest/building/sec-makefile-arch.html">the
+ makefile architecture.</a>
+
+ <h4>A maze of twisty little passages, all alike</h4>
+ <p>
+ The <code>fptools/</code> toplevel and the various project directories
+ contain not only a <code>Makefile</code> each, but there are
+ subdirectories of name <code>mk/</code> at various levels that contain
+ rules, targets, and so on specific to a project - or, in the case of the
+ toplevel, the default rules for the whole system. Each <code>mk/</code>
+ directory contains a file <code>boilerplate.mk</code> that ties the
+ various other makefiles together. Files called <code>target.mk</code>,
+ <code>paths.mk</code>, and <code>suffix.mk</code> contain make targets,
+ definitions of variables containing paths, and suffix rules,
+ respectively.
+ <p>
+ One particularly nasty trick used in this hierarchy of makefiles is the
+ way in which the variable <code>$(TOP)</code> is used. AFAIK,
+ <code>$(TOP)</code> always points to a directory containing an
+ <code>mk/</code> subdirectory; however, it not necessarily points to the
+ toplevel <code>fptools/</code> directory. For example, within the GHC
+ subtree, <code>$(TOP)</code> points to <code>fptools/ghc/</code>.
+ However, some of the makefiles in <code>fptools/ghc/mk/</code> will then
+ <em>temporarily</em> redefine <code>$(TOP)</code> to point a level
+ higher (i.e., to <code>fptools/</code>) while they are including the
+ toplevel boilerplate. After that <code>$(TOP)</code> is redefined to
+ whatever value it had before including makefiles from higher up in the
+ hierarchy.
+
+ <p><small>
+<!-- hhmts start -->
+Last modified: Wed Aug 22 16:46:33 GMT Daylight Time 2001
+<!-- hhmts end -->
+ </small>
+ </body>
+</html>