Yocto recipe to manage Go dependencies with dep tool

╄→尐↘猪︶ㄣ 提交于 2019-12-11 17:18:23

问题


Update: This question is already SOLVED. I'm re-editing the question to update to the fixed state.

I'm trying to write a recipe that uses dep tool to resolve dependencies of a go related project before building it. I'm using the 'poky' layer of the 'rocko' Yocto project branch. That branch provides recipes to build the go compiler and the dep dependencies tool.

My initial recipe fetches source code from a bitbucket repository:

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}"

Then I add this:

inherit go
DEPENDS += "go-dep"

And after I add this function:

do_compile_prepend() {
    dep init
    dep ensure
}

Yocto complains with this error:

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

After reading some of your answers below, I add suggested patch in your answers at the end of my poky/meta/recipes-devtools/go/go-dep_0.3.0.bb recipe file - thanks a lot!! :-)

BBCLASSEXTEND = "native nativesdk"

After I execute some bitbake commands:

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

Bitbake process ends ok, displaying no errors nor warnings. The native go-dep tool has been built into tmp/work/x86_64-linux/go-dep-native directory and is properly installed into tmp/sysroots-components/x86_64/go-dep-native/usr/bin.

I modify the do_compile_prepend() function as shown below:

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
}

I modify DEPENDS in my recipe like this:

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

Note the go-dep has been removed (I don't need dep tool on the target device, just to resolve dependencies on the native platform).

After that, I execute this command:

$ bitbake <foo>

The do_compile stage works fine, but some errors appear when doing the do_package stage:

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

These errors are fixed appending this at the end of my recipe:

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

I don't know if this is the best way to solve my issue, but at least now it works fine. Any advice to improve this recipe is wellcome. Thank you in advance! :-)


回答1:


The DEPENDS += "go-dep" means that your target recipe can include headers or link libs provided by go-dep, but you can't run the dep command, if you need run dep command, you need depend on go-dep-native:

DEPENDS += "go-dep-native"

But yocto doesn't provide go-dep-native currently, so you have to add:

BBCLASSEXTEND = "native"

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

Then you can run dep command in do_compile_prepend()




回答2:


I just sent the patch[1] to enable the native and nativesdk support for the recipe.

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



回答3:


Assuming you're using the same recipe as the one here, you should be able to refer to the ${GO_INSTALL} variable in your do_compile_prepend build step. If not, try running -c devshell with your bitbake command, like:

bitbake <package name> -c devshell

and look for the path of the dep tool.



来源:https://stackoverflow.com/questions/48318030/yocto-recipe-to-manage-go-dependencies-with-dep-tool

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!