Commit 71aca77c authored by Erik de Castro Lopo's avatar Erik de Castro Lopo Committed by Marge Bot

Fixes for LLVM 7

LLVM version numberinf changed recently. Previously, releases were numbered
4.0, 5.0 and 6.0 but with version 7, they dropped the redundant ".0".

Fix requires for Llvm detection and some code.
parent 9bbcc3be
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
-- ----------------------------------------------------------------------------- -- -----------------------------------------------------------------------------
-- | This is the top-level module in the LLVM code generator. -- | This is the top-level module in the LLVM code generator.
-- --
module LlvmCodeGen ( llvmCodeGen, llvmFixupAsm ) where module LlvmCodeGen ( LlvmVersion (..), llvmCodeGen, llvmFixupAsm ) where
#include "HsVersions.h" #include "HsVersions.h"
......
...@@ -13,7 +13,7 @@ module LlvmCodeGen.Base ( ...@@ -13,7 +13,7 @@ module LlvmCodeGen.Base (
LiveGlobalRegs, LiveGlobalRegs,
LlvmUnresData, LlvmData, UnresLabel, UnresStatic, LlvmUnresData, LlvmData, UnresLabel, UnresStatic,
LlvmVersion, supportedLlvmVersion, llvmVersionStr, LlvmVersion (..), supportedLlvmVersion, llvmVersionStr,
LlvmM, LlvmM,
runLlvm, liftStream, withClearVars, varLookup, varInsert, runLlvm, liftStream, withClearVars, varLookup, varInsert,
...@@ -177,14 +177,25 @@ llvmPtrBits dflags = widthInBits $ typeWidth $ gcWord dflags ...@@ -177,14 +177,25 @@ llvmPtrBits dflags = widthInBits $ typeWidth $ gcWord dflags
-- --
-- | LLVM Version Number -- | LLVM Version Number
type LlvmVersion = (Int, Int) data LlvmVersion
= LlvmVersion Int
| LlvmVersionOld Int Int
deriving Eq
-- Custom show instance for backwards compatibility.
instance Show LlvmVersion where
show (LlvmVersion maj) = show maj
show (LlvmVersionOld maj min) = show maj ++ "." ++ show min
-- | The LLVM Version that is currently supported. -- | The LLVM Version that is currently supported.
supportedLlvmVersion :: LlvmVersion supportedLlvmVersion :: LlvmVersion
supportedLlvmVersion = sUPPORTED_LLVM_VERSION supportedLlvmVersion = LlvmVersion sUPPORTED_LLVM_VERSION
llvmVersionStr :: LlvmVersion -> String llvmVersionStr :: LlvmVersion -> String
llvmVersionStr (major, minor) = show major ++ "." ++ show minor llvmVersionStr v =
case v of
LlvmVersion maj -> show maj
LlvmVersionOld maj min -> show maj ++ "." ++ show min
-- ---------------------------------------------------------------------------- -- ----------------------------------------------------------------------------
-- * Environment Handling -- * Environment Handling
......
...@@ -56,7 +56,7 @@ import StringBuffer ( hGetStringBuffer, hPutStringBuffer ) ...@@ -56,7 +56,7 @@ import StringBuffer ( hGetStringBuffer, hPutStringBuffer )
import BasicTypes ( SuccessFlag(..) ) import BasicTypes ( SuccessFlag(..) )
import Maybes ( expectJust ) import Maybes ( expectJust )
import SrcLoc import SrcLoc
import LlvmCodeGen ( llvmFixupAsm ) import LlvmCodeGen ( LlvmVersion (..), llvmFixupAsm )
import MonadUtils import MonadUtils
import GHC.Platform import GHC.Platform
import TcRnTypes import TcRnTypes
...@@ -2038,7 +2038,8 @@ getBackendDefs :: DynFlags -> IO [String] ...@@ -2038,7 +2038,8 @@ getBackendDefs :: DynFlags -> IO [String]
getBackendDefs dflags | hscTarget dflags == HscLlvm = do getBackendDefs dflags | hscTarget dflags == HscLlvm = do
llvmVer <- figureLlvmVersion dflags llvmVer <- figureLlvmVersion dflags
return $ case llvmVer of return $ case llvmVer of
Just n -> [ "-D__GLASGOW_HASKELL_LLVM__=" ++ format n ] Just (LlvmVersion n) -> [ "-D__GLASGOW_HASKELL_LLVM__=" ++ format (n,0) ]
Just (LlvmVersionOld m n) -> [ "-D__GLASGOW_HASKELL_LLVM__=" ++ format (m,n) ]
_ -> [] _ -> []
where where
format (major, minor) format (major, minor)
......
...@@ -23,7 +23,7 @@ import System.IO ...@@ -23,7 +23,7 @@ import System.IO
import System.Process import System.Process
import GhcPrelude import GhcPrelude
import LlvmCodeGen.Base (llvmVersionStr, supportedLlvmVersion) import LlvmCodeGen.Base (LlvmVersion (..), llvmVersionStr, supportedLlvmVersion)
import SysTools.Process import SysTools.Process
import SysTools.Info import SysTools.Info
...@@ -200,7 +200,7 @@ runClang dflags args = do ...@@ -200,7 +200,7 @@ runClang dflags args = do
) )
-- | Figure out which version of LLVM we are running this session -- | Figure out which version of LLVM we are running this session
figureLlvmVersion :: DynFlags -> IO (Maybe (Int, Int)) figureLlvmVersion :: DynFlags -> IO (Maybe LlvmVersion)
figureLlvmVersion dflags = do figureLlvmVersion dflags = do
let (pgm,opts) = pgm_lc dflags let (pgm,opts) = pgm_lc dflags
args = filter notNull (map showOpt opts) args = filter notNull (map showOpt opts)
...@@ -222,8 +222,10 @@ figureLlvmVersion dflags = do ...@@ -222,8 +222,10 @@ figureLlvmVersion dflags = do
vline <- dropWhile (not . isDigit) `fmap` hGetLine pout vline <- dropWhile (not . isDigit) `fmap` hGetLine pout
v <- case span (/= '.') vline of v <- case span (/= '.') vline of
("",_) -> fail "no digits!" ("",_) -> fail "no digits!"
(x,y) -> return (read x (x,"") -> return $ LlvmVersion (read x)
, read $ takeWhile isDigit $ drop 1 y) (x,y) -> return $ LlvmVersionOld
(read x)
(read $ takeWhile isDigit $ drop 1 y)
hClose pin hClose pin
hClose pout hClose pout
......
...@@ -628,7 +628,7 @@ AC_SUBST([LibtoolCmd]) ...@@ -628,7 +628,7 @@ AC_SUBST([LibtoolCmd])
# tools we are looking for. In the past, GHC supported a number of # tools we are looking for. In the past, GHC supported a number of
# versions of LLVM simultaneously, but that stopped working around # versions of LLVM simultaneously, but that stopped working around
# 3.5/3.6 release of LLVM. # 3.5/3.6 release of LLVM.
LlvmVersion=7.0 LlvmVersion=7
AC_SUBST([LlvmVersion]) AC_SUBST([LlvmVersion])
sUPPORTED_LLVM_VERSION=$(echo \($LlvmVersion\) | sed 's/\./,/') sUPPORTED_LLVM_VERSION=$(echo \($LlvmVersion\) | sed 's/\./,/')
AC_DEFINE_UNQUOTED([sUPPORTED_LLVM_VERSION], ${sUPPORTED_LLVM_VERSION}, [The supported LLVM version number]) AC_DEFINE_UNQUOTED([sUPPORTED_LLVM_VERSION], ${sUPPORTED_LLVM_VERSION}, [The supported LLVM version number])
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment