xref: /OK3568_Linux_fs/yocto/poky/meta/recipes-devtools/go/go-cross-canadian.inc (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyuninherit cross-canadian
2*4882a593Smuzhiyun
3*4882a593SmuzhiyunDEPENDS = "go-native virtual/${HOST_PREFIX}go-crosssdk virtual/nativesdk-${HOST_PREFIX}go-runtime \
4*4882a593Smuzhiyun           virtual/${HOST_PREFIX}gcc-crosssdk virtual/nativesdk-libc \
5*4882a593Smuzhiyun           virtual/nativesdk-${HOST_PREFIX}compilerlibs"
6*4882a593SmuzhiyunPN = "go-cross-canadian-${TRANSLATED_TARGET_ARCH}"
7*4882a593Smuzhiyun
8*4882a593Smuzhiyun# it uses gcc on build machine during go-cross-canadian bootstrap, but
9*4882a593Smuzhiyun# the gcc version may be old and not support option '-fmacro-prefix-map'
10*4882a593Smuzhiyun# which is one of default values of DEBUG_PREFIX_MAP
11*4882a593SmuzhiyunDEBUG_PREFIX_MAP = "-fdebug-prefix-map=${WORKDIR}=/usr/src/debug/${PN}/${EXTENDPE}${PV}-${PR} \
12*4882a593Smuzhiyun                    -fdebug-prefix-map=${STAGING_DIR_HOST}= \
13*4882a593Smuzhiyun                    -fdebug-prefix-map=${STAGING_DIR_NATIVE}= \
14*4882a593Smuzhiyun                    "
15*4882a593Smuzhiyun
16*4882a593Smuzhiyunexport GOTOOLDIR_BOOTSTRAP = "${STAGING_LIBDIR_NATIVE}/${HOST_SYS}/go/pkg/tool/${BUILD_GOTUPLE}"
17*4882a593Smuzhiyunexport CGO_CFLAGS = "${CFLAGS}"
18*4882a593Smuzhiyunexport CGO_LDFLAGS = "${LDFLAGS}"
19*4882a593Smuzhiyunexport GO_LDFLAGS = '-linkmode external -extld ${HOST_PREFIX}gcc -extldflags "--sysroot=${STAGING_DIR_HOST} ${SECURITY_NOPIE_CFLAGS} ${HOST_CC_ARCH} ${LDFLAGS}"'
20*4882a593Smuzhiyun
21*4882a593Smuzhiyundo_configure[noexec] = "1"
22*4882a593Smuzhiyun
23*4882a593Smuzhiyundo_compile() {
24*4882a593Smuzhiyun	export CC_FOR_${HOST_GOTUPLE}="${HOST_PREFIX}gcc --sysroot=${STAGING_DIR_HOST}${SDKPATHNATIVE} ${SECURITY_NOPIE_CFLAGS}"
25*4882a593Smuzhiyun	export CXX_FOR_${HOST_GOTUPLE}="${HOST_PREFIX}gxx --sysroot=${STAGING_DIR_HOST}${SDKPATHNATIVE} ${SECURITY_NOPIE_CFLAGS}"
26*4882a593Smuzhiyun	cd src
27*4882a593Smuzhiyun	./make.bash --host-only --no-banner
28*4882a593Smuzhiyun	cd ${B}
29*4882a593Smuzhiyun}
30*4882a593Smuzhiyundo_compile[cleandirs] += "${GOTMPDIR} ${B}/bin ${B}/pkg"
31*4882a593Smuzhiyun
32*4882a593Smuzhiyun
33*4882a593Smuzhiyunmake_wrapper() {
34*4882a593Smuzhiyun	rm -f ${D}${bindir}/$2
35*4882a593Smuzhiyun	cat <<END >${D}${bindir}/$2
36*4882a593Smuzhiyun#!/bin/sh
37*4882a593Smuzhiyunhere=\`dirname \$0\`
38*4882a593Smuzhiyunnative_goroot=\`readlink -f \$here/../../lib/${TARGET_SYS}/go\`
39*4882a593Smuzhiyunexport GOARCH="${TARGET_GOARCH}"
40*4882a593Smuzhiyunexport GOOS="${TARGET_GOOS}"
41*4882a593Smuzhiyuntest -n "\$GOARM" || export GOARM="${TARGET_GOARM}"
42*4882a593Smuzhiyuntest -n "\$GO386" || export GO386="${TARGET_GO386}"
43*4882a593Smuzhiyuntest -n "\$GOMIPS" || export GOMIPS="${TARGET_GOMIPS}"
44*4882a593Smuzhiyunexport GOTOOLDIR="\$native_goroot/pkg/tool/${HOST_GOTUPLE}"
45*4882a593Smuzhiyuntest -n "\$GOROOT" || export GOROOT="\$OECORE_TARGET_SYSROOT/${target_libdir}/go"
46*4882a593Smuzhiyun\$here/../../lib/${TARGET_SYS}/go/bin/$1 "\$@"
47*4882a593SmuzhiyunEND
48*4882a593Smuzhiyun	chmod +x ${D}${bindir}/$2
49*4882a593Smuzhiyun}
50*4882a593Smuzhiyun
51*4882a593Smuzhiyundo_install() {
52*4882a593Smuzhiyun	install -d ${D}${libdir}/go/pkg/tool
53*4882a593Smuzhiyun	cp --preserve=mode,timestamps -R ${B}/pkg/tool/${HOST_GOTUPLE} ${D}${libdir}/go/pkg/tool/
54*4882a593Smuzhiyun	install -d ${D}${bindir} ${D}${libdir}/go/bin
55*4882a593Smuzhiyun	for f in ${B}/${GO_BUILD_BINDIR}/*
56*4882a593Smuzhiyun	do
57*4882a593Smuzhiyun		base=`basename $f`
58*4882a593Smuzhiyun		install -m755 $f ${D}${libdir}/go/bin
59*4882a593Smuzhiyun		make_wrapper $base ${TARGET_PREFIX}$base
60*4882a593Smuzhiyun	done
61*4882a593Smuzhiyun}
62