Currently the jit requires you to specify --enable-host-shared, or the build eventually fails with linker errors (this is something of a FAQ for people trying out the jit).
We seem to have two choices here: (A) default to --enable-host-shared when jit is an enabled language (B) have the toplevel configure reject jit as language if --enable-host-shared is not supplied. FWIW apparently Darwin defaults to position-independent code, so it's not explicitly needed there. I think (B) is the better option for us, since there is a performance cost: there are people who perform benchmarking of GCC (and publish their results on prominent websites). If they turn on the jit and use the same configuration to do their benchmarking of the rest of GCC, they'll see GCC 5 be apparently slower than earlier releases. This is sufficiently subtle that I don't think it's reasonable to simply document it and expect 3rd-party reviewers to see such a note in the documentation before benchmarking. The attached patch implements (B), with a note in the error message recommending that people configure and build GCC twice to avoid the performance hit, so that it can be self-documenting. Tested by hand with various combinations of values for --enable-host-shared and --enable-languages. OK for stage 4? PR jit/64780 * configure.ac: Require the user to explicitly specify --enable-host-shared if the jit is enabled. * configure: Regenerate. --- configure | 24 ++++++++++++++++++++++++ configure.ac | 24 ++++++++++++++++++++++++ 2 files changed, 48 insertions(+) diff --git a/configure b/configure index 5860241..dd794db 100755 --- a/configure +++ b/configure @@ -14750,6 +14750,30 @@ fi +# PR jit/64780: Require the user to explicitly specify +# --enable-host-shared if the jit is enabled, hinting +# that they might want to do a separate configure/build of +# the jit, to avoid users from slowing down the rest of the +# compiler by enabling the jit. +if test ${host_shared} = "no" ; then + case "${enable_languages}" in + *jit*) + as_fn_error " +Enabling language \"jit\" requires --enable-host-shared. + +--enable-host-shared typically slows the rest of the compiler down by +a few %, so you must explicitly enable it. + +If you want to build both the jit and the regular compiler, it is often +best to do this via two separate configure/builds, in separate +directories, to avoid imposing the performance cost of +--enable-host-shared on the regular compiler." "$LINENO" 5 + ;; + *) + ;; + esac +fi + # Specify what files to not compare during bootstrap. compare_exclusions="gcc/cc*-checksum\$(objext) | gcc/ada/*tools/*" diff --git a/configure.ac b/configure.ac index 267c8e6..4ea5e00 100644 --- a/configure.ac +++ b/configure.ac @@ -3467,6 +3467,30 @@ AC_ARG_ENABLE(host-shared, [host_shared=$enableval], [host_shared=no]) AC_SUBST(host_shared) +# PR jit/64780: Require the user to explicitly specify +# --enable-host-shared if the jit is enabled, hinting +# that they might want to do a separate configure/build of +# the jit, to avoid users from slowing down the rest of the +# compiler by enabling the jit. +if test ${host_shared} = "no" ; then + case "${enable_languages}" in + *jit*) + AC_MSG_ERROR([ +Enabling language "jit" requires --enable-host-shared. + +--enable-host-shared typically slows the rest of the compiler down by +a few %, so you must explicitly enable it. + +If you want to build both the jit and the regular compiler, it is often +best to do this via two separate configure/builds, in separate +directories, to avoid imposing the performance cost of +--enable-host-shared on the regular compiler.]) + ;; + *) + ;; + esac +fi + # Specify what files to not compare during bootstrap. compare_exclusions="gcc/cc*-checksum\$(objext) | gcc/ada/*tools/*" -- 1.8.5.3