mirror of
git://git.yoctoproject.org/meta-virtualization.git
synced 2025-07-19 20:59:41 +02:00

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>
148 lines
4.1 KiB
Diff
148 lines
4.1 KiB
Diff
golang doesn't work with ccache. In the current state, a lot of parsing
|
|
happens where it'll grab the first string in CC or LD and uses that for
|
|
its builds. When ccache is enabled, it results in trying to do builds
|
|
with just ccache.
|
|
|
|
The brokeness is seen when building with apps that uses cgo, like docker.
|
|
To enable ccache to work, some string comparisons and changes to parsing
|
|
had to be made.
|
|
|
|
Signed-off-by: Amy Fong <amy.fong@windriver.com>
|
|
|
|
Index: go/src/cmd/cgo/gcc.go
|
|
===================================================================
|
|
--- go.orig/src/cmd/cgo/gcc.go 2014-06-18 17:26:26.000000000 -0700
|
|
+++ go/src/cmd/cgo/gcc.go 2015-06-18 13:19:08.908877160 -0700
|
|
@@ -712,6 +712,12 @@
|
|
func (p *Package) gccBaseCmd() []string {
|
|
// Use $CC if set, since that's what the build uses.
|
|
if ret := strings.Fields(os.Getenv("CC")); len(ret) > 0 {
|
|
+ if strings.Contains(ret[0], "ccache") {
|
|
+ base_cc := ret[0] + " " + ret[1]
|
|
+ os.Setenv("CCACHE_CC", ret[1])
|
|
+ ret[1] = base_cc
|
|
+ return ret[1:]
|
|
+ }
|
|
return ret
|
|
}
|
|
// Try $GCC if set, since that's what we used to use.
|
|
Index: go/src/pkg/os/exec/lp_unix.go
|
|
===================================================================
|
|
--- go.orig/src/pkg/os/exec/lp_unix.go 2014-06-18 17:26:25.000000000 -0700
|
|
+++ go/src/pkg/os/exec/lp_unix.go 2015-06-18 13:19:29.464876331 -0700
|
|
@@ -35,8 +35,14 @@
|
|
// (only bypass the path if file begins with / or ./ or ../)
|
|
// but that would not match all the Unix shells.
|
|
|
|
- if strings.Contains(file, "/") {
|
|
- err := findExecutable(file)
|
|
+ tmp := file
|
|
+ if strings.Contains(file, " ") {
|
|
+ exec_part := strings.Split(file, " ")[0]
|
|
+ tmp = exec_part
|
|
+ }
|
|
+
|
|
+ if strings.Contains(tmp, "/") {
|
|
+ err := findExecutable(tmp)
|
|
if err == nil {
|
|
return file, nil
|
|
}
|
|
@@ -51,7 +57,7 @@
|
|
// Unix shell semantics: path element "" means "."
|
|
dir = "."
|
|
}
|
|
- path := dir + "/" + file
|
|
+ path := dir + "/" + tmp
|
|
if err := findExecutable(path); err == nil {
|
|
return path, nil
|
|
}
|
|
Index: go/src/cmd/go/build.go
|
|
===================================================================
|
|
--- go.orig/src/cmd/go/build.go 2014-06-18 17:26:26.000000000 -0700
|
|
+++ go/src/cmd/go/build.go 2015-06-18 13:20:08.724874749 -0700
|
|
@@ -2005,8 +2005,15 @@
|
|
// strings returned are "gcc", "-I", objdir (and cuts them off).
|
|
|
|
compiler := envList(envvar, defcmd)
|
|
- a := []string{compiler[0], "-I", objdir}
|
|
- a = append(a, compiler[1:]...)
|
|
+
|
|
+ a := []string{compiler[0]}
|
|
+ if strings.Contains(compiler[0], "ccache") {
|
|
+ a = append(a, compiler[1], "-I", objdir)
|
|
+ a = append(a, compiler[2:]...)
|
|
+ } else {
|
|
+ a = append(a, "-I", objdir)
|
|
+ a = append(a, compiler[1:]...)
|
|
+ }
|
|
|
|
// Definitely want -fPIC but on Windows gcc complains
|
|
// "-fPIC ignored for target (all code is position independent)"
|
|
Index: go/src/cmd/ld/lib.c
|
|
===================================================================
|
|
--- go.orig/src/cmd/ld/lib.c 2014-06-18 17:26:27.000000000 -0700
|
|
+++ go/src/cmd/ld/lib.c 2015-06-18 13:18:39.564878343 -0700
|
|
@@ -552,7 +552,7 @@
|
|
void
|
|
hostlink(void)
|
|
{
|
|
- char *p, **argv;
|
|
+ char *p, *q, **argv;
|
|
int c, i, w, n, argc, len;
|
|
Hostobj *h;
|
|
Biobuf *f;
|
|
@@ -577,6 +577,19 @@
|
|
if(extld == nil)
|
|
extld = "gcc";
|
|
argv[argc++] = extld;
|
|
+
|
|
+ p = extldflags;
|
|
+ if (strstr(argv[0], "ccache") != NULL) {
|
|
+ while(p != nil) {
|
|
+ while(*p == ' ')
|
|
+ *p++ = '\0';
|
|
+ if(*p == '\0')
|
|
+ break;
|
|
+ argv[argc++] = p;
|
|
+ p = strchr(p + 1, ' ');
|
|
+ break;
|
|
+ }
|
|
+ }
|
|
switch(thechar){
|
|
case '8':
|
|
argv[argc++] = "-m32";
|
|
@@ -629,12 +642,12 @@
|
|
errorexit();
|
|
}
|
|
Bseek(f, h->off, 0);
|
|
- p = smprint("%s/%06d.o", tmpdir, i);
|
|
- argv[argc++] = p;
|
|
- w = create(p, 1, 0775);
|
|
+ q = smprint("%s/%06d.o", tmpdir, i);
|
|
+ argv[argc++] = q;
|
|
+ w = create(q, 1, 0775);
|
|
if(w < 0) {
|
|
ctxt->cursym = S;
|
|
- diag("cannot create %s: %r", p);
|
|
+ diag("cannot create %s: %r", q);
|
|
errorexit();
|
|
}
|
|
len = h->len;
|
|
@@ -646,7 +659,7 @@
|
|
}
|
|
if(close(w) < 0) {
|
|
ctxt->cursym = S;
|
|
- diag("cannot write %s: %r", p);
|
|
+ diag("cannot write %s: %r", q);
|
|
errorexit();
|
|
}
|
|
Bterm(f);
|
|
@@ -656,7 +669,6 @@
|
|
for(i=0; i<nldflag; i++)
|
|
argv[argc++] = ldflag[i];
|
|
|
|
- p = extldflags;
|
|
while(p != nil) {
|
|
while(*p == ' ')
|
|
*p++ = '\0';
|