[[project @ 2002-05-29 13:06:02 by simonpj]
simonpj**20020529130602
Document GHC-mingw vs GHC-cygwin
] {
hunk ./docs/building/building.sgml 3733
+Cygwin and MinGW
+
+ The Windows situation for building GHC is rather confusing. This section
+tries to clarify, and to establish terminology.
+
+GHC-mingw
+
+ MinGW (Minimalist GNU for Windows)
+is a collection of header
+files and import libraries that allow one to use gcc and produce
+native Win32 programs that do not rely on any third-party DLLs. The
+current set of tools include GNU Compiler Collection (gcc), GNU Binary
+Utilities (Binutils), GNU debugger (Gdb), GNU make, and a assorted
+other utilities.
+
+The GHC that we distribute includes, inside the distribution itself, the MinGW gcc,
+as, ld, and a bunch of input/output libraries.
+GHC compiles Haskell to C (or to
+assembly code), and then invokes these MinGW tools to generate an executable binary.
+The resulting binaries can run on any Win32 system.
+
+ We will call a GHC that targets MinGW in this way GHC-mingw.
+
+ The down-side of GHC-mingw is that the MinGW libraries do not support anything like the full
+Posix interface. So programs compiled with GHC-mingw cannot import the (Haskell) Posix
+library; they have to do
+their input output using standard Haskell I/O libraries, or native Win32 bindings.
+
+
+
+GHC-cygwin
+
+There is a way to get the full Posix interface, which is to use Cygwin.
+Cygwin is a complete Unix simulation that runs on Win32.
+Cygwin comes with a shell, and all the usual Unix commands: mv, rm,
+ls, plus of course gcc, ld and so on.
+A C program compiled with the Cygwin gcc certainly can use all of Posix.
+
+So why doesn't GHC use the Cygwin gcc and libraries? Because
+Cygwin comes with a DLL that must be linked with every runnable Cygwin-compiled program.
+A program compiled by the Cygwin tools cannot run at all unless Cygwin is installed.
+If GHC targeted Cygwin, users would have to install Cygwin just to run the Haskell programs
+that GHC compiled; and the Cygwin DLL would have to be in the DLL load path.
+Worse, Cygwin is a moving target. The name of the main DLL, cygwin1.dll
+does not change, but the implementation certainly does. Even the interfaces to functions
+it exports seem to change occasionally. So programs compiled by GHC might only run with
+particular versions of Cygwin. All of this seems very undesirable.
+
+
+Nevertheless, it is certainly possible to build a version of GHC that targets Cygwin;
+we will call that GHC-cygwin. The up-side of GHC-cygwin is
+that Haskell programs compiled by GHC-cygwin can import the (Haskell) Posix library.
+
+
+
+Summary
+
+Notice that "GHC-mingw" means "GHC that targets MinGW". It says nothing about
+how that GHC was built. It is entirely possible to have a GHC-mingw that was built
+by compiling GHC's Haskell sources with a GHC-cygwin, or vice versa.
+
+We distribute only a GHC-mingw built by a GHC-mingw; supporting
+GHC-cygwin too is beyond our resources. The GHC we distribute
+therefore does not require Cygwin to run, nor do the programs it
+compiles require Cygwin.
+
+The instructions that follow describe how to build GHC-mingw. It is
+possible to build GHC-cygwin, but it's not a supported route, and the build system might
+be flaky.
+
+
+
hunk ./docs/building/building.sgml 3807
-You don't need Cygwin to use GHC, but you do need it to build GHC.
+You don't need Cygwin to use GHC,
+but you do need it to build GHC.
hunk ./docs/building/building.sgml 4001
+This is the point at which you specify that you are building GHC-mingw
+(see ).
hunk ./docs/building/building.sgml 4005
-trouble using the wrong C compiler!
+trouble using the wrong C compiler!
+
+
+If you want to build GHC-cygwin ()
+you'll have to do something more like:
+
+ ./configure --with-gcc=...the Cygwin gcc...
+
}