diff options
Diffstat (limited to 'compiler/main/DynFlags.hs')
-rw-r--r-- | compiler/main/DynFlags.hs | 25 |
1 files changed, 23 insertions, 2 deletions
diff --git a/compiler/main/DynFlags.hs b/compiler/main/DynFlags.hs index 25553d280b..2c82f448b8 100644 --- a/compiler/main/DynFlags.hs +++ b/compiler/main/DynFlags.hs @@ -308,6 +308,8 @@ data GeneralFlag | Opt_OmitYields | Opt_SimpleListLiterals | Opt_FunToThunk -- allow WwLib.mkWorkerArgs to remove all value lambdas + | Opt_DictsStrict -- be strict in argument dictionaries + | Opt_DmdTxDictSel -- use a special demand transformer for dictionary selectors -- Interface files | Opt_IgnoreInterfacePragmas @@ -489,6 +491,7 @@ data ExtensionFlag | Opt_InterruptibleFFI | Opt_CApiFFI | Opt_GHCForeignImportPrim + | Opt_JavaScriptFFI | Opt_ParallelArrays -- Syntactic support for parallel arrays | Opt_Arrows -- Arrow-notation syntax | Opt_TemplateHaskell @@ -1026,7 +1029,8 @@ data RtsOptsEnabled = RtsOptsNone | RtsOptsSafeOnly | RtsOptsAll -- this compilation. data Way - = WayThreaded + = WayCustom String -- for GHC API clients building custom variants + | WayThreaded | WayDebug | WayProf | WayEventLog @@ -1052,6 +1056,7 @@ allowed_combination way = and [ x `allowedWith` y _ `allowedWith` WayDebug = True WayDebug `allowedWith` _ = True + (WayCustom {}) `allowedWith` _ = True WayProf `allowedWith` WayNDP = True WayThreaded `allowedWith` WayProf = True WayThreaded `allowedWith` WayEventLog = True @@ -1061,6 +1066,7 @@ mkBuildTag :: [Way] -> String mkBuildTag ways = concat (intersperse "_" (map wayTag ways)) wayTag :: Way -> String +wayTag (WayCustom xs) = xs wayTag WayThreaded = "thr" wayTag WayDebug = "debug" wayTag WayDyn = "dyn" @@ -1071,6 +1077,7 @@ wayTag WayGran = "mg" wayTag WayNDP = "ndp" wayRTSOnly :: Way -> Bool +wayRTSOnly (WayCustom {}) = False wayRTSOnly WayThreaded = True wayRTSOnly WayDebug = True wayRTSOnly WayDyn = False @@ -1081,6 +1088,7 @@ wayRTSOnly WayGran = False wayRTSOnly WayNDP = False wayDesc :: Way -> String +wayDesc (WayCustom xs) = xs wayDesc WayThreaded = "Threaded" wayDesc WayDebug = "Debug" wayDesc WayDyn = "Dynamic" @@ -1092,6 +1100,7 @@ wayDesc WayNDP = "Nested data parallelism" -- Turn these flags on when enabling this way wayGeneralFlags :: Platform -> Way -> [GeneralFlag] +wayGeneralFlags _ (WayCustom {}) = [] wayGeneralFlags _ WayThreaded = [] wayGeneralFlags _ WayDebug = [] wayGeneralFlags _ WayDyn = [Opt_PIC] @@ -1103,6 +1112,7 @@ wayGeneralFlags _ WayNDP = [] -- Turn these flags off when enabling this way wayUnsetGeneralFlags :: Platform -> Way -> [GeneralFlag] +wayUnsetGeneralFlags _ (WayCustom {}) = [] wayUnsetGeneralFlags _ WayThreaded = [] wayUnsetGeneralFlags _ WayDebug = [] wayUnsetGeneralFlags _ WayDyn = [-- There's no point splitting objects @@ -1117,6 +1127,7 @@ wayUnsetGeneralFlags _ WayGran = [] wayUnsetGeneralFlags _ WayNDP = [] wayExtras :: Platform -> Way -> DynFlags -> DynFlags +wayExtras _ (WayCustom {}) dflags = dflags wayExtras _ WayThreaded dflags = dflags wayExtras _ WayDebug dflags = dflags wayExtras _ WayDyn dflags = dflags @@ -1128,6 +1139,7 @@ wayExtras _ WayNDP dflags = setExtensionFlag' Opt_ParallelArrays $ setGeneralFlag' Opt_Vectorise dflags wayOptc :: Platform -> Way -> [String] +wayOptc _ (WayCustom {}) = [] wayOptc platform WayThreaded = case platformOS platform of OSOpenBSD -> ["-pthread"] OSNetBSD -> ["-pthread"] @@ -1141,6 +1153,7 @@ wayOptc _ WayGran = ["-DGRAN"] wayOptc _ WayNDP = [] wayOptl :: Platform -> Way -> [String] +wayOptl _ (WayCustom {}) = [] wayOptl platform WayThreaded = case platformOS platform of -- FreeBSD's default threading library is the KSE-based M:N libpthread, @@ -1163,6 +1176,7 @@ wayOptl _ WayGran = [] wayOptl _ WayNDP = [] wayOptP :: Platform -> Way -> [String] +wayOptP _ (WayCustom {}) = [] wayOptP _ WayThreaded = [] wayOptP _ WayDebug = [] wayOptP _ WayDyn = [] @@ -2590,7 +2604,9 @@ fFlags = [ ( "flat-cache", Opt_FlatCache, nop ), ( "use-rpaths", Opt_RPath, nop ), ( "kill-absence", Opt_KillAbsence, nop), - ( "kill-one-shot", Opt_KillOneShot, nop) + ( "kill-one-shot", Opt_KillOneShot, nop), + ( "dicts-strict", Opt_DictsStrict, nop ), + ( "dmd-tx-dict-sel", Opt_DmdTxDictSel, nop ) ] -- | These @-f\<blah\>@ flags can all be reversed with @-fno-\<blah\>@ @@ -2679,6 +2695,7 @@ xFlags = [ ( "InterruptibleFFI", Opt_InterruptibleFFI, nop ), ( "CApiFFI", Opt_CApiFFI, nop ), ( "GHCForeignImportPrim", Opt_GHCForeignImportPrim, nop ), + ( "JavaScriptFFI", Opt_JavaScriptFFI, nop ), ( "LiberalTypeSynonyms", Opt_LiberalTypeSynonyms, nop ), ( "PolymorphicComponents", Opt_RankNTypes, nop), @@ -2844,6 +2861,8 @@ impliedFlags -- `IP "x" Int`, which requires a flexible context/instance. , (Opt_ImplicitParams, turnOn, Opt_FlexibleContexts) , (Opt_ImplicitParams, turnOn, Opt_FlexibleInstances) + + , (Opt_JavaScriptFFI, turnOn, Opt_InterruptibleFFI) ] optLevelFlags :: [([Int], GeneralFlag)] @@ -2871,6 +2890,8 @@ optLevelFlags , ([1,2], Opt_CmmSink) , ([1,2], Opt_CmmElimCommonBlocks) + , ([0,1,2], Opt_DmdTxDictSel) + -- , ([2], Opt_StaticArgumentTransformation) -- Max writes: I think it's probably best not to enable SAT with -O2 for the -- 6.10 release. The version of SAT in HEAD at the moment doesn't incorporate |