Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add own version of OverridingBool (copy #2764) #2777

Merged
merged 1 commit into from
Jul 27, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion clash-ghc/src-bin-8.10/Clash/GHCi/UI.hs
Original file line number Diff line number Diff line change
Expand Up @@ -150,6 +150,7 @@ import Clash.Backend.SystemVerilog (SystemVerilogState)
import Clash.Backend.VHDL (VHDLState)
import Clash.Backend.Verilog (VerilogState)
import qualified Clash.Driver
import Clash.Driver.Bool (fromGhcOverridingBool)
import Clash.Driver.Types (ClashOpts(..), ClashEnv(..), ClashDesign(..))

import Clash.GHC.PartialEval
Expand Down Expand Up @@ -2191,7 +2192,7 @@ makeHDL Proxy startAction optsRef srcs = do
dflags <- GHC.getSessionDynFlags
liftIO $ do startTime <- Clock.getCurrentTime
opts0 <- readIORef optsRef
let opts1 = opts0 { opt_color = useColor dflags }
let opts1 = opts0 { opt_color = fromGhcOverridingBool (useColor dflags) }
let iw = opt_intWidth opts1
hdl = hdlKind backend
-- determine whether `-outputdir` was used
Expand Down
3 changes: 2 additions & 1 deletion clash-ghc/src-bin-861/Clash/GHCi/UI.hs
Original file line number Diff line number Diff line change
Expand Up @@ -144,6 +144,7 @@ import Clash.Backend.SystemVerilog (SystemVerilogState)
import Clash.Backend.VHDL (VHDLState)
import Clash.Backend.Verilog (VerilogState)
import qualified Clash.Driver
import Clash.Driver.Bool (fromGhcOverridingBool)
import Clash.Driver.Types (ClashOpts(..), ClashEnv(..), ClashDesign(..))

import Clash.GHC.PartialEval
Expand Down Expand Up @@ -2022,7 +2023,7 @@ makeHDL Proxy startAction optsRef srcs = do
dflags <- GHC.getSessionDynFlags
liftIO $ do startTime <- Clock.getCurrentTime
opts0 <- readIORef optsRef
let opts1 = opts0 { opt_color = useColor dflags }
let opts1 = opts0 { opt_color = fromGhcOverridingBool (useColor dflags) }
iw = opt_intWidth opts1
hdl = hdlKind backend
-- determine whether `-outputdir` was used
Expand Down
3 changes: 2 additions & 1 deletion clash-ghc/src-bin-881/Clash/GHCi/UI.hs
Original file line number Diff line number Diff line change
Expand Up @@ -147,6 +147,7 @@ import Clash.Backend.SystemVerilog (SystemVerilogState)
import Clash.Backend.VHDL (VHDLState)
import Clash.Backend.Verilog (VerilogState)
import qualified Clash.Driver
import Clash.Driver.Bool (fromGhcOverridingBool)
import Clash.Driver.Types (ClashOpts(..), ClashEnv(..), ClashDesign(..))

import Clash.GHC.PartialEval
Expand Down Expand Up @@ -2113,7 +2114,7 @@ makeHDL Proxy startAction optsRef srcs = do
dflags <- GHC.getSessionDynFlags
liftIO $ do startTime <- Clock.getCurrentTime
opts0 <- readIORef optsRef
let opts1 = opts0 { opt_color = useColor dflags }
let opts1 = opts0 { opt_color = fromGhcOverridingBool (useColor dflags) }
let iw = opt_intWidth opts1
hdl = hdlKind backend
-- determine whether `-outputdir` was used
Expand Down
3 changes: 2 additions & 1 deletion clash-ghc/src-bin-9.0/Clash/GHCi/UI.hs
Original file line number Diff line number Diff line change
Expand Up @@ -153,6 +153,7 @@ import Clash.Backend.SystemVerilog (SystemVerilogState)
import Clash.Backend.VHDL (VHDLState)
import Clash.Backend.Verilog (VerilogState)
import qualified Clash.Driver
import Clash.Driver.Bool (fromGhcOverridingBool)
import Clash.Driver.Types (ClashOpts(..), ClashEnv(..), ClashDesign(..))
import Clash.GHC.Evaluator
import Clash.GHC.GenerateBindings
Expand Down Expand Up @@ -2230,7 +2231,7 @@ makeHDL Proxy startAction optsRef srcs = do
dflags <- GHC.getSessionDynFlags
liftIO $ do startTime <- Clock.getCurrentTime
opts0 <- readIORef optsRef
let opts1 = opts0 { opt_color = useColor dflags }
let opts1 = opts0 { opt_color = fromGhcOverridingBool (useColor dflags) }
let iw = opt_intWidth opts1
hdl = hdlKind backend
-- determine whether `-outputdir` was used
Expand Down
3 changes: 2 additions & 1 deletion clash-ghc/src-bin-9.2/Clash/GHCi/UI.hs
Original file line number Diff line number Diff line change
Expand Up @@ -166,6 +166,7 @@ import Clash.Backend.SystemVerilog (SystemVerilogState)
import Clash.Backend.VHDL (VHDLState)
import Clash.Backend.Verilog (VerilogState)
import qualified Clash.Driver
import Clash.Driver.Bool (fromGhcOverridingBool)
import Clash.Driver.Types (ClashOpts(..), ClashEnv(..), ClashDesign(..))
import Clash.GHC.Evaluator
import Clash.GHC.GenerateBindings
Expand Down Expand Up @@ -2307,7 +2308,7 @@ makeHDL Proxy startAction optsRef srcs = do
dflags <- GHC.getSessionDynFlags
liftIO $ do startTime <- Clock.getCurrentTime
opts0 <- readIORef optsRef
let opts1 = opts0 { opt_color = useColor dflags }
let opts1 = opts0 { opt_color = fromGhcOverridingBool (useColor dflags) }
let iw = opt_intWidth opts1
hdl = hdlKind backend
-- determine whether `-outputdir` was used
Expand Down
3 changes: 2 additions & 1 deletion clash-ghc/src-bin-9.4/Clash/GHCi/UI.hs
Original file line number Diff line number Diff line change
Expand Up @@ -173,6 +173,7 @@ import Clash.Backend.SystemVerilog (SystemVerilogState)
import Clash.Backend.VHDL (VHDLState)
import Clash.Backend.Verilog (VerilogState)
import qualified Clash.Driver
import Clash.Driver.Bool (fromGhcOverridingBool)
import Clash.Driver.Types (ClashOpts(..), ClashEnv(..), ClashDesign(..))
import Clash.GHC.Evaluator
import Clash.GHC.GenerateBindings
Expand Down Expand Up @@ -2391,7 +2392,7 @@ makeHDL Proxy startAction optsRef srcs = do
dflags <- GHC.getSessionDynFlags
liftIO $ do startTime <- Clock.getCurrentTime
opts0 <- readIORef optsRef
let opts1 = opts0 { opt_color = useColor dflags }
let opts1 = opts0 { opt_color = fromGhcOverridingBool (useColor dflags) }
let iw = opt_intWidth opts1
hdl = hdlKind backend
-- determine whether `-outputdir` was used
Expand Down
3 changes: 2 additions & 1 deletion clash-ghc/src-bin-9.6/Clash/GHCi/UI.hs
Original file line number Diff line number Diff line change
Expand Up @@ -176,6 +176,7 @@ import Clash.Backend.SystemVerilog (SystemVerilogState)
import Clash.Backend.VHDL (VHDLState)
import Clash.Backend.Verilog (VerilogState)
import qualified Clash.Driver
import Clash.Driver.Bool (fromGhcOverridingBool)
import Clash.Driver.Types (ClashOpts(..), ClashEnv(..), ClashDesign(..))
import Clash.GHC.Evaluator
import Clash.GHC.GenerateBindings
Expand Down Expand Up @@ -2412,7 +2413,7 @@ makeHDL Proxy startAction optsRef srcs = do
dflags <- GHC.getSessionDynFlags
liftIO $ do startTime <- Clock.getCurrentTime
opts0 <- readIORef optsRef
let opts1 = opts0 { opt_color = useColor dflags }
let opts1 = opts0 { opt_color = fromGhcOverridingBool (useColor dflags) }
let iw = opt_intWidth opts1
hdl = hdlKind backend
-- determine whether `-outputdir` was used
Expand Down
3 changes: 2 additions & 1 deletion clash-ghc/src-bin-9.8/Clash/GHCi/UI.hs
Original file line number Diff line number Diff line change
Expand Up @@ -178,6 +178,7 @@ import Clash.Backend.SystemVerilog (SystemVerilogState)
import Clash.Backend.VHDL (VHDLState)
import Clash.Backend.Verilog (VerilogState)
import qualified Clash.Driver
import Clash.Driver.Bool (fromGhcOverridingBool)
import Clash.Driver.Types (ClashOpts(..), ClashEnv(..), ClashDesign(..))
import Clash.GHC.Evaluator
import Clash.GHC.GenerateBindings
Expand Down Expand Up @@ -2413,7 +2414,7 @@ makeHDL Proxy startAction optsRef srcs = do
dflags <- GHC.getSessionDynFlags
liftIO $ do startTime <- Clock.getCurrentTime
opts0 <- readIORef optsRef
let opts1 = opts0 { opt_color = useColor dflags }
let opts1 = opts0 { opt_color = fromGhcOverridingBool (useColor dflags) }
let iw = opt_intWidth opts1
hdl = hdlKind backend
-- determine whether `-outputdir` was used
Expand Down
3 changes: 2 additions & 1 deletion clash-ghc/src-ghc/Clash/GHC/GenerateBindings.hs
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,7 @@ import Clash.Core.VarEnv
import qualified Clash.Data.UniqMap as UniqMap
import Clash.Debug (traceIf)
import Clash.Driver (compilePrimitive)
import Clash.Driver.Bool (toGhcOverridingBool)
import Clash.Driver.Types (BindingMap, Binding(..), IsPrim(..), ClashEnv(..), ClashDesign(..), ClashOpts(..))
import Clash.GHC.GHC2Core
(C2C, GHC2CoreState, GHC2CoreEnv (..), tyConMap, coreToId, coreToName, coreToTerm,
Expand Down Expand Up @@ -133,7 +134,7 @@ generateBindings opts startAction primDirs importDirs dbs hdl modName dflagsM =
, partitionEithers -> (unresolvedPrims, pFP)
, customBitRepresentations
, primGuards
, domainConfs ) <- loadModules startAction (opt_color opts) hdl modName dflagsM importDirs
, domainConfs ) <- loadModules startAction (toGhcOverridingBool (opt_color opts)) hdl modName dflagsM importDirs
startTime <- Clock.getCurrentTime
primMapR <- generatePrimMap unresolvedPrims primGuards (concat [pFP, primDirs, importDirs])
tdir <- maybe ghcLibDir (pure . GHC.topDir) dflagsM
Expand Down
1 change: 1 addition & 0 deletions clash-lib/clash-lib.cabal
Original file line number Diff line number Diff line change
Expand Up @@ -240,6 +240,7 @@ Library
Clash.Debug

