All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v8 0/9] Revamp the Go support
@ 2017-09-13 17:54 Otavio Salvador
  2017-09-13 17:54 ` [PATCH v8 1/9] go-runtime: extend to nativesdk builds Otavio Salvador
                   ` (8 more replies)
  0 siblings, 9 replies; 10+ messages in thread
From: Otavio Salvador @ 2017-09-13 17:54 UTC (permalink / raw)
  To: OpenEmbedded Core Mailing List; +Cc: Will Newton, Otavio Salvador

This improves the Go support on OE-Core.

We are trying to port as much as possible work done by Matt on
meta-golang back to OE-Core and also to avoid carrying old releases as
there is no need to support more versions of Go toolchain.

This fixes issues in existing support as well as add support for SDK
generation which supports Go.

Changes in v9:
- new patch
- new patch
- new patch
- new patch
- new patch
- new patch
- new patch
- new patch

Matt Madison (7):
  go-runtime: extend to nativesdk builds
  goarch.bbclass: identify archs with Go dynamic linking support
  go-1.8: add patch for set soname in ELF shared objects
  go-runtime: build the Go runtime as a shared library
  go.bbclass: add support linking against shared runtime
  goarch.bbclass: set ARM_INSTRUCTION_SET to "arm"
  go: update to go 1.9

Otavio Salvador (2):
  go.bbclass: Add "ldflags" to QA skip list
  go.bbclass: Add ptest support

 meta/classes/go.bbclass                            | 75 ++++++++++++++++++++--
 meta/classes/goarch.bbclass                        | 11 ++++
 meta/recipes-devtools/go/go-1.8.inc                | 21 ------
 .../go/go-1.8/armhf-elf-header.patch               | 23 -------
 .../go/go-1.8/fix-cc-handling.patch                | 50 ---------------
 .../go/go-1.8/fix-target-cc-for-build.patch        | 17 -----
 meta/recipes-devtools/go/go-1.8/gotooldir.patch    | 30 ---------
 .../go/go-1.8/make-goroot-precious.patch           | 21 ------
 meta/recipes-devtools/go/go-1.8/syslog.patch       | 62 ------------------
 meta/recipes-devtools/go/go-1.9.inc                | 18 ++++++
 .../0001-make.bash-quote-CC_FOR_TARGET.patch       | 32 +++++++++
 ...CC-and-CXX-environment-variable-construct.patch | 67 +++++++++++++++++++
 ...h-better-separate-host-and-target-builds.patch} | 52 +++++++++++----
 ...w-GOTOOLDIR-to-be-overridden-in-the-envir.patch | 68 ++++++++++++++++++++
 ...05-cmd-go-make-GOROOT-precious-by-default.patch | 41 ++++++++++++
 ...d-GOTOOLDIR_BOOTSTRAP-environment-variab.patch} | 26 ++++++--
 .../0007-ld-add-soname-to-shareable-objects.patch  | 46 +++++++++++++
 meta/recipes-devtools/go/go-cross-canadian.inc     |  1 +
 ...ss-canadian_1.8.bb => go-cross-canadian_1.9.bb} |  0
 meta/recipes-devtools/go/go-cross.inc              |  2 +-
 .../go/{go-cross_1.8.bb => go-cross_1.9.bb}        |  0
 .../go/{go-crosssdk_1.8.bb => go-crosssdk_1.9.bb}  |  0
 meta/recipes-devtools/go/go-dep_0.3.0.bb           |  2 -
 meta/recipes-devtools/go/go-native.inc             |  2 +-
 .../go/{go-native_1.8.bb => go-native_1.9.bb}      |  0
 meta/recipes-devtools/go/go-runtime.inc            | 27 +++++++-
 .../go/{go-runtime_1.8.bb => go-runtime_1.9.bb}    |  0
 meta/recipes-devtools/go/{go_1.8.bb => go_1.9.bb}  |  0
 28 files changed, 443 insertions(+), 251 deletions(-)
 delete mode 100644 meta/recipes-devtools/go/go-1.8.inc
 delete mode 100644 meta/recipes-devtools/go/go-1.8/armhf-elf-header.patch
 delete mode 100644 meta/recipes-devtools/go/go-1.8/fix-cc-handling.patch
 delete mode 100644 meta/recipes-devtools/go/go-1.8/fix-target-cc-for-build.patch
 delete mode 100644 meta/recipes-devtools/go/go-1.8/gotooldir.patch
 delete mode 100644 meta/recipes-devtools/go/go-1.8/make-goroot-precious.patch
 delete mode 100644 meta/recipes-devtools/go/go-1.8/syslog.patch
 create mode 100644 meta/recipes-devtools/go/go-1.9.inc
 create mode 100644 meta/recipes-devtools/go/go-1.9/0001-make.bash-quote-CC_FOR_TARGET.patch
 create mode 100644 meta/recipes-devtools/go/go-1.9/0002-cmd-go-fix-CC-and-CXX-environment-variable-construct.patch
 rename meta/recipes-devtools/go/{go-1.8/split-host-and-target-build.patch => go-1.9/0003-make.bash-better-separate-host-and-target-builds.patch} (60%)
 create mode 100644 meta/recipes-devtools/go/go-1.9/0004-cmd-go-allow-GOTOOLDIR-to-be-overridden-in-the-envir.patch
 create mode 100644 meta/recipes-devtools/go/go-1.9/0005-cmd-go-make-GOROOT-precious-by-default.patch
 rename meta/recipes-devtools/go/{go-1.8/set-gotooldir-during-bootstrap.patch => go-1.9/0006-make.bash-add-GOTOOLDIR_BOOTSTRAP-environment-variab.patch} (55%)
 create mode 100644 meta/recipes-devtools/go/go-1.9/0007-ld-add-soname-to-shareable-objects.patch
 rename meta/recipes-devtools/go/{go-cross-canadian_1.8.bb => go-cross-canadian_1.9.bb} (100%)
 rename meta/recipes-devtools/go/{go-cross_1.8.bb => go-cross_1.9.bb} (100%)
 rename meta/recipes-devtools/go/{go-crosssdk_1.8.bb => go-crosssdk_1.9.bb} (100%)
 rename meta/recipes-devtools/go/{go-native_1.8.bb => go-native_1.9.bb} (100%)
 rename meta/recipes-devtools/go/{go-runtime_1.8.bb => go-runtime_1.9.bb} (100%)
 rename meta/recipes-devtools/go/{go_1.8.bb => go_1.9.bb} (100%)

-- 
2.14.1



^ permalink raw reply	[flat|nested] 10+ messages in thread

* [PATCH v8 1/9] go-runtime: extend to nativesdk builds
  2017-09-13 17:54 [PATCH v8 0/9] Revamp the Go support Otavio Salvador
@ 2017-09-13 17:54 ` Otavio Salvador
  2017-09-13 17:54 ` [PATCH v8 2/9] goarch.bbclass: identify archs with Go dynamic linking support Otavio Salvador
                   ` (7 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: Otavio Salvador @ 2017-09-13 17:54 UTC (permalink / raw)
  To: OpenEmbedded Core Mailing List; +Cc: Will Newton, Otavio Salvador

From: Matt Madison <matt@madison.systems>

Missed this when addding SDK support.

Signed-off-by: Matt Madison <matt@madison.systems>
Signed-off-by: Otavio Salvador <otavio@ossystems.com.br>
---

Changes in v9:
- new patch

 meta/recipes-devtools/go/go-runtime.inc | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/meta/recipes-devtools/go/go-runtime.inc b/meta/recipes-devtools/go/go-runtime.inc
index e3eddda837..3775e86b06 100644
--- a/meta/recipes-devtools/go/go-runtime.inc
+++ b/meta/recipes-devtools/go/go-runtime.inc
@@ -1,4 +1,5 @@
 DEPENDS = "virtual/${TARGET_PREFIX}go go-native"
+DEPENDS_class-nativesdk = "virtual/${TARGET_PREFIX}go-crosssdk"
 PROVIDES = "virtual/${TARGET_PREFIX}go-runtime"
 
 export GOHOSTOS = "${BUILD_GOOS}"
@@ -56,3 +57,5 @@ INSANE_SKIP_${PN}-dev = "staticdev ldflags file-rdeps arch"
 
 INHIBIT_PACKAGE_STRIP = "1"
 INHIBIT_PACKAGE_DEBUG_SPLIT = "1"
+
+BBCLASSEXTEND = "nativesdk"
-- 
2.14.1



^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH v8 2/9] goarch.bbclass: identify archs with Go dynamic linking support
  2017-09-13 17:54 [PATCH v8 0/9] Revamp the Go support Otavio Salvador
  2017-09-13 17:54 ` [PATCH v8 1/9] go-runtime: extend to nativesdk builds Otavio Salvador
