1
+ {-# LANGUAGE CPP #-}
1
2
{-# LANGUAGE TypeApplications #-}
2
3
3
4
module BenchmarkCommon where
@@ -17,6 +18,22 @@ import Clash.GHC.NetlistTypes
17
18
18
19
import qualified Control.Concurrent.Supply as Supply
19
20
21
+ #if MIN_VERSION_ghc(9,2,0)
22
+ import qualified GHC.Driver.Monad as GHC
23
+ import qualified GHC.Driver.Session as GHC
24
+ import qualified GHC.Driver.Env.Types as GHC
25
+ import qualified GHC.LanguageExtensions as LangExt
26
+ import qualified GHC.Settings as GHC
27
+ import qualified GHC.Utils.Fingerprint as GHC
28
+ #elif MIN_VERSION_ghc(9,0,0)
29
+ import qualified GHC.Driver.Monad as GHC
30
+ import qualified GHC.Driver.Session as GHC
31
+ import qualified GHC.Driver.Types as GHC
32
+ import qualified GHC.LanguageExtensions as LangExt
33
+ import qualified GHC.Settings as GHC
34
+ import qualified GHC.Utils.Fingerprint as GHC
35
+ #endif
36
+
20
37
defaultTests :: [FilePath ]
21
38
defaultTests =
22
39
[ " examples/FIR.hs"
@@ -49,7 +66,34 @@ runInputStage idirs src = do
49
66
let o = opts idirs
50
67
let backend = initBackend @ VHDLState o
51
68
pds <- primDirs backend
52
- generateBindings o (return () ) pds (opt_importPaths o) [] (hdlKind backend) src Nothing
69
+ generateBindings o action pds (opt_importPaths o) [] (hdlKind backend) src Nothing
70
+ where
71
+ #if MIN_VERSION_ghc(9,0,0)
72
+ action = do
73
+ env <- GHC. getSession
74
+ let df0 = GHC. hsc_dflags env
75
+ #if MIN_VERSION_ghc(9,4,0)
76
+ df1 = addOptP " -DCLASH_OPAQUE=OPAQUE" df0
77
+ #else
78
+ df1 = addOptP " -DCLASH_OPAQUE=NOINLINE" df0
79
+ #endif
80
+ df2 = GHC. xopt_set df1 LangExt. Cpp
81
+ GHC. setSession (env {GHC. hsc_dflags = df2})
82
+
83
+ addOptP :: String -> GHC. DynFlags -> GHC. DynFlags
84
+ addOptP f = alterToolSettings $ \ s -> s
85
+ { GHC. toolSettings_opt_P = f : GHC. toolSettings_opt_P s
86
+ , GHC. toolSettings_opt_P_fingerprint = fingerprintStrings (f : GHC. toolSettings_opt_P s)
87
+ }
88
+
89
+ alterToolSettings :: (GHC. ToolSettings -> GHC. ToolSettings ) -> GHC. DynFlags -> GHC. DynFlags
90
+ alterToolSettings f dynFlags = dynFlags { GHC. toolSettings = f (GHC. toolSettings dynFlags) }
91
+
92
+ fingerprintStrings :: [String ] -> GHC. Fingerprint
93
+ fingerprintStrings ss = GHC. fingerprintFingerprints $ map GHC. fingerprintString ss
94
+ #else
95
+ action = return ()
96
+ #endif
53
97
54
98
runNormalisationStage
55
99
:: [FilePath ]
0 commit comments