Create .hi-boot and .o-boot files in --make mode; fixes trac #1322
[ghc-hetmet.git] / compiler / main / DriverPipeline.hs
index c447fef..4dc287a 100644 (file)
@@ -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-<blah>
+    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-<blah>
     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-<blah>
+    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