GoコードをバイナリにしてYoctoに入れる(ARM)
GoはARMバイナリを直接吐ける。 なので、Goのコンパイラをバイナリで引っ張ってビルド時に走らせればARMバイナリを簡単にビルドしてYoctoへ組み込める。
やるにはレシピに次ようなパッケージを追加して
LICENSE = "CLOSED" SRC_URI_append = " \ https://dl.google.com/go/go1.13.3.linux-amd64.tar.gz;name=go \ file://main.go \ " # go 1.13.3(linux x64版)のチェックサム SRC_URI[go.md5sum] = "e0b36adf4dbb7fa53b477df5d7b1dd8c" SRC_URI[go.sha256sum] = "0804bf02020dceaa8a7d7275ee79f7a142f1996bfd0c39216ccb405f93f994c0" # そのままバイナリをイメージに入れようとすると # 出来上がったバイナリをstripしようとしてイメージの # ビルドに失敗するので、stripしないように設定する INHIBIT_PACKAGE_STRIP = "1" INHIBIT_PACKAGE_DEBUG_SPLIT = "1" export PROG_PATH="${WORKDIR}/${PN}" do_compile() { # ターゲットOSはlinuxに export GOOS=linux # ターゲットのアーキテクチャをARMに export GOARCH=arm # ここでは命令セットはarmv7にしている # 他の命令セットは次を参照のこと # ref. https://github.com/golang/go/wiki/GoArm export GOARM=7 # goコンパイラは${WORKDIR}/go/binにある ${WORKDIR}/go/bin/go build -o ${PROG_PATH} ${WORKDIR}/main.go } do_install() { install -d ${D}/usr/local/bin install -m 755 ${PROG_PATH} ${D}/usr/local/bin/. } FILES_${PN} = " \ /usr/local/bin/${PN} \ "
あとはIMAGE_INSTALL
にパッケージを追加してlayerにレシピを追加すればGoで吐いたバイナリーをイメージに組込むことができる