summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Gamari <ben@smart-cactus.org>2020-08-10 15:53:51 -0400
committerBen Gamari <ben@smart-cactus.org>2020-08-16 10:13:19 -0400
commit27022c70a30cfff7a3b17817b1e33ab302cd5ecf (patch)
tree6915417fd8292b1fdfbe47dbf9015f22d5a488bf
parent8a665db6174eaedbbae925c0ccb4c22b3f29bcaf (diff)
downloadhaskell-wip/T18560.tar.gz
testsuite: Only run llvm ways if llc is availablewip/T18560
As noted in #18560, we previously would always run the LLVM ways since `configure` would set `SettingsLlcCommand` to something non-null when it otherwise couldn't find the `llc` executable. Now we rather probe for the existence of the `llc` executable in the testsuite driver. Fixes #18560.
-rw-r--r--hadrian/src/Settings/Builders/RunTest.hs3
-rw-r--r--testsuite/config/ghc15
-rw-r--r--testsuite/driver/testglobals.py3
-rw-r--r--testsuite/mk/test.mk12
4 files changed, 14 insertions, 19 deletions
diff --git a/hadrian/src/Settings/Builders/RunTest.hs b/hadrian/src/Settings/Builders/RunTest.hs
index c10e93aae0..d6615a264e 100644
--- a/hadrian/src/Settings/Builders/RunTest.hs
+++ b/hadrian/src/Settings/Builders/RunTest.hs
@@ -70,7 +70,6 @@ runTestBuilderArgs = builder RunTest ? do
withSMP <- getBooleanSetting TestGhcWithSMP
debugged <- getBooleanSetting TestGhcDebugged
keepFiles <- expr (testKeepFiles <$> userSetting defaultTestArgs)
- withLlvm <- expr (not . null <$> settingsFileSetting SettingsFileSetting_LlcCommand)
accept <- expr (testAccept <$> userSetting defaultTestArgs)
(acceptPlatform, acceptOS) <- expr . liftIO $
@@ -125,8 +124,6 @@ runTestBuilderArgs = builder RunTest ? do
, arg "-e", arg $ asBool "config.have_profiling=" (hasLibWay profiling)
, arg "-e", arg $ asBool "config.have_fast_bignum=" (bignumBackend /= "native" && not bignumCheck)
, arg "-e", arg $ asBool "ghc_with_smp=" withSMP
- , arg "-e", arg $ asBool "ghc_with_llvm=" withLlvm
-
, arg "-e", arg $ "config.ghc_dynamic_by_default=" ++ show hasDynamicByDefault
, arg "-e", arg $ "config.ghc_dynamic=" ++ show hasDynamic
diff --git a/testsuite/config/ghc b/testsuite/config/ghc
index 4f053eb50f..c54ac6b385 100644
--- a/testsuite/config/ghc
+++ b/testsuite/config/ghc
@@ -64,10 +64,6 @@ else:
if (config.have_profiling and ghc_with_threaded_rts):
config.run_ways.append('profthreaded')
-if (ghc_with_llvm and not config.unregisterised):
- config.compile_ways.append('optllvm')
- config.run_ways.append('optllvm')
-
# WinIO I/O manager for Windows
if windows:
winio_ways = ['winio', 'winio_threaded']
@@ -195,6 +191,17 @@ def get_compiler_info():
config.have_ncg = compilerInfoDict.get("Have native code generator", "NO") == "YES"
+ # Detect whether an LLVM toolhain is available
+ llc_path = compilerInfoDict.get("LLVM llc command")
+ config.have_llvm = shutil.which(llc_path) is not None
+ if config.unregisterised:
+ print("Unregisterised build; skipping LLVM ways...")
+ elif config.have_llvm:
+ config.compile_ways.append('optllvm')
+ config.run_ways.append('optllvm')
+ else:
+ print("Failed to find `llc` command; skipping LLVM ways...")
+
# Whether GHC itself was built using the LLVM backend. We need to know this
# since some tests in ext-interp fail when stage2 ghc is built using
# LLVM. See #16087.
diff --git a/testsuite/driver/testglobals.py b/testsuite/driver/testglobals.py
index c358a660d9..629a496330 100644
--- a/testsuite/driver/testglobals.py
+++ b/testsuite/driver/testglobals.py
@@ -115,6 +115,9 @@ class TestConfig:
self.way_flags = {} # type: Dict[WayName, List[str]]
self.way_rts_flags = {} # type: Dict[WayName, List[str]]
+ # Do we have a functional LLVM toolchain?
+ self.have_llvm = False
+
# Do we have vanilla libraries?
self.have_vanilla = False
diff --git a/testsuite/mk/test.mk b/testsuite/mk/test.mk
index 35d3122903..8a32ee6a42 100644
--- a/testsuite/mk/test.mk
+++ b/testsuite/mk/test.mk
@@ -194,18 +194,6 @@ else
RUNTEST_OPTS += -e ghc_with_smp=False
endif
-# Does the LLVM backend work?
-ifeq "$(LLC)" ""
-RUNTEST_OPTS += -e ghc_with_llvm=False
-else ifeq "$(TargetARCH_CPP)" "powerpc"
-RUNTEST_OPTS += -e ghc_with_llvm=False
-else ifneq "$(LLC)" "llc"
-# If we have a real detected value for LLVM, then it really ought to work
-RUNTEST_OPTS += -e ghc_with_llvm=True
-else
-RUNTEST_OPTS += -e ghc_with_llvm=False
-endif
-
ifeq "$(WINDOWS)" "YES"
RUNTEST_OPTS += -e windows=True
else