go的编译
- 官方参考手册:
http://www.loongson.cn/news/company/456.html
- 编译步骤
- 第一阶段:在X86平台上交叉编译出面向MIPS平台的Go语言自举编译工具链。
1.在x86下下载 go1.14.2.linux-amd64.tar.gz
$ tar xvzf go1.14.2.linux-amd64.tar.gz -C /opt $ mv /opt/go /opt/go1.14.2
2.配置交叉编译的自举编译工具链
$ export GOROOT_BOOTSTRAP=/opt/go1.14.2
3.下载Go 1.14的源代码
$ cd ~ $ git clone https://gitlabwh.uniontech.com/wuhan/container/go-1.14.git
4.切换到Go 1.14的发行版
$ cd go $ git checkout master
5.交叉编译 这一步通过执行脚本bootstrp.bash完成。该脚本执行前,需要通过环境变量GOOS和GOARCH分别指明交叉编译的目标操作系统和处理器架构。
$ cd ~/go/src $ GOOS=linux GOARCH=mips64le ./bootstrap.bash
接下来就是等待交叉编译结束了。由于交叉编译无需执行Go语言官方自带的测试集,一般10分钟内即可完成编译。不出意外的话,整个过程应该非常顺利。如果您看到以下提示,则表明交叉编译成功。
---- Bootstrap toolchain for linux/mips64le installed in /home/deepin/go-linux-mips64le-bootstrap. Building tbz. -rw-rw-r-- 1 fool fool 46736199 6月 3 09:08 /home/deepin/go-linux-mips64le-bootstrap.tbz
交叉编译所生成的面向MIPS平台的Go语言自举编译工具链位于压缩包/home/deepin/go-linux-mips64le-bootstrap.tbz中。将该压缩包拷贝到龙芯电脑中备用。
- 第二阶段:在龙芯平台上从源代码构建Go 1.14开发环境。
1.解压交叉编译生成的面向MIPS平台的自举编译工具链
$ tar xvjf go-linux-mips64le-bootstrap.tbz -C ~
2.简单检验自举编译工具链是否可用
$ cd ~/workspace/go-linux-mips64le-bootstrap/bin $ export GOROOT=/home/deepin/go-linux-mips64le-bootstrap $ ./go version
如果观察到以下输出,则基本可以说明交叉编译没有问题。
go version go1.14.2 linux/mips64le
3.下载Go1.14的源代码并切换到Go1.14的发行版。
$ cd ~ $ https://gitlab.deepin.io/wuyong/go.git $ cd go $ git checkout release-branch.go1.14
4.编译配置 在当前目录创建名为env.sh的shell脚本,输入以下语句后保存退出。
#!/bin/bash export GOROOT_BOOTSTRAP=/home/deepin/go-linux-mips64le-bootstrap export GOROOT=/home/deepin/go
其中,GOROOT_BOOTSTRAP用于指向自举编译工具链的根目录,GOROOT指向Go 1.6源代码的根目录。 执行env.sh,以完成编译配置。
$ source env.sh
5.编译
$ cd src $ ./all.bash
待脚本执行结束后,如果观察到如下输出信息,则说明龙芯平台上Go 1.6的编译和测试顺利完成。整个过程约半小时。
ALL TESTS PASSED --- Installed Go for linux/mips64le in /home/deepin/go Installed commands in /home/deepin/go/bin *** You need to add /home/deepin/go/bin to your PATH.
6.安装编译生成的Go 1.14.2 在~/.bashrc的末尾添加如下语句
export GOROOT=/home/deepin/go export PATH=$PATH: $GOROOT/bin
然后执行
$ source ~/.bashrc
生效后,使用该指令
go version
出现如下信息表示编译成功
go version go1.14.2 linux/mips64le
go1.14.2打包
- 建立一个打包文件夹
$ mkdir page $ cd page
- 在该文件夹内分别创建一个DEBIAN目录,和一个目录树usr目录(用于deb包指定安装路径)
- 在DEBIAN内创建一个control文件(打包规则)
$ mkdir DEBIAN usr $ cd DEBIAN $ touch control
- conrtol的编辑内容如下:
Package: golang Version: 1.14.2 Architecture: mips64el Maintainer: wuyong <wuyong@uniontech.com> Installed-Size:616796 Depends: Section: web Priority: optional Homepage: https://gitlab.deepin.io/wuyong Description: golang
- 接下来目录树的设置,usr根据仿照根目录路径而设置,想安装到哪就将源码放置到哪个文件夹,本次移植放置到usr/lib下:
$ cd usr $ mkdir bin lib $ mv ~/go1.14.2 ~/page/usr/lib
- 并在同一级目录下创建bin目录,用于存放go命令(软链接)
- ln -s 可执行文件相对路径 生成的软链接名
$ cd bin $ ln -s ../lib/go1.14.2/bin/go go
- 退回到page目录外执行如下指令
- sudo dpkg -b DEBIAN所在路径 <package name> //打包相关操作
$ sudo dpkg -b page go1.14.2_mips64el.deb
评论