summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--compiler/main/DriverPipeline.hs1
-rw-r--r--compiler/main/SysTools.hs14
2 files changed, 15 insertions, 0 deletions
diff --git a/compiler/main/DriverPipeline.hs b/compiler/main/DriverPipeline.hs
index 3fc35e5992..7f70377c25 100644
--- a/compiler/main/DriverPipeline.hs
+++ b/compiler/main/DriverPipeline.hs
@@ -1932,6 +1932,7 @@ linkBinary' staticLink dflags o_files dep_packages = do
++ [ SysTools.Option "-o"
, SysTools.FileOption "" output_fn
]
+ ++ libmLinkOpts
++ map SysTools.Option (
[]
diff --git a/compiler/main/SysTools.hs b/compiler/main/SysTools.hs
index 3d16124d72..c73e47c16a 100644
--- a/compiler/main/SysTools.hs
+++ b/compiler/main/SysTools.hs
@@ -39,6 +39,9 @@ module SysTools (
Option(..),
+ -- platform-specifics
+ libmLinkOpts,
+
-- frameworks
getPkgFrameworkOpts,
getFrameworkOpts
@@ -1537,6 +1540,7 @@ linkDynLib dflags0 o_files dep_packages
runLink dflags (
map Option verbFlags
+ ++ libmLinkOpts
++ [ Option "-o"
, FileOption "" output_fn
]
@@ -1556,6 +1560,16 @@ linkDynLib dflags0 o_files dep_packages
++ map Option pkg_link_opts
)
+-- | Some platforms require that we explicitly link against @libm@ if any
+-- math-y things are used (which we assume to include all programs). See #14022.
+libmLinkOpts :: [Option]
+libmLinkOpts =
+#if defined(HAVE_LIBM)
+ [Option "-lm"]
+#else
+ []
+#endif
+
getPkgFrameworkOpts :: DynFlags -> Platform -> [InstalledUnitId] -> IO [String]
getPkgFrameworkOpts dflags platform dep_packages
| platformUsesFrameworks platform = do