最近由于負責交叉編譯AI項目,包括tensorflow和pytorch,其中tf是用bazel管理編譯的,為了確定自己制作的交叉編譯工具鍊能正常運作,不得不把原生的bazel做了一些修改來支援交叉編譯,主要是砍掉了一些對絕對路徑依賴的限制(正常的交叉編譯工具鍊都是放在/opt目錄下面的絕對路徑)。
一般情況下用源代碼編譯,生成的都是開發版本,這種版本做版本号校驗方面會有很多問題,是以需要編譯自己的release版本。
export USE_BAZEL_VERSION=1.2.1 # 選擇使用版本為準備定制的bazel版本的基礎版本,否則部分規則跨大版本bazel文法不相容
yum install java-11-openjdk java-11-openjdk-devel # 如果在ubuntu,需要使用apt install XXX
如果直接下載下傳的源代碼包解壓編譯的話,會沒有git的commit記錄,這樣改版本号的腳本會不過,需要寫死一個commit号,如果是git clone下來的branch或者tag的話,下面的修改不用做:
diff ../bazel-1.2.1-dist/scripts/ci/build_status_command.sh ../bazel-0.24.1-dist/scripts/ci/build_status_command.sh
25,26c25
< #git_hash=$(git rev-parse --short HEAD)
< git_hash=5c4c67c
---
> git_hash=$(git rev-parse --short HEAD)
先編譯一個開發版本:
bazelisk build --sandbox_tmpfs_path=/tmp //src:bazel
定義需要打包的版本号:
export release_name=1.2.1
上面這句指令表示生成的版本号就是1.2.1
修改開發版本的版本資訊生成釋出版本的ubuntu作業系統指令:
mkdir output
cp bazel-bin/src/bazel output/bazel
output/bazel build \
-c opt \
--stamp \
--sandbox_tmpfs_path=/tmp \
--embed_label "${release_name}" \
--workspace_status_command=scripts/ci/build_status_command.sh \
src/bazel \
src/bazel_nojdk \
scripts/packages/with-jdk/install.sh \
scripts/packages/debian/bazel-debian.deb \
scripts/packages/debian/bazel.dsc \
scripts/packages/debian/bazel.tar.gz \
bazel-distfile.zip
centos/tlinux指令:
src/bazel
這樣之後下面的版本就是釋出版本了,版本号就是${release_name}裡面指定的
bazel-bin/src/bazel
如果想要用自己定制的bazel版本,需要啟動一個http伺服器,并将編譯好的bazel版本按路徑放到對應目錄下,下面的例子是本地啟動的http伺服器:
export BAZELISK_BASE_URL=http://127.0.0.1/bazel
完整編譯過程可以參照bazel的CI腳本:
continuous-integration/bazel-release.yml at master · bazelbuild/continuous-integration (github.com)