summaryrefslogtreecommitdiff
path: root/compiler/main/DriverPipeline.hs
diff options
context:
space:
mode:
authorMoritz Angermann <moritz.angermann@gmail.com>2017-11-17 19:29:25 +0800
committerMoritz Angermann <moritz.angermann@gmail.com>2017-11-18 11:00:11 +0800
commit12a7444463184e9eddbe7b7251a0ee1e976f4d75 (patch)
treea7c9e04baae103166f7d12d77676294ad50cb6c8 /compiler/main/DriverPipeline.hs
parentc7297342a4797ea36df8767d9c208cfb45de2d09 (diff)
downloadhaskell-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.hs11
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]