207 lines
9.0 KiB
Bash
207 lines
9.0 KiB
Bash
#!/bin/bash -e
|
||
|
||
export Github=https://raw.githubusercontent.com/oppen321/ZeroWrt-Action/refs/heads/master/patch
|
||
# Clone source code
|
||
git clone -b openwrt-24.10 --single-branch --filter=blob:none https://github.com/immortalwrt/immortalwrt openwrt
|
||
|
||
# Enter source code
|
||
cd openwrt
|
||
|
||
# Init feeds
|
||
./scripts/feeds update -a
|
||
./scripts/feeds install -a
|
||
|
||
# gcc15 patches
|
||
curl -s $Github/gcc-15/202-toolchain-gcc-add-support-for-GCC-15.patch | patch -p1
|
||
|
||
# fix gcc14 and gcc15
|
||
if [ "$USE_GCC14" = y ] || [ "$USE_GCC15" = y ]; then
|
||
# 如果是 GCC 14 或 GCC 15,则替换并克隆修复后的 linux-atm
|
||
echo "Detected GCC 14 or 15. Replacing linux-atm with a fixed version..."
|
||
|
||
# 移除原有的 linux-atm 软件包
|
||
rm -rf package/network/utils/linux-atm
|
||
|
||
# 从 GitHub 克隆修复后的 linux-atm 软件包
|
||
git clone https://github.com/sbwml/package_network_utils_linux-atm package/network/utils/linux-atm
|
||
|
||
# 检查是否克隆成功
|
||
if [ -d "package/network/utils/linux-atm" ]; then
|
||
echo "linux-atm has been successfully replaced for GCC 14/15 compatibility."
|
||
else
|
||
echo "Failed to clone the fixed linux-atm package. Please check your network or the repository URL."
|
||
exit 1
|
||
fi
|
||
else
|
||
# 如果不是 GCC 14 或 GCC 15,则什么都不做
|
||
echo "GCC 14 or 15 not enabled. Skipping linux-atm replacement."
|
||
fi
|
||
|
||
# fix gcc-15
|
||
if [ "$USE_GCC15" = y ]; then
|
||
# Mbedtls
|
||
curl -s $Github/gcc-15/mbedtls/901-tests-fix-string-initialization-error-on-gcc15.patch > package/libs/mbedtls/patches/901-tests-fix-string-initialization-error-on-gcc15.patch
|
||
sed -i '/TARGET_CFLAGS/ s/$/ -Wno-error=unterminated-string-initialization/' package/libs/mbedtls/Makefile
|
||
# elfutils
|
||
curl -s $Github/gcc-15/elfutils/901-backends-fix-string-initialization-error-on-gcc15.patch > package/libs/elfutils/patches/901-backends-fix-string-initialization-error-on-gcc15.patch
|
||
# libwebsockets
|
||
mkdir -p feeds/packages/libs/libwebsockets/patches
|
||
curl -s $Github/gcc-15/libwebsockets/901-fix-string-initialization-error-on-gcc15.patch > feeds/packages/libs/libwebsockets/patches/901-fix-string-initialization-error-on-gcc15.patch
|
||
# libxcrypt
|
||
mkdir -p feeds/packages/libs/libxcrypt/patches
|
||
curl -s $Github/gcc-15/libxcrypt/901-fix-string-initialization-error-on-gcc15.patch > feeds/packages/libs/libxcrypt/patches/901-fix-string-initialization-error-on-gcc15.patch
|
||
fi
|
||
|
||
# fix gcc-15.0.1 C23
|
||
if [ "$USE_GCC15" = y ]; then
|
||
# gmp
|
||
mkdir -p package/libs/gmp/patches
|
||
curl -s $Github/gcc-15-c23/gmp/001-fix-build-with-gcc-15.patch > package/libs/gmp/patches/001-fix-build-with-gcc-15.patch
|
||
# htop
|
||
mkdir -p feeds/packages/admin/htop/patches
|
||
curl -s $Github/gcc-15-c23/htop/001-Avoid-compilation-issues-with-ncurses-on-GCC-15.patch > feeds/packages/admin/htop/patches/001-Avoid-compilation-issues-with-ncurses-on-GCC-15.patch
|
||
# libtirpc
|
||
sed -i '/TARGET_CFLAGS/i TARGET_CFLAGS += -std=gnu17\n' feeds/packages/libs/libtirpc/Makefile
|
||
# libsepol
|
||
sed -i '/HOST_MAKE_FLAGS/i TARGET_CFLAGS += -std=gnu17\n' package/libs/libsepol/Makefile
|
||
# tree
|
||
sed -i '/MAKE_FLAGS/i TARGET_CFLAGS += -std=gnu17\n' feeds/packages/utils/tree/Makefile
|
||
# gdbm
|
||
sed -i '/CONFIGURE_ARGS/i TARGET_CFLAGS += -std=gnu17\n' feeds/packages/libs/gdbm/Makefile
|
||
# libical
|
||
sed -i '/CMAKE_OPTIONS/i TARGET_CFLAGS += -std=gnu17\n' feeds/packages/libs/libical/Makefile
|
||
# libconfig
|
||
sed -i '/CONFIGURE_ARGS/i TARGET_CFLAGS += -std=gnu17\n' package/feeds/packages/libconfig/Makefile
|
||
# lsof
|
||
sed -i '/CONFIGURE_ARGS/i TARGET_CFLAGS += -std=gnu17\n' feeds/packages/utils/lsof/Makefile
|
||
# screen
|
||
sed -i '/CONFIGURE_ARGS/i TARGET_CFLAGS += -std=gnu17\n' feeds/packages/utils/screen/Makefile
|
||
# ppp
|
||
sed -i '/CONFIGURE_VARS/i \\nTARGET_CFLAGS += -std=gnu17\n' package/network/services/ppp/Makefile
|
||
# vim
|
||
sed -i '/CONFIGURE_ARGS/i TARGET_CFLAGS += -std=gnu17\n' feeds/packages/utils/vim/Makefile
|
||
# mtd
|
||
sed -i '/target=/i TARGET_CFLAGS += -std=gnu17\n' package/system/mtd/Makefile
|
||
# libselinux
|
||
sed -i '/MAKE_FLAGS/i TARGET_CFLAGS += -std=gnu17\n' package/libs/libselinux/Makefile
|
||
# avahi
|
||
sed -i '/TARGET_CFLAGS +=/i TARGET_CFLAGS += -std=gnu17\n' feeds/packages/libs/avahi/Makefile
|
||
# bash
|
||
sed -i '/CONFIGURE_ARGS/i TARGET_CFLAGS += -std=gnu17\n' feeds/packages/utils/bash/Makefile
|
||
# xl2tpd
|
||
sed -i '/ifneq (0,0)/i TARGET_CFLAGS += -std=gnu17\n' feeds/packages/net/xl2tpd/Makefile
|
||
# dnsmasq
|
||
sed -i '/MAKE_FLAGS/i TARGET_CFLAGS += -std=gnu17\n' package/network/services/dnsmasq/Makefile
|
||
# bluez
|
||
sed -i '/CONFIGURE_ARGS/i TARGET_CFLAGS += -std=gnu17\n' feeds/packages/utils/bluez/Makefile
|
||
# e2fsprogs
|
||
sed -i '/CONFIGURE_ARGS/i TARGET_CFLAGS += -std=gnu17\n' package/utils/e2fsprogs/Makefile
|
||
# f2fs-tools
|
||
sed -i '/CONFIGURE_ARGS/i TARGET_CFLAGS += -std=gnu17\n' package/utils/f2fs-tools/Makefile
|
||
# krb5
|
||
sed -i '/CONFIGURE_VARS/i TARGET_CFLAGS += -std=gnu17\n' feeds/packages/net/krb5/Makefile
|
||
# parted
|
||
sed -i '/CONFIGURE_ARGS/i TARGET_CFLAGS += -std=gnu17\n' feeds/packages/utils/parted/Makefile
|
||
# iperf3
|
||
sed -i '/CONFIGURE_ARGS/i TARGET_CFLAGS += -std=gnu17\n' feeds/packages/net/iperf3/Makefile
|
||
# db
|
||
sed -i '/CONFIGURE_ARGS/i TARGET_CFLAGS += -std=gnu17\n' feeds/packages/libs/db/Makefile
|
||
# python3
|
||
sed -i '/TARGET_CONFIGURE_OPTS/i TARGET_CFLAGS += -std=gnu17\n' feeds/packages/lang/python/python3/Makefile
|
||
# uwsgi
|
||
sed -i '/MAKE_VARS/i TARGET_CFLAGS += -std=gnu17\n' feeds/packages/net/uwsgi/Makefile
|
||
# perl
|
||
sed -i '/Target perl/i TARGET_CFLAGS += -std=gnu17\n' feeds/packages/lang/perl/Makefile
|
||
# rsync
|
||
sed -i '/CONFIGURE_ARGS/i TARGET_CFLAGS += -std=gnu17\n' feeds/packages/net/rsync/Makefile
|
||
# shine
|
||
sed -i '/Build\/InstallDev/i TARGET_CFLAGS += -std=gnu17\n' feeds/packages/sound/shine/Makefile
|
||
# jq
|
||
sed -i '/CONFIGURE_ARGS/i TARGET_CFLAGS += -std=gnu17\n' feeds/packages/utils/jq/Makefile
|
||
fi
|
||
|
||
# Load devices Config
|
||
if [ "$model" = "OpenWrt_Rockchip_v24.10" ]; then
|
||
curl -s https://git.kejizero.online/zhao/files/raw/branch/main/toolchain/Configs/immortalwrt_rockchip.config > .config
|
||
elif [ "$model" = "OpenWrt_X86_64_v24.10" ]; then
|
||
curl -s https://git.kejizero.online/zhao/files/raw/branch/main/toolchain/Configs/immortalwrt_x86_64.config > .config
|
||
fi
|
||
|
||
# gcc14 & 15
|
||
if [ "$USE_GCC13" = y ]; then
|
||
export USE_GCC13=y gcc_version=13
|
||
elif [ "$USE_GCC14" = y ]; then
|
||
export USE_GCC14=y gcc_version=14
|
||
elif [ "$USE_GCC15" = y ]; then
|
||
export USE_GCC15=y gcc_version=15
|
||
else
|
||
export USE_GCC14=y gcc_version=14
|
||
fi
|
||
|
||
# gcc config
|
||
echo -e "\n# gcc ${gcc_version}" >> .config
|
||
echo -e "CONFIG_DEVEL=y" >> .config
|
||
echo -e "CONFIG_TOOLCHAINOPTS=y" >> .config
|
||
echo -e "CONFIG_GCC_USE_VERSION_${gcc_version}=y\n" >> .config
|
||
|
||
# Compile
|
||
make defconfig
|
||
make -j$(nproc)
|
||
|
||
# Organize files
|
||
if [ "$model" = "Padavanonly_MT798X_v24.10" ] || [ "$model" = "Hanwckf_MT798X_v21.02" ]; then
|
||
rm -rf build_dir/hostpkg
|
||
rm -rf staging_dir/hostpkg
|
||
rm -rf staging_dir/packages
|
||
rm -rf staging_dir/target-aarch64_cortex-a53_musl/host
|
||
rm -rf staging_dir/target-aarch64_cortex-a53_musl/packages
|
||
rm -rf staging_dir/target-aarch64_cortex-a53_musl/pkginfo
|
||
rm -rf staging_dir/target-aarch64_cortex-a53_musl/root-mediatek
|
||
find build_dir/target-aarch64_cortex-a53_musl -mindepth 1 -maxdepth 1 ! -name 'stamp' -exec rm -rf {} +
|
||
elif [ "$model" = "OpenWrt_Rockchip_v24.10" ]; then
|
||
rm -rf build_dir/hostpkg
|
||
rm -rf staging_dir/hostpkg
|
||
rm -rf staging_dir/packages
|
||
rm -rf staging_dir/target-aarch64_generic_musl/image
|
||
rm -rf staging_dir/target-aarch64_generic_musl/host
|
||
rm -rf staging_dir/target-aarch64_generic_musl/packages
|
||
rm -rf staging_dir/target-aarch64_generic_musl/pkginfo
|
||
rm -rf staging_dir/target-aarch64_generic_musl/root-rockchip
|
||
find build_dir/target-aarch64_generic_musl -mindepth 1 -maxdepth 1 ! -name 'stamp' -exec rm -rf {} +
|
||
elif [ "$model" = "OpenWrt_X86_64_v24.10" ]; then
|
||
rm -rf build_dir/hostpkg
|
||
rm -rf staging_dir/hostpkg
|
||
rm -rf staging_dir/packages
|
||
rm -rf staging_dir/target-x86_64_musl/image
|
||
rm -rf staging_dir/target-x86_64_musl/host
|
||
rm -rf staging_dir/target-x86_64_musl/packages
|
||
rm -rf staging_dir/target-x86_64_musl/pkginfo
|
||
rm -rf staging_dir/target-x86_64_musl/root-x86
|
||
find build_dir/target-x86_64_musl -mindepth 1 -maxdepth 1 ! -name 'stamp' -exec rm -rf {} +
|
||
fi
|
||
|
||
# Create folder
|
||
mkdir toolchain-cache
|
||
|
||
# Compression toolchain
|
||
case "$model" in
|
||
"OpenWrt_Rockchip_v24.10" | "OpenWrt_X86_64_v24.10")
|
||
if [ -z "$gcc_version" ]; then
|
||
echo "Error: GCC version not set!"
|
||
exit 1
|
||
fi
|
||
|
||
if [ "$model" = "OpenWrt_Rockchip_v24.10" ]; then
|
||
output_file="toolchain_musl_openwrt_rockchip_gcc-${gcc_version}.tar.zst"
|
||
elif [ "$model" = "OpenWrt_X86_64_v24.10" ]; then
|
||
output_file="toolchain_musl_openwrt_X86_64_gcc-${gcc_version}.tar.zst"
|
||
fi
|
||
|
||
tar -I zstd -cvf "toolchain-cache/${output_file}" build_dir dl tmp staging_dir
|
||
;;
|
||
*)
|
||
echo "Error: Unknown model '$model'!"
|
||
exit 1
|
||
;;
|
||
esac
|