import HscTypes
import Outputable
import Module
-import LazyUniqFM ( eltsUFM )
+import UniqFM ( eltsUFM )
import ErrUtils
import DynFlags
import StaticFlags ( v_Ld_inputs, opt_Static, WayName(..) )
"const rtsBool rtsOptsEnabled = rtsTrue;"]
return [fn]
else return []
+ rtsOptsObj <- case rtsOpts dflags of
+ Just opts ->
+ do fn <- mkExtraCObj dflags
+ -- We assume that the Haskell "show" does
+ -- the right thing here
+ ["char *ghc_rts_opts = " ++ show opts ++ ";"]
+ return [fn]
+ Nothing -> return []
pkg_link_opts <- getPackageLinkOpts dflags dep_packages
++ pkg_lib_path_opts
++ main_lib
++ rtsEnabledObj
+ ++ rtsOptsObj
++ pkg_link_opts
#ifdef darwin_TARGET_OS
++ pkg_framework_path_opts
-----------------------------------------------------------------------------
let output_fn = case o_file of { Just s -> s; Nothing -> "a.out"; }
+ let buildingRts = thisPackage dflags == rtsPackageId
+ let bsymbolicFlag = if buildingRts
+ then -- -Bsymbolic breaks the way we implement
+ -- hooks in the RTS
+ []
+ else -- we need symbolic linking to resolve
+ -- non-PIC intra-package-relocations
+ ["-Wl,-Bsymbolic"]
SysTools.runLink dflags
([ SysTools.Option verb
++ map SysTools.Option (
md_c_flags
++ o_files
- ++ [ "-shared", "-Wl,-Bsymbolic" ] -- we need symbolic linking to resolve non-PIC intra-package-relocations
+ ++ [ "-shared" ]
+ ++ bsymbolicFlag
++ [ "-Wl,-soname," ++ takeFileName output_fn ] -- set the library soname
++ extra_ld_inputs
++ lib_path_opts