Merge "Add support for go:embed" into main am: 36b6322979
am: 78d056bd95
Original change: https://android-review.googlesource.com/c/platform/build/blueprint/+/3046017 Change-Id: I018f8bc58ecdcb76bb3a16eee13ef24342bc54a5 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
commit
1fbe12e4d7
1 changed files with 41 additions and 9 deletions
|
@ -15,7 +15,9 @@
|
||||||
package bootstrap
|
package bootstrap
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"runtime"
|
"runtime"
|
||||||
"strings"
|
"strings"
|
||||||
|
@ -46,13 +48,13 @@ var (
|
||||||
compile = pctx.StaticRule("compile",
|
compile = pctx.StaticRule("compile",
|
||||||
blueprint.RuleParams{
|
blueprint.RuleParams{
|
||||||
Command: "GOROOT='$goRoot' $compileCmd $parallelCompile -o $out.tmp " +
|
Command: "GOROOT='$goRoot' $compileCmd $parallelCompile -o $out.tmp " +
|
||||||
"$debugFlags -p $pkgPath -complete $incFlags -pack $in && " +
|
"$debugFlags -p $pkgPath -complete $incFlags $embedFlags -pack $in && " +
|
||||||
"if cmp --quiet $out.tmp $out; then rm $out.tmp; else mv -f $out.tmp $out; fi",
|
"if cmp --quiet $out.tmp $out; then rm $out.tmp; else mv -f $out.tmp $out; fi",
|
||||||
CommandDeps: []string{"$compileCmd"},
|
CommandDeps: []string{"$compileCmd"},
|
||||||
Description: "compile $out",
|
Description: "compile $out",
|
||||||
Restat: true,
|
Restat: true,
|
||||||
},
|
},
|
||||||
"pkgPath", "incFlags")
|
"pkgPath", "incFlags", "embedFlags")
|
||||||
|
|
||||||
link = pctx.StaticRule("link",
|
link = pctx.StaticRule("link",
|
||||||
blueprint.RuleParams{
|
blueprint.RuleParams{
|
||||||
|
@ -210,6 +212,7 @@ type GoPackage struct {
|
||||||
TestSrcs []string
|
TestSrcs []string
|
||||||
TestData []string
|
TestData []string
|
||||||
PluginFor []string
|
PluginFor []string
|
||||||
|
EmbedSrcs []string
|
||||||
|
|
||||||
Darwin struct {
|
Darwin struct {
|
||||||
Srcs []string
|
Srcs []string
|
||||||
|
@ -323,7 +326,7 @@ func (g *GoPackage) GenerateBuildActions(ctx blueprint.ModuleContext) {
|
||||||
testArchiveFile := filepath.Join(testRoot(ctx),
|
testArchiveFile := filepath.Join(testRoot(ctx),
|
||||||
filepath.FromSlash(g.properties.PkgPath)+".a")
|
filepath.FromSlash(g.properties.PkgPath)+".a")
|
||||||
g.testResultFile = buildGoTest(ctx, testRoot(ctx), testArchiveFile,
|
g.testResultFile = buildGoTest(ctx, testRoot(ctx), testArchiveFile,
|
||||||
g.properties.PkgPath, srcs, genSrcs, testSrcs)
|
g.properties.PkgPath, srcs, genSrcs, testSrcs, g.properties.EmbedSrcs)
|
||||||
|
|
||||||
// Don't build for test-only packages
|
// Don't build for test-only packages
|
||||||
if len(srcs) == 0 && len(genSrcs) == 0 {
|
if len(srcs) == 0 && len(genSrcs) == 0 {
|
||||||
|
@ -336,7 +339,7 @@ func (g *GoPackage) GenerateBuildActions(ctx blueprint.ModuleContext) {
|
||||||
}
|
}
|
||||||
|
|
||||||
buildGoPackage(ctx, g.pkgRoot, g.properties.PkgPath, g.archiveFile,
|
buildGoPackage(ctx, g.pkgRoot, g.properties.PkgPath, g.archiveFile,
|
||||||
srcs, genSrcs)
|
srcs, genSrcs, g.properties.EmbedSrcs)
|
||||||
blueprint.SetProvider(ctx, blueprint.SrcsFileProviderKey, blueprint.SrcsFileProviderData{SrcPaths: srcs})
|
blueprint.SetProvider(ctx, blueprint.SrcsFileProviderKey, blueprint.SrcsFileProviderData{SrcPaths: srcs})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -380,6 +383,7 @@ type GoBinary struct {
|
||||||
Srcs []string
|
Srcs []string
|
||||||
TestSrcs []string
|
TestSrcs []string
|
||||||
TestData []string
|
TestData []string
|
||||||
|
EmbedSrcs []string
|
||||||
PrimaryBuilder bool
|
PrimaryBuilder bool
|
||||||
Default bool
|
Default bool
|
||||||
|
|
||||||
|
@ -493,9 +497,9 @@ func (g *GoBinary) GenerateBuildActions(ctx blueprint.ModuleContext) {
|
||||||
}
|
}
|
||||||
|
|
||||||
testDeps = buildGoTest(ctx, testRoot(ctx), testArchiveFile,
|
testDeps = buildGoTest(ctx, testRoot(ctx), testArchiveFile,
|
||||||
name, srcs, genSrcs, testSrcs)
|
name, srcs, genSrcs, testSrcs, g.properties.EmbedSrcs)
|
||||||
|
|
||||||
buildGoPackage(ctx, objDir, "main", archiveFile, srcs, genSrcs)
|
buildGoPackage(ctx, objDir, "main", archiveFile, srcs, genSrcs, g.properties.EmbedSrcs)
|
||||||
|
|
||||||
var linkDeps []string
|
var linkDeps []string
|
||||||
var libDirFlags []string
|
var libDirFlags []string
|
||||||
|
@ -561,8 +565,30 @@ func buildGoPluginLoader(ctx blueprint.ModuleContext, pkgPath, pluginSrc string)
|
||||||
return ret
|
return ret
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func generateEmbedcfgFile(files []string, srcDir string, embedcfgFile string) {
|
||||||
|
embedcfg := struct {
|
||||||
|
Patterns map[string][]string
|
||||||
|
Files map[string]string
|
||||||
|
}{
|
||||||
|
map[string][]string{},
|
||||||
|
map[string]string{},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, file := range files {
|
||||||
|
embedcfg.Patterns[file] = []string{file}
|
||||||
|
embedcfg.Files[file] = filepath.Join(srcDir, file)
|
||||||
|
}
|
||||||
|
|
||||||
|
embedcfgData, err := json.Marshal(&embedcfg)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
os.WriteFile(embedcfgFile, []byte(embedcfgData), 0644)
|
||||||
|
}
|
||||||
|
|
||||||
func buildGoPackage(ctx blueprint.ModuleContext, pkgRoot string,
|
func buildGoPackage(ctx blueprint.ModuleContext, pkgRoot string,
|
||||||
pkgPath string, archiveFile string, srcs []string, genSrcs []string) {
|
pkgPath string, archiveFile string, srcs []string, genSrcs []string, embedSrcs []string) {
|
||||||
|
|
||||||
srcDir := moduleSrcDir(ctx)
|
srcDir := moduleSrcDir(ctx)
|
||||||
srcFiles := pathtools.PrefixPaths(srcs, srcDir)
|
srcFiles := pathtools.PrefixPaths(srcs, srcDir)
|
||||||
|
@ -587,6 +613,12 @@ func buildGoPackage(ctx blueprint.ModuleContext, pkgRoot string,
|
||||||
compileArgs["incFlags"] = strings.Join(incFlags, " ")
|
compileArgs["incFlags"] = strings.Join(incFlags, " ")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if len(embedSrcs) > 0 {
|
||||||
|
embedcfgFile := archiveFile + ".embedcfg"
|
||||||
|
generateEmbedcfgFile(embedSrcs, srcDir, embedcfgFile)
|
||||||
|
compileArgs["embedFlags"] = "-embedcfg " + embedcfgFile
|
||||||
|
}
|
||||||
|
|
||||||
ctx.Build(pctx, blueprint.BuildParams{
|
ctx.Build(pctx, blueprint.BuildParams{
|
||||||
Rule: compile,
|
Rule: compile,
|
||||||
Outputs: []string{archiveFile},
|
Outputs: []string{archiveFile},
|
||||||
|
@ -598,7 +630,7 @@ func buildGoPackage(ctx blueprint.ModuleContext, pkgRoot string,
|
||||||
}
|
}
|
||||||
|
|
||||||
func buildGoTest(ctx blueprint.ModuleContext, testRoot, testPkgArchive,
|
func buildGoTest(ctx blueprint.ModuleContext, testRoot, testPkgArchive,
|
||||||
pkgPath string, srcs, genSrcs, testSrcs []string) []string {
|
pkgPath string, srcs, genSrcs, testSrcs []string, embedSrcs []string) []string {
|
||||||
|
|
||||||
if len(testSrcs) == 0 {
|
if len(testSrcs) == 0 {
|
||||||
return nil
|
return nil
|
||||||
|
@ -613,7 +645,7 @@ func buildGoTest(ctx blueprint.ModuleContext, testRoot, testPkgArchive,
|
||||||
testPassed := filepath.Join(testRoot, "test.passed")
|
testPassed := filepath.Join(testRoot, "test.passed")
|
||||||
|
|
||||||
buildGoPackage(ctx, testRoot, pkgPath, testPkgArchive,
|
buildGoPackage(ctx, testRoot, pkgPath, testPkgArchive,
|
||||||
append(srcs, testSrcs...), genSrcs)
|
append(srcs, testSrcs...), genSrcs, embedSrcs)
|
||||||
|
|
||||||
ctx.Build(pctx, blueprint.BuildParams{
|
ctx.Build(pctx, blueprint.BuildParams{
|
||||||
Rule: goTestMain,
|
Rule: goTestMain,
|
||||||
|
|
Loading…
Reference in a new issue