[commit: ghc] master: Adds -ghc-version flag to ghc. (12a7444)
Gabor Greif
ggreif at gmail.com
Sat Nov 18 12:41:38 UTC 2017
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 at git.haskell.org <git at git.haskell.org> wrote:
> Repository : ssh://git@git.haskell.org/ghc
>
> On branch : master
> Link :
> http://ghc.haskell.org/trac/ghc/changeset/12a7444463184e9eddbe7b7251a0ee1e976f4d75/ghc
>
>>---------------------------------------------------------------
>
> commit 12a7444463184e9eddbe7b7251a0ee1e976f4d75
> Author: Moritz Angermann <moritz.angermann at gmail.com>
> 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 at haskell.org
> http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-commits
>
More information about the ghc-devs
mailing list