summaryrefslogtreecommitdiff
path: root/aclocal.m4
diff options
context:
space:
mode:
Diffstat (limited to 'aclocal.m4')
-rw-r--r--aclocal.m4262
1 files changed, 203 insertions, 59 deletions
diff --git a/aclocal.m4 b/aclocal.m4
index a9788bf5fb..e2804cf642 100644
--- a/aclocal.m4
+++ b/aclocal.m4
@@ -109,6 +109,8 @@ AC_DEFUN([FPTOOLS_SET_PLATFORM_VARS],
GHC_CONVERT_OS([$target_os], [$TargetArch], [TargetOS])
fi
+ GHC_LLVM_TARGET([$target_cpu],[$target_vendor],[$target_os],[LlvmTarget])
+
GHC_SELECT_FILE_EXTENSIONS([$host], [exeext_host], [soext_host])
GHC_SELECT_FILE_EXTENSIONS([$target], [exeext_target], [soext_target])
windows=NO
@@ -137,12 +139,12 @@ AC_DEFUN([FPTOOLS_SET_PLATFORM_VARS],
TargetOS_CPP=` echo "$TargetOS" | sed -e 's/\./_/g' -e 's/-/_/g'`
# we intend to pass trough --targets to llvm as is.
- LLVMTarget_CPP=` echo "$target"`
+ LLVMTarget_CPP=` echo "$LlvmTarget"`
echo "GHC build : $BuildPlatform"
echo "GHC host : $HostPlatform"
echo "GHC target : $TargetPlatform"
- echo "LLVM target: $target"
+ echo "LLVM target: $LlvmTarget"
AC_SUBST(BuildPlatform)
AC_SUBST(HostPlatform)
@@ -215,7 +217,7 @@ AC_DEFUN([FPTOOLS_SET_HASKELL_PLATFORM_VARS],
mipsel)
test -z "[$]2" || eval "[$]2=ArchMipsel"
;;
- hppa|hppa1_1|ia64|m68k|rs6000|s390|s390x|sh4|vax)
+ hppa|hppa1_1|ia64|m68k|nios2|riscv32|riscv64|rs6000|s390|s390x|sh4|vax)
test -z "[$]2" || eval "[$]2=ArchUnknown"
;;
*)
@@ -227,7 +229,7 @@ AC_DEFUN([FPTOOLS_SET_HASKELL_PLATFORM_VARS],
checkVendor() {
case [$]1 in
- dec|none|unknown|hp|apple|next|sun|sgi|ibm|montavista|portbld)
+ dec|none|unknown|hp|apple|next|sun|sgi|ibm|montavista|portbld|alpine)
;;
*)
AC_MSG_WARN([Unknown vendor [$]1])
@@ -237,13 +239,10 @@ AC_DEFUN([FPTOOLS_SET_HASKELL_PLATFORM_VARS],
checkOS() {
case [$]1 in
- linux)
+ linux|linux-android)
test -z "[$]2" || eval "[$]2=OSLinux"
;;
- ios)
- test -z "[$]2" || eval "[$]2=OSiOS"
- ;;
- darwin)
+ darwin|ios|watchos|tvos)
test -z "[$]2" || eval "[$]2=OSDarwin"
;;
solaris2)
@@ -273,14 +272,14 @@ AC_DEFUN([FPTOOLS_SET_HASKELL_PLATFORM_VARS],
nto-qnx)
test -z "[$]2" || eval "[$]2=OSQNXNTO"
;;
- dragonfly|hpux|linuxaout|freebsd2|gnu|nextstep2|nextstep3|sunos4|ultrix)
+ dragonfly|hpux|linuxaout|freebsd2|nextstep2|nextstep3|sunos4|ultrix)
test -z "[$]2" || eval "[$]2=OSUnknown"
;;
aix)
test -z "[$]2" || eval "[$]2=OSAIX"
;;
- linux-android)
- test -z "[$]2" || eval "[$]2=OSAndroid"
+ gnu)
+ test -z "[$]2" || eval "[$]2=OSHurd"
;;
*)
echo "Unknown OS '[$]1'"
@@ -471,14 +470,15 @@ AC_DEFUN([FP_SETTINGS],
if test "$windows" = YES -a "$EnableDistroToolchain" = "NO"
then
mingw_bin_prefix=mingw/bin/
- SettingsCCompilerCommand="\$topdir/../${mingw_bin_prefix}gcc.exe"
- SettingsHaskellCPPCommand="\$topdir/../${mingw_bin_prefix}gcc.exe"
+ SettingsCCompilerCommand="\$tooldir/${mingw_bin_prefix}gcc.exe"
+ SettingsHaskellCPPCommand="\$tooldir/${mingw_bin_prefix}gcc.exe"
SettingsHaskellCPPFlags="$HaskellCPPArgs"
- SettingsLdCommand="\$topdir/../${mingw_bin_prefix}ld.exe"
- SettingsArCommand="\$topdir/../${mingw_bin_prefix}ar.exe"
- SettingsPerlCommand='$topdir/../perl/perl.exe'
- SettingsDllWrapCommand="\$topdir/../${mingw_bin_prefix}dllwrap.exe"
- SettingsWindresCommand="\$topdir/../${mingw_bin_prefix}windres.exe"
+ SettingsLdCommand="\$tooldir/${mingw_bin_prefix}ld.exe"
+ SettingsArCommand="\$tooldir/${mingw_bin_prefix}ar.exe"
+ SettingsRanlibCommand="\$tooldir/${mingw_bin_prefix}ranlib.exe"
+ SettingsPerlCommand='$tooldir/perl/perl.exe'
+ SettingsDllWrapCommand="\$tooldir/${mingw_bin_prefix}dllwrap.exe"
+ SettingsWindresCommand="\$tooldir/${mingw_bin_prefix}windres.exe"
SettingsTouchCommand='$topdir/bin/touchy.exe'
elif test "$EnableDistroToolchain" = "YES"
then
@@ -498,6 +498,7 @@ AC_DEFUN([FP_SETTINGS],
SettingsHaskellCPPFlags="$HaskellCPPArgs"
SettingsLdCommand="$LdCmd"
SettingsArCommand="$ArCmd"
+ SettingsRanlibCommand="$RanlibCmd"
SettingsPerlCommand="$PerlCmd"
if test -z "$DllWrapCmd"
then
@@ -519,6 +520,12 @@ AC_DEFUN([FP_SETTINGS],
else
SettingsLibtoolCommand="$LibtoolCmd"
fi
+ if test -z "$ClangCmd"
+ then
+ SettingsClangCommand="clang"
+ else
+ SettingsClangCommand="$ClangCmd"
+ fi
if test -z "$LlcCmd"
then
SettingsLlcCommand="llc"
@@ -544,11 +551,13 @@ AC_DEFUN([FP_SETTINGS],
AC_SUBST(SettingsLdCommand)
AC_SUBST(SettingsLdFlags)
AC_SUBST(SettingsArCommand)
+ AC_SUBST(SettingsRanlibCommand)
AC_SUBST(SettingsPerlCommand)
AC_SUBST(SettingsDllWrapCommand)
AC_SUBST(SettingsWindresCommand)
AC_SUBST(SettingsLibtoolCommand)
AC_SUBST(SettingsTouchCommand)
+ AC_SUBST(SettingsClangCommand)
AC_SUBST(SettingsLlcCommand)
AC_SUBST(SettingsOptCommand)
])
@@ -642,6 +651,14 @@ AC_DEFUN([FPTOOLS_SET_C_LD_FLAGS],
$3="$$3 -D_HPUX_SOURCE"
$5="$$5 -D_HPUX_SOURCE"
;;
+
+ arm*freebsd*)
+ # On arm/freebsd, tell gcc to generate Arm
+ # instructions (ie not Thumb).
+ $2="$$2 -marm"
+ $3="$$3 -Wl,-z,noexecstack"
+ $4="$$4 -z noexecstack"
+ ;;
arm*linux*)
# On arm/linux and arm/android, tell gcc to generate Arm
# instructions (ie not Thumb).
@@ -650,6 +667,10 @@ AC_DEFUN([FPTOOLS_SET_C_LD_FLAGS],
$4="$$4 -z noexecstack"
;;
+ aarch64*freebsd*)
+ $3="$$3 -Wl,-z,noexecstack"
+ $4="$$4 -z noexecstack"
+ ;;
aarch64*linux*)
$3="$$3 -Wl,-z,noexecstack"
$4="$$4 -z noexecstack"
@@ -852,8 +873,12 @@ char **argv;
esac]);
AC_SUBST([LeadingUnderscore], [`echo $fptools_cv_leading_underscore | sed 'y/yesno/YESNO/'`])
if test x"$fptools_cv_leading_underscore" = xyes; then
+ AC_SUBST([CabalLeadingUnderscore],[True])
AC_DEFINE([LEADING_UNDERSCORE], [1], [Define to 1 if C symbols have a leading underscore added by the compiler.])
-fi])# FP_LEADING_UNDERSCORE
+else
+ AC_SUBST([CabalLeadingUnderscore],[False])
+fi
+])# FP_LEADING_UNDERSCORE
# FP_COMPARE_VERSIONS(VERSION1, TEST, VERSION2, [ACTION-IF-TRUE], [ACTION-IF-FALSE])
@@ -1065,9 +1090,20 @@ AC_SUBST([LdHasFilelist])
# FP_PROG_AR
# ----------
# Sets fp_prog_ar to a path to ar. Exits if no ar can be found
+# The host normalization on Windows breaks autoconf, it no longer
+# thinks that target == host so it never checks the unqualified
+# tools for Windows. See #14274.
AC_DEFUN([FP_PROG_AR],
[if test -z "$fp_prog_ar"; then
- AC_PATH_PROG([fp_prog_ar], [ar])
+ if test "$HostOS" = "mingw32"
+ then
+ AC_PATH_PROG([fp_prog_ar], [ar])
+ if test -n "$fp_prog_ar"; then
+ fp_prog_ar=$(cygpath -m $fp_prog_ar)
+ fi
+ else
+ AC_CHECK_TARGET_TOOL([fp_prog_ar], [ar])
+ fi
fi
if test -z "$fp_prog_ar"; then
AC_MSG_ERROR([cannot find ar in your PATH, no idea how to make a library])
@@ -1132,11 +1168,15 @@ if test $fp_prog_ar_is_gnu = yes; then
fp_cv_prog_ar_args="q"
else
touch conftest.dummy
- for fp_var in clqsZ clqs cqs clq cq ; do
+ for fp_var in qclsZ qcls qcs qcl qc ; do
rm -f conftest.a
- if "$fp_prog_ar" $fp_var conftest.a conftest.dummy > /dev/null 2> /dev/null; then
- fp_cv_prog_ar_args=$fp_var
- break
+ if "$fp_prog_ar" $fp_var conftest.a conftest.dummy > /dev/null 2> /dev/null ; then
+ # Also check that a result was created; it seems some llvm-ar versions
+ # exit with code zero even if they fail to parse the command line.
+ if test -f conftest.a ; then
+ fp_cv_prog_ar_args=$fp_var
+ break
+ fi
fi
done
rm -f conftest*
@@ -1212,24 +1252,17 @@ if test -z "$CC"
then
AC_MSG_ERROR([gcc is required])
fi
-GccLT34=NO
-GccLT44=NO
GccLT46=NO
AC_CACHE_CHECK([version of gcc], [fp_cv_gcc_version],
[
- fp_cv_gcc_version="`$CC -v 2>&1 | grep 'version ' | sed -e 's/.*version [[^0-9]]*\([[0-9.]]*\).*/\1/g'`"
- FP_COMPARE_VERSIONS([$fp_cv_gcc_version], [-lt], [3.0],
- [AC_MSG_ERROR([Need at least gcc version 3.0 (3.4+ recommended)])])
- # See #2770: gcc 2.95 doesn't work any more, apparently. There probably
- # isn't a very good reason for that, but for now just make configure
- # fail.
- FP_COMPARE_VERSIONS([$fp_cv_gcc_version], [-lt], [3.4], GccLT34=YES)
- FP_COMPARE_VERSIONS([$fp_cv_gcc_version], [-lt], [4.4], GccLT44=YES)
+ # Be sure only to look at the first occurrence of the "version " string;
+ # Some Apple compilers emit multiple messages containing this string.
+ fp_cv_gcc_version="`$CC -v 2>&1 | sed -n -e '1,/version /s/.*version [[^0-9]]*\([[0-9.]]*\).*/\1/p'`"
+ FP_COMPARE_VERSIONS([$fp_cv_gcc_version], [-lt], [4.4],
+ [AC_MSG_ERROR([Need at least gcc version 4.4 (4.7+ recommended)])])
FP_COMPARE_VERSIONS([$fp_cv_gcc_version], [-lt], [4.6], GccLT46=YES)
])
AC_SUBST([GccVersion], [$fp_cv_gcc_version])
-AC_SUBST(GccLT34)
-AC_SUBST(GccLT44)
AC_SUBST(GccLT46)
])# FP_GCC_VERSION
@@ -1263,6 +1296,24 @@ AC_SUBST(GccIsClang)
rm -f conftest.txt
])
+# FP_GCC_SUPPORTS__ATOMICS
+# ------------------------
+# Does gcc support the __atomic_* family of builtins?
+AC_DEFUN([FP_GCC_SUPPORTS__ATOMICS],
+[
+ AC_REQUIRE([AC_PROG_CC])
+ AC_MSG_CHECKING([whether GCC supports __atomic_ builtins])
+ echo 'int test(int *x) { int y; __atomic_load(&x, &y, __ATOMIC_SEQ_CST); return x; }' > conftest.c
+ if $CC -c conftest.c > /dev/null 2>&1; then
+ CONF_GCC_SUPPORTS__ATOMICS=YES
+ AC_MSG_RESULT([yes])
+ else
+ CONF_GCC_SUPPORTS__ATOMICS=NO
+ AC_MSG_RESULT([no])
+ fi
+ rm -f conftest.c conftest.o
+])
+
# FP_GCC_SUPPORTS_NO_PIE
# ----------------------
# Does gcc support the -no-pie option? If so we should pass it to gcc when
@@ -1273,7 +1324,7 @@ AC_DEFUN([FP_GCC_SUPPORTS_NO_PIE],
AC_MSG_CHECKING([whether GCC supports -no-pie])
echo 'int main() { return 0; }' > conftest.c
# Some GCC versions only warn when passed an unrecognized flag.
- if $CC -no-pie -x c /dev/null -dM -E > conftest.txt 2>&1 && ! grep -i unrecognized conftest.txt > /dev/null 2>&1; then
+ if $CC -no-pie -Werror -x c /dev/null -dM -E > conftest.txt 2>&1 && ! grep -i unrecognized conftest.txt > /dev/null 2>&1; then
CONF_GCC_SUPPORTS_NO_PIE=YES
AC_MSG_RESULT([yes])
else
@@ -1513,7 +1564,7 @@ if test "$RELEASE" = "NO"; then
fi
AC_MSG_CHECKING([for GHC Git commit id])
- if test -d .git; then
+ if test -e .git; then
git_commit_id=`git rev-parse HEAD`
if test -n "$git_commit_id" 2>&1 >/dev/null; then true; else
AC_MSG_ERROR([failed to detect revision: check that git is in your path])
@@ -1833,6 +1884,9 @@ case "$1" in
mips*)
$2="mips"
;;
+ nios2)
+ $2="nios2"
+ ;;
powerpc64le*)
$2="powerpc64le"
;;
@@ -1842,6 +1896,12 @@ case "$1" in
powerpc*)
$2="powerpc"
;;
+ riscv64*)
+ $2="riscv64"
+ ;;
+ riscv|riscv32*)
+ $2="riscv32"
+ ;;
rs6000)
$2="rs6000"
;;
@@ -1873,6 +1933,40 @@ case "$1" in
esac
])
+# GHC_LLVM_TARGET(target_cpu, target_vendor, target_os, llvm_target_var)
+# --------------------------------
+# converts the canonicalized target into someting llvm can understand
+AC_DEFUN([GHC_LLVM_TARGET], [
+ case "$2-$3" in
+ *-freebsd*-gnueabihf)
+ llvm_target_vendor="unknown"
+ llvm_target_os="freebsd-gnueabihf"
+ ;;
+ hardfloat-*eabi)
+ llvm_target_vendor="unknown"
+ llvm_target_os="$3""hf"
+ ;;
+ *-mingw32|*-mingw64|*-msys)
+ llvm_target_vendor="unknown"
+ llvm_target_os="windows"
+ ;;
+ # retain any android and gnueabi linux flavours
+ # for the LLVM Target. Otherwise these would be
+ # turned into just `-linux` and fail to be found
+ # in the `llvm-targets` file.
+ *-android*|*-gnueabi*)
+ GHC_CONVERT_VENDOR([$2],[llvm_target_vendor])
+ llvm_target_os="$3"
+ ;;
+ *)
+ GHC_CONVERT_VENDOR([$2],[llvm_target_vendor])
+ GHC_CONVERT_OS([$3],[$1],[llvm_target_os])
+ ;;
+ esac
+ $4="$1-$llvm_target_vendor-$llvm_target_os"
+])
+
+
# GHC_CONVERT_VENDOR(vendor, target_var)
# --------------------------------
# converts vendor from gnu to ghc naming, and assigns the result to $target_var
@@ -1899,6 +1993,9 @@ AC_DEFUN([GHC_CONVERT_VENDOR],[
# converts os from gnu to ghc naming, and assigns the result to $target_var
AC_DEFUN([GHC_CONVERT_OS],[
case "$1" in
+ gnu*) # e.g. i686-unknown-gnu0.9
+ $3="gnu"
+ ;;
# watchos and tvos are ios variants as of May 2017.
ios|watchos|tvos)
$3="ios"
@@ -1909,16 +2006,25 @@ AC_DEFUN([GHC_CONVERT_OS],[
linux-*|linux)
$3="linux"
;;
+ openbsd*)
+ $3="openbsd"
+ ;;
# As far as I'm aware, none of these have relevant variants
- freebsd|netbsd|openbsd|dragonfly|hpux|linuxaout|kfreebsdgnu|freebsd2|solaris2|mingw32|darwin|gnu|nextstep2|nextstep3|sunos4|ultrix|haiku)
+ freebsd|netbsd|dragonfly|hpux|linuxaout|kfreebsdgnu|freebsd2|mingw32|darwin|nextstep2|nextstep3|sunos4|ultrix|haiku)
$3="$1"
;;
+ msys)
+ AC_MSG_ERROR([Building GHC using the msys toolchain is not supported; please use mingw instead. Perhaps you need to set 'MSYSTEM=MINGW64 or MINGW32?'])
+ ;;
aix*) # e.g. powerpc-ibm-aix7.1.3.0
$3="aix"
;;
darwin*) # e.g. aarch64-apple-darwin14
$3="darwin"
;;
+ solaris2*)
+ $3="solaris2"
+ ;;
freebsd*) # like i686-gentoo-freebsd7
# i686-gentoo-freebsd8
# i686-gentoo-freebsd8.2
@@ -1996,7 +2102,7 @@ AC_DEFUN([XCODE_VERSION],[
#
AC_DEFUN([FIND_LLVM_PROG],[
# Test for program with and without version name.
- AC_CHECK_TOOLS([$1], [$2-$3 $2])
+ AC_CHECK_TOOLS([$1], [$2-$3 $2], [:])
if test "$$1" != ":"; then
AC_MSG_CHECKING([$$1 is version $3])
if test `$$1 --version | grep -c "version $3"` -gt 0 ; then
@@ -2005,6 +2111,8 @@ AC_DEFUN([FIND_LLVM_PROG],[
AC_MSG_RESULT(no)
$1=""
fi
+ else
+ $1=""
fi
])
@@ -2200,6 +2308,7 @@ $2=$HS_CPP_ARGS
# ----------------------
# whether to use libbfd for debugging RTS
AC_DEFUN([FP_BFD_SUPPORT], [
+ AC_SUBST([CabalHaveLibbfd], [False])
AC_ARG_ENABLE(bfd-debug,
[AC_HELP_STRING([--enable-bfd-debug],
[Enable symbol resolution for -debug rts ('+RTS -Di') via binutils' libbfd [default=no]])],
@@ -2237,7 +2346,7 @@ AC_DEFUN([FP_BFD_SUPPORT], [
bfd_get_symbol_info(abfd,symbol_table[0],&info);
}
],
- [],dnl bfd seems to work
+ [AC_SUBST([CabalHaveLibbfd], [True])],dnl bfd seems to work
[AC_MSG_ERROR([can't use 'bfd' library])])
LIBS="$save_LIBS"
]
@@ -2282,27 +2391,62 @@ AC_DEFUN([FIND_LD],[
[],
[enable_ld_override=yes])
- if test "x$enable_ld_override" = "xyes"; then
- AC_CHECK_TARGET_TOOLS([TmpLd], [ld.gold ld.lld ld])
-
- out=`$TmpLd --version`
- case $out in
- "GNU ld"*) FP_CC_LINKER_FLAG_TRY(bfd, $2) ;;
- "GNU gold"*) FP_CC_LINKER_FLAG_TRY(gold, $2) ;;
- "LLD"*) FP_CC_LINKER_FLAG_TRY(lld, $2) ;;
- *) AC_MSG_NOTICE([unknown linker version $out]) ;;
- esac
- if test "z$$2" = "z"; then
- AC_MSG_NOTICE([unable to convince '$CC' to use linker '$TmpLd'])
+ find_ld() {
+ # Make sure the user didn't specify LD manually.
+ if test "z$LD" != "z"; then
AC_CHECK_TARGET_TOOL([LD], [ld])
- else
- LD="$TmpLd"
+ LD_NO_GOLD=$LD
+ return
fi
- else
+
+ # Manually iterate over possible names since we want to ensure that, e.g.,
+ # if ld.lld is installed but gcc doesn't support -fuse-ld=lld, that we
+ # then still try ld.gold and -fuse-ld=gold.
+ for possible_ld in ld.lld ld.gold ld; do
+ TmpLd="" # In case the user set LD
+ AC_CHECK_TARGET_TOOL([TmpLd], [$possible_ld])
+ if test "x$TmpLd" = "x"; then continue; fi
+
+ out=`$TmpLd --version`
+ LD_NO_GOLD=$TmpLd
+ case $out in
+ "GNU ld"*)
+ FP_CC_LINKER_FLAG_TRY(bfd, $2) ;;
+ "GNU gold"*)
+ FP_CC_LINKER_FLAG_TRY(gold, $2)
+ LD_NO_GOLD=ld
+ ;;
+ "LLD"*)
+ FP_CC_LINKER_FLAG_TRY(lld, $2) ;;
+ *) AC_MSG_NOTICE([unknown linker version $out]) ;;
+ esac
+ if test "z$$2" = "z"; then
+ AC_MSG_NOTICE([unable to convince '$CC' to use linker '$TmpLd'])
+ # a terrible hack to prevent autoconf from caching the previous
+ # AC_CHECK_TARGET_TOOL result since next time we'll be looking
+ # for another ld variant.
+ $as_unset ac_cv_prog_ac_ct_TmpLd
+ else
+ LD="$TmpLd"
+ return
+ fi
+ done
+
+ # Fallback
AC_CHECK_TARGET_TOOL([LD], [ld])
- fi
+ # This isn't entirely safe since $LD may have been discovered to be
+ $ ld.gold, but what else can we do?
+ if test "x$LD_NO_GOLD" = "x"; then LD_NO_GOLD=$LD; fi
+ }
+
+ if test "x$enable_ld_override" = "xyes"; then
+ find_ld
+ else
+ AC_CHECK_TARGET_TOOL([LD], [ld])
+ if test "x$LD_NO_GOLD" = "x"; then LD_NO_GOLD=$LD; fi
+ fi
- CHECK_LD_COPY_BUG([$1])
+ CHECK_LD_COPY_BUG([$1])
])
# LocalWords: fi