# -*-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 # TOP: the top of the fptools hierarchy, absolute path. # On Windows this is a c:/foo/bar style path. TOP = @hardtop@ include $(TOP)/mk/project.mk ################################################################################ # # Global configuration options # ################################################################################ # 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= # Should we build latex docs? LATEX_DOCS = NO # Mac OS X deployment target (to cross-compile for older OS versions) # MACOSX_DEPLOYMENT_VERSION = @MACOSX_DEPLOYMENT_VERSION@ MACOSX_DEPLOYMENT_SDK = @MACOSX_DEPLOYMENT_SDK@ ifneq "$(MACOSX_DEPLOYMENT_VERSION)" "" MACOSX_DEPLOYMENT_CC_OPTS = -mmacosx-version-min=$(MACOSX_DEPLOYMENT_VERSION) \ -isysroot $(MACOSX_DEPLOYMENT_SDK) \ --no-builtin-fprintf MACOSX_DEPLOYMENT_LD_OPTS = -mmacosx-version-min=$(MACOSX_DEPLOYMENT_VERSION) \ -Wl,-syslibroot,$(MACOSX_DEPLOYMENT_SDK) # We don't extend SRC_CC_OPTS and friends here directly, as (a) they may get # overwritten in build.mk and (b) we must not use the deployment options in # stage 1 or we get a linker error if the bootstrap compiler is for a more # recent OS version. # # We need --no-builtin-fprintf, as the use of the builtin function optimisation # for fprintf together with #include "PosixSource" in the RTS leads to the # use of fwrite$UNIX2003 (with GCC 4.0.1 on Mac OS X 10.5.2). endif ################################################################################ # # 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=-O2 GhcStage3HcOpts=-O2 GhcProfiled=NO GhcDebugged=NO GhcLibProfiled=$(if $(filter p,$(GhcLibWays)),YES,NO) # Build shared and/or static libs? BuildSharedLibs=@BuildSharedLibs@ # ToDo later: # BuildStaticLibs=@BuildStaticLibs@ # 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 # AIX is not supported ArchSupportsNCG=$(strip $(patsubst $(HostArch_CPP), YES, $(findstring $(HostArch_CPP), i386 x86_64 powerpc sparc))) 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)) 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 #------------------------------------------------------------------------------ # Options for Libraries # Which directory (in libraries/) contains the integer library? INTEGER_LIBRARY=integer-gmp # We build the libraries at least the "vanilla" way (way "v") GhcLibWays = v # In addition to the normal sequential way, the default is to also build # profiled prelude libraries unless we are booting from .hc files ifneq "$(BootingFromHc)" "YES" GhcLibWays += p endif ifeq "$(BuildSharedLibs)" "YES" GhcLibWays += dyn 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 # thr_debug : debugging threaded # thr_debug_p : debugging threaded profiled # t : ticky-ticky profiling # debug_t : debugging ticky-ticky profiling # l : event logging # thr_l : threaded and event logging # thr_debug_l : threaded and debugging and event logging # GhcRTSWays=l # Usually want the debug version ifeq "$(BootingFromHc)" "NO" GhcRTSWays += debug endif ifeq "$(BuildSharedLibs)" "YES" GhcRTSWays += dyn debug_dyn thr_dyn thr_debug_dyn 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_debug thr_l,) GhcRTSWays += $(if $(findstring p, $(GhcLibWays)),$(if $(findstring NO, $(GhcUnregisterised)),thr_p,),) # 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(2) is pretty desirable, otherwise no inlining of prelude # things (incl "+") happens when compiling with this compiler # # -XGenerics 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=-O2 -XGenerics # 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. PackageSourceURL = http://darcs.haskell.org/packages/$(PACKAGE)/%{FILE} # ---------------------------------------------------------------------------- # 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 ArchSupportsSplitObjs=$(strip $(if $(filter $(TargetArch_CPP),i386 x86_64 powerpc sparc),YES,NO)) # lazy test, so that $(GhcUnregisterised) can be set in build.mk SupportsSplitObjs=$(strip $(if $(filter YES,$(ArchSupportsSplitObjs)),\ $(if $(filter NO,$(BootingFromHc)),\ $(if $(filter NO,$(GhcUnregisterised)),\ YES,\ NO),\ NO),\ NO)) # By default, enable SplitObjs for the libraries if this build supports it SplitObjs=$(SupportsSplitObjs) # Math library LIBM=@LIBM@ # .NET interop support? # DotnetSupport=NO # 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 PapiLibDir= PapiIncludeDir= ################################################################################ # # 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 BIN_DIST_TOPDIR_ABS=$(TOP) BIN_DIST_DIR=$(BIN_DIST_TOPDIR_ABS)/$(BIN_DIST_NAME) BIN_DIST_NAME=ghc-$(ProjectVersion) BIN_DIST_TAR=$(TOP)/$(BIN_DIST_NAME)-$(TARGETPLATFORM).tar BIN_DIST_TAR_BZ2=$(BIN_DIST_TAR).bz2 BIN_DIST_PREP_DIR=$(TOP)/bindist-prep BIN_DIST_PREP=$(BIN_DIST_PREP_DIR)/$(BIN_DIST_NAME) BIN_DIST_LIST=$(TOP)/bindist-list # 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@ dynlibdir := @libdir@ ifeq "$(RelocatableBuild)" "YES" # Hack: our directory layouts tend to be different on Windows, so # hack around configure's bogus assumptions here. datarootdir := $(prefix) datadir := $(prefix)/lib libdir := $(prefix)/lib docdir := $(prefix)/doc htmldir := $(docdir) dvidir := $(docdir) pdfdir := $(docdir) psdir := $(docdir) else # Unix: override libdir and datadir to put ghc-specific stuff in # a subdirectory with the version number included. # # datadir is set to libdir here as GHC needs package.conf and unlit # to be in the same place (and things like ghc-pkg need to agree on # where package.conf is, so we just set it globally). # datarootdir := $(datadir0) libdir := $(libdir0)/ghc-$(ProjectVersion) datadir := $(libdir) # 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) endif # Windows headerdir := $(libdir)/include # 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) #----------------------------------------------------------------------------- # 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) # # runhaskell and hsc2hs are special, in that other compilers besides # GHC might provide them. Systems with a package manager often come # with tools to manage this kind of clash, e.g. RPM's # update-alternatives. When building a distribution for such a system, # we recommend setting both of the following to 'YES'. # # NO_INSTALL_RUNHASKELL = YES # NO_INSTALL_HSC2HS = YES # # NB. we use negative tests here because for binary-distributions we cannot # test build-time variables at install-time, so they must default to on. # ----------------------------------------------------------------------------- # 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 += -H32m -O # These flags make flex 8-bit SRC_FLEX_OPTS += -8 # Default fptools options for dllwrap. SRC_BLD_DLL_OPTS += --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) # indicates a directory relative to the top of the source tree. GHC_UTILS_DIR = utils GHC_INCLUDE_DIR = includes GHC_COMPILER_DIR = compiler GHC_PROG_DIR = ghc GHC_RTS_DIR = rts GHC_DRIVER_DIR = driver GHC_COMPAT_DIR = compat GHC_MKDEPENDC_DIR = $(GHC_UTILS_DIR)/mkdependC GHC_LTX_DIR = $(GHC_UTILS_DIR)/ltx GHC_RUNTEST_DIR = $(GHC_UTILS_DIR)/runstdtest GHC_LNDIR_DIR = $(GHC_UTILS_DIR)/lndir GHC_MKDIRHIER_DIR = $(GHC_UTILS_DIR)/mkdirhier GHC_DOCBOOK_DIR = $(GHC_UTILS_DIR)/docbook GHC_UNLIT_DIR = $(GHC_UTILS_DIR)/unlit GHC_HP2PS_DIR = $(GHC_UTILS_DIR)/hp2ps GHC_HSTAGS_DIR = $(GHC_UTILS_DIR)/hasktags GHC_GHCTAGS_DIR = $(GHC_UTILS_DIR)/ghctags GHC_HSC2HS_DIR = $(GHC_UTILS_DIR)/hsc2hs GHC_TOUCHY_DIR = $(GHC_UTILS_DIR)/touchy GHC_PKG_DIR = $(GHC_UTILS_DIR)/ghc-pkg GHC_GENPRIMOP_DIR = $(GHC_UTILS_DIR)/genprimopcode GHC_GENAPPLY_DIR = $(GHC_UTILS_DIR)/genapply GHC_CABAL_DIR = $(GHC_UTILS_DIR)/ghc-cabal GHC_MANGLER_DIR = $(GHC_DRIVER_DIR)/mangler GHC_SPLIT_DIR = $(GHC_DRIVER_DIR)/split GHC_SYSMAN_DIR = $(GHC_RTS_DIR)/parallel # ----------------------------------------------------------------------------- # 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$(exeext) GHC_HSTAGS_PGM = hasktags$(exeext) GHC_GHCTAGS_PGM = ghctags$(exeext) GHC_HSC2HS_PGM = hsc2hs$(exeext) GHC_TOUCHY_PGM = touchy$(exeext) GHC_MANGLER_PGM = ghc-asm GHC_SPLIT_PGM = ghc-split GHC_SYSMAN_PGM = SysMan GHC_GENPRIMOP_PGM = genprimopcode$(exeext) GHC_GENAPPLY_PGM = genapply$(exeext) GHC_CABAL_PGM = ghc-cabal$(exeext) GHC_PKG_PGM = ghc-pkg$(exeext) GHC_MKDEPENDC_PGM = mkdependC GHC_LTX_PGM = ltx$(exeext) GHC_MKDIRHIER_PGM = mkdirhier GHC_LNDIR_PGM = lndir GHC_RUNTEST_PGM = runstdtest GHC_DUMMY_GHC_PGM = dummy-ghc$(exeext) ifeq "$(TARGETPLATFORM)" "i386-unknown-mingw32" GHC_CP = "xcopy /y" GHC_PERL = perl else GHC_CP = $(CP) GHC_PERL = $(PERL) endif HP2PS = $(GHC_HP2PS_DIR)/$(GHC_HP2PS_PGM) HSTAGS = $(GHC_HSTAGS_DIR)/$(GHC_HSTAGS_PGM) MANGLER = $(INPLACE_LIB)/$(GHC_MANGLER_PGM) SPLIT = $(INPLACE_LIB)/$(GHC_SPLIT_PGM) SYSMAN = $(GHC_SYSMAN_DIR)/$(GHC_SYSMAN_PGM) LTX = $(GHC_LTX_DIR)/$(GHC_LTX_PGM) LNDIR = $(GHC_LNDIR_DIR)/$(GHC_LNDIR_PGM) RUNTEST = $(GHC_RUNTEST_DIR)/$(GHC_RUNTEST_PGM) INPLACE = inplace INPLACE_BIN = $(INPLACE)/bin INPLACE_LIB = $(INPLACE)/lib INPLACE_MINGW = $(INPLACE)/mingw UNLIT = $(INPLACE_LIB)/$(GHC_UNLIT_PGM) TOUCHY = $(INPLACE_LIB)/$(GHC_TOUCHY_PGM) MKDIRHIER = $(INPLACE_BIN)/$(GHC_MKDIRHIER_PGM) MKDEPENDC = $(INPLACE_BIN)/$(GHC_MKDEPENDC_PGM) GHC_CABAL_INPLACE = $(INPLACE_BIN)/$(GHC_CABAL_PGM) GENAPPLY_INPLACE = $(INPLACE_BIN)/$(GHC_GENAPPLY_PGM) GHC_PKG_INPLACE = $(INPLACE_BIN)/$(GHC_PKG_PGM) GHCTAGS_INPLACE = $(INPLACE_BIN)/$(GHC_GHCTAGS_PGM) HSC2HS_INPLACE = $(INPLACE_BIN)/$(GHC_HSC2HS_PGM) GENPRIMOP_INPLACE = $(INPLACE_BIN)/$(GHC_GENPRIMOP_PGM) DUMMY_GHC_INPLACE = $(INPLACE_BIN)/$(GHC_DUMMY_GHC_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@ # If we have a make dependency on c:/ghc/ghc, and the file is actually # called c:/ghc/ghc.exe, then make will think that ghc doesn't exist # and that it doesn't know how to create it. ifneq "$(wildcard $(GHC).exe)" "" GHC := $(GHC).exe endif GhcDir = $(dir $(GHC)) # Set to YES if $(GHC) has the editline package installed GhcHasEditline = @GhcHasEditline@ 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_STAGE1) GHC_STAGE0_ABS = $(GHC) GHC_STAGE1_ABS = $(TOP)/$(INPLACE_BIN)/ghc-stage1$(exeext) GHC_STAGE2_ABS = $(TOP)/$(INPLACE_BIN)/ghc-stage2$(exeext) GHC_STAGE3_ABS = $(TOP)/$(INPLACE_BIN)/ghc-stage3$(exeext) GHC_STAGE0 = $(GHC) GHC_STAGE1 = $(INPLACE_BIN)/ghc-stage1$(exeext) GHC_STAGE2 = $(INPLACE_BIN)/ghc-stage2$(exeext) GHC_STAGE3 = $(INPLACE_BIN)/ghc-stage3$(exeext) # Install stage 2 by default, can be changed to 3 INSTALL_GHC_STAGE=2 BOOTSTRAPPING_CONF = libraries/bootstrapping.conf INPLACE_PACKAGE_CONF = $(INPLACE_LIB)/package.conf GhcVersion = @GhcVersion@ GhcPatchLevel = @GhcPatchLevel@ GhcMajVersion = @GhcMajVersion@ GhcMinVersion = @GhcMinVersion@ ghc_ge_607 = @ghc_ge_607@ ghc_ge_609 = @ghc_ge_609@ # 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) endif endif # default C compiler flags SRC_CC_OPTS = @SRC_CC_OPTS@ ifeq "$(TARGETPLATFORM)" "ia64-unknown-linux" SRC_CC_OPTS += -G0 endif SRC_HSC2HS_OPTS += $(addprefix --cflag=,$(filter-out -O,$(SRC_CC_OPTS))) SRC_HSC2HS_OPTS += $(foreach d,$(GMP_INCLUDE_DIRS),-I$(d)) #----------------------------------------------------------------------------- # 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,$(TOP)/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 PATCH = @PatchCmd@ TAR = @TarCmd@ ZIP = zip HSCOLOUR = @HSCOLOUR@ # # 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 # # 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 # SRC_HAPPY_OPTS = -agc --strict # 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 # SRC_ALEX_OPTS = -g # Should we build haddock docs? HADDOCK_DOCS = YES # And HsColour the sources? ifeq "$(HSCOLOUR)" "" HSCOLOUR_SRCS = NO else HSCOLOUR_SRCS = YES endif # # 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=v p t l s mp mg debug dyn thr thr_l debug_dyn thr_dyn thr_debug_dyn thr_p thr_debug thr_debug_l 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 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 'v': WAY_v_NAME=vanilla WAY_v_HC_OPTS= # 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 'l': WAY_l_NAME=event logging WAY_l_HC_OPTS= -eventlog # 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 'thr_l': WAY_thr_l_NAME=threaded event logging WAY_thr_l_HC_OPTS=-optc-DTHREADED_RTS -eventlog # 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_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 debug profiling WAY_thr_debug_p_HC_OPTS=-optc-DTHREADED_RTS -optc-DDEBUG -prof # Way 'thr_debug_l': WAY_thr_debug_l_NAME=threaded debug event logging WAY_thr_debug_l_HC_OPTS=-optc-DTHREADED_RTS -optc-DDEBUG -eventlog # 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@ ################################################################################ # # Bindist testing directory # ################################################################################ ifeq "$(Windows)" "YES" BIN_DIST_INST_SUBDIR = "install dir" else # I very much doubt that paths with spaces will work on Unix BIN_DIST_INST_SUBDIR = installed endif BIN_DIST_INST_DIR = $(TOP)/bindisttest/$(BIN_DIST_INST_SUBDIR)