Split local/absolute include into attributes
Previously these were expanded into copts, requiring making all includes
absolute and duplicating includes to account for potentially generated
files. We now can handle both of these properly on the Bazel side, so
let's clean up build files a bit.
Test: bp2build.sh
Change-Id: I6c6160738cd6c269408c6c7a37010654d84f3c9d
diff --git a/cc/bp2build.go b/cc/bp2build.go
index fffb093..7a98fd0 100644
--- a/cc/bp2build.go
+++ b/cc/bp2build.go
@@ -216,6 +216,9 @@
srcs bazel.LabelListAttribute
rtti bazel.BoolAttribute
+
+ localIncludes bazel.StringListAttribute
+ absoluteIncludes bazel.StringListAttribute
}
// bp2BuildParseCompilerProps returns copts, srcs and hdrs and other attributes.
@@ -226,28 +229,8 @@
var conlyFlags bazel.StringListAttribute
var cppFlags bazel.StringListAttribute
var rtti bazel.BoolAttribute
-
- // Creates the -I flags for a directory, while making the directory relative
- // to the exec root for Bazel to work.
- includeFlags := func(dir string) []string {
- // filepath.Join canonicalizes the path, i.e. it takes care of . or .. elements.
- moduleDirRootedPath := filepath.Join(ctx.ModuleDir(), dir)
- return []string{
- "-I" + moduleDirRootedPath,
- // Include the bindir-rooted path (using make variable substitution). This most
- // closely matches Bazel's native include path handling, which allows for dependency
- // on generated headers in these directories.
- // TODO(b/188084383): Handle local include directories in Bazel.
- "-I$(BINDIR)/" + moduleDirRootedPath,
- }
- }
-
- // Parse the list of module-relative include directories (-I).
- parseLocalIncludeDirs := func(baseCompilerProps *BaseCompilerProperties) []string {
- // include_dirs are root-relative, not module-relative.
- includeDirs := bp2BuildMakePathsRelativeToModule(ctx, baseCompilerProps.Include_dirs)
- return append(includeDirs, baseCompilerProps.Local_include_dirs...)
- }
+ var localIncludes bazel.StringListAttribute
+ var absoluteIncludes bazel.StringListAttribute
parseCommandLineFlags := func(soongFlags []string) []string {
var result []string
@@ -285,18 +268,14 @@
archVariantCopts := parseCommandLineFlags(baseCompilerProps.Cflags)
archVariantAsflags := parseCommandLineFlags(baseCompilerProps.Asflags)
- for _, dir := range parseLocalIncludeDirs(baseCompilerProps) {
- archVariantCopts = append(archVariantCopts, includeFlags(dir)...)
- archVariantAsflags = append(archVariantAsflags, includeFlags(dir)...)
+
+ localIncludeDirs := baseCompilerProps.Local_include_dirs
+ if axis == bazel.NoConfigAxis && includeBuildDirectory(baseCompilerProps.Include_build_directory) {
+ localIncludeDirs = append(localIncludeDirs, ".")
}
- if axis == bazel.NoConfigAxis {
- if includeBuildDirectory(baseCompilerProps.Include_build_directory) {
- flags := includeFlags(".")
- archVariantCopts = append(archVariantCopts, flags...)
- archVariantAsflags = append(archVariantAsflags, flags...)
- }
- }
+ absoluteIncludes.SetSelectValue(axis, config, baseCompilerProps.Include_dirs)
+ localIncludes.SetSelectValue(axis, config, localIncludeDirs)
copts.SetSelectValue(axis, config, archVariantCopts)
asFlags.SetSelectValue(axis, config, archVariantAsflags)
@@ -308,6 +287,8 @@
}
srcs.ResolveExcludes()
+ absoluteIncludes.DeduplicateAxesFromBase()
+ localIncludes.DeduplicateAxesFromBase()
productVarPropNameToAttribute := map[string]*bazel.StringListAttribute{
"Cflags": &copts,
@@ -331,14 +312,16 @@
srcs, cSrcs, asSrcs := groupSrcsByExtension(ctx, srcs)
return compilerAttributes{
- copts: copts,
- srcs: srcs,
- asFlags: asFlags,
- asSrcs: asSrcs,
- cSrcs: cSrcs,
- conlyFlags: conlyFlags,
- cppFlags: cppFlags,
- rtti: rtti,
+ copts: copts,
+ srcs: srcs,
+ asFlags: asFlags,
+ asSrcs: asSrcs,
+ cSrcs: cSrcs,
+ conlyFlags: conlyFlags,
+ cppFlags: cppFlags,
+ rtti: rtti,
+ localIncludes: localIncludes,
+ absoluteIncludes: absoluteIncludes,
}
}
diff --git a/cc/library.go b/cc/library.go
index 28bd741..f568247 100644
--- a/cc/library.go
+++ b/cc/library.go
@@ -236,6 +236,8 @@
System_dynamic_deps bazel.LabelListAttribute
Export_includes bazel.StringListAttribute
Export_system_includes bazel.StringListAttribute
+ Local_includes bazel.StringListAttribute
+ Absolute_includes bazel.StringListAttribute
Linkopts bazel.StringListAttribute
Use_libcrt bazel.BoolAttribute
Rtti bazel.BoolAttribute
@@ -307,6 +309,8 @@
System_dynamic_deps: linkerAttrs.systemDynamicDeps,
Export_includes: exportedIncludes.Includes,
Export_system_includes: exportedIncludes.SystemIncludes,
+ Local_includes: compilerAttrs.localIncludes,
+ Absolute_includes: compilerAttrs.absoluteIncludes,
Linkopts: linkerAttrs.linkopts,
Use_libcrt: linkerAttrs.useLibcrt,
Rtti: compilerAttrs.rtti,
@@ -2333,6 +2337,8 @@
Rtti bazel.BoolAttribute
Export_includes bazel.StringListAttribute
Export_system_includes bazel.StringListAttribute
+ Local_includes bazel.StringListAttribute
+ Absolute_includes bazel.StringListAttribute
Hdrs bazel.LabelListAttribute
Cppflags bazel.StringListAttribute
@@ -2384,6 +2390,8 @@
Rtti: compilerAttrs.rtti,
Export_includes: exportedIncludes.Includes,
Export_system_includes: exportedIncludes.SystemIncludes,
+ Local_includes: compilerAttrs.localIncludes,
+ Absolute_includes: compilerAttrs.absoluteIncludes,
Cppflags: compilerAttrs.cppFlags,
Srcs_c: compilerAttrs.cSrcs,
diff --git a/cc/library_headers.go b/cc/library_headers.go
index 30a81cc..14b90c1 100644
--- a/cc/library_headers.go
+++ b/cc/library_headers.go
@@ -103,7 +103,6 @@
}
type bazelCcLibraryHeadersAttributes struct {
- Copts bazel.StringListAttribute
Hdrs bazel.LabelListAttribute
Export_includes bazel.StringListAttribute
Export_system_includes bazel.StringListAttribute
@@ -128,11 +127,9 @@
}
exportedIncludes := bp2BuildParseExportedIncludes(ctx, module)
- compilerAttrs := bp2BuildParseCompilerProps(ctx, module)
linkerAttrs := bp2BuildParseLinkerProps(ctx, module)
attrs := &bazelCcLibraryHeadersAttributes{
- Copts: compilerAttrs.copts,
Export_includes: exportedIncludes.Includes,
Export_system_includes: exportedIncludes.SystemIncludes,
Implementation_deps: linkerAttrs.deps,
diff --git a/cc/object.go b/cc/object.go
index 606e368..99b257a 100644
--- a/cc/object.go
+++ b/cc/object.go
@@ -122,12 +122,14 @@
// For bp2build conversion.
type bazelObjectAttributes struct {
- Srcs bazel.LabelListAttribute
- Srcs_as bazel.LabelListAttribute
- Hdrs bazel.LabelListAttribute
- Deps bazel.LabelListAttribute
- Copts bazel.StringListAttribute
- Asflags bazel.StringListAttribute
+ Srcs bazel.LabelListAttribute
+ Srcs_as bazel.LabelListAttribute
+ Hdrs bazel.LabelListAttribute
+ Deps bazel.LabelListAttribute
+ Copts bazel.StringListAttribute
+ Asflags bazel.StringListAttribute
+ Local_includes bazel.StringListAttribute
+ Absolute_includes bazel.StringListAttribute
}
// ObjectBp2Build is the bp2build converter from cc_object modules to the
@@ -170,11 +172,13 @@
}
attrs := &bazelObjectAttributes{
- Srcs: srcs,
- Srcs_as: compilerAttrs.asSrcs,
- Deps: deps,
- Copts: compilerAttrs.copts,
- Asflags: asFlags,
+ Srcs: srcs,
+ Srcs_as: compilerAttrs.asSrcs,
+ Deps: deps,
+ Copts: compilerAttrs.copts,
+ Asflags: asFlags,
+ Local_includes: compilerAttrs.localIncludes,
+ Absolute_includes: compilerAttrs.absoluteIncludes,
}
props := bazel.BazelTargetModuleProperties{