cilium鏡像編譯

概述

簡單介紹一下 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

參考資料

  1. Ubuntu下載源碼clang+llvm+lldb編譯+安裝
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 前言 編譯的主要任務(wù)是將源代碼文件作為輸入,最終輸出目標(biāo)文件,這期間發(fā)生了什么?便是我們本篇文章要介紹的。在開始之...
    QiShare閱讀 4,473評論 0 7
  • iOS 開發(fā)中 Objective-C 是 Clang / LLVM 來編譯的。swift 是 Swift / L...
    forping閱讀 1,001評論 0 0
  • 一:編譯器 編譯器是什么已不用多說,一句話從代碼到機(jī)器碼就是編譯器的工作. 左邊輸入源碼,右邊輸出機(jī)器碼 Fron...
    Trigger_o閱讀 2,557評論 1 27
  • 1. LLVM概念 1.1 編譯器 LLVM與編譯器息息相關(guān),究竟什么是編譯器呢?帶著疑問往下看吧。編譯器就是將一...
    冼同學(xué)閱讀 590評論 1 4
  • 編譯器 iOS編譯和打包時,編譯器直接將代碼編譯成機(jī)器碼,然后直接在CPU上運(yùn)行。而不用使用解釋器運(yùn)行代碼。因?yàn)檫@...
    shawnr閱讀 6,878評論 1 22