Message ID | 1436899322-19731-1-git-send-email-christian@paral.in |
---|---|
State | Superseded |
Headers | show |
Hi Christian, all On Tue, Jul 14, 2015 at 8:42 PM, Christian Stewart <christian@paral.in> wrote: > This patch introduces golang as a host and target package, allowing for cross-platform go builds. > > Signed-off-by: Christian Stewart <christian@paral.in> > --- > package/Config.in | 1 + > package/Config.in.host | 1 + > package/golang/0001-add-no-march-option-gccp.patch | 19 ++++++++++ > .../0002-remove-unnecessary-march-ld-flag.patch | 29 ++++++++++++++++ > package/golang/Config.in | 6 ++++ > package/golang/Config.in.host | 6 ++++ > package/golang/golang.mk | 40 ++++++++++++++++++++++ > 7 files changed, 102 insertions(+) > create mode 100644 package/golang/0001-add-no-march-option-gccp.patch > create mode 100644 package/golang/0002-remove-unnecessary-march-ld-flag.patch > create mode 100644 package/golang/Config.in > create mode 100644 package/golang/Config.in.host > create mode 100644 package/golang/golang.mk > > diff --git a/package/Config.in b/package/Config.in > index 5beb450..b49c94f 100644 > --- a/package/Config.in > +++ b/package/Config.in > @@ -455,6 +455,7 @@ menu "Erlang libraries/modules" > source "package/erlang-p1-zlib/Config.in" > endmenu > endif > + source "package/golang/Config.in" > source "package/guile/Config.in" > source "package/haserl/Config.in" > source "package/jamvm/Config.in" > diff --git a/package/Config.in.host b/package/Config.in.host > index 1e047aa..e36afee 100644 > --- a/package/Config.in.host > +++ b/package/Config.in.host > @@ -11,6 +11,7 @@ menu "Host utilities" > source "package/genext2fs/Config.in.host" > source "package/genimage/Config.in.host" > source "package/genpart/Config.in.host" > + source "package/golang/Config.in.host" > source "package/imx-usb-loader/Config.in.host" > source "package/lpc3250loader/Config.in.host" > source "package/mke2img/Config.in.host" You don't need to explicitely show a host package for golang, take example to the way it's done for Python for example. You need the eval host package, but you don't have to show a host symbol to the end users. As you can see, the host utilities are, really, utilities, to generate your bootloader's image, and so on. > diff --git a/package/golang/0001-add-no-march-option-gccp.patch b/package/golang/0001-add-no-march-option-gccp.patch > new file mode 100644 > index 0000000..87231aa > --- /dev/null > +++ b/package/golang/0001-add-no-march-option-gccp.patch > @@ -0,0 +1,19 @@ > +Adds an option to not add the problematic -m parameter to GCC. > + > +Signed-off-by: Christian Stewart <christian@paral.in> > + > +diff -Nau golang.orig/src/cmd/cgo/gcc.go golang/src/cmd/cgo/gcc.go > +--- golang.orig/src/cmd/cgo/gcc.go.orig 2015-07-09 15:53:55.720794139 -0700 > ++++ golang/src/cmd/cgo/gcc.go 2015-07-09 17:46:43.664496374 -0700 > +@@ -736,6 +736,11 @@ > + > + // gccMachine returns the gcc -m flag to use, either "-m32", "-m64" or "-marm". > + func (p *Package) gccMachine() []string { > ++ > ++ if os.Getenv("CGO_NO_EMULATION") == "1" { > ++ return nil > ++ } > ++ > + switch goarch { > + case "amd64": > + return []string{"-m64"} > diff --git a/package/golang/0002-remove-unnecessary-march-ld-flag.patch b/package/golang/0002-remove-unnecessary-march-ld-flag.patch > new file mode 100644 > index 0000000..7cc20f4 > --- /dev/null > +++ b/package/golang/0002-remove-unnecessary-march-ld-flag.patch > @@ -0,0 +1,29 @@ > +Removes defining -m parameter to LD, which is unnecessary in buildroot. > + > +Signed-off-by: Christian Stewart <christian@paral.in> > + > +diff -Nau golang.orig/src/cmd/ld/lib.c golang/src/cmd/ld/lib.c > +--- golang.orig/src/cmd/ld/lib.c.orig 2015-07-09 18:38:44.192359082 -0700 > ++++ golang/src/cmd/ld/lib.c 2015-07-09 18:39:02.108358294 -0700 > +@@ -589,20 +589,7 @@ > + if(extld == nil) > + extld = "gcc"; > + argv[argc++] = extld; > +- switch(thechar){ > +- case '8': > +- argv[argc++] = "-m32"; > +- break; > +- case '6': > +- argv[argc++] = "-m64"; > +- break; > +- case '5': > +- argv[argc++] = "-marm"; > +- break; > +- } > +- if(!debug['s'] && !debug_s) { > +- argv[argc++] = "-gdwarf-2"; > +- } else { > ++ if(debug['s'] || debug_s) { > + argv[argc++] = "-s"; > + } > + if(HEADTYPE == Hdarwin) > diff --git a/package/golang/Config.in b/package/golang/Config.in > new file mode 100644 > index 0000000..5f058c6 > --- /dev/null > +++ b/package/golang/Config.in > @@ -0,0 +1,6 @@ > +config BR2_PACKAGE_GOLANG > + bool "golang" > + help > + Go compiler and cli tool. > + > + http://golang.org/ I'm not sure, but I think you would need to add a few depends here like depends on BR2_USE_MMU depends on BR2_TOOLCHAIN_HAS_THREADS You obviously need to add a comments if these are not met. Theses are just an example maybe there's more, maybe less. > diff --git a/package/golang/Config.in.host b/package/golang/Config.in.host > new file mode 100644 > index 0000000..5d556bb > --- /dev/null > +++ b/package/golang/Config.in.host > @@ -0,0 +1,6 @@ > +config BR2_PACKAGE_HOST_GOLANG > + bool "host golang" > + help > + Go compiler for the host system. > + > + http://golang.org/ As said earlier, you don't need that too. > diff --git a/package/golang/golang.mk b/package/golang/golang.mk > new file mode 100644 > index 0000000..4893bcc > --- /dev/null > +++ b/package/golang/golang.mk > @@ -0,0 +1,40 @@ > +################################################################################ > +# > +# GOLANG > +# > +################################################################################ > + > +GOLANG_VERSION = 883bc6ed0ea815293fe6309d66f967ea60630e87 > +GOLANG_SITE = $(call github,golang,go,$(GOLANG_VERSION)) We really prefer to use release tarball, they are available from the github "Release" page. You'll need to add a hash file too, you can check the manual for how and why do that. > +GOLANG_LICENSE_FILES = LICENSE You are missing the LICENSE type in itself. > +GOLANG_INSTALL_STAGING = NO That's the default, you don't need to specify it. > +GOLANG_INSTALL_TARGET = YES ditto > + > +HOST_GOLANG_DEPENDENCIES = > +GOLANG_DEPENDENCIES = If it's empty, you don't need to specify them. > + > +GOLANG = $(HOST_DIR)/usr/bin/go > +GOLANGFMT = $(HOST_DIR)/usr/bin/gofmt > + > +define GOLANG_BUILD_CMDS > + cd $(@D)/src/ && CC_FOR_TARGET="$(TARGET_CC)" LD_FOR_TARGET="$(TARGET_LD)" GOOS=linux GOARCH=$(ARCH) GOROOT_FINAL="/usr/src/go" ./make.bash > +endef > + > +define GOLANG_INSTALL_TARGET_CMDS > + cp $(@D)/bin/linux_$(ARCH)/* $(TARGET_DIR)/usr/bin/ Use INSTALL instead of cp > + mkdir -p $(TARGET_DIR)/usr/src/go/ > + cp -r $(@D)/* $(TARGET_DIR)/usr/src/go/ ditto > +endef > + > +define HOST_GOLANG_BUILD_CMDS > + cd $(@D)/src/ && CC_FOR_TARGET="$(TARGET_CC)" GOOS=linux GOARCH=$(ARCH) GOROOT_FINAL=$(HOST_DIR)/usr/src/go/ bash ./make.bash > +endef > + > +define HOST_GOLANG_INSTALL_CMDS > + cp $(@D)/bin/go $(@D)/bin/gofmt $(HOST_DIR)/usr/bin/ ditto > + mkdir -p $(HOST_DIR)/usr/src/go/ > + cp -r $(@D)/* $(HOST_DIR)/usr/src/go/ ditto > +endef > + > +$(eval $(host-generic-package)) > +$(eval $(generic-package)) > -- A quick tip,when you respin, don't forget to send the whole series, even if you only change one patch. Also, use: git format-patch --subject-prefix="PATCH vX" Or use ---annotate directly with git send-email. Your patch will be markes as "Changed Requested" in the patchwork, please resend a new spin with the asked corrections or simply reply why you think they are wrong. Thanks a lot for your contributions ! > 2.1.4 > > _______________________________________________ > buildroot mailing list > buildroot@busybox.net > http://lists.busybox.net/mailman/listinfo/buildroot
diff --git a/package/Config.in b/package/Config.in index 5beb450..b49c94f 100644 --- a/package/Config.in +++ b/package/Config.in @@ -455,6 +455,7 @@ menu "Erlang libraries/modules" source "package/erlang-p1-zlib/Config.in" endmenu endif + source "package/golang/Config.in" source "package/guile/Config.in" source "package/haserl/Config.in" source "package/jamvm/Config.in" diff --git a/package/Config.in.host b/package/Config.in.host index 1e047aa..e36afee 100644 --- a/package/Config.in.host +++ b/package/Config.in.host @@ -11,6 +11,7 @@ menu "Host utilities" source "package/genext2fs/Config.in.host" source "package/genimage/Config.in.host" source "package/genpart/Config.in.host" + source "package/golang/Config.in.host" source "package/imx-usb-loader/Config.in.host" source "package/lpc3250loader/Config.in.host" source "package/mke2img/Config.in.host" diff --git a/package/golang/0001-add-no-march-option-gccp.patch b/package/golang/0001-add-no-march-option-gccp.patch new file mode 100644 index 0000000..87231aa --- /dev/null +++ b/package/golang/0001-add-no-march-option-gccp.patch @@ -0,0 +1,19 @@ +Adds an option to not add the problematic -m parameter to GCC. + +Signed-off-by: Christian Stewart <christian@paral.in> + +diff -Nau golang.orig/src/cmd/cgo/gcc.go golang/src/cmd/cgo/gcc.go +--- golang.orig/src/cmd/cgo/gcc.go.orig 2015-07-09 15:53:55.720794139 -0700 ++++ golang/src/cmd/cgo/gcc.go 2015-07-09 17:46:43.664496374 -0700 +@@ -736,6 +736,11 @@ + + // gccMachine returns the gcc -m flag to use, either "-m32", "-m64" or "-marm". + func (p *Package) gccMachine() []string { ++ ++ if os.Getenv("CGO_NO_EMULATION") == "1" { ++ return nil ++ } ++ + switch goarch { + case "amd64": + return []string{"-m64"} diff --git a/package/golang/0002-remove-unnecessary-march-ld-flag.patch b/package/golang/0002-remove-unnecessary-march-ld-flag.patch new file mode 100644 index 0000000..7cc20f4 --- /dev/null +++ b/package/golang/0002-remove-unnecessary-march-ld-flag.patch @@ -0,0 +1,29 @@ +Removes defining -m parameter to LD, which is unnecessary in buildroot. + +Signed-off-by: Christian Stewart <christian@paral.in> + +diff -Nau golang.orig/src/cmd/ld/lib.c golang/src/cmd/ld/lib.c +--- golang.orig/src/cmd/ld/lib.c.orig 2015-07-09 18:38:44.192359082 -0700 ++++ golang/src/cmd/ld/lib.c 2015-07-09 18:39:02.108358294 -0700 +@@ -589,20 +589,7 @@ + if(extld == nil) + extld = "gcc"; + argv[argc++] = extld; +- switch(thechar){ +- case '8': +- argv[argc++] = "-m32"; +- break; +- case '6': +- argv[argc++] = "-m64"; +- break; +- case '5': +- argv[argc++] = "-marm"; +- break; +- } +- if(!debug['s'] && !debug_s) { +- argv[argc++] = "-gdwarf-2"; +- } else { ++ if(debug['s'] || debug_s) { + argv[argc++] = "-s"; + } + if(HEADTYPE == Hdarwin) diff --git a/package/golang/Config.in b/package/golang/Config.in new file mode 100644 index 0000000..5f058c6 --- /dev/null +++ b/package/golang/Config.in @@ -0,0 +1,6 @@ +config BR2_PACKAGE_GOLANG + bool "golang" + help + Go compiler and cli tool. + + http://golang.org/ diff --git a/package/golang/Config.in.host b/package/golang/Config.in.host new file mode 100644 index 0000000..5d556bb --- /dev/null +++ b/package/golang/Config.in.host @@ -0,0 +1,6 @@ +config BR2_PACKAGE_HOST_GOLANG + bool "host golang" + help + Go compiler for the host system. + + http://golang.org/ diff --git a/package/golang/golang.mk b/package/golang/golang.mk new file mode 100644 index 0000000..4893bcc --- /dev/null +++ b/package/golang/golang.mk @@ -0,0 +1,40 @@ +################################################################################ +# +# GOLANG +# +################################################################################ + +GOLANG_VERSION = 883bc6ed0ea815293fe6309d66f967ea60630e87 +GOLANG_SITE = $(call github,golang,go,$(GOLANG_VERSION)) +GOLANG_LICENSE_FILES = LICENSE +GOLANG_INSTALL_STAGING = NO +GOLANG_INSTALL_TARGET = YES + +HOST_GOLANG_DEPENDENCIES = +GOLANG_DEPENDENCIES = + +GOLANG = $(HOST_DIR)/usr/bin/go +GOLANGFMT = $(HOST_DIR)/usr/bin/gofmt + +define GOLANG_BUILD_CMDS + cd $(@D)/src/ && CC_FOR_TARGET="$(TARGET_CC)" LD_FOR_TARGET="$(TARGET_LD)" GOOS=linux GOARCH=$(ARCH) GOROOT_FINAL="/usr/src/go" ./make.bash +endef + +define GOLANG_INSTALL_TARGET_CMDS + cp $(@D)/bin/linux_$(ARCH)/* $(TARGET_DIR)/usr/bin/ + mkdir -p $(TARGET_DIR)/usr/src/go/ + cp -r $(@D)/* $(TARGET_DIR)/usr/src/go/ +endef + +define HOST_GOLANG_BUILD_CMDS + cd $(@D)/src/ && CC_FOR_TARGET="$(TARGET_CC)" GOOS=linux GOARCH=$(ARCH) GOROOT_FINAL=$(HOST_DIR)/usr/src/go/ bash ./make.bash +endef + +define HOST_GOLANG_INSTALL_CMDS + cp $(@D)/bin/go $(@D)/bin/gofmt $(HOST_DIR)/usr/bin/ + mkdir -p $(HOST_DIR)/usr/src/go/ + cp -r $(@D)/* $(HOST_DIR)/usr/src/go/ +endef + +$(eval $(host-generic-package)) +$(eval $(generic-package))
This patch introduces golang as a host and target package, allowing for cross-platform go builds. Signed-off-by: Christian Stewart <christian@paral.in> --- package/Config.in | 1 + package/Config.in.host | 1 + package/golang/0001-add-no-march-option-gccp.patch | 19 ++++++++++ .../0002-remove-unnecessary-march-ld-flag.patch | 29 ++++++++++++++++ package/golang/Config.in | 6 ++++ package/golang/Config.in.host | 6 ++++ package/golang/golang.mk | 40 ++++++++++++++++++++++ 7 files changed, 102 insertions(+) create mode 100644 package/golang/0001-add-no-march-option-gccp.patch create mode 100644 package/golang/0002-remove-unnecessary-march-ld-flag.patch create mode 100644 package/golang/Config.in create mode 100644 package/golang/Config.in.host create mode 100644 package/golang/golang.mk