projects
/
ldk-c-bindings
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
6ff7132
)
Use correct lld to match rustc LLVM version (if available)
author
Matt Corallo
<git@bluematt.me>
Wed, 7 Jul 2021 19:54:25 +0000
(19:54 +0000)
committer
Matt Corallo
<git@bluematt.me>
Fri, 9 Jul 2021 02:24:39 +0000
(
02:24
+0000)
genbindings.sh
patch
|
blob
|
history
diff --git
a/genbindings.sh
b/genbindings.sh
index de5379c2716fd217079b7c649b7d9953dd30fa98..094bfedc3a8d9e8af8430fce1fef418f892c6666 100755
(executable)
--- a/
genbindings.sh
+++ b/
genbindings.sh
@@
-273,7
+273,7
@@
else
echo "WARNING: Can't use memory sanitizer on non-Linux, non-x86 platforms"
fi
echo "WARNING: Can't use memory sanitizer on non-Linux, non-x86 platforms"
fi
-RUSTC_LLVM_V=$(rustc --version --verbose | grep "LLVM version" | awk '{ print substr($3, 0,
2); }' | tr -d '.
')
+RUSTC_LLVM_V=$(rustc --version --verbose | grep "LLVM version" | awk '{ print substr($3, 0,
4); }
')
if [ "$HOST_PLATFORM" = "host: x86_64-apple-darwin" ]; then
# Apple is special, as always, and their versions of clang aren't
if [ "$HOST_PLATFORM" = "host: x86_64-apple-darwin" ]; then
# Apple is special, as always, and their versions of clang aren't
@@
-282,16
+282,26
@@
if [ "$HOST_PLATFORM" = "host: x86_64-apple-darwin" ]; then
echo "Apple clang isn't compatible with upstream clang, install upstream clang"
CLANG_LLVM_V="0"
else
echo "Apple clang isn't compatible with upstream clang, install upstream clang"
CLANG_LLVM_V="0"
else
- CLANG_LLVM_V=$(clang --version | head -n1 | awk '{ print substr($4, 0, 2); }' | tr -d '.')
+ CLANG_LLVM_V=$(clang --version | head -n1 | awk '{ print substr($4, 0, 4); }')
+ if [ -x "$(which ld64.lld)" ]; then
+ LLD_LLVM_V="$(ld64.lld --version | awk '{ print substr($2, 0, 4); }')"
+ fi
fi
else
fi
else
- CLANG_LLVM_V=$(clang --version | head -n1 | awk '{ print substr($4, 0, 2); }' | tr -d '.')
+ CLANG_LLVM_V=$(clang --version | head -n1 | awk '{ print substr($4, 0, 4); }')
+ if [ -x "$(which ld.lld)" ]; then
+ LLD_LLVM_V="$(ld.lld --version | awk '{ print substr($2, 0, 4); }')"
+ fi
fi
fi
+
if [ "$CLANG_LLVM_V" = "$RUSTC_LLVM_V" ]; then
CLANG=clang
CLANGPP=clang++
if [ "$CLANG_LLVM_V" = "$RUSTC_LLVM_V" ]; then
CLANG=clang
CLANGPP=clang++
-elif [ "$(which clang-$RUSTC_LLVM_V)" != "" ]; then
+ if [ "$LLD_LLVM_V" = "$CLANG_LLVM_V" ]; then
+ LLD=lld
+ fi
+elif [ -x "$(which clang-$RUSTC_LLVM_V)" ]; then
CLANG="$(which clang-$RUSTC_LLVM_V)"
CLANGPP="$(which clang++-$RUSTC_LLVM_V || echo clang++)"
if [ "$($CLANG --version)" != "$($CLANGPP --version)" ]; then
CLANG="$(which clang-$RUSTC_LLVM_V)"
CLANGPP="$(which clang++-$RUSTC_LLVM_V || echo clang++)"
if [ "$($CLANG --version)" != "$($CLANGPP --version)" ]; then
@@
-299,6
+309,14
@@
elif [ "$(which clang-$RUSTC_LLVM_V)" != "" ]; then
unset CLANG
unset CLANGPP
fi
unset CLANG
unset CLANGPP
fi
+ if [ "$LLD_LLVM_V" != "$RUSTC_LLVM_V" ]; then
+ LLD="$(which lld-$RUSTC_LLVM_V || echo lld)"
+ LLD_LLVM_V="$(ld.$LLD --version | awk '{ print substr($2, 0, 4); }')"
+ if [ "$LLD_LLVM_V" != "$RUSTC_LLVM_V" ]; then
+ echo "Could not find a workable version of lld, not using cross-language LTO"
+ unset LLD
+ fi
+ fi
fi
if [ "$CLANG" != "" -a "$CLANGPP" = "" ]; then
fi
if [ "$CLANG" != "" -a "$CLANGPP" = "" ]; then
@@
-380,7
+398,7
@@
if [ "$CFLAGS_aarch64_apple_darwin" != "" ]; then
RUSTFLAGS="$BASE_RUSTFLAGS -C target-cpu=apple-a14" CARGO_PROFILE_RELEASE_LTO=true cargo rustc -v --release --target aarch64-apple-darwin -- -C lto
fi
RUSTFLAGS="$BASE_RUSTFLAGS -C target-cpu=apple-a14" CARGO_PROFILE_RELEASE_LTO=true cargo rustc -v --release --target aarch64-apple-darwin -- -C lto
fi
-if [ "$HOST_PLATFORM" != "host: x86_64-apple-darwin" -a "$CLANGPP" != "" ]; then
+if [ "$HOST_PLATFORM" != "host: x86_64-apple-darwin" -a "$CLANGPP" != ""
-a "$LLD" != ""
]; then
# Finally, test cross-language LTO. Note that this will fail if rustc and clang++
# build against different versions of LLVM (eg when rustc is installed via rustup
# or Ubuntu packages). This should work fine on Distros which do more involved
# Finally, test cross-language LTO. Note that this will fail if rustc and clang++
# build against different versions of LLVM (eg when rustc is installed via rustup
# or Ubuntu packages). This should work fine on Distros which do more involved
@@
-389,7
+407,7
@@
if [ "$HOST_PLATFORM" != "host: x86_64-apple-darwin" -a "$CLANGPP" != "" ]; then
export CFLAGS_$ENV_TARGET="$BASE_CFLAGS -O3 -fPIC -fembed-bitcode -march=sandybridge"
# Rust doesn't recognize CFLAGS changes, so we need to clean build artifacts
cargo clean --release
export CFLAGS_$ENV_TARGET="$BASE_CFLAGS -O3 -fPIC -fembed-bitcode -march=sandybridge"
# Rust doesn't recognize CFLAGS changes, so we need to clean build artifacts
cargo clean --release
- CARGO_PROFILE_RELEASE_LTO=true cargo rustc -v --release -- -C linker-plugin-lto -C lto -C link
-arg=-fuse-ld=lld
+ CARGO_PROFILE_RELEASE_LTO=true cargo rustc -v --release -- -C linker-plugin-lto -C lto -C link
er=$CLANG -C link-arg=-fuse-ld=$LLD
$CLANGPP $LOCAL_CFLAGS -flto -fuse-ld=lld -O2 demo.cpp target/release/libldk.a -ldl
strip ./a.out
echo "C++ Bin size and runtime with cross-language LTO:"
$CLANGPP $LOCAL_CFLAGS -flto -fuse-ld=lld -O2 demo.cpp target/release/libldk.a -ldl
strip ./a.out
echo "C++ Bin size and runtime with cross-language LTO:"