Files
build_toochain/linux_shell/build_script/main.bash
T
2026-07-07 15:23:39 +08:00

210 lines
6.6 KiB
Bash

#!/bin/bash
#!/bin/bash
# shellcheck disable=SC2155
if ! type "include" >/dev/null 2>&1; then
include() {
# echo "${1} ${2}"
. "$(cd "$(dirname "$1")" && pwd)/${2}"
}
fi
include "${BASH_SOURCE[0]}" ./pragma_once.bash
if ! pragma_once ${BASH_SOURCE[0]}; then
return 0
fi
include "${BASH_SOURCE[0]}" ./attach/export.bash
include "${BASH_SOURCE[0]}" ./patch/export.bash
include "${BASH_SOURCE[0]}" ./libc/export.bash
include "${BASH_SOURCE[0]}" ./base/export.bash
include "${BASH_SOURCE[0]}" ./llvm/export.bash
# shellcheck source=./attach/export.bash
# shellcheck source=./patch/export.bash
# shellcheck source=./libc/export.bash
# shellcheck source=./base/export.bash
# shellcheck source=./llvm/export.bash
include "${BASH_SOURCE[0]}" ./cmake.bash
include "${BASH_SOURCE[0]}" ./lld.bash
include "${BASH_SOURCE[0]}" ./install_llvm.bash
# shellcheck source=./cmake.bash
# shellcheck source=./lld.bash
# shellcheck source=./install_llvm.bash
install_win_mingw_run_time() {
local install_prefix="$1"
local target="x86_64-w64-mingw32"
check_directory "${install_prefix}"
log_info "Copying MinGW runtime DLLs"
log_info "Source: /usr/${target}/lib"
log_info "Dest : ${install_prefix}"
mkdir -p "${install_prefix}"
find "/usr/${target}" -name "*.dll" | while read -r f; do
cp -a "$f" "${install_prefix}/"
log_info "file: ${f} "
done
find "/usr/lib/gcc/${target}" -path "*-posix/*.dll" | while read -r f; do
cp -a "$f" "${install_prefix}/"
log_info "file: ${f}"
done
log_info "Done!"
}
function safe_llvm_strip {
# Check if a directory parameter is provided
if [[ -z "$1" ]]; then
echo "No directory specified. Exiting."
return 1
fi
# Directory parameter
local dir="$1"
# Find all regular files in the specified directory and subdirectories
find "$dir" -type f | while read -r file; do
# Attempt to strip the file
llvm-strip --strip-unneeded "$file" 2>/dev/null
done
}
echo "工作目录: $(pwd)"
build_kylin_ver() {
local ver=${1}
local ver2=${2}
local toolchain_name
local host="x86_64-w64-mingw32"
cacl_toolchain_name_canadian toolchain_name "${host}" "${ver}"
local toolchain_root="${gev_canadian_dir}/${toolchain_name}"
# 编译交叉编译工具
attach_env_local_cross "${ver}"
# 解压python库
local pkg_root="/ae/pkg_mingw-w64-x86_64"
mkdir -p "${toolchain_root}"
# --debug-trycompile --debug-output -DCMAKE_TRY_COMPILE_NO_CLEANUP
# 工具链运行的时候居然也需要 zlib1.dll 但是没重装系统前没发现
local python_pkg="${pkg_root}/mingw-w64-x86_64-python-3.12.12-1-any.pkg.tar.zst"
tar --zstd -xf "${python_pkg}" -C "${toolchain_root}" --strip-components=1 mingw64
local zlib_pkg="${pkg_root}/mingw-w64-x86_64-zlib-1.3.2-2-any.pkg.tar.zst"
tar --zstd -xf "${zlib_pkg}" -C "${toolchain_root}" --strip-components=1 mingw64
local script_text
local script_path="${toolchain_root}/configure_python.bash"
# 生成configure 脚本
gen_python_pth "${toolchain_root}/lib/python3.12/site-packages/myenv.pth" \
".." \
"../lib-dynload"
generate_case_dispatch_script_string script_text \
'--includes|--cflags' "-I ${toolchain_root}/include/python3.12" \
'--ldflags|--libs' "${toolchain_root}/lib/libpython3.12.dll.a" \
'--exec-prefix' "${toolchain_root}"
printf '%s' "$script_text" >"${script_path}"
chmod 777 "${script_path}"
# 后就
bge_binutils_gdb_suffix_opts=" --with-python=${script_path} --enable-targets=all --disable-sim"
attach_env_canadian_stage3 "${host}" "${ver}"
bge_binutils_gdb_suffix_opts=""
# 安装mingw 运行时库
install_win_mingw_run_time "${toolchain_root}/bin"
#install_win_mingw_run_time "${toolchain_root}/libexec/gcc/${target}/${ver2}"
# 非递归复制
local libexec_runtime_dir="${toolchain_root}/libexec/gcc/${target}/${ver2}"
check_directory_var libexec_runtime_dir
cp "${toolchain_root}/bin/"*.dll "${libexec_runtime_dir}"
local target_bin="${toolchain_root}/${target}/bin"
check_directory_var target_bin
cp "${toolchain_root}/bin/"*.dll "${target_bin}"
}
build_arm_kylin() {
name="win_arm_kylin_414_1224"
local target="aarch64-linux-gnu"
local sysroot="/ae/sysroots/arm_kylin"
init_env "${name}" "${sysroot}" "${target}"
gev_cur_toolchain_name="arm_kylin"
local root="${gev_target_sysroot}"
check_and_create_dir_var root
patch_system_qt5 "${root}" "${root}/usr/lib/aarch64-linux-gnu/cmake" "/ae/sysroots/win_qt_host_tool/5.14.2/msvc2017_64/qt5/bin"
build_kylin_ver "releases/gcc-9.3.0" "9.3.0"
#build_kylin_ver "releases/gcc-15.2.0" "15.2.0"
compress_directory_tar_gz "/ae/env/${name}" "/ae/env" "${name}.tar.gz"
}
#build_arm_kylin
build_local_gcc() {
name="local_ubuntu2004_15_10_527_1412"
local target="x86_64-linux-gnu"
local sysroot="/ae/sysroots/ubuntu2004"
local ver="releases/gcc-15.1.0"
gev_cur_toolchain_name="local_gcc"
init_env "${name}" "${sysroot}" "${target}"
attach_env_local_cross "${ver}"
compress_directory_tar_gz "/ae/env/${name}" "/ae/env" "${name}.tar.gz"
}
build_ubuntu_2004() {
# 填写 15.1.0 9.3.0 这种
local name=$1
local inter_ver=$2
local local_gcc_toolchain_dir=$3
name="${name}_${inter_ver}"
local target="x86_64-linux-gnu"
local sysroot="/ae/sysroots/debootstrap_ubuntu_2004"
local ver="releases/gcc-${inter_ver}"
local ver2="${inter_ver}"
init_env "${name}" "${sysroot}" "${target}"
gev_cur_toolchain_name="ubuntu_2004_${target}_${inter_ver}"
if [ -z "$local_gcc_toolchain_dir" ]; then
attach_env_local_cross "${ver}"
fi
local host="x86_64-w64-mingw32"
local toolchain_name
cacl_toolchain_name_canadian toolchain_name "${host}" "${ver}"
local toolchain_root="${gev_canadian_dir}/${toolchain_name}"
load_toolchain "${local_gcc_toolchain_dir}" "${target}"
attach_env_canadian_stage3 "${host}" "${ver}"
local pkg_root="/ae/pkg_mingw-w64-x86_64"
local zlib_pkg
download_msys2_pkg zlib_pkg "mingw64" "mingw-w64-x86_64-zlib-1.3.2-2-any.pkg.tar.zst" "${pkg_root}"
# zlib_pkg="$(
# download_msys2_pkg \
# "mingw64" \
# "mingw-w64-x86_64-zlib-1.3.2-2-any.pkg.tar.zst" \
# "${pkg_root}" \
# "9e75842a070ba648e986e12424e1c92c9d7d77200e85f6a34eeb600819f2e694"
# )"
install_win_mingw_run_time "${toolchain_root}/bin"
local libexec_runtime_dir="${toolchain_root}/libexec/gcc/${target}/${ver2}"
check_directory_var libexec_runtime_dir
cp "${toolchain_root}/bin/"*.dll "${libexec_runtime_dir}"
local target_bin="${toolchain_root}/${target}/bin"
check_directory_var target_bin
cp "${toolchain_root}/bin/"*.dll "${target_bin}"
compress_directory_tar_gz "/ae/env/${name}" "/ae/env" "${name}.tar.gz"
}
build_ubuntu2004_gcc93_clang_then_windows_lld_linux_x86
exit 0
echo "执行完毕 !!!"