概述
簡單介紹一下 Cilium 官方的編譯和構(gòu)建鏡像的方法,方便以后排查問題或者改造 Cilium 的時候,可以快速構(gòu)建出可替換的二進(jìn)制和鏡像。
命令
curl -LO https://github.com/cilium/cilium/archive/refs/tags/v1.14.4.zip
unzip v1.14.4.zip
cd cilium-1.14.4/
NOOPT=1 DOCKER_IMAGE_TAG=v1.14.4 make docker-cilium-image
單獨(dú)編譯二進(jìn)制,這里是指 Cilium 的 CLI 工具。
# make cilium
# make[1]: 進(jìn)入目錄“/root/cilium-1.14.4/cilium”
CGO_ENABLED=0 go build -mod=vendor -ldflags ' -X "github.com/cilium/cilium/pkg/version.ciliumVersion=1.14.4 runzhliu" -s -w -X "github.com/cilium/cilium/pkg/proxy.requiredEnvoyVersionSHA=ff0d5d3f77d610040e93c7c7a430d61a0c0b90c1" -X "github.com/cilium/cilium/pkg/datapath/loader.DatapathSHA256=1654debbc745b5c91e5fbb250c9a8ee7d0d5b2f5ffdac9846359ac4ec5a64c63" ' -tags=osusergo -gcflags="all=-N -l" -o cilium
編譯 cilium-agent。
# make daemon
# make[1]: 進(jìn)入目錄“/root/cilium-1.14.4/daemon”
CGO_ENABLED=0 go build -mod=vendor -ldflags ' -X "github.com/cilium/cilium/pkg/version.ciliumVersion=1.14.4 runzhliu" -s -w -X "github.com/cilium/cilium/pkg/proxy.requiredEnvoyVersionSHA=ff0d5d3f77d610040e93c7c7a430d61a0c0b90c1" -X "github.com/cilium/cilium/pkg/datapath/loader.DatapathSHA256=1654debbc745b5c91e5fbb250c9a8ee7d0d5b2f5ffdac9846359ac4ec5a64c63" ' -tags=osusergo -o cilium-agent
# 最后成功的
GOOS=linux GOARCH=amd64 go build -gcflags="all=-N -l"
工具版本一覽
歸納起來,LLVM 是底層的編譯器基礎(chǔ)設(shè)施,它提供了代碼生成和優(yōu)化的能力,并且可以為多種編程語言服務(wù)。而 Clang 是 LLVM 的一個組件,專門處理 C 語言系(C、C++、Objective-C、Objective-C++)的編譯前端工作。Clang 使用 LLVM 生成的 IR,然后 LLVM 的后端負(fù)責(zé)將 IR 轉(zhuǎn)換成目標(biāo)機(jī)器的代碼。
在整個編譯過程中,Clang 負(fù)責(zé)解析源代碼,進(jìn)行語法分析,生成抽象語法樹(AST),然后生成 LLVM IR。之后,LLVM 接管 IR,進(jìn)行優(yōu)化并生成最終的機(jī)器代碼。所以可以說,Clang 是 LLVM 架構(gòu)中的一個關(guān)鍵部分,專注于前端編譯器的角色。
# llc --version
LLVM (http://llvm.org/):
LLVM version 10.0.0
Optimized build.
Default target: x86_64-unknown-linux-gnu
Host CPU: ivybridge
Registered Targets:
bpf - BPF (host endian)
bpfeb - BPF (big endian)
bpfel - BPF (little endian)
# clang --version
clang version 10.0.0 (https://github.com/llvm/llvm-project.git 0598a534371d5fd6debd129b1378b39b923b9787)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /usr/local/bin
編譯clang
curl -LO https://github.com/llvm/llvm-project/releases/download/llvmorg-10.0.0/clang-10.0.0.src.tar.xz