diff options
-rw-r--r-- | eclass/toolchain-funcs.eclass | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/eclass/toolchain-funcs.eclass b/eclass/toolchain-funcs.eclass index 121280a7f11f..d54175cf992f 100644 --- a/eclass/toolchain-funcs.eclass +++ b/eclass/toolchain-funcs.eclass @@ -548,6 +548,40 @@ tc-ld-is-lld() { return 1 } + +# @FUNCTION: tc-ld-is-mold +# @USAGE: [toolchain prefix] +# @DESCRIPTION: +# Return true if the current linker is set to mold. +tc-ld-is-mold() { + local out + + # Ensure ld output is in English. + local -x LC_ALL=C + + # First check the linker directly. + out=$($(tc-getLD "$@") --version 2>&1) + if [[ ${out} == *"mold"* ]] ; then + return 0 + fi + + # Then see if they're selecting mold via compiler flags. + # Note: We're assuming they're using LDFLAGS to hold the + # options and not CFLAGS/CXXFLAGS. + local base="${T}/test-tc-mold" + cat <<-EOF > "${base}.c" + int main(void) { return 0; } + EOF + out=$($(tc-getCC "$@") ${CFLAGS} ${CPPFLAGS} ${LDFLAGS} -Wl,--version "${base}.c" -o "${base}" 2>&1) + rm -f "${base}"* + if [[ ${out} == *"mold"* ]] ; then + return 0 + fi + + # No mold here! + return 1 +} + # @FUNCTION: tc-ld-disable-gold # @USAGE: [toolchain prefix] # @DESCRIPTION: |