diff options
author | Adam Sandberg Ericsson <adam@sandbergericsson.se> | 2021-05-16 10:41:32 +0100 |
---|---|---|
committer | Marge Bot <ben+marge-bot@smart-cactus.org> | 2021-05-19 23:40:47 -0400 |
commit | 441fdd6ce8af823e99fd260ed0f96b99e457bce5 (patch) | |
tree | 1faf6976c9178e9e65b84d53f52f15ccadd3a8dc /compiler/GHC/SysTools | |
parent | d48b7e5c2fae5db1973a767be45aba82b2aa727c (diff) | |
download | haskell-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.hs | 28 |
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 |