aboutsummaryrefslogtreecommitdiffstats
path: root/main/go-bootstrap
diff options
context:
space:
mode:
authorSören Tempel <soeren+git@soeren-tempel.net>2015-08-24 19:24:03 +0200
committerNatanael Copa <ncopa@alpinelinux.org>2015-08-28 11:11:21 +0200
commitbcfbb5080728e35c85f01851795220e1118a1fcc (patch)
treee8ec9d30d3ec84d0af60a63de97c47a798f5c3b6 /main/go-bootstrap
parent960197c8242568bc98f0033e61fc65c636f6a180 (diff)
downloadaports-bcfbb5080728e35c85f01851795220e1118a1fcc.tar.bz2
aports-bcfbb5080728e35c85f01851795220e1118a1fcc.tar.xz
main/go-boostrap: new aport
This is a more minimal version of the main/go aport. It is only supposed to be used for bootstrapping go1.5 and to clarify this point it is called go-bootstrap instead of go1.4. This package doesn't ship a tools or cross subpackage anymore because doing so would increase the amount of redundant 'code' in this APKBUILD and neither tools nor cross compilers are needed for bootstrapping go1.5.
Diffstat (limited to 'main/go-bootstrap')
-rw-r--r--main/go-bootstrap/APKBUILD94
-rw-r--r--main/go-bootstrap/default-sc-getpw-r-size-max.patch15
-rw-r--r--main/go-bootstrap/fix-arm-hackery.patch98
-rw-r--r--main/go-bootstrap/no-longjmp-redefine.patch10
-rw-r--r--main/go-bootstrap/no-pic.patch14
-rw-r--r--main/go-bootstrap/no-werror.patch10
6 files changed, 241 insertions, 0 deletions
diff --git a/main/go-bootstrap/APKBUILD b/main/go-bootstrap/APKBUILD
new file mode 100644
index 0000000000..3a43912bdf
--- /dev/null
+++ b/main/go-bootstrap/APKBUILD
@@ -0,0 +1,94 @@
+# Contributor: Sören Tempel <soeren+alpine@soeren-tempel.net>
+# Contributor: Eivind Uggedal <eivind@uggedal.com>
+# Maintainer: Sören Tempel <soeren+alpine@soeren-tempel.net>
+pkgname=go-bootstrap
+_realname="${pkgname%-*}"
+pkgver=1.4.2
+pkgrel=0
+pkgdesc="Go programming language compiler used for bootstraping"
+url="http://www.golang.org/"
+arch="x86 x86_64 armhf"
+license="BSD"
+replaces="go"
+depends=""
+depends_dev=""
+makedepends="bash perl"
+options="!strip"
+install=""
+subpackages="$pkgname-doc"
+source="
+ https://storage.googleapis.com/golang/go${pkgver}.src.tar.gz
+ no-werror.patch
+ no-pic.patch
+ no-longjmp-redefine.patch
+ fix-arm-hackery.patch
+ default-sc-getpw-r-size-max.patch
+ "
+
+_builddir="$srcdir"/$_realname
+prepare() {
+ cd "$_builddir"
+ for i in $source; do
+ case $i in
+ *.patch) patch -p1 -i "$srcdir"/$i || return 1 ;;
+ esac
+ done
+}
+
+build() {
+ cd "$_builddir/src"
+
+ export GOPATH="$srcdir"
+ export GOROOT="$_builddir"
+ export GOBIN="$GOROOT"/bin
+ export GOROOT_FINAL=/usr/lib/go
+
+ case "$CARCH" in
+ x86) export GOARCH="386" ;;
+ x86_64) export GOARCH="amd64" ;;
+ arm*) export GOARCH="arm" ;;
+ *) return 1 ;;
+ esac
+
+ unset CC # ccache breaks build for some reason
+ ./make.bash --no-clean || return 1
+
+ # FIXME: race and bench tests fail:
+ #PATH="$GOROOT/bin:$PATH" ./run.bash --no-rebuild --banner || return 1
+}
+
+package() {
+ cd "$_builddir"
+ mkdir -p "$pkgdir"/usr/bin "$pkgdir"/usr/lib/go "$pkgdir"/usr/share/doc/go
+
+ # The source needs to be installed due to an upstream
+ # bug (https://github.com/golang/go/issues/2775).
+ # When this is resolved we can split out the source to a
+ # go-doc sub package.
+ cp -a bin pkg src "$pkgdir"/usr/lib/go || return 1
+ cp -r doc misc "$pkgdir"/usr/share/doc/go || return 1
+
+ # Remove tests from /usr/lib/go/src.
+ # Those shouldn't be affacted by the upstream bug (see above).
+ find "$pkgdir"/usr/lib/go \( -type f -a -iname '*_test*' \) \
+ -o \( -type d -name 'testdata' \) -exec rm -rf \{\} \+
+}
+
+md5sums="907f85c8fa765d31f7f955836fec4049 go1.4.2.src.tar.gz
+65330c61f6d6c881033b0a95ca228edb no-werror.patch
+4391be88ce8bacdd7fee433b39635583 no-pic.patch
+93ad940db4a6d51e086f80755eaa8f53 no-longjmp-redefine.patch
+81ac9f3188df7a0c16c52cc4d8cc1ffa fix-arm-hackery.patch
+fd4d1a7ccb5d37da4ff9c3a2d97aa976 default-sc-getpw-r-size-max.patch"
+sha256sums="299a6fd8f8adfdce15bc06bde926e7b252ae8e24dd5b16b7d8791ed79e7b5e9b go1.4.2.src.tar.gz
+65d38b9485da2ff9417a2c44a81b6e52cc9bd2727b27e7add10d48a63805d4a3 no-werror.patch
+86fc68a50bc4a9336a003239adf1dcc6d7cabfb9c1bcf09b0d53d09100ceff12 no-pic.patch
+084020e0eb6cb0aceee047bd5962872ed51dbb45465174018d108eb195c26605 no-longjmp-redefine.patch
+fced8436d9c32a43a5cc87f2243529e7a8209ba73a9afd4fd7733245bc55e4e3 fix-arm-hackery.patch
+3757d5f7c4e6d3b2fed4b01c7da6e3e8c0b7789333219ab10ec0b151fb163980 default-sc-getpw-r-size-max.patch"
+sha512sums="cda1a29d4418875dffaf3324004ddae8e1bbb573f7668e6e0c03d8b61284f4db7fca244c181f2859f8ccdd3db6391fb21e0d98a1a9fc15096c15883249d48a9c go1.4.2.src.tar.gz
+3cf139723e6ff0cbf7aaf76295fe4208f2062f2d4086e36d05cad83919217b5355e0e79b0b515a06a578389301bd07b062cb58b98fc0f9e4badf190cd1c34826 no-werror.patch
+a8e95c3c536a30e15b9bad5e623a085c521739639a58ac638679d99413a1bee8823729783123cbe4495ac42822df31f4776f0380a63786b9f4fc73190e012ae5 no-pic.patch
+3a9b665f8fda89729c4c269ea82f82ee515f0026d26f1d51e2cf84054456e394afc14875e7ed29280a12488907d50c70af313e2e4a5b62c328bbade098db9d4d no-longjmp-redefine.patch
+573146b72c980af5e41540fd7912b5579b050e41ac9d808e8d14268cf0a0fa1a70e6fade85011c0f18f1a428bc95b225d8b8345be1c50656dc69046ef1eb0b40 fix-arm-hackery.patch
+5de9747fe60bbc60aa8ac9870f397fa8750723f919fea25a6afc22066be45a8ad193f7935d3deacbe85c032be89b8ace0a7e82b6c9981ddaf3b7f6e8d140c61f default-sc-getpw-r-size-max.patch"
diff --git a/main/go-bootstrap/default-sc-getpw-r-size-max.patch b/main/go-bootstrap/default-sc-getpw-r-size-max.patch
new file mode 100644
index 0000000000..f242b5a3cc
--- /dev/null
+++ b/main/go-bootstrap/default-sc-getpw-r-size-max.patch
@@ -0,0 +1,15 @@
+--- a/src/os/user/lookup_unix.go
++++ b/src/os/user/lookup_unix.go
+@@ -57,6 +57,12 @@
+ bufSize = 1024
+ } else {
+ bufSize = C.sysconf(C._SC_GETPW_R_SIZE_MAX)
++ // The musl alternative standard library on Linux
++ // return -1 as specified by POSIX if there are no
++ // hard limit on _SC_GETPW_R_SIZE_MAX.
++ if bufSize == -1 {
++ bufSize = 1024
++ }
+ if bufSize <= 0 || bufSize > 1<<20 {
+ return nil, fmt.Errorf("user: unreasonable _SC_GETPW_R_SIZE_MAX of %d", bufSize)
+ }
diff --git a/main/go-bootstrap/fix-arm-hackery.patch b/main/go-bootstrap/fix-arm-hackery.patch
new file mode 100644
index 0000000000..f5a447264c
--- /dev/null
+++ b/main/go-bootstrap/fix-arm-hackery.patch
@@ -0,0 +1,98 @@
+--- go/src/cmd/dist/arm.c
++++ go.fixed/src/cmd/dist/arm.c
+@@ -11,8 +11,8 @@
+ return "6";
+ }
+ #else
+-static void useVFPv3(void);
+-static void useVFPv1(void);
++void useVFPv3(void);
++void useVFPv1(void);
+
+ char *
+ xgetgoarm(void)
+@@ -26,46 +26,6 @@
+ else if(xtryexecfunc(useVFPv1))
+ return "6";
+ return "5";
+-}
+-
+-static void
+-useVFPv3(void)
+-{
+- // try to run VFPv3-only "vmov.f64 d0, #112" instruction
+- // we can't use that instruction directly, because we
+- // might be compiling with a soft-float only toolchain.
+- //
+- // some newer toolchains are configured to use thumb
+- // by default, so we need to do some mode changing magic
+- // here.
+- // We can use "bx pc; nop" here, but GNU as(1) insists
+- // on warning us
+- // "use of r15 in bx in ARM mode is not really useful"
+- // so we workaround that by using "bx r0"
+- __asm__ __volatile__ ("mov r0, pc");
+- __asm__ __volatile__ ("bx r0");
+- __asm__ __volatile__ (".word 0xeeb70b00"); // vmov.f64 d0, #112
+- __asm__ __volatile__ (".word 0xe12fff1e"); // bx lr
+-}
+-
+-static void
+-useVFPv1(void)
+-{
+- // try to run "vmov.f64 d0, d0" instruction
+- // we can't use that instruction directly, because we
+- // might be compiling with a soft-float only toolchain
+- //
+- // some newer toolchains are configured to use thumb
+- // by default, so we need to do some mode changing magic
+- // here.
+- // We can use "bx pc; nop" here, but GNU as(1) insists
+- // on warning us
+- // "use of r15 in bx in ARM mode is not really useful"
+- // so we workaround that by using "bx r0"
+- __asm__ __volatile__ ("mov r0, pc");
+- __asm__ __volatile__ ("bx r0");
+- __asm__ __volatile__ (".word 0xeeb00b40"); // vomv.f64 d0, d0
+- __asm__ __volatile__ (".word 0xe12fff1e"); // bx lr
+ }
+
+ #endif
+--- go/src/make.bash
++++ go.fixed/src/make.bash
+@@ -129,7 +132,7 @@
+ if [ -z "$CC" -a -z "$(type -t gcc)" -a -n "$(type -t clang)" ]; then
+ export CC=clang CXX=clang++
+ fi
+-${CC:-gcc} $mflag -O2 -Wall -Werror -o cmd/dist/dist -Icmd/dist "$DEFGOROOT" cmd/dist/*.c
++${CC:-gcc} $mflag -O2 -Wall -Werror -o cmd/dist/dist -Icmd/dist "$DEFGOROOT" cmd/dist/*.c cmd/dist/*.S
+
+ # -e doesn't propagate out of eval, so check success by hand.
+ eval $(./cmd/dist/dist env -p || echo FAIL=true)
+--- /dev/null 2014-12-09 07:52:31.203329541 -0200
++++ go.fixed/src/cmd/dist/arm.S 2014-12-09 10:29:34.149969243 -0200
+@@ -0,0 +1,24 @@
++#ifdef __ARMEL__
++
++.text
++
++.global useVFPv3
++.hidden useVFPv3
++.type useVFPv3,%function
++useVFPv3:
++ mov r0, pc
++ bx r0
++ .word 0xeeb70b00 // vmov.f64 d0, #112
++ .word 0xe12fff1e // bx lr
++
++
++.global useVFPv1
++.hidden useVFPv1
++.type useVFPv1,%function
++useVFPv1:
++ mov r0, pc
++ bx r0
++ .word 0xeeb00b40 // vomv.f64 d0, d0
++ .word 0xe12fff1e // bx lr
++
++#endif
diff --git a/main/go-bootstrap/no-longjmp-redefine.patch b/main/go-bootstrap/no-longjmp-redefine.patch
new file mode 100644
index 0000000000..36566d7a82
--- /dev/null
+++ b/main/go-bootstrap/no-longjmp-redefine.patch
@@ -0,0 +1,10 @@
+--- a/include/libc.h
++++ b/include/libc.h
+@@ -102,7 +102,6 @@ extern void sysfatal(char*, ...);
+ #define atoll p9atoll
+ #define getenv p9getenv
+ #define getwd p9getwd
+-#define longjmp p9longjmp
+ #undef setjmp
+ #define setjmp p9setjmp
+ #define putenv p9putenv
diff --git a/main/go-bootstrap/no-pic.patch b/main/go-bootstrap/no-pic.patch
new file mode 100644
index 0000000000..633dd9a1cf
--- /dev/null
+++ b/main/go-bootstrap/no-pic.patch
@@ -0,0 +1,14 @@
+--- a/src/cmd/ld/lib.c
++++ b/src/cmd/ld/lib.c
+@@ -786,6 +786,11 @@ hostlink(void)
+ p = strchr(p + 1, ' ');
+ }
+
++ // The Go linker does not currently support building objects that
++ // may be linked into a PIE. See:
++ // https://code.google.com/p/go/issues/detail?id=6940
++ argv[argc++] = "-fno-PIC";
++
+ argv[argc] = nil;
+
+ quotefmtinstall();
diff --git a/main/go-bootstrap/no-werror.patch b/main/go-bootstrap/no-werror.patch
new file mode 100644
index 0000000000..01f183edb0
--- /dev/null
+++ b/main/go-bootstrap/no-werror.patch
@@ -0,0 +1,10 @@
+--- a/src/cmd/dist/build.c
++++ b/src/cmd/dist/build.c
+@@ -384,7 +384,6 @@ static char *proto_gccargs[] = {
+ "-Wno-switch",
+ "-Wno-comment",
+ "-Wno-missing-field-initializers",
+- "-Werror",
+ "-fno-common",
+ "-ggdb",
+ "-pipe",