mk/config.mk.in: enable SMP on ARMv7+ (Trac #12981)
[ghc.git] / mk / config.mk.in
index 4331b36..06c12bf 100644 (file)
@@ -108,6 +108,7 @@ endif
 
 # Some platforms don't support shared libraries
 NoSharedLibsPlatformList = \
+       powerpc-ibm-aix \
        x86_64-unknown-mingw32 \
        i386-unknown-mingw32
 
@@ -172,9 +173,9 @@ GhcUnregisterised=@Unregisterised@
 #
 # Target platforms supported:
 #   i386, powerpc, powerpc64, sparc
-#   IOS and AIX are not supported
+#   IOS is not supported
 ArchSupportsNCG=$(strip $(patsubst $(TargetArch_CPP), YES, $(findstring $(TargetArch_CPP), i386 x86_64 powerpc powerpc64 powerpc64le sparc)))
-OsSupportsNCG=$(strip $(patsubst $(TargetOS_CPP), YES, $(patsubst ios,,$(patsubst aix,,$(TargetOS_CPP)))))
+OsSupportsNCG=$(strip $(patsubst $(TargetOS_CPP), YES, $(patsubst ios,,$(TargetOS_CPP))))
 
 GhcWithNativeCodeGen := $(strip\
     $(if $(filter YESYESNO,\
@@ -184,8 +185,15 @@ HaveLibDL = @HaveLibDL@
 
 # ArchSupportsSMP should be set iff there is support for that arch in
 # includes/stg/SMP.h
-ArchSupportsSMP=$(strip $(patsubst $(TargetArch_CPP), YES, $(findstring $(TargetArch_CPP), i386 x86_64 sparc powerpc powerpc64 powerpc64le arm aarch64)))
+ifeq "$(TargetArch_CPP)" "arm"
+# We don't support load/store barriers pre-ARMv7. See #10433.
+ArchSupportsSMP=$(if $(filter $(ARM_ISA),ARMv5 ARMv6),NO,YES)
+else
+ArchSupportsSMP=$(strip $(patsubst $(TargetArch_CPP), YES, $(findstring $(TargetArch_CPP), i386 x86_64 sparc powerpc powerpc64 powerpc64le aarch64)))
+endif
 
+# The THREADED_RTS requites `BaseReg` to be in a register and the
+# `GhcUnregisterised` mode doesn't allow that.
 GhcWithSMP := $(strip $(if $(filter YESNO, $(ArchSupportsSMP)$(GhcUnregisterised)),YES,NO))
 
 # Whether to include GHCi in the compiler.  Depends on whether the RTS linker
@@ -266,14 +274,21 @@ 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)
-#   debug_p     : debugging profiled
-#   thr_debug   : debugging threaded
-#   thr_debug_p : debugging threaded profiled
-#   l           : event logging
-#   thr_l       : threaded and event logging
+#   thr           : threaded
+#   thr_p         : threaded + profiled + eventlog
+#   debug         : debugging + eventlog
+#   thr_debug     : debugging + threaded, + eventlog
+#   l             : eventlog
+#   p             : profiled + eventlog
+#   thr_l         : threaded + eventlog
+#
+# Note how there are a few cases which are handled specially (in packageHsLibs)
+# to reduce the number of distinct ways,
+#
+#   debug     implies  eventlog
+#   profiled  implies  eventlog
+#
+# This means, for instance, that there is no debug_l way.
 #
 GhcRTSWays=l
 
@@ -373,7 +388,7 @@ FFIIncludeDir=@FFIIncludeDir@
 
 # GHC needs arch-specific tweak at least in
 #     rts/Libdw.c:set_initial_registers()
-GhcRtsWithLibdw=$(strip $(if $(filter $(TargetArch_CPP),i386 x86_64),@HaveLibdw@,NO))
+GhcRtsWithLibdw=$(strip $(if $(filter $(TargetArch_CPP),i386 x86_64),@UseLibdw@,NO))
 
 ################################################################################
 #
@@ -381,21 +396,6 @@ GhcRtsWithLibdw=$(strip $(if $(filter $(TargetArch_CPP),i386 x86_64),@HaveLibdw@
 #
 ################################################################################
 
-# 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-mingw32"
-DEFAULT_TMPDIR         = /C/TEMP
-endif
-
 BIN_DIST_NAME         = ghc-$(ProjectVersion)
 BIN_DIST_PREP_DIR     = bindistprep/$(BIN_DIST_NAME)
 BIN_DIST_PREP_TAR     = bindistprep/$(BIN_DIST_NAME)-$(TARGETPLATFORM).tar
@@ -440,7 +440,7 @@ SRC_HC_OPTS_STAGE0 =
 SRC_HC_OPTS_STAGE1 =
 SRC_HC_OPTS_STAGE2 =
 
-# Warning supression flags. See mk/warnings.mk.
+# Warning suppression flags. See mk/warnings.mk.
 SRC_CC_WARNING_OPTS =
 SRC_HC_WARNING_OPTS =
 
@@ -498,16 +498,15 @@ endif
 
 GHC_PACKAGE_DB_FLAG = @GHC_PACKAGE_DB_FLAG@
 
-CMM_SINK_BOOTSTRAP_IS_NEEDED = @CMM_SINK_BOOTSTRAP_IS_NEEDED@
+SUPPORTS_THIS_UNIT_ID = @SUPPORTS_THIS_UNIT_ID@
 
 #-----------------------------------------------------------------------------
 # C compiler
 #
-# NB. Don't override $(WhatGccIsCalled) using build.mk,  re-configure using
-# the flag --with-gcc=<blah> instead.  The reason is that the configure script
+# NB. Don't override $(CC) using build.mk,  re-configure using
+# the flag CC=<blah> instead.  The reason is that the configure script
 # needs to know which gcc you're using in order to perform its tests.
 
-WhatGccIsCalled       = @WhatGccIsCalled@
 GccVersion            = @GccVersion@
 ifeq "$(phase)" "0"
 CrossCompilePrefix    =
@@ -518,24 +517,24 @@ endif
 # the necessary format to pass to libffi's configure.
 TargetPlatformFull    = @TargetPlatformFull@
 GccLT34         = @GccLT34@
+GccLT44         = @GccLT44@
 GccLT46         = @GccLT46@
 GccIsClang      = @GccIsClang@
 
-CC              = $(WhatGccIsCalled)
+CC              = @CC@
 CC_STAGE0       = @CC_STAGE0@
 CC_STAGE1       = $(CC)
 CC_STAGE2       = $(CC)
 CC_STAGE3       = $(CC)
 
-AS              = $(WhatGccIsCalled)
+AS              = @CC@
 AS_STAGE0       = @CC_STAGE0@
 AS_STAGE1       = $(AS)
 AS_STAGE2       = $(AS)
 AS_STAGE3       = $(AS)
 
-# We don't have an LD_STAGE0.  CC_STAGE0 is determined by asking "ghc
-# --info", and it doesn't report an LD.
-LD_STAGE0       = error-no-ld-stage0
+# why no LD=@LD@ ?
+LD_STAGE0       = @LD_STAGE0@
 LD_STAGE1       = $(LD)
 LD_STAGE2       = $(LD)
 LD_STAGE3       = $(LD)
@@ -619,10 +618,9 @@ CONF_LD_LINKER_OPTS_STAGE2 = @CONF_LD_LINKER_OPTS_STAGE2@
 CONF_CPP_OPTS_STAGE0 = @CONF_CPP_OPTS_STAGE0@
 CONF_CPP_OPTS_STAGE1 = @CONF_CPP_OPTS_STAGE1@
 CONF_CPP_OPTS_STAGE2 = @CONF_CPP_OPTS_STAGE2@
-
-ifeq "$(TARGETPLATFORM)" "ia64-unknown-linux"
-CONF_CC_OPTS += -G0
-endif
+CONF_HC_OPTS_STAGE0 = @CONF_HC_OPTS_STAGE0@
+CONF_HC_OPTS_STAGE1 = @CONF_HC_OPTS_STAGE1@
+CONF_HC_OPTS_STAGE2 = @CONF_HC_OPTS_STAGE2@
 
 # The .hsc files aren't currently safe for cross-compilation on Windows:
 #     libraries\haskeline\.\System\Console\Haskeline\Backend\Win32.hsc:160
@@ -771,10 +769,10 @@ PATCH_CMD      = @PatchCmd@
 TAR_CMD        = @TarCmd@
 BZIP2_CMD      = bzip2
 GZIP_CMD       = gzip
-XZ_CMD         = xz -9e
+XZ_CMD         = xz
 
-# bzip2 is default compression
-TAR_COMP      = bzip2
+# xz is default compression
+TAR_COMP      ?= xz
 
 # select compression command and .tar extension based on TAR_COMP value
 ifeq "$(TAR_COMP)" "bzip2"