@ 2017-09-13 17:54 ` Otavio Salvador
  2017-09-13 17:54 ` [PATCH v8 3/9] go-1.8: add patch for set soname in ELF shared objects Otavio Salvador
                   ` (6 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: Otavio Salvador @ 2017-09-13 17:54 UTC (permalink / raw)
  To: OpenEmbedded Core Mailing List; +Cc: Will Newton, Otavio Salvador

From: Matt Madison <matt@madison.systems>

Go only supports shared libraries for some architectures, so
add a variable for use elsewhere that gets a non-null value
only for those architectures.

Signed-off-by: Matt Madison <matt@madison.systems>
Signed-off-by: Otavio Salvador <otavio@ossystems.com.br>
---

Changes in v9:
- new patch

 meta/classes/goarch.bbclass | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/meta/classes/goarch.bbclass b/meta/classes/goarch.bbclass
index 0c22f80518..bfba3c9723 100644
--- a/meta/classes/goarch.bbclass
+++ b/meta/classes/goarch.bbclass
@@ -11,6 +11,16 @@ TARGET_GOARM = "${@go_map_arm(d.getVar('TARGET_ARCH'), d.getVar('TUNE_FEATURES')
 TARGET_GOTUPLE = "${TARGET_GOOS}_${TARGET_GOARCH}"
 GO_BUILD_BINDIR = "${@['bin/${HOST_GOTUPLE}','bin'][d.getVar('BUILD_GOTUPLE') == d.getVar('HOST_GOTUPLE')]}"
 
+# Go supports dynamic linking on a limited set of architectures.
+# See the supportsDynlink function in go/src/cmd/compile/internal/gc/main.go
+GO_DYNLINK = ""
+GO_DYNLINK_arm = "1"
+GO_DYNLINK_aarch64 = "1"
+GO_DYNLINK_x86 = "1"
+GO_DYNLINK_x86-64 = "1"
+GO_DYNLINK_powerpc64 = "1"
+GO_DYNLINK_class-native = ""
+
 # define here because everybody inherits this class
 #
 COMPATIBLE_HOST_linux-gnux32 = "null"
-- 
2.14.1



^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH v8 3/9] go-1.8: add patch for set soname in ELF shared objects
  2017-09-13 17:54 [PATCH v8 0/9] Revamp the Go support Otavio Salvador
  2017-09-13 17:54 ` [PATCH v8 1/9] go-runtime: extend to nativesdk builds Otavio Salvador
  2017-09-13 17:54 ` [PATCH v8 2/9] goarch.bbclass: identify archs with Go dynamic linking support Otavio Salvador
@ 2017-09-13 17:54 ` Otavio Salvador
  2017-09-13 17:54 ` [PATCH v8 4/9] go-runtime: build the Go runtime as a shared library Otavio Salvador
                   ` (5 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: Otavio Salvador @ 2017-09-13 17:54 UTC (permalink / raw)
  To: OpenEmbedded Core Mailing List; +Cc: Will Newton, Otavio Salvador

From: Matt Madison <matt@madison.systems>

The go link tool does not set the soname by default, which
prevents package.bbclass's shlibs processing from seeing
shared libraries built with go.

This patch passes appropriate options to go's linker and
the external linker to set the soname.

Signed-off-by: Matt Madison <matt@madison.systems>
Signed-off-by: Otavio Salvador <otavio@ossystems.com.br>
---

Changes in v9:
- new patch

 meta/recipes-devtools/go/go-1.8.inc                |  1 +
 ...06-linker-add-soname-to-shareable-objects.patch | 44 ++++++++++++++++++++++
 2 files changed, 45 insertions(+)
 create mode 100644 meta/recipes-devtools/go/go-1.8/0006-linker-add-soname-to-shareable-objects.patch

diff --git a/meta/recipes-devtools/go/go-1.8.inc b/meta/recipes-devtools/go/go-1.8.inc
index 141c0994c3..8c4b71e428 100644
--- a/meta/recipes-devtools/go/go-1.8.inc
+++ b/meta/recipes-devtools/go/go-1.8.inc
@@ -16,6 +16,7 @@ SRC_URI += "\
        file://gotooldir.patch \
        file://make-goroot-precious.patch \
        file://set-gotooldir-during-bootstrap.patch \
+       file://0006-linker-add-soname-to-shareable-objects.patch \
 "
 SRC_URI[main.md5sum] = "64e9380e07bba907e26a00cf5fcbe77e"
 SRC_URI[main.sha256sum] = "5f5dea2447e7dcfdc50fa6b94c512e58bfba5673c039259fd843f68829d99fa6"
diff --git a/meta/recipes-devtools/go/go-1.8/0006-linker-add-soname-to-shareable-objects.patch b/meta/recipes-devtools/go/go-1.8/0006-linker-add-soname-to-shareable-objects.patch
new file mode 100644
index 0000000000..74e1f2459e
--- /dev/null
+++ b/meta/recipes-devtools/go/go-1.8/0006-linker-add-soname-to-shareable-objects.patch
@@ -0,0 +1,44 @@
+From 81e9e322297d83f57f02548689c71859bfce10ee Mon Sep 17 00:00:00 2001
+From: Matt Madison <matt@madison.systems>
+Date: Sun, 15 Jan 2017 05:24:49 -0800
+Subject: [PATCH 6/6] linker: add soname to shareable objects
+
+Shared library handling in OE builds works better when shared
+libraries are tagged with SONAMEs.
+
+Upstream-Status: Pending
+Signed-off-by: Matt Madison <matt@madison.systems>
+---
+ src/cmd/link/internal/ld/lib.go | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/src/cmd/link/internal/ld/lib.go b/src/cmd/link/internal/ld/lib.go
+index 74d79d3..6d03005 100644
+--- a/src/cmd/link/internal/ld/lib.go
++++ b/src/cmd/link/internal/ld/lib.go
+@@ -1040,12 +1040,14 @@ func (l *Link) hostlink() {
+ 			// Pass -z nodelete to mark the shared library as
+ 			// non-closeable: a dlclose will do nothing.
+ 			argv = append(argv, "-shared", "-Wl,-z,nodelete")
++			argv = append(argv, fmt.Sprintf("-Wl,-soname,%s", filepath.Base(*flagOutfile)))
+ 		}
+ 	case BuildmodeShared:
+ 		if UseRelro() {
+ 			argv = append(argv, "-Wl,-z,relro")
+ 		}
+ 		argv = append(argv, "-shared")
++		argv = append(argv, fmt.Sprintf("-Wl,-soname,%s", filepath.Base(*flagOutfile)))
+ 	case BuildmodePlugin:
+ 		if Headtype == obj.Hdarwin {
+ 			argv = append(argv, "-dynamiclib")
+@@ -1054,6 +1056,7 @@ func (l *Link) hostlink() {
+ 				argv = append(argv, "-Wl,-z,relro")
+ 			}
+ 			argv = append(argv, "-shared")
++			argv = append(argv, fmt.Sprintf("-Wl,-soname,%s", filepath.Base(*flagOutfile)))
+ 		}
+ 	}
+ 
+-- 
+2.7.4
+
-- 
2.14.1



^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH v8 4/9] go-runtime: build the Go runtime as a shared library
  2017-09-13 17:54 [PATCH v8 0/9] Revamp the Go support Otavio Salvador
                   ` (2 preceding siblings ...)
  2017-09-13 17:54 ` [PATCH v8 3/9] go-1.8: add patch for set soname in ELF shared objects Otavio Salvador
@ 2017-09-13 17:54 ` Otavio Salvador
  2017-09-13 17:54 ` [PATCH v8 5/9] go.bbclass: add support linking against shared runtime Otavio Salvador
                   ` (4 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: Otavio Salvador @ 2017-09-13 17:54 UTC (permalink / raw)
  To: OpenEmbedded Core Mailing List; +Cc: Will Newton, Otavio Salvador

From: Matt Madison <matt@madison.systems>

If the target architecture supports, it build the Go
runtime as a shared library in addition to building
the static libraries.

Signed-off-by: Matt Madison <matt@madison.systems>
Signed-off-by: Otavio Salvador <otavio@ossystems.com.br>
---

Changes in v9:
- new patch

 meta/recipes-devtools/go/go-runtime.inc | 24 ++++++++++++++++++++++--
 1 file changed, 22 insertions(+), 2 deletions(-)

diff --git a/meta/recipes-devtools/go/go-runtime.inc b/meta/recipes-devtools/go/go-runtime.inc
index 3775e86b06..a074238e47 100644
--- a/meta/recipes-devtools/go/go-runtime.inc
+++ b/meta/recipes-devtools/go/go-runtime.inc
@@ -24,6 +24,9 @@ do_compile() {
 	mkdir ${GOBIN}
 	cd src
 	GO_FLAGS="" ./make.bash
+	if [ -n "${GO_DYNLINK}" ]; then
+		GO_FLAGS="-buildmode=shared" GO_LDFLAGS="-extldflags \"${LDFLAGS}\"" ./make.bash
+	fi
 	cd ${B}
 }
 
@@ -49,8 +52,25 @@ sysroot_stage_all_append() {
 }
 
 ALLOW_EMPTY_${PN} = "1"
-FILES_${PN}-dev = "${libdir}/go/src ${libdir}/go/pkg/include"
-FILES_${PN}-staticdev = "${libdir}/go/pkg/${TARGET_GOTUPLE} ${libdir}/go/pkg/${TARGET_GOTUPLE}"
+FILES_${PN} = "${libdir}/go/pkg/${TARGET_GOTUPLE}_dynlink/*${SOLIBSDEV}"
+FILES_${PN}-dev = "${libdir}/go/src ${libdir}/go/pkg/include \
+                   ${libdir}/go/pkg/${TARGET_GOTUPLE}_dynlink/*.shlibname \
+                   ${libdir}/go/pkg/${TARGET_GOTUPLE}_dynlink/*/*.shlibname \
+                   ${libdir}/go/pkg/${TARGET_GOTUPLE}_dynlink/*/*/*.shlibname \
+                   ${libdir}/go/pkg/${TARGET_GOTUPLE}_dynlink/*/*/*/*.shlibname \
+                   ${libdir}/go/pkg/${TARGET_GOTUPLE}_dynlink/*/*/*/*/*.shlibname \
+                   ${libdir}/go/pkg/${TARGET_GOTUPLE}_dynlink/*/*/*/*/*/*.shlibname \
+                   ${libdir}/go/pkg/${TARGET_GOTUPLE}_dynlink/*/*/*/*/*/*/*.shlibname \
+"
+FILES_${PN}-staticdev = "${libdir}/go/pkg/${TARGET_GOTUPLE} \
+                   ${libdir}/go/pkg/${TARGET_GOTUPLE}_dynlink/*.a \
+                   ${libdir}/go/pkg/${TARGET_GOTUPLE}_dynlink/*/*.a \
+                   ${libdir}/go/pkg/${TARGET_GOTUPLE}_dynlink/*/*/*.a \
+                   ${libdir}/go/pkg/${TARGET_GOTUPLE}_dynlink/*/*/*/*.a \
+                   ${libdir}/go/pkg/${TARGET_GOTUPLE}_dynlink/*/*/*/*/*.a \
+                   ${libdir}/go/pkg/${TARGET_GOTUPLE}_dynlink/*/*/*/*/*/*.a \
+                   ${libdir}/go/pkg/${TARGET_GOTUPLE}_dynlink/*/*/*/*/*/*/*.a \
+"
 # The testdata directories in the source tree include some binaries for various
 # architectures, scripts, and .a files
 INSANE_SKIP_${PN}-dev = "staticdev ldflags file-rdeps arch"
-- 
2.14.1



^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH v8 5/9] go.bbclass: add support linking against shared runtime
  2017-09-13 17:54 [PATCH v8 0/9] Revamp the Go support Otavio Salvador
                   ` (3 preceding siblings ...)
  2017-09-13 17:54 ` [PATCH v8 4/9] go-runtime: build the Go runtime as a shared library Otavio Salvador
@ 2017-09-13 17:54 ` Otavio Salvador
  2017-09-13 17:54 ` [PATCH v8 6/9] go.bbclass: Add "ldflags" to QA skip list Otavio Salvador
                   ` (3 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: Otavio Salvador @ 2017-09-13 17:54 UTC (permalink / raw)
  To: OpenEmbedded Core Mailing List; +Cc: Will Newton, Otavio Salvador

From: Matt Madison <matt@madison.systems>

For architectures that support it, use the -linkshared
build option to build packages against the shared Go
runtime.

Signed-off-by: Matt Madison <matt@madison.systems>
Signed-off-by: Otavio Salvador <otavio@ossystems.com.br>
---

Changes in v9:
- new patch

 meta/classes/go.bbclass | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/meta/classes/go.bbclass b/meta/classes/go.bbclass
index 8d363e86a2..d805dc2713 100644
--- a/meta/classes/go.bbclass
+++ b/meta/classes/go.bbclass
@@ -31,7 +31,14 @@ DEPENDS_GOLANG_class-nativesdk = "virtual/${TARGET_PREFIX}go-crosssdk virtual/${
 
 DEPENDS_append = " ${DEPENDS_GOLANG}"
 
-export GOBUILDFLAGS ?= "-v"
+GO_LINKSHARED ?= "${@'-linkshared' if d.getVar('GO_DYNLINK') else ''}"
+GO_RPATH_LINK = "${@'-Wl,-rpath-link=${STAGING_DIR_TARGET}${libdir}/go/pkg/${TARGET_GOTUPLE}_dynlink' if d.getVar('GO_DYNLINK') else ''}"
+GO_RPATH = "${@'-r ${libdir}/go/pkg/${TARGET_GOTUPLE}_dynlink' if d.getVar('GO_DYNLINK') else ''}"
+GO_RPATH_class-native = "${@'-r ${STAGING_LIBDIR_NATIVE}/go/pkg/${TARGET_GOTUPLE}_dynlink' if d.getVar('GO_DYNLINK') else ''}"
+GO_RPATH_LINK_class-native = "${@'-Wl,-rpath-link=${STAGING_LIBDIR_NATIVE}/go/pkg/${TARGET_GOTUPLE}_dynlink' if d.getVar('GO_DYNLINK') else ''}"
+GO_EXTLDFLAGS ?= "${HOST_CC_ARCH}${TOOLCHAIN_OPTIONS} ${GO_RPATH_LINK} ${LDFLAGS}"
+GO_LDFLAGS ?= '-ldflags="${GO_RPATH} -extldflags '${GO_EXTLDFLAGS}'"'
+export GOBUILDFLAGS ?= "-v ${GO_LDFLAGS}"
 GOBUILDFLAGS_prepend_task-compile = "${GO_PARALLEL_BUILD} "
 
 export GO = "${HOST_PREFIX}go"
@@ -81,7 +88,7 @@ go_do_configure() {
 go_do_compile() {
 	${GO} env
 	if [ -n "${GO_INSTALL}" ]; then
-		${GO} install ${GOBUILDFLAGS} `go_list_packages`
+		${GO} install ${GO_LINKSHARED} ${GOBUILDFLAGS} `go_list_packages`
 	fi
 }
 do_compile[cleandirs] = "${B}/bin ${B}/pkg"
-- 
2.14.1



^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH v8 6/9] go.bbclass: Add "ldflags" to QA skip list
  2017-09-13 17:54 [PATCH v8 0/9] Revamp the Go support Otavio Salvador
                   ` (4 preceding siblings ...)
  2017-09-13 17:54 ` [PATCH v8 5/9] go.bbclass: add support linking against shared runtime Otavio Salvador
@ 2017-09-13 17:54 ` Otavio Salvador
  2017-09-13 17:54 ` [PATCH v8 7/9] go.bbclass: Add ptest support Otavio Salvador
                   ` (2 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: Otavio Salvador @ 2017-09-13 17:54 UTC (permalink / raw)
  To: OpenEmbedded Core Mailing List; +Cc: Will Newton, Otavio Salvador

Currently every Go package will end with GNU_HASH in the ELF binary
however adding it to every recipe is cumbersome so instead we handle
that here.

Signed-off-by: Otavio Salvador <otavio@ossystems.com.br>
---

Changes in v9: None

 meta/classes/go.bbclass                  | 2 ++
 meta/recipes-devtools/go/go-dep_0.3.0.bb | 2 --
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/meta/classes/go.bbclass b/meta/classes/go.bbclass
index d805dc2713..4af148e302 100644
--- a/meta/classes/go.bbclass
+++ b/meta/classes/go.bbclass
@@ -109,3 +109,5 @@ EXPORT_FUNCTIONS do_unpack do_configure do_compile do_install
 
 FILES_${PN}-dev = "${libdir}/go/src"
 FILES_${PN}-staticdev = "${libdir}/go/pkg"
+
+INSANE_SKIP_${PN} += "ldflags"
diff --git a/meta/recipes-devtools/go/go-dep_0.3.0.bb b/meta/recipes-devtools/go/go-dep_0.3.0.bb
index 5e4544a104..abfeb48370 100644
--- a/meta/recipes-devtools/go/go-dep_0.3.0.bb
+++ b/meta/recipes-devtools/go/go-dep_0.3.0.bb
@@ -13,6 +13,4 @@ inherit go
 
 GO_INSTALL = "${GO_IMPORT}/cmd/dep"
 
-INSANE_SKIP_${PN} += "ldflags"
-
 RDEPENDS_${PN}-dev += "bash"
-- 
2.14.1



^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH v8 7/9] go.bbclass: Add ptest support
  2017-09-13 17:54 [PATCH v8 0/9] Revamp the Go support Otavio Salvador
                   ` (5 preceding siblings ...)
  2017-09-13 17:54 ` [PATCH v8 6/9] go.bbclass: Add "ldflags" to QA skip list Otavio Salvador
@ 2017-09-13 17:54 ` Otavio Salvador
  2017-09-13 17:54 ` [PATCH v8 8/9] goarch.bbclass: set ARM_INSTRUCTION_SET to "arm" Otavio Salvador
  2017-09-13 17:54 ` [PATCH v8 9/9] go: update to go 1.9 Otavio Salvador
  8 siblings, 0 replies; 10+ messages in thread
From: Otavio Salvador @ 2017-09-13 17:54 UTC (permalink / raw)
  To: OpenEmbedded Core Mailing List; +Cc: Will Newton, Otavio Salvador

This adds ptest support for Go packages so its unittest content is
packaged and integrated onto the test framework.

Signed-off-by: Otavio Salvador <otavio@ossystems.com.br>
---

Changes in v9:
- new patch

 meta/classes/go.bbclass | 62 +++++++++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 60 insertions(+), 2 deletions(-)

diff --git a/meta/classes/go.bbclass b/meta/classes/go.bbclass
index 4af148e302..33502bf722 100644
--- a/meta/classes/go.bbclass
+++ b/meta/classes/go.bbclass
@@ -1,4 +1,4 @@
-inherit goarch
+inherit goarch ptest
 
 def get_go_parallel_make(d):
     pm = (d.getVar('PARALLEL_MAKE') or '').split()
@@ -39,6 +39,8 @@ GO_RPATH_LINK_class-native = "${@'-Wl,-rpath-link=${STAGING_LIBDIR_NATIVE}/go/pk
 GO_EXTLDFLAGS ?= "${HOST_CC_ARCH}${TOOLCHAIN_OPTIONS} ${GO_RPATH_LINK} ${LDFLAGS}"
 GO_LDFLAGS ?= '-ldflags="${GO_RPATH} -extldflags '${GO_EXTLDFLAGS}'"'
 export GOBUILDFLAGS ?= "-v ${GO_LDFLAGS}"
+export GOPTESTBUILDFLAGS ?= "${GOBUILDFLAGS} -c"
+export GOPTESTFLAGS ?= "-test.v"
 GOBUILDFLAGS_prepend_task-compile = "${GO_PARALLEL_BUILD} "
 
 export GO = "${HOST_PREFIX}go"
@@ -81,6 +83,13 @@ go_list_packages() {
 		egrep -v '${GO_INSTALL_FILTEROUT}'
 }
 
+go_list_package_tests() {
+    ${GO} list -f '{{.ImportPath}} {{.TestGoFiles}}' ${GOBUILDFLAGS} ${GO_INSTALL} | \
+		grep -v '\[\]$' | \
+		egrep -v '${GO_INSTALL_FILTEROUT}' | \
+		awk '{ print $1 }'
+}
+
 go_do_configure() {
 	ln -snf ${S}/src ${B}/
 }
@@ -93,9 +102,19 @@ go_do_compile() {
 }
 do_compile[cleandirs] = "${B}/bin ${B}/pkg"
 
+do_compile_ptest() {
+    rm -f ${B}/.go_compiled_tests.list
+	go_list_package_tests | while read pkg; do
+		cd ${B}/src/$pkg
+		${GO} test ${GOPTESTBUILDFLAGS} $pkg
+		find . -mindepth 1 -maxdepth 1 -type f -name '*.test' -exec echo $pkg/{} \; | \
+			sed -e's,/\./,/,'>> ${B}/.go_compiled_tests.list
+	done
+}
+
 go_do_install() {
 	install -d ${D}${libdir}/go/src/${GO_IMPORT}
-	tar -C ${S}/src/${GO_IMPORT} -cf - --exclude-vcs . | \
+	tar -C ${S}/src/${GO_IMPORT} -cf - --exclude-vcs --exclude '*.test' . | \
 		tar -C ${D}${libdir}/go/src/${GO_IMPORT} --no-same-owner -xf -
 	tar -C ${B} -cf - pkg | tar -C ${D}${libdir}/go --no-same-owner -xf -
 
@@ -105,9 +124,48 @@ go_do_install() {
 	fi
 }
 
+do_install_ptest_base() {
+set -x
+    test -f "${B}/.go_compiled_tests.list" || exit 0
+    tests=""
+    while read test; do
+        tests="$tests${tests:+ }${test%.test}"
+        testdir=`dirname $test`
+        install -d ${D}${PTEST_PATH}/$testdir
+        install -m 0755 ${B}/src/$test ${D}${PTEST_PATH}/$test
+        if [ -d "${B}/src/$testdir/testdata" ]; then
+            cp --preserve=mode,timestamps -R "${B}/src/$testdir/testdata" ${D}${PTEST_PATH}/$testdir
+        fi
+    done < ${B}/.go_compiled_tests.list
+    if [ -n "$tests" ]; then
+        install -d ${D}${PTEST_PATH}
+        cat >${D}${PTEST_PATH}/run-ptest <<EOF
+#!/bin/sh
+ANYFAILED=0
+for t in $tests; do
+    testdir=\`dirname \$t.test\`
+    if ( cd "${PTEST_PATH}/\$testdir"; "${PTEST_PATH}/\$t.test" ${GOPTESTFLAGS} | tee /dev/fd/9 | grep -q "^FAIL" ) 9>&1; then
+        ANYFAILED=1
+    fi
+done
+if [ \$ANYFAILED -ne 0 ]; then
+    echo "FAIL: ${PN}"
+    exit 1
+fi
+echo "PASS: ${PN}"
+exit 0
+EOF
+        chmod +x ${D}${PTEST_PATH}/run-ptest
+    else
+        rm -rf ${D}${PTEST_PATH}
+    fi
+set +x
+}
+
 EXPORT_FUNCTIONS do_unpack do_configure do_compile do_install
 
 FILES_${PN}-dev = "${libdir}/go/src"
 FILES_${PN}-staticdev = "${libdir}/go/pkg"
 
 INSANE_SKIP_${PN} += "ldflags"
+INSANE_SKIP_${PN}-ptest += "ldflags"
-- 
2.14.1



^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH v8 8/9] goarch.bbclass: set ARM_INSTRUCTION_SET to "arm"
  2017-09-13 17:54 [PATCH v8 0/9] Revamp the Go support Otavio Salvador
                   ` (6 preceding siblings ...)
  2017-09-13 17:54 ` [PATCH v8 7/9] go.bbclass: Add ptest support Otavio Salvador
@ 2017-09-13 17:54 ` Otavio Salvador
  2017-09-13 17:54 ` [PATCH v8 9/9] go: update to go 1.9 Otavio Salvador
  8 siblings, 0 replies; 10+ messages in thread
From: Otavio Salvador @ 2017-09-13 17:54 UTC (permalink / raw)
  To: OpenEmbedded Core Mailing List; +Cc: Will Newton, Otavio Salvador

From: Matt Madison <matt@madison.systems>

Go does not play well with thumb, so ensure that the
toolchain and any packages use arm, not thumb, instructions.

Signed-off-by: Matt Madison <matt@madison.systems>
Signed-off-by: Otavio Salvador <otavio@ossystems.com.br>
---

Changes in v9:
- new patch

 meta/classes/goarch.bbclass | 1 +
 1 file changed, 1 insertion(+)

diff --git a/meta/classes/goarch.bbclass b/meta/classes/goarch.bbclass
index bfba3c9723..8b95c5fe94 100644
--- a/meta/classes/goarch.bbclass
+++ b/meta/classes/goarch.bbclass
@@ -27,6 +27,7 @@ COMPATIBLE_HOST_linux-gnux32 = "null"
 COMPATIBLE_HOST_linux-muslx32 = "null"
 COMPATIBLE_HOST_powerpc = "null"
 COMPATIBLE_HOST_powerpc64 = "null"
+ARM_INSTRUCTION_SET = "arm"
 
 def go_map_arch(a, d):
     import re
-- 
2.14.1



^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH v8 9/9] go: update to go 1.9
  2017-09-13 17:54 [PATCH v8 0/9] Revamp the Go support Otavio Salvador
                   ` (7 preceding siblings ...)
  2017-09-13 17:54 ` [PATCH v8 8/9] goarch.bbclass: set ARM_INSTRUCTION_SET to "arm" Otavio Salvador
@ 2017-09-13 17:54 ` Otavio Salvador
  8 siblings, 0 replies; 10+ messages in thread
From: Otavio Salvador @ 2017-09-13 17:54 UTC (permalink / raw)
  To: OpenEmbedded Core Mailing List; +Cc: Will Newton, Otavio Salvador

From: Matt Madison <matt@madison.systems>

* Rebased patches
   - dropped armhf-elf patch, should no longer be needed
   - dropped syslog patch which should not have been imported to begin with
   - reworked other patches as needed for the updated code base

* Updated native, cross, cross-canadian .inc files to
  remove some testdata directories that contain .a files
  that strip chokes on during sysroot staging

Signed-off-by: Matt Madison <matt@madison.systems>
Signed-off-by: Otavio Salvador <otavio@ossystems.com.br>
---

Changes in v9:
- new patch

 meta/recipes-devtools/go/go-1.8.inc                | 22 -------
 .../go/go-1.8/armhf-elf-header.patch               | 23 --------
 .../go/go-1.8/fix-cc-handling.patch                | 50 ----------------
 .../go/go-1.8/fix-target-cc-for-build.patch        | 17 ------
 meta/recipes-devtools/go/go-1.8/gotooldir.patch    | 30 ----------
 .../go/go-1.8/make-goroot-precious.patch           | 21 -------
 meta/recipes-devtools/go/go-1.8/syslog.patch       | 62 --------------------
 meta/recipes-devtools/go/go-1.9.inc                | 18 ++++++
 .../0001-make.bash-quote-CC_FOR_TARGET.patch       | 32 ++++++++++
 ...CC-and-CXX-environment-variable-construct.patch | 67 +++++++++++++++++++++
 ...h-better-separate-host-and-target-builds.patch} | 52 +++++++++++++----
 ...w-GOTOOLDIR-to-be-overridden-in-the-envir.patch | 68 ++++++++++++++++++++++
 ...05-cmd-go-make-GOROOT-precious-by-default.patch | 41 +++++++++++++
 ...d-GOTOOLDIR_BOOTSTRAP-environment-variab.patch} | 26 +++++++--
 .../0007-ld-add-soname-to-shareable-objects.patch} | 20 ++++---
 meta/recipes-devtools/go/go-cross-canadian.inc     |  1 +
 ...ss-canadian_1.8.bb => go-cross-canadian_1.9.bb} |  0
 meta/recipes-devtools/go/go-cross.inc              |  2 +-
 .../go/{go-cross_1.8.bb => go-cross_1.9.bb}        |  0
 .../go/{go-crosssdk_1.8.bb => go-crosssdk_1.9.bb}  |  0
 meta/recipes-devtools/go/go-native.inc             |  2 +-
 .../go/{go-native_1.8.bb => go-native_1.9.bb}      |  0
 .../go/{go-runtime_1.8.bb => go-runtime_1.9.bb}    |  0
 meta/recipes-devtools/go/{go_1.8.bb => go_1.9.bb}  |  0
 24 files changed, 301 insertions(+), 253 deletions(-)
 delete mode 100644 meta/recipes-devtools/go/go-1.8.inc
 delete mode 100644 meta/recipes-devtools/go/go-1.8/armhf-elf-header.patch
 delete mode 100644 meta/recipes-devtools/go/go-1.8/fix-cc-handling.patch
 delete mode 100644 meta/recipes-devtools/go/go-1.8/fix-target-cc-for-build.patch
 delete mode 100644 meta/recipes-devtools/go/go-1.8/gotooldir.patch
 delete mode 100644 meta/recipes-devtools/go/go-1.8/make-goroot-precious.patch
 delete mode 100644 meta/recipes-devtools/go/go-1.8/syslog.patch
 create mode 100644 meta/recipes-devtools/go/go-1.9.inc
 create mode 100644 meta/recipes-devtools/go/go-1.9/0001-make.bash-quote-CC_FOR_TARGET.patch
 create mode 100644 meta/recipes-devtools/go/go-1.9/0002-cmd-go-fix-CC-and-CXX-environment-variable-construct.patch
 rename meta/recipes-devtools/go/{go-1.8/split-host-and-target-build.patch => go-1.9/0003-make.bash-better-separate-host-and-target-builds.patch} (60%)
 create mode 100644 meta/recipes-devtools/go/go-1.9/0004-cmd-go-allow-GOTOOLDIR-to-be-overridden-in-the-envir.patch
 create mode 100644 meta/recipes-devtools/go/go-1.9/0005-cmd-go-make-GOROOT-precious-by-default.patch
 rename meta/recipes-devtools/go/{go-1.8/set-gotooldir-during-bootstrap.patch => go-1.9/0006-make.bash-add-GOTOOLDIR_BOOTSTRAP-environment-variab.patch} (55%)
 rename meta/recipes-devtools/go/{go-1.8/0006-linker-add-soname-to-shareable-objects.patch => go-1.9/0007-ld-add-soname-to-shareable-objects.patch} (68%)
 rename meta/recipes-devtools/go/{go-cross-canadian_1.8.bb => go-cross-canadian_1.9.bb} (100%)
 rename meta/recipes-devtools/go/{go-cross_1.8.bb => go-cross_1.9.bb} (100%)
 rename meta/recipes-devtools/go/{go-crosssdk_1.8.bb => go-crosssdk_1.9.bb} (100%)
 rename meta/recipes-devtools/go/{go-native_1.8.bb => go-native_1.9.bb} (100%)
 rename meta/recipes-devtools/go/{go-runtime_1.8.bb => go-runtime_1.9.bb} (100%)
 rename meta/recipes-devtools/go/{go_1.8.bb => go_1.9.bb} (100%)

diff --git a/meta/recipes-devtools/go/go-1.8.inc b/meta/recipes-devtools/go/go-1.8.inc
deleted file mode 100644
index 8c4b71e428..0000000000
--- a/meta/recipes-devtools/go/go-1.8.inc
+++ /dev/null
@@ -1,22 +0,0 @@
-require go-common.inc
-
-GOMINOR = "3"
-GO_BASEVERSION = "1.8"
-PV .= ".${GOMINOR}"
-FILESEXTRAPATHS_prepend := "${FILE_DIRNAME}/go-${GO_BASEVERSION}:"
-
-LIC_FILES_CHKSUM = "file://LICENSE;md5=5d4950ecb7b26d2c5e4e7b4e0dd74707"
-
-SRC_URI += "\
-       file://armhf-elf-header.patch \
-       file://syslog.patch \
-       file://fix-target-cc-for-build.patch \
-       file://fix-cc-handling.patch \
-       file://split-host-and-target-build.patch \
-       file://gotooldir.patch \
-       file://make-goroot-precious.patch \
-       file://set-gotooldir-during-bootstrap.patch \
-       file://0006-linker-add-soname-to-shareable-objects.patch \
-"
-SRC_URI[main.md5sum] = "64e9380e07bba907e26a00cf5fcbe77e"
-SRC_URI[main.sha256sum] = "5f5dea2447e7dcfdc50fa6b94c512e58bfba5673c039259fd843f68829d99fa6"
diff --git a/meta/recipes-devtools/go/go-1.8/armhf-elf-header.patch b/meta/recipes-devtools/go/go-1.8/armhf-elf-header.patch
deleted file mode 100644
index 3508838e8b..0000000000
--- a/meta/recipes-devtools/go/go-1.8/armhf-elf-header.patch
+++ /dev/null
@@ -1,23 +0,0 @@
-Encode arm EABI ( hard/soft ) calling convention in ELF header
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
-Upstream-Status: Pending
-Index: go/src/cmd/link/internal/ld/elf.go
-===================================================================
---- go.orig/src/cmd/link/internal/ld/elf.go
-+++ go/src/cmd/link/internal/ld/elf.go
-@@ -950,7 +950,13 @@ func Elfinit(ctxt *Link) {
- 	case sys.ARM, sys.MIPS:
- 		if SysArch.Family == sys.ARM {
- 			// we use EABI on linux/arm, freebsd/arm, netbsd/arm.
--			if Headtype == obj.Hlinux || Headtype == obj.Hfreebsd || Headtype == obj.Hnetbsd {
-+			if Headtype == obj.Hlinux {
-+				if obj.GOARM == 7 {
-+					ehdr.flags = 0x5000402 // has entry point, Version5 EABI, hard float
-+				} else {
-+					ehdr.flags = 0x5000202 // has entry point, Version5 EABI, soft float
-+				}
-+			} else if Headtype == obj.Hfreebsd || Headtype == obj.Hnetbsd {
- 				// We set a value here that makes no indication of which
- 				// float ABI the object uses, because this is information
- 				// used by the dynamic linker to compare executables and
diff --git a/meta/recipes-devtools/go/go-1.8/fix-cc-handling.patch b/meta/recipes-devtools/go/go-1.8/fix-cc-handling.patch
deleted file mode 100644
index dc9b811b2a..0000000000
--- a/meta/recipes-devtools/go/go-1.8/fix-cc-handling.patch
+++ /dev/null
@@ -1,50 +0,0 @@
-Accept CC with multiple words in its name
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
-Upstream-Status: Pending
-Index: go/src/cmd/go/build.go
-===================================================================
---- go.orig/src/cmd/go/build.go
-+++ go/src/cmd/go/build.go
-@@ -3100,12 +3100,24 @@ func (b *builder) gccCmd(objdir string)
- 	return b.ccompilerCmd("CC", defaultCC, objdir)
- }
- 
-+// gccCmd returns a gcc command line prefix
-+// defaultCC is defined in zdefaultcc.go, written by cmd/dist.
-+func (b *builder) gccCmdForReal() []string {
-+	return envList("CC", defaultCC)
-+}
-+
- // gxxCmd returns a g++ command line prefix
- // defaultCXX is defined in zdefaultcc.go, written by cmd/dist.
- func (b *builder) gxxCmd(objdir string) []string {
- 	return b.ccompilerCmd("CXX", defaultCXX, objdir)
- }
- 
-+// gxxCmd returns a g++ command line prefix
-+// defaultCXX is defined in zdefaultcc.go, written by cmd/dist.
-+func (b *builder) gxxCmdForReal() []string {
-+	return envList("CXX", defaultCXX)
-+}
-+
- // gfortranCmd returns a gfortran command line prefix.
- func (b *builder) gfortranCmd(objdir string) []string {
- 	return b.ccompilerCmd("FC", "gfortran", objdir)
-Index: go/src/cmd/go/env.go
-===================================================================
---- go.orig/src/cmd/go/env.go
-+++ go/src/cmd/go/env.go
-@@ -63,10 +63,9 @@ func mkEnv() []envVar {
- 	}
- 
- 	cmd := b.gccCmd(".")
--	env = append(env, envVar{"CC", cmd[0]})
-+	env = append(env, envVar{"CC", strings.Join(b.gccCmdForReal(), " ")})
- 	env = append(env, envVar{"GOGCCFLAGS", strings.Join(cmd[3:], " ")})
--	cmd = b.gxxCmd(".")
--	env = append(env, envVar{"CXX", cmd[0]})
-+	env = append(env, envVar{"CXX", strings.Join(b.gxxCmdForReal(), " ")})
- 
- 	if buildContext.CgoEnabled {
- 		env = append(env, envVar{"CGO_ENABLED", "1"})
diff --git a/meta/recipes-devtools/go/go-1.8/fix-target-cc-for-build.patch b/meta/recipes-devtools/go/go-1.8/fix-target-cc-for-build.patch
deleted file mode 100644
index 2f6156ecd2..0000000000
--- a/meta/recipes-devtools/go/go-1.8/fix-target-cc-for-build.patch
+++ /dev/null
@@ -1,17 +0,0 @@
-Put Quotes around CC_FOR_TARGET since it can be mutliple words e.g. in OE
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
-Upstream-Status: Pending
-Index: go/src/make.bash
-===================================================================
---- go.orig/src/make.bash	2015-07-29 13:28:11.334031696 -0700
-+++ go/src/make.bash	2015-07-29 13:36:55.814465630 -0700
-@@ -158,7 +158,7 @@
- fi
- 
- echo "##### Building packages and commands for $GOOS/$GOARCH."
--CC=$CC_FOR_TARGET "$GOTOOLDIR"/go_bootstrap install $GO_FLAGS -gcflags "$GO_GCFLAGS" -ldflags "$GO_LDFLAGS" -v std cmd
-+CC="$CC_FOR_TARGET" "$GOTOOLDIR"/go_bootstrap install $GO_FLAGS -gcflags "$GO_GCFLAGS" -ldflags "$GO_LDFLAGS" -v std cmd
- echo
- 
- rm -f "$GOTOOLDIR"/go_bootstrap
diff --git a/meta/recipes-devtools/go/go-1.8/gotooldir.patch b/meta/recipes-devtools/go/go-1.8/gotooldir.patch
deleted file mode 100644
index 94670259f2..0000000000
--- a/meta/recipes-devtools/go/go-1.8/gotooldir.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-Define tooldir in relation to GOTOOLDIR env var
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
-Upstream-Status: Pending
-Index: go/src/go/build/build.go
-===================================================================
---- go.orig/src/go/build/build.go
-+++ go/src/go/build/build.go
-@@ -1388,7 +1388,7 @@ func init() {
- }
- 
- // ToolDir is the directory containing build tools.
--var ToolDir = filepath.Join(runtime.GOROOT(), "pkg/tool/"+runtime.GOOS+"_"+runtime.GOARCH)
-+var ToolDir = envOr("GOTOOLDIR", filepath.Join(runtime.GOROOT(), "pkg/tool/"+runtime.GOOS+"_"+runtime.GOARCH))
- 
- // IsLocalImport reports whether the import path is
- // a local import path, like ".", "..", "./foo", or "../foo".
-Index: go/src/cmd/go/build.go
-===================================================================
---- go.orig/src/cmd/go/build.go
-+++ go/src/cmd/go/build.go
-@@ -1312,7 +1312,7 @@ func (b *builder) build(a *action) (err
- 		}
- 
- 		cgoExe := tool("cgo")
--		if a.cgo != nil && a.cgo.target != "" {
-+		if a.cgo != nil && a.cgo.target != "" && os.Getenv("GOTOOLDIR") == "" {
- 			cgoExe = a.cgo.target
- 		}
- 		outGo, outObj, err := b.cgo(a.p, cgoExe, obj, pcCFLAGS, pcLDFLAGS, cgofiles, gccfiles, cxxfiles, a.p.MFiles)
diff --git a/meta/recipes-devtools/go/go-1.8/make-goroot-precious.patch b/meta/recipes-devtools/go/go-1.8/make-goroot-precious.patch
deleted file mode 100644
index 28a7a34773..0000000000
--- a/meta/recipes-devtools/go/go-1.8/make-goroot-precious.patch
+++ /dev/null
@@ -1,21 +0,0 @@
-Prevent GOROOT-resident packages from being rebuilt
-
-Signed-off-by: Matt Madison <matt@madison.systems>
-Upstream-Status: Pending
-
---- go.orig/src/cmd/go/pkg.go
-+++ go/src/cmd/go/pkg.go
-@@ -1496,6 +1496,13 @@ func isStale(p *Package) (bool, string)
- 		return true, "build ID mismatch"
- 	}
- 
-+	// For OE builds, make anything in GOROOT non-stale,
-+	// to prevent a package build from overwriting the
-+	// build root.
-+	if p.Goroot && os.Getenv("GOROOT_OVERRIDE") != "1" {
-+		return false, "GOROOT-resident packages do not get rebuilt"
-+	}
-+
- 	// Package is stale if a dependency is.
- 	for _, p1 := range p.deps {
- 		if p1.Stale {
diff --git a/meta/recipes-devtools/go/go-1.8/syslog.patch b/meta/recipes-devtools/go/go-1.8/syslog.patch
deleted file mode 100644
index 29be06f1bd..0000000000
--- a/meta/recipes-devtools/go/go-1.8/syslog.patch
+++ /dev/null
@@ -1,62 +0,0 @@
-Add timeouts to logger
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
-Upstream-Status: Pending
-
-diff -r -u go/src/log/syslog/syslog.go /home/achang/GOCOPY/go/src/log/syslog/syslog.go
---- go/src/log/syslog/syslog.go	2013-11-28 13:38:28.000000000 -0800
-+++ /home/achang/GOCOPY/go/src/log/syslog/syslog.go	2014-10-03 11:44:37.710403200 -0700
-@@ -33,6 +33,9 @@
- const severityMask = 0x07
- const facilityMask = 0xf8
- 
-+var writeTimeout = 1 * time.Second
-+var connectTimeout = 1 * time.Second
-+
- const (
- 	// Severity.
- 
-@@ -100,6 +103,7 @@
- type serverConn interface {
- 	writeString(p Priority, hostname, tag, s, nl string) error
- 	close() error
-+	setWriteDeadline(t time.Time) error
- }
- 
- type netConn struct {
-@@ -273,7 +277,11 @@
- 		nl = "\n"
- 	}
- 
--	err := w.conn.writeString(p, w.hostname, w.tag, msg, nl)
-+	err := w.conn.setWriteDeadline(time.Now().Add(writeTimeout))
-+	if err != nil {
-+		return 0, err
-+	}
-+	err = w.conn.writeString(p, w.hostname, w.tag, msg, nl)
- 	if err != nil {
- 		return 0, err
- 	}
-@@ -305,6 +313,10 @@
- 	return n.conn.Close()
- }
- 
-+func (n *netConn) setWriteDeadline(t time.Time) error {
-+	return n.conn.SetWriteDeadline(t)
-+}
-+
- // NewLogger creates a log.Logger whose output is written to
- // the system log service with the specified priority. The logFlag
- // argument is the flag set passed through to log.New to create
-diff -r -u go/src/log/syslog/syslog_unix.go /home/achang/GOCOPY/go/src/log/syslog/syslog_unix.go
---- go/src/log/syslog/syslog_unix.go	2013-11-28 13:38:28.000000000 -0800
-+++ /home/achang/GOCOPY/go/src/log/syslog/syslog_unix.go	2014-10-03 11:44:39.010403175 -0700
-@@ -19,7 +19,7 @@
- 	logPaths := []string{"/dev/log", "/var/run/syslog"}
- 	for _, network := range logTypes {
- 		for _, path := range logPaths {
--			conn, err := net.Dial(network, path)
-+			conn, err := net.DialTimeout(network, path, connectTimeout)
- 			if err != nil {
- 				continue
- 			} else {
diff --git a/meta/recipes-devtools/go/go-1.9.inc b/meta/recipes-devtools/go/go-1.9.inc
new file mode 100644
index 0000000000..d538f4c3a3
--- /dev/null
+++ b/meta/recipes-devtools/go/go-1.9.inc
@@ -0,0 +1,18 @@
+require go-common.inc
+
+GO_BASEVERSION = "1.9"
+FILESEXTRAPATHS_prepend := "${FILE_DIRNAME}/go-${GO_BASEVERSION}:"
+
+LIC_FILES_CHKSUM = "file://LICENSE;md5=5d4950ecb7b26d2c5e4e7b4e0dd74707"
+
+SRC_URI += "\
+        file://0001-make.bash-quote-CC_FOR_TARGET.patch \
+        file://0002-cmd-go-fix-CC-and-CXX-environment-variable-construct.patch \
+        file://0003-make.bash-better-separate-host-and-target-builds.patch \
+        file://0004-cmd-go-allow-GOTOOLDIR-to-be-overridden-in-the-envir.patch \
+        file://0005-cmd-go-make-GOROOT-precious-by-default.patch \
+        file://0006-make.bash-add-GOTOOLDIR_BOOTSTRAP-environment-variab.patch \
+        file://0007-ld-add-soname-to-shareable-objects.patch \
+"
+SRC_URI[main.md5sum] = "da2d44ea384076efec43ee1f8b7d45d2"
+SRC_URI[main.sha256sum] = "a4ab229028ed167ba1986825751463605264e44868362ca8e7accc8be057e993"
diff --git a/meta/recipes-devtools/go/go-1.9/0001-make.bash-quote-CC_FOR_TARGET.patch b/meta/recipes-devtools/go/go-1.9/0001-make.bash-quote-CC_FOR_TARGET.patch
new file mode 100644
index 0000000000..7800975e48
--- /dev/null
+++ b/meta/recipes-devtools/go/go-1.9/0001-make.bash-quote-CC_FOR_TARGET.patch
@@ -0,0 +1,32 @@
+From d24734ad44006791fd48fc45ea34fe608ff672fb Mon Sep 17 00:00:00 2001
+From: Matt Madison <matt@madison.systems>
+Date: Wed, 13 Sep 2017 08:04:23 -0700
+Subject: [PATCH 1/7] make.bash: quote CC_FOR_TARGET
+
+For OE cross-builds, $CC_FOR_TARGET has more than
+one word and needs to be quoted.
+
+Upstream-Status: Pending
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+Signed-off-by: Matt Madison <matt@madison.systems>
+---
+ src/make.bash | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/make.bash b/src/make.bash
+index 71e7531..dcf3256 100755
+--- a/src/make.bash
++++ b/src/make.bash
+@@ -175,7 +175,7 @@ echo "##### Building packages and commands for $GOOS/$GOARCH."
+ 
+ old_bin_files=$(cd $GOROOT/bin && echo *)
+ 
+-CC=$CC_FOR_TARGET "$GOTOOLDIR"/go_bootstrap install $GO_FLAGS -gcflags "$GO_GCFLAGS" -ldflags "$GO_LDFLAGS" -v std cmd
++CC="$CC_FOR_TARGET" "$GOTOOLDIR"/go_bootstrap install $GO_FLAGS -gcflags "$GO_GCFLAGS" -ldflags "$GO_LDFLAGS" -v std cmd
+ 
+ # Check that there are no new files in $GOROOT/bin other than go and gofmt
+ # and $GOOS_$GOARCH (a directory used when cross-compiling).
+-- 
+2.7.4
+
diff --git a/meta/recipes-devtools/go/go-1.9/0002-cmd-go-fix-CC-and-CXX-environment-variable-construct.patch b/meta/recipes-devtools/go/go-1.9/0002-cmd-go-fix-CC-and-CXX-environment-variable-construct.patch
new file mode 100644
index 0000000000..a4e42261c3
--- /dev/null
+++ b/meta/recipes-devtools/go/go-1.9/0002-cmd-go-fix-CC-and-CXX-environment-variable-construct.patch
@@ -0,0 +1,67 @@
+From a7170d32a13aead608abd18996f6dab2e2a631b5 Mon Sep 17 00:00:00 2001
+From: Matt Madison <matt@madison.systems>
+Date: Wed, 13 Sep 2017 08:06:37 -0700
+Subject: [PATCH 2/7] cmd/go: fix CC and CXX environment variable construction
+
+For OE cross-builds, CC and CXX have multiple words, and
+we need their complete definitions when setting up the
+environment during Go builds.
+
+Upstream-Status: Pending
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+Signed-off-by: Matt Madison <matt@madison.systems>
+---
+ src/cmd/go/internal/envcmd/env.go |  4 ++--
+ src/cmd/go/internal/work/build.go | 12 ++++++++++++
+ 2 files changed, 14 insertions(+), 2 deletions(-)
+
+diff --git a/src/cmd/go/internal/envcmd/env.go b/src/cmd/go/internal/envcmd/env.go
+index 43d4334..529d21d 100644
+--- a/src/cmd/go/internal/envcmd/env.go
++++ b/src/cmd/go/internal/envcmd/env.go
+@@ -74,10 +74,10 @@ func MkEnv() []cfg.EnvVar {
+ 	}
+ 
+ 	cmd := b.GccCmd(".")
+-	env = append(env, cfg.EnvVar{Name: "CC", Value: cmd[0]})
++	env = append(env, cfg.EnvVar{Name: "CC", Value: strings.Join(b.GccCmdForReal(), " ")})
+ 	env = append(env, cfg.EnvVar{Name: "GOGCCFLAGS", Value: strings.Join(cmd[3:], " ")})
+ 	cmd = b.GxxCmd(".")
+-	env = append(env, cfg.EnvVar{Name: "CXX", Value: cmd[0]})
++	env = append(env, cfg.EnvVar{Name: "CXX", Value: strings.Join(b.GxxCmdForReal(), " ")})
+ 
+ 	if cfg.BuildContext.CgoEnabled {
+ 		env = append(env, cfg.EnvVar{Name: "CGO_ENABLED", Value: "1"})
+diff --git a/src/cmd/go/internal/work/build.go b/src/cmd/go/internal/work/build.go
+index 7d667ff..85df0b3 100644
+--- a/src/cmd/go/internal/work/build.go
++++ b/src/cmd/go/internal/work/build.go
+@@ -3127,12 +3127,24 @@ func (b *Builder) GccCmd(objdir string) []string {
+ 	return b.ccompilerCmd("CC", cfg.DefaultCC, objdir)
+ }
+ 
++// gccCmd returns a gcc command line prefix
++// defaultCC is defined in zdefaultcc.go, written by cmd/dist.
++func (b *Builder) GccCmdForReal() []string {
++	return envList("CC", cfg.DefaultCC)
++}
++
+ // gxxCmd returns a g++ command line prefix
+ // defaultCXX is defined in zdefaultcc.go, written by cmd/dist.
+ func (b *Builder) GxxCmd(objdir string) []string {
+ 	return b.ccompilerCmd("CXX", cfg.DefaultCXX, objdir)
+ }
+ 
++// gxxCmd returns a g++ command line prefix
++// defaultCXX is defined in zdefaultcc.go, written by cmd/dist.
++func (b *Builder) GxxCmdForReal() []string {
++	return envList("CXX", cfg.DefaultCXX)
++}
++
+ // gfortranCmd returns a gfortran command line prefix.
+ func (b *Builder) gfortranCmd(objdir string) []string {
+ 	return b.ccompilerCmd("FC", "gfortran", objdir)
+-- 
+2.7.4
+
diff --git a/meta/recipes-devtools/go/go-1.8/split-host-and-target-build.patch b/meta/recipes-devtools/go/go-1.9/0003-make.bash-better-separate-host-and-target-builds.patch
similarity index 60%
rename from meta/recipes-devtools/go/go-1.8/split-host-and-target-build.patch
rename to meta/recipes-devtools/go/go-1.9/0003-make.bash-better-separate-host-and-target-builds.patch
index b0dd95bbe7..ffd9f2359c 100644
--- a/meta/recipes-devtools/go/go-1.8/split-host-and-target-build.patch
+++ b/meta/recipes-devtools/go/go-1.9/0003-make.bash-better-separate-host-and-target-builds.patch
@@ -1,13 +1,26 @@
-Add new option --target-only to build target components
-Separates the host and target pieces of build
+From 31e88f06af7ab787d8fe0c1ca625193e1799e167 Mon Sep 17 00:00:00 2001
+From: Matt Madison <matt@madison.systems>
+Date: Wed, 13 Sep 2017 08:12:04 -0700
+Subject: [PATCH 3/7] make.bash: better separate host and target builds
+
+Fore OE cross-builds, the simple checks in make.bash are
+insufficient for distinguishing host and target build
+environments, so add some options for telling the
+script which parts are being built.
 
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
 Upstream-Status: Pending
-Index: go/src/make.bash
-===================================================================
---- go.orig/src/make.bash
-+++ go/src/make.bash
-@@ -154,13 +154,22 @@ if [ "$1" = "--no-clean" ]; then
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+Signed-off-by: Matt Madison <matt@madison.systems>
+---
+ src/make.bash | 51 ++++++++++++++++++++++++++++-----------------------
+ 1 file changed, 28 insertions(+), 23 deletions(-)
+
+diff --git a/src/make.bash b/src/make.bash
+index dcf3256..9553623 100755
+--- a/src/make.bash
++++ b/src/make.bash
+@@ -156,13 +156,22 @@ if [ "$1" = "--no-clean" ]; then
  	buildall=""
  	shift
  fi
@@ -35,13 +48,28 @@ Index: go/src/make.bash
  	echo "##### Building packages and commands for host, $GOHOSTOS/$GOHOSTARCH."
  	# CC_FOR_TARGET is recorded as the default compiler for the go tool. When building for the host, however,
  	# use the host compiler, CC, from `cmd/dist/dist env` instead.
-@@ -169,11 +178,20 @@ if [ "$GOHOSTARCH" != "$GOARCH" -o "$GOH
+@@ -171,24 +180,20 @@ if [ "$GOHOSTARCH" != "$GOARCH" -o "$GOHOSTOS" != "$GOOS" ]; then
  	echo
  fi
  
 -echo "##### Building packages and commands for $GOOS/$GOARCH."
+-
+-old_bin_files=$(cd $GOROOT/bin && echo *)
+-
 -CC="$CC_FOR_TARGET" "$GOTOOLDIR"/go_bootstrap install $GO_FLAGS -gcflags "$GO_GCFLAGS" -ldflags "$GO_LDFLAGS" -v std cmd
+-
+-# Check that there are no new files in $GOROOT/bin other than go and gofmt
+-# and $GOOS_$GOARCH (a directory used when cross-compiling).
+-(cd $GOROOT/bin && for f in *; do
+-	if ! expr " $old_bin_files go gofmt ${GOOS}_${GOARCH} " : ".* $f " >/dev/null 2>/dev/null; then
+-		echo 1>&2 "ERROR: unexpected new file in $GOROOT/bin: $f"
+-		exit 1
+-	fi
+-done)
+-
 -echo
+-
+-rm -f "$GOTOOLDIR"/go_bootstrap
 +if [ "$do_target_build" = "yes" ]; then
 +    GO_INSTALL="${GO_TARGET_INSTALL:-std cmd}"
 +    echo "##### Building packages and commands for $GOOS/$GOARCH."
@@ -53,10 +81,12 @@ Index: go/src/make.bash
 +    fi
 +    GOTOOLDIR="$GOTOOLDIR" CC="$CC_FOR_TARGET" "$GOTOOLDIR"/go_bootstrap install $GO_FLAGS -gcflags "$GO_GCFLAGS" -ldflags "$GO_LDFLAGS" -v ${GO_INSTALL}
 +    echo
- 
--rm -f "$GOTOOLDIR"/go_bootstrap
++
 +    rm -f "$GOTOOLDIR"/go_bootstrap
 +fi
  
  if [ "$1" != "--no-banner" ]; then
  	"$GOTOOLDIR"/dist banner
+-- 
+2.7.4
+
diff --git a/meta/recipes-devtools/go/go-1.9/0004-cmd-go-allow-GOTOOLDIR-to-be-overridden-in-the-envir.patch b/meta/recipes-devtools/go/go-1.9/0004-cmd-go-allow-GOTOOLDIR-to-be-overridden-in-the-envir.patch
new file mode 100644
index 0000000000..180b06a4d3
--- /dev/null
+++ b/meta/recipes-devtools/go/go-1.9/0004-cmd-go-allow-GOTOOLDIR-to-be-overridden-in-the-envir.patch
@@ -0,0 +1,68 @@
+From 1369178b497b12088ec4c2794606cc9f14cc327c Mon Sep 17 00:00:00 2001
+From: Matt Madison <matt@madison.systems>
+Date: Wed, 13 Sep 2017 08:15:03 -0700
+Subject: [PATCH 4/7] cmd/go: allow GOTOOLDIR to be overridden in the
+ environment
+
+For OE cross-builds, host-side tools reside in the native
+GOROOT, not the target GOROOT.  Allow GOTOOLDIR to be set
+in the environment to allow that split, rather than always
+computing GOTOOLDIR relative to the GOROOT setting.
+
+Upstream-Status: Pending
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+Signed-off-by: Matt Madison <matt@madison.systems>
+---
+ src/cmd/go/internal/cfg/cfg.go    | 7 ++++++-
+ src/cmd/go/internal/work/build.go | 2 +-
+ src/go/build/build.go             | 2 +-
+ 3 files changed, 8 insertions(+), 3 deletions(-)
+
+diff --git a/src/cmd/go/internal/cfg/cfg.go b/src/cmd/go/internal/cfg/cfg.go
+index b3ad1ce..c1dc974 100644
+--- a/src/cmd/go/internal/cfg/cfg.go
++++ b/src/cmd/go/internal/cfg/cfg.go
+@@ -91,7 +91,12 @@ func init() {
+ 	// as the tool directory does not move based on environment variables.
+ 	// This matches the initialization of ToolDir in go/build,
+ 	// except for using GOROOT rather than runtime.GOROOT().
+-	build.ToolDir = filepath.Join(GOROOT, "pkg/tool/"+runtime.GOOS+"_"+runtime.GOARCH)
++	s := os.Getenv("GOTOOLDIR")
++	if s == "" {
++		build.ToolDir = filepath.Join(GOROOT, "pkg/tool/"+runtime.GOOS+"_"+runtime.GOARCH)
++	} else {
++		build.ToolDir = s
++	}
+ }
+ 
+ func findGOROOT() string {
+diff --git a/src/cmd/go/internal/work/build.go b/src/cmd/go/internal/work/build.go
+index 85df0b3..7b9a69e 100644
+--- a/src/cmd/go/internal/work/build.go
++++ b/src/cmd/go/internal/work/build.go
+@@ -1337,7 +1337,7 @@ func (b *Builder) build(a *Action) (err error) {
+ 		}
+ 
+ 		var cgoExe string
+-		if a.cgo != nil && a.cgo.Target != "" {
++		if a.cgo != nil && a.cgo.Target != "" && os.Getenv("GOTOOLDIR") == "" {
+ 			cgoExe = a.cgo.Target
+ 		} else {
+ 			cgoExe = base.Tool("cgo")
+diff --git a/src/go/build/build.go b/src/go/build/build.go
+index fd89871..e16145b 100644
+--- a/src/go/build/build.go
++++ b/src/go/build/build.go
+@@ -1588,7 +1588,7 @@ func init() {
+ }
+ 
+ // ToolDir is the directory containing build tools.
+-var ToolDir = filepath.Join(runtime.GOROOT(), "pkg/tool/"+runtime.GOOS+"_"+runtime.GOARCH)
++var ToolDir = envOr("GOTOOLDIR", filepath.Join(runtime.GOROOT(), "pkg/tool/"+runtime.GOOS+"_"+runtime.GOARCH))
+ 
+ // IsLocalImport reports whether the import path is
+ // a local import path, like ".", "..", "./foo", or "../foo".
+-- 
+2.7.4
+
diff --git a/meta/recipes-devtools/go/go-1.9/0005-cmd-go-make-GOROOT-precious-by-default.patch b/meta/recipes-devtools/go/go-1.9/0005-cmd-go-make-GOROOT-precious-by-default.patch
new file mode 100644
index 0000000000..6e93bcb6ce
--- /dev/null
+++ b/meta/recipes-devtools/go/go-1.9/0005-cmd-go-make-GOROOT-precious-by-default.patch
@@ -0,0 +1,41 @@
+From 44f961975dac6cf464a77b5f6dd0c47cc192c4fd Mon Sep 17 00:00:00 2001
+From: Matt Madison <matt@madison.systems>
+Date: Wed, 13 Sep 2017 08:19:52 -0700
+Subject: [PATCH 5/7] cmd/go: make GOROOT precious by default
+
+For OE builds, we never want packages that have
+already been installed into the build root to be
+modified, so prevent the go build tool from checking
+if they should be rebuilt.
+
+Also add an environment variable to override this
+behavior, just for building the Go runtime.
+
+Upstream-Status: Pending
+
+Signed-off-by: Matt Madison <matt@madison.systems>
+---
+ src/cmd/go/internal/load/pkg.go | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+diff --git a/src/cmd/go/internal/load/pkg.go b/src/cmd/go/internal/load/pkg.go
+index 60de666..2660d3f 100644
+--- a/src/cmd/go/internal/load/pkg.go
++++ b/src/cmd/go/internal/load/pkg.go
+@@ -1530,6 +1530,13 @@ func isStale(p *Package) (bool, string) {
+ 		return true, "build ID mismatch"
+ 	}
+ 
++	// For OE builds, make anything in GOROOT non-stale,
++	// to prevent a package build from overwriting the
++	// build root.
++	if p.Goroot && os.Getenv("GOROOT_OVERRIDE") != "1" {
++		return false, "GOROOT-resident packages do not get rebuilt"
++	}
++
+ 	// Package is stale if a dependency is.
+ 	for _, p1 := range p.Internal.Deps {
+ 		if p1.Stale {
+-- 
+2.7.4
+
diff --git a/meta/recipes-devtools/go/go-1.8/set-gotooldir-during-bootstrap.patch b/meta/recipes-devtools/go/go-1.9/0006-make.bash-add-GOTOOLDIR_BOOTSTRAP-environment-variab.patch
similarity index 55%
rename from meta/recipes-devtools/go/go-1.8/set-gotooldir-during-bootstrap.patch
rename to meta/recipes-devtools/go/go-1.9/0006-make.bash-add-GOTOOLDIR_BOOTSTRAP-environment-variab.patch
index 4b5e424d96..f0f564044b 100644
--- a/meta/recipes-devtools/go/go-1.8/set-gotooldir-during-bootstrap.patch
+++ b/meta/recipes-devtools/go/go-1.9/0006-make.bash-add-GOTOOLDIR_BOOTSTRAP-environment-variab.patch
@@ -1,12 +1,23 @@
-Set GOTOOLDIR during bootstrap 
+From aae74d1045ca03306ba4159206ee3bac72bcdfbb Mon Sep 17 00:00:00 2001
+From: Matt Madison <matt@madison.systems>
+Date: Wed, 13 Sep 2017 08:23:23 -0700
+Subject: [PATCH 6/7] make.bash: add GOTOOLDIR_BOOTSTRAP environment variable
+
+For cross-canadian builds, we need to use the native
+GOTOOLDIR during the bootstrap phase, so provide a way
+to pass that setting into the build script.
 
-Signed-off-by: Matt Madison <matt@madison.systems>
 Upstream-Status: Pending
 
-Index: go/src/make.bash
-===================================================================
---- go.orig/src/make.bash
-+++ go/src/make.bash
+Signed-off-by: Matt Madison <matt@madison.systems>
+---
+ src/make.bash | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/src/make.bash b/src/make.bash
+index 9553623..2e6fb05 100755
+--- a/src/make.bash
++++ b/src/make.bash
 @@ -172,10 +172,11 @@ if [ "$do_host_build" = "yes" ]; then
  	mv cmd/dist/dist "$GOTOOLDIR"/dist
  	echo
@@ -20,3 +31,6 @@ Index: go/src/make.bash
  		"$GOTOOLDIR"/go_bootstrap install -gcflags "$GO_GCFLAGS" -ldflags "$GO_LDFLAGS" -v std cmd
  	echo
  fi
+-- 
+2.7.4
+
diff --git a/meta/recipes-devtools/go/go-1.8/0006-linker-add-soname-to-shareable-objects.patch b/meta/recipes-devtools/go/go-1.9/0007-ld-add-soname-to-shareable-objects.patch
similarity index 68%
rename from meta/recipes-devtools/go/go-1.8/0006-linker-add-soname-to-shareable-objects.patch
rename to meta/recipes-devtools/go/go-1.9/0007-ld-add-soname-to-shareable-objects.patch
index 74e1f2459e..6459782d81 100644
--- a/meta/recipes-devtools/go/go-1.8/0006-linker-add-soname-to-shareable-objects.patch
+++ b/meta/recipes-devtools/go/go-1.9/0007-ld-add-soname-to-shareable-objects.patch
@@ -1,22 +1,24 @@
-From 81e9e322297d83f57f02548689c71859bfce10ee Mon Sep 17 00:00:00 2001
+From e957c3458d53e37bf416f51d2f8bf54c195e50f5 Mon Sep 17 00:00:00 2001
 From: Matt Madison <matt@madison.systems>
-Date: Sun, 15 Jan 2017 05:24:49 -0800
-Subject: [PATCH 6/6] linker: add soname to shareable objects
+Date: Wed, 13 Sep 2017 08:27:02 -0700
+Subject: [PATCH 7/7] ld: add soname to shareable objects
 
-Shared library handling in OE builds works better when shared
-libraries are tagged with SONAMEs.
+Shared library handling in OE depends on the inclusion
+of an soname header, so update the go linker to add that
+header for both internal and external linking.
 
 Upstream-Status: Pending
+
 Signed-off-by: Matt Madison <matt@madison.systems>
 ---
  src/cmd/link/internal/ld/lib.go | 3 +++
  1 file changed, 3 insertions(+)
 
 diff --git a/src/cmd/link/internal/ld/lib.go b/src/cmd/link/internal/ld/lib.go
-index 74d79d3..6d03005 100644
+index 0234105..0b9e2d0 100644
 --- a/src/cmd/link/internal/ld/lib.go
 +++ b/src/cmd/link/internal/ld/lib.go
-@@ -1040,12 +1040,14 @@ func (l *Link) hostlink() {
+@@ -1124,12 +1124,14 @@ func (l *Link) hostlink() {
  			// Pass -z nodelete to mark the shared library as
  			// non-closeable: a dlclose will do nothing.
  			argv = append(argv, "-shared", "-Wl,-z,nodelete")
@@ -29,9 +31,9 @@ index 74d79d3..6d03005 100644
  		argv = append(argv, "-shared")
 +		argv = append(argv, fmt.Sprintf("-Wl,-soname,%s", filepath.Base(*flagOutfile)))
  	case BuildmodePlugin:
- 		if Headtype == obj.Hdarwin {
+ 		if Headtype == objabi.Hdarwin {
  			argv = append(argv, "-dynamiclib")
-@@ -1054,6 +1056,7 @@ func (l *Link) hostlink() {
+@@ -1138,6 +1140,7 @@ func (l *Link) hostlink() {
  				argv = append(argv, "-Wl,-z,relro")
  			}
  			argv = append(argv, "-shared")
diff --git a/meta/recipes-devtools/go/go-cross-canadian.inc b/meta/recipes-devtools/go/go-cross-canadian.inc
index f0315d558a..0068f34d04 100644
--- a/meta/recipes-devtools/go/go-cross-canadian.inc
+++ b/meta/recipes-devtools/go/go-cross-canadian.inc
@@ -52,6 +52,7 @@ do_install() {
 	(cd ${S}/src; for d in *; do \
 		[ -d $d ] && cp --preserve=mode,timestamps -R ${S}/src/$d ${D}${libdir}/go/src/; \
 	done)
+	rm -rf ${D}${libdir}/go/src/runtime/pprof/testdata
 	install -d ${D}${bindir} ${D}${libdir}/go/bin
 	for f in ${B}/bin/*
 	do
diff --git a/meta/recipes-devtools/go/go-cross-canadian_1.8.bb b/meta/recipes-devtools/go/go-cross-canadian_1.9.bb
similarity index 100%
rename from meta/recipes-devtools/go/go-cross-canadian_1.8.bb
rename to meta/recipes-devtools/go/go-cross-canadian_1.9.bb
diff --git a/meta/recipes-devtools/go/go-cross.inc b/meta/recipes-devtools/go/go-cross.inc
index d18d9613ff..234528ab98 100644
--- a/meta/recipes-devtools/go/go-cross.inc
+++ b/meta/recipes-devtools/go/go-cross.inc
@@ -49,7 +49,7 @@ do_install() {
     (cd ${S}/src; for d in *; do \
         [ ! -d $d ] || cp --preserve=mode,timestamps -R ${S}/src/$d ${D}${libdir}/go/src/; \
     done)
-
+    rm -rf ${D}${libdir}/go/src/runtime/pprof/testdata
     install -d ${D}${bindir} ${D}${libdir}/go/bin
     for f in ${B}/bin/*
     do
diff --git a/meta/recipes-devtools/go/go-cross_1.8.bb b/meta/recipes-devtools/go/go-cross_1.9.bb
similarity index 100%
rename from meta/recipes-devtools/go/go-cross_1.8.bb
rename to meta/recipes-devtools/go/go-cross_1.9.bb
diff --git a/meta/recipes-devtools/go/go-crosssdk_1.8.bb b/meta/recipes-devtools/go/go-crosssdk_1.9.bb
similarity index 100%
rename from meta/recipes-devtools/go/go-crosssdk_1.8.bb
rename to meta/recipes-devtools/go/go-crosssdk_1.9.bb
diff --git a/meta/recipes-devtools/go/go-native.inc b/meta/recipes-devtools/go/go-native.inc
index 9eb2b3211f..66b845c633 100644
--- a/meta/recipes-devtools/go/go-native.inc
+++ b/meta/recipes-devtools/go/go-native.inc
@@ -51,7 +51,7 @@ do_install() {
 	(cd ${S}/src; for d in *; do \
 		[ -d $d ] && cp -a ${S}/src/$d ${D}${libdir}/go/src/; \
 	done)
-
+	rm -rf ${D}${libdir}/go/src/runtime/pprof/testdata
 	install -d ${D}${bindir} ${D}${libdir}/go/bin
 	for f in ${B}/bin/*
 	do
diff --git a/meta/recipes-devtools/go/go-native_1.8.bb b/meta/recipes-devtools/go/go-native_1.9.bb
similarity index 100%
rename from meta/recipes-devtools/go/go-native_1.8.bb
rename to meta/recipes-devtools/go/go-native_1.9.bb
diff --git a/meta/recipes-devtools/go/go-runtime_1.8.bb b/meta/recipes-devtools/go/go-runtime_1.9.bb
similarity index 100%
rename from meta/recipes-devtools/go/go-runtime_1.8.bb
rename to meta/recipes-devtools/go/go-runtime_1.9.bb
diff --git a/meta/recipes-devtools/go/go_1.8.bb b/meta/recipes-devtools/go/go_1.9.bb
similarity index 100%
rename from meta/recipes-devtools/go/go_1.8.bb
rename to meta/recipes-devtools/go/go_1.9.bb
-- 
2.14.1



^ permalink raw reply related	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2017-09-13 17:55 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-09-13 17:54 [PATCH v8 0/9] Revamp the Go support Otavio Salvador
2017-09-13 17:54 ` [PATCH v8 1/9] go-runtime: extend to nativesdk builds Otavio Salvador
2017-09-13 17:54 ` [PATCH v8 2/9] goarch.bbclass: identify archs with Go dynamic linking support Otavio Salvador
2017-09-13 17:54 ` [PATCH v8 3/9] go-1.8: add patch for set soname in ELF shared objects Otavio Salvador
2017-09-13 17:54 ` [PATCH v8 4/9] go-runtime: build the Go runtime as a shared library Otavio Salvador
2017-09-13 17:54 ` [PATCH v8 5/9] go.bbclass: add support linking against shared runtime Otavio Salvador
2017-09-13 17:54 ` [PATCH v8 6/9] go.bbclass: Add "ldflags" to QA skip list Otavio Salvador
2017-09-13 17:54 ` [PATCH v8 7/9] go.bbclass: Add ptest support Otavio Salvador
2017-09-13 17:54 ` [PATCH v8 8/9] goarch.bbclass: set ARM_INSTRUCTION_SET to "arm" Otavio Salvador
2017-09-13 17:54 ` [PATCH v8 9/9] go: update to go 1.9 Otavio Salvador

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.