summaryrefslogtreecommitdiff
path: root/configure.ac
diff options
context:
space:
mode:
authorAlan Wu <XrXr@users.noreply.github.com>2022-11-24 14:58:41 -0500
committerGitHub <noreply@github.com>2022-11-24 14:58:41 -0500
commita81c89b7c877cc0ddf40a8d4672ca90090e116c6 (patch)
tree29f77dcee887799f778c8085d0c5cef52774f112 /configure.ac
parent656f25987cf2885104d5b13c8d3f5b7d32f1b333 (diff)
YJIT: Make sure rustc's target matches before enabling (#6804)
For people using Rosetta 2 on ARM Macs, it can happen that the rustc in the PATH compiles for x86_64 while clang is targeting ARM. We were enabling YJIT in these situations because the test program compiled fine, but caused linking failure later due to the architecture mismatch. Adjust the test program to fail when rustc's target arch is different from ruby's target arch. [Bug #19146]
Notes
Notes: Merged-By: maximecb <maximecb@ruby-lang.org>
Diffstat (limited to 'configure.ac')
-rw-r--r--configure.ac12
1 files changed, 10 insertions, 2 deletions
diff --git a/configure.ac b/configure.ac
index 4e118b7813..79167a9c67 100644
--- a/configure.ac
+++ b/configure.ac
@@ -3744,8 +3744,16 @@ AC_CHECK_PROG(RUSTC, [rustc], [rustc], [no]) dnl no ac_tool_prefix
dnl check if rustc is recent enough to build YJIT (rustc >= 1.58.0)
YJIT_RUSTC_OK=no
AS_IF([test "$RUSTC" != "no"],
- AC_MSG_CHECKING([whether ${RUSTC} is new enough for YJIT])
- AS_IF([echo "fn main() { let x = 1; format!(\"{x}\"); }" | $RUSTC - --emit asm=/dev/null 2>/dev/null],
+ AC_MSG_CHECKING([whether ${RUSTC} works for YJIT])
+ YJIT_TARGET_ARCH=
+ AS_CASE(["$target_cpu"],
+ [arm64|aarch64], [YJIT_TARGET_ARCH=aarch64],
+ [x86_64], [YJIT_TARGET_ARCH=x86_64],
+ )
+ dnl Fails in case rustc target doesn't match ruby target.
+ dnl Can happen on Rosetta, for example.
+ AS_IF([echo "#[cfg(target_arch = \"$YJIT_TARGET_ARCH\")]\n fn main() { let x = 1; format!(\"{x}\"); }" |
+ $RUSTC - --emit asm=/dev/null 2>/dev/null],
[YJIT_RUSTC_OK=yes]
)
AC_MSG_RESULT($YJIT_RUSTC_OK)