使用dep工具管理Go依赖项的Yocto配方

时间:2018-01-18 09:38:03

标签: go dependencies yocto recipe

更新:此问题已经解决。我正在重新编辑问题以更新到固定状态。

我尝试编写一个使用dep工具的配方,以便在构建之前解析go相关项目的依赖关系。我正在使用' poky' “摇滚乐”的一层Yocto项目分支。该分支提供了构建go编译器和dep依赖项工具的配方。

我的初始配方从bitbucket存储库中获取源代码:

GO_IMPORT = "bitbucket.org/path/to/my_project"
SRC_URI = "git://${GO_IMPORT}/protocol=http;user=${GIT_USER}:${GIT_PASS};destsuffix=${PN}-${PV}/src/${GO_IMPORT}"

然后我补充一下:

inherit go
DEPENDS += "go-dep"

在我添加此功能后:

do_compile_prepend() {
    dep init
    dep ensure
}

Yocto抱怨这个错误:

run.do_compile.8543: line 118: dep: command not found

在阅读下面的一些答案之后,我会在我的poky / meta / recipes-devtools / go / go-dep_0.3.0.bb配方文件的末尾添加建议的补丁 - 非常感谢!! : - )

BBCLASSEXTEND = "native nativesdk"

执行一些bitbake命令后:

$ bitbake -c cleanall go-dep-native
$ bitbake go-dep-native

Bitbake流程结束正常,不显示错误或警告。本地go-dep工具已内置到tmp / work / x86_64-linux / go-dep-native目录中,并已正确安装到tmp / sysroots-components / x86_64 / go-dep-native / usr / bin中。

我修改了do_compile_prepend()函数,如下所示:

do_compile_prepend() {
    rm -f ${WORKDIR}/build/src/${GO_IMPORT}/Gopkg.toml
    rm -f ${WORKDIR}/build/src/${GO_IMPORT}/Gopkg.lock
    cd ${WORKDIR}/build/src/${GO_IMPORT}
    dep init
    dep ensure
}

我在食谱中修改了DEPENDS,如下所示:

DEPENDS = "go-native go-dep-native"

注意go-dep已被删除(我不需要在目标设备上使用dep工具,只是为了解决本机平台上的依赖关系。)

之后,我执行此命令:

$ bitbake <foo>

do_compile阶段工作正常,但在执行do_package阶段时会出现一些错误:

ERROR: <foo>-1.0-r0 do_package: QA Issue: File '/usr/bin/dep' from <foo> was already stripped, this will prevent future debugging! [already-stripped]
ERROR: <foo>-1.0-r0 do_package: Fatal QA errors found, failing task.
ERROR: <foo>-1.0-r0 do_package: Function failed: do_package

这些错误已修复,在我的食谱末尾加上:

INHIBIT_PACKAGE_DEBUG_SPLIT = "1"
INHIBIT_PACKAGE_STRIP = "1"
RDEPENDS_${PN}-staticdev += "bash"
RDEPENDS_${PN}-dev += "bash"

我不知道这是否是解决我问题的最佳方式,但至少现在它运作正常。任何改善这个配方的建议都很好。先感谢您! : - )

3 个答案:

答案 0 :(得分:2)

DEPENDS += "go-dep"表示您的目标配方可以包含go-dep提供的标题或链接库,但如果您需要运行dep,则无法运行dep命令命令,你需要依赖go-dep-native:

DEPENDS += "go-dep-native"

但是yocto目前还没有提供go-dep-native,所以你必须添加:

BBCLASSEXTEND = "native"

meta/recipes-devtools/go/go-dep_XXX.bb.

然后你可以在do_compile_prepend()

中运行dep命令

答案 1 :(得分:2)

我刚发送补丁[1]以启用本机和nativesdk对配方的支持。

  1. https://patchwork.openembedded.org/patch/147390/

答案 2 :(得分:0)

假设您使用与here相同的配方,您应该能够在do_compile_prepend构建步骤中引用$ {GO_INSTALL}变量。如果没有,请尝试使用bitbake命令运行-c devshell,如:

bitbake <package name> -c devshell

并查找dep工具的路径。