Compile.hs 2.25 KB
Newer Older
Andrey Mokhov's avatar
Andrey Mokhov committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
{-# LANGUAGE NoImplicitPrelude, ScopedTypeVariables #-}
module Package.Compile (buildPackageCompile) where

import Package.Base
import Development.Shake.Util

-- "inplace/bin/ghc-stage1.exe" -hisuf hi -osuf  o -hcsuf hc -static  -H32m -O    -this-package-key deeps_FT5iVCELxOr62eHY0nbvnU -hide-all-packages -i -ilibraries/deepseq/. -ilibraries/deepseq/dist-install/build -ilibraries/deepseq/dist-install/build/autogen -Ilibraries/deepseq/dist-install/build -Ilibraries/deepseq/dist-install/build/autogen -Ilibraries/deepseq/.    -optP-include -optPlibraries/deepseq/dist-install/build/autogen/cabal_macros.h -package-key array_3w0nMK0JfaFJPpLFn2yWAJ -package-key base_469rOtLAqwTGFEOGWxSUiQ -package-key ghcpr_FgrV6cgh2JHBlbcx1OSlwt -Wall -XHaskell2010 -O2  -no-user-package-db -rtsopts      -odir libraries/deepseq/dist-install/build -hidir libraries/deepseq/dist-install/build -stubdir libraries/deepseq/dist-install/build -split-objs  -c libraries/deepseq/./Control/DeepSeq.hs -o libraries/deepseq/dist-install/build/Control/DeepSeq.o

suffixArgs :: Way -> Args
suffixArgs way = arg ["-hisuf", hisuf way, "-osuf", osuf way, "-hcsuf", hcsuf way]

buildPackageCompile :: Package -> TodoItem -> Rules ()
buildPackageCompile (Package name path _) (stage, dist, settings) =
    let buildDir = path </> dist
        pkgData  = buildDir </> "package-data.mk"
        depFile  = buildDir </> "build" </> name <.> "m"
    in
    (buildDir </> "build//*o") %> \out -> do
        let way  = detectWay $ tail $ takeExtension out
        need ["shake/src/Package/Compile.hs"] -- Track changes in this file
        need [depFile]
        depContents <- parseMakefile <$> (liftIO $ readFile depFile)
        let deps = concat $ snd $ unzip $ filter ((== out) . fst) depContents
24
            srcs = filter ("//*hs" ?==) deps -- TODO: handle *.c sources
Andrey Mokhov's avatar
Andrey Mokhov committed
25
26
27
28
29
        need deps
        run (Ghc stage) $ suffixArgs way
            <> wayHcArgs way
            <> arg SrcHcOpts
            <> packageArgs stage pkgData
30
            <> includeArgs path dist
Andrey Mokhov's avatar
Andrey Mokhov committed
31
            <> arg ["-Wall", "-XHaskell2010", "-O2"] -- TODO: now we have both -O and -O2
32
            <> outputArgs ["-odir", "-hidir", "-stubdir"] (buildDir </> "build")
Andrey Mokhov's avatar
Andrey Mokhov committed
33
34
35
            <> arg "-split-objs"
            <> arg ("-c":srcs)
            <> arg ["-o", out]