解决一些p0问题

This commit is contained in:
2026-08-13 09:31:12 +08:00
parent ea61505472
commit d693318a02
32 changed files with 608 additions and 949 deletions
+18 -28
View File
@@ -67,7 +67,7 @@ init_by_env_name() {
gev_cur_env_name="${1}"
gev_cur_toolchain_name="${gev_cur_env_name}"
gev_target="${2}"
gev_target_env="/ae/env/${gev_cur_env_name}"
gev_target_env="${_ae_root_}/env/${gev_cur_env_name}"
# 这个地方可以改 sysroot 叫什么名称
gev_target_sysroot="${gev_target_env}/sysroot_${gev_target}"
gev_cross_dir="${gev_target_env}"
@@ -81,12 +81,16 @@ init_by_env_name() {
}
cacl_toolchain_name(){
cacl_toolchain_name() {
local -n ret="$1"
local build="$2"
local host="$3"
local target="$4"
local ver="$5"
if [[ -z "$build" || -z "$host" || -z "$target" || -z "$ver" ]]; then
log_error "cacl_toolchain_name requires build/host/target/ver"
return 1
fi
ver="${ver//\//_}"
ret="${ver}_${host}"
}
@@ -196,11 +200,14 @@ init_env_build_sysroot() {
# /ae/bash/0_git_cache_dir/gcc/build/gcc/specs
init_by_env_name "${1}"
local target="${2}"
if [[ -z "$target" ]]; then
log_error "ERROR: target is required for init_env_build_sysroot\n"
exit 1
fi
init_by_env_name "${1}" "$target"
local t_cpu t_vendor t_os t_abi
parse_triplet "$target" t_cpu t_vendor t_os t_abi
local linuxarch=$t_cpu
if [[ $linuxarch == "aarch64" ]]; then
linuxarch="arm64"
@@ -209,11 +216,6 @@ init_env_build_sysroot() {
elif [[ $linuxarch != x86_64 ]]; then
linuxarch="${linuxarch%%[0-9]*}"
fi
# 参数检查:确保必要参数存在
if [[ -z "$target" ]]; then
log_error "ERROR: target is required for init_env_build_sysroot\n"
exit 1
fi
local build_triplet build_triplet_no_vendor
detect_platform_triplet build_triplet build_triplet_no_vendor
(
@@ -228,7 +230,7 @@ init_env_build_sysroot() {
ensure_repo_version src_dir "linux" "${gev_linux_ver}"
cd $src_dir || exit 89
check_and_create_dir "${install_prefix}"
exec_record "make headers_install ARCH=${linuxarch} -j$(nproc) INSTALL_HDR_PATH=\"${install_prefix}\""
exec_record_fast_fail "make headers_install ARCH=${linuxarch} -j$(nproc) INSTALL_HDR_PATH=\"${install_prefix}\""
)
check_ret_exit "安装内核头文件失败!"
(
@@ -308,30 +310,20 @@ attach_env_local_cross() {
load_toolchains_under() {
local base="$1"
[[ -d "$base" ]] || return 0
local prefix trip
# base 下每个子目录当作一个工具链 prefix(例如 cross/gcc_xxx 或 canadian/gcc_xxx
local prefix
local trip
local n
for prefix in "$base"/*; do
[[ -d "$prefix" ]] || continue
[[ -d "$prefix/bin" ]] || continue
# prefix 下可能有 triplet 目录(aarch64-xxx-gnu 这类)
for trip in "$prefix"/*; do
[[ -d "$trip" ]] || continue
local n
n="$(basename "$trip")"
# 跳过常见非 triplet 目录
case "$n" in
bin | lib | lib64 | include | share | etc | var | tmp | sysroot | cross | canadian | libexec) continue ;;
bin|lib|lib64|include|share|etc|var|tmp|sysroot|cross|canadian|libexec) continue ;;
esac
load_toolchain "$prefix" "$n"
log_info "loaded toolchain: prefix=$prefix triplet=$n\n"
# 满足目录形态才加载
if [[ -d "$prefix/$n/usr" || -d "$prefix/$n/sysroot/usr" || -d "$prefix/$n/sysroot/lib" ]]; then
if [[ -d "$prefix/$n/usr" || -d "$prefix/$n/sysroot/usr" || -d "$prefix/$n/sysroot/lib" || -d "$prefix/$n/sysroot/lib64" ]]; then
load_toolchain "$prefix" "$n"
log_info "loaded toolchain: prefix=$prefix triplet=$n\n"
log_info "loaded toolchain: prefix=%s triplet=%s" "$prefix" "$n"
fi
done
done
@@ -349,8 +341,6 @@ attach_env_canadian_stage3() {
bge_build="$gev_local_triplet"
bge_host="$host"
bge_target="$target"
local toolchain_name
local toolchain_name
cacl_toolchain_name_canadian toolchain_name "${host}" "${ver}"
bge_install_prefix="${gev_canadian_dir}/${toolchain_name}"