Clash.Driver
Clash.Driver.Bool
Clash.Driver.Manifest
Clash.Driver.Types

Expand Down
34 changes: 34 additions & 0 deletions clash-lib/src/Clash/Driver/Bool.hs
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
{-|
Copyright : (C) 2024, Martijn Bastiaan
License : BSD2 (see the file LICENSE)
Maintainer : QBayLogic B.V. <[email protected]>
-}
{-# LANGUAGE CPP #-}
{-# LANGUAGE DeriveAnyClass #-}

module Clash.Driver.Bool where

import Control.DeepSeq (NFData)
import Data.Hashable (Hashable)
import GHC.Generics (Generic)

#if MIN_VERSION_ghc(9,4,0)
import qualified GHC.Data.Bool as Ghc
#elif MIN_VERSION_ghc(9,0,0)
import qualified GHC.Utils.Misc as Ghc
#else
import qualified Util as Ghc
#endif

data OverridingBool = Auto | Never | Always
deriving (Show, Read, Eq, Ord, Enum, Bounded, Hashable, Generic, NFData)

toGhcOverridingBool :: OverridingBool -> Ghc.OverridingBool
toGhcOverridingBool Auto = Ghc.Auto
toGhcOverridingBool Never = Ghc.Never
toGhcOverridingBool Always = Ghc.Always

fromGhcOverridingBool :: Ghc.OverridingBool -> OverridingBool
fromGhcOverridingBool Ghc.Auto = Auto
fromGhcOverridingBool Ghc.Never = Never
fromGhcOverridingBool Ghc.Always = Always
9 changes: 1 addition & 8 deletions clash-lib/src/Clash/Driver/Manifest.hs
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@ import Text.Read (readMaybe)
import Clash.Annotations.TopEntity.Extra ()
import Clash.Backend (Backend (hdlType), Usage (External))
import Clash.Core.Name (nameOcc)
import Clash.Driver.Bool (OverridingBool(..))
import Clash.Driver.Types
import Clash.Primitives.Types
import Clash.Core.Var (Id, varName)
Expand All @@ -66,14 +67,6 @@ import Clash.Primitives.Util (hashCompiledPrimMap)
import Clash.Signal (VDomainConfiguration(..))
import Clash.Util.Graph (callGraphBindings)

#if MIN_VERSION_ghc(9,4,0)
import GHC.Data.Bool (OverridingBool(..))
#elif MIN_VERSION_ghc(9,0,0)
import GHC.Utils.Misc (OverridingBool(..))
#else
import Util (OverridingBool(..))
#endif

data PortDirection
= In | Out | InOut
deriving (Generic, Eq, Read, Show)
Expand Down
114 changes: 2 additions & 112 deletions clash-lib/src/Clash/Driver/Types.hs
Original file line number Diff line number Diff line change
Expand Up @@ -45,15 +45,12 @@ import GHC.Generics (Generic)
#if MIN_VERSION_ghc(9,4,0)
import GHC.Types.Basic (InlineSpec)
import GHC.Types.SrcLoc (SrcSpan)
import GHC.Data.Bool (OverridingBool(..))
#elif MIN_VERSION_ghc(9,0,0)
import GHC.Types.Basic (InlineSpec)
import GHC.Types.SrcLoc (SrcSpan)
import GHC.Utils.Misc (OverridingBool(..))
#else
import BasicTypes (InlineSpec)
import SrcLoc (SrcSpan)
import Util (OverridingBool(..))
#endif

import Clash.Annotations.BitRepresentation.Internal (CustomReprs)
Expand All @@ -64,6 +61,7 @@ import Clash.Core.Term (Term)
import Clash.Core.TyCon (TyConMap, TyConName)
import Clash.Core.Var (Id)
import Clash.Core.VarEnv (VarEnv)
import Clash.Driver.Bool (OverridingBool(..))
import Clash.Netlist.BlackBox.Types (HdlSyn (..))
import {-# SOURCE #-} Clash.Netlist.Types (PreserveCase(..), TopEntityT)
import Clash.Primitives.Types (CompiledPrimMap)
Expand Down Expand Up @@ -401,115 +399,7 @@ data ClashOpts = ClashOpts
-- ^ Timescale precision set in Verilog files. E.g., setting this would sets
-- the second part of @`timescale 100fs/100fs@.
}
deriving (Show)

instance NFData ClashOpts where
rnf o =
opt_werror o `deepseq`
opt_inlineLimit o `deepseq`
opt_specLimit o `deepseq`
opt_inlineFunctionLimit o `deepseq`
opt_inlineConstantLimit o `deepseq`
opt_evaluatorFuelLimit o `deepseq`
opt_cachehdl o `deepseq`
opt_clear o `deepseq`
opt_primWarn o `deepseq`
opt_color o `seq`
opt_intWidth o `deepseq`
opt_hdlDir o `deepseq`
opt_hdlSyn o `deepseq`
opt_errorExtra o `deepseq`
opt_importPaths o `deepseq`
opt_componentPrefix o `deepseq`
opt_newInlineStrat o `deepseq`
opt_escapedIds o `deepseq`
opt_lowerCaseBasicIds o `deepseq`
opt_ultra o `deepseq`
opt_forceUndefined o `deepseq`
opt_checkIDir o `deepseq`
opt_aggressiveXOpt o `deepseq`
opt_aggressiveXOptBB o `deepseq`
opt_inlineWFCacheLimit o `deepseq`
opt_edalize o `deepseq`
opt_renderEnums o `deepseq`
opt_timescalePrecision o `deepseq`
()

instance Eq ClashOpts where
s0 == s1 =
opt_werror s0 == opt_werror s1 &&
opt_inlineLimit s0 == opt_inlineLimit s1 &&
opt_specLimit s0 == opt_specLimit s1 &&
opt_inlineFunctionLimit s0 == opt_inlineFunctionLimit s1 &&
opt_inlineConstantLimit s0 == opt_inlineConstantLimit s1 &&
opt_evaluatorFuelLimit s0 == opt_evaluatorFuelLimit s1 &&
opt_cachehdl s0 == opt_cachehdl s1 &&
opt_clear s0 == opt_clear s1 &&
opt_primWarn s0 == opt_primWarn s1 &&
(opt_color s0 `eqOverridingBool` opt_color s1) &&
opt_intWidth s0 == opt_intWidth s1 &&
opt_hdlDir s0 == opt_hdlDir s1 &&
opt_hdlSyn s0 == opt_hdlSyn s1 &&
opt_errorExtra s0 == opt_errorExtra s1 &&
opt_importPaths s0 == opt_importPaths s1 &&
opt_componentPrefix s0 == opt_componentPrefix s1 &&
opt_newInlineStrat s0 == opt_newInlineStrat s1 &&
opt_escapedIds s0 == opt_escapedIds s1 &&
opt_lowerCaseBasicIds s0 == opt_lowerCaseBasicIds s1 &&
opt_ultra s0 == opt_ultra s1 &&
opt_forceUndefined s0 == opt_forceUndefined s1 &&
opt_checkIDir s0 == opt_checkIDir s1 &&
opt_aggressiveXOpt s0 == opt_aggressiveXOpt s1 &&
opt_aggressiveXOptBB s0 == opt_aggressiveXOptBB s1 &&
opt_inlineWFCacheLimit s0 == opt_inlineWFCacheLimit s1 &&
opt_edalize s0 == opt_edalize s1 &&
opt_renderEnums s0 == opt_renderEnums s1 &&
opt_timescalePrecision s0 == opt_timescalePrecision s1

where
eqOverridingBool :: OverridingBool -> OverridingBool -> Bool
eqOverridingBool Auto Auto = True
eqOverridingBool Always Always = True
eqOverridingBool Never Never = True
eqOverridingBool _ _ = False

instance Hashable ClashOpts where
hashWithSalt s ClashOpts {..} =
s `hashWithSalt`
opt_werror `hashWithSalt`
opt_inlineLimit `hashWithSalt`
opt_specLimit `hashWithSalt`
opt_inlineFunctionLimit `hashWithSalt`
opt_inlineConstantLimit `hashWithSalt`
opt_evaluatorFuelLimit `hashWithSalt`
opt_cachehdl `hashWithSalt`
opt_clear `hashWithSalt`
opt_primWarn `hashOverridingBool`
opt_color `hashWithSalt`
opt_intWidth `hashWithSalt`
opt_hdlDir `hashWithSalt`
opt_hdlSyn `hashWithSalt`
opt_errorExtra `hashWithSalt`
opt_importPaths `hashWithSalt`
opt_componentPrefix `hashWithSalt`
opt_newInlineStrat `hashWithSalt`
opt_escapedIds `hashWithSalt`
opt_lowerCaseBasicIds `hashWithSalt`
opt_ultra `hashWithSalt`
opt_forceUndefined `hashWithSalt`
opt_checkIDir `hashWithSalt`
opt_aggressiveXOpt `hashWithSalt`
opt_aggressiveXOptBB `hashWithSalt`
opt_inlineWFCacheLimit `hashWithSalt`
opt_edalize `hashWithSalt`
opt_renderEnums `hashWithSalt`
opt_timescalePrecision
where
hashOverridingBool :: Int -> OverridingBool -> Int
hashOverridingBool s1 Auto = hashWithSalt s1 (0 :: Int)
hashOverridingBool s1 Always = hashWithSalt s1 (1 :: Int)
hashOverridingBool s1 Never = hashWithSalt s1 (2 :: Int)
infixl 0 `hashOverridingBool`
deriving (Show, Eq, NFData, Generic, Hashable)

defClashOpts :: ClashOpts
defClashOpts
Expand Down
8 changes: 1 addition & 7 deletions clash-lib/src/Clash/Netlist/BlackBox.hs
Original file line number Diff line number Diff line change
Expand Up @@ -52,13 +52,6 @@ import System.Console.ANSI
, ConsoleIntensity(BoldIntensity), ConsoleLayer(Foreground), ColorIntensity(Vivid))
import System.IO
(hPutStrLn, stderr, hFlush, hIsTerminalDevice)
#if MIN_VERSION_ghc(9,4,0)
import GHC.Data.Bool (OverridingBool(..))
#elif MIN_VERSION_ghc(9,0,0)
import GHC.Utils.Misc (OverridingBool(..))
#else
import Util (OverridingBool(..))
#endif

import Clash.Annotations.Primitive
( PrimitiveGuard(HasBlackBox, DontTranslate)
Expand Down Expand Up @@ -92,6 +85,7 @@ import {-# SOURCE #-} Clash.Netlist
import qualified Clash.Backend as Backend
import qualified Clash.Data.UniqMap as UniqMap
import Clash.Debug (debugIsOn)
import Clash.Driver.Bool (OverridingBool(..))
import Clash.Driver.Types
(ClashOpts(opt_primWarn, opt_color, opt_werror))
import Clash.Netlist.BlackBox.Types as B
Expand Down
Loading