# -*-makefile-*- # @configure_input@ # ################################################################################ # # config.mk.in # # This file supplies defaults for many tweakable build configuration # options. Some of the defaults are filled in by the autoconf-generated # configure script. # # DO NOT EDIT THIS FILE! # # - config.mk is auto-generated from config.mk.in by configure. # This may be triggered automatically by the build system (say # if config.mk.in has changed more recently than config.mk), # so if you edit config.mk your changes will be spammed. # # - Settings in this file may be overriden by giving replacement # definitions in build.mk. See build.mk.sample for a good # starting point for a build.mk file. # # If you don't have a build.mk file then you get defaults for everything. # The defaults should provide a reasonable vanilla build. # # This is one of only two files that configure generates (the other is config.h) # 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. # # 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). # # 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@ ProjectTags = ProjectVersion = @ProjectVersion@$(ProjectTags) ProjectVersionInt = @ProjectVersionInt@ ProjectPatchLevel = @ProjectPatchLevel@ ################################################################################ # # Platform variables # ################################################################################ # 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. # # 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 # $(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. See the section # on "Coding Style" in the commentary for more details. # # - 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 # section on "Porting GHC" in the Building Guide. HOSTPLATFORM = @HostPlatform@ TARGETPLATFORM = @TargetPlatform@ 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. # HostPlatform_CPP = @HostPlatform_CPP@ HostArch_CPP = @HostArch_CPP@ HostOS_CPP = @HostOS_CPP@ HostOS_Full = @HostOS_Full@ HostVendor_CPP = @HostVendor_CPP@ 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 @TargetPlatform_CPP@_TARGET = 1 @BuildPlatform_CPP@_BUILD = 1 @HostArch_CPP@_HOST_ARCH = 1 @TargetArch_CPP@_TARGET_ARCH = 1 @BuildArch_CPP@_BUILD_ARCH = 1 @HostOS_CPP@_HOST_OS = 1 @TargetOS_CPP@_TARGET_OS = 1 @BuildOS_CPP@_BUILD_OS = 1 @HostVendor_CPP@_HOST_VENDOR = 1 @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 # LeadingUnderscore=@LeadingUnderscore@ # Pin a suffix on executables? If so, what (Windows only). exeext=@exeext@ soext=@soext@ # 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@ # BootingFromUnregisterisedHc - treat .hc files as containing unregisterised # rather than registerised code, i.e., disable the mangler? BootingFromUnregisterisedHc = @BootingFromUnregisterisedHc@ # # Which ways should DocBook XML documents be built? # options are: dvi ps pdf html chm HxS # XMLDocWays= ################################################################################ # # 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=. # Extra ways in which to build the compiler (for example, you might want to # build a profiled compiler so you can see where it spends its time) GhcCompilerWays= # Extra option flags to pass to the compiler that compiles the compiler # (Ones that are essential are wired into compiler/Makefile) # Typical options to use here: # # -DDEBUG include debugging code and assertions (will make the # compiler slower and produce debugging output, but useful # for development) # # -dcore-lint check the types after every pass of the compiler; # a pretty strong internal check of the compiler being # used to compile GHC. Useful when bootstrapping. GhcHcOpts=-Rghc-timing # Extra options added to specific stages of the compiler bootstrap. # These are placed later on the command line, and may therefore # override options from $(GhcHcOpts). GhcStage1HcOpts= GhcStage2HcOpts= GhcStage3HcOpts= GhcProfiled=NO GhcDebugged=NO # Build a compiler that will build *unregisterised* libraries and # binaries by default. Unregisterised code is supposed to compile and # run without any support for architecture-specific assembly mangling, # register assignment or tail-calls, and is therefore a good way to get # started when porting GHC to new architectures. # # If this is set to NO, you can still use the unregisterised way # (way 'u') to get unregisterised code, but the default way will be # registerised. # # 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. # 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, 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)))) # lazy test, because $(GhcUnregisterised) might be set in build.mk later. GhcWithNativeCodeGen=$(strip\ $(if $(filter YESYESNO,\ $(OsSupportsNCG)$(ArchSupportsNCG)$(GhcUnregisterised)),YES,NO)) # Include support for generating Java GhcWithJavaGen=NO HaveLibDL = @HaveLibDL@ # 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))) # lazy test, because $(GhcUnregisterised) might be set in build.mk later. GhcWithSMP=$(strip $(if $(filter YESNO, $(ArchSupportsSMP)$(GhcUnregisterised)),YES,NO)) # 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))) 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 # On Windows we normally want to make a relocatable bindist, to we # ignore flags like libdir ifeq "$(Windows)" "YES" RelocatableBuild = YES else RelocatableBuild = NO endif # When building bindists we set this to yes so that the binaries are as # portable as possible. BeConservative = NO # # 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 MakefileDeps=YES #------------------------------------------------------------------------------ # Options for Libraries # What extra ways to build the libraries in # In addition to the normal sequential way, the default is to also build # profiled prelude libraries. # When booting from .hc files, turn this off. ifeq "$(BootingFromHc)" "YES" GhcLibWays= else GhcLibWays=p endif # In addition, the RTS is built in some further variations. Ways that # make sense here: # # thr : threaded # thr_p : threaded profiled # debug : debugging (compile with -g for the C compiler, and -DDEBUG) # debug_p : debugging profiled # debug_u : debugging unregisterised # thr_debug : debugging threaded # thr_debug_p : debugging threaded profiled # t : ticky-ticky profiling # debug_t : debugging ticky-ticky profiling # GhcRTSWays= # Usually want the debug version ifeq "$(BootingFromHc)" "NO" GhcRTSWays += debug endif # Want the threaded versions unless we're unregisterised # Defer the check until later by using $(if..), because GhcUnregisterised might # be set in build.mk, which hasn't been read yet. GhcRTSWays += $(if $(findstring NO, $(GhcUnregisterised)),thr thr_p thr_debug,) # We can only build GHCi threaded if we have a threaded RTS: GhcThreaded = $(if $(findstring thr,$(GhcRTSWays)),YES,NO) # Option flags to pass to GHC when it's compiling modules in # fptools/libraries. Typically these are things like -O or # -dcore-lint or -H32m. The ones that are *essential* are wired into # the build system. # # -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 -fgenerics # Win32 only: Enable the RTS and libraries to be built as DLLs DLLized=@EnableWin32DLLs@ # 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 # # Set SplitObjs=YES or NO in your build.mk # # 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 # lazy test, so that $(GhcUnregisterised) can be set in build.mk SplitObjs=$(strip $(if $(filter $(TargetArch_CPP),i386 x86_64 powerpc sparc),\ $(if $(filter YES,$(BootingFromHC)),\ NO,\ $(if $(filter NO,$(GhcUnregisterised)),\ YES,\ NO)),\ NO)) # Math library LIBM=@LIBM@ # Build the ObjectIO ? # GhcLibsWithObjectIO=@GhcLibsWithObjectIO@ # .NET interop support? # DotnetSupport=@DotnetSupport@ # Build unix package? # GhcLibsWithUnix=@GhcLibsWithUnix@ # ---------------------------------------------------------------------------- # 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 -debug to get it). GhcRtsHcOpts=-optc-O2 GhcRtsCcOpts=-fomit-frame-pointer # Include the front panel code? Needs GTK+. GhcRtsWithFrontPanel = NO # 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 # # nofib specific options # ################################################################################ WithNofibHc = $(GHC_INPLACE) # NoFibSubDirs controls which set of tests should be run # You can run one or more of # imaginary # spectral # real # parallel # PRIVATE # PENDING # UNUSED NoFibSubDirs = imaginary spectral real # The different ways to build nofib. Default is just to mirror # what is done for the ghc prelude libraries. # NoFibWays = $(GhcLibWays) # Haskell compiler options for nofib NoFibHcOpts = -O # Number of times to run each program NoFibRuns = 5 ################################################################################ # # Paths (see paths.mk) # ################################################################################ # Directory used by GHC (and possibly other tools) for storing # temporary files. If your TMPDIR isn't big enough, either override # this in build.mk or set your environment variable "TMPDIR" to point # to somewhere with more space. (TMPDIR=. is a good choice). # DEFAULT_TMPDIR isn't called TMPDIR because GNU make tends to # override an environment variable with the value of the make variable # of the same name (if it exists) when executing sub-processes, so # setting the TMPDIR env var would have no effect in the build tree. DEFAULT_TMPDIR = /tmp ifeq "$(TARGETPLATFORM)" "i386-unknown-cygwin32" DEFAULT_TMPDIR = /C/TEMP endif ifeq "$(TARGETPLATFORM)" "i386-unknown-mingw32" DEFAULT_TMPDIR = /C/TEMP endif # FPTOOLS_TOP: the top of the fptools hierarchy, absolute path. # On Windows this is a c:/foo/bar style path. FPTOOLS_TOP_ABS = @hardtop@ BIN_DIST_NAME=ghc-$(ProjectVersion) BIN_DIST_TOPDIR_REL=$(FPTOOLS_TOP) BIN_DIST_TOPDIR_ABS=$(FPTOOLS_TOP_ABS) BIN_DIST_DIR=$(BIN_DIST_TOPDIR_ABS)/$(BIN_DIST_NAME) BIN_DIST_TARBALL=$(BIN_DIST_TOPDIR_REL)/$(BIN_DIST_NAME)-$(TARGETPLATFORM).tar.bz2 BIN_DIST_INST_DIR = $(FPTOOLS_TOP_ABS)/bindisttest/installed # Definition of installation directories, we don't use half of these, but since # the configure script has them on offer while passing through, we might as well # set them. Note that we have to be careful, because the GNU coding standards # have changed a bit over the course of time, and autoconf development reflects # this. # # A little bit of history regarding autoconf and GNU coding standards, use this # as a cheat-sheet for the stuff below: # # variable | default < 2.60 | default >= 2.60 # ------------+--------------------+-------------------------------------- # exec_prefix | ${prefix} | ${prefix} # libdir | ${exec_prefix}/lib | ${exec_prefix}/lib # datarootdir | NONE! | ${prefix}/share # datadir | ${prefix}/share | ${datarootdir} # infodir | ${prefix}/info | ${datarootdir}/info # mandir | ${prefix}/man | ${datarootdir}/man # docdir | NONE! | ${datarootdir}/doc/${PACKAGE_TARNAME} # htmldir | NONE! | ${docdir} # dvidir | NONE! | ${docdir} # pdfdir | NONE! | ${docdir} # psdir | NONE! | ${docdir} # # NOTE: The default e.g. ${docdir} above means that autoconf substitutes the # string "${docdir}", not the value of docdir! This is crucial for the GNU # coding standards. # This gets used in the default docdir when autoconf >= 2.60 is used PACKAGE_TARNAME := @PACKAGE_TARNAME@ prefix := @prefix@ # New autoconf (>= 2.60?) make a configure with a --datarootdir=DIR flag. # However, in order to support older autoconf's we don't use it. # datarootdir is set lower down instead. # But, as datadir is defined in terms of datarootdir, we also need to # set it to the value (if any) that configure gives it here. datarootdir := @datarootdir@ exec_prefix := @exec_prefix@ bindir := @bindir@ datadir0 := @datadir@ libdir0 := @libdir@ includedir := @includedir@ mandir := @mandir@ ifeq "$(Windows)" "YES" # Hack: our directory layouts tend to be different on Windows, so # hack around configure's bogus assumptions here. datarootdir := $(prefix) datadir := $(prefix) libdir := $(prefix) else # Unix: override libdir and datadir to put ghc-specific stuff in # a subdirectory with the version number included. datarootdir := $(datadir0) datadir := $(datadir0)/ghc-$(ProjectVersion) libdir := $(libdir0)/ghc-$(ProjectVersion) endif # Windows headerdir := $(libdir)/include # New autoconf (>= 2.60?) make a configure with --docdir=DIR etc flags. # However, in order to support older autoconf's we don't use them. #docdir := @docdir@ #htmldir := @htmldir@ #dvidir := @dvidir@ #pdfdir := @pdfdir@ #psdir := @psdir@ docdir := $(datarootdir)/doc/ghc htmldir := $(docdir) dvidir := $(docdir) pdfdir := $(docdir) psdir := $(docdir) # Default place for putting interface files is $(libdir) # (overriden for packages in package.mk) ifacedir = $(libdir) # NOTE: by intention, libexecdir and libdir point to # the same place. # => Only way to override this is to set libexecdir= on the command line. # (NOTE: configure script setting is ignored). libexecdir = $(libdir) # This is a bit of a lie, as this is a wrapper rather than the program # itself. However, it means that we don't have to worry about Windows # and non-Windows having different extensions. GHC_PKG_PROG = $(FPTOOLS_TOP_ABS)/$(GHC_PKG_DIR_REL)/ghc-pkg-inplace #----------------------------------------------------------------------------- # install configuration # # 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_HEADER = $(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 # # SRC_P_OPTS += ... # # where P is the utility. For example, to add -O to all Haskell # compilations, # # SRC_HC_OPTS += -O SRC_HC_OPTS += -H16m -O # These flags make flex 8-bit SRC_FLEX_OPTS += -8 SRC_INSTALL_BIN_OPTS += -s # lint gets all CPP's flags too SRC_LINT_OPTS += -axz -DLINT $(SRC_CPP_OPTS) WAY$(_way)_LINT_OPTS += WAY$(_way)_CPP_OPTS # Default fptools options for dllwrap. SRC_BLD_DLL_OPTS += -mno-cygwin --target=i386-mingw32 # Flags for CPP when running GreenCard on .pgc files GC_CPP_OPTS += -P -E -x c -traditional -D__GLASGOW_HASKELL__ ################################################################################ # # Layout of the source tree # ################################################################################ # 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 ifeq "$(TARGETPLATFORM)" "i386-unknown-mingw32" GHC_CP = "xcopy /y" GHC_PERL = perl else GHC_CP = $(CP) GHC_PERL = $(PERL) endif 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) GENERATED_FILE = chmod a-w EXECUTABLE_FILE = chmod +x #----------------------------------------------------------------------------- # Haskell compilers and mkdependHS # $(GHC), $(HBC) and $(NHC) point to installed versions of the relevant # compilers, if available. # # $(HC) is a generic Haskell 98 compiler, set to $(GHC) by default. # $(MKDEPENDHS) is the Haskell dependency generator (ghc -M). # # NOTE: Don't override $(GHC) in build.mk, use configure --with-ghc instead # (because the version numbers have to be calculated). GHC = @WithGhc@ 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_601 = YES ghc_ge_602 = YES ghc_ge_603 = YES ghc_ge_605 = YES ghc_ge_607 = 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_601 = @ghc_ge_601@ ghc_ge_602 = @ghc_ge_602@ ghc_ge_603 = @ghc_ge_603@ ghc_ge_605 = @ghc_ge_605@ ghc_ge_607 = @ghc_ge_607@ endif # 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 #----------------------------------------------------------------------------- # C compiler # # NB. Don't override $(WhatGccIsCalled) using build.mk, re-configure using # the flag --with-gcc= instead. The reason is that the configure script # needs to know which gcc you're using in order to perform its tests. 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 # default C compiler flags SRC_CC_OPTS = @SRC_CC_OPTS@ ifeq "$(TARGETPLATFORM)" "ia64-unknown-linux" SRC_CC_OPTS += -G0 endif #----------------------------------------------------------------------------- # GMP Library (version 2.0.x or above) # HaveLibGmp = @HaveLibGmp@ LibGmp = @LibGmp@ GMP_INCLUDE_DIRS=@GMP_INCLUDE_DIRS@ GMP_LIB_DIRS=@GMP_LIB_DIRS@ #----------------------------------------------------------------------------- # GMP framework (Mac OS X) # HaveFrameworkGMP = @HaveFrameworkGMP@ #----------------------------------------------------------------------------- # Mingwex Library # HaveLibMingwEx = @HaveLibMingwEx@ #----------------------------------------------------------------------------- # Flex (currently unused, could be moved to glafp-utils) # FLEX = @LEX@ # Don't bother with -lfl, we define our own yywrap()s anyway. # FLEX_LIB = #WAS:FLEX_LIB = @LEXLIB@ #----------------------------------------------------------------------------- # Other standard (ha!) Unix utilities AR = @ArCmd@ ArSupportsInput = @ArSupportsInput@ # Yuckage: for ghc/utils/parallel -- todo: nuke this dependency!! BASH = /usr/local/bin/bash CONTEXT_DIFF = @ContextDiffCmd@ CP = cp CPP = @CPP@ @CPPFLAGS@ CTAGS = $(ETAGS) # # RAWCPP_FLAGS are the flags to give to cpp (viz, gcc -E) to persuade it to # behave plausibly on Haskell sources. # RAWCPP_FLAGS = -undef -traditional FIND = @FindCmd@ SORT = @SortCmd@ INSTALL = @INSTALL@ # # Sigh - the autoconf macro for INSTALL will subst a relative path to the fallback # install-sh script (if chosen). This not terribly useful to us, so we convert # it into an abs. path. # INSTALL := $(subst .././install-sh,$(FPTOOLS_TOP_ABS)/install-sh,$(INSTALL)) LATEX = latex HEVEA = hevea HACHA = hacha LN_S = @LN_S@ MANMACROS = -man MSMACROS = -ms MV = mv NROFF = nroff PERL = @PerlCmd@ PYTHON = @PythonCmd@ PIC = pic PREPROCESSCMD = $(CC) -E RANLIB = @RANLIB@ 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_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 # a temp file and then having $(REAL_SHELL) execute it. # # 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 compiler/, # or when linking the compiler binary (`hsc'). # # We do not use SHELL to execute long commands, as `make' will more than likely # override whatever setting you have in your environment while executing. # By default, REAL_SHELL is set equal to SHELL, which is not really a smart move # as it is SHELL that will show up the bogosity in the first place, but setting # it to anything else isn't really portable. # # ====> If long command lines cause you trouble, invoke `ghc' (via `make' or otherwise) # with REAL_SHELL set to something else than /bin/sh, for instance, your favourite # command shell. # REAL_SHELL=$(SHELL) SIZE = size STRIP = strip TAR = @TarCmd@ ZIP = zip # # This is special to literate/, ToDo: add literate-specific # configure setup to literate/. # TBL = tbl TEX = tex TGRIND = tgrind TGRIND_HELPER = /usr/local/lib/tgrind/tfontedpr # XXX TIB = tib TIME = @TimeCmd@ TROFF = troff UNAME = uname # GTK+ GTK_CONFIG = @GTK_CONFIG@ # Set this if you want to use Inno Setup to build a Windows installer # when you make a bindist ISCC = #----------------------------------------------------------------------------- # DocBook XML stuff XSLTPROC = @XsltprocCmd@ XMLLINT = @XmllintCmd@ FOP = @FopCmd@ XMLTEX = @XmltexCmd@ PDFXMLTEX = @PdfxmltexCmd@ DVIPS = @DvipsCmd@ DIR_DOCBOOK_XSL = @DIR_DOCBOOK_XSL@ XSLTPROC_LABEL_OPTS = --stringparam toc.section.depth 3 \ --stringparam section.autolabel 1 \ --stringparam section.label.includes.component.label 1 #----------------------------------------------------------------------------- # FPtools support software BLD_DLL = dllwrap # # .NET support software # ILX2IL = ilx2il ILASM = ilasm # # ghc-pkg # GHC_PKG = @GhcPkgCmd@ # # GreenCard # GREENCARD = @GreenCardCmd@ GREENCARD_VERSION = @GreenCardVersion@ # # Happy # HAPPY = @HappyCmd@ HAPPY_VERSION = @HappyVersion@ # # Options to pass to Happy when we're going to compile the output with GHC # GHC_HAPPY_OPTS = -agc # Temp. to work around performance problems in the HEAD around 8/12/2003, # A Happy compiled with this compiler needs more stack. SRC_HAPPY_OPTS = +RTS -K2m -RTS # # 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@ # # 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. # After having done that, add your way string to WAYS, and after having # run the configure script, the different projects will add the new way # to the list of ways they support. # # # Definitions of the different ways: # # * their name: # - tag, e.g., p # - description, e.g., profiling # * what they mean to the driver: # - WAY_p_HC_OPTS gives the list of command-line options # to the driver. # # # The ways currently defined. # ALL_WAYS=p t u s mp mg a b c d e f g h i j k l m n o A B 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 driver, as this is the only place they are needed. # # If you want to add to these default options, fill in the variables below: # Way 'i': WAY_i_NAME=ILX WAY_i_HC_OPTS= -filx -fruntime-types # Way 'p': WAY_p_NAME=profiling WAY_p_HC_OPTS= -prof # Way 't': WAY_t_NAME=ticky-ticky profiling WAY_t_HC_OPTS= -ticky # Way `u': WAY_u_NAME=unregisterized (using portable C only) WAY_u_HC_OPTS=-unreg # Way `mp': WAY_mp_NAME=parallel WAY_mp_HC_OPTS=-parallel # Way `mg': WAY_mg_NAME=GranSim WAY_mg_HC_OPTS=-gransim # # These ways apply to the RTS only: # # Way 'thr': WAY_thr_NAME=threaded WAY_thr_HC_OPTS=-optc-DTHREADED_RTS # Way 'thr_p': WAY_thr_p_NAME=threaded profiled WAY_thr_p_HC_OPTS=-optc-DTHREADED_RTS -prof # Way 'debug': WAY_debug_NAME=debug WAY_debug_HC_OPTS=-optc-DDEBUG # Way 'debug_p': 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 'debug_t': WAY_debug_t_NAME=debug ticky-ticky profiling WAY_debug_t_HC_OPTS= -ticky -optc-DDEBUG # 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 # Way 'dyn': build dynamic shared libraries WAY_dyn_NAME=dyn WAY_dyn_HC_OPTS=-fPIC -dynamic WAY_dyn_LIB_TARGET=libHSrts-gcc661.so # Way 'thr_dyn': WAY_thr_dyn_NAME=thr_dyn WAY_thr_dyn_HC_OPTS=-fPIC -dynamic -optc-DTHREADED_RTS # Way 'thr_debug_dyn': WAY_thr_debug_dyn_NAME=thr_dyn WAY_thr_debug_dyn_HC_OPTS=-fPIC -dynamic -optc-DTHREADED_RTS -optc-DDEBUG # Way 'debug_dyn': WAY_debug_dyn_NAME=thr_dyn WAY_debug_dyn_HC_OPTS=-fPIC -dynamic -optc-DDEBUG # # Add user-way configurations here: # WAY_A_NAME= WAY_A_HC_OPTS= WAY_B_NAME= WAY_B_HC_OPTS= WAY_a_NAME= WAY_a_HC_OPTS= WAY_b_NAME= WAY_b_HC_OPTS= WAY_c_NAME= WAY_c_HC_OPTS= WAY_d_NAME= WAY_d_HC_OPTS= WAY_e_NAME= WAY_e_HC_OPTS= WAY_f_NAME= WAY_f_HC_OPTS= WAY_g_NAME= WAY_g_HC_OPTS= WAY_h_NAME= WAY_h_HC_OPTS= WAY_j_NAME= WAY_j_HC_OPTS= WAY_k_NAME= WAY_k_HC_OPTS= WAY_l_NAME= WAY_l_HC_OPTS= WAY_m_NAME= WAY_m_HC_OPTS= WAY_n_NAME= WAY_n_HC_OPTS= WAY_o_NAME= WAY_o_HC_OPTS= ################################################################################ # # 31-bit-Int Core files # ################################################################################ # # It is possible to configure the compiler and prelude to support 31-bit # integers, suitable for a back-end and RTS using a tag bit on a 32-bit # architecture. Currently the only useful output from this option is external Core # files. The following additions to your build.mk will produce the # 31-bit core output. Note that this is *not* just a library "way"; the # compiler must be built a special way too. # GhcCppOpts +=-DWORD_SIZE_IN_BITS=31 # GhcLibHcOpts +=-fext-core -fno-code -DWORD_SIZE_IN_BITS=31 # GhcLibCppOpts += -DWORD_SIZE_IN_BITS=31 # SplitObjs=NO ################################################################################ # # Library configure arguments # ################################################################################ CONFIGURE_ARGS = @CONFIGURE_ARGS@