[project @ 2003-11-15 19:37:13 by panne]
[ghc-hetmet.git] / mk / config.mk.in
index 5cfec6f..cac676c 100644 (file)
 
 # A "platform" is the GNU cpu-type/manufacturer/operating-system target machine
 # specifier.  E.g. sparc-sun-solaris2
+#
+# Build  platform: the platform on which we are doing this build
+# Host   platform: the platform on which these binaries will run
+# Target platform: the platform for which this compiler will generate code
+#
+# We don't support build & host being different, because the build
+# process creates binaries that are run during the build, and also
+# installed.
+#
+# If host & target are different, then we are building a compiler
+# which will generate intermediate .hc files to port to the target
+# architecture for bootstrapping.  The libraries and stage 2 compiler
+# will be built as HC files for the target system, and likely won't
+# build on this host platform.
+#
+# Guidelines for when to use HOST vs. TARGET:
+#
+#  - In the build system (Makefile, foo.mk), normally we should test
+#    $(HOSTPLATFORM).  There are some cases (eg. installation), where
+#    we expect $(HOSTPLATFORM)==$(TARGETPLATFORM), so in those cases it
+#    doesn't matter which is used.
+#
+#  - In the compiler itself, we should test HOST or TARGET depending
+#    on whether the conditional relates to the code being generated, or
+#    the platform on which the compiler is running.  For stage 2,
+#    HOSTPLATFORM should be reset to be TARGETPLATFORM (we currently
+#    don't do this, but we should).
+#
+#  - In the RTS and library code, we should be testing TARGET only.
+#
+# NOTE: cross-compiling is not well supported by the build system.
+# You have to do a lot of work by hand to cross compile: see the
+# section on "Porting GHC" in the Building Guide.
 
 HOSTPLATFORM                   = @HostPlatform@
 TARGETPLATFORM                 = @TargetPlatform@
-BUILDPLATFORM                  = @HostPlatform@
+BUILDPLATFORM                  = @BuildPlatform@
 
 # Hack alert:
-# in one or two places, we need to get at the OS version (major and perhaps even minor),
-# HostOS_Full is the OS name reported by AC_CANONICAL_SYSTEM.
+# in one or two places, we need to get at the OS version (major and
+# perhaps even minor), HostOS_Full is the OS name reported by
+# AC_CANONICAL_SYSTEM.
 #
 HostPlatform_CPP               = @HostPlatform_CPP@
 HostArch_CPP                   = @HostArch_CPP@
@@ -56,25 +90,31 @@ HostOS_CPP                  = @HostOS_CPP@
 HostOS_Full                    = @HostOS_Full@
 HostVendor_CPP                 = @HostVendor_CPP@
 
-#
-# ToDo: check if these can be purged now. -- sof
-#
+TargetPlatform_CPP             = @TargetPlatform_CPP@
+TargetArch_CPP                 = @TargetArch_CPP@
+TargetOS_CPP                   = @TargetOS_CPP@
+TargetVendor_CPP                = @TargetVendor_CPP@
+
+BuildPlatform_CPP              = @BuildPlatform_CPP@
+BuildArch_CPP                  = @BuildArch_CPP@
+BuildOS_CPP                    = @BuildOS_CPP@
+BuildVendor_CPP                 = @BuildVendor_CPP@
 
-@HostPlatform_CPP@_HOST        = 1
-@HostPlatform_CPP@_TARGET      = 1
-@HostPlatform_CPP@_BUILD       = 1
+@HostPlatform_CPP@_HOST           = 1
+@TargetPlatform_CPP@_TARGET       = 1
+@BuildPlatform_CPP@_BUILD         = 1
 
-@HostArch_CPP@_HOST_ARCH       = 1
-@HostArch_CPP@_TARGET_ARCH     = 1
-@HostArch_CPP@_BUILD_ARCH      = 1
+@HostArch_CPP@_HOST_ARCH          = 1
+@TargetArch_CPP@_TARGET_ARCH      = 1
+@BuildArch_CPP@_BUILD_ARCH        = 1
 
-@HostOS_CPP@_HOST_OS           = 1
-@HostOS_CPP@_TARGET_OS         = 1
-@HostOS_CPP@_BUILD_OS          = 1
+@HostOS_CPP@_HOST_OS              = 1
+@TargetOS_CPP@_TARGET_OS          = 1
+@BuildOS_CPP@_BUILD_OS            = 1
 
-@HostVendor_CPP@_HOST_VENDOR    = 1
-@HostVendor_CPP@_TARGET_VENDOR  = 1
-@HostVendor_CPP@_BUILD_VENDOR   = 1
+@HostVendor_CPP@_HOST_VENDOR      = 1
+@TargetVendor_CPP@_TARGET_VENDOR  = 1
+@BuildVendor_CPP@_BUILD_VENDOR    = 1
 
 # Leading underscores on symbol names in object files
 # Valid options: YES/NO
@@ -99,11 +139,15 @@ BootingFromHc = @BootingFromHc@
 # rather than registerised code, i.e., disable the mangler?
 BootingFromUnregisterisedHc = @BootingFromUnregisterisedHc@
 
-# build the libs first if we're bootstrapping from .hc files
+# Build Order: we build Happy, Haddock and Alex before GHC if they are
+# in this source tree, just in case our GHC build depends on these
+# local builds rather than installed versions of the tools.
+#
+# Build the libs first if we're bootstrapping from .hc files.
 ifeq "$(BootingFromHc)" "YES"
-AllProjects = glafp-utils libraries hslibs ghc green-card happy hdirect hood nofib haddock
+AllProjects = glafp-utils happy alex haddock libraries hslibs ghc greencard hdirect hood nofib
 else
-AllProjects = glafp-utils ghc libraries hslibs green-card happy hdirect hood nofib haddock
+AllProjects = glafp-utils happy alex haddock ghc libraries hslibs greencard hdirect hood nofib
 endif
 
 #
@@ -124,6 +168,11 @@ ProjectsDontInstall = glafp-utils nofib
 IncludeTestDirsInBuild=NO
 
 #
+# Should the various project example directories be built?
+#
+IncludeExampleDirsInBuild=NO
+
+#
 # Which ways should SGML documents be built?
 # options are: dvi ps pdf html rtf
 #
@@ -181,11 +230,9 @@ GhcStage3HcOpts=
 # (way 'u') to get unregisterised code, but the default way will be
 # registerised.
 #
-# NOTE: this is not the same as building the compiler itself
-# unregisterised.  That's done by either (a) bootstrapping with a
-# compiler that was built with GhcUnregisterised=YES, or (b)
-# bootstrapping with a compiler that has way 'u' libraries, and the
-# flag '-unreg' is added to GhcHcOpts above.
+# NOTE: the stage1 compiler will be a registerised binary (assuming
+# the compiler you build with is generating registerised binaries), but
+# the stage2 compiler will be an unregisterised binary.
 #
 GhcUnregisterised=NO
 
@@ -193,8 +240,8 @@ GhcUnregisterised=NO
 # (as well as a C backend)
 #
 # Target platforms supported:
-#   i386 & sparc
-ifneq "$(findstring $(HostArch_CPP), i386 sparc)" ""
+#   i386, sparc & powerpc
+ifneq "$(findstring $(HostArch_CPP), i386 sparc powerpc)" ""
 GhcWithNativeCodeGen=YES
 else
 GhcWithNativeCodeGen=NO
@@ -209,7 +256,7 @@ HaveRtldLocal = @HaveRtldLocal@
 
 # Include GHCi in the compiler.  Default to NO for the time being.
 
-ifneq "$(findstring $(HostOS_CPP), mingw32 cygwin32 linux solaris2 freebsd netbsd openbsd)" ""
+ifneq "$(findstring $(HostOS_CPP), mingw32 cygwin32 linux solaris2 freebsd netbsd openbsd darwin)" ""
 GhcWithInterpreter=YES
 else 
 GhcWithInterpreter=NO
@@ -327,7 +374,7 @@ GhcRtsThreaded=@ThreadedRts@
 
 # Build the Haskell Readline bindings?
 #
-GhcLibsWithReadline=@HaveReadlineHeaders@
+GhcLibsWithReadline=@GhcLibsWithReadline@
 
 # Libraries needed for linking with readline
 LibsReadline=@LibsReadline@
@@ -349,10 +396,21 @@ GhcLibsWithObjectIO=@GhcLibsWithObjectIO@
 GhcLibsWithHOpenGL=@GhcLibsWithHOpenGL@
 GL_CFLAGS=@GL_CFLAGS@
 GL_LIBS=@GL_LIBS@
+GLUT_LIBS=@GLUT_LIBS@
 
 X_CFLAGS=@X_CFLAGS@
 X_LIBS=@X_LIBS@
 
+
+# 
+# .NET interop support?
+#
+DotnetSupport=@DotnetSupport@
+
+# Build unix package?
+#
+GhcLibsWithUnix=@GhcLibsWithUnix@
+
 ################################################################################
 #
 #              happy project
@@ -379,9 +437,9 @@ HappyHcOpts = -O
 
 ################################################################################
 #
-#              green-card project
+#              greencard project
 #
-#      Green-card specific options
+#      GreenCard specific options
 #
 ################################################################################
 
@@ -464,11 +522,7 @@ datadir0           = @datadir@
 #sysconfdir            = @datadir@
 #sharedstatedir                = @sharedstatedir@
 #localstatedir         = @localstatedir@
-ifneq "$(TARGETPLATFORM)" "i386-unknown-mingw32"
 libdir0                        = @libdir@
-else
-libdir0                 = @prefix@
-endif
 includedir             = @includedir@
 oldincludedir          = @oldincludedir@
 mandir                 = @mandir@
@@ -480,13 +534,8 @@ mandir                     = @mandir@
 # override libdir and datadir to put project-specific stuff in
 # a subdirectory with the version number included.
 #
-ifneq "$(TARGETPLATFORM)" "i386-unknown-mingw32"
 libdir     = $(if $(ProjectNameShort),$(libdir0)/$(ProjectNameShort)-$(ProjectVersion),$(libdir0))
 datadir    = $(if $(ProjectNameShort),$(datadir0)/$(ProjectNameShort)-$(ProjectVersion),$(datadir0))
-else
-libdir    = $(libdir0)
-datadir    = $(datadir0)
-endif
 
 # Default place for putting interface files is $(libdir)
 # (overriden for packages in package.mk)
@@ -597,7 +646,6 @@ RUNTEST_PREFIX              = $(GLAFP_UTILS)/runstdtest/
 VERBATIM_PREFIX                = $(GLAFP_UTILS)/verbatim/
 SGMLVERB_PREFIX                = $(GLAFP_UTILS)/sgmlverb/
 ETAGS_PREFIX           = $(GLAFP_UTILS)/etags/
-MSUB_PREFIX            = $(GLAFP_UTILS)/msub/
 LNDIR_PREFIX           = $(GLAFP_UTILS)/lndir/
 MKDIRHIER_PREFIX       = $(GLAFP_UTILS)/mkdirhier/
 DOCBOOK_PREFIX         = $(GLAFP_UTILS)/docbook/
@@ -608,7 +656,7 @@ LITERATE_PREFIX     = $(FPTOOLS_TOP)/literate/
 
 UNLIT_PREFIX           = $(FPTOOLS_TOP)/ghc/utils/unlit/
 HP2PS_PREFIX            = $(FPTOOLS_TOP)/ghc/utils/hp2ps/
-HSTAGS_PREFIX           = $(FPTOOLS_TOP)/ghc/utils/hstags/
+HSTAGS_PREFIX           = $(FPTOOLS_TOP)/ghc/utils/hasktags/
 HSC2HS_PREFIX          = $(FPTOOLS_TOP)/ghc/utils/hsc2hs/
 
 #-----------------------------------------------------------------------------
@@ -628,8 +676,15 @@ GhcVersion = @GhcVersion@
 GhcMajVersion  = @GhcMajVersion@
 GhcMinVersion  = @GhcMinVersion@
 GhcPatchLevel  = @GhcPatchLevel@
-# Canonicalised ghc version number, used for easy (integer) version comparisons.
+
+# Canonicalised ghc version number, used for easy (integer) version
+# comparisons.  We must expand $(GhcMinVersion) to two digits by
+# adding a leading zero if necessary:
+ifneq "$(findstring $(GhcMinVersion), 0 1 2 3 4 5 6 7 8 9)" ""
+GhcCanonVersion = $(GhcMajVersion)0$(GhcMinVersion)
+else
 GhcCanonVersion = $(GhcMajVersion)$(GhcMinVersion)
+endif
 
 HBC            = @HBC@
 NHC            = @NHC@
@@ -671,6 +726,9 @@ ifeq "$(TARGETPLATFORM)" "ia64-unknown-linux"
 SRC_CC_OPTS += -G0
 endif
 
+# Solaris2 strikes again.
+unix_SRC_HSC2HS_OPTS += @unix_SRC_HSC2HS_OPTS@
+
 #-----------------------------------------------------------------------------
 # GMP Library (version 2.0.x or above)
 #
@@ -688,11 +746,10 @@ HaveLibMingwEx    = @HaveLibMingwEx@
 HaveFrameworkHaskellSupport = @HaveFrameworkHaskellSupport@
 
 #-----------------------------------------------------------------------------
-# Regex libraries
+# Regex library
 # (if present in libc use that one, otherwise use the one in the tree)
 #
 HavePosixRegex  = @HavePosixRegex@
-HaveGNURegex   = @HaveGNURegex@
 
 #-----------------------------------------------------------------------------
 # GTK+
@@ -701,11 +758,11 @@ GTK_CONFIG                = @GTK_CONFIG@
 GTK_VERSION            = @GTK_VERSION@
 
 #-----------------------------------------------------------------------------
-# Flex
+# Flex (currently unused, could be moved to glafp-utils)
 
-FLEX                   = @LEX@
+# FLEX                 = @LEX@
 # Don't bother with -lfl, we define our own yywrap()s anyway.
-FLEX_LIB               = 
+# FLEX_LIB             = 
 #WAS:FLEX_LIB          = @LEXLIB@
 
 #-----------------------------------------------------------------------------
@@ -715,11 +772,6 @@ AR                 = @ArCmd@
 ArSupportsInput                = @ArSupportsInput@
 # Yuckage: for ghc/utils/parallel -- todo: nuke this dependency!!
 BASH                    = /usr/local/bin/bash
-#
-# Could be either gzip or compress
-#
-COMPRESS               = @CompressCmd@
-COMPRESS_SUFFIX         = @CompressSuffix@
 
 CONTEXT_DIFF           = @ContextDiffCmd@
 CP                     = cp
@@ -802,7 +854,6 @@ TIB                 = tib
 TIME                   = @TimeCmd@
 TROFF                  = troff
 UNAME                  = uname
-YACC                   = @YaccCmd@
 
 #-----------------------------------------------------------------------------
 # SGML stuff
@@ -833,13 +884,11 @@ MKDEPENDC                 = $(MKDEPENDC_PREFIX)mkdependC
 LTX                    = $(LTX_PREFIX)ltx
 MKDIRHIER              = $(MKDIRHIER_PREFIX)mkdirhier
 LNDIR                  = $(LNDIR_PREFIX)lndir
-MSUB                   = $(MSUB_PREFIX)msub
 ETAGS                  = $(ETAGS_PREFIX)etags
 VERBATIM               = $(VERBATIM_PREFIX)verbatim
 SGMLVERB               = $(SGMLVERB_PREFIX)sgmlverb
 RUNTEST                        = $(RUNTEST_PREFIX)runstdtest
 LX                     = @LxCmd@
-GREENCARD              = $(FPTOOLS_TOP)/green-card/src/green-card
 
 BLD_DLL                        = dllwrap
 
@@ -850,6 +899,17 @@ ILX2IL                  = ilx2il
 ILASM                   = ilasm
 
 #
+# ghc-pkg
+#
+GHC_PKG                        = @GhcPkgCmd@
+
+#
+# GreenCard
+#
+GREENCARD              = @GreenCardCmd@
+GREENCARD_VERSION      = @GreenCardVersion@            
+
+#
 # Happy
 #
 HAPPY                  = @HappyCmd@
@@ -860,6 +920,16 @@ HAPPY_VERSION              = @HappyVersion@
 GHC_HAPPY_OPTS         = -agc
 
 #
+# Alex
+#
+ALEX                   = @AlexCmd@
+ALEX_VERSION           = @AlexVersion@         
+#
+# Options to pass to Happy when we're going to compile the output with GHC
+#
+GHC_ALEX_OPTS          = -g
+
+#
 # Haddock
 # 
 HADDOCK                        = @HaddockCmd@
@@ -880,7 +950,7 @@ LIT2TEXT            = $(LITERATE_PREFIX)lit2text
 #
 UNLIT                  = $(UNLIT_PREFIX)unlit$(exeext)
 HP2PS                  = $(HP2PS_PREFIX)hp2ps$(exeext)
-HSTAGS                 = $(HSTAGS_PREFIX)hstags
+HSTAGS                 = $(HSTAGS_PREFIX)hasktags
 HSC2HS                 = $(HSC2HS_PREFIX)hsc2hs-inplace
 
 #