From: simonpj Date: Wed, 29 May 2002 13:06:02 +0000 (+0000) Subject: [project @ 2002-05-29 13:06:02 by simonpj] X-Git-Tag: Approx_11550_changesets_converted~2007 X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=commitdiff_plain;h=b9394d5fb3b41519dc91f925d0959658e9154dd4 [project @ 2002-05-29 13:06:02 by simonpj] Document GHC-mingw vs GHC-cygwin --- diff --git a/docs/building/building.sgml b/docs/building/building.sgml index ffd2c5c..978cd09 100644 --- a/docs/building/building.sgml +++ b/docs/building/building.sgml @@ -3730,9 +3730,82 @@ guide) before continuing to read these notes. +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. + + + Installing and configuring Cygwin -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. Install Cygwin from http://www.cygwin.com/. The installation process is straightforward; we install it in c:/cygwin. @@ -3925,9 +3998,18 @@ option . ./configure --host=i386-unknown-mingw32 --with-gcc=/mingw/bin/gcc +This is the point at which you specify that you are building GHC-mingw +(see ). Both these options are important! It's possible to get into -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... +