[tbb-commits] [Git][tpo/applications/tor-browser-build][main] Bug 40777: Update Go to 1.20.4 and create a Go bootstrap project

Pier Angelo Vendrame (@pierov) git at gitlab.torproject.org
Thu May 25 16:29:24 UTC 2023



Pier Angelo Vendrame pushed to branch main at The Tor Project / Applications / tor-browser-build


Commits:
b37e2ebd by Pier Angelo Vendrame at 2023-05-25T18:28:35+02:00
Bug 40777: Update Go to 1.20.4 and create a Go bootstrap project

The Go compiler is written in Go, but it is possible to bootstrap it
from C wiht Go 1.4.
Before this commit, we used to build Go 1.4 for all our platforms,
so we built a compiler to throw it away several times.

Starting from Go 1.20, the team decided to require Go V-3 to bootstrap
(i.e., Go 1.17 to bootrastrap Go 1.20).
Bootstrapping is still feasible, but throwing away two compilers is
not a good idea. So, we decided to create a Go bootstrap project, and
build it only once (for Linux amd64) until it will be able to build
more recent Go compilers.

- - - - -


5 changed files:

- + projects/go-bootstrap/build
- + projects/go-bootstrap/config
- projects/go/0001-Use-fixed-go-build-tmp-directory.patch
- projects/go/build
- projects/go/config


Changes:

=====================================
projects/go-bootstrap/build
=====================================
@@ -0,0 +1,38 @@
+#!/bin/bash
+[% c("var/set_default_env") -%]
+
+# This project is expected to be built only on Linux.
+# Then the actual Go compiler will be built for each platform.
+
+distdir=/var/tmp/dist/[% project %]
+mkdir -p /var/tmp/build /var/tmp/dist
+
+# Building go 1.4.x
+# This is needed to bootstrap the go that we actually use
+# https://golang.org/doc/install/source#go14
+tar -C /var/tmp/build --transform='s,^go\>,go1.4,' -xf $rootdir/[% c('input_files_by_name/go14') %]
+cd /var/tmp/build/go1.4/src
+# Disable cgo to avoid conflicts with newer GCC. cgo is not needed for the bootstrap go.
+# https://github.com/golang/go/issues/13114#issuecomment-186922245
+# Disable CC etc. that are set up for cross builds.
+CGO_ENABLED=0 CC= CFLAGS= LDFLAGS= ./make.bash
+export GOROOT_BOOTSTRAP="/var/tmp/build/go1.4"
+
+cd $rootdir
+
+tar -C /var/tmp/dist -xf $rootdir/[% c('input_files_by_name/go') %]
+export GOROOT="$distdir"
+mv /var/tmp/dist/go $distdir
+cd $distdir/src
+
+./make.bash
+
+# This directory is non-reproducible and doesn't exist in official Go releases,
+# so remove it to preserve reproducibility of the output.
+rm -rf $distdir/pkg/obj/go-build/
+
+cd /var/tmp/dist
+[% c('tar', {
+        tar_src => [ project ],
+        tar_args => '-czf ' _ dest_dir _ '/' _ c('filename'),
+    }) %]


=====================================
projects/go-bootstrap/config
=====================================
@@ -0,0 +1,14 @@
+# vim: filetype=yaml sw=2
+version: 1.19.9
+filename: '[% project %]-[% c("version") %]-[% c("var/build_id") %].tar.gz'
+container:
+  use_container: 1
+
+input_files:
+  - project: container-image
+  - URL: 'https://golang.org/dl/go[% c("version") %].src.tar.gz'
+    name: go
+    sha256sum: 131190a4697a70c5b1d232df5d3f55a3f9ec0e78e40516196ffb3f09ae6a5744
+  - URL: https://dl.google.com/go/go1.4-bootstrap-20171003.tar.gz
+    name: go14
+    sha256sum: f4ff5b5eb3a3cae1c993723f3eab519c5bae18866b5e5f96fe1102f0cb5c3e52


=====================================
projects/go/0001-Use-fixed-go-build-tmp-directory.patch
=====================================
@@ -1,4 +1,4 @@
-From 958f724b1b434702c3d44ceaca646791674d07b1 Mon Sep 17 00:00:00 2001
+From 2c1c98d6404284df744a194dd23bd3660f365387 Mon Sep 17 00:00:00 2001
 From: Georg Koppen <gk at torproject.org>
 Date: Fri, 17 Apr 2020 10:24:23 +0000
 Subject: [PATCH] Use fixed go-build tmp directory
@@ -6,15 +6,18 @@ Subject: [PATCH] Use fixed go-build tmp directory
 Use fixed go-build tmp directory, when the directory does not exist, in
 order to avoid some reproducibility issues where build directory gets
 embedded in generated binaries.
+---
+ src/cmd/go/internal/work/action.go | 10 +++++++---
+ 1 file changed, 7 insertions(+), 3 deletions(-)
 
 diff --git a/src/cmd/go/internal/work/action.go b/src/cmd/go/internal/work/action.go
-index 33b7818fb2..5e369d0f53 100644
+index 8beb1345d0..dccf39c1c1 100644
 --- a/src/cmd/go/internal/work/action.go
 +++ b/src/cmd/go/internal/work/action.go
-@@ -252,9 +252,13 @@ func (b *Builder) Init() {
- 	if cfg.BuildN {
- 		b.WorkDir = "$WORK"
- 	} else {
+@@ -279,9 +279,13 @@ func NewBuilder(workDir string) *Builder {
+ 		if !buildInitStarted {
+ 			panic("internal error: NewBuilder called before BuildInit")
+ 		}
 -		tmp, err := os.MkdirTemp(cfg.Getenv("GOTMPDIR"), "go-build")
 -		if err != nil {
 -			base.Fatalf("go: creating work dir: %v", err)
@@ -29,5 +32,5 @@ index 33b7818fb2..5e369d0f53 100644
  		if !filepath.IsAbs(tmp) {
  			abs, err := filepath.Abs(tmp)
 -- 
-2.26.1
+2.39.2
 


=====================================
projects/go/build
=====================================
@@ -3,27 +3,8 @@
 distdir=/var/tmp/dist/[% project %]
 mkdir -p /var/tmp/dist
 
-[% IF c("var/linux") %]
-  # Config options for hardening-wrapper
-  export DEB_BUILD_HARDENING=1
-  export DEB_BUILD_HARDENING_STACKPROTECTOR=1
-  export DEB_BUILD_HARDENING_FORTIFY=1
-  export DEB_BUILD_HARDENING_FORMAT=1
-  export DEB_BUILD_HARDENING_PIE=1
-[% END %]
-
-mkdir -p /var/tmp/build
-
-# Building go 1.4.x
-# This is needed to bootstrap the go that we actually use
-# https://golang.org/doc/install/source#go14
-tar -C /var/tmp/build --transform='s,^go\>,go1.4,' -xf $rootdir/[% c('input_files_by_name/go14') %]
-cd /var/tmp/build/go1.4/src
-# Disable cgo to avoid conflicts with newer GCC. cgo is not needed for the bootstrap go.
-# https://github.com/golang/go/issues/13114#issuecomment-186922245
-# Disable CC etc. that are set up for cross builds.
-CGO_ENABLED=0 CC= CFLAGS= LDFLAGS= ./make.bash
-export GOROOT_BOOTSTRAP="/var/tmp/build/go1.4"
+tar -C /var/tmp/dist -xf $rootdir/[% c('input_files_by_name/go-bootstrap') %]
+export GOROOT_BOOTSTRAP="/var/tmp/dist/go-bootstrap"
 
 cd $rootdir
 [% IF ! c("var/linux") %]


=====================================
projects/go/config
=====================================
@@ -1,12 +1,10 @@
 # vim: filetype=yaml sw=2
-version: 1.19.9
-filename: '[% project %]-[% c("version") %]-[% c("var/build_id") %].tar.gz'
+version: 1.20.4
+filename: '[% project %]-[% c("version") %]-[% c("var/osname") %]-[% c("var/build_id") %].tar.gz'
 container:
   use_container: 1
 
 var:
-  go14_version: 1.4.3
-
   setup: |
     mkdir -p /var/tmp/dist
     tar -C /var/tmp/dist -xf $rootdir/[% c("go_tarfile") %]
@@ -121,9 +119,10 @@ input_files:
     enable: '[% ! c("var/linux") %]'
   - URL: 'https://golang.org/dl/go[% c("version") %].src.tar.gz'
     name: go
-    sha256sum: 131190a4697a70c5b1d232df5d3f55a3f9ec0e78e40516196ffb3f09ae6a5744
-  - URL: 'https://golang.org/dl/go[% c("var/go14_version") %].src.tar.gz'
-    name: go14
-    sha256sum: 9947fc705b0b841b5938c48b22dc33e9647ec0752bae66e50278df4f23f64959
+    sha256sum: 9f34ace128764b7a3a4b238b805856cc1b2184304df9e5690825b0710f4202d6
+  - project: go-bootstrap
+    name: go-bootstrap
+    target_replace:
+      '^.*browser-.*': 'basebrowser-linux-x86_64'
   - filename: 0001-Use-fixed-go-build-tmp-directory.patch
     enable: '[% c("var/android") %]'



View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser-build/-/commit/b37e2ebdeb80830daec50dd4956e9070ca87c9e6

-- 
View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser-build/-/commit/b37e2ebdeb80830daec50dd4956e9070ca87c9e6
You're receiving this email because of your account on gitlab.torproject.org.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.torproject.org/pipermail/tbb-commits/attachments/20230525/bab52d82/attachment-0001.htm>


More information about the tbb-commits mailing list