天天看點

How to build your custom release bazel version?

最近由于負責交叉編譯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)

繼續閱讀