diff options
author | Moritz Angermann <moritz.angermann@gmail.com> | 2017-11-17 19:29:25 +0800 |
---|---|---|
committer | Moritz Angermann <moritz.angermann@gmail.com> | 2017-11-18 11:00:11 +0800 |
commit | 12a7444463184e9eddbe7b7251a0ee1e976f4d75 (patch) | |
tree | a7c9e04baae103166f7d12d77676294ad50cb6c8 /compiler/main/DriverPipeline.hs | |
parent | c7297342a4797ea36df8767d9c208cfb45de2d09 (diff) | |
download | haskell-12a7444463184e9eddbe7b7251a0ee1e976f4d75.tar.gz |
Adds -ghc-version flag to ghc.
Summary:
When building the rts with ghc (e.g. using ghc as a c compiler), ghc's
"Value Add"[1] is, it includes adding `-include /path/to/ghcversion.h`. For
this it looksup the rts package in the package database, which--if
empty--fails. Thus to allow compiling C files with GHC, we add the
`-ghc-version` flag, which takes the path to the `ghcversion.h` file.
A `-no-ghc-version` flag was omitted, as at that point it becomes
questionable why one would use ghc to compile c if one doesn't
any of the added value.
--
[1] from `compiler/main/DriverPipeline.hs`
> -- add package include paths even if we're just compiling .c
> -- files; this is the Value Add(TM) that using ghc instead of
> -- gcc gives you :)
Reviewers: bgamari, geekosaur, austin
Reviewed By: bgamari
Subscribers: rwbarton, thomie
Differential Revision: https://phabricator.haskell.org/D4135
Diffstat (limited to 'compiler/main/DriverPipeline.hs')
-rw-r--r-- | compiler/main/DriverPipeline.hs | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/compiler/main/DriverPipeline.hs b/compiler/main/DriverPipeline.hs index fab7fad9bc..4f7bfbda5c 100644 --- a/compiler/main/DriverPipeline.hs +++ b/compiler/main/DriverPipeline.hs @@ -2204,11 +2204,16 @@ touchObjectFile dflags path = do -- | Find out path to @ghcversion.h@ file getGhcVersionPathName :: DynFlags -> IO FilePath getGhcVersionPathName dflags = do - dirs <- getPackageIncludePath dflags [toInstalledUnitId rtsUnitId] + candidates <- case ghcVersion dflags of + Just path -> return [path] + Nothing -> (map (</> "ghcversion.h")) <$> + (getPackageIncludePath dflags [toInstalledUnitId rtsUnitId]) - found <- filterM doesFileExist (map (</> "ghcversion.h") dirs) + found <- filterM doesFileExist candidates case found of - [] -> throwGhcExceptionIO (InstallationError ("ghcversion.h missing")) + [] -> throwGhcExceptionIO (InstallationError + ("ghcversion.h missing; tried: " + ++ intercalate ", " candidates)) (x:_) -> return x -- Note [-fPIC for assembler] |