Prefer lld for naive musl builds

This commit is contained in:
2026-05-17 00:45:56 +03:00
parent eb01a46523
commit d641d4456f
3 changed files with 72 additions and 17 deletions
+30 -7
View File
@@ -71,6 +71,10 @@ uses_musl_toolchain() {
has_build_tag "with_musl"
}
prefers_lld_linker() {
has_build_tag "with_naive_outbound"
}
goarch_to_sdk_cc_name() {
case "$1" in
arm64) echo "aarch64-openwrt-linux-musl-gcc" ;;
@@ -124,19 +128,38 @@ find_linker_binary() {
ld_bfd_name="$(goarch_to_sdk_ld_bfd_name "$goarch")" || return 1
ld_name="$(goarch_to_sdk_ld_name "$goarch")" || return 1
if prefers_lld_linker; then
ld_bin="$(find_lld_binary "$sdk_dir")"
if [ -n "$ld_bin" ]; then
echo "$ld_bin"
return 0
fi
else
ld_bin="$(find_toolchain_binary "$sdk_dir" "$ld_bfd_name")"
if [ -n "$ld_bin" ]; then
echo "$ld_bin"
return 0
fi
ld_bin="$(find_toolchain_binary "$sdk_dir" "$ld_name")"
if [ -n "$ld_bin" ]; then
echo "$ld_bin"
return 0
fi
fi
if ! prefers_lld_linker; then
find_lld_binary "$sdk_dir"
return 0
fi
ld_bin="$(find_toolchain_binary "$sdk_dir" "$ld_bfd_name")"
if [ -n "$ld_bin" ]; then
echo "$ld_bin"
return 0
fi
ld_bin="$(find_toolchain_binary "$sdk_dir" "$ld_name")"
if [ -n "$ld_bin" ]; then
echo "$ld_bin"
return 0
fi
find_lld_binary "$sdk_dir"
find_toolchain_binary "$sdk_dir" "$ld_name"
}
find_lld_binary() {
+30 -7
View File
@@ -68,6 +68,10 @@ uses_musl_toolchain() {
has_build_tag "with_musl"
}
prefers_lld_linker() {
has_build_tag "with_naive_outbound"
}
goarch_to_sdk_cc_name() {
case "$1" in
arm64) echo "aarch64-openwrt-linux-musl-gcc" ;;
@@ -121,19 +125,38 @@ find_linker_binary() {
ld_bfd_name="$(goarch_to_sdk_ld_bfd_name "$goarch")" || return 1
ld_name="$(goarch_to_sdk_ld_name "$goarch")" || return 1
if prefers_lld_linker; then
ld_bin="$(find_lld_binary "$sdk_dir")"
if [ -n "$ld_bin" ]; then
echo "$ld_bin"
return 0
fi
else
ld_bin="$(find_toolchain_binary "$sdk_dir" "$ld_bfd_name")"
if [ -n "$ld_bin" ]; then
echo "$ld_bin"
return 0
fi
ld_bin="$(find_toolchain_binary "$sdk_dir" "$ld_name")"
if [ -n "$ld_bin" ]; then
echo "$ld_bin"
return 0
fi
fi
if ! prefers_lld_linker; then
find_lld_binary "$sdk_dir"
return 0
fi
ld_bin="$(find_toolchain_binary "$sdk_dir" "$ld_bfd_name")"
if [ -n "$ld_bin" ]; then
echo "$ld_bin"
return 0
fi
ld_bin="$(find_toolchain_binary "$sdk_dir" "$ld_name")"
if [ -n "$ld_bin" ]; then
echo "$ld_bin"
return 0
fi
find_lld_binary "$sdk_dir"
find_toolchain_binary "$sdk_dir" "$ld_name"
}
find_lld_binary() {
+12 -3
View File
@@ -78,11 +78,20 @@ define Build/Compile
if [ -n "$(SINGBOX_RR_LD_LLD_BIN)" ]; then \
ld_bin="$(SINGBOX_RR_LD_LLD_BIN)"; \
else \
ld_bin=$$$$(command -v $(TARGET_CROSS)ld.bfd); \
[ -n "$$$$ld_bin" ] || ld_bin=$$$$(command -v $(TARGET_CROSS)ld); \
if [ -z "$$$$ld_bin" ]; then \
if printf '%s' "$(SINGBOX_RR_TAGS)" | tr ',' '\n' | grep -qx 'with_naive_outbound'; then \
ld_bin=$$$$(find "$(TOPDIR)/staging_dir/host" -maxdepth 3 -name ld.lld | head -n1); \
[ -n "$$$$ld_bin" ] || ld_bin=$$$$(find "$(TOPDIR)/staging_dir/host" -maxdepth 3 -type f -name lld | head -n1); \
if [ -z "$$$$ld_bin" ]; then \
ld_bin=$$$$(command -v $(TARGET_CROSS)ld.bfd); \
[ -n "$$$$ld_bin" ] || ld_bin=$$$$(command -v $(TARGET_CROSS)ld); \
fi; \
else \
ld_bin=$$$$(command -v $(TARGET_CROSS)ld.bfd); \
[ -n "$$$$ld_bin" ] || ld_bin=$$$$(command -v $(TARGET_CROSS)ld); \
if [ -z "$$$$ld_bin" ]; then \
ld_bin=$$$$(find "$(TOPDIR)/staging_dir/host" -maxdepth 3 -name ld.lld | head -n1); \
[ -n "$$$$ld_bin" ] || ld_bin=$$$$(find "$(TOPDIR)/staging_dir/host" -maxdepth 3 -type f -name lld | head -n1); \
fi; \
fi; \
fi; \
[ -x "$$$$ld_bin" ] || { echo "no suitable linker found for $(TARGET_CC)"; exit 1; }; \