The sender domain has a DMARC Reject/Quarantine policy which disallows
sending mailing list messages using the original "From" header.

To mitigate this problem, the original message has been wrapped
automatically by the mailing list software.
--- Begin Message ---
Hello Jeffery,

Thank you for the wonderful work on maintaining the Go packages!

I got a little irritated at CGo's restriction of arch flags (in the
immutable GOGCCFLAGS variable) and put together a patch set for v19.07
to override them with an environment variable and then (optionally) feed
the machine flags in the Golang build.  In the OpenWRT repo, I did this
by splitting out how DEFAULT_CFLAGS are put together in order to
populate a DEFAULT_MACHINE_FLAGS, but it could probably be done with
just a $(filter -m%,$(DEFAULT_CFLAGS)) instead.

If you or others have any interest in this, I can clean them up for the
master branch.  I'm probably going to submit the Golang patch upstream,
since I don't see any good reason for such a restriction.  I see you've
made a lot of changes on the HEAD.

Daniel
>From f1c770216e4eadaa641fb4f9894576358df5cf74 Mon Sep 17 00:00:00 2001
From: Daniel Santos <daniel.san...@pobox.com>
Date: Sun, 13 Sep 2020 20:49:06 -0500
Subject: Goloang: Add customizable ARCH flags via CGO_MACHINE_FLAGS

Adds the option to override Golang's choice of architecture-specific
machine flags with arbitrary values via the environment variable
CGO_MACHINE_FLAGS.  Then we supply those via the MACHINE_FLAGS make
variable fed from CONFIG_MACHINE_FLAGS from .config.

Signed-off-by: Daniel Santos <daniel.san...@pobox.com>
---
 lang/golang/golang-package.mk                 |  1 +
 lang/golang/golang-values.mk                  |  2 +-
 ...GS-to-override-hard-coded-arch-flags.patch | 28 +++++++++++++++++++
 3 files changed, 30 insertions(+), 1 deletion(-)
 create mode 100644 lang/golang/golang/patches/400-Add-CGO_MACHINE_FLAGS-to-override-hard-coded-arch-flags.patch

diff --git a/lang/golang/golang-package.mk b/lang/golang/golang-package.mk
index 73c6572a9..e3bbab6bc 100644
--- a/lang/golang/golang-package.mk
+++ b/lang/golang/golang-package.mk
@@ -154,6 +154,7 @@ define GoPackage/Environment/Default
 	GOMIPS=$(GO_MIPS) \
 	GOMIPS64=$(GO_MIPS64) \
 	CGO_ENABLED=1 \
+	CGO_MACHINE_FLAGS="$(MACHINE_FLAGS)" \
 	CGO_CFLAGS="$(filter-out $(GO_CFLAGS_TO_REMOVE),$(TARGET_CFLAGS))" \
 	CGO_CPPFLAGS="$(TARGET_CPPFLAGS)" \
 	CGO_CXXFLAGS="$(filter-out $(GO_CFLAGS_TO_REMOVE),$(TARGET_CXXFLAGS))"
diff --git a/lang/golang/golang-values.mk b/lang/golang/golang-values.mk
index 8989a1af4..a5a8c9502 100644
--- a/lang/golang/golang-values.mk
+++ b/lang/golang/golang-values.mk
@@ -16,7 +16,7 @@ unexport \
   GOARCH GOBIN GOCACHE GOFLAGS GOHOSTARCH GOOS GOPATH GORACE GOROOT GOTMPDIR GCCGO \
   GOGC GODEBUG GOMAXPROCS GOTRACEBACK \
   CGO_ENABLED \
-  CGO_CFLAGS CGO_CFLAGS_ALLOW CGO_CFLAGS_DISALLOW \
+  CGO_CFLAGS CGO_CFLAGS_ALLOW CGO_CFLAGS_DISALLOW CGO_MACHINE_FLAGS \
   CGO_CPPFLAGS CGO_CPPFLAGS_ALLOW CGO_CPPFLAGS_DISALLOW \
   CGO_CXXFLAGS CGO_CXXFLAGS_ALLOW CGO_CXXFLAGS_DISALLOW \
   CGO_FFLAGS CGO_FFLAGS_ALLOW CGO_FFLAGS_DISALLOW \
diff --git a/lang/golang/golang/patches/400-Add-CGO_MACHINE_FLAGS-to-override-hard-coded-arch-flags.patch b/lang/golang/golang/patches/400-Add-CGO_MACHINE_FLAGS-to-override-hard-coded-arch-flags.patch
new file mode 100644
index 000000000..377c0a447
--- /dev/null
+++ b/lang/golang/golang/patches/400-Add-CGO_MACHINE_FLAGS-to-override-hard-coded-arch-flags.patch
@@ -0,0 +1,28 @@
+From 6a5ab9c65b1930377d42b9ffeea93684586685ef Mon Sep 17 00:00:00 2001
+From: Daniel Santos <daniel.san...@pobox.com>
+Date: Sun, 13 Sep 2020 20:45:55 -0500
+Subject: Add CGO_MACHINE_FLAGS to override hard-coded flags
+
+Adds CGO_MACHINE_FLAGS to add a mechanism to correct machine flags when
+the hard-coded ones chosen by Google are wrong or sub-optimal.
+---
+ src/cmd/go/internal/work/exec.go | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/src/cmd/go/internal/work/exec.go b/src/cmd/go/internal/work/exec.go
+index 892e3cb500..6fa050fd38 100644
+--- a/src/cmd/go/internal/work/exec.go
++++ b/src/cmd/go/internal/work/exec.go
+@@ -2400,6 +2400,9 @@ func (b *Builder) gccSupportsFlag(compiler []string, flag string) bool {
+ 
+ // gccArchArgs returns arguments to pass to gcc based on the architecture.
+ func (b *Builder) gccArchArgs() []string {
++	if af := os.Getenv("CGO_MACHINE_FLAGS"); af != "" {
++	    return strings.Fields(af)
++	}
+ 	switch cfg.Goarch {
+ 	case "386":
+ 		return []string{"-m32"}
+-- 
+2.24.1
+
-- 
2.24.1

>From 985f3a6cc0c9fe69e441f17dfb6fcc77fbef68a9 Mon Sep 17 00:00:00 2001
From: Daniel Santos <daniel.san...@pobox.com>
Date: Sun, 13 Sep 2020 22:31:14 -0500
Subject: Add MACHINE_FLAGS for use by Golang

This splits up the DEFAULT_CFLAGS --> TARGET_OPTIMIZATIONS flag
generation process, separating out the machine-specific flags.  This is
currently only used in a Golang patch to better control how CGo
generates code.

Signed-off-by: Daniel Santos <daniel.san...@pobox.com>
---
 include/target.mk          |  5 +++--
 rules.mk                   |  1 +
 scripts/metadata.pm        |  1 +
 scripts/target-metadata.pl | 10 ++++++++++
 toolchain/Config.in        |  7 +++++++
 5 files changed, 22 insertions(+), 2 deletions(-)

diff --git a/include/target.mk b/include/target.mk
index 48c664d72d..3189822c96 100644
--- a/include/target.mk
+++ b/include/target.mk
@@ -162,7 +162,6 @@ LINUX_RECONF_DIFF = $(call __linux_confcmd,$(filter-out $(LINUX_RECONFIG_TARGET)
 ifeq ($(DUMP),1)
   BuildTarget=$(BuildTargets/DumpCurrent)
 
-  CPU_CFLAGS = -Os -pipe
   ifneq ($(findstring mips,$(ARCH)),)
     ifneq ($(findstring mips64,$(ARCH)),)
       CPU_TYPE ?= mips64
@@ -215,7 +214,8 @@ ifeq ($(DUMP),1)
       $(warning CPU_TYPE "$(CPU_TYPE)" doesn't correspond to a known type)
     endif
   endif
-  DEFAULT_CFLAGS=$(strip $(CPU_CFLAGS) $(CPU_CFLAGS_$(CPU_TYPE)) $(CPU_CFLAGS_$(CPU_SUBTYPE)))
+  DEFAULT_MACHINE_FLAGS=$(strip $(CPU_CFLAGS) $(CPU_CFLAGS_$(CPU_TYPE)) $(CPU_CFLAGS_$(CPU_SUBTYPE)))
+  DEFAULT_CFLAGS=$(strip -Os -pipe $(DEFAULT_MACHINE_FLAGS))
 
   ifneq ($(BOARD),)
     TMP_CONFIG:=$(TMP_DIR)/.kconfig-$(call target_conf,$(TARGETID))
@@ -284,6 +284,7 @@ define BuildTargets/DumpCurrent
 	 echo 'Target-Features: $(FEATURES)'; \
 	 echo 'Target-Depends: $(DEPENDS)'; \
 	 echo 'Target-Optimization: $(if $(CFLAGS),$(CFLAGS),$(DEFAULT_CFLAGS))'; \
+	 echo 'Target-Machine-Flags: $(if $(MACHINE_FLAGS),$(MACHINE_FLAGS),$(DEFAULT_MACHINE_FLAGS))'; \
 	 echo 'CPU-Type: $(CPU_TYPE)$(if $(CPU_SUBTYPE),+$(CPU_SUBTYPE))'; \
 	 echo 'Linux-Version: $(LINUX_VERSION)'; \
 	$(if $(LINUX_TESTING_VERSION),echo 'Linux-Testing-Version: $(LINUX_TESTING_VERSION)';) \
diff --git a/rules.mk b/rules.mk
index 80cb3d63f4..ae005b055e 100644
--- a/rules.mk
+++ b/rules.mk
@@ -65,6 +65,7 @@ ARCH_PACKAGES:=$(call qstrip,$(CONFIG_TARGET_ARCH_PACKAGES))
 BOARD:=$(call qstrip,$(CONFIG_TARGET_BOARD))
 SUBTARGET:=$(call qstrip,$(CONFIG_TARGET_SUBTARGET))
 TARGET_OPTIMIZATION:=$(call qstrip,$(CONFIG_TARGET_OPTIMIZATION))
+MACHINE_FLAGS:=$(call qstrip,$(CONFIG_MACHINE_FLAGS))
 export EXTRA_OPTIMIZATION:=$(filter-out -fno-plt,$(call qstrip,$(CONFIG_EXTRA_OPTIMIZATION)))
 TARGET_SUFFIX=$(call qstrip,$(CONFIG_TARGET_SUFFIX))
 BUILD_SUFFIX:=$(call qstrip,$(CONFIG_BUILD_SUFFIX))
diff --git a/scripts/metadata.pm b/scripts/metadata.pm
index 1826a040a1..0d5eb73f3c 100644
--- a/scripts/metadata.pm
+++ b/scripts/metadata.pm
@@ -129,6 +129,7 @@ sub parse_target_metadata($) {
 		/^Target-Depends:\s*(.+)\s*$/ and $target->{depends} = [ split(/\s+/, $1) ];
 		/^Target-Description:/ and $target->{desc} = get_multiline(*FILE);
 		/^Target-Optimization:\s*(.+)\s*$/ and $target->{cflags} = $1;
+		/^Target-Machine-Flags:\s*(.+)\s*$/ and $target->{machine_flags} = $1;
 		/^CPU-Type:\s*(.+)\s*$/ and $target->{cputype} = $1;
 		/^Linux-Version:\s*(.+)\s*$/ and $target->{version} = $1;
 		/^Linux-Testing-Version:\s*(.+)\s*$/ and $target->{testing_version} = $1;
diff --git a/scripts/target-metadata.pl b/scripts/target-metadata.pl
index ee0ab5a718..c5fb1825b9 100755
--- a/scripts/target-metadata.pl
+++ b/scripts/target-metadata.pl
@@ -380,6 +380,16 @@ EOF
 	print "\tdefault \"-Os -pipe -funit-at-a-time\"\n";
 	print <<EOF;
 
+config DEFAULT_MACHINE_FLAGS
+	string
+EOF
+	foreach my $target (@target) {
+		next if @{$target->{subtargets}} > 0;
+		print "\tdefault \"".$target->{machine_flags}."\" if TARGET_".$target->{conf}."\n";
+	}
+	print "\tdefault \"\"\n";
+	print <<EOF;
+
 config CPU_TYPE
 	string
 EOF
diff --git a/toolchain/Config.in b/toolchain/Config.in
index 3fac05a01a..b1c2772aac 100644
--- a/toolchain/Config.in
+++ b/toolchain/Config.in
@@ -37,6 +37,13 @@ menuconfig TARGET_OPTIONS
 
 		  Most people will answer N.
 
+	config MACHINE_FLAGS
+		string "Target machine flags (TODO: improve)" if TARGET_OPTIONS
+		default DEFAULT_MACHINE_FLAGS
+		help
+		  (TODO: improve) Machine-specific GCC flags for target.  This
+		  is currently only used by Golang via the CGO_MACHINE_FLAGS
+		  environment variable.
 
 menuconfig EXTERNAL_TOOLCHAIN
 	bool
-- 
2.24.1


--- End Message ---
_______________________________________________
openwrt-devel mailing list
openwrt-devel@lists.openwrt.org
https://lists.openwrt.org/mailman/listinfo/openwrt-devel
  • [no subject] Daniel Santos via openwrt-devel
    • Re: Jeffery To

Reply via email to