RFR: 8339128: Cannot resolve user specified tool properly after JDK-8338304

Magnus Ihse Bursie ihse at openjdk.org
Fri Nov 1 15:35:27 UTC 2024


On Fri, 1 Nov 2024 15:30:14 GMT, Magnus Ihse Bursie <ihse at openjdk.org> wrote:

>> Please review this PR that fixes JDK build configure failure when using clang after JDK-8338304:
>> 
>> 
>> Found candidate GCC installation: <snip>
>> Selected GCC installation: <snip>
>> ...
>> clang: error: unsupported option '-V -static-libgcc'
>> configure:85215: $? = 1
>> configure:85204: <snip> -qversion >&5
>> clang: error: unknown argument '-qversion'; did you mean '--version'?
>> ...
>> 
>> 
>> Tool from Clang GCC installation is being picked up unexpectedly (JDK build configured with `--with-toolchain-type=clang`). With this fix, it avoids `UTIL_REQUIRE_PROGS(LLD, lld)` if user supplies compiler toolchain. The user supplied compiler toolchain is used by setting `CXX=<user_specified_path_to_tools_script>` during configuration.
>
> make/autoconf/toolchain.m4 line 448:
> 
>> 446:       fi
>> 447:     fi
>> 448:     USE_USER_SUPPLIED_COMPILER=true
> 
> This code is called for both CC and CXX. So if you run like `configure CC=foo` (but not with `CXX=bar` at the same time), the value of this variable will be determined by which check happens to be run first by configure.

The solution to this conundrum is not trivial. You could use a `$1_IS_USER_SUPPLIED` instead, but then you need to determine what to do with the `lld` check. Maybe you should skip it if either of `CC_IS_USER_SUPPLIED` or `CXX_IS_USER_SUPPLIED` is true; or only if both.

I guess it is unlikely that anyone runs with such a combination, but it is possible and (technically sort-of) supported.

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/21817#discussion_r1825961901


More information about the build-dev mailing list