[commit: ghc] wip/nfs-locking: Use multiple output rules for *.o and *.hi files. (6ce7cd3)

git at git.haskell.org git at git.haskell.org
Thu Oct 26 23:06:20 UTC 2017


Repository : ssh://git@git.haskell.org/ghc

On branch  : wip/nfs-locking
Link       : http://ghc.haskell.org/trac/ghc/changeset/6ce7cd3ac8b3ba4ef0228dec9c8d4741f746a873/ghc

>---------------------------------------------------------------

commit 6ce7cd3ac8b3ba4ef0228dec9c8d4741f746a873
Author: Andrey Mokhov <andrey.mokhov at gmail.com>
Date:   Wed Jan 14 03:58:59 2015 +0000

    Use multiple output rules for *.o and *.hi files.


>---------------------------------------------------------------

6ce7cd3ac8b3ba4ef0228dec9c8d4741f746a873
 src/Package/Compile.hs | 24 ++++++------------------
 1 file changed, 6 insertions(+), 18 deletions(-)

diff --git a/src/Package/Compile.hs b/src/Package/Compile.hs
index d701af6..cd91c8e 100644
--- a/src/Package/Compile.hs
+++ b/src/Package/Compile.hs
@@ -29,13 +29,13 @@ suffixArgs way = arg ["-hisuf", hisuf way]
               <> arg [ "-osuf",  osuf way]
               <> arg ["-hcsuf", hcsuf way]
 
-oRule :: Package -> TodoItem -> Rules ()
-oRule (Package name path _) (stage, dist, settings) =
+buildPackageCompile :: Package -> TodoItem -> Rules ()
+buildPackageCompile (Package name path _) (stage, dist, settings) =
     let buildDir = toStandard $ path </> dist </> "build"
         pkgData  = path </> dist </> "package-data.mk"
-        depFile  = buildDir </> name <.> "m"
+        depFile  = buildDir </> takeBaseName name <.> "m"
     in
-    (buildDir <//> "*o") %> \out -> do
+    [buildDir <//> "*o", buildDir <//> "*hi"] &%> \[out, _] -> do
         let way  = detectWay $ tail $ takeExtension out
         need ["shake/src/Package/Compile.hs"]
         need [depFile]
@@ -49,23 +49,11 @@ oRule (Package name path _) (stage, dist, settings) =
             <> packageArgs stage pkgData
             <> includeArgs path dist
             <> concatArgs ["-optP"] (CppOpts pkgData)
-            -- TODO: use HC_OPTS from pkgData
+            <> arg (HsOpts pkgData)
             -- TODO: now we have both -O and -O2
-            <> arg ["-Wall", "-XHaskell2010", "-O2"]
+            -- <> arg ["-O2"]
             <> productArgs ["-odir", "-hidir", "-stubdir"] buildDir
             <> when (splitObjects stage) (arg "-split-objs")
             <> arg ("-c":srcs)
             <> arg ["-o", toStandard out]
 
--- TODO: This rule looks hacky... combine it with the above?
-hiRule :: Package -> TodoItem -> Rules ()
-hiRule (Package name path _) (stage, dist, settings) =
-    let buildDir = path </> dist </> "build"
-    in
-    (buildDir <//> "*hi") %> \out -> do
-        let way   = detectWay $ tail $ takeExtension out
-            oFile = out -<.> osuf way
-        need [oFile]
-
-buildPackageCompile :: Package -> TodoItem -> Rules ()
-buildPackageCompile = oRule <> hiRule



More information about the ghc-commits mailing list