| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
If a file is created by a %.hi rule, and the actual filename isn't
mentioned in the makefiles, then make will treat it as an 'intermediate
file' and delete it when it is finished.
We'd been lucky so far that .hi files weren't actually being built due
to our rules (but rather, as side-effects of the .o rules). However,
when using -dynamic-too to build, we had a rule
$1/$2/build/%.$$(dyn_osuf): $1/$2/build/%.$$(v_hisuf)
which meant that building a .dyn_o could cause the rule for the
corresponding .hi to be used, and the .hi may then be deleted later on.
This was exacerbated by a bug in GNU make 3.81 which caused make to
enter an infinite loop if running in parallel mode:
http://lists.gnu.org/archive/html/bug-make/2013-02/msg00020.html
Adding
.SECONDARY:
would stop make from deleting the intermediate files. However, this
caused make to take a pathologically long time (it appeared to be
live-locked for 2 hours before I killed it) with our build system.
This patch instead creates lines like
$(eval $(call hi-rule,libraries/base/dist-install/build/Unsafe/Coerce.dyn_hi libraries/base/dist-install/build/Unsafe/Coerce.hi : %hi: %o libraries/base/Unsafe/Coerce.hs))
in the .depend files, which results in a rule like
libraries/base/dist-install/build/Unsafe/Coerce.dyn_hi libraries/base/dist-install/build/Unsafe/Coerce.hi : %hi: %o libraries/base/Unsafe/Coerce.hs ;
which, as the files are now all named in the makefiles, means they are
no longer intermediate files so do not get deleted.
|
|
|
|
|
|
|
| |
Whether we check that .hi files have actually been created is now
controlled by $(ExtraMakefileSanityChecks) (defaults to NO).
Also updated comments about the .hi rule.
|
|
|
|
|
| |
We don't want the overhead of spawning a shell on Windows, but on other
platforms it's a useful sanity check.
|
|
|
|
|
| |
make thought that it could make a .hi file for the C files in
libraries, which was causing problems when using dynamic-too.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Previously this rule had a sanity check for the existence of the .o
file. However, the sanity check is expensive, especially on Windows,
because it requires spawning a shell. So now we use an empty command
here.
This change reduced the time to do 'make' in an up-to-date tree on
Windows from 33s to 16s for me. (the actual saving depends on how
much rebuilding you've been doing, and how many .hi files are older
than their .o files).
The comments in this file now describe various versions of the rule
that don't work.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
# -----------------------------------------------------------------------------
#
# (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
# http://hackage.haskell.org/trac/ghc/wiki/Building/Architecture
# http://hackage.haskell.org/trac/ghc/wiki/Building/Modifying
#
# -----------------------------------------------------------------------------
|
|
|