GHC.SysTools.Tasks

ghc-9.0.1: The GHC API

Safe Haskell | None
Language | Haskell2010

GHC.SysTools.Tasks

Contents

- Tracing utility

Synopsis

- runUnlit :: DynFlags -> [Option] -> IO ()
- runCpp :: DynFlags -> [Option] -> IO ()
- runPp :: DynFlags -> [Option] -> IO ()
- runCc :: Maybe ForeignSrcLang -> DynFlags -> [Option] -> IO ()
- isContainedIn :: String -> String -> Bool
- askLd :: DynFlags -> [Option] -> IO String
- runAs :: DynFlags -> [Option] -> IO ()
- runLlvmOpt :: DynFlags -> [Option] -> IO ()
- runLlvmLlc :: DynFlags -> [Option] -> IO ()
- runClang :: DynFlags -> [Option] -> IO ()
- figureLlvmVersion :: DynFlags -> IO (Maybe LlvmVersion)
- runInjectRPaths :: DynFlags -> [FilePath] -> FilePath -> IO ()
- runLink :: DynFlags -> [Option] -> IO ()
- runMergeObjects :: DynFlags -> [Option] -> IO ()
- runLibtool :: DynFlags -> [Option] -> IO ()
- runAr :: DynFlags -> Maybe FilePath -> [Option] -> IO ()
- askOtool :: DynFlags -> Maybe FilePath -> [Option] -> IO String
- runInstallNameTool :: DynFlags -> [Option] -> IO ()
- runRanlib :: DynFlags -> [Option] -> IO ()
- runWindres :: DynFlags -> [Option] -> IO ()
- touch :: DynFlags -> String -> String -> IO ()
- traceToolCommand :: DynFlags -> String -> IO a -> IO a

# Documentation

runUnlit :: DynFlags -> [Option] -> IO () Source #

runCpp :: DynFlags -> [Option] -> IO () Source #

runPp :: DynFlags -> [Option] -> IO () Source #

runCc :: Maybe ForeignSrcLang -> DynFlags -> [Option] -> IO () Source #

Run compiler of C-like languages and raw objects (such as gcc or clang).

isContainedIn :: String -> String -> Bool Source #

askLd :: DynFlags -> [Option] -> IO String Source #

Run the linker with some arguments and return the output

runAs :: DynFlags -> [Option] -> IO () Source #

runLlvmOpt :: DynFlags -> [Option] -> IO () Source #

Run the LLVM Optimiser

runLlvmLlc :: DynFlags -> [Option] -> IO () Source #

Run the LLVM Compiler

runClang :: DynFlags -> [Option] -> IO () Source #

Run the clang compiler (used as an assembler for the LLVM backend on OS X as LLVM doesn't support the OS X system assembler)

figureLlvmVersion :: DynFlags -> IO (Maybe LlvmVersion) Source #

Figure out which version of LLVM we are running this session

runInjectRPaths :: DynFlags -> [FilePath] -> FilePath -> IO () Source #

On macOS we rely on the linkers `-dead_strip_dylibs` flag to remove unused libraries from the dynamic library. We do this to reduce the number of load commands that end up in the dylib, and has been limited to 32K (32768) since macOS Sierra (10.14).

`-dead_strip_dylibs` does not dead strip `-rpath` entries, as such passing `-l` and `-rpath` to the linker will result in the unnecesasry libraries not being included in the load commands, however the `-rpath` entries are all forced to be included. This can lead to 100s of `-rpath` entries being included when only a handful of libraries end up being truely linked.

Thus after building the library, we run a fixup phase where we inject the `-rpath` for each found library (in the given library search paths) into the dynamic library through `-add_rpath`.

See Note [Dynamic linking on macOS]

runLink :: DynFlags -> [Option] -> IO () Source #

runMergeObjects :: DynFlags -> [Option] -> IO () Source #

runLibtool :: DynFlags -> [Option] -> IO () Source #

runAr :: DynFlags -> Maybe FilePath -> [Option] -> IO () Source #

askOtool :: DynFlags -> Maybe FilePath -> [Option] -> IO String Source #

runInstallNameTool :: DynFlags -> [Option] -> IO () Source #

runRanlib :: DynFlags -> [Option] -> IO () Source #

runWindres :: DynFlags -> [Option] -> IO () Source #

touch :: DynFlags -> String -> String -> IO () Source #

# Tracing utility

traceToolCommand :: DynFlags -> String -> IO a -> IO a Source #

Record in the eventlog when the given tool command starts and finishes, prepending the given `String` with "systool:", to easily be able to collect and process all the systool events.

For those events to show up in the eventlog, you need to run GHC with `-v2` or `-ddump-timings`.