#!/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 init_build_environment enable_strict_error_mode # 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 } build_mingw64_canadian_toolchain() { 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_root_}/pkg_mingw-w64-x86_64" mkdir -p "${toolchain_root}" # --debug-trycompile --debug-output -DCMAKE_TRY_COMPILE_NO_CLEANUP # 工具链运行的时候居然也需要 zlib1.dll 但是没重装系统前没发现 local python_pkg local zlib_pkg download_msys2_pkg python_pkg "mingw64" "mingw-w64-x86_64-python-3.12.12-1-any.pkg.tar.zst" "${pkg_root}" download_msys2_pkg zlib_pkg "mingw64" "mingw-w64-x86_64-zlib-1.3.2-2-any.pkg.tar.zst" "${pkg_root}" exec_args_fast_fail tar --zstd -xf "${python_pkg}" -C "${toolchain_root}" --strip-components=1 mingw64 exec_args_fast_fail 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_1236" local target="aarch64-linux-gnu" local sysroot="${_ae_root_}/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_root_}/sysroots/win_qt_host_tool/5.14.2/msvc2017_64/qt5/bin" build_mingw64_canadian_toolchain "releases/gcc-9.3.0" "9.3.0" #build_kylin_ver "releases/gcc-15.2.0" "15.2.0" compress_directory_tar_gz "${_ae_root_}/env/${name}" "${_ae_root_}/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_root_}/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_root_}/env/${name}" "${_ae_root_}/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_root_}/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_root_}/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_root_}/env/${name}" "${_ae_root_}/env" "${name}.tar.gz" } #build_ubuntu2004_gcc93_clang_then_windows_lld_linux_x86 build_arm_vitis_2022_2_gcc_15_1_0() { local name="win_arm_vitis_2022_2_gcc_15_1_0_1104" local target="aarch64-xilinx-linux" local sysroot="/opt/vitis.pkg/pkg/tools/Xilinx/Vitis/2022.2/gnu/aarch64/lin/aarch64-linux/aarch64-xilinx-linux" local ver="releases/gcc-15.1.0" local ver2="15.1.0" init_env "${name}" "${sysroot}" "${target}" gev_cur_toolchain_name="vitis_2022_2_${target}_${ver2}" build_mingw64_canadian_toolchain "${ver}" "${ver2}" compress_directory_tar_gz "${_ae_root_}/env/${name}" "${_ae_root_}/env" "${name}.tar.gz" } build_arm_vitis_2022_2_gcc_15_1_0 exit 0 echo "执行完毕 !!!"