mirror of
https://git.yoctoproject.org/poky
synced 2026-02-24 02:19:39 +01:00
When using the Go 'vendor' mechanism to bring in dependencies for a Go package, the default GO_INSTALL setting, which uses the '...' wildcard, will include the vendored packages in the build, which produces incorrect results. There are also some Go packages that are structured poorly, so that the '...' wildcard results in building example or test code that should not be included in the build, or fail to build. This patch adds a mechanism for filtering out a subset of the sources. It defaults to filtering out everything under the 'vendor' subdirectory under package's main directory, which is the normal location for vendored packages, but can be overridden by a recipe to filter out other subdirectories, if needed. (From OE-Core rev: 9819353726d85780546158428bd97a253705017d) Signed-off-by: Matt Madison <matt@madison.systems> Signed-off-by: Otavio Salvador <otavio@ossystems.com.br> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
107 lines
3.4 KiB
Plaintext
107 lines
3.4 KiB
Plaintext
inherit goarch
|
|
|
|
def get_go_parallel_make(d):
|
|
pm = (d.getVar('PARALLEL_MAKE') or '').split()
|
|
# look for '-j' and throw other options (e.g. '-l') away
|
|
# because they might have a different meaning in golang
|
|
while pm:
|
|
opt = pm.pop(0)
|
|
if opt == '-j':
|
|
v = pm.pop(0)
|
|
elif opt.startswith('-j'):
|
|
v = opt[2:].strip()
|
|
else:
|
|
continue
|
|
|
|
return '-p %d' % int(v)
|
|
|
|
return ""
|
|
|
|
GO_PARALLEL_BUILD ?= "${@get_go_parallel_make(d)}"
|
|
|
|
GOROOT_class-native = "${STAGING_LIBDIR_NATIVE}/go"
|
|
GOROOT = "${STAGING_LIBDIR_NATIVE}/${TARGET_SYS}/go"
|
|
GOBIN_FINAL_class-native = "${GOROOT_FINAL}/bin"
|
|
GOBIN_FINAL = "${GOROOT_FINAL}/${GO_BUILD_BINDIR}"
|
|
|
|
DEPENDS_GOLANG_class-target = "go-cross-${TARGET_ARCH}"
|
|
DEPENDS_GOLANG_class-native = "go-native"
|
|
|
|
DEPENDS_append = " ${DEPENDS_GOLANG}"
|
|
|
|
export GOBUILDFLAGS ?= "-v"
|
|
GOBUILDFLAGS_prepend_task-compile = "${GO_PARALLEL_BUILD} "
|
|
|
|
export GOOS = "${TARGET_GOOS}"
|
|
export GOARCH = "${TARGET_GOARCH}"
|
|
export GOARM = "${TARGET_GOARM}"
|
|
export CGO_ENABLED = "1"
|
|
export GOROOT
|
|
export GOROOT_FINAL = "${libdir}/${TARGET_SYS}/go"
|
|
export GOBIN_FINAL
|
|
export GOPKG_FINAL = "${GOROOT_FINAL}/pkg/${GOOS}_${GOARCH}"
|
|
export GOSRC_FINAL = "${GOROOT_FINAL}/src"
|
|
export GO_GCFLAGS = "${TARGET_CFLAGS}"
|
|
export GO_LDFLAGS = "${TARGET_LDFLAGS}"
|
|
export CGO_CFLAGS = "${TARGET_CC_ARCH}${TOOLCHAIN_OPTIONS} ${TARGET_CFLAGS}"
|
|
export CGO_CPPFLAGS = "${TARGET_CPPFLAGS}"
|
|
export CGO_CXXFLAGS = "${TARGET_CC_ARCH}${TOOLCHAIN_OPTIONS} ${TARGET_CXXFLAGS}"
|
|
export CGO_LDFLAGS = "${TARGET_CC_ARCH}${TOOLCHAIN_OPTIONS} ${TARGET_LDFLAGS}"
|
|
|
|
FILES_${PN}-staticdev += "${GOSRC_FINAL}/${GO_IMPORT}"
|
|
FILES_${PN}-staticdev += "${GOPKG_FINAL}/${GO_IMPORT}*"
|
|
|
|
GO_INSTALL ?= "${GO_IMPORT}/..."
|
|
GO_INSTALL_FILTEROUT ?= "${GO_IMPORT}/vendor/"
|
|
|
|
B = "${WORKDIR}/build"
|
|
|
|
python go_do_unpack() {
|
|
src_uri = (d.getVar('SRC_URI') or "").split()
|
|
if len(src_uri) == 0:
|
|
return
|
|
|
|
try:
|
|
fetcher = bb.fetch2.Fetch(src_uri, d)
|
|
for url in fetcher.urls:
|
|
if fetcher.ud[url].type == 'git':
|
|
if fetcher.ud[url].parm.get('destsuffix') is None:
|
|
s_dirname = os.path.basename(d.getVar('S'))
|
|
fetcher.ud[url].parm['destsuffix'] = os.path.join(s_dirname, 'src',
|
|
d.getVar('GO_IMPORT')) + '/'
|
|
fetcher.unpack(d.getVar('WORKDIR'))
|
|
except bb.fetch2.BBFetchException as e:
|
|
raise bb.build.FuncFailed(e)
|
|
}
|
|
|
|
go_list_packages() {
|
|
GOPATH=${B}:${STAGING_LIBDIR}/${TARGET_SYS}/go go list -f '{{.ImportPath}}' ${GOBUILDFLAGS} ${GO_INSTALL} | \
|
|
egrep -v '${GO_INSTALL_FILTEROUT}'
|
|
}
|
|
|
|
go_do_configure() {
|
|
ln -snf ${S}/src ${B}/
|
|
}
|
|
|
|
go_do_compile() {
|
|
GOPATH=${B}:${STAGING_LIBDIR}/${TARGET_SYS}/go go env
|
|
if [ -n "${GO_INSTALL}" ]; then
|
|
GOPATH=${B}:${STAGING_LIBDIR}/${TARGET_SYS}/go go install ${GOBUILDFLAGS} `go_list_packages`
|
|
fi
|
|
}
|
|
do_compile[cleandirs] = "${B}/bin ${B}/pkg"
|
|
|
|
go_do_install() {
|
|
install -d ${D}${GOROOT_FINAL}/src/${GO_IMPORT}
|
|
tar -C ${S}/src/${GO_IMPORT} -cf - --exclude-vcs . | \
|
|
tar -C ${D}${GOROOT_FINAL}/src/${GO_IMPORT} --no-same-owner -xf -
|
|
tar -C ${B} -cf - pkg | tar -C ${D}${GOROOT_FINAL} --no-same-owner -xf -
|
|
|
|
if [ -n "`ls ${B}/${GO_BUILD_BINDIR}/`" ]; then
|
|
install -d ${D}${bindir}
|
|
install -m 0755 ${B}/${GO_BUILD_BINDIR}/* ${D}${bindir}/
|
|
fi
|
|
}
|
|
|
|
EXPORT_FUNCTIONS do_unpack do_configure do_compile do_install
|