1

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.

Akkshay
  • 35
  • 6
  • The yocto manual refers to inheriting `go` class. It seems that it already inherits `goarch`. As a first step uncomment the `GO_IMPORT` line, and inherit `go` instead of `goarch` – skandigraun Jun 09 '23 at 07:03
  • thanks @skandigraun, after these change yocto does somehow reach the `do_compile` method but it fails for some dependencies. `src/github.com/bluenviron/mediamtx/internal/conf/stringsize.go:6:2: cannot find package "code.cloudfoundry.org/bytefmt"` etc – Akkshay Jun 09 '23 at 07:19
  • I'm afraid you will have to find/create separate recipes for these dependencies, and add them to `DEPENDS`. Yocto doesn't allow network access after the fetch step. – skandigraun Jun 09 '23 at 07:29
  • haha okay, I'll try that. It has 46 dependencies! that seems like ridiculous amount of effort for one binary :D. thanks for the help though :) – Akkshay Jun 09 '23 at 07:33
  • Well, maybe there is an easier trick that I'm not aware of... don't work an awful lot with go recipes. – skandigraun Jun 09 '23 at 07:35
  • [Please remove all the line numbers](https://meta.stackoverflow.com/q/252559/995714) – phuclv Jun 09 '23 at 12:28

1 Answers1

2

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.