@@ -28,8 +28,13 @@ mount_rootfs() {
2828
2929prepare_sources () {
3030 echo " === Cloning required repositories ==="
31- git clone https://github.com/CHonghaohao/linux_v6.10-rc1.git || return 1
32- git clone https://github.com/syswonder/hvisor-tool.git || return 1
31+ # 如果目录已存在,假设代码已由CI的checkout步骤准备好,跳过clone
32+ if [ ! -d " linux_v6.10-rc1" ]; then
33+ git clone https://github.com/CHonghaohao/linux_v6.10-rc1.git || return 1
34+ fi
35+ if [ ! -d " hvisor-tool" ]; then
36+ git clone https://github.com/syswonder/hvisor-tool.git || return 1
37+ fi
3338}
3439
3540build_hvisor_tool () {
@@ -40,25 +45,29 @@ build_hvisor_tool() {
4045
4146 case " ${ARCH} " in
4247 riscv64)
43- # 设置编译器
48+ # 设置编译器和 sysroot
4449 export CC=" riscv64-linux-gnu-gcc --sysroot=/usr/riscv64-linux-gnu"
45- # 准备需要强制注入的 CFLAGS
46- # --sysroot: 指定系统根,用于链接库
47- # -I /usr/riscv64-linux-gnu/include: 指定 C 标准库头文件路径
48- # -I/usr/lib/gcc-cross/riscv64-linux-gnu/11/include-fixed: 指定 GCC 修正头文件路径,解决 limits.h 问题
49- # -U_FORTIFY_SOURCE ...: 解决 glibc 版本安全检查问题
50- CFLAGS_EXTRA=" --sysroot=/usr/riscv64-linux-gnu -I/usr/riscv64-linux-gnu/include -I/usr/lib/gcc-cross/riscv64-linux-gnu/11/include-fixed - U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0"
50+ # 准备需要强制注入的 CFLAGS。
51+ # --sysroot: 正确指定交叉编译的系统根。编译器会自动在此根下查找头文件和库。
52+ # 【重要】避免手动添加 -I 来指定系统头文件路径 (如 -I /usr/riscv64-linux-gnu/include),
53+ # 这会干扰编译器的标准头文件搜索顺序,特别是对 #include_next 的处理,从而导致 " limits.h" 找不到的编译错误。
54+ # -U_FORTIFY_SOURCE ...: 解决 glibc 版本安全检查问题。
55+ CFLAGS_EXTRA=" --sysroot=/usr/riscv64-linux-gnu -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0"
5156 ;;
5257 aarch64)
58+ # 设置编译器和 sysroot
5359 export CC=" aarch64-linux-gnu-gcc --sysroot=/usr/aarch64-linux-gnu"
54- CFLAGS_EXTRA=" --sysroot=/usr/aarch64-linux-gnu -I/usr/aarch64-linux-gnu/include -I/usr/lib/gcc-cross/aarch64-linux-gnu/11/include-fixed -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0"
60+ # --sysroot 会让编译器自动、正确地查找系统头文件。
61+ # 同样地,避免使用 -I 手动指定系统路径,以防破坏编译器的头文件搜索顺序。
62+ CFLAGS_EXTRA=" --sysroot=/usr/aarch64-linux-gnu -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0"
5563 ;;
5664 esac
5765
5866 # 在 make 命令中,将我们构造的 CFLAGS_EXTRA 添加进去
5967 # 我们使用 CFLAGS+="${CFLAGS_EXTRA}" 的语法,确保所有标志都被正确传递
68+ # 注意:这里的 ARCH 应该是 riscv64 而不是 riscv
6069 make -e all \
61- ARCH=riscv \
70+ ARCH=riscv64 \
6271 LOG=LOG_INFO \
6372 KDIR=" ${LINUX_KERNEL_DIR} " \
6473 " CFLAGS+=${CFLAGS_EXTRA} " \
@@ -69,6 +78,9 @@ deploy_artifacts() {
6978 echo " === Deploying build artifacts ==="
7079 local dest_dir=" ${ROOTFS_DIR} /home/riscv64"
7180 local test_dest=" ${dest_dir} /test"
81+ # 创建目标目录
82+ sudo mkdir -p " ${dest_dir} "
83+ sudo mkdir -p " ${test_dest} /testcase"
7284 # Copy main components
7385 sudo cp -v " ${HVISOR_TOOL_DIR} /tools/hvisor" " ${dest_dir} /"
7486 sudo cp -v " ${HVISOR_TOOL_DIR} /driver/hvisor.ko" " ${dest_dir} /"
@@ -98,7 +110,8 @@ deploy_artifacts() {
98110
99111 # Setup environment
100112 mount_rootfs
101- prepare_sources
113+ # CI中代码已由 actions/checkout@v4 准备好,通常不需要再 clone
114+ # prepare_sources
102115
103116 # Build process
104117 if ! build_hvisor_tool; then
0 commit comments