xref: /OK3568_Linux_fs/yocto/poky/meta/recipes-devtools/go/go-native_1.17.13.bb (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun# This recipe builds a native Go (written in Go) by first building an old Go 1.4
2*4882a593Smuzhiyun# (written in C). However this old Go does not support all hosts platforms.
3*4882a593Smuzhiyun
4*4882a593Smuzhiyunrequire go-${PV}.inc
5*4882a593Smuzhiyun
6*4882a593Smuzhiyuninherit native
7*4882a593Smuzhiyun
8*4882a593SmuzhiyunSRC_URI += "https://dl.google.com/go/go1.4-bootstrap-20171003.tar.gz;name=bootstrap;subdir=go1.4"
9*4882a593SmuzhiyunSRC_URI[bootstrap.sha256sum] = "f4ff5b5eb3a3cae1c993723f3eab519c5bae18866b5e5f96fe1102f0cb5c3e52"
10*4882a593Smuzhiyun
11*4882a593Smuzhiyunexport GOOS = "${BUILD_GOOS}"
12*4882a593Smuzhiyunexport GOARCH = "${BUILD_GOARCH}"
13*4882a593SmuzhiyunCC = "${@d.getVar('BUILD_CC').strip()}"
14*4882a593Smuzhiyun
15*4882a593SmuzhiyunGOMAKEARGS ?= "--no-banner"
16*4882a593Smuzhiyun
17*4882a593Smuzhiyundo_configure() {
18*4882a593Smuzhiyun	cd ${WORKDIR}/go1.4/go/src
19*4882a593Smuzhiyun	CGO_ENABLED=0 GOROOT=${WORKDIR}/go1.4/go ./make.bash
20*4882a593Smuzhiyun}
21*4882a593Smuzhiyun
22*4882a593Smuzhiyundo_compile() {
23*4882a593Smuzhiyun	export GOROOT_FINAL="${libdir_native}/go"
24*4882a593Smuzhiyun	export GOROOT_BOOTSTRAP="${WORKDIR}/go1.4/go"
25*4882a593Smuzhiyun
26*4882a593Smuzhiyun	cd src
27*4882a593Smuzhiyun	./make.bash ${GOMAKEARGS}
28*4882a593Smuzhiyun	cd ${B}
29*4882a593Smuzhiyun}
30*4882a593Smuzhiyundo_compile[cleandirs] += "${GOTMPDIR} ${B}/bin"
31*4882a593Smuzhiyun
32*4882a593Smuzhiyunmake_wrapper() {
33*4882a593Smuzhiyun	rm -f ${D}${bindir}/$2$3
34*4882a593Smuzhiyun	cat <<END >${D}${bindir}/$2$3
35*4882a593Smuzhiyun#!/bin/bash
36*4882a593Smuzhiyunhere=\`dirname \$0\`
37*4882a593Smuzhiyunexport GOROOT="${GOROOT:-\`readlink -f \$here/../lib/go\`}"
38*4882a593Smuzhiyun\$here/../lib/go/bin/$1 "\$@"
39*4882a593SmuzhiyunEND
40*4882a593Smuzhiyun	chmod +x ${D}${bindir}/$2
41*4882a593Smuzhiyun}
42*4882a593Smuzhiyun
43*4882a593Smuzhiyundo_install() {
44*4882a593Smuzhiyun	install -d ${D}${libdir}/go
45*4882a593Smuzhiyun	cp --preserve=mode,timestamps -R ${B}/pkg ${D}${libdir}/go/
46*4882a593Smuzhiyun	install -d ${D}${libdir}/go/src
47*4882a593Smuzhiyun	(cd ${S}/src; for d in *; do \
48*4882a593Smuzhiyun		[ -d $d ] && cp -a ${S}/src/$d ${D}${libdir}/go/src/; \
49*4882a593Smuzhiyun	done)
50*4882a593Smuzhiyun	find ${D}${libdir}/go/src -depth -type d -name testdata -exec rm -rf {} \;
51*4882a593Smuzhiyun	install -d ${D}${bindir} ${D}${libdir}/go/bin
52*4882a593Smuzhiyun	for f in ${B}/bin/*
53*4882a593Smuzhiyun	do
54*4882a593Smuzhiyun		base=`basename $f`
55*4882a593Smuzhiyun		install -m755 $f ${D}${libdir}/go/bin
56*4882a593Smuzhiyun		make_wrapper $base $base
57*4882a593Smuzhiyun	done
58*4882a593Smuzhiyun}
59