summaryrefslogtreecommitdiff
path: root/compiler/GHC/SysTools
diff options
context:
space:
mode:
authorAdam Sandberg Ericsson <adam@sandbergericsson.se>2021-05-16 10:41:32 +0100
committerMarge Bot <ben+marge-bot@smart-cactus.org>2021-05-19 23:40:47 -0400
commit441fdd6ce8af823e99fd260ed0f96b99e457bce5 (patch)
tree1faf6976c9178e9e65b84d53f52f15ccadd3a8dc /compiler/GHC/SysTools
parentd48b7e5c2fae5db1973a767be45aba82b2aa727c (diff)
downloadhaskell-441fdd6ce8af823e99fd260ed0f96b99e457bce5.tar.gz
driver: check if clang is the assembler when passing clang specific arguments (#19827)
Previously we assumed that the assembler was the same as the c compiler, but we allow setting them to different programs with -pgmc and -pgma.
Diffstat (limited to 'compiler/GHC/SysTools')
-rw-r--r--compiler/GHC/SysTools/Info.hs28
1 files changed, 20 insertions, 8 deletions
diff --git a/compiler/GHC/SysTools/Info.hs b/compiler/GHC/SysTools/Info.hs
index b53d0fb567..733c2eaade 100644
--- a/compiler/GHC/SysTools/Info.hs
+++ b/compiler/GHC/SysTools/Info.hs
@@ -205,22 +205,34 @@ getLinkerInfo' logger dflags = do
return UnknownLD
)
--- Grab compiler info and cache it in DynFlags.
+-- | Grab compiler info and cache it in DynFlags.
getCompilerInfo :: Logger -> DynFlags -> IO CompilerInfo
getCompilerInfo logger dflags = do
info <- readIORef (rtccInfo dflags)
case info of
Just v -> return v
Nothing -> do
- v <- getCompilerInfo' logger dflags
+ let pgm = pgm_c dflags
+ v <- getCompilerInfo' logger dflags pgm
writeIORef (rtccInfo dflags) (Just v)
return v
+-- | Grab assembler info and cache it in DynFlags.
+getAssemblerInfo :: Logger -> DynFlags -> IO CompilerInfo
+getAssemblerInfo logger dflags = do
+ info <- readIORef (rtasmInfo dflags)
+ case info of
+ Just v -> return v
+ Nothing -> do
+ let (pgm, _) = pgm_a dflags
+ v <- getCompilerInfo' logger dflags pgm
+ writeIORef (rtasmInfo dflags) (Just v)
+ return v
+
-- See Note [Run-time linker info].
-getCompilerInfo' :: Logger -> DynFlags -> IO CompilerInfo
-getCompilerInfo' logger dflags = do
- let pgm = pgm_c dflags
- -- Try to grab the info from the process output.
+getCompilerInfo' :: Logger -> DynFlags -> String -> IO CompilerInfo
+getCompilerInfo' logger dflags pgm = do
+ let -- Try to grab the info from the process output.
parseCompilerInfo _stdo stde _exitc
-- Regular GCC
| any ("gcc version" `isInfixOf`) stde =
@@ -240,8 +252,8 @@ getCompilerInfo' logger dflags = do
-- Xcode 4.1 clang
| any ("Apple clang version" `isPrefixOf`) stde =
return AppleClang
- -- Unknown linker.
- | otherwise = fail $ "invalid -v output, or compiler is unsupported: " ++ unlines stde
+ -- Unknown compiler.
+ | otherwise = fail $ "invalid -v output, or compiler is unsupported (" ++ pgm ++ "): " ++ unlines stde
-- Process the executable call
catchIO (do