* 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 <[email protected]>
---
 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

diff --git a/meta/conf/distro/include/maintainers.inc 
b/meta/conf/distro/include/maintainers.inc
index 24c5a9d712..b72cbe7c93 100644
--- a/meta/conf/distro/include/maintainers.inc
+++ b/meta/conf/distro/include/maintainers.inc
@@ -97,6 +97,7 @@ RECIPE_MAINTAINER:pn-cargo = "Randy MacLeod 
<[email protected]>"
 RECIPE_MAINTAINER:pn-cargo-c = "Deepesh Varatharajan 
<[email protected]>"
 RECIPE_MAINTAINER:pn-ccache = "Robert Yang <[email protected]>"
 RECIPE_MAINTAINER:pn-cdrtools-native = "Yi Zhao <[email protected]>"
+RECIPE_MAINTAINER:pn-cgo-helloworld = "Changqing Li 
<[email protected]>"
 RECIPE_MAINTAINER:pn-chrpath = "Yi Zhao <[email protected]>"
 RECIPE_MAINTAINER:pn-clang = "Khem Raj <[email protected]>"
 RECIPE_MAINTAINER:pn-clang-cross-${TARGET_ARCH} = "Khem Raj 
<[email protected]>"
diff --git a/meta/lib/oeqa/runtime/cases/go.py 
b/meta/lib/oeqa/runtime/cases/go.py
index 0c9c4ff4cd..6e7a9bcd94 100644
--- a/meta/lib/oeqa/runtime/cases/go.py
+++ b/meta/lib/oeqa/runtime/cases/go.py
@@ -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)
diff --git 
a/meta/recipes-core/packagegroups/packagegroup-core-tools-testapps.bb 
b/meta/recipes-core/packagegroups/packagegroup-core-tools-testapps.bb
index 25561f6878..d6bed8d32c 100644
--- a/meta/recipes-core/packagegroups/packagegroup-core-tools-testapps.bb
+++ b/meta/recipes-core/packagegroups/packagegroup-core-tools-testapps.bb
@@ -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 ?= ""
 
diff --git a/meta/recipes-extended/go-examples/cgo-helloworld/cgo-helloworld.go 
b/meta/recipes-extended/go-examples/cgo-helloworld/cgo-helloworld.go
new file mode 100644
index 0000000000..0c1f9d4c96
--- /dev/null
+++ b/meta/recipes-extended/go-examples/cgo-helloworld/cgo-helloworld.go
@@ -0,0 +1,9 @@
+package main
+
+// #include <stdio.h>
+// void hello() { printf("Hello, world!\n"); fflush(stdout);}
+import "C"
+
+func main() {
+       C.hello()
+}
diff --git a/meta/recipes-extended/go-examples/cgo-helloworld_1.0.bb 
b/meta/recipes-extended/go-examples/cgo-helloworld_1.0.bb
new file mode 100644
index 0000000000..9ca1e16c7a
--- /dev/null
+++ b/meta/recipes-extended/go-examples/cgo-helloworld_1.0.bb
@@ -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
+}
-- 
2.34.1

-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#237379): 
https://lists.openembedded.org/g/openembedded-core/message/237379
Mute This Topic: https://lists.openembedded.org/mt/119402492/21656
Group Owner: [email protected]
Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub 
[[email protected]]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to