X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2Fmain%2FDriverPipeline.hs;h=4dc287a725f56fd4d0beaef221ce261e60155d14;hb=4630ac742d08f4ec9a4a6911834f2e5844558754;hp=c447fef033e12adc86ed7bf417f213653666bd77;hpb=b562cbe381d54e08dcafa11339e9a82e781ad557;p=ghc-hetmet.git diff --git a/compiler/main/DriverPipeline.hs b/compiler/main/DriverPipeline.hs index c447fef..4dc287a 100644 --- a/compiler/main/DriverPipeline.hs +++ b/compiler/main/DriverPipeline.hs @@ -156,7 +156,9 @@ compile hsc_env mod_summary maybe_old_linkable old_iface mod_index nmods = do return (CompOK details iface maybe_old_linkable) handleBatch (HscRecomp hasStub, iface, details) | isHsBoot src_flavour - = return (CompOK details iface Nothing) + = do SysTools.touch dflags' "Touching object file" + object_filename + return (CompOK details iface Nothing) | otherwise = do stub_unlinked <- getStubLinkable hasStub (hs_unlinked, unlinked_time) <- @@ -1279,7 +1281,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 +1293,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 +1312,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 +1331,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 @@ -1405,8 +1435,6 @@ hscNextPhase dflags other hsc_lang = hscMaybeAdjustTarget :: DynFlags -> Phase -> HscSource -> HscTarget -> HscTarget -hscMaybeAdjustTarget dflags stop HsBootFile current_hsc_lang - = HscNothing -- No output (other than Foo.hi-boot) for hs-boot files hscMaybeAdjustTarget dflags stop other current_hsc_lang = hsc_lang where