diff options
author | Amy Fong <amy.fong@windriver.com> | 2015-10-06 14:41:09 -0400 |
---|---|---|
committer | Bruce Ashfield <bruce.ashfield@windriver.com> | 2015-10-13 11:29:57 -0400 |
commit | ac2adfb1696f191f15bcfeb13dab2d10fd6b7ce1 (patch) | |
tree | a222925a500ae8e161347b37de73f185bd6a0d9e | |
parent | 839e04c295d96dca2c52ccc2a25e93a86a30b199 (diff) | |
download | meta-virtualization-ac2adfb1696f191f15bcfeb13dab2d10fd6b7ce1.tar.gz |
docker: needs go 1.3
The current version of docker (1.6.2) requires go 1.3
See go 1.4 sqlite issue:
https://github.com/docker/docker/issues/9649
Signed-off-by: Amy Fong <amy.fong@windriver.com>
Signed-off-by: Bruce Ashfield <bruce.ashfield@windriver.com>
-rw-r--r-- | recipes-devtools/go-cross/files/bsd_svid_source.patch | 37 | ||||
-rw-r--r-- | recipes-devtools/go-cross/files/ccache.patch | 147 | ||||
-rw-r--r-- | recipes-devtools/go-cross/go-cross_1.3.bb | 65 |
3 files changed, 249 insertions, 0 deletions
diff --git a/recipes-devtools/go-cross/files/bsd_svid_source.patch b/recipes-devtools/go-cross/files/bsd_svid_source.patch new file mode 100644 index 00000000..21e1d4cb --- /dev/null +++ b/recipes-devtools/go-cross/files/bsd_svid_source.patch | |||
@@ -0,0 +1,37 @@ | |||
1 | golang-cross: do_compile fails cc1: all warnings being treated as errors | ||
2 | |||
3 | glibc 2.20 deprecates _BSD_SOURCE and _SVID_SOURCE and emits an error | ||
4 | message. From patch 16632: | ||
5 | libc [PATCH] BZ #16632: Disable _SVID_SOURCE/_BSD_SOURCE warning | ||
6 | if _DEFAULT_SOURCE is defined | ||
7 | |||
8 | Since we also need to support glibc before 2.20, from the release notes | ||
9 | for glibc 2.20, the recommended fix is to define _DEFAULT_SOURCE | ||
10 | |||
11 | (fixed upstream) | ||
12 | https://groups.google.com/forum/#!topic/golang-codereviews/S4TARFCxu2k | ||
13 | |||
14 | Signed-off-by: Amy Fong <amy.fong@windriver.com> | ||
15 | --- | ||
16 | include/u.h | 10 ++++++++++ | ||
17 | 1 file changed, 10 insertions(+) | ||
18 | |||
19 | --- a/include/u.h | ||
20 | +++ b/include/u.h | ||
21 | @@ -38,6 +38,16 @@ | ||
22 | # define __MAKECONTEXT_V2_SOURCE 1 | ||
23 | # endif | ||
24 | #endif | ||
25 | +/** | ||
26 | + * in glibc >= 2.20, _BSD_SOURCE and _SVID_SOURCE causes warning | ||
27 | + * messages if _DEFAULT_SOURCE is not defined. | ||
28 | + * | ||
29 | + * From glibc 2.20 release notes, since this application needs _BSD_SOURCE | ||
30 | + * and/or _SVID_SOURCE and we must support glibc < 2.19 and | ||
31 | + * glibc >= 2.20, then define all 3 (_DEFAULT_SOURCE, _BSD_SOURCE, | ||
32 | + * and _SVID_SOURCE) unconditionally | ||
33 | + */ | ||
34 | +#define _DEFAULT_SOURCE 1 | ||
35 | #define _BSD_SOURCE 1 | ||
36 | #define _NETBSD_SOURCE 1 /* NetBSD */ | ||
37 | #define _SVID_SOURCE 1 | ||
diff --git a/recipes-devtools/go-cross/files/ccache.patch b/recipes-devtools/go-cross/files/ccache.patch new file mode 100644 index 00000000..b7a64bf7 --- /dev/null +++ b/recipes-devtools/go-cross/files/ccache.patch | |||
@@ -0,0 +1,147 @@ | |||
1 | golang doesn't work with ccache. In the current state, a lot of parsing | ||
2 | happens where it'll grab the first string in CC or LD and uses that for | ||
3 | its builds. When ccache is enabled, it results in trying to do builds | ||
4 | with just ccache. | ||
5 | |||
6 | The brokeness is seen when building with apps that uses cgo, like docker. | ||
7 | To enable ccache to work, some string comparisons and changes to parsing | ||
8 | had to be made. | ||
9 | |||
10 | Signed-off-by: Amy Fong <amy.fong@windriver.com> | ||
11 | |||
12 | Index: go/src/cmd/cgo/gcc.go | ||
13 | =================================================================== | ||
14 | --- go.orig/src/cmd/cgo/gcc.go 2014-06-18 17:26:26.000000000 -0700 | ||
15 | +++ go/src/cmd/cgo/gcc.go 2015-06-18 13:19:08.908877160 -0700 | ||
16 | @@ -712,6 +712,12 @@ | ||
17 | func (p *Package) gccBaseCmd() []string { | ||
18 | // Use $CC if set, since that's what the build uses. | ||
19 | if ret := strings.Fields(os.Getenv("CC")); len(ret) > 0 { | ||
20 | + if strings.Contains(ret[0], "ccache") { | ||
21 | + base_cc := ret[0] + " " + ret[1] | ||
22 | + os.Setenv("CCACHE_CC", ret[1]) | ||
23 | + ret[1] = base_cc | ||
24 | + return ret[1:] | ||
25 | + } | ||
26 | return ret | ||
27 | } | ||
28 | // Try $GCC if set, since that's what we used to use. | ||
29 | Index: go/src/pkg/os/exec/lp_unix.go | ||
30 | =================================================================== | ||
31 | --- go.orig/src/pkg/os/exec/lp_unix.go 2014-06-18 17:26:25.000000000 -0700 | ||
32 | +++ go/src/pkg/os/exec/lp_unix.go 2015-06-18 13:19:29.464876331 -0700 | ||
33 | @@ -35,8 +35,14 @@ | ||
34 | // (only bypass the path if file begins with / or ./ or ../) | ||
35 | // but that would not match all the Unix shells. | ||
36 | |||
37 | - if strings.Contains(file, "/") { | ||
38 | - err := findExecutable(file) | ||
39 | + tmp := file | ||
40 | + if strings.Contains(file, " ") { | ||
41 | + exec_part := strings.Split(file, " ")[0] | ||
42 | + tmp = exec_part | ||
43 | + } | ||
44 | + | ||
45 | + if strings.Contains(tmp, "/") { | ||
46 | + err := findExecutable(tmp) | ||
47 | if err == nil { | ||
48 | return file, nil | ||
49 | } | ||
50 | @@ -51,7 +57,7 @@ | ||
51 | // Unix shell semantics: path element "" means "." | ||
52 | dir = "." | ||
53 | } | ||
54 | - path := dir + "/" + file | ||
55 | + path := dir + "/" + tmp | ||
56 | if err := findExecutable(path); err == nil { | ||
57 | return path, nil | ||
58 | } | ||
59 | Index: go/src/cmd/go/build.go | ||
60 | =================================================================== | ||
61 | --- go.orig/src/cmd/go/build.go 2014-06-18 17:26:26.000000000 -0700 | ||
62 | +++ go/src/cmd/go/build.go 2015-06-18 13:20:08.724874749 -0700 | ||
63 | @@ -2005,8 +2005,15 @@ | ||
64 | // strings returned are "gcc", "-I", objdir (and cuts them off). | ||
65 | |||
66 | compiler := envList(envvar, defcmd) | ||
67 | - a := []string{compiler[0], "-I", objdir} | ||
68 | - a = append(a, compiler[1:]...) | ||
69 | + | ||
70 | + a := []string{compiler[0]} | ||
71 | + if strings.Contains(compiler[0], "ccache") { | ||
72 | + a = append(a, compiler[1], "-I", objdir) | ||
73 | + a = append(a, compiler[2:]...) | ||
74 | + } else { | ||
75 | + a = append(a, "-I", objdir) | ||
76 | + a = append(a, compiler[1:]...) | ||
77 | + } | ||
78 | |||
79 | // Definitely want -fPIC but on Windows gcc complains | ||
80 | // "-fPIC ignored for target (all code is position independent)" | ||
81 | Index: go/src/cmd/ld/lib.c | ||
82 | =================================================================== | ||
83 | --- go.orig/src/cmd/ld/lib.c 2014-06-18 17:26:27.000000000 -0700 | ||
84 | +++ go/src/cmd/ld/lib.c 2015-06-18 13:18:39.564878343 -0700 | ||
85 | @@ -552,7 +552,7 @@ | ||
86 | void | ||
87 | hostlink(void) | ||
88 | { | ||
89 | - char *p, **argv; | ||
90 | + char *p, *q, **argv; | ||
91 | int c, i, w, n, argc, len; | ||
92 | Hostobj *h; | ||
93 | Biobuf *f; | ||
94 | @@ -577,6 +577,19 @@ | ||
95 | if(extld == nil) | ||
96 | extld = "gcc"; | ||
97 | argv[argc++] = extld; | ||
98 | + | ||
99 | + p = extldflags; | ||
100 | + if (strstr(argv[0], "ccache") != NULL) { | ||
101 | + while(p != nil) { | ||
102 | + while(*p == ' ') | ||
103 | + *p++ = '\0'; | ||
104 | + if(*p == '\0') | ||
105 | + break; | ||
106 | + argv[argc++] = p; | ||
107 | + p = strchr(p + 1, ' '); | ||
108 | + break; | ||
109 | + } | ||
110 | + } | ||
111 | switch(thechar){ | ||
112 | case '8': | ||
113 | argv[argc++] = "-m32"; | ||
114 | @@ -629,12 +642,12 @@ | ||
115 | errorexit(); | ||
116 | } | ||
117 | Bseek(f, h->off, 0); | ||
118 | - p = smprint("%s/%06d.o", tmpdir, i); | ||
119 | - argv[argc++] = p; | ||
120 | - w = create(p, 1, 0775); | ||
121 | + q = smprint("%s/%06d.o", tmpdir, i); | ||
122 | + argv[argc++] = q; | ||
123 | + w = create(q, 1, 0775); | ||
124 | if(w < 0) { | ||
125 | ctxt->cursym = S; | ||
126 | - diag("cannot create %s: %r", p); | ||
127 | + diag("cannot create %s: %r", q); | ||
128 | errorexit(); | ||
129 | } | ||
130 | len = h->len; | ||
131 | @@ -646,7 +659,7 @@ | ||
132 | } | ||
133 | if(close(w) < 0) { | ||
134 | ctxt->cursym = S; | ||
135 | - diag("cannot write %s: %r", p); | ||
136 | + diag("cannot write %s: %r", q); | ||
137 | errorexit(); | ||
138 | } | ||
139 | Bterm(f); | ||
140 | @@ -656,7 +669,6 @@ | ||
141 | for(i=0; i<nldflag; i++) | ||
142 | argv[argc++] = ldflag[i]; | ||
143 | |||
144 | - p = extldflags; | ||
145 | while(p != nil) { | ||
146 | while(*p == ' ') | ||
147 | *p++ = '\0'; | ||
diff --git a/recipes-devtools/go-cross/go-cross_1.3.bb b/recipes-devtools/go-cross/go-cross_1.3.bb new file mode 100644 index 00000000..87231428 --- /dev/null +++ b/recipes-devtools/go-cross/go-cross_1.3.bb | |||
@@ -0,0 +1,65 @@ | |||
1 | DESCRIPTION = "\ | ||
2 | Go is an open source programming language that makes it easy to build simple, \ | ||
3 | reliable, and efficient software. \ | ||
4 | " | ||
5 | HOMEPAGE = "https://golang.org/" | ||
6 | LICENSE = "BSD-3-Clause" | ||
7 | |||
8 | SRC_URI = "http://golang.org/dl/go${PV}.src.tar.gz" | ||
9 | |||
10 | S = "${WORKDIR}/go/" | ||
11 | |||
12 | inherit cross | ||
13 | |||
14 | LIC_FILES_CHKSUM = "file://LICENSE;md5=591778525c869cdde0ab5a1bf283cd81" | ||
15 | SRC_URI[md5sum] = "4b66d7249554181c314f139ea78920b1" | ||
16 | SRC_URI[sha256sum] = "eb983e6c5b2b9838f482c5442b1ac1856f610f2b21f3c123b3fedb48ffc35382" | ||
17 | |||
18 | SRC_URI += "\ | ||
19 | file://bsd_svid_source.patch \ | ||
20 | file://ccache.patch \ | ||
21 | " | ||
22 | |||
23 | do_compile() { | ||
24 | ## Setting `$GOBIN` doesn't do any good, looks like it ends up copying binaries there. | ||
25 | export GOROOT_FINAL="${SYSROOT}${libdir}/go" | ||
26 | |||
27 | export GOHOSTOS="linux" | ||
28 | export GOOS="linux" | ||
29 | |||
30 | export GOARCH="${TARGET_ARCH}" | ||
31 | if [ "${TARGET_ARCH}" = "x86_64" ]; then | ||
32 | export GOARCH="amd64" | ||
33 | fi | ||
34 | if [ "${TARGET_ARCH}" = "arm" ] | ||
35 | then | ||
36 | if [ `echo ${TUNE_PKGARCH} | cut -c 1-7` = "cortexa" ] | ||
37 | then | ||
38 | echo GOARM 7 | ||
39 | export GOARM="7" | ||
40 | fi | ||
41 | fi | ||
42 | |||
43 | export CGO_ENABLED="1" | ||
44 | ## TODO: consider setting GO_EXTLINK_ENABLED | ||
45 | |||
46 | export CC="${BUILD_CC}" | ||
47 | export CC_FOR_TARGET="${CC}" | ||
48 | export CXX_FOR_TARGET="${CXX}" | ||
49 | export GO_CCFLAGS="${HOST_CFLAGS}" | ||
50 | export GO_LDFLAGS="${HOST_LDFLAGS}" | ||
51 | |||
52 | cd src && ./make.bash | ||
53 | } | ||
54 | |||
55 | do_install() { | ||
56 | ## It should be okay to ignore `${WORKDIR}/go/bin/linux_arm`... | ||
57 | ## Also `gofmt` is not needed right now. | ||
58 | install -d "${D}${bindir}" | ||
59 | install -m 0755 "${WORKDIR}/go/bin/go" "${D}${bindir}" | ||
60 | install -d "${D}${libdir}/go" | ||
61 | ## TODO: use `install` instead of `cp` | ||
62 | for dir in include lib pkg src test | ||
63 | do cp -a "${WORKDIR}/go/${dir}" "${D}${libdir}/go/" | ||
64 | done | ||
65 | } | ||