RFR: 8343883: Cannot resolve user specified toolchain-path for lld after JDK-8338304

Magnus Ihse Bursie ihse at openjdk.org
Tue Nov 12 13:31:12 UTC 2024


On Sun, 10 Nov 2024 04:09:58 GMT, SendaoYan <syan at openjdk.org> wrote:

> Hi all,
> After [JDK-8338304](https://bugs.openjdk.org/browse/JDK-8338304), below configure command will generate failure `error: Could not find required tool for LLD`. The lld linker located in path which config with option `--with-toolchain-path`, but the check `UTIL_REQUIRE_PROGS(LLD, lld)` introduced by [JDK-8338304](https://bugs.openjdk.org/browse/JDK-8338304) was unable to find the lld. This PR add the condition to deal with user specidied `--with-toolchain-path` to find the correct lld fullpath. The change has beeen verified locally, trivial fix, the risk is low.
> 
> 
> bash configure --with-jobs=128 --with-debug-level=release --enable-unlimited-crypto --with-jvm-variants=server --with-version-opt=f4008968 --with-zlib=system --with-toolchain-type=clang --with-toolchain-path=/home/yansendao/software/acc/x86_64/bin

My first reaction was that "You need to use `UTIL_LOOKUP_TOOLCHAIN_PROGS` instead". But then I checked that it did what I thought it did, and it did not... It should have prepended `$TOOLCHAIN_PATH` to the set of paths to search, but instead we do this by changing the actual path in `TOOLCHAIN_PRE_DETECTION`. I think this is a remnant of older times, before we started using our own `UTIL_LOOKUP*` functions. 

I think the *proper* solution is to remove this setting of the PATH from `TOOLCHAIN_PRE/POST_DETECTION`, and instead update `UTIL_LOOKUP_TOOLCHAIN_PROGS`  to use `$TOOLCHAIN_PATH:$PATH` as 3rd variable to `UTIL_LOOKUP_PROGS` (if it is not given), and then finally to use `UTIL_LOOKUP_TOOLCHAIN_PROGS` for LLD here in `FLAGS_SETUP_LDFLAGS_HELPER`.

But.

That is a bit of a risky change that can cause breakage, so I will not propose you do it now.

make/autoconf/flags-ldflags.m4 line 78:

> 76:       if test "x$CXX_IS_USER_SUPPLIED" = xfalse && test "x$CC_IS_USER_SUPPLIED" = xfalse; then
> 77:         if test "x$TOOLCHAIN_PATH" != x; then
> 78:           UTIL_REQUIRE_PROGS(LLD, lld, $TOOLCHAIN_PATH)

Instead, keep this somewhat hacky workaround, but make it function properly by doing this:

Suggestion:

          UTIL_REQUIRE_PROGS(LLD, lld, $TOOLCHAIN_PATH:$PATH)

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

PR Comment: https://git.openjdk.org/jdk/pull/21999#issuecomment-2470528643
PR Review Comment: https://git.openjdk.org/jdk/pull/21999#discussion_r1838102108


More information about the build-dev mailing list