bp2build: export some cc toolchain flags into Starlark.
This CL exports common/global/device/host clang/ld/ldd flags
from their Ninja variable initialization locations in
cc/config/global.go and cc/config/clang.go to make Bazel's cc_toolchain
and Soong's cc actions more consistent with each other.
This does not handle env-dependent or arch-specific toolchain flags
yet (logic in compiler.go and linker.go).
Test: TH
Bug: 187086342
Bug: 187084737
Bug: 186628704
Bug: 187857770
Change-Id: Ie403d7cd23f35160897b9dd902c799cbf1bd7f0c
diff --git a/bp2build/bp2build.go b/bp2build/bp2build.go
index cf6994f..59c5acd 100644
--- a/bp2build/bp2build.go
+++ b/bp2build/bp2build.go
@@ -24,22 +24,16 @@
// writing .bzl files that are equivalent to Android.bp files that are capable
// of being built with Bazel.
func Codegen(ctx *CodegenContext) CodegenMetrics {
- outputDir := android.PathForOutput(ctx, "bp2build")
- android.RemoveAllOutputDir(outputDir)
+ // This directory stores BUILD files that could be eventually checked-in.
+ bp2buildDir := android.PathForOutput(ctx, "bp2build")
+ android.RemoveAllOutputDir(bp2buildDir)
buildToTargets, metrics := GenerateBazelTargets(ctx, true)
+ bp2buildFiles := CreateBazelFiles(nil, buildToTargets, ctx.mode)
+ writeFiles(ctx, bp2buildDir, bp2buildFiles)
- filesToWrite := CreateBazelFiles(nil, buildToTargets, ctx.mode)
-
- generatedBuildFiles := []string{}
- for _, f := range filesToWrite {
- p := getOrCreateOutputDir(outputDir, ctx, f.Dir).Join(ctx, f.Basename)
- if err := writeFile(ctx, p, f.Contents); err != nil {
- panic(fmt.Errorf("Failed to write %q (dir %q) due to %q", f.Basename, f.Dir, err))
- }
- // if these generated files are modified, regenerate on next run.
- generatedBuildFiles = append(generatedBuildFiles, p.String())
- }
+ soongInjectionDir := android.PathForOutput(ctx, "soong_injection")
+ writeFiles(ctx, soongInjectionDir, CreateSoongInjectionFiles())
return metrics
}
@@ -51,6 +45,16 @@
return dirPath
}
+// writeFiles materializes a list of BazelFile rooted at outputDir.
+func writeFiles(ctx android.PathContext, outputDir android.OutputPath, files []BazelFile) {
+ for _, f := range files {
+ p := getOrCreateOutputDir(outputDir, ctx, f.Dir).Join(ctx, f.Basename)
+ if err := writeFile(ctx, p, f.Contents); err != nil {
+ panic(fmt.Errorf("Failed to write %q (dir %q) due to %q", f.Basename, f.Dir, err))
+ }
+ }
+}
+
func writeFile(ctx android.PathContext, pathToFile android.OutputPath, content string) error {
// These files are made editable to allow users to modify and iterate on them
// in the source tree.