summaryrefslogtreecommitdiff
path: root/compiler/GHC/SysTools
diff options
context:
space:
mode:
authorBen Gamari <ben@smart-cactus.org>2022-03-23 15:53:06 -0400
committerMarge Bot <ben+marge-bot@smart-cactus.org>2022-05-17 00:25:02 -0400
commitfb579e15c56994bc6c4cc266535024f20a81f830 (patch)
treecceee15e84d67bdbbe6eced0a4e89449a416bcc4 /compiler/GHC/SysTools
parent8dfea0789957278b99bf302dfb24078fff84b6d2 (diff)
downloadhaskell-fb579e15c56994bc6c4cc266535024f20a81f830.tar.gz
driver: Introduce pgmcxx
Here we introduce proper support for compilation of C++ objects. This includes: * logic in `configure` to detect the C++ toolchain and propagating this information into the `settings` file * logic in the driver to use the C++ toolchain when compiling C++ sources
Diffstat (limited to 'compiler/GHC/SysTools')
-rw-r--r--compiler/GHC/SysTools/Tasks.hs32
1 files changed, 19 insertions, 13 deletions
diff --git a/compiler/GHC/SysTools/Tasks.hs b/compiler/GHC/SysTools/Tasks.hs
index 9b4400903e..ce741e2c1a 100644
--- a/compiler/GHC/SysTools/Tasks.hs
+++ b/compiler/GHC/SysTools/Tasks.hs
@@ -81,13 +81,13 @@ runPp logger dflags args = traceToolCommand logger "pp" $ do
-- | Run compiler of C-like languages and raw objects (such as gcc or clang).
runCc :: Maybe ForeignSrcLang -> Logger -> TmpFs -> DynFlags -> [Option] -> IO ()
runCc mLanguage logger tmpfs dflags args = traceToolCommand logger "cc" $ do
- let p = pgm_c dflags
- args1 = map Option userOpts
+ let args1 = map Option userOpts
args2 = languageOptions ++ args ++ args1
-- We take care to pass -optc flags in args1 last to ensure that the
-- user can override flags passed by GHC. See #14452.
mb_env <- getGccEnv args2
- runSomethingResponseFile logger tmpfs dflags cc_filter "C Compiler" p args2 mb_env
+ runSomethingResponseFile logger tmpfs dflags cc_filter dbgstring prog args2
+ mb_env
where
-- discard some harmless warnings from gcc that we can't turn off
cc_filter = unlines . doFilter . lines
@@ -143,17 +143,23 @@ runCc mLanguage logger tmpfs dflags args = traceToolCommand logger "cc" $ do
-- compiling .hc files, by adding the -x c option.
-- Also useful for plain .c files, just in case GHC saw a
-- -x c option.
- (languageOptions, userOpts) = case mLanguage of
- Nothing -> ([], userOpts_c)
- Just language -> ([Option "-x", Option languageName], opts)
+ (languageOptions, userOpts, prog, dbgstring) = case mLanguage of
+ Nothing -> ([], userOpts_c, pgm_c dflags, "C Compiler")
+ Just language -> ([Option "-x", Option languageName], opts, prog, dbgstr)
where
- (languageName, opts) = case language of
- LangC -> ("c", userOpts_c)
- LangCxx -> ("c++", userOpts_cxx)
- LangObjc -> ("objective-c", userOpts_c)
- LangObjcxx -> ("objective-c++", userOpts_cxx)
- LangAsm -> ("assembler", [])
- RawObject -> ("c", []) -- claim C for lack of a better idea
+ (languageName, opts, prog, dbgstr) = case language of
+ LangC -> ("c", userOpts_c
+ ,pgm_c dflags, "C Compiler")
+ LangCxx -> ("c++", userOpts_cxx
+ ,pgm_cxx dflags , "C++ Compiler")
+ LangObjc -> ("objective-c", userOpts_c
+ ,pgm_c dflags , "Objective C Compiler")
+ LangObjcxx -> ("objective-c++", userOpts_cxx
+ ,pgm_cxx dflags, "Objective C++ Compiler")
+ LangAsm -> ("assembler", []
+ ,pgm_c dflags, "Asm Compiler")
+ RawObject -> ("c", []
+ ,pgm_c dflags, "C Compiler") -- claim C for lack of a better idea
userOpts_c = getOpts dflags opt_c
userOpts_cxx = getOpts dflags opt_cxx