* 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]] -=-=-=-=-=-=-=-=-=-=-=-
