X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2Fmain%2FDriverPipeline.hs;h=22ce65b83b807ce8eb04f8eb3fbb3d018dbc1243;hb=ace2d4a6b98b30397ba9f572aff64c13524cad3b;hp=c447fef033e12adc86ed7bf417f213653666bd77;hpb=b562cbe381d54e08dcafa11339e9a82e781ad557;p=ghc-hetmet.git diff --git a/compiler/main/DriverPipeline.hs b/compiler/main/DriverPipeline.hs index c447fef..22ce65b 100644 --- a/compiler/main/DriverPipeline.hs +++ b/compiler/main/DriverPipeline.hs @@ -1279,7 +1279,6 @@ linkDynLib dflags o_files dep_packages = do let static = opt_Static let no_hs_main = dopt Opt_NoHsMain dflags let o_file = outputFile dflags - let output_fn = case o_file of { Just s -> s; Nothing -> "HSdll.dll"; } pkg_lib_paths <- getPackageLibraryPath dflags dep_packages let pkg_lib_path_opts = map ("-L"++) pkg_lib_paths @@ -1292,7 +1291,15 @@ linkDynLib dflags o_files dep_packages = do -- probably _stub.o files extra_ld_inputs <- readIORef v_Ld_inputs - -- opts from -optdll- + let (md_c_flags, _) = machdepCCOpts dflags +#if defined(mingw32_HOST_OS) + ----------------------------------------------------------------------------- + -- Making a DLL + ----------------------------------------------------------------------------- + + let output_fn = case o_file of { Just s -> s; Nothing -> "HSdll.dll"; } + + -- opts from -optdll- let extra_ld_opts = getOpts dflags opt_dll let pstate = pkgState dflags @@ -1303,8 +1310,6 @@ linkDynLib dflags o_files dep_packages = do then [] else [ head (libraryDirs rts_pkg) ++ "/Main.dll_o", head (libraryDirs base_pkg) ++ "/PrelMain.dll_o" ] - - let (md_c_flags, _) = machdepCCOpts dflags SysTools.runMkDLL dflags ([ SysTools.Option verb , SysTools.Option "-o" @@ -1324,7 +1329,30 @@ linkDynLib dflags o_files dep_packages = do then [ "" ] else [ "--export-all" ]) )) - +#else + ----------------------------------------------------------------------------- + -- Making a DSO + ----------------------------------------------------------------------------- + -- opts from -optl- + let extra_ld_opts = getOpts dflags opt_l + let output_fn = case o_file of { Just s -> s; Nothing -> "a.out"; } + + SysTools.runLink dflags + ([ SysTools.Option verb + , SysTools.Option "-o" + , SysTools.FileOption "" output_fn + ] + ++ map SysTools.Option ( + md_c_flags + ++ o_files + ++ [ "-shared", "-Wl,-Bsymbolic" ] -- we need symbolic linking to resolve non-PIC intra-package-relocations + ++ extra_ld_inputs + ++ lib_path_opts + ++ extra_ld_opts + ++ pkg_lib_path_opts + ++ pkg_link_opts + )) +#endif -- ----------------------------------------------------------------------------- -- Running CPP