clash-ghc 0.5.4 → 0.5.5
raw patch · 6 files changed
+32/−10 lines, 6 filesdep ~clash-libdep ~clash-prelude
Dependency ranges changed: clash-lib, clash-prelude
Files
- CHANGELOG.md +4/−0
- clash-ghc.cabal +3/−2
- src-bin/InteractiveUI.hs +1/−3
- src-bin/Main.hs +1/−0
- src-ghc/CLaSH/GHC/GenerateBindings.hs +4/−3
- src-ghc/CLaSH/GHC/LoadModules.hs +19/−2
CHANGELOG.md view
@@ -1,5 +1,9 @@ # Changelog for the [`clash-ghc`](http://hackage.haskell.org/package/clash-ghc) package +## 0.5.5 *May 5th 2015*+* New features:+ * `TopEntity` wrappers are now specified as `ANN` annotation pragmas [#42](https://github.com/clash-lang/clash-compiler/issues/42)+ ## 0.5.4 *May 1st 2015* * New features: * Generate wrappers around `topEntity` that have constant names and types
clash-ghc.cabal view
@@ -1,5 +1,5 @@ Name: clash-ghc-Version: 0.5.4+Version: 0.5.5 Synopsis: CAES Language for Synchronous Hardware Description: CλaSH (pronounced ‘clash’) is a functional hardware description language that@@ -70,7 +70,8 @@ unbound-generics >= 0.1, unordered-containers >= 0.2.1.0, - clash-lib >= 0.5.2,+ clash-lib >= 0.5.3,+ clash-prelude >= 0.7.4, clash-vhdl >= 0.5.3, clash-systemverilog >= 0.5.2, clash-prelude >= 0.7.3,
src-bin/InteractiveUI.hs view
@@ -113,7 +113,6 @@ import CLaSH.Backend.VHDL (VHDLState) import CLaSH.Backend.SystemVerilog (SystemVerilogState) import qualified CLaSH.Driver-import CLaSH.Driver.TopWrapper (generateTopEnt) import CLaSH.GHC.Evaluator import CLaSH.GHC.GenerateBindings import CLaSH.GHC.NetlistTypes@@ -1578,8 +1577,7 @@ liftIO $ do primDir <- CLaSH.Backend.primDir backend primMap <- CLaSH.Primitives.Util.generatePrimMap [primDir,"."] forM_ srcs $ \src -> do- (bindingsMap,tcm) <- generateBindings primMap src (Just dflags)- topEntM <- generateTopEnt (dropExtensions $ takeFileName src)+ (bindingsMap,tcm,topEntM) <- generateBindings primMap src (Just dflags) CLaSH.Driver.generateHDL bindingsMap (Just backend) primMap tcm ghcTypeToHWType reduceConstant topEntM DebugNone
src-bin/Main.hs view
@@ -152,6 +152,7 @@ , DynFlags.Opt_FlexibleContexts , DynFlags.Opt_ConstraintKinds , DynFlags.Opt_TypeFamilies+ , DynFlags.Opt_BinaryLiterals ] dflagsExtra1 = foldl DynFlags.xopt_unset dflagsExtra [ DynFlags.Opt_ImplicitPrelude
src-ghc/CLaSH/GHC/GenerateBindings.hs view
@@ -15,6 +15,7 @@ import qualified CoreSyn as GHC import qualified DynFlags as GHC +import CLaSH.Annotations.TopEntity (TopEntity) import CLaSH.Core.FreeVars (termFreeIds) import CLaSH.Core.Term (Term (..), TmName) import CLaSH.Core.Type (Type, TypeView (..), coreView, mkFunTy, splitFunForallTy)@@ -36,9 +37,9 @@ PrimMap -> String -> Maybe (GHC.DynFlags)- -> IO (BindingMap,HashMap TyConName TyCon)+ -> IO (BindingMap,HashMap TyConName TyCon,Maybe TopEntity) generateBindings primMap modName dflagsM = do- (bindings,clsOps,unlocatable,fiEnvs) <- loadModules modName dflagsM+ (bindings,clsOps,unlocatable,fiEnvs,topEntM) <- loadModules modName dflagsM let ((bindingsMap,clsVMap),tcMap) = State.runState (mkBindings primMap bindings clsOps unlocatable) emptyGHC2CoreState tcCache = makeAllTyCons tcMap fiEnvs allTcCache = tysPrimMap `HashMap.union` tcCache@@ -49,7 +50,7 @@ [topEntity] -> let droppedBindings = lambdaDropPrep allBindings (fst topEntity) in snd $ retype allTcCache ([],droppedBindings) (fst topEntity) _ -> allBindings- return (retypedBindings,allTcCache)+ return (retypedBindings,allTcCache,topEntM) -- | clean up cast-removal mess retype :: HashMap TyConName TyCon
src-ghc/CLaSH/GHC/LoadModules.hs view
@@ -8,13 +8,16 @@ where -- External Modules+import Data.List (nub)+import Data.Maybe (listToMaybe)+import CLaSH.Annotations.TopEntity (TopEntity) import System.Exit (ExitCode (..)) import System.IO (hGetLine) import System.Process (runInteractiveCommand, waitForProcess)-import Data.List (nub) -- GHC API+import qualified Annotations import qualified CoreSyn import DynFlags (GeneralFlag (..)) import qualified DynFlags@@ -23,11 +26,13 @@ import qualified HscTypes import qualified MonadUtils import qualified Panic+import qualified Serialized import qualified TidyPgm import qualified TcRnMonad import qualified TcRnTypes import qualified UniqFM+import qualified Var import qualified FamInst import qualified FamInstEnv @@ -59,6 +64,7 @@ , [(CoreSyn.CoreBndr,Int)] -- Class operations , [CoreSyn.CoreBndr] -- Unlocatable Expressions , FamInstEnv.FamInstEnvs+ , Maybe TopEntity ) loadModules modName dflagsM = GHC.defaultErrorHandler DynFlags.defaultFatalMessager DynFlags.defaultFlushOut $ do@@ -76,6 +82,7 @@ , DynFlags.Opt_FlexibleContexts , DynFlags.Opt_ConstraintKinds , DynFlags.Opt_TypeFamilies+ , DynFlags.Opt_BinaryLiterals ] let dfDis = foldl DynFlags.xopt_unset dfEn [ DynFlags.Opt_ImplicitPrelude@@ -129,9 +136,19 @@ hscEnv <- GHC.getSession famInstEnvs <- TcRnMonad.liftIO $ TcRnMonad.initTcForLookup hscEnv FamInst.tcGetFamInstEnvs+ topEntityAnnotations <- findCLaSHAnnotations (map fst binders)+ let topEntM = listToMaybe topEntityAnnotations - return (binders ++ externalBndrs,clsOps,unlocatable,(fst famInstEnvs,modFamInstEnvs'))+ return (binders ++ externalBndrs,clsOps,unlocatable,(fst famInstEnvs,modFamInstEnvs'),topEntM) GHC.Failed -> Panic.pgmError $ $(curLoc) ++ "failed to load module: " ++ modName++findCLaSHAnnotations :: GHC.GhcMonad m+ => [CoreSyn.CoreBndr]+ -> m [TopEntity]+findCLaSHAnnotations bndrs = do+ let deserializer = Serialized.deserializeWithData+ targets = map (Annotations.NamedTarget . Var.varName) bndrs+ concat <$> mapM (GHC.findGlobalAnns deserializer) targets parseModule :: GHC.GhcMonad m => GHC.ModSummary -> m GHC.ParsedModule parseModule modSum = do