编译环境
- OS: Kylin Linux Advanced Server V10 (Tercel)
- CPU 架构: loongarch64
- 平台: 龙芯
- go 版本: go version go1.19 linux/loong64
- 编译的 Etcd 版本: v3.4.13
安装 golang 环境
下载 golang
1
wget http://ftp.loongnix.cn/toolchain/golang/go-1.19/go1.19.linux-loong64.tar.gz
安装 golang
1
2
3
4
5
6
7
8tar xf go1.19.linux-loong64.tar.gz -C /usr/local/
cat > /etc/profile.d/golang.sh <<EOF
#!/bin/bash
GO_HOME=/usr/local/go
PATH=\$PATH:\$GO_HOME/bin
EOF重新加载环境变量,检查 go 版本
1
2
3$ source /etc/profile.d/golang.sh
$ go version
go version go1.19 linux/loong64
编译 Etcd
下载 etcd 源码
1
git clone -b v3.4.13 https://github.com/etcd-io/etcd.git
修改
etcdmain/etcd.go
文件,修改内容如下:1
2
3
4
5
6
7
8
9
10
11
12
13# 原始代码如下所示,主要修改的地方为 if runtime.GOARCH == "amd64" || runtime.GOARCH == "ppc64le" 这一行
func checkSupportArch() {
// TODO qualify arm64
if runtime.GOARCH == "amd64" || runtime.GOARCH == "ppc64le" {
return
}
... 省略 N 行 ...
}
# 修改后的代码如下
if runtime.GOARCH == "amd64" || runtime.GOARCH == "ppc64le" || runtime.GOARCH == "loong64" {
return
}修改
go.mod
文件,修改内容如下:1
2
3
4
5
6
7
8
9
10# 修改 go 版本为 1.19
go 1.19
# 在 require() 配置后面追加 replace 相关配置, 如下:
require (
...
)
replace golang.org/x/sys => golang.org/x/sys v0.1.0
replace golang.org/x/net => golang.org/x/net v0.1.0更新 mod 文件
1
2
3
4
5
6
7
8# 设置 go 代理
go env -w GOPROXY=https://goproxy.cn,direct
# 更新 mod 文件
go mod tidy
# 同步 mod
go mod vendor新建
vendor/go.etcd.io/bbolt/bolt_loong64.go
文件,文件内容如下:1
2
3
4
5
6
7
8
9
10
11
12// +build loong64
package bbolt
// maxMapSize represents the largest mmap size supported by Bolt.
const maxMapSize = 0xFFFFFFFFFFFF // 256TB
// maxAllocSize is the size used when creating array pointers.
const maxAllocSize = 0x7FFFFFFF
// Are unaligned load/stores broken on this arch?
var brokenUnaligned = false编译 etcd
1
2
3
4
5
6
7
8
9# 编译 etcd
$ make build
# 检查编译好的二进制文件
$ ./bin/etcd -version
etcd Version: 3.4.13
Git SHA: ae9734ed2
Go Version: go1.19
Go OS/Arch: linux/loong64