diff options
-rw-r--r-- | compiler/main/DriverPipeline.hs | 1 | ||||
-rw-r--r-- | compiler/main/SysTools.hs | 14 |
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 |