X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=blobdiff_plain;f=mk%2Fconfig.mk.in;h=d1605d1c2b5854950fe5b71a84dad19cf4c1076f;hp=776703f4ea23232fb1722a40edf445d4cdc7178f;hb=8b7e4e09174a407fb4e9f6e8f2e105c9d272b214;hpb=ae8e4261799358bfbb88dfd251b2e9e25dc39182 diff --git a/mk/config.mk.in b/mk/config.mk.in index 776703f..d1605d1 100644 --- a/mk/config.mk.in +++ b/mk/config.mk.in @@ -25,17 +25,44 @@ # # This is one of only two files that configure generates (the other is config.h) # -# There is a section below for each project within the fptools suite + +ifneq "$(findstring 3.7, $(MAKE_VERSION))" "" +ifeq "$(findstring 3.79.1, $(MAKE_VERSION))" "" +$(error GNU make version 3.79.1 or later is required.) +endif +endif + +################################################################################ +# +# GHC Version +# + +# ProjectVersion is treated as a *string* +# ProjectVersionInt is treated as an *integer* (for cpp defines) + +# Versioning scheme: A.B.C +# A: major version, decimal, any number of digits +# B: minor version, decimal, any number of digits +# C: patchlevel, one digit, omitted if zero. # -# PLUS +# ProjectVersionInt does *not* contain the patchlevel (rationale: this +# figure is used for conditional compilations, and library interfaces +# etc. are not supposed to change between patchlevels). # -# a section corresponding to each of the main .mk files -# included by boilerplate.mk (see boilerplate.mk for a list). +# The ProjectVersionInt is included in interface files, and GHC +# checks that it's reading interface generated by the same ProjectVersion +# as itself. It does this even though interface file syntax may not +# change between versions. Rationale: calling conventions or other +# random .o-file stuff might change even if the .hi syntax doesn't +ProjectName = @ProjectName@ +ProjectVersion = @ProjectVersion@ +ProjectVersionInt = @ProjectVersionInt@ +ProjectPatchLevel = @ProjectPatchLevel@ ################################################################################ # -# Project-wide platform variables +# Platform variables # ################################################################################ @@ -56,6 +83,13 @@ # will be built as HC files for the target system, and likely won't # build on this host platform. # +# An important invariant is that for any piece of source code, the +# platform on which the code is going to run is the HOST platform, +# and the platform on which we are building is the BUILD platform. +# Additionally for the compiler, the platform this compiler will +# generate code for is the TARGET. TARGET is not meaningful outside +# the compiler sources. +# # Guidelines for when to use HOST vs. TARGET: # # - In the build system (Makefile, foo.mk), normally we should test @@ -65,11 +99,10 @@ # # - 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). +# the platform on which the compiler is running. See the section +# on "Coding Style" in the commentary for more details. # -# - In the RTS and library code, we should be testing TARGET only. +# - In all other code, we should be testing HOST 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 @@ -116,6 +149,12 @@ BuildVendor_CPP = @BuildVendor_CPP@ @TargetVendor_CPP@_TARGET_VENDOR = 1 @BuildVendor_CPP@_BUILD_VENDOR = 1 +################################################################################ +# +# Global configuration options +# +################################################################################ + # Leading underscores on symbol names in object files # Valid options: YES/NO # @@ -124,13 +163,12 @@ LeadingUnderscore=@LeadingUnderscore@ # Pin a suffix on executables? If so, what (Windows only). exeext=@exeext@ -################################################################################ -# -# project-wide flags -# -# Set of options applicable to all fptools projects -# -################################################################################ +# Windows=YES if on a Windows platform +ifneq "$(findstring $(HostOS_CPP), mingw32 cygwin32)" "" +Windows=YES +else +Windows=NO +endif # BootingFromHc - build GHC and the libraries from .hc files? BootingFromHc = @BootingFromHc@ @@ -139,59 +177,17 @@ BootingFromHc = @BootingFromHc@ # rather than registerised code, i.e., disable the mangler? BootingFromUnregisterisedHc = @BootingFromUnregisterisedHc@ -# 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 happy alex haddock libraries hslibs ghc greencard hdirect hood nofib -else -AllProjects = glafp-utils happy alex haddock ghc libraries hslibs greencard hdirect hood nofib -endif - -# -# (OPTIONAL) set ProjectsToBuild to a list of projects to be built. If this -# list is empty, then all projects present in the source tree will be built. -# -ProjectsToBuild = - -# -# set ProjectsDontInstall to a list of projects which are normally built but -# not installed. -# -ProjectsDontInstall = glafp-utils nofib - -# -# Should the various project tests directories be built? -# -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 +# Which ways should DocBook XML documents be built? +# options are: dvi ps pdf html chm HxS # -SGMLDocWays= +XMLDocWays= ################################################################################ # -# GHC project -# -# Set of (configurable) options needed by the ghc tree -# plus their default options (if any). -# -################################################################################ - -#--------------------------------------------------------------- -# # Variables that control how the compiler itself is built # -#--------------------------------------------------------------- +################################################################################ # The compiler used to build GHC is $(GHC). To change the actual compiler # used, re-configure with --with-ghc=. @@ -201,7 +197,7 @@ SGMLDocWays= GhcCompilerWays= # Extra option flags to pass to the compiler that compiles the compiler -# (Ones that are essential are wired into ghc/compiler/Makefile) +# (Ones that are essential are wired into compiler/Makefile) # Typical options to use here: # # -DDEBUG include debugging code and assertions (will make the @@ -234,14 +230,23 @@ GhcStage3HcOpts= # the compiler you build with is generating registerised binaries), but # the stage2 compiler will be an unregisterised binary. # +ifneq "$(findstring $(HostArch_CPP), alpha hppa)" "" +GhcUnregisterised=YES +else GhcUnregisterised=NO +endif # Build a compiler with a native code generator backend # (as well as a C backend) # # Target platforms supported: -# i386, sparc & powerpc -ifneq "$(findstring $(HostArch_CPP), i386 sparc powerpc)" "" +# i386, powerpc +# sparc has bitrotted +# AIX is not supported +ArchSupportsNCG=$(strip $(patsubst $(HostArch_CPP), YES, $(findstring $(HostArch_CPP), i386 x86_64 powerpc))) +OsSupportsNCG=$(strip $(patsubst $(HostOS_CPP), YES, $(patsubst aix,,$(HostOS_CPP)))) + +ifeq "$(OsSupportsNCG)$(ArchSupportsNCG)$(GhcUnregisterised)" "YESYESNO" GhcWithNativeCodeGen=YES else GhcWithNativeCodeGen=NO @@ -251,23 +256,68 @@ endif GhcWithJavaGen=NO HaveLibDL = @HaveLibDL@ -HaveRtldNext = @HaveRtldNext@ -HaveRtldLocal = @HaveRtldLocal@ -# Include GHCi in the compiler. Default to NO for the time being. +# ArchSupportsSMP should be set iff there is support for that arch in +# includes/SMP.h +ArchSupportsSMP=$(strip $(patsubst $(HostArch_CPP), YES, $(findstring $(HostArch_CPP), i386 x86_64 sparc powerpc))) + +ifeq "$(ArchSupportsSMP)$(GhcUnregisterised)" "YESNO" +GhcWithSMP=YES +else +GhcWithSMP=NO +endif + +# Whether to include GHCi in the compiler. Depends on whether the RTS linker +# has support for this OS/ARCH combination. + +OsSupportsGHCi=$(strip $(patsubst $(HostOS_CPP), YES, $(findstring $(HostOS_CPP), mingw32 cygwin32 linux solaris2 freebsd netbsd openbsd darwin))) +ArchSupportsGHCi=$(strip $(patsubst $(HostArch_CPP), YES, $(findstring $(HostArch_CPP), i386 x86_64 powerpc sparc sparc64))) -ifneq "$(findstring $(HostOS_CPP), mingw32 cygwin32 linux solaris2 freebsd netbsd openbsd darwin)" "" +ifeq "$(OsSupportsGHCi)$(ArchSupportsGHCi)" "YESYES" GhcWithInterpreter=YES else GhcWithInterpreter=NO endif +# GhcEnableTablesNextToCode tells us whether the target architecture +# supports placing info tables directly before the entry code +# (see TABLES_NEXT_TO_CODE in the RTS). Whether we actually compile for +# TABLES_NEXT_TO_CODE depends on whether we're building unregisterised +# code or not, which may be decided by options to the compiler later. +ifneq "$(findstring $(TargetArch_CPP)X, ia64X powerpc64X)" "" +GhcEnableTablesNextToCode=NO +else +GhcEnableTablesNextToCode=YES +endif + # # Building various ways? # (right now, empty if not). BuildingParallel=$(subst mp,YES,$(filter mp,$(WAYS))) BuildingGranSim=$(subst mg,YES,$(filter mg,$(WAYS))) +# Interface file version (hi-boot files only) +# +# A GHC built with HscIfaceFileVersion=n will look for +# M.hi-boot-n, and only then for +# M.hi-boot. +# (It'll be happy with the latter if the former doesn't exist.) +# +# +# This variable is used ONLY for hi-boot files. Its only purpose is +# to allow you to have a single directory with multiple .hi-boot files +# for the same module, each corresponding to a different version of +# GHC. +# +# HscIfaceFileVersion is propagated to hsc via +# compiler/main/Config.hs, which is automatically generated by +# compiler/Makefile. + +HscIfaceFileVersion=6 + +# Building with debugger? +GhciWithDebugger=YES + #------------------------------------------------------------------------------ # Options for Libraries @@ -288,13 +338,14 @@ endif # thr_p : threaded profiled # debug : debugging (compile with -g for the C compiler, and -DDEBUG) # debug_p : debugging profiled -# debug_thr : debugging threaded -# debug_thr_p : debugging threaded profiled +# debug_u : debugging unregisterised +# thr_debug : debugging threaded +# thr_debug_p : debugging threaded profiled # ifeq "$(BootingFromHc)" "YES" GhcRTSWays= else -GhcRTSWays=thr thr_p debug +GhcRTSWays=thr thr_p debug thr_debug endif # Option flags to pass to GHC when it's compiling modules in @@ -304,28 +355,31 @@ endif # # -O is pretty desirable, otherwise no inlining of prelude # things (incl "+") happens when compiling with this compiler +# +# -fgenerics switches on generation of support code for +# derivable type classes. This is now off by default, +# but we switch it on for the libraries so that we generate +# the code in case someone importing wants it -GhcLibHcOpts=-O -Rghc-timing +GhcLibHcOpts=-O -Rghc-timing -fgenerics # Win32 only: Enable the RTS and libraries to be built as DLLs DLLized=@EnableWin32DLLs@ -# Win32 only: are we building a compiler that tries to reduce external -# dependencies? i.e., one that doesn't assume that the user has got -# the cygwin toolchain installed on his/her Win32 box. -# -# GHC is still dependent on GNU tools in the backend (gcc to further process -# .c/.hc/.s/.o files + 'perl' to mangle and split), but using this -# option a GHC distribution can be put together which includes a minimal -# set of these open source tools. -# -MinimalUnixDeps=@MinimalUnixDeps@ - # Strip local symbols from libraries? This can make the libraries smaller, # but makes debugging somewhat more difficult. Doesn't work with all ld's. # StripLibraries=NO +# These are the URL patterns that Haddock uses to generate the "Source +# File" links on each page. +CorePackageSourceURL = http://darcs.haskell.org/ghc-6.6/packages/$(PACKAGE)/%{FILE} +ExtraPackageSourceURL = http://darcs.haskell.org/packages/$(PACKAGE)/%{FILE} + +# These are the packages required to be present in order to bootstrap GHC +# NB. must be synced with libraries/core-packages +CorePackages = base Cabal haskell98 readline regex-base regex-compat \ + regex-posix parsec stm template-haskell unix Win32 # ---------------------------------------------------------------------------- # Object-file splitting @@ -335,11 +389,14 @@ StripLibraries=NO # Don't use -split-objs in in GhcLibHcOpts, because the build # system needs to do other special magic if you are # doing object-file splitting +ifneq "$(findstring $(HostArch_CPP), i386 x86_64 powerpc sparc)" "" +SplitObjs=YES +else +SplitObjs=NO +endif # Don't split object files for libs if we're building DLLs, or booting from # .hc files. -SplitObjs=YES - ifeq "$(DLLized)" "YES" SplitObjs=NO endif @@ -349,44 +406,10 @@ endif ifeq "$(GhcUnregisterised)" "YES" SplitObjs=NO endif -ifeq "$(TARGETPLATFORM)" "ia64-unknown-linux" +ifeq "$(TargetArch_CPP)" "ia64" SplitObjs=NO endif -# ---------------------------------------------------------------------------- -# Options for GHC's RTS - -# For an optimised RTS (you probably don't want to change these; we build -# a debugging RTS by default now. Use -package rts_debug to get it). -GhcRtsHcOpts=-O2 -GhcRtsCcOpts=-fomit-frame-pointer - -# Include the front panel code? Needs GTK+. -GhcRtsWithFrontPanel = NO - -# DEPRECATED: -# This option is no longer used. We now always build the threaded RTS, -# add the flag '-threaded' to GHC to get it. -GhcRtsThreaded=@ThreadedRts@ - -################################################################################ -# -# libraries project -# -################################################################################ - -# Build the Haskell Readline bindings? -# -GhcLibsWithReadline=@GhcLibsWithReadline@ - -# Libraries needed for linking with readline -LibsReadline=@LibsReadline@ - -# Include path to readline.h -# (no path == in standard include path) -# -ReadlineIncludePath= - # Math library LIBM=@LIBM@ @@ -394,26 +417,6 @@ LIBM=@LIBM@ # GhcLibsWithObjectIO=@GhcLibsWithObjectIO@ -# Build the Haskell OpenGL binding? -# -GhcLibsWithOpenGL=@GhcLibsWithOpenGL@ -GLU_CFLAGS=@GLU_CFLAGS@ -GLU_LIBS=@GLU_LIBS@ - -# Build the Haskell OpenAL binding? -# -GhcLibsWithOpenAL=@GhcLibsWithOpenAL@ - -# Build the Haskell GLUT binding? -# -GhcLibsWithGLUT=@GhcLibsWithGLUT@ -GLUT_LIBS=@GLUT_LIBS@ - -# X11 stuff -# -X_CFLAGS=@X_CFLAGS@ -X_LIBS=@X_LIBS@ - # .NET interop support? # DotnetSupport=@DotnetSupport@ @@ -422,41 +425,25 @@ DotnetSupport=@DotnetSupport@ # GhcLibsWithUnix=@GhcLibsWithUnix@ -################################################################################ -# -# happy project -# -# Happy specific options -# -################################################################################ - -# The compiler you'd like to use to compile Happy -WithHappyHc = @WithHc@ +# ---------------------------------------------------------------------------- +# Options for GHC's RTS -# HappyHcOpts gives the flags to pass to the Haskell compiler used -# to compile the Happy sources with. -# -HappyHcOpts = -O +# For an optimised RTS (you probably don't want to change these; we build +# a debugging RTS by default now. Use -debug to get it). +GhcRtsHcOpts=-optc-O2 +GhcRtsCcOpts=-fomit-frame-pointer -################################################################################ -# -# haggis project -# -# Haggis specific options -# -################################################################################ +# Include the front panel code? Needs GTK+. +GhcRtsWithFrontPanel = NO -################################################################################ -# -# greencard project -# -# GreenCard specific options -# -################################################################################ +# Include support for CPU performance counters via the PAPI library in the RTS? +# (PAPI: http://icl.cs.utk.edu/papi/) +GhcRtsWithPapi = NO +HavePapi = @HavePapi@ ################################################################################ # -# nofib project +# nofib # # nofib specific options # @@ -483,13 +470,8 @@ NoFibWays = $(GhcLibWays) # Haskell compiler options for nofib NoFibHcOpts = -O -# ============================================================================== -# -# END OF PROJECT-SPECIFIC STUFF -# -# Now come the generic configuration options -# -# ============================================================================== +# Number of times to run each program +NoFibRuns = 5 ################################################################################ # @@ -509,10 +491,10 @@ NoFibHcOpts = -O DEFAULT_TMPDIR = /tmp ifeq "$(TARGETPLATFORM)" "i386-unknown-cygwin32" -DEFAULT_TMPDIR = C:/TEMP +DEFAULT_TMPDIR = /C/TEMP endif ifeq "$(TARGETPLATFORM)" "i386-unknown-mingw32" -DEFAULT_TMPDIR = C:/TEMP +DEFAULT_TMPDIR = /C/TEMP endif # FPTOOLS_TOP: the top of the fptools hierarchy, absolute path. (POSIX / unix-style path). @@ -526,31 +508,40 @@ FPTOOLS_TOP_ABS_PLATFORM = @hardtop_plat@ # passing through, we might as well set them. prefix = @prefix@ +datarootdir = @datarootdir@ exec_prefix = @exec_prefix@ bindir = @bindir@ datadir0 = @datadir@ - -#sysconfdir = @datadir@ -#sharedstatedir = @sharedstatedir@ -#localstatedir = @localstatedir@ libdir0 = @libdir@ includedir = @includedir@ oldincludedir = @oldincludedir@ mandir = @mandir@ -#UNUSED:infodir = @infodir@ -#UNUSED:srcdir = @srcdir@ +ifeq "$(Windows)" "YES" + +ifeq "$(strip $(prefix))" "" +prefix = /c/ghc +endif + +# Hack: our directory layouts tend to be different on Windows, so +# hack around configure's bogus assumptions here. +datadir = $(prefix) +libdir = $(prefix) + +else # -# override libdir and datadir to put project-specific stuff in +# Unix: override libdir and datadir to put ghc-specific stuff in # a subdirectory with the version number included. # -libdir = $(if $(ProjectNameShort),$(libdir0)/$(ProjectNameShort)-$(ProjectVersion),$(libdir0)) -datadir = $(if $(ProjectNameShort),$(datadir0)/$(ProjectNameShort)-$(ProjectVersion),$(datadir0)) +libdir = $(libdir0)/ghc-$(ProjectVersion) +datadir = $(datadir0)/ghc-$(ProjectVersion) + +endif # Windows # Default place for putting interface files is $(libdir) # (overriden for packages in package.mk) -ifacedir = $(libdir) +ifacedir = $(libdir) # # Default values for most of the above are only set if @@ -589,11 +580,32 @@ ifeq "$(strip $(mandir))" "" mandir = $(prefix)/man endif -################################################################################ +#----------------------------------------------------------------------------- +# install configuration + # -# Utilities programs: flags +# Set this to have files installed with a specific owner # -################################################################################ +INSTALL_OWNER = + +# +# Set this to have files installed with a specific group +# +INSTALL_GROUP = + +# +# Invocations of `install' for the four different classes +# of targets: +# +INSTALL_PROGRAM = $(INSTALL) -m 755 +INSTALL_SCRIPT = $(INSTALL) -m 755 +INSTALL_SHLIB = $(INSTALL) -m 755 +INSTALL_DATA = $(INSTALL) -m 644 +INSTALL_MAN = $(INSTALL) -m 644 +INSTALL_DIR = $(MKDIRHIER) + +# ----------------------------------------------------------------------------- +# Utilities programs: flags # If you want to give any standard flags to pretty much any utility # (see utils.mk for a complete list), by adding a line here @@ -625,50 +637,143 @@ GC_CPP_OPTS += -P -E -x c -traditional -D__GLASGOW_HASKELL__ ################################################################################ # -# Utilities programs: where to find them +# Layout of the source tree # ################################################################################ -#----------------------------------------------------------------------------- -# FPtools Utility locations - -# By default, the various utils needed to be build ghc and chums -# is set up to point to the utils/ directory. Define here the -# path prefix for the utilities. Notice that it's a prefix with -# a trailing slash, so that it can be concatenated directly on -# front of a program name; if it's not set then we just look -# along the shell's $(PATH) -# -# If instead you want to use installed or your own versions of these, -# override the various *_PREFIX in build.mk, i.e., having the following -# in build.mk: -# -# MKDEPENDC_PREFIX= -# -# will force `make' to rummage around in your PATH to find `mkdependC' (not -# sure it would need it in the first place, but still). -# -GLAFP_UTILS = $(FPTOOLS_TOP)/glafp-utils - -SCRIPT_PREFIX = $(GLAFP_UTILS)/scripts/ -MKDEPENDC_PREFIX = $(GLAFP_UTILS)/mkdependC/ -LTX_PREFIX = $(GLAFP_UTILS)/ltx/ -RUNTEST_PREFIX = $(GLAFP_UTILS)/runstdtest/ -VERBATIM_PREFIX = $(GLAFP_UTILS)/verbatim/ -SGMLVERB_PREFIX = $(GLAFP_UTILS)/sgmlverb/ -ETAGS_PREFIX = $(GLAFP_UTILS)/etags/ -LNDIR_PREFIX = $(GLAFP_UTILS)/lndir/ -MKDIRHIER_PREFIX = $(GLAFP_UTILS)/mkdirhier/ -DOCBOOK_PREFIX = $(GLAFP_UTILS)/docbook/ - -HADDOCK_PREFIX = $(FPTOOLS_TOP)/haddock/ +# Here we provide defines for the various directories in the source tree, +# so we can move things around more easily. A define $(GHC_FOO_DIR_REL) +# indicates a directory relative to the top of the source tree, whereas +# $(GHC_FOO_DIR) is a directory relative to the current directory. +# $(GHC_FOO_DIR_ABS) is the absolute path to the directory. + +GHC_UTILS_DIR_REL = utils +GHC_INCLUDE_DIR_REL = includes +GHC_COMPILER_DIR_REL = compiler +GHC_RTS_DIR_REL = rts +GHC_UTILS_DIR_REL = utils +GHC_DRIVER_DIR_REL = driver +GHC_COMPAT_DIR_REL = compat + +GHC_MKDEPENDC_DIR_REL = $(GHC_UTILS_DIR_REL)/mkdependC +GHC_LTX_DIR_REL = $(GHC_UTILS_DIR_REL)/ltx +GHC_RUNTEST_DIR_REL = $(GHC_UTILS_DIR_REL)/runstdtest +GHC_LNDIR_DIR_REL = $(GHC_UTILS_DIR_REL)/lndir +GHC_MKDIRHIER_DIR_REL = $(GHC_UTILS_DIR_REL)/mkdirhier +GHC_DOCBOOK_DIR_REL = $(GHC_UTILS_DIR_REL)/docbook +GHC_UNLIT_DIR_REL = $(GHC_UTILS_DIR_REL)/unlit +GHC_HP2PS_DIR_REL = $(GHC_UTILS_DIR_REL)/hp2ps +GHC_HSTAGS_DIR_REL = $(GHC_UTILS_DIR_REL)/hasktags +GHC_HSC2HS_DIR_REL = $(GHC_UTILS_DIR_REL)/hsc2hs +GHC_TOUCHY_DIR_REL = $(GHC_UTILS_DIR_REL)/touchy +GHC_PKG_DIR_REL = $(GHC_UTILS_DIR_REL)/ghc-pkg +GHC_GENPRIMOP_DIR_REL = $(GHC_UTILS_DIR_REL)/genprimopcode +GHC_GENAPPLY_DIR_REL = $(GHC_UTILS_DIR_REL)/genapply + +GHC_MANGLER_DIR_REL = $(GHC_DRIVER_DIR_REL)/mangler +GHC_SPLIT_DIR_REL = $(GHC_DRIVER_DIR_REL)/split +GHC_SYSMAN_DIR_REL = $(GHC_RTS_DIR_REL)/parallel + +GHC_UTILS_DIR = $(FPTOOLS_TOP)/$(GHC_UTILS_DIR_REL) +GHC_INCLUDE_DIR = $(FPTOOLS_TOP)/$(GHC_INCLUDE_DIR_REL) +GHC_COMPILER_DIR = $(FPTOOLS_TOP)/$(GHC_COMPILER_DIR_REL) +GHC_RTS_DIR = $(FPTOOLS_TOP)/$(GHC_RTS_DIR_REL) +GHC_UTILS_DIR = $(FPTOOLS_TOP)/$(GHC_UTILS_DIR_REL) +GHC_DRIVER_DIR = $(FPTOOLS_TOP)/$(GHC_DRIVER_DIR_REL) +GHC_COMPAT_DIR = $(FPTOOLS_TOP)/$(GHC_COMPAT_DIR_REL) + +GHC_MKDEPENDC_DIR = $(FPTOOLS_TOP)/$(GHC_MKDEPENDC_DIR_REL) +GHC_LTX_DIR = $(FPTOOLS_TOP)/$(GHC_LTX_DIR_REL) +GHC_RUNTEST_DIR = $(FPTOOLS_TOP)/$(GHC_RUNTEST_DIR_REL) +GHC_LNDIR_DIR = $(FPTOOLS_TOP)/$(GHC_LNDIR_DIR_REL) +GHC_MKDIRHIER_DIR = $(FPTOOLS_TOP)/$(GHC_MKDIRHIER_DIR_REL) +GHC_DOCBOOK_DIR = $(FPTOOLS_TOP)/$(GHC_DOCBOOK_DIR_REL) +GHC_UNLIT_DIR = $(FPTOOLS_TOP)/$(GHC_UNLIT_DIR_REL) +GHC_HP2PS_DIR = $(FPTOOLS_TOP)/$(GHC_HP2PS_DIR_REL) +GHC_HSTAGS_DIR = $(FPTOOLS_TOP)/$(GHC_HSTAGS_DIR_REL) +GHC_HSC2HS_DIR = $(FPTOOLS_TOP)/$(GHC_HSC2HS_DIR_REL) +GHC_TOUCHY_DIR = $(FPTOOLS_TOP)/$(GHC_TOUCHY_DIR_REL) +GHC_PKG_DIR = $(FPTOOLS_TOP)/$(GHC_PKG_DIR_REL) +GHC_GENPRIMOP_DIR = $(FPTOOLS_TOP)/$(GHC_GENPRIMOP_DIR_REL) +GHC_GENAPPLY_DIR = $(FPTOOLS_TOP)/$(GHC_GENAPPLY_DIR_REL) + +GHC_MANGLER_DIR = $(FPTOOLS_TOP)/$(GHC_MANGLER_DIR_REL) +GHC_SPLIT_DIR = $(FPTOOLS_TOP)/$(GHC_SPLIT_DIR_REL) +GHC_SYSMAN_DIR = $(FPTOOLS_TOP)/$(GHC_SYSMAN_DIR_REL) + +GHC_UTILS_DIR_ABS = $(FPTOOLS_TOP_ABS)/$(GHC_UTILS_DIR_REL) +GHC_INCLUDE_DIR_ABS = $(FPTOOLS_TOP_ABS)/$(GHC_INCLUDE_DIR_REL) +GHC_COMPILER_DIR_ABS = $(FPTOOLS_TOP_ABS)/$(GHC_COMPILER_DIR_REL) +GHC_RTS_DIR_ABS = $(FPTOOLS_TOP_ABS)/$(GHC_RTS_DIR_REL) +GHC_UTILS_DIR_ABS = $(FPTOOLS_TOP_ABS)/$(GHC_UTILS_DIR_REL) +GHC_DRIVER_DIR_ABS = $(FPTOOLS_TOP_ABS)/$(GHC_DRIVER_DIR_REL) +GHC_COMPAT_DIR_ABS = $(FPTOOLS_TOP_ABS)/$(GHC_COMPAT_DIR_REL) + +GHC_MKDEPENDC_DIR_ABS = $(FPTOOLS_TOP_ABS)/$(GHC_MKDEPENDC_DIR_REL) +GHC_LTX_DIR_ABS = $(FPTOOLS_TOP_ABS)/$(GHC_LTX_DIR_REL) +GHC_RUNTEST_DIR_ABS = $(FPTOOLS_TOP_ABS)/$(GHC_RUNTEST_DIR_REL) +GHC_LNDIR_DIR_ABS = $(FPTOOLS_TOP_ABS)/$(GHC_LNDIR_DIR_REL) +GHC_MKDIRHIER_DIR_ABS = $(FPTOOLS_TOP_ABS)/$(GHC_MKDIRHIER_DIR_REL) +GHC_DOCBOOK_DIR_ABS = $(FPTOOLS_TOP_ABS)/$(GHC_DOCBOOK_DIR_REL) +GHC_UNLIT_DIR = $(FPTOOLS_TOP_ABS)/$(GHC_UNLIT_DIR_REL) +GHC_HP2PS_DIR_ABS = $(FPTOOLS_TOP_ABS)/$(GHC_HP2PS_DIR_REL) +GHC_HSTAGS_DIR_ABS = $(FPTOOLS_TOP_ABS)/$(GHC_HSTAGS_DIR_REL) +GHC_HSC2HS_DIR_ABS = $(FPTOOLS_TOP_ABS)/$(GHC_HSC2HS_DIR_REL) +GHC_TOUCHY_DIR_ABS = $(FPTOOLS_TOP_ABS)/$(GHC_TOUCHY_DIR_REL) +GHC_PKG_DIR_ABS = $(FPTOOLS_TOP_ABS)/$(GHC_PKG_DIR_REL) +GHC_GENPRIMOP_DIR_ABS = $(FPTOOLS_TOP_ABS)/$(GHC_GENPRIMOP_DIR_REL) +GHC_GENAPPLY_DIR_ABS = $(FPTOOLS_TOP_ABS)/$(GHC_GENAPPLY_DIR_REL) + +GHC_MANGLER_DIR_ABS = $(FPTOOLS_TOP_ABS)/$(GHC_MANGLER_DIR_REL) +GHC_SYSMAN_DIR_ABS = $(FPTOOLS_TOP_ABS)/$(GHC_SYSMAN_DIR_REL) +GHC_SPLIT_DIR_ABS = $(FPTOOLS_TOP_ABS)/$(GHC_SPLIT_DIR_REL) + +# ----------------------------------------------------------------------------- +# Names of programs in the GHC tree +# +# xxx_PGM the name of an executable, without the path +# xxx the executable relative to the current dir + +GHC_UNLIT_PGM = unlit$(exeext) +GHC_HP2PS_PGM = hp2ps +GHC_HSTAGS_PGM = hasktags +GHC_HSC2HS_INPLACE_PGM = hsc2hs-inplace +GHC_TOUCHY_PGM = touchy$(exeext) +GHC_MANGLER_PGM = ghc-asm +GHC_SPLIT_PGM = ghc-split +GHC_SYSMAN_PGM = SysMan +GHC_PKG_INPLACE_PGM = ghc-pkg-inplace +GHC_GENPRIMOP_PGM = genprimopcode +GHC_GENAPPLY_PGM = genapply +GHC_MKDEPENDC_PGM = mkdependC +GHC_LTX_PGM = ltx +GHC_MKDIRHIER_PGM = mkdirhier +GHC_LNDIR_PGM = lndir +GHC_RUNTEST_PGM = runstdtest -LITERATE_PREFIX = $(FPTOOLS_TOP)/literate/ +ifeq "$(TARGETPLATFORM)" "i386-unknown-mingw32" +GHC_CP = "xcopy /y" +GHC_PERL = perl +else +GHC_CP = $(CP) +GHC_PERL = $(PERL) +endif -UNLIT_PREFIX = $(FPTOOLS_TOP)/ghc/utils/unlit/ -HP2PS_PREFIX = $(FPTOOLS_TOP)/ghc/utils/hp2ps/ -HSTAGS_PREFIX = $(FPTOOLS_TOP)/ghc/utils/hasktags/ -HSC2HS_PREFIX = $(FPTOOLS_TOP)/ghc/utils/hsc2hs/ +UNLIT = $(GHC_UNLIT_DIR)/$(GHC_UNLIT_PGM) +HP2PS = $(GHC_HP2PS_DIR)/$(GHC_HP2PS_PGM) +HSTAGS = $(GHC_HSTAGS_DIR)/$(GHC_HSTAGS_PGM) +HSC2HS_INPLACE = $(GHC_HSC2HS_DIR)/$(GHC_HSC2HS_INPLACE_PGM) +MANGLER = $(GHC_MANGLER_DIR)/$(GHC_MANGLER_PGM) +SPLIT = $(GHC_SPLIT_DIR)/$(GHC_SPLIT_PGM) +SYSMAN = $(GHC_SYSMAN_DIR)/$(GHC_SYSMAN_PGM) +GHC_PKG_INPLACE = $(GHC_PKG_DIR)/$(GHC_PKG_INPLACE_PGM) +GENPRIMOP = $(GHC_GENPRIMOP_DIR)/$(GHC_GENPRIMOP_PGM) +GENAPPLY = $(GHC_GENAPPLY_DIR)/$(GHC_GENAPPLY_PGM) +MKDEPENDC = $(GHC_MKDEPENDC_DIR)/$(GHC_MKDEPENDC_PGM) +LTX = $(GHC_LTX_DIR)/$(GHC_LTX_PGM) +MKDIRHIER = $(GHC_MKDIRHIER_DIR)/$(GHC_MKDIRHIER_PGM) +LNDIR = $(GHC_LNDIR_DIR)/$(GHC_LNDIR_PGM) +RUNTEST = $(GHC_RUNTEST_DIR)/$(GHC_RUNTEST_PGM) #----------------------------------------------------------------------------- # Haskell compilers and mkdependHS @@ -683,10 +788,57 @@ HSC2HS_PREFIX = $(FPTOOLS_TOP)/ghc/utils/hsc2hs/ # (because the version numbers have to be calculated). GHC = @WithGhc@ -GhcVersion = @GhcVersion@ +GhcDir = $(dir $(GHC)) + +# Set to YES if $(GHC) has the readline package installed +GhcHasReadline = @GhcHasReadline@ + +HBC = @HBC@ +NHC = @NHC@ + +# Sometimes we want to invoke ghc from the build tree in different +# places (eg. it's handy to have a nofib & a ghc build in the same +# tree). We can refer to "this ghc" as $(GHC_INPLACE): + +GHC_INPLACE = $(GHC_COMPILER_DIR)/ghc-inplace +GHC_STAGE1 = $(GHC_COMPILER_DIR)/stage1/ghc-inplace +GHC_STAGE2 = $(GHC_COMPILER_DIR)/stage2/ghc-inplace +GHC_STAGE3 = $(GHC_COMPILER_DIR)/stage3/ghc-inplace + +ifneq "$(findstring YES, $(UseStage1) $(BootingFromHc))" "" + +# We are using the stage1 compiler to compile Haskell code, set up +# some variables appropriately: +HC =$(GHC_STAGE1) +MKDEPENDHS =$(GHC_STAGE1) +GhcVersion = @ProjectVersion@ +GhcPatchLevel = @ProjectPatchLevel@ +# oops, these are wrong: GhcMajVersion = @GhcMajVersion@ GhcMinVersion = @GhcMinVersion@ + +ghc_ge_504 = YES +ghc_ge_601 = YES +ghc_ge_602 = YES +ghc_ge_603 = YES +ghc_ge_605 = YES + +else # not UseStage1 or BootingFromHc + +HC = @WithHc@ +MKDEPENDHS = $(GHC) +GhcVersion = @GhcVersion@ GhcPatchLevel = @GhcPatchLevel@ +GhcMajVersion = @GhcMajVersion@ +GhcMinVersion = @GhcMinVersion@ + +# Some useful GHC version predicates: +ghc_ge_504 = @ghc_ge_504@ +ghc_ge_601 = @ghc_ge_601@ +ghc_ge_602 = @ghc_ge_602@ +ghc_ge_603 = @ghc_ge_603@ +ghc_ge_605 = @ghc_ge_605@ +endif # Canonicalised ghc version number, used for easy (integer) version # comparisons. We must expand $(GhcMinVersion) to two digits by @@ -697,21 +849,6 @@ else GhcCanonVersion = $(GhcMajVersion)$(GhcMinVersion) endif -HBC = @HBC@ -NHC = @NHC@ - -HC = @WithHc@ -MKDEPENDHS = $(GHC) - -# Sometimes we want to invoke ghc from the build tree in different -# projects (eg. it's handy to have a nofib & a ghc build in the same -# tree). We can refer to "this ghc" as $(GHC_INPLACE): - -GHC_INPLACE = $(FPTOOLS_TOP)/ghc/compiler/ghc-inplace -GHC_STAGE1 = $(FPTOOLS_TOP)/ghc/compiler/stage1/ghc-inplace -GHC_STAGE2 = $(FPTOOLS_TOP)/ghc/compiler/stage2/ghc-inplace -GHC_STAGE3 = $(FPTOOLS_TOP)/ghc/compiler/stage3/ghc-inplace - #----------------------------------------------------------------------------- # C compiler # @@ -722,11 +859,13 @@ GHC_STAGE3 = $(FPTOOLS_TOP)/ghc/compiler/stage3/ghc-inplace HaveGcc = @HaveGcc@ UseGcc = YES WhatGccIsCalled = @WhatGccIsCalled@ +GccVersion = @GccVersion@ ifeq "$(strip $(HaveGcc))" "YES" ifneq "$(strip $(UseGcc))" "YES" CC = cc else CC = $(WhatGccIsCalled) + GccDir = $(dir $(WhatGccIsCalled)) endif endif @@ -737,35 +876,24 @@ 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) # HaveLibGmp = @HaveLibGmp@ LibGmp = @LibGmp@ -#----------------------------------------------------------------------------- -# Mingwex Library -# -HaveLibMingwEx = @HaveLibMingwEx@ +GMP_INCLUDE_DIRS=@GMP_INCLUDE_DIRS@ +GMP_LIB_DIRS=@GMP_LIB_DIRS@ #----------------------------------------------------------------------------- -# HaskellSupport framework (Mac OS X) +# GMP framework (Mac OS X) # -HaveFrameworkHaskellSupport = @HaveFrameworkHaskellSupport@ +HaveFrameworkGMP = @HaveFrameworkGMP@ #----------------------------------------------------------------------------- -# Regex library -# (if present in libc use that one, otherwise use the one in the tree) +# Mingwex Library # -HavePosixRegex = @HavePosixRegex@ - -#----------------------------------------------------------------------------- -# GTK+ - -GTK_CONFIG = @GTK_CONFIG@ +HaveLibMingwEx = @HaveLibMingwEx@ #----------------------------------------------------------------------------- # Flex (currently unused, could be moved to glafp-utils) @@ -793,6 +921,7 @@ CTAGS = $(ETAGS) # RAWCPP_FLAGS = -undef -traditional FIND = @FindCmd@ +SORT = @SortCmd@ INSTALL = @INSTALL@ # # Sigh - the autoconf macro for INSTALL will subst a relative path to the fallback @@ -817,12 +946,17 @@ RM = rm -f SED = @SedCmd@ SHELL = /bin/sh +LD = @LdCmd@ + # Some ld's support the -x flag and some don't, so the configure # script detects which we have and sets LdXFlag to "-x" or "" # respectively. -LD = @LdCmd@ LD_X = @LdXFlag@ +# GNU ld supports input via a linker script, which is useful to avoid +# overflowing command-line length limits. +LdIsGNULd = @LdIsGNULd@ + # # In emergency situations, REAL_SHELL is used to perform shell commands # from within the ghc driver script, by scribbling the command line to @@ -831,7 +965,7 @@ LD_X = @LdXFlag@ # The reason for having to do this is that overly long command lines # cause unnecessary trouble with some shells (e.g., /bin/sh on Solaris # 2.5.1), which is why this backdoor is provided. The situation of overly -# long command lines is either encountered while doing `make boot' in ghc/compiler, +# long command lines is either encountered while doing `make boot' in compiler/, # or when linking the compiler binary (`hsc'). # # We do not use SHELL to execute long commands, as `make' will more than likely @@ -865,41 +999,28 @@ TIME = @TimeCmd@ TROFF = troff UNAME = uname -#----------------------------------------------------------------------------- -# SGML stuff - -JADE = @JadeCmd@ +# GTK+ +GTK_CONFIG = @GTK_CONFIG@ -SGML2DVI = $(DOCBOOK_PREFIX)db2dvi -SGML2HTML = $(DOCBOOK_PREFIX)db2html -SGML2PS = $(DOCBOOK_PREFIX)db2ps -SGML2PDF = $(DOCBOOK_PREFIX)db2pdf -SGML2RTF = $(DOCBOOK_PREFIX)db2rtf +#----------------------------------------------------------------------------- +# DocBook XML stuff -SGMLSTYLESHEET = $(FPTOOLS_TOP_ABS)/docs/fptools-both.dsl +XSLTPROC = @XsltprocCmd@ +XMLLINT = @XmllintCmd@ +FOP = @FopCmd@ +XMLTEX = @XmltexCmd@ +PDFXMLTEX = @PdfxmltexCmd@ +DVIPS = @DvipsCmd@ -SRC_SGML2DVI_OPTS = -d $(SGMLSTYLESHEET) -SRC_SGML2HTML_OPTS = -d $(SGMLSTYLESHEET) -SRC_SGML2PS_OPTS = -d $(SGMLSTYLESHEET) -SRC_SGML2RTF_OPTS = -d $(SGMLSTYLESHEET) -SRC_SGML2PDF_OPTS = -d $(SGMLSTYLESHEET) +DIR_DOCBOOK_XSL = @DIR_DOCBOOK_XSL@ -DOCBOOK_CATALOG = @Catalog@ +XSLTPROC_LABEL_OPTS = --stringparam toc.section.depth 3 \ + --stringparam section.autolabel 1 \ + --stringparam section.label.includes.component.label 1 #----------------------------------------------------------------------------- # FPtools support software -# Stuff from fptools/glafp-utils -MKDEPENDC = $(MKDEPENDC_PREFIX)mkdependC -LTX = $(LTX_PREFIX)ltx -MKDIRHIER = $(MKDIRHIER_PREFIX)mkdirhier -LNDIR = $(LNDIR_PREFIX)lndir -ETAGS = $(ETAGS_PREFIX)etags -VERBATIM = $(VERBATIM_PREFIX)verbatim -SGMLVERB = $(SGMLVERB_PREFIX)sgmlverb -RUNTEST = $(RUNTEST_PREFIX)runstdtest -LX = @LxCmd@ - BLD_DLL = dllwrap # @@ -947,31 +1068,9 @@ GHC_ALEX_OPTS = -g # Haddock # HADDOCK = @HaddockCmd@ -HADDOCK_INPLACE = $(HADDOCK_PREFIX)/src/haddock-inplace # -# Stuff from fptools/literate -# -LIT2PGM = $(LITERATE_PREFIX)lit2pgm -LIT2HTML = $(LITERATE_PREFIX)lit2html -LIT2LATEX = $(LITERATE_PREFIX)lit2latex -MKDEPENDLIT = $(LITERATE_PREFIX)mkdependlit -LIT2CHANGELOG = $(LITERATE_PREFIX)lit2changelog -LIT2TEXT = $(LITERATE_PREFIX)lit2text - -# -# Stuff from fptools/ghc/utils -# -UNLIT = $(UNLIT_PREFIX)unlit$(exeext) -HP2PS = $(HP2PS_PREFIX)hp2ps$(exeext) -HSTAGS = $(HSTAGS_PREFIX)hasktags -HSC2HS = $(HSC2HS_PREFIX)hsc2hs-inplace - -# -# Options for the compiling different `ways'. Various projects within -# the glorious fptools tree support building in various user-configured -# ways. For instance, you could set up one `way' such that the prelude -# libraries all were built with the option -ffoldr-build-on. +# Options for compiling in different `ways'. # # To configure up your own way, have a look at some of the standard ways # such as profiling, and create your own set of WAY_*_OPTS defs below. @@ -981,15 +1080,6 @@ HSC2HS = $(HSC2HS_PREFIX)hsc2hs-inplace # # -# IMPORTANT! The WAYS variable configures the different `ways' -# you want to build a project (or maybe just parts of it, as is -# the case for ghc/). This variable is intended set inside the -# project mk setup, enforcing a global fptools WAYS is a bit too -# much (do you *really* want to build glafp-utils the profiled-concurrent -# way?) -# - -# # Definitions of the different ways: # # * their name: @@ -1010,7 +1100,7 @@ USER_WAYS=a b c d e f g h j k l m n o A B # The following ways currently have treated specially, p u t mg, # as the driver script treats these guys specially and needs to carefully be told # about the options for these. Hence, we hide the required command line options -# for these in the ghc/driver, as this is the only place they are needed. +# for these in the driver, as this is the only place they are needed. # # If you want to add to these default options, fill in the variables below: @@ -1030,10 +1120,6 @@ WAY_t_HC_OPTS= -ticky WAY_u_NAME=unregisterized (using portable C only) WAY_u_HC_OPTS=-unreg -# Way `s': -WAY_s_NAME=threads (for SMP) -WAY_s_HC_OPTS=-smp - # Way `mp': WAY_mp_NAME=parallel WAY_mp_HC_OPTS=-parallel @@ -1062,6 +1148,18 @@ WAY_debug_HC_OPTS=-optc-DDEBUG WAY_debug_p_NAME=debug profiled WAY_debug_p_HC_OPTS=-optc-DDEBUG -prof +# Way 'debug_u': +WAY_debug_u_NAME=debug unregisterised +WAY_debug_u_HC_OPTS=-optc-DDEBUG -unreg + +# Way 'thr_debug': +WAY_thr_debug_NAME=threaded +WAY_thr_debug_HC_OPTS=-optc-DTHREADED_RTS -optc-DDEBUG + +# Way 'thr_debug_p': +WAY_thr_debug_p_NAME=threaded +WAY_thr_debug_p_HC_OPTS=-optc-DTHREADED_RTS -optc-DDEBUG -prof + # # Add user-way configurations here: #