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