Loading apex/bp2build.go +8 −2 Original line number Original line Diff line number Diff line Loading @@ -15,16 +15,22 @@ package apex import ( import ( "android/soong/android" "android/soong/android" "encoding/json" "strings" "strings" ) ) // This file contains the bp2build integration for the apex package. // This file contains the bp2build integration for the apex package. // Export constants as Starlark using bp2build to Bazel. // Export constants as Starlark using bp2build to Bazel. func BazelApexToolchainVars() string { func BazelApexToolchainVars() (string, error) { marshalled, err := json.Marshal(apexAvailBaseline) if err != nil { return "", err } content := []string{ content := []string{ "# GENERATED BY SOONG. DO NOT EDIT.", "# GENERATED BY SOONG. DO NOT EDIT.", "default_manifest_version = " + android.DefaultUpdatableModuleVersion, // constants.go is different in every branch. "default_manifest_version = " + android.DefaultUpdatableModuleVersion, // constants.go is different in every branch. "apex_available_baseline = json.decode('''" + string(marshalled) + "''')", } } return strings.Join(content, "\n") return strings.Join(content, "\n"), nil } } bp2build/bp2build.go +14 −7 Original line number Original line Diff line number Diff line Loading @@ -45,8 +45,12 @@ func Codegen(ctx *CodegenContext) *CodegenMetrics { bp2buildFiles := CreateBazelFiles(ctx.Config(), nil, res.buildFileToTargets, ctx.mode) bp2buildFiles := CreateBazelFiles(ctx.Config(), nil, res.buildFileToTargets, ctx.mode) writeFiles(ctx, bp2buildDir, bp2buildFiles) writeFiles(ctx, bp2buildDir, bp2buildFiles) soongInjectionDir := android.PathForOutput(ctx, bazel.SoongInjectionDirName) injectionFiles, err := CreateSoongInjectionDirFiles(ctx, res.metrics) writeFiles(ctx, soongInjectionDir, CreateSoongInjectionDirFiles(ctx, res.metrics)) if err != nil { fmt.Printf("%s\n", err.Error()) os.Exit(1) } writeFiles(ctx, android.PathForOutput(ctx, bazel.SoongInjectionDirName), injectionFiles) return &res.metrics return &res.metrics } } Loading @@ -55,17 +59,20 @@ func Codegen(ctx *CodegenContext) *CodegenMetrics { // This includes // This includes // 1. config value(s) that are hardcoded in Soong // 1. config value(s) that are hardcoded in Soong // 2. product_config variables // 2. product_config variables func CreateSoongInjectionDirFiles(ctx *CodegenContext, metrics CodegenMetrics) []BazelFile { func CreateSoongInjectionDirFiles(ctx *CodegenContext, metrics CodegenMetrics) ([]BazelFile, error) { var ret []BazelFile var ret []BazelFile productConfigFiles, err := CreateProductConfigFiles(ctx) productConfigFiles, err := CreateProductConfigFiles(ctx) if err != nil { if err != nil { fmt.Printf("ERROR: %s", err.Error()) return nil, err os.Exit(1) } } ret = append(ret, productConfigFiles...) ret = append(ret, productConfigFiles...) ret = append(ret, soongInjectionFiles(ctx.Config(), metrics)...) injectionFiles, err := soongInjectionFiles(ctx.Config(), metrics) return ret if err != nil { return nil, err } ret = append(ret, injectionFiles...) return ret, nil } } // Get the output directory and create it if it doesn't exist. // Get the output directory and create it if it doesn't exist. Loading bp2build/conversion.go +8 −4 Original line number Original line Diff line number Diff line Loading @@ -22,7 +22,7 @@ type BazelFile struct { } } // PRIVATE: Use CreateSoongInjectionDirFiles instead // PRIVATE: Use CreateSoongInjectionDirFiles instead func soongInjectionFiles(cfg android.Config, metrics CodegenMetrics) []BazelFile { func soongInjectionFiles(cfg android.Config, metrics CodegenMetrics) ([]BazelFile, error) { var files []BazelFile var files []BazelFile files = append(files, newFile("android", GeneratedBuildFileName, "")) // Creates a //cc_toolchain package. files = append(files, newFile("android", GeneratedBuildFileName, "")) // Creates a //cc_toolchain package. Loading @@ -36,7 +36,11 @@ func soongInjectionFiles(cfg android.Config, metrics CodegenMetrics) []BazelFile files = append(files, newFile("java_toolchain", "constants.bzl", java_config.BazelJavaToolchainVars(cfg))) files = append(files, newFile("java_toolchain", "constants.bzl", java_config.BazelJavaToolchainVars(cfg))) files = append(files, newFile("apex_toolchain", GeneratedBuildFileName, "")) // Creates a //apex_toolchain package. files = append(files, newFile("apex_toolchain", GeneratedBuildFileName, "")) // Creates a //apex_toolchain package. files = append(files, newFile("apex_toolchain", "constants.bzl", apex.BazelApexToolchainVars())) apexToolchainVars, err := apex.BazelApexToolchainVars() if err != nil { return nil, err } files = append(files, newFile("apex_toolchain", "constants.bzl", apexToolchainVars)) files = append(files, newFile("metrics", "converted_modules.txt", strings.Join(metrics.Serialize().ConvertedModules, "\n"))) files = append(files, newFile("metrics", "converted_modules.txt", strings.Join(metrics.Serialize().ConvertedModules, "\n"))) Loading @@ -52,7 +56,7 @@ func soongInjectionFiles(cfg android.Config, metrics CodegenMetrics) []BazelFile apiLevelsContent, err := json.Marshal(android.GetApiLevelsMap(cfg)) apiLevelsContent, err := json.Marshal(android.GetApiLevelsMap(cfg)) if err != nil { if err != nil { panic(err) return nil, err } } files = append(files, newFile("api_levels", GeneratedBuildFileName, `exports_files(["api_levels.json"])`)) files = append(files, newFile("api_levels", GeneratedBuildFileName, `exports_files(["api_levels.json"])`)) files = append(files, newFile("api_levels", "api_levels.json", string(apiLevelsContent))) files = append(files, newFile("api_levels", "api_levels.json", string(apiLevelsContent))) Loading @@ -64,7 +68,7 @@ func soongInjectionFiles(cfg android.Config, metrics CodegenMetrics) []BazelFile files = append(files, newFile("allowlists", "mixed_build_prod_allowlist.txt", strings.Join(android.GetBazelEnabledModules(android.BazelProdMode), "\n")+"\n")) files = append(files, newFile("allowlists", "mixed_build_prod_allowlist.txt", strings.Join(android.GetBazelEnabledModules(android.BazelProdMode), "\n")+"\n")) files = append(files, newFile("allowlists", "mixed_build_staging_allowlist.txt", strings.Join(android.GetBazelEnabledModules(android.BazelStagingMode), "\n")+"\n")) files = append(files, newFile("allowlists", "mixed_build_staging_allowlist.txt", strings.Join(android.GetBazelEnabledModules(android.BazelStagingMode), "\n")+"\n")) return files return files, nil } } func CreateBazelFiles( func CreateBazelFiles( Loading bp2build/conversion_test.go +4 −2 Original line number Original line Diff line number Diff line Loading @@ -84,8 +84,10 @@ func TestCreateBazelFiles_QueryView_AddsTopLevelFiles(t *testing.T) { func TestCreateBazelFiles_Bp2Build_CreatesDefaultFiles(t *testing.T) { func TestCreateBazelFiles_Bp2Build_CreatesDefaultFiles(t *testing.T) { testConfig := android.TestConfig("", make(map[string]string), "", make(map[string][]byte)) testConfig := android.TestConfig("", make(map[string]string), "", make(map[string][]byte)) files := soongInjectionFiles(testConfig, CreateCodegenMetrics()) files, err := soongInjectionFiles(testConfig, CreateCodegenMetrics()) if err != nil { t.Error(err) } expectedFilePaths := []bazelFilepath{ expectedFilePaths := []bazelFilepath{ { { dir: "android", dir: "android", Loading cmd/soong_build/main.go +2 −1 Original line number Original line Diff line number Diff line Loading @@ -178,7 +178,8 @@ func runApiBp2build(ctx *android.Context, extraNinjaDeps []string) string { ninjaDeps = append(ninjaDeps, codegenContext.AdditionalNinjaDeps()...) ninjaDeps = append(ninjaDeps, codegenContext.AdditionalNinjaDeps()...) // Create soong_injection repository // Create soong_injection repository soongInjectionFiles := bp2build.CreateSoongInjectionDirFiles(codegenContext, bp2build.CreateCodegenMetrics()) soongInjectionFiles, err := bp2build.CreateSoongInjectionDirFiles(codegenContext, bp2build.CreateCodegenMetrics()) maybeQuit(err, "") absoluteSoongInjectionDir := shared.JoinPath(topDir, ctx.Config().SoongOutDir(), bazel.SoongInjectionDirName) absoluteSoongInjectionDir := shared.JoinPath(topDir, ctx.Config().SoongOutDir(), bazel.SoongInjectionDirName) for _, file := range soongInjectionFiles { for _, file := range soongInjectionFiles { // The API targets in api_bp2build workspace do not have any dependency on api_bp2build. // The API targets in api_bp2build workspace do not have any dependency on api_bp2build. Loading Loading
apex/bp2build.go +8 −2 Original line number Original line Diff line number Diff line Loading @@ -15,16 +15,22 @@ package apex import ( import ( "android/soong/android" "android/soong/android" "encoding/json" "strings" "strings" ) ) // This file contains the bp2build integration for the apex package. // This file contains the bp2build integration for the apex package. // Export constants as Starlark using bp2build to Bazel. // Export constants as Starlark using bp2build to Bazel. func BazelApexToolchainVars() string { func BazelApexToolchainVars() (string, error) { marshalled, err := json.Marshal(apexAvailBaseline) if err != nil { return "", err } content := []string{ content := []string{ "# GENERATED BY SOONG. DO NOT EDIT.", "# GENERATED BY SOONG. DO NOT EDIT.", "default_manifest_version = " + android.DefaultUpdatableModuleVersion, // constants.go is different in every branch. "default_manifest_version = " + android.DefaultUpdatableModuleVersion, // constants.go is different in every branch. "apex_available_baseline = json.decode('''" + string(marshalled) + "''')", } } return strings.Join(content, "\n") return strings.Join(content, "\n"), nil } }
bp2build/bp2build.go +14 −7 Original line number Original line Diff line number Diff line Loading @@ -45,8 +45,12 @@ func Codegen(ctx *CodegenContext) *CodegenMetrics { bp2buildFiles := CreateBazelFiles(ctx.Config(), nil, res.buildFileToTargets, ctx.mode) bp2buildFiles := CreateBazelFiles(ctx.Config(), nil, res.buildFileToTargets, ctx.mode) writeFiles(ctx, bp2buildDir, bp2buildFiles) writeFiles(ctx, bp2buildDir, bp2buildFiles) soongInjectionDir := android.PathForOutput(ctx, bazel.SoongInjectionDirName) injectionFiles, err := CreateSoongInjectionDirFiles(ctx, res.metrics) writeFiles(ctx, soongInjectionDir, CreateSoongInjectionDirFiles(ctx, res.metrics)) if err != nil { fmt.Printf("%s\n", err.Error()) os.Exit(1) } writeFiles(ctx, android.PathForOutput(ctx, bazel.SoongInjectionDirName), injectionFiles) return &res.metrics return &res.metrics } } Loading @@ -55,17 +59,20 @@ func Codegen(ctx *CodegenContext) *CodegenMetrics { // This includes // This includes // 1. config value(s) that are hardcoded in Soong // 1. config value(s) that are hardcoded in Soong // 2. product_config variables // 2. product_config variables func CreateSoongInjectionDirFiles(ctx *CodegenContext, metrics CodegenMetrics) []BazelFile { func CreateSoongInjectionDirFiles(ctx *CodegenContext, metrics CodegenMetrics) ([]BazelFile, error) { var ret []BazelFile var ret []BazelFile productConfigFiles, err := CreateProductConfigFiles(ctx) productConfigFiles, err := CreateProductConfigFiles(ctx) if err != nil { if err != nil { fmt.Printf("ERROR: %s", err.Error()) return nil, err os.Exit(1) } } ret = append(ret, productConfigFiles...) ret = append(ret, productConfigFiles...) ret = append(ret, soongInjectionFiles(ctx.Config(), metrics)...) injectionFiles, err := soongInjectionFiles(ctx.Config(), metrics) return ret if err != nil { return nil, err } ret = append(ret, injectionFiles...) return ret, nil } } // Get the output directory and create it if it doesn't exist. // Get the output directory and create it if it doesn't exist. Loading
bp2build/conversion.go +8 −4 Original line number Original line Diff line number Diff line Loading @@ -22,7 +22,7 @@ type BazelFile struct { } } // PRIVATE: Use CreateSoongInjectionDirFiles instead // PRIVATE: Use CreateSoongInjectionDirFiles instead func soongInjectionFiles(cfg android.Config, metrics CodegenMetrics) []BazelFile { func soongInjectionFiles(cfg android.Config, metrics CodegenMetrics) ([]BazelFile, error) { var files []BazelFile var files []BazelFile files = append(files, newFile("android", GeneratedBuildFileName, "")) // Creates a //cc_toolchain package. files = append(files, newFile("android", GeneratedBuildFileName, "")) // Creates a //cc_toolchain package. Loading @@ -36,7 +36,11 @@ func soongInjectionFiles(cfg android.Config, metrics CodegenMetrics) []BazelFile files = append(files, newFile("java_toolchain", "constants.bzl", java_config.BazelJavaToolchainVars(cfg))) files = append(files, newFile("java_toolchain", "constants.bzl", java_config.BazelJavaToolchainVars(cfg))) files = append(files, newFile("apex_toolchain", GeneratedBuildFileName, "")) // Creates a //apex_toolchain package. files = append(files, newFile("apex_toolchain", GeneratedBuildFileName, "")) // Creates a //apex_toolchain package. files = append(files, newFile("apex_toolchain", "constants.bzl", apex.BazelApexToolchainVars())) apexToolchainVars, err := apex.BazelApexToolchainVars() if err != nil { return nil, err } files = append(files, newFile("apex_toolchain", "constants.bzl", apexToolchainVars)) files = append(files, newFile("metrics", "converted_modules.txt", strings.Join(metrics.Serialize().ConvertedModules, "\n"))) files = append(files, newFile("metrics", "converted_modules.txt", strings.Join(metrics.Serialize().ConvertedModules, "\n"))) Loading @@ -52,7 +56,7 @@ func soongInjectionFiles(cfg android.Config, metrics CodegenMetrics) []BazelFile apiLevelsContent, err := json.Marshal(android.GetApiLevelsMap(cfg)) apiLevelsContent, err := json.Marshal(android.GetApiLevelsMap(cfg)) if err != nil { if err != nil { panic(err) return nil, err } } files = append(files, newFile("api_levels", GeneratedBuildFileName, `exports_files(["api_levels.json"])`)) files = append(files, newFile("api_levels", GeneratedBuildFileName, `exports_files(["api_levels.json"])`)) files = append(files, newFile("api_levels", "api_levels.json", string(apiLevelsContent))) files = append(files, newFile("api_levels", "api_levels.json", string(apiLevelsContent))) Loading @@ -64,7 +68,7 @@ func soongInjectionFiles(cfg android.Config, metrics CodegenMetrics) []BazelFile files = append(files, newFile("allowlists", "mixed_build_prod_allowlist.txt", strings.Join(android.GetBazelEnabledModules(android.BazelProdMode), "\n")+"\n")) files = append(files, newFile("allowlists", "mixed_build_prod_allowlist.txt", strings.Join(android.GetBazelEnabledModules(android.BazelProdMode), "\n")+"\n")) files = append(files, newFile("allowlists", "mixed_build_staging_allowlist.txt", strings.Join(android.GetBazelEnabledModules(android.BazelStagingMode), "\n")+"\n")) files = append(files, newFile("allowlists", "mixed_build_staging_allowlist.txt", strings.Join(android.GetBazelEnabledModules(android.BazelStagingMode), "\n")+"\n")) return files return files, nil } } func CreateBazelFiles( func CreateBazelFiles( Loading
bp2build/conversion_test.go +4 −2 Original line number Original line Diff line number Diff line Loading @@ -84,8 +84,10 @@ func TestCreateBazelFiles_QueryView_AddsTopLevelFiles(t *testing.T) { func TestCreateBazelFiles_Bp2Build_CreatesDefaultFiles(t *testing.T) { func TestCreateBazelFiles_Bp2Build_CreatesDefaultFiles(t *testing.T) { testConfig := android.TestConfig("", make(map[string]string), "", make(map[string][]byte)) testConfig := android.TestConfig("", make(map[string]string), "", make(map[string][]byte)) files := soongInjectionFiles(testConfig, CreateCodegenMetrics()) files, err := soongInjectionFiles(testConfig, CreateCodegenMetrics()) if err != nil { t.Error(err) } expectedFilePaths := []bazelFilepath{ expectedFilePaths := []bazelFilepath{ { { dir: "android", dir: "android", Loading
cmd/soong_build/main.go +2 −1 Original line number Original line Diff line number Diff line Loading @@ -178,7 +178,8 @@ func runApiBp2build(ctx *android.Context, extraNinjaDeps []string) string { ninjaDeps = append(ninjaDeps, codegenContext.AdditionalNinjaDeps()...) ninjaDeps = append(ninjaDeps, codegenContext.AdditionalNinjaDeps()...) // Create soong_injection repository // Create soong_injection repository soongInjectionFiles := bp2build.CreateSoongInjectionDirFiles(codegenContext, bp2build.CreateCodegenMetrics()) soongInjectionFiles, err := bp2build.CreateSoongInjectionDirFiles(codegenContext, bp2build.CreateCodegenMetrics()) maybeQuit(err, "") absoluteSoongInjectionDir := shared.JoinPath(topDir, ctx.Config().SoongOutDir(), bazel.SoongInjectionDirName) absoluteSoongInjectionDir := shared.JoinPath(topDir, ctx.Config().SoongOutDir(), bazel.SoongInjectionDirName) for _, file := range soongInjectionFiles { for _, file := range soongInjectionFiles { // The API targets in api_bp2build workspace do not have any dependency on api_bp2build. // The API targets in api_bp2build workspace do not have any dependency on api_bp2build. Loading