From fb579e15c56994bc6c4cc266535024f20a81f830 Mon Sep 17 00:00:00 2001 From: Ben Gamari Date: Wed, 23 Mar 2022 15:53:06 -0400 Subject: 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 --- compiler/GHC/SysTools/Tasks.hs | 32 +++++++++++++++++++------------- 1 file changed, 19 insertions(+), 13 deletions(-) (limited to 'compiler/GHC/SysTools') 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 -- cgit v1.2.1