Include RTS flags in kernelspec when installing.

This commit is contained in:
Justus Sagemüller 2017-03-14 18:51:01 +01:00
parent 8dcb905043
commit 4245ef5191
3 changed files with 24 additions and 1 deletions

View File

@ -113,6 +113,8 @@ parseKernelArgs = foldl' addFlag defaultKernelSpecOptions
kernelSpecOpts { kernelSpecDebug = True }
addFlag kernelSpecOpts (GhcLibDir libdir) =
kernelSpecOpts { kernelSpecGhcLibdir = libdir }
addFlag kernelSpecOpts (RTSFlags rts) =
kernelSpecOpts { kernelSpecRTSOptions = rts }
addFlag kernelSpecOpts (KernelspecInstallPrefix prefix) =
kernelSpecOpts { kernelSpecInstallPrefix = Just prefix }
addFlag kernelSpecOpts KernelspecUseStack =

View File

@ -31,6 +31,8 @@ data Args = Args IHaskellMode [Argument]
data Argument = ConfFile String -- ^ A file with commands to load at startup.
| OverwriteFiles -- ^ Present when output should overwrite existing files.
| GhcLibDir String -- ^ Where to find the GHC libraries.
| RTSFlags [String] -- ^ Options for the GHC runtime (e.g. heap-size limit
-- or number of threads).
| KernelDebug -- ^ Spew debugging output from the kernel.
| Help -- ^ Display help text.
| Version -- ^ Display version text.
@ -96,6 +98,20 @@ help mode = showText (Wrap 100) $ helpText [] HelpFormatAll $ chooseMode mode
ghcLibFlag :: Flag Args
ghcLibFlag = flagReq ["ghclib", "l"] (store GhcLibDir) "<path>" "Library directory for GHC."
ghcRTSFlag :: Flag Args
ghcRTSFlag = flagReq ["use-rtsopts"] storeRTS "\"<flags>\""
"Runtime options (multithreading etc.). See `ghc +RTS -?`."
where storeRTS allRTSFlags (Args mode prev)
= fmap (Args mode . (:prev) . RTSFlags)
. parseRTS . words $ filter (/='"') allRTSFlags
parseRTS ("+RTS":fs) -- Ignore if this is included (we already wrap
= parseRTS fs -- the ihaskell-kernel call in +RTS <flags> -RTS anyway)
parseRTS ["-RTS"] = Right []
parseRTS ("-RTS":_) -- Evil injection of extra arguments? Unlikely, but...
= Left "Adding non-RTS options to --use-rtsopts not permitted."
parseRTS (f:fs) = (f:) <$> parseRTS fs
parseRTS [] = Right []
kernelDebugFlag :: Flag Args
kernelDebugFlag = flagNone ["debug"] addDebug "Print debugging output from the kernel."
where
@ -125,7 +141,7 @@ store constructor str (Args mode prev) = Right $ Args mode $ constructor str : p
installKernelSpec :: Mode Args
installKernelSpec =
mode "install" (Args InstallKernelSpec []) "Install the Jupyter kernelspec." noArgs
[ghcLibFlag, kernelDebugFlag, confFlag, installPrefixFlag, helpFlag, kernelStackFlag]
[ghcLibFlag, ghcRTSFlag, kernelDebugFlag, confFlag, installPrefixFlag, helpFlag, kernelStackFlag]
kernel :: Mode Args
kernel = mode "kernel" (Args (Kernel Nothing) []) "Invoke the IHaskell kernel." kernelArg

View File

@ -45,6 +45,7 @@ import StringUtils (replace, split)
data KernelSpecOptions =
KernelSpecOptions
{ kernelSpecGhcLibdir :: String -- ^ GHC libdir.
, kernelSpecRTSOptions :: [String] -- ^ Runtime options to use.
, kernelSpecDebug :: Bool -- ^ Spew debugging output?
, kernelSpecConfFile :: IO (Maybe String) -- ^ Filename of profile JSON file.
, kernelSpecInstallPrefix :: Maybe String
@ -54,6 +55,7 @@ data KernelSpecOptions =
defaultKernelSpecOptions :: KernelSpecOptions
defaultKernelSpecOptions = KernelSpecOptions
{ kernelSpecGhcLibdir = GHC.Paths.libdir
, kernelSpecRTSOptions = []
, kernelSpecDebug = False
, kernelSpecConfFile = defaultConfFile
, kernelSpecInstallPrefix = Nothing
@ -191,6 +193,9 @@ installKernelspec replace opts = void $ do
Nothing -> []
Just file -> ["--conf", file])
++ ["--ghclib", kernelSpecGhcLibdir opts]
++ (case kernelSpecRTSOptions opts of
[] -> []
rtsOpts -> "+RTS" : kernelSpecRTSOptions opts ++ ["-RTS"])
++ ["--stack" | kernelSpecUseStack opts]
let kernelSpec = KernelSpec