Revert "disable shared libs on sparc (linux/solaris) (fixes #8857)"
[ghc.git] / mk / config.mk.in
index 16faa95..392237f 100644 (file)
@@ -88,21 +88,23 @@ GhcDynamic=NO
 # GhcProfiled=YES means compile a profiled stage-2 compiler
 GhcProfiled=NO
 
-# Do we support shared libs?
-SharedLibsPlatformList =                        \
-    i386-unknown-linux   x86_64-unknown-linux   \
-    i386-unknown-freebsd x86_64-unknown-freebsd \
-    i386-unknown-openbsd x86_64-unknown-openbsd \
-    i386-unknown-netbsd  x86_64-unknown-netbsd  \
-    i386-unknown-mingw32 x86_64-unknown-mingw32 \
-    i386-apple-darwin    x86_64-apple-darwin    powerpc-apple-darwin
-
-ifeq "$(SOLARIS_BROKEN_SHLD)" "NO"
-SharedLibsPlatformList += i386-unknown-solaris2
+ifeq "$(findstring $(TargetOS_CPP),linux freebsd dragonfly openbsd netbsd solaris2 kfreebsdgnu haiku linux-android)" ""
+TargetElf = NO
+else
+TargetElf = YES
+endif
+
+# Some platforms don't support shared libraries
+NoSharedLibsPlatformList = powerpc-unknown-linux \
+       x86_64-unknown-mingw32 \
+       i386-unknown-mingw32
+
+ifeq "$(SOLARIS_BROKEN_SHLD)" "YES"
+NoSharedLibsPlatformList += i386-unknown-solaris2
 endif
 
 PlatformSupportsSharedLibs = $(if $(filter $(TARGETPLATFORM),\
-       $(SharedLibsPlatformList)),YES,NO)
+    $(NoSharedLibsPlatformList)),NO,YES)
 
 # DYNAMIC_BY_DEFAULT says whether this compiler will default to
 # building dynamic executables, i.e. -dynamic is on.  We do this for
@@ -124,8 +126,22 @@ endif
 # cabal-install's that are in the wild don't handle it properly.
 DYNAMIC_BY_DEFAULT = NO
 
-# For now, we unconditionally disable building with -dynamic-too
-DYNAMIC_TOO = NO
+# If building both v and dyn ways, then use -dynamic-too to build them.
+# This makes the build faster.
+DYNAMIC_TOO = YES
+
+# Use the dynamic way when building programs in the GHC tree. In
+# particular, this means that GHCi will use DLLs rather than loading
+# object files directly.
+ifeq "$(TargetOS_CPP)" "mingw32"
+# This doesn't work on Windows yet
+DYNAMIC_GHC_PROGRAMS = NO
+DYNAMIC_TOO=NO
+else ifeq "$(PlatformSupportsSharedLibs)" "NO"
+DYNAMIC_GHC_PROGRAMS = NO
+else
+DYNAMIC_GHC_PROGRAMS = YES
+endif
 
 # Build a compiler that will build *unregisterised* libraries and
 # binaries by default.  Unregisterised code is supposed to compile and
@@ -144,9 +160,9 @@ GhcUnregisterised=@Unregisterised@
 #
 # Target platforms supported:
 #   i386, powerpc
-#   AIX is not supported 
+#   IOS and AIX are not supported
 ArchSupportsNCG=$(strip $(patsubst $(TargetArch_CPP), YES, $(findstring $(TargetArch_CPP), i386 x86_64 powerpc sparc)))
-OsSupportsNCG=$(strip $(patsubst $(TargetOS_CPP), YES, $(patsubst aix,,$(TargetOS_CPP))))
+OsSupportsNCG=$(strip $(patsubst $(TargetOS_CPP), YES, $(patsubst ios,,$(patsubst aix,,$(TargetOS_CPP)))))
 
 GhcWithNativeCodeGen := $(strip\
     $(if $(filter YESYESNO,\
@@ -168,8 +184,8 @@ ArchSupportsGHCi=$(strip $(patsubst $(TargetArch_CPP), YES, $(findstring $(Targe
 
 ifeq "$(OsSupportsGHCi)$(ArchSupportsGHCi)" "YESYES"
 GhcWithInterpreter=YES
-else 
-GhcWithInterpreter=$(if $(findstring YES,$(DYNAMIC_BY_DEFAULT)),YES,NO)
+else
+GhcWithInterpreter=$(if $(findstring YES,$(DYNAMIC_GHC_PROGRAMS)),YES,NO)
 endif
 
 # GhcEnableTablesNextToCode tells us whether the target architecture
@@ -210,12 +226,6 @@ BeConservative = NO
 
 ExtraMakefileSanityChecks = NO
 
-#
-# Building various ways?
-# (right now, empty if not).
-BuildingParallel=$(subst mp,YES,$(filter mp,$(WAYS)))
-BuildingGranSim=$(subst mg,YES,$(filter mg,$(WAYS)))
-
 #------------------------------------------------------------------------------
 # Options for Libraries
 
@@ -226,10 +236,8 @@ INTEGER_LIBRARY=integer-gmp
 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"
+# profiled prelude libraries
 GhcLibWays += p
-endif
 
 ifeq "$(PlatformSupportsSharedLibs)" "YES"
 GhcLibWays += dyn
@@ -240,7 +248,7 @@ BuildSharedLibs=$(strip $(if $(findstring dyn,$(GhcLibWays)),YES,NO))
 
 # 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)
@@ -253,9 +261,7 @@ BuildSharedLibs=$(strip $(if $(findstring dyn,$(GhcLibWays)),YES,NO))
 GhcRTSWays=l
 
 # Usually want the debug version
-ifeq "$(BootingFromHc)" "NO"
-GhcRTSWays += debug 
-endif
+GhcRTSWays += debug
 
 # We always have the threaded versions, but note that SMP support may be disabled
 # (see GhcWithSMP).
@@ -281,10 +287,6 @@ GhcLibHcOpts=-O2
 #
 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
 #
@@ -302,7 +304,6 @@ SupportsSplitObjs := $(strip \
                     $(if $(and $(filter YES,$(ArchSupportsSplitObjs)),\
                                $(filter YES,$(OsSupportsSplitObjs)),\
                                $(filter NO,$(SplitObjsBroken)),\
-                               $(filter NO,$(BootingFromHc)),\
                                $(filter NO,$(GhcUnregisterised))),\
                           YES,NO))
 
@@ -385,15 +386,11 @@ endif
 BIN_DIST_NAME         = ghc-$(ProjectVersion)
 BIN_DIST_PREP_DIR     = bindistprep/$(BIN_DIST_NAME)
 BIN_DIST_PREP_TAR     = bindistprep/$(BIN_DIST_NAME)-$(TARGETPLATFORM).tar
-BIN_DIST_PREP_TAR_BZ2 = $(BIN_DIST_PREP_TAR).bz2
-BIN_DIST_TAR_BZ2      = $(BIN_DIST_NAME)-$(TARGETPLATFORM).tar.bz2
-BIN_DIST_LIST         = bindist-list
-
-WINDOWS_INSTALLER_BASE = ghc-$(ProjectVersion)-$(TargetArch_CPP)-windows
-WINDOWS_INSTALLER = $(WINDOWS_INSTALLER_BASE)$(exeext)
+BIN_DIST_PREP_TAR_COMP = $(BIN_DIST_PREP_TAR).$(TAR_COMP_EXT)
+BIN_DIST_TAR_COMP     = $(BIN_DIST_NAME)-$(TARGETPLATFORM).tar.$(TAR_COMP_EXT)
 
 # -----------------------------------------------------------------------------
-# Utilities programs: flags 
+# 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
@@ -401,7 +398,7 @@ WINDOWS_INSTALLER = $(WINDOWS_INSTALLER_BASE)$(exeext)
 #      SRC_P_OPTS += ...
 #
 # where P is the utility. For example, to add -O to all Haskell
-# compilations, 
+# compilations,
 #
 #      SRC_HC_OPTS += -O
 
@@ -409,7 +406,7 @@ WINDOWS_INSTALLER = $(WINDOWS_INSTALLER_BASE)$(exeext)
 # SRC_HC_OPTS includes flags to be added to *every* Haskell
 # compilation.  Setting SRC_HC_OPTS is a good way to set the default
 # optimisation level (-O) and heap size (-H<size>).
-# 
+#
 # SRC_HC_OPTS is *not* for adding flags that are required to make your
 # build work.  Examples:
 #
@@ -424,15 +421,18 @@ WINDOWS_INSTALLER = $(WINDOWS_INSTALLER_BASE)$(exeext)
 #
 SRC_HC_OPTS += -H32m -O
 
-# These flags make flex 8-bit
-SRC_FLEX_OPTS  += -8
-
+# Disable -O2 optimization. Otherwise amount of generated C code
+# makes things very slow to compile (~5 minutes on core-i7 for 'compiler/hsSyn/HsExpr.lhs')
+# and sometimes not compile at all (powerpc64 overflows something
+# on 'compiler/hsSyn/HsExpr.lhs').
+ifeq "$(GhcUnregisterised)" "YES"
+GhcStage1HcOpts=
+GhcStage2HcOpts=
+GhcStage3HcOpts=
+endif
 
 # -----------------------------------------------------------------------------
 # 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
 
 MKDIRHIER           = $(INPLACE_BIN)/mkdirhier
 
@@ -455,16 +455,10 @@ ifneq "$(wildcard $(GHC).exe)" ""
 GHC := $(GHC).exe
 endif
 
-# 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  = $(GHC)
-GHC_STAGE1  = $(INPLACE_BIN)/ghc-stage1$(exeext)
-GHC_STAGE2  = $(INPLACE_BIN)/ghc-stage2$(exeext)
-GHC_STAGE3  = $(INPLACE_BIN)/ghc-stage3$(exeext)
+GHC_STAGE1  = $(ghc-stage1_INPLACE)
+GHC_STAGE2  = $(ghc-stage2_INPLACE)
+GHC_STAGE3  = $(ghc-stage3_INPLACE)
 
 BOOTSTRAPPING_CONF = libraries/bootstrapping.conf
 
@@ -486,6 +480,10 @@ endif
 
 GHC_PACKAGE_DB_FLAG = @GHC_PACKAGE_DB_FLAG@
 
+CMM_SINK_BOOTSTRAP_IS_NEEDED = @CMM_SINK_BOOTSTRAP_IS_NEEDED@
+
+SUPPORTS_PACKAGE_KEY = @SUPPORTS_PACKAGE_KEY@
+
 #-----------------------------------------------------------------------------
 # C compiler
 #
@@ -505,6 +503,7 @@ endif
 TargetPlatformFull    = @TargetPlatformFull@
 GccLT34         = @GccLT34@
 GccLT46         = @GccLT46@
+GccIsClang      = @GccIsClang@
 
 CC              = $(WhatGccIsCalled)
 CC_STAGE0       = @CC_STAGE0@
@@ -578,6 +577,9 @@ ifeq "$(CrossCompiling)" "YES"
 SRC_HSC2HS_OPTS_STAGE1 += --cross-compile
 SRC_HSC2HS_OPTS_STAGE2 += --cross-compile
 endif
+SRC_HSC2HS_OPTS_STAGE0 += --cflag=-D$(HostArch_CPP)_HOST_ARCH=1 --cflag=-D$(HostOS_CPP)_HOST_OS=1
+SRC_HSC2HS_OPTS_STAGE1 += --cflag=-D$(TargetArch_CPP)_HOST_ARCH=1 --cflag=-D$(TargetOS_CPP)_HOST_OS=1
+SRC_HSC2HS_OPTS_STAGE2 += --cflag=-D$(TargetArch_CPP)_HOST_ARCH=1 --cflag=-D$(TargetOS_CPP)_HOST_OS=1
 
 ifeq "$(TARGETPLATFORM)" "i386-unknown-mingw32"
 WINDRES = $(INPLACE_MINGW)/bin/windres
@@ -596,14 +598,6 @@ DLLTOOL                    = inplace/mingw/bin/dlltool.exe
 endif
 
 #-----------------------------------------------------------------------------
-# 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@
@@ -632,19 +626,23 @@ CP                        = cp
 # It's not easy to separate the CPP program from its flags, as
 # AC_PROG_CPP defines CPP as "/usr/bin/gcc -E"
 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.
 #
+# Clang in particular is a bit more annoying, so we suppress some warnings.
 RAWCPP_FLAGS            = -undef -traditional
+ifeq "$(CC_CLANG_BACKEND)" "1"
+RAWCPP_FLAGS           += -Wno-invalid-pp-token -Wno-unicode -Wno-trigraphs
+endif
+
 FIND                   = @FindCmd@
 
 #
 # 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                        = @INSTALL@
 INSTALL                        := $(subst .././install-sh,$(TOP)/install-sh,$(INSTALL))
 
@@ -652,9 +650,10 @@ LN_S                       = @LN_S@
 MV                     = mv
 PERL                   = @PerlCmd@
 PIC                    = pic
-RANLIB                 = @RANLIB@
+RANLIB_CMD = @RANLIB_CMD@
+REAL_RANLIB_CMD = @REAL_RANLIB_CMD@
 SED                    = @SedCmd@
-SHELL                  = /bin/sh
+SHELL                  = @SHELL@
 
 HaveDtrace             = @HaveDtrace@
 USE_DTRACE = $(HaveDtrace)
@@ -662,6 +661,7 @@ DTRACE                      = @DtraceCmd@
 
 LD = @LdCmd@
 NM = @NmCmd@
+AR = @ArCmd@
 OBJDUMP = @ObjdumpCmd@
 
 LLC = @LlcCmd@
@@ -679,7 +679,7 @@ LdHasBuildId                = @LdHasBuildId@
 # and compiler/main/DriverPipeline.hs.
 LdHasNoCompactUnwind   = @LdHasNoCompactUnwind@
 
-# On MSYS, building with SplitObjs=YES fails with 
+# On MSYS, building with SplitObjs=YES fails with
 #   ar: Bad file number
 # see #3201.  We need to specify a smaller max command-line size
 # to work around it.  32767 doesn't work; 30000 does, but says
@@ -699,6 +699,24 @@ PATCH_CMD      = @PatchCmd@
 TAR_CMD        = @TarCmd@
 BZIP2_CMD      = bzip2
 GZIP_CMD       = gzip
+XZ_CMD         = xz -9e
+
+# bzip2 is default compression
+TAR_COMP      = bzip2
+
+# select compression command and .tar extension based on TAR_COMP value
+ifeq "$(TAR_COMP)" "bzip2"
+TAR_COMP_CMD  = $(BZIP2_CMD)
+TAR_COMP_EXT  = bz2
+else ifeq "$(TAR_COMP)" "gzip"
+TAR_COMP_CMD  = $(GZIP_CMD)
+TAR_COMP_EXT  = gz
+else ifeq "$(TAR_COMP)" "xz"
+TAR_COMP_CMD  = $(XZ_CMD)
+TAR_COMP_EXT  = xz
+else
+$(error $$(TAR_COMP) set to unknown value "$(TAR_COMP)" (supported: "bzip2", "gzip", "xz"))
+endif
 
 ifeq "$(Windows_Host)" "YES"
 TOUCH_CMD      = $(utils/touchy_dist_INPLACE)
@@ -712,10 +730,6 @@ HSCOLOUR_CMD   = @HSCOLOUR@
 
 TIME_CMD       = @TimeCmd@
 
-# Set this if you want to use Inno Setup to build a Windows installer
-# when you make a bindist
-ISCC_CMD       =
-
 #-----------------------------------------------------------------------------
 # DocBook XML stuff
 
@@ -745,7 +759,7 @@ GHC_PKG                     = @GhcPkgCmd@
 # Happy
 #
 HAPPY                  = @HappyCmd@
-HAPPY_VERSION          = @HappyVersion@                
+HAPPY_VERSION          = @HappyVersion@
 #
 # Options to pass to Happy when we're going to compile the output with GHC
 #
@@ -755,17 +769,16 @@ SRC_HAPPY_OPTS            = -agc --strict
 # Alex
 #
 ALEX                   = @AlexCmd@
-ALEX_VERSION           = @AlexVersion@         
+ALEX_VERSION           = @AlexVersion@
 Alex3                  = @Alex3@
 #
-# Options to pass to Happy when we're going to compile the output with GHC
+# Options to pass to Alex when we're going to compile the output with GHC
 #
+SRC_ALEX_OPTS = -g
 ifeq "$(Alex3)" "YES"
-# We aren't using the Unicode support in Alex 3.0 yet, in fact we do our own
+# The compiler isn't using the Unicode support in Alex 3.0 yet, in fact we do our own
 # Unicode handling, so diable Alex's.
-SRC_ALEX_OPTS          = -g --latin1
-else
-SRC_ALEX_OPTS          = -g
+compiler_ALEX_OPTS = --latin1
 endif
 
 # Should we build haddock docs?
@@ -777,24 +790,8 @@ else
 HSCOLOUR_SRCS = YES
 endif
 
-################################################################################
-#
-#              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
+# Build DPH?
+BUILD_DPH = NO
 
 ################################################################################
 #