On Linux, uname -m reports the kernel type. Some Linux systems are 32-bit but

with a 64-bit kernel, which confuses LLVM. Make LLVM double-check this by
checking which defines the system gcc actually sets.

llvm-svn: 83047
This commit is contained in:
Nick Lewycky 2009-09-29 05:40:45 +00:00
parent 025893300c
commit 90df990f73
2 changed files with 25 additions and 0 deletions

View File

@ -284,6 +284,14 @@ if test "$llvm_cv_target_arch" = "Unknown" ; then
AC_MSG_WARN([Configuring LLVM for an unknown target archicture])
fi
dnl Handle 32-bit linux systems running a 64-bit kernel.
if test "$llvm_cv_os_type" = "Linux" -a "$llvm_cv_target_arch" = "x86_64" ; then
AC_IS_LINUX_MIXED
if test "$llvm_cv_linux_mixed" = "yes"; then
llvm_cv_target_arch="x86"
fi
fi
# Determine the LLVM native architecture for the target
case "$llvm_cv_target_arch" in
x86) LLVM_NATIVE_ARCH="X86" ;;

View File

@ -0,0 +1,17 @@
#
# Some Linux machines run a 64-bit kernel with a 32-bit userspace. 'uname -m'
# shows these as x86_64. Ask the system 'gcc' what it thinks.
#
AC_DEFUN([AC_IS_LINUX_MIXED],
[AC_CACHE_CHECK(for 32-bit userspace on 64-bit system,llvm_cv_linux_mixed,
[ AC_LANG_PUSH([C])
AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
[[#ifndef __x86_64__
error: Not x86-64 even if uname says so!
#endif
]])],
[llvm_cv_linux_mixed=no],
[llvm_cv_linux_mixed=yes])
AC_LANG_POP([C])
])
])