summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Gamari <ben@smart-cactus.org>2020-04-10 01:24:37 -0400
committerBen Gamari <ben@smart-cactus.org>2020-12-04 15:04:01 -0500
commit391a3f6d3776a069534a91e34e5915a0c8d0391b (patch)
treeb613d09bd389e5be0e61a1b8ba362a45165bee03
parent0f28389c783a54a74c472f176c250ddf7a9c4bf4 (diff)
downloadhaskell-391a3f6d3776a069534a91e34e5915a0c8d0391b.tar.gz
hadrian: Don't --export-dynamic on Darwin
When fixing #17962 I neglected to consider that --export-dynamic is only supported on ELF platforms. (cherry picked from commit 35799dda07813e4c510237290a631d4d11fb92d2)
-rw-r--r--hadrian/src/Oracles/Setting.hs8
-rw-r--r--hadrian/src/Settings/Packages.hs7
2 files changed, 14 insertions, 1 deletions
diff --git a/hadrian/src/Oracles/Setting.hs b/hadrian/src/Oracles/Setting.hs
index 47b988accb..ce0c44b216 100644
--- a/hadrian/src/Oracles/Setting.hs
+++ b/hadrian/src/Oracles/Setting.hs
@@ -11,6 +11,7 @@ module Oracles.Setting (
-- ** Target platform things
anyTargetPlatform, anyTargetOs, anyTargetArch, anyHostOs,
+ isElfTarget,
ArmVersion(..),
targetArmVersion,
ghcWithInterpreter, useLibFFIForAdjustors
@@ -241,6 +242,13 @@ anyTargetArch = matchSetting TargetArch
anyHostOs :: [String] -> Action Bool
anyHostOs = matchSetting HostOs
+-- | Check whether the target OS uses the ELF object format.
+isElfTarget :: Action Bool
+isElfTarget = anyTargetOs
+ [ "linux", "freebsd", "dragonfly", "openbsd", "netbsd", "solaris2", "kfreebsdgnu"
+ , "haiku", "linux-android"
+ ]
+
-- | Check whether the host OS supports the @-rpath@ linker option when
-- using dynamic linking.
--
diff --git a/hadrian/src/Settings/Packages.hs b/hadrian/src/Settings/Packages.hs
index 6e6f33f35f..6c994b5995 100644
--- a/hadrian/src/Settings/Packages.hs
+++ b/hadrian/src/Settings/Packages.hs
@@ -150,7 +150,12 @@ packageArgs = do
-- refer to the RTS. This is harmless if you don't use it (adds a bit
-- of overhead to startup and increases the binary sizes) but if you
-- need it there's no alternative.
- , package iserv ? mconcat
+ --
+ -- The Solaris linker does not support --export-dynamic option. It also
+ -- does not need it since it exports all dynamic symbols by default
+ , package iserv
+ ? expr isElfTarget
+ ? notM (expr $ anyTargetOs ["freebsd", "solaris2"])? mconcat
[ builder (Ghc LinkHs) ? arg "-optl-Wl,--export-dynamic" ]
-------------------------------- haddock -------------------------------