From fffa5de926da7b890e7dc02aac3e3d484024f435 Mon Sep 17 00:00:00 2001 From: Ricky Stewart Date: Wed, 12 May 2021 16:32:15 -0500 Subject: [PATCH] Stage Go sources in a directory named after the package. This is a workaround for the issue described at https://github.com/cockroachdb/cockroach/issues/64379 -- this is unnecessarily inefficient, but it does work and avoids some regressions `rules_go` would otherwise introduce. --- go/tools/builders/cgo2.go | 9 +++++++-- go/tools/builders/compilepkg.go | 10 ++++++++++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/go/tools/builders/cgo2.go b/go/tools/builders/cgo2.go index fc2876a994..89f1943c77 100644 --- a/go/tools/builders/cgo2.go +++ b/go/tools/builders/cgo2.go @@ -241,14 +241,19 @@ func cgo2(goenv *env, goSrcs, cgoSrcs, cSrcs, cxxSrcs, objcSrcs, objcxxSrcs, sSr // Copy regular Go source files into the work directory so that we can // use -trimpath=workDir. - goBases, err := gatherSrcs(workDir, goSrcs) + subDir := filepath.Join(workDir, packagePath) + err = os.MkdirAll(subDir, 0755) + if err != nil { + return "", nil, nil, err + } + goBases, err := gatherSrcs(subDir, goSrcs) if err != nil { return "", nil, nil, err } allGoSrcs = make([]string, len(goSrcs)+len(genGoSrcs)) for i := range goSrcs { - allGoSrcs[i] = filepath.Join(workDir, goBases[i]) + allGoSrcs[i] = filepath.Join(subDir, goBases[i]) } copy(allGoSrcs[len(goSrcs):], genGoSrcs) return workDir, allGoSrcs, cObjs, nil diff --git a/go/tools/builders/compilepkg.go b/go/tools/builders/compilepkg.go index 32f1b7e752..f274d01743 100644 --- a/go/tools/builders/compilepkg.go +++ b/go/tools/builders/compilepkg.go @@ -348,6 +348,16 @@ func compileArchive( } } gcFlags = append(gcFlags, createTrimPath(gcFlags, ".")) + subDir := filepath.Join(workDir, packagePath) + err := os.MkdirAll(subDir, 0755) + if err != nil { + return err + } + goBases, err := gatherSrcs(subDir, goSrcs) + for i, base := range goBases { + goSrcs[i] = filepath.Join(subDir, base) + } + gcFlags = append(gcFlags, "-trimpath="+workDir) } // Check that the filtered sources don't import anything outside of