46 lines
1.2 KiB
Haskell
Executable file
46 lines
1.2 KiB
Haskell
Executable file
#!/usr/bin/env cabal
|
|
{- cabal:
|
|
build-depends:
|
|
base,
|
|
bytestring,
|
|
cereal,
|
|
hspec,
|
|
process,
|
|
shake,
|
|
-}
|
|
-- initial version taken from https://shakebuild.com/manual
|
|
import Development.Shake
|
|
import Development.Shake.FilePath
|
|
import Development.Shake.Util
|
|
|
|
cc = "gcc"
|
|
flags = "-ggdb"
|
|
clearCcCache = removeFilesAfter "build" ["//*"]
|
|
|
|
main :: IO ()
|
|
main = shakeArgs shakeOptions{shakeFiles="_build"} $ do
|
|
want ["_build/interpreter" <.> exe]
|
|
|
|
phony "clean" $ do
|
|
putInfo "Cleaning files in _build"
|
|
removeFilesAfter "_build" ["//*"]
|
|
clearCcCache
|
|
removeFilesAfter "newdist" ["//*"]
|
|
cmd_ "cabal" "clean"
|
|
|
|
phony "run" $ do
|
|
need ["_build/interpreter" <.> exe]
|
|
putInfo "Running interpreter"
|
|
cmd_ "_build/interpreter" ["program.code"]
|
|
|
|
"_build/interpreter" <.> exe %> \out -> do
|
|
cs <- getDirectoryFiles "src" ["//*.c"]
|
|
let os = ["_build" </> "normal" </> "src" </> c -<.> "o" | c <- cs]
|
|
need os
|
|
cmd_ (cc <> " " <> flags <> " -o") [out] os
|
|
|
|
"_build/normal//*.o" %> \out -> do
|
|
let c = dropDirectory1 $ dropDirectory1 $ out -<.> "c"
|
|
let m = out -<.> "m"
|
|
cmd_ (cc <> " " <> flags <> " -c") [c] "-o" [out] "-MMD -MF" [m]
|
|
neededMakefileDependencies m
|