diff options
Diffstat (limited to 'configure.ac')
| -rw-r--r-- | configure.ac | 289 |
1 files changed, 194 insertions, 95 deletions
diff --git a/configure.ac b/configure.ac index 82f144a8bb..2de91209d6 100644 --- a/configure.ac +++ b/configure.ac @@ -69,6 +69,7 @@ dnl 93(bright yellow) is copied from .github/workflows/mingw.yml AC_ARG_VAR([cflags], [additional CFLAGS (ignored when CFLAGS is given)])dnl AC_ARG_VAR([cppflags], [additional CPPFLAGS (ignored when CPPFLAGS is given)])dnl AC_ARG_VAR([cxxflags], [additional CXXFLAGS (ignored when CXXFLAGS is given)])dnl +AC_ARG_VAR([rustc_flags], [additional RUSTC_FLAGS])dnl [begin]_group "environment section" && { HAVE_BASERUBY=yes @@ -82,9 +83,17 @@ AC_ARG_WITH(baseruby, ], [ AC_PATH_PROG([BASERUBY], [ruby], [false]) + HAVE_BASERUBY= ]) -AS_IF([test "$HAVE_BASERUBY" != no], [ - RUBYOPT=- $BASERUBY --disable=gems -rerb -rfileutils -rtempfile "${tooldir}/missing-baseruby.bat" || HAVE_BASERUBY=no +AS_IF([test "$HAVE_BASERUBY" = no], [ + # --without-baseruby +], [error=`RUBYOPT=- $BASERUBY --disable=gems "${tooldir}/missing-baseruby.bat" --verbose 2>&1`], [ + HAVE_BASERUBY=yes +], [test "$HAVE_BASERUBY" = ""], [ # no --with-baseruby option + AC_MSG_WARN($error) # just warn and continue + HAVE_BASERUBY=no +], [ # the ruby given by --with-baseruby is too old + AC_MSG_ERROR($error) # bail out ]) AS_IF([test "${HAVE_BASERUBY:=no}" != no], [ AS_CASE(["$build_os"], [mingw*], [ @@ -101,16 +110,44 @@ AS_IF([test "$HAVE_BASERUBY" = no], [ ]) AC_SUBST(BASERUBY) AC_SUBST(HAVE_BASERUBY) +AS_IF([test "$cross_compiling" = yes], + [X_BUILD_EXEEXT=`$BASERUBY -rrbconfig -e ['puts RbConfig::CONFIG["EXEEXT"]']`], + [X_BUILD_EXEEXT='$(EXEEXT)'] +) +AC_SUBST(X_BUILD_EXEEXT) + +AC_ARG_WITH(dump-ast, + AS_HELP_STRING([--with-dump-ast=DUMP_AST], [use DUMP_AST as dump_ast; for cross-compiling with a host-built dump_ast]), + [DUMP_AST=$withval DUMP_AST_TARGET='$(empty)'], + [AS_IF([test "$cross_compiling" = yes], [ + DUMP_AST='build-tool/dump_ast$(BUILD_EXEEXT)' + ], [ + DUMP_AST='./dump_ast$(BUILD_EXEEXT)' + ]) + DUMP_AST_TARGET='$(DUMP_AST)']) +dnl Without baseruby, .rbinc files cannot be regenerated, so clear the +dnl dependency on dump_ast to avoid rebuilding pre-generated .rbinc files. +AS_IF([test "$HAVE_BASERUBY" = no], [DUMP_AST_TARGET='$(empty)']) +AC_SUBST(X_DUMP_AST, "${DUMP_AST}") +AC_SUBST(X_DUMP_AST_TARGET, "${DUMP_AST_TARGET}") : ${GIT=git} HAVE_GIT=yes AC_ARG_WITH(git, AS_HELP_STRING([--without-git], [never use git]), [AS_CASE([$withval], - [no], [GIT=never-use HAVE_GIT=no], + [no], [HAVE_GIT=no], [yes], [], [GIT=$withval])]) -AS_IF([test x"$HAVE_GIT" = xyes], [command -v "$GIT" > /dev/null || HAVE_GIT=no]) +{ + test x"$HAVE_GIT" = xyes && + command -v "$GIT" > /dev/null && + # `git -C`: 1.8.5 + # `git log --no-show-signature`: 2.10.0 + AS_CASE([`$GIT -C . --version 2> /dev/null | sed 's/.* //'`], + [0.*|1.*|2.@<:@0-9@:>@.*], [false], + [true]) +} || HAVE_GIT=no GIT=never-use AC_SUBST(GIT) AC_SUBST(HAVE_GIT) @@ -251,6 +288,11 @@ AS_CASE(["/${rb_CC} "], RUBY_CHECK_PROG_FOR_CC([OBJDUMP], [clang], [${llvm_prefix}objdump]) RUBY_CHECK_PROG_FOR_CC([RANLIB], [clang], [${llvm_prefix}ranlib]) RUBY_CHECK_PROG_FOR_CC([STRIP], [clang], [${llvm_prefix}strip]) + + # These -Wno-* flags silence clang-specific diagnostics that don't exist + # in GCC. GCC silently accepts unknown -Wno-* flags but later emits noisy + # "unrecognized command-line option" notes whenever another warning fires. + clang_warnflags="-Wno-constant-logical-operand -Wno-parentheses-equality -Wno-self-assign" ]) AS_UNSET(rb_CC) AS_UNSET(rb_dummy) @@ -264,6 +306,8 @@ AS_CASE(["${build_os}"], ]) AS_CASE(["${target_os}"], [cygwin*|msys*|mingw*|darwin*], [ + ac_ct_OBJCOPY=":" + ac_cv_prog_OBJCOPY=":" ac_cv_prog_ac_ct_OBJCOPY=":" ]) @@ -286,6 +330,8 @@ AC_CHECK_TOOLS([OBJCOPY], [gobjcopy objcopy], [:]) AC_CHECK_TOOLS([OBJDUMP], [gobjdump objdump]) AC_CHECK_TOOLS([STRIP], [gstrip strip], [:]) +FIRSTMAKEFILE="" + # nm errors with Rust's LLVM bitcode when Rust uses a newer LLVM version than nm. # In case we're working with llvm-nm, tell it to not worry about the bitcode. AS_IF([${NM} --help 2>&1 | grep -q 'llvm-bc'], [NM="$NM --no-llvm-bc"]) @@ -460,6 +506,8 @@ AS_CASE(["$target_os"], # so wrap clang to insert our fake wasm-opt, which does nothing, in PATH. CC_WRAPPER=`cd -P "${tooldir}" && pwd`/wasm-clangw CC="$CC_WRAPPER $CC" + + FIRSTMAKEFILE=GNUmakefile:wasm/GNUmakefile.in ]) cc_version= @@ -501,6 +549,8 @@ AS_CASE(["$target_os"], target_cpu=`echo $target_cpu | sed s/i.86/i386/` AS_CASE(["$target"], [-*], [ target="$target_cpu${target}"]) AS_CASE(["$target_alias"], [-*], [ target_alias="$target_cpu${target_alias}"]) + # cygwin/GNUmakefile.in is not exclusively for cygwin. + FIRSTMAKEFILE=GNUmakefile:cygwin/GNUmakefile.in AS_CASE(["$target_os"], [mingw*], [ test "$rb_cv_msvcrt" = "" && unset rb_cv_msvcrt @@ -521,7 +571,6 @@ AS_CASE(["$target_os"], ]) rb_cv_binary_elf=no : ${enable_shared=yes} - AS_IF([$WINDRES --version | grep LLVM > /dev/null], [USE_LLVM_WINDRES=yes], [USE_LLVM_WINDRES=no]) ], [hiuxmpp*], [AC_DEFINE(__HIUX_MPP__)]) # by TOYODA Eizi <toyoda@npd.kishou.go.jp> @@ -603,6 +652,22 @@ AS_IF([test -f conf$$.dir/src/cdcmd], [ rm -fr conf$$.dir AC_MSG_RESULT([$CHDIR]) AC_SUBST(CHDIR) + +AS_CASE(["$FIRSTMAKEFILE"], [*GNUmakefile:*], [gnumake=yes], [ + AC_MSG_CHECKING([if ${MAKE-make} is GNU make]) + mkdir conftest.dir + echo "all:; @echo yes" > conftest.dir/GNUmakefile + echo "all:; @echo no" > conftest.dir/Makefile + gnumake=`(cd conftest.dir; ${MAKE-make})` + rm -fr conftest.dir + AS_CASE(["$gnumake"], + [*yes*], [ + FIRSTMAKEFILE=GNUmakefile:template/GNUmakefile.in + gnumake=yes], + [ + gnumake=no]) + AC_MSG_RESULT($gnumake) +]) } [begin]_group "compiler section" && { @@ -675,7 +740,7 @@ AS_IF([test "$fdeclspec" = yes], [ RUBY_APPEND_OPTIONS(cflags, -fdeclspec) RUBY_APPEND_OPTIONS(orig_cflags, -fdeclspec) ]) -RUBY_TRY_CXXFLAGS(-fdeclspec, [fdeclspec=yes], [fdeclspec=no]) +RUBY_TRY_CXXFLAGS(-fdeclspec, [fdeclspec=yes], [fdeclspec=no], [@%:@include <cstdio>]) AS_IF([test "$fdeclspec" = yes], [ RUBY_APPEND_OPTIONS(CXXFLAGS, -fdeclspec) ]) @@ -703,6 +768,12 @@ AS_CASE(["$GCC:${warnflags+set}:${extra_warnflags:+set}:"], AS_CASE([ $CFLAGS ], [*" -save-temps="*|*" -save-temps "*], [], [ extra_warnflags="$extra_warnflags -Werror=misleading-indentation" ]) + AS_CASE([$target_os], [mingw*], [ + # 64bit Windows is IL32P64; shorten-64-to-32 causes tons of warnigs + extra_warnflags="$extra_warnflags -Wno-shorten-64-to-32" + ], [ + extra_warnflags="$extra_warnflags -Werror=shorten-64-to-32" + ]) # ICC doesn't support -Werror= AS_IF([test $icc_version -gt 0], [ @@ -716,19 +787,15 @@ AS_CASE(["$GCC:${warnflags+set}:${extra_warnflags:+set}:"], -Werror=implicit-function-declaration \ -Werror=implicit-int \ -Werror=pointer-arith \ - -Werror=shorten-64-to-32 \ -Werror=write-strings \ -Werror=old-style-definition \ -Wimplicit-fallthrough=0 \ -Wmissing-noreturn \ -Wno-cast-function-type \ - -Wno-constant-logical-operand \ -Wno-long-long \ -Wno-missing-field-initializers \ -Wno-overlength-strings \ -Wno-packed-bitfield-compat \ - -Wno-parentheses-equality \ - -Wno-self-assign \ -Wno-tautological-compare \ -Wno-unused-parameter \ -Wno-unused-value \ @@ -736,6 +803,7 @@ AS_CASE(["$GCC:${warnflags+set}:${extra_warnflags:+set}:"], -Wsuggest-attribute=noreturn \ -Wunused-variable \ -diag-disable=175,188,1684,2259,2312 \ + $clang_warnflags \ $extra_warnflags \ ; do AS_IF([test "$particular_werror_flags" != yes], [ @@ -1228,6 +1296,11 @@ main() ac_cv_header_sys_time_h=no ac_cv_header_sys_times_h=no ac_cv_header_sys_socket_h=no + ac_cv_func_chown=yes + ac_cv_func_getegid=yes + ac_cv_func_geteuid=yes + ac_cv_func_getgid=yes + ac_cv_func_getuid=yes ac_cv_func_execv=yes ac_cv_func_lstat=yes ac_cv_func_times=yes @@ -1240,6 +1313,8 @@ main() ac_cv_func_readlink=yes ac_cv_func_shutdown=yes ac_cv_func_symlink=yes + ac_cv_func_clock_getres=yes + ac_cv_func_clock_gettime=yes ac_cv_lib_crypt_crypt=no ac_cv_func_getpgrp_void=no ac_cv_func_memcmp_working=yes @@ -1256,8 +1331,8 @@ main() AS_IF([test "$target_cpu" = x64], [ ac_cv_func___builtin_setjmp=yes ac_cv_func_round=no + ac_cv_func_tgamma=no ]) - ac_cv_func_tgamma=no AC_CHECK_TYPE([NET_LUID], [], [], [@%:@include <winsock2.h> @%:@include <windows.h> @@ -1729,18 +1804,26 @@ AS_IF([test "$GCC" = yes], [ [rb_cv_gcc_atomic_builtins=no])]) AS_IF([test "$rb_cv_gcc_atomic_builtins" = yes], [ AC_DEFINE(HAVE_GCC_ATOMIC_BUILTINS) - AC_CACHE_CHECK([for 64bit __atomic builtins], [rb_cv_gcc_atomic_builtins_64], [ - AC_LINK_IFELSE([AC_LANG_PROGRAM([[@%:@include <stdint.h> - uint64_t atomic_var;]], - [[ - __atomic_load_n(&atomic_var, __ATOMIC_RELAXED); - __atomic_store_n(&atomic_var, 0, __ATOMIC_RELAXED); - ]])], - [rb_cv_gcc_atomic_builtins_64=yes], - [rb_cv_gcc_atomic_builtins_64=no])]) - AS_IF([test "$rb_cv_gcc_atomic_builtins_64" = yes], [ - AC_DEFINE(HAVE_GCC_ATOMIC_BUILTINS_64) - ]) + for lib in "" atomic; do + AS_IF([test "$lib" != ""], [ + AC_CHECK_LIB([atomic], [__atomic_fetch_add_8]) + unset rb_cv_gcc_atomic_builtins_64 + ]) + AC_CACHE_CHECK([for 64bit __atomic builtins${lib:+ with -l$lib}], + [rb_cv_gcc_atomic_builtins_64], [ + AC_LINK_IFELSE([AC_LANG_PROGRAM([[@%:@include <stdint.h> + uint64_t atomic_var;]], + [[ + __atomic_load_n(&atomic_var, __ATOMIC_RELAXED); + __atomic_store_n(&atomic_var, 0, __ATOMIC_RELAXED); + ]])], + [rb_cv_gcc_atomic_builtins_64=yes], + [rb_cv_gcc_atomic_builtins_64=no])]) + AS_IF([test "$rb_cv_gcc_atomic_builtins_64" = yes], [ + AC_DEFINE(HAVE_GCC_ATOMIC_BUILTINS_64) + break + ]) + done ]) AC_CACHE_CHECK([for __sync builtins], [rb_cv_gcc_sync_builtins], [ @@ -1804,10 +1887,6 @@ RUBY_DECL_ATTRIBUTE([__nonnull__(n)], [RUBY_FUNC_NONNULL(n,x)], [rb_cv_func_nonn RUBY_APPEND_OPTION(XCFLAGS, -DRUBY_EXPORT) -AC_ARG_ENABLE(mathn, - AS_HELP_STRING([--enable-mathn], [enable canonicalization for mathn]), - [AC_MSG_ERROR([mathn support has been dropped])]) - AC_CACHE_CHECK(for function name string predefined identifier, rb_cv_function_name_string, [AS_CASE(["$target_os"],[openbsd*],[ @@ -2435,9 +2514,7 @@ AC_CACHE_CHECK(for negative time_t for gmtime(3), rb_cv_negative_time_t, #include <time.h> void -check(tm, y, m, d, h, s) - struct tm *tm; - int y, m, d, h, s; +check(struct tm *tm, int y, int m, int d, int h, int s) { if (!tm || tm->tm_year != y || @@ -2521,8 +2598,7 @@ AS_IF([test "$ac_cv_func_sigprocmask" = yes && test "$ac_cv_func_sigaction" = ye #include <signal.h> void -sig_handler(dummy) - int dummy; +sig_handler(int dummy) { } @@ -3465,7 +3541,7 @@ AS_IF([test x"$cross_compiling" = xyes], [ # darwin target requires miniruby for linking ext bundles PREP="$PREP"' miniruby$(EXEEXT)' ]) - RUNRUBY_COMMAND='$(MINIRUBY) -I`cd $(srcdir)/lib; pwd`' + RUNRUBY_COMMAND='$(MINIRUBY) -I`$(CHDIR) $(srcdir)/lib; pwd`' RUNRUBY='$(RUNRUBY_COMMAND)' XRUBY='$(MINIRUBY)' TEST_RUNNABLE=no @@ -3491,7 +3567,6 @@ AC_SUBST(RUNRUBY) AC_SUBST(XRUBY) AC_SUBST(EXTOUT, [${EXTOUT=.ext}]) -FIRSTMAKEFILE="" LIBRUBY_A='lib$(RUBY_SO_NAME)-static.a' LIBRUBY='$(LIBRUBY_A)' LIBRUBYARG_STATIC='-l$(RUBY_SO_NAME)-static' @@ -3508,7 +3583,8 @@ AS_CASE(["$target_os"], AC_ARG_ENABLE(multiarch, AS_HELP_STRING([--enable-multiarch], [enable multiarch compatible directories]), - [multiarch=], [unset multiarch]) + [AS_CASE([$enableval], [no], [unset multiarch], [multiarch=])], + [unset multiarch]) AS_IF([test ${multiarch+set}], [ AC_DEFINE(ENABLE_MULTIARCH) ]) @@ -3658,6 +3734,7 @@ AS_CASE("$enable_shared", [yes], [ LIBRUBY_DLDFLAGS="$LIBRUBY_DLDFLAGS "'-current_version $(RUBY_PROGRAM_VERSION)' AS_IF([test "$visibility_option" = ld], [ LIBRUBY_DLDFLAGS="$LIBRUBY_DLDFLAGS "'-Wl,-unexported_symbol,_Init_*' + LIBRUBY_DLDFLAGS="$LIBRUBY_DLDFLAGS "'-Wl,-unexported_symbol,_InitVM_*' LIBRUBY_DLDFLAGS="$LIBRUBY_DLDFLAGS "'-Wl,-unexported_symbol,_ruby_static_id_*' LIBRUBY_DLDFLAGS="$LIBRUBY_DLDFLAGS "'-Wl,-unexported_symbol,*_threadptr_*' ]) @@ -3855,11 +3932,11 @@ AC_SUBST(INSTALL_STATIC_LIBRARY) [begin]_group "JIT section" && { AC_CHECK_PROG(RUSTC, [rustc], [rustc], [no]) dnl no ac_tool_prefix -dnl check if rustc is recent enough to build YJIT/ZJIT (rustc >= 1.58.0) +dnl check if rustc is recent enough to build YJIT (rustc >= 1.58.0) JIT_RUSTC_OK=no +JIT_TARGET_ARCH= AS_IF([test "$RUSTC" != "no"], - AC_MSG_CHECKING([whether ${RUSTC} works for YJIT/ZJIT]) - JIT_TARGET_ARCH= + AC_MSG_CHECKING([whether ${RUSTC} works for YJIT]) AS_CASE(["$target_cpu"], [arm64|aarch64], [JIT_TARGET_ARCH=aarch64], [x86_64], [JIT_TARGET_ARCH=x86_64], @@ -3893,33 +3970,43 @@ AS_IF([test "$cross_compiling" = no], ) ) -dnl build ZJIT in release mode if rustc >= 1.58.0 is present and we are on a supported platform -AC_ARG_ENABLE(zjit, - AS_HELP_STRING([--enable-zjit], - [enable in-process JIT compiler that requires Rust build tools. enabled by default on supported platforms if rustc 1.58.0+ is available]), - [ZJIT_SUPPORT=$enableval], - [AS_CASE(["$JIT_TARGET_OK:$JIT_RUSTC_OK:$YJIT_SUPPORT"], - [yes:yes:no], [ - ZJIT_SUPPORT=yes - ], - [ZJIT_SUPPORT=no] - )] -) - dnl build YJIT in release mode if rustc >= 1.58.0 is present and we are on a supported platform AC_ARG_ENABLE(yjit, AS_HELP_STRING([--enable-yjit], [enable in-process JIT compiler that requires Rust build tools. enabled by default on supported platforms if rustc 1.58.0+ is available]), [YJIT_SUPPORT=$enableval], - [AS_CASE(["$JIT_TARGET_OK:$JIT_RUSTC_OK:$ZJIT_SUPPORT"], - [yes:yes:no], [ + [AS_CASE(["$JIT_TARGET_OK:$JIT_RUSTC_OK"], + [yes:yes], [ YJIT_SUPPORT=yes ], [YJIT_SUPPORT=no] )] ) -CARGO= +dnl build ZJIT in release mode if rustc >= 1.85.0 is present and we are on a supported platform +ZJIT_SUPPORT=no +AC_ARG_ENABLE(zjit, + AS_HELP_STRING([--enable-zjit], + [enable experimental JIT compiler that requires Rust build tools. enabled by default on supported platforms if rustc 1.85.0+ is available]), + [ZJIT_SUPPORT=$enableval], + [AS_CASE(["$JIT_TARGET_OK"], + [yes], [ + rb_zjit_build_possible=no + AC_MSG_CHECKING([prerequisites for ZJIT])dnl only checked when --enable-zjit is not specified + # Fails in case rustc target doesn't match ruby target. Can happen on Rosetta, for example. + # 1.85.0 is the first stable version that supports the 2024 edition. + AS_IF([test "$RUSTC" != "no" && echo "#[cfg(target_arch = \"$JIT_TARGET_ARCH\")] fn main() {}" | + $RUSTC - --edition=2024 --emit asm=/dev/null 2>/dev/null], + AS_IF([test "$gnumake" = "yes"], [ + rb_zjit_build_possible=yes + ]) + ) + AC_MSG_RESULT($rb_zjit_build_possible) + ZJIT_SUPPORT=$rb_zjit_build_possible + ] + )] +) + CARGO_BUILD_ARGS= YJIT_LIBS= JIT_CARGO_SUPPORT=no @@ -3970,7 +4057,7 @@ AS_CASE(["${ZJIT_SUPPORT}"], [yes], [ ], [dev], [ - rb_cargo_features="$rb_cargo_features,disasm" + rb_cargo_features="$rb_cargo_features,disasm,runtime_checks" JIT_CARGO_SUPPORT=dev AC_DEFINE(RUBY_DEBUG, 1) ], @@ -3996,11 +4083,26 @@ AS_CASE(["${ZJIT_SUPPORT}"], AC_DEFINE(USE_ZJIT, 0) ]) -# if YJIT+ZJIT release build, or any build that requires Cargo -AS_IF([test x"$JIT_CARGO_SUPPORT" != "xno" -o \( x"$YJIT_SUPPORT" != "xno" -a x"$ZJIT_SUPPORT" != "xno" \)], [ +RUSTC_FLAGS='-g -C lto=thin -C opt-level=3 -C overflow-checks=on' +AS_IF([test -n "${rustc_flags}"], [ + RUSTC_FLAGS="${RUSTC_FLAGS} ${rustc_flags}" +]) + +JIT_RUST_FLAGS='--crate-type=staticlib --cfg feature=\"stats_allocator\"' +RLIB_DIR= +AS_CASE(["$JIT_CARGO_SUPPORT:$YJIT_SUPPORT:$ZJIT_SUPPORT"], +[no:yes:yes], [ # release build of YJIT+ZJIT + YJIT_LIBS= + ZJIT_LIBS= + JIT_RUST_FLAGS="--crate-type=rlib" + RLIB_DIR="target/release" + RUST_LIB="target/release/libruby.a" +], +[no:*], [], +[ # JIT_CARGO_SUPPORT not "no" -- cargo required. AC_CHECK_TOOL(CARGO, [cargo], [no]) AS_IF([test x"$CARGO" = "xno"], - AC_MSG_ERROR([cargo is required. Installation instructions available at https://www.rust-lang.org/tools/install])) + AC_MSG_ERROR([this build configuration requires cargo. Installation instructions available at https://www.rust-lang.org/tools/install])) YJIT_LIBS= ZJIT_LIBS= @@ -4023,9 +4125,9 @@ AS_IF([test x"$JIT_CARGO_SUPPORT" != "xno" -o \( x"$YJIT_SUPPORT" != "xno" -a x" ]) CARGO_BUILD_ARGS="--profile ${JIT_CARGO_SUPPORT} --features ${rb_cargo_features}" AS_IF([test "${JIT_CARGO_SUPPORT}" = "dev"], [ - RUST_LIB="target/debug/libjit.a" + RUST_LIB="target/debug/libruby.a" ], [ - RUST_LIB="target/${JIT_CARGO_SUPPORT}/libjit.a" + RUST_LIB="target/${JIT_CARGO_SUPPORT}/libruby.a" ]) ]) @@ -4042,6 +4144,8 @@ AS_IF([test -n "$RUST_LIB"], [ dnl These variables end up in ::RbConfig::CONFIG AC_SUBST(RUSTC)dnl Rust compiler command +AC_SUBST(JIT_RUST_FLAGS)dnl the common rustc flags for JIT crates such as zjit +AC_SUBST(RUSTC_FLAGS)dnl user-configurable rustc compiler flags AC_SUBST(CARGO)dnl Cargo command for Rust builds AC_SUBST(CARGO_BUILD_ARGS)dnl for selecting Rust build profiles AC_SUBST(YJIT_SUPPORT)dnl what flavor of YJIT the Ruby build includes @@ -4052,6 +4156,7 @@ AC_SUBST(ZJIT_LIBS)dnl path to the .a library of ZJIT AC_SUBST(ZJIT_OBJ)dnl for optionally building the C parts of ZJIT AC_SUBST(JIT_OBJ)dnl for optionally building C glue code for Rust FFI AC_SUBST(RUST_LIB)dnl path to the rust .a library that contains either or both JITs +AC_SUBST(RLIB_DIR)dnl subpath of build directory for .rlib files AC_SUBST(JIT_CARGO_SUPPORT)dnl "no" or the cargo profile of the rust code } @@ -4166,7 +4271,6 @@ enum { PLATFORM_DIR=win32 ]) LIBRUBY_ALIASES='' - FIRSTMAKEFILE=GNUmakefile:cygwin/GNUmakefile.in AS_IF([test x"$enable_shared" = xyes], [ LIBRUBY='lib$(RUBY_SO_NAME).dll.a' ], [ @@ -4176,7 +4280,6 @@ enum { ]) ], [wasi*], [ - FIRSTMAKEFILE=GNUmakefile:wasm/GNUmakefile.in AC_LIBOBJ([wasm/missing]) AC_LIBOBJ([wasm/runtime]) AC_LIBOBJ([wasm/fiber]) @@ -4193,21 +4296,6 @@ AC_ARG_ENABLE(debug-env, AS_HELP_STRING([--enable-debug-env], [enable RUBY_DEBUG environment variable]), [AC_SUBST(ENABLE_DEBUG_ENV, yes)]) -AS_CASE(["$FIRSTMAKEFILE"], [*GNUmakefile:*], [gnumake=yes], [ - AC_MSG_CHECKING([if ${MAKE-make} is GNU make]) - mkdir conftest.dir - echo "all:; @echo yes" > conftest.dir/GNUmakefile - echo "all:; @echo no" > conftest.dir/Makefile - gnumake=`(cd conftest.dir; ${MAKE-make})` - rm -fr conftest.dir - AS_CASE(["$gnumake"], - [*yes*], [ - FIRSTMAKEFILE=GNUmakefile:template/GNUmakefile.in - gnumake=yes], - [ - gnumake=no]) - AC_MSG_RESULT($gnumake) -]) AS_IF([test "$gnumake" = yes], [ NULLCMD=: ], [ AC_MSG_CHECKING([for safe null command for ${MAKE-make}]) mkdir conftest.dir @@ -4275,8 +4363,7 @@ AS_IF([test -n "${LIBS}"], [ MAINFLAGS=`echo " $MAINLIBS " | sed "s|$libspat"'||;s/^ *//;s/ *$//'` ]) LIBRUBYARG_STATIC="${LIBRUBYARG_STATIC} \$(MAINLIBS)" -CPPFLAGS="$CPPFLAGS "'$(DEFS)' -test -z "$CPPFLAGS" || CPPFLAGS="$CPPFLAGS "; CPPFLAGS="$CPPFLAGS"'${cppflags}' +CPPFLAGS="$CPPFLAGS "'$(DEFS) ${cppflags}' AS_IF([test -n "${cflags+set}"], [ cflagspat=`eval echo '"'"${cflags}"'"' | sed 's/[[][|.*]]/\\&/g;s/^ */ /;s/^ *$/ /'` CFLAGS=`echo " $CFLAGS " | sed "s|$cflagspat"'|${cflags}|;s/^ *//;s/ *$//'` @@ -4291,6 +4378,24 @@ AS_IF([test "${ARCH_FLAG}"], [ CXXFLAGS=`echo "$CXXFLAGS" | sed "s| *$archflagpat"'||'` LDFLAGS=`echo "$LDFLAGS" | sed "s| *$archflagpat"'||'` ]) +AS_CASE([" $rb_cv_warnflags "], [*" -Wshorten-64-to-32 "*|*" -Werror=shorten-64-to-32 "*], [ + voidp_ll= + AS_CASE([$ac_cv_sizeof_voidp], + [SIZEOF_LONG_LONG], [voidp_ll=true], + [@<:@0-9@:>@*], [ + AS_IF([test $ac_cv_sizeof_voidp -gt $ac_cv_sizeof_long], [voidp_ll=true]) + ]) + AS_IF([test "$voidp_ll"], [ + # Disable the shorten-64-to-32 warning for now, because it currently + # generates a lot of warnings on platforms where `sizeof(void*)` is + # larger than `sizeof(long)`. + # + # TODO: Replace `long` with `ptrdiff_t` or something in the all sources. + rb_cv_warnflags=`echo "$rb_cv_warnflags" | + sed -e 's/ -W\(shorten-64-to-32 \)/ -Wno-\1/' \ + -e 's/ -Werror=\(shorten-64-to-32 \)/ -Wno-\1/'` + ]) +]) rb_cv_warnflags=`echo "$rb_cv_warnflags" | sed 's/^ *//;s/ *$//'` warnflags="$rb_cv_warnflags" AC_SUBST(cppflags)dnl @@ -4333,7 +4438,6 @@ AC_SUBST(MINIOBJS) AC_SUBST(THREAD_MODEL) AC_SUBST(COROUTINE_TYPE, ${coroutine_type}) AC_SUBST(PLATFORM_DIR) -AC_SUBST(USE_LLVM_WINDRES) firstmf=`echo $FIRSTMAKEFILE | sed 's/:.*//'` firsttmpl=`echo $FIRSTMAKEFILE | sed 's/.*://'` @@ -4597,6 +4701,9 @@ m4_foreach(parser, [available_parsers], [AC_MSG_ERROR([Unknown parser: $with_parser])] ) +# Use the ruby allocator for prism. See prism/defines.h +RUBY_APPEND_OPTIONS(XCFLAGS, -DPRISM_XALLOCATOR) + arch_hdrdir="${EXTOUT}/include/${arch}/ruby" AS_MKDIR_P("${arch_hdrdir}") config_h="${arch_hdrdir}/config.h" @@ -4699,21 +4806,7 @@ AC_CONFIG_FILES(Makefile:template/Makefile.in, [ echo; echo '$(srcdir)/$(CONFIGURE):RUBY_M4_INCLUDED \ $(empty)' - } > $tmpmk && AS_IF([! grep '^ruby:' $tmpmk > /dev/null], [ - AS_IF([test "${gnumake}" = yes], [ - tmpgmk=confgmk$$.tmp - { - echo "include $tmpmk" - echo "-include uncommon.mk" - } > $tmpgmk - ], [ - tmpgmk=$tmpmk - ]) && - test -z "`${MAKE-make} -f $tmpgmk info-program | grep '^PROGRAM=ruby$'`" && - echo 'ruby: $(PROGRAM);' >> $tmpmk - rm -f uncommon.mk # remove stale uncommon.mk, it should be updated by GNUmakefile - test "$tmpmk" = "$tmpgmk" || rm -f "$tmpgmk" - ]) && mv -f $tmpmk Makefile], + } > $tmpmk && mv -f $tmpmk Makefile], [EXEEXT='$EXEEXT' MAKE='${MAKE-make}' gnumake='$gnumake' GIT='$GIT' YJIT_SUPPORT='$YJIT_SUPPORT']) AC_ARG_WITH([ruby-pc], @@ -4728,6 +4821,11 @@ AC_ARG_WITH(destdir, [DESTDIR="$withval"]) AC_SUBST(DESTDIR) +AS_IF([test "x$load_relative:$DESTDIR" = xyes:], [ + AS_IF([test "x$prefix" = xNONE], [DESTDIR="$ac_default_prefix"], [DESTDIR="$prefix"]) + prefix=/. +]) + AC_OUTPUT } @@ -4781,6 +4879,7 @@ config_summary "strip command" "$STRIP" config_summary "install doc" "$DOCTARGETS" config_summary "YJIT support" "$YJIT_SUPPORT" config_summary "ZJIT support" "$ZJIT_SUPPORT" +config_summary "RUSTC_FLAGS" "$RUSTC_FLAGS" config_summary "man page type" "$MANTYPE" config_summary "search path" "$search_path" config_summary "static-linked-ext" ${EXTSTATIC:+"yes"} |
