module DDC.Driver.Command.BaseBuild
(cmdBaseBuild)
where
import DDC.Driver.Stage
import DDC.Build.Platform
import DDC.Build.Builder
import DDC.Driver.Command.Compile
import System.FilePath
import System.Directory
import Control.Monad.Trans.Error
import Control.Monad.IO.Class
import Control.Monad
baseLiteFiles :: Builder -> [FilePath]
baseLiteFiles builder
= let _bits = show $ archPointerWidth $ platformArch $ buildTarget builder
in [ "lite" </> "base" </> "Data" </> "Numeric" </> "Bool.dcl"
, "lite" </> "base" </> "Data" </> "Numeric" </> "Int.dcl"
, "lite" </> "base" </> "Data" </> "Numeric" </> "Nat.dcl" ]
baseSaltFiles :: Builder -> [FilePath]
baseSaltFiles builder
= let bits = show $ archPointerWidth $ platformArch $ buildTarget builder
in [ "salt" </> "runtime" ++ bits </> "Object.dcs" ]
baseSeaFiles :: Builder -> [FilePath]
baseSeaFiles _builder
= ["sea" </> "primitive" </> "Primitive.c"]
cmdBaseBuild :: Config -> ErrorT String IO ()
cmdBaseBuild config
= do let builder = configBuilder config
let target = buildTarget builder
exists <- liftIO $ doesDirectoryExist $ buildBaseLibDir builder
when (not exists)
$ liftIO $ createDirectory $ buildBaseLibDir builder
let srcLiteFiles = map (buildBaseSrcDir builder </>) (baseLiteFiles builder)
let objLiteFiles = map (flip replaceExtension "o") srcLiteFiles
mapM_ (cmdCompile config) srcLiteFiles
let srcSaltFiles = map (buildBaseSrcDir builder </>) (baseSaltFiles builder)
let objSaltFiles = map (flip replaceExtension "o") srcSaltFiles
mapM_ (cmdCompile config) srcSaltFiles
let srcSeaFiles = map (buildBaseSrcDir builder </>) (baseSeaFiles builder)
let objSeaFiles = map (flip replaceExtension "o") srcSeaFiles
liftIO $ zipWithM_ (buildCC builder) srcSeaFiles objSeaFiles
let objFiles = objLiteFiles ++ objSaltFiles ++ objSeaFiles
let staticRuntime
= buildBaseLibDir builder
</> "libddc-runtime." ++ staticFileExtensionOfPlatform target
liftIO $ buildLdLibStatic builder objFiles staticRuntime
let sharedRuntime
= buildBaseLibDir builder
</> "libddc-runtime." ++ sharedFileExtensionOfPlatform target
liftIO $ buildLdLibShared builder objFiles sharedRuntime
return ()