@@ -97,6 +97,7 @@ RECIPE_MAINTAINER:pn-cargo = "Randy MacLeod <Randy.MacLeod@windriver.com>"
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>"
@@ -85,3 +85,15 @@ class GoHelloworldTest(OERuntimeTestCase):
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)
@@ -21,7 +21,10 @@ KEXECTOOLS:loongarch64 ?= ""
# 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 ?= ""
new file mode 100644
@@ -0,0 +1,9 @@
+package main
+
+// #include <stdio.h>
+// void hello() { printf("Hello, world!\n"); fflush(stdout);}
+import "C"
+
+func main() {
+ C.hello()
+}
new file mode 100644
@@ -0,0 +1,23 @@
+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
+}
* 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> --- meta/conf/distro/include/maintainers.inc | 1 + meta/lib/oeqa/runtime/cases/go.py | 12 ++++++++++ .../packagegroup-core-tools-testapps.bb | 5 +++- .../cgo-helloworld/cgo-helloworld.go | 9 ++++++++ .../go-examples/cgo-helloworld_1.0.bb | 23 +++++++++++++++++++ 5 files changed, 49 insertions(+), 1 deletion(-) create mode 100644 meta/recipes-extended/go-examples/cgo-helloworld/cgo-helloworld.go create mode 100644 meta/recipes-extended/go-examples/cgo-helloworld_1.0.bb