Prefer lld for naive musl builds
This commit is contained in:
+30
-7
@@ -71,6 +71,10 @@ uses_musl_toolchain() {
|
|||||||
has_build_tag "with_musl"
|
has_build_tag "with_musl"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
prefers_lld_linker() {
|
||||||
|
has_build_tag "with_naive_outbound"
|
||||||
|
}
|
||||||
|
|
||||||
goarch_to_sdk_cc_name() {
|
goarch_to_sdk_cc_name() {
|
||||||
case "$1" in
|
case "$1" in
|
||||||
arm64) echo "aarch64-openwrt-linux-musl-gcc" ;;
|
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_bfd_name="$(goarch_to_sdk_ld_bfd_name "$goarch")" || return 1
|
||||||
ld_name="$(goarch_to_sdk_ld_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")"
|
ld_bin="$(find_toolchain_binary "$sdk_dir" "$ld_bfd_name")"
|
||||||
if [ -n "$ld_bin" ]; then
|
if [ -n "$ld_bin" ]; then
|
||||||
echo "$ld_bin"
|
echo "$ld_bin"
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
ld_bin="$(find_toolchain_binary "$sdk_dir" "$ld_name")"
|
find_toolchain_binary "$sdk_dir" "$ld_name"
|
||||||
if [ -n "$ld_bin" ]; then
|
|
||||||
echo "$ld_bin"
|
|
||||||
return 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
find_lld_binary "$sdk_dir"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
find_lld_binary() {
|
find_lld_binary() {
|
||||||
|
|||||||
+30
-7
@@ -68,6 +68,10 @@ uses_musl_toolchain() {
|
|||||||
has_build_tag "with_musl"
|
has_build_tag "with_musl"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
prefers_lld_linker() {
|
||||||
|
has_build_tag "with_naive_outbound"
|
||||||
|
}
|
||||||
|
|
||||||
goarch_to_sdk_cc_name() {
|
goarch_to_sdk_cc_name() {
|
||||||
case "$1" in
|
case "$1" in
|
||||||
arm64) echo "aarch64-openwrt-linux-musl-gcc" ;;
|
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_bfd_name="$(goarch_to_sdk_ld_bfd_name "$goarch")" || return 1
|
||||||
ld_name="$(goarch_to_sdk_ld_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")"
|
ld_bin="$(find_toolchain_binary "$sdk_dir" "$ld_bfd_name")"
|
||||||
if [ -n "$ld_bin" ]; then
|
if [ -n "$ld_bin" ]; then
|
||||||
echo "$ld_bin"
|
echo "$ld_bin"
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
ld_bin="$(find_toolchain_binary "$sdk_dir" "$ld_name")"
|
find_toolchain_binary "$sdk_dir" "$ld_name"
|
||||||
if [ -n "$ld_bin" ]; then
|
|
||||||
echo "$ld_bin"
|
|
||||||
return 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
find_lld_binary "$sdk_dir"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
find_lld_binary() {
|
find_lld_binary() {
|
||||||
|
|||||||
+12
-3
@@ -78,11 +78,20 @@ define Build/Compile
|
|||||||
if [ -n "$(SINGBOX_RR_LD_LLD_BIN)" ]; then \
|
if [ -n "$(SINGBOX_RR_LD_LLD_BIN)" ]; then \
|
||||||
ld_bin="$(SINGBOX_RR_LD_LLD_BIN)"; \
|
ld_bin="$(SINGBOX_RR_LD_LLD_BIN)"; \
|
||||||
else \
|
else \
|
||||||
ld_bin=$$$$(command -v $(TARGET_CROSS)ld.bfd); \
|
if printf '%s' "$(SINGBOX_RR_TAGS)" | tr ',' '\n' | grep -qx 'with_naive_outbound'; then \
|
||||||
[ -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); \
|
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); \
|
[ -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; \
|
||||||
fi; \
|
fi; \
|
||||||
[ -x "$$$$ld_bin" ] || { echo "no suitable linker found for $(TARGET_CC)"; exit 1; }; \
|
[ -x "$$$$ld_bin" ] || { echo "no suitable linker found for $(TARGET_CC)"; exit 1; }; \
|
||||||
|
|||||||
Reference in New Issue
Block a user