Search code examples
goyoctoyocto-recipe

compile golang package in yocto


I am trying to write a yocto recipe to compile https://github.com/bluenviron/mediamtx package, which is written on Golang. And no matter what, I can't get the package to build the binary. I have little to no experience with Go.

So far, I have managed to get the recipe to clone proper version from git and with correct LIC_FILES_CHKSUM but I am struggling to get it to actually generate a binary from the source.

SUMMARY = "mediamtx RTSP server"
HOMEPAGE = "https://github.com/bluenviron/mediamtx"
SECTION = "multimedia"
LICENSE = "MIT"

inherit goarch pkgconfig

#GO_IMPORT = "github.com/bluenviron/mediamtx"

LIC_FILES_CHKSUM = "file://LICENSE;md5=77fd2623bd5398430be5ce60489c2e81"

SRC_URI = "git://github.com/bluenviron/mediamtx;branch=main"

S = "${WORKDIR}/git"

SRCREV = "21756a4d54152872cda48469861147ee652df922"

FILES_${PN} += "${GOBIN_FINAL}/*"


DEPENDS += "\
        go \
        python \
"

do_install_append() {
    cp ${D}${bindir}/mediamtx ${D}${bindir}/${BPN}
}

if I remove do_install_append then the recipe builds successfully but it doesn't compile the code to create a binary - which seems obvious to me as there is no do_compile section. I can't seem to find any information which tells me how to get it to compile.

It'd be great if someone is able to provide me a yocto recipe for this package, if not then any kind of help/direction is appreciated. Thanks.


Solution

  • I had that same problem, this worked for me.

    SUMMARY = "MediaMTX / rtsp-simple-server is a ready-to-use and zero-dependency server and proxy that allows users to publish, read and proxy live video and audio streams."
    GO_IMPORT = "github.com/bluenviron/mediamtx"
    HOMEPAGE = "https://${GO_IMPORT}"
    LICENSE = "MIT"
    LIC_FILES_CHKSUM = "file://src/${GO_IMPORT}/LICENSE;md5=77fd2623bd5398430be5ce60489c2e81"
    
    SRC_URI = "git://${GO_IMPORT};branch=main;protocol=https"
    SRCREV = "65f617aa7c326f491c4f4f4a4d52beea3bd6abc7"
    
    GO_INSTALL = "${GO_IMPORT}"
    do_compile[network] = "1"
    
    # build executable instead of shared object
    GO_LINKSHARED = ""
    GOBUILDFLAGS:remove = "-buildmode=pie"
    
    inherit go-mod
    
    FILES:${PN} += "/usr/local/bin"
    
    

    I'm using Yocto's kirkstone release.