Skip to content
Snippets Groups Projects
Commit 7ed9b589 authored by Sven Tennie's avatar Sven Tennie :smiley_cat:
Browse files

WIP: Select LLVMAS target in configure tools

parent 6b56cb41
No related branches found
No related tags found
No related merge requests found
Pipeline #98951 failed
......@@ -167,6 +167,7 @@ initSettings top_dir = do
lc_prog <- getSetting "LLVM llc command"
lo_prog <- getSetting "LLVM opt command"
las_prog <- getSetting "LLVM llvm-as command"
las_args <- unescapeArgs <$> getToolSetting "LLVM llvm-as flags"
let iserv_prog = libexec "ghc-iserv"
......@@ -234,7 +235,7 @@ initSettings top_dir = do
, toolSettings_opt_windres = []
, toolSettings_opt_lo = []
, toolSettings_opt_lc = []
, toolSettings_opt_las = ["--target=" ++ llvmTarget]
, toolSettings_opt_las = las_args
, toolSettings_opt_i = []
, toolSettings_extraGccViaCFlags = extraGccViaCFlags
......
......@@ -545,6 +545,9 @@ FIND_LLVM_PROG([LLVMAS], [clang], [$LlvmMinVersion], [$LlvmMaxVersion])
LlvmAsCmd="$LLVMAS"
AC_SUBST([LlvmAsCmd])
dnl ** Which LLVM assembler arguments to use (e.g. `--target=...`)?
FP_PROG_LLVM_AS_ARGS()
dnl --------------------------------------------------------------
dnl End of configure script option section
dnl --------------------------------------------------------------
......
......@@ -214,6 +214,9 @@ FIND_LLVM_PROG([LLVMAS], [clang], [$LlvmMinVersion], [$LlvmMaxVersion])
LlvmAsCmd="$LLVMAS"
AC_SUBST([LlvmAsCmd])
dnl ** Which LLVM assembler arguments to use (e.g. `--target=...`)?
FP_PROG_LLVM_AS_ARGS()
dnl ** Check gcc version and flags we need to pass it **
FP_GCC_VERSION
FP_GCC_SUPPORTS_NO_PIE
......
......@@ -9,6 +9,7 @@ Target
, tgtEndianness = LittleEndian
, tgtSymbolsHaveLeadingUnderscore = False
, tgtLlvmTarget = "@HostPlatform@"
, tgtLlvmAsArgs = @LlvmAsArgsHostList@
, tgtUnregisterised = False
, tgtTablesNextToCode = True
, tgtUseLibffiForAdjustors = True
......
......@@ -9,6 +9,7 @@ Target
, tgtEndianness = @TargetEndianness@
, tgtSymbolsHaveLeadingUnderscore = @LeadingUnderscoreBool@
, tgtLlvmTarget = "@LlvmTarget@"
, tgtLlvmAsArgs = @LlvmAsArgsTargetList@
, tgtUnregisterised = @UnregisterisedBool@
, tgtTablesNextToCode = @TablesNextToCodeBool@
, tgtUseLibffiForAdjustors = @UseLibffiForAdjustorsBool@
......
......@@ -491,6 +491,7 @@ generateSettings settingsFile = do
, ("LLVM llc command", expr $ settingsFileSetting ToolchainSetting_LlcCommand)
, ("LLVM opt command", expr $ settingsFileSetting ToolchainSetting_OptCommand)
, ("LLVM llvm-as command", expr $ settingsFileSetting ToolchainSetting_LlvmAsCommand)
, ("LLVM llvm-as flags", queryTarget llvmAsFlags)
, ("Use inplace MinGW toolchain", expr $ settingsFileSetting ToolchainSetting_DistroMinGW)
, ("Use interpreter", expr $ yesNo <$> ghcWithInterpreter)
......@@ -537,6 +538,7 @@ generateSettings settingsFile = do
arSupportsDashL' = yesNo . arSupportsDashL . tgtAr
ranlibPath = maybe "" (prgPath . ranlibProgram) . tgtRanlib
mergeObjsSupportsResponseFiles' = maybe "NO" (yesNo . mergeObjsSupportsResponseFiles) . tgtMergeObjs
llvmAsFlags = escapeArgs . tgtLlvmAsArgs
isBigEndian, wordSize :: Toolchain.Target -> String
isBigEndian = yesNo . (\case BigEndian -> True; LittleEndian -> False) . tgtEndianness
......
# FP_PROG_LLVM_AS_ARGS
# ---------------
#
# Sets fp_prog_llvm_as_args to the arguments for the LLVM assembler ($LLVMAS;
# usually clang.)
AC_DEFUN([FP_PROG_LLVM_AS_ARGS],
[
# Cross-compiling: We need to define the target triple for the LLVM assembler.
# Though, it does not hurt to define it for the non-cross case as well.
LlvmAsArgsTarget="--target=$TargetPlatform"
LlvmAsArgsHost="--target=$HostPlatform"
echo LlvmAsArgs is $LlvmAsArgs
AC_SUBST(LlvmAsArgsHost)
AC_SUBST(LlvmAsArgsTarget)
])# FP_PROG_LLVM_AS_ARGS
......@@ -128,6 +128,7 @@ AC_DEFUN([FP_SETTINGS],
SettingsOptCommand="$OptCmd"
SettingsLlvmAsCommand="$LlvmAsCmd"
SettingsLlvmAsArgs="$LlvmAsArgs"
# Mac-only tools
if test -z "$OtoolCmd"; then
......@@ -168,4 +169,5 @@ AC_DEFUN([FP_SETTINGS],
AC_SUBST(SettingsOptCommand)
AC_SUBST(SettingsLlvmAsCommand)
AC_SUBST(SettingsUseDistroMINGW)
AC_SUBST(SettingsLlvmAsArgs)
])
......@@ -154,6 +154,8 @@ AC_DEFUN([PREP_TARGET_FILE],[
PREP_LIST([CONF_CPP_OPTS_STAGE2])
PREP_LIST([CONF_CXX_OPTS_STAGE2])
PREP_LIST([CONF_CC_OPTS_STAGE2])
PREP_LIST([LlvmAsArgsHost])
PREP_LIST([LlvmAsArgsTarget])
dnl Host target
PREP_BOOLEAN([ArSupportsAtFile_STAGE0])
......
......@@ -392,6 +392,7 @@ mkTarget opts = do
normalised_triple <- normaliseTriple (optTriple opts)
-- Use Llvm target if specified, otherwise use triple as llvm target
let tgtLlvmTarget = fromMaybe normalised_triple (optLlvmTriple opts)
tgtLlvmAsArgs = ["--target=" <> tgtLlvmTarget]
(archOs, tgtVendor) <- do
cc0 <- findBasicCc (optCc opts)
......@@ -478,6 +479,7 @@ mkTarget opts = do
, tgtSupportsIdentDirective
, tgtSupportsGnuNonexecStack
, tgtLlvmTarget
, tgtLlvmAsArgs
}
return t
......
......@@ -48,6 +48,7 @@ data Target = Target
, tgtEndianness :: Endianness
, tgtSymbolsHaveLeadingUnderscore :: Bool
, tgtLlvmTarget :: String
, tgtLlvmAsArgs :: [String]
-- GHC capabilities
, tgtUnregisterised :: Bool
......@@ -107,6 +108,7 @@ instance Show Target where
, ", tgtEndianness = " ++ show tgtEndianness
, ", tgtSymbolsHaveLeadingUnderscore = " ++ show tgtSymbolsHaveLeadingUnderscore
, ", tgtLlvmTarget = " ++ show tgtLlvmTarget
, ", tgtLlvmAsArgs = " ++ show tgtLlvmAsArgs
, ", tgtUnregisterised = " ++ show tgtUnregisterised
, ", tgtTablesNextToCode = " ++ show tgtTablesNextToCode
, ", tgtUseLibffiForAdjustors = " ++ show tgtUseLibffiForAdjustors
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment