* Add a go example recipe with cgo enabled, Flush the stdio buffer so
that piped stdout can read the output before the program exits.
This is for covering go reproducibility with cgo enabled. The test
coverage is provided by the reproducibility world build.
Related to the following commit [1]:
[
0642d23230 go.bbclass: change GOTMPDIR to improve reproducibility]
* cgo-helloworld is a complement for go-helloworld, also add it in
runtime case for go and gotools
[1] https://git.openembedded.org/openembedded-core/commit/?id=
0642d2323072f561a4d0eeb9266213387b2997fc
[YOCTO #16100]
Signed-off-by: Changqing Li <changqing.li@windriver.com>
Signed-off-by: Antonin Godard <antonin.godard@bootlin.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
RECIPE_MAINTAINER:pn-cargo-c = "Deepesh Varatharajan <Deepesh.Varatharajan@windriver.com>"
RECIPE_MAINTAINER:pn-ccache = "Robert Yang <liezhi.yang@windriver.com>"
RECIPE_MAINTAINER:pn-cdrtools-native = "Yi Zhao <yi.zhao@windriver.com>"
+RECIPE_MAINTAINER:pn-cgo-helloworld = "Changqing Li <changqing.li@windriver.com>"
RECIPE_MAINTAINER:pn-chrpath = "Yi Zhao <yi.zhao@windriver.com>"
RECIPE_MAINTAINER:pn-clang = "Khem Raj <raj.khem@gmail.com>"
RECIPE_MAINTAINER:pn-clang-cross-${TARGET_ARCH} = "Khem Raj <raj.khem@gmail.com>"
msg = 'Incorrect output: %s' % output
self.assertEqual(output, "Hello, world!", msg=msg)
+
+class CgoHelloworldTest(OERuntimeTestCase):
+ @OETestDepends(['ssh.SSHTest.test_ssh'])
+ @OEHasPackage(['cgo-helloworld'])
+ def test_cgohelloworld(self):
+ cmd = "cgo-helloworld"
+ status, output = self.target.run(cmd)
+ msg = 'Exit status was not 0. Output: %s' % output
+ self.assertEqual(status, 0, msg=msg)
+
+ msg = 'Incorrect output: %s' % output
+ self.assertEqual(output, "Hello, world!", msg=msg)
# go does not support ppc32, only ppc64
# https://github.com/golang/go/issues/22885
# gccgo may do better
-GOTOOLS ?= "go-helloworld"
+GOTOOLS ?= "\
+ go-helloworld \
+ cgo-helloworld \
+ "
GOTOOLS:powerpc ?= ""
GOTOOLS:riscv32 ?= ""
--- /dev/null
+package main
+
+// #include <stdio.h>
+// void hello() { printf("Hello, world!\n"); fflush(stdout);}
+import "C"
+
+func main() {
+ C.hello()
+}
--- /dev/null
+SUMMARY = "A simple CGO example that calls C to print hello world"
+SECTION = "examples"
+HOMEPAGE = "https://golang.org/"
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
+
+SRC_URI = "file://cgo-helloworld.go"
+
+S = "${UNPACKDIR}"
+
+GO_IMPORT = "cgo-helloworld"
+GO_INSTALL = "${GO_IMPORT}"
+
+inherit go
+
+export GO111MODULE = "off"
+export CGO_ENABLED = "1"
+
+do_configure:prepend() {
+ mkdir -p ${S}/src/${GO_IMPORT}
+ cp ${UNPACKDIR}/cgo-helloworld.go ${S}/src/${GO_IMPORT}/main.go
+}