DHDAXCW / lede-rockchip

This source code builds openwrt for Rockchip Soc from upstream source code https://github.com/coolsnowwolf/lede
Other
155 stars 90 forks source link

咨询下make步骤的拆解和缓存问题 #4

Closed zhangguanzhang closed 2 years ago

zhangguanzhang commented 2 years ago

反馈bug/问题模板,提建议请删除

1.关于你要提交的问题

Q:是否搜索了issue (使用 "x" 选择)

2. 详细叙述

(1) 具体问题

我现在使用骚操作,把整个目录都在aciton里缓存了,然后每次编译是下载缓存后再构建的,缓存是因为我开的 app 比较多,action 的 6小时不够我使用。参照你的

        make tools/compile -j$(nproc) || make tools/compile -j72
        make toolchain/compile -j$(nproc) || make toolchain/compile -j72
        make target/compile -j$(nproc) || make target/compile -j72 IGNORE_ERRORS=1
        make diffconfig
        make package/compile -j$(nproc) IGNORE_ERRORS=1 || make package/compile -j72 IGNORE_ERRORS=1
        make package/index

我把 make 拆解成:

          CURRENT_HASH=$(git log --pretty=tformat:"%H" -n1 tools toolchain) 
          CACHE_HASH=$(cat env/toolchain.hash)
          if [ -z "$CACHE_HASH" ] || [ "$CURRENT_HASH" != "$CACHE_HASH" ]; then
            echo 'star compile tools'
            time make tools/compile -j$(nproc) || make tools/compile -j1 V=s
            # tools 编译的时候和 toolchain 貌似会一起编译
            time make toolchain/compile -j$(nproc) || make toolchain/compile -j1 V=s
            echo $CURRENT_HASH > env/toolchain.hash
          fi 

          make buildinfo
          make diffconfig buildversion feedsversion
          time make target/compile -j$(nproc) IGNORE_ERRORS="m n" BUILD_LOG=1 || \
          yes n | make target/compile -j1 V=s IGNORE_ERRORS=1
          time timeout $timeoutSec make package/compile -j$(nproc) IGNORE_ERRORS=1 |& tee -a /tmp/build.log
        # 如果 timeout 到时间,会有 Terminated 关键字输出在日志里
         if ! grep -qw Terminated /tmp/build.log;then
             time make package/install
             timeoutSec=$(( 6*60*60 - ${reserved_time}*60 - $usedSec  ))
              time xxx make target/install || make target/install -j1 V=s
              time make package/index
              make json_overview_image_info
              make checksum
        fi

tools toolchain 编译主要是存了这俩目录的commit hash,这样下次就不再编译他俩了,然后时间主要是耗时在 make package/compile ,我用 timeout 限制它,然后最后会预留时间执行后续的上传缓存行为,上传之前我会清理掉以下几个目录:

rm -rf tmp dl bin

但是下次构建的时候,我理解应该是类似于二次编译的,但是实际结果是 make package/compile 还是要5-6小时才能编译完。

例如我看 lua 的包,build_dir/target-<arch>/lua-x.x.x/(QVR~40PLM2@C~)H S@783A

我没清理掉 build_dir、staging_dir目录,不知道为啥不是二次编译。

我在目录里 find -type f -size -2M -exec grep -l .built_check {} \; 没找到任何文件。不知道op是怎么判断一个包需要再次编译的