bsd.port.mk has this check to see whether a non-default linker exists: ---------------------------- revision 1.1468 date: 2019/05/28 20:08:17; author: naddy; state: Exp; lines: +6 -1; commitid: xn33Wb6skIgmKqtI; When switching to a non-default linker with USE_LLD, check whether that linker (ld.bfd, ld.lld) actually exists, otherwise skip the port. ok jca@ sthen@ ----------------------------
this was fine with linkers in the base os, but now we also support lld from ports ---------------------------- revision 1.1626 date: 2023/09/27 08:21:06; author: semarie; state: Exp; lines: +7 -1; commitid: t7EqTUvUeFoCAazh; extent USE_LLD to Yes/No/ports values. 'ports' permits to force the use of ld.lld from lang/clang module. ok landry@ ---------------------------- and there's a further complication now that we have both llvm 13 and 16 available; most ports are now using 16 but, on i386, lang/gcc requires lld from llvm 13. this typically results in the following from a bulk build: $ grep lang/gcc/8 engine.log 35995@1704094961.28: !: lang/gcc/8 requires /usr/local/llvm13/bin/ld.lld 35995@1704094961.28: !: lang/gcc/8,-libs requires /usr/local/llvm13/bin/ld.lld 35995@1704094961.28: !: lang/gcc/8,-f95 requires /usr/local/llvm13/bin/ld.lld 35995@1704094961.38: !: math/cblas because of lang/gcc/8,-libs 35995@1704094961.52: !: math/lapack because of lang/gcc/8,-f95 35995@1704094961.61: !: lang/gcc/8,-f95 ignored already 35995@1704094961.61: !: lang/gcc/8 ignored already 35995@1704094961.62: !: lang/gcc/8,-libs ignored already 35995@1704094961.90: !: math/blas because of lang/gcc/8,-f95 35995@1704094962.08: !: lang/gcc/8,-f95 ignored already 35995@1704094962.08: !: lang/gcc/8 ignored already 35995@1704094962.09: !: lang/gcc/8,-libs ignored already 35995@1704094975.39: !: astro/wcslib because of lang/gcc/8,-f95 35995@1704094979.29: !: audio/cmu-sphinx3 because of lang/gcc/8,-f95 35995@1704094979.41: !: audio/cmu-sphinxbase because of lang/gcc/8,-libs 35995@1704095135.51: !: devel/openmpi because of lang/gcc/8,-c++ 35995@1704095481.37: !: lang/compcert because of lang/gcc/8,-c++ 35995@1704095554.99: !: math/R because of lang/gcc/8 35995@1704095555.98: !: math/cfitsio because of lang/gcc/8 35995@1704095560.11: !: math/hdf5 because of lang/gcc/8,-f95 35995@1704095569.74: !: math/plplot,-fortran because of lang/gcc/8 35995@1704095569.74: !: math/plplot,-main because of lang/gcc/8 35995@1704095569.75: !: math/plplot,-c++ because of lang/gcc/8 35995@1704095573.57: !: math/qrupdate because of lang/gcc/8,-libs 35995@1704095574.02: !: math/suitesparse because of lang/gcc/8,-libs 35995@1704096153.87: !: x11/kde-applications/cantor because of lang/gcc/8,-f95 35995@1704096241.69: !: lang/gcc/8 ignored already 35995@1704096241.84: !: lang/gcc/8,-f95 ignored already 35995@1704096242.33: !: lang/gcc/8,-c++ requires /usr/local/llvm13/bin/ld.lld 35995@1704096242.73: !: lang/gcc/8,-libs ignored already and nothing with "lang/gcc/8,-f95" (i.e. gfortran) in the dependency chain will build (e.g. numpy -> boost -> various). Currently the only ports using USE_LLD=ports are lang/gcc/8 and lang/gcc/11, and only on i386. After trying many things, I think the diff below is probably the only way to fix it (short of fixing the issues that require using llvm 13's ld.lld for gcc). I haven't put this through a bulk, but I _have_ done a bulk with the IGNORE line commented-out (and not touching the !exists line) which I think is an equivalent test, and of course boost and friends are now getting built. Does anyone have comments/objections or would like to OK? Index: bsd.port.mk =================================================================== RCS file: /cvs/ports/infrastructure/mk/bsd.port.mk,v diff -u -p -r1.1636 bsd.port.mk --- bsd.port.mk 11 Nov 2023 11:53:38 -0000 1.1636 +++ bsd.port.mk 8 Jan 2024 22:12:34 -0000 @@ -821,7 +821,7 @@ _NONDEFAULT_LD = Yes .endif _NONDEFAULT_LD ?= No .if ${_NONDEFAULT_LD:L} == "yes" -. if !exists(${_LD_PROGRAM}) +. if !exists(${_LD_PROGRAM}) && ${USE_LLD:L} != "ports" IGNORE = "requires ${_LD_PROGRAM}" . endif .endif