Skip to content

Commit

Permalink
toolchain-funcs.eclass: fix tc-ld-disable-gold when using clang
Browse files Browse the repository at this point in the history
tc-ld-disable-gold checks gcc version to see if we have gcc-4.8+
The version check fails if clang is set as the compiler.
  $ clang -E -P - <<<"__GNUC__ __GNUC_MINOR__ __GNUC_PATCHLEVEL__"
  4 2 1
i.e. clang returns a gcc version of 4.2.1
This results in incorrectly adding -B ... to LDFLAGS, when clang
supports "-fuse-ld" just fine.

Support for "-fuse-ld" first appeared in clang-3.5, so check clang
version and use the flag if supported.
  • Loading branch information
Rahul Chaudhry authored and blueness committed May 26, 2018
1 parent 5c991b4 commit 1b4a999
Showing 1 changed file with 22 additions and 8 deletions.
30 changes: 22 additions & 8 deletions eclass/toolchain-funcs.eclass
Original file line number Diff line number Diff line change
Expand Up @@ -391,11 +391,28 @@ tc-ld-disable-gold() {
local path_ld=$(which "${bfd_ld}" 2>/dev/null)
[[ -e ${path_ld} ]] && export LD=${bfd_ld}

# Set up LDFLAGS to select gold based on the gcc version.
local major=$(gcc-major-version "$@")
local minor=$(gcc-minor-version "$@")
if [[ ${major} -lt 4 ]] || [[ ${major} -eq 4 && ${minor} -lt 8 ]] ; then
# <=gcc-4.7 requires some coercion. Only works if bfd exists.
# Set up LDFLAGS to select gold based on the gcc / clang version.
local fallback="true"
if tc-is-gcc; then
local major=$(gcc-major-version "$@")
local minor=$(gcc-minor-version "$@")
if [[ ${major} -gt 4 ]] || [[ ${major} -eq 4 && ${minor} -ge 8 ]]; then
# gcc-4.8+ supports -fuse-ld directly.
export LDFLAGS="${LDFLAGS} -fuse-ld=bfd"
fallback="false"
fi
elif tc-is-clang; then
local major=$(clang-major-version "$@")
local minor=$(clang-minor-version "$@")
if [[ ${major} -gt 3 ]] || [[ ${major} -eq 3 && ${minor} -ge 5 ]]; then
# clang-3.5+ supports -fuse-ld directly.
export LDFLAGS="${LDFLAGS} -fuse-ld=bfd"
fallback="false"
fi
fi
if [[ ${fallback} == "true" ]] ; then
# <=gcc-4.7 and <=clang-3.4 require some coercion.
# Only works if bfd exists.
if [[ -e ${path_ld} ]] ; then
local d="${T}/bfd-linker"
mkdir -p "${d}"
Expand All @@ -404,9 +421,6 @@ tc-ld-disable-gold() {
else
die "unable to locate a BFD linker to bypass gold"
fi
else
# gcc-4.8+ supports -fuse-ld directly.
export LDFLAGS="${LDFLAGS} -fuse-ld=bfd"
fi
}

Expand Down

0 comments on commit 1b4a999

Please sign in to comment.