Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit aafdf54f authored by Cole Faust's avatar Cole Faust Committed by Gerrit Code Review
Browse files

Merge "Export apex_available_baseline to soong_injection"

parents bc6dc9f5 9e384e2e
Loading
Loading
Loading
Loading
+8 −2
Original line number Original line Diff line number Diff line
@@ -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
}
}
+14 −7
Original line number Original line Diff line number Diff line
@@ -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
}
}
@@ -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.
+8 −4
Original line number Original line Diff line number Diff line
@@ -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.
@@ -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")))


@@ -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)))
@@ -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(
+4 −2
Original line number Original line Diff line number Diff line
@@ -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",
+2 −1
Original line number Original line Diff line number Diff line
@@ -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.