Re: [commit: ghc] master: Adds -ghc-version flag to ghc. (12a7444)

Hmm, when seeing "-ghc-version" I first thought
why a new flag for querying the version of GHC?
But the flag has a different purpose!
I'd suggest to rename it to "-ghcversion-file" or similar.
Just my two cents...
Cheers,
Gabor
On 11/18/17, git@git.haskell.org
Repository : ssh://git@git.haskell.org/ghc
On branch : master Link : http://ghc.haskell.org/trac/ghc/changeset/12a7444463184e9eddbe7b7251a0ee1e97...
---------------------------------------------------------------
commit 12a7444463184e9eddbe7b7251a0ee1e976f4d75 Author: Moritz Angermann
Date: Fri Nov 17 19:29:25 2017 +0800 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
---------------------------------------------------------------
12a7444463184e9eddbe7b7251a0ee1e976f4d75 compiler/main/DriverPipeline.hs | 11 ++++++++--- compiler/main/DynFlags.hs | 7 +++++++ docs/users_guide/using.rst | 23 +++++++++++++++++++++++ 3 files changed, 38 insertions(+), 3 deletions(-)
diff --git a/compiler/main/DriverPipeline.hs b/compiler/main/DriverPipeline.hs index fab7fad..4f7bfbd 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] diff --git a/compiler/main/DynFlags.hs b/compiler/main/DynFlags.hs index 5888acc..04ac635 100644 --- a/compiler/main/DynFlags.hs +++ b/compiler/main/DynFlags.hs @@ -534,6 +534,7 @@ data GeneralFlag | Opt_ExternalInterpreter | Opt_OptimalApplicativeDo | Opt_VersionMacros + | Opt_GhcVersion | Opt_WholeArchiveHsLibs
-- PreInlining is on by default. The option is there just to see how @@ -917,6 +918,7 @@ data DynFlags = DynFlags { flushOut :: FlushOut, flushErr :: FlushErr,
+ ghcVersion :: Maybe FilePath, haddockOptions :: Maybe String,
-- | GHCi scripts specified by -ghci-script, in reverse order @@ -1682,6 +1684,7 @@ defaultDynFlags mySettings myLlvmTargets = filesToClean = panic "defaultDynFlags: No filesToClean", dirsToClean = panic "defaultDynFlags: No dirsToClean", generatedDumps = panic "defaultDynFlags: No generatedDumps", + ghcVersion = Nothing, haddockOptions = Nothing, dumpFlags = EnumSet.empty, generalFlags = EnumSet.fromList (defaultFlags mySettings), @@ -2339,6 +2342,9 @@ addDepSuffix s d = d { depSuffixes = s : depSuffixes d }
addCmdlineFramework f d = d { cmdlineFrameworks = f : cmdlineFrameworks d}
+addGhcVersion :: FilePath -> DynFlags -> DynFlags +addGhcVersion f d = d { ghcVersion = Just f } + addHaddockOpts f d = d { haddockOptions = Just f}
addGhciScript f d = d { ghciScripts = f : ghciScripts d} @@ -2866,6 +2872,7 @@ dynamic_flags_deps = [ , make_ord_flag defGhcFlag "no-rtsopts-suggestions" (noArg (\d -> d {rtsOptsSuggestions = False}))
+ , make_ord_flag defGhcFlag "ghc-version" (hasArg addGhcVersion) , make_ord_flag defGhcFlag "main-is" (SepArg setMainIs) , make_ord_flag defGhcFlag "haddock" (NoArg (setGeneralFlag Opt_Haddock)) , make_ord_flag defGhcFlag "haddock-opts" (hasArg addHaddockOpts) diff --git a/docs/users_guide/using.rst b/docs/users_guide/using.rst index a963ead..e3fa741 100644 --- a/docs/users_guide/using.rst +++ b/docs/users_guide/using.rst @@ -1064,3 +1064,26 @@ Some flags only make sense for particular target platforms. and later). The :ref:`LLVM backend <llvm-code-gen>` will also use SSE4.2 if your processor supports it but detects this automatically so no flag is required. + +Miscellaneous flags +------------------- + +.. index:: + single: miscellaneous flags + +Some flags only make sense for a particular use case. + +.. ghc-flag:: -ghc-version ⟨path to ghcversion.h⟩ + :shortdesc: (GHC as a C compiler only) Use this ``ghcversion.h`` file + :type: dynamic + :category: misc + + When GHC is used to compile C files, GHC adds package include paths and + includes ``ghcversion.h`` directly. The compiler will lookup the path for + the ``ghcversion.h`` file from the ``rts`` package in the package database. + In some cases, the compiler's package database does not contain the ``rts`` + package, or one wants to specify a specific ``ghcversions.h`` to be + included. This option can be used to specify the path to the + ``ghcversions.h`` file to be included. This is primarily intended to be + used by GHC's build system. +
_______________________________________________ ghc-commits mailing list ghc-commits@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-commits
participants (1)
-
Gabor Greif