Add support for per-target exported includes. am: 375451edfe

Original change: https://android-review.googlesource.com/c/platform/build/soong/+/1686625

Change-Id: Ib1f14dba560f71314863a3a2a4fa148f4e952580
This commit is contained in:
Rupert Shuttleworth
2021-04-26 13:28:58 +00:00
committed by Automerger Merge Worker
2 changed files with 88 additions and 0 deletions

View File

@@ -269,6 +269,63 @@ cc_library_headers {
],
"//conditions:default": [],
}),
)`},
},
{
description: "cc_library_headers test with arch-specific and target-specific export_system_include_dirs props",
moduleTypeUnderTest: "cc_library_headers",
moduleTypeUnderTestFactory: cc.LibraryHeaderFactory,
moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryHeadersBp2Build,
depsMutators: []android.RegisterMutatorFunc{cc.RegisterDepsBp2Build},
filesystem: map[string]string{},
bp: soongCcLibraryPreamble + `cc_library_headers {
name: "foo_headers",
export_system_include_dirs: [
"shared_include_dir",
],
target: {
android: {
export_system_include_dirs: [
"android_include_dir",
],
},
linux_glibc: {
export_system_include_dirs: [
"linux_include_dir",
],
},
darwin: {
export_system_include_dirs: [
"darwin_include_dir",
],
},
},
arch: {
arm: {
export_system_include_dirs: [
"arm_include_dir",
],
},
x86_64: {
export_system_include_dirs: [
"x86_64_include_dir",
],
},
},
}`,
expectedBazelTargets: []string{`cc_library_headers(
name = "foo_headers",
copts = ["-I."],
includes = ["shared_include_dir"] + select({
"//build/bazel/platforms/arch:arm": ["arm_include_dir"],
"//build/bazel/platforms/arch:x86_64": ["x86_64_include_dir"],
"//conditions:default": [],
}) + select({
"//build/bazel/platforms/os:android": ["android_include_dir"],
"//build/bazel/platforms/os:darwin": ["darwin_include_dir"],
"//build/bazel/platforms/os:linux": ["linux_include_dir"],
"//conditions:default": [],
}),
)`},
},
}

View File

@@ -262,6 +262,7 @@ func bp2BuildParseExportedIncludes(ctx android.TopDownMutatorContext, module *Mo
archIncludeDirs = append(archIncludeDirs, flagExporterProperties.Export_include_dirs...)
// To avoid duplicate includes when base includes + arch includes are combined
// FIXME: This doesn't take conflicts between arch and os includes into account
archIncludeDirs = bazel.SubtractStrings(archIncludeDirs, includeDirs)
if len(archIncludeDirs) > 0 {
@@ -275,6 +276,7 @@ func bp2BuildParseExportedIncludes(ctx android.TopDownMutatorContext, module *Mo
archHeaders = bazel.UniqueBazelLabelList(archHeaders)
// To avoid duplicate headers when base headers + arch headers are combined
// FIXME: This doesn't take conflicts between arch and os includes into account
archHeaders = bazel.SubtractBazelLabelList(archHeaders, headers)
if len(archHeaders.Includes) > 0 || len(archHeaders.Excludes) > 0 {
@@ -283,5 +285,34 @@ func bp2BuildParseExportedIncludes(ctx android.TopDownMutatorContext, module *Mo
}
}
for os, props := range module.GetTargetProperties(&FlagExporterProperties{}) {
if flagExporterProperties, ok := props.(*FlagExporterProperties); ok {
osIncludeDirs := flagExporterProperties.Export_system_include_dirs
osIncludeDirs = append(osIncludeDirs, flagExporterProperties.Export_include_dirs...)
// To avoid duplicate includes when base includes + os includes are combined
// FIXME: This doesn't take conflicts between arch and os includes into account
osIncludeDirs = bazel.SubtractStrings(osIncludeDirs, includeDirs)
if len(osIncludeDirs) > 0 {
includeDirsAttribute.SetValueForOS(os.Name, osIncludeDirs)
}
var osHeaders bazel.LabelList
for _, osIncludeDir := range osIncludeDirs {
osHeaders.Append(bp2BuildListHeadersInDir(ctx, osIncludeDir))
}
osHeaders = bazel.UniqueBazelLabelList(osHeaders)
// To avoid duplicate headers when base headers + os headers are combined
// FIXME: This doesn't take conflicts between arch and os includes into account
osHeaders = bazel.SubtractBazelLabelList(osHeaders, headers)
if len(osHeaders.Includes) > 0 || len(osHeaders.Excludes) > 0 {
headersAttribute.SetValueForOS(os.Name, osHeaders)
}
}
}
return includeDirsAttribute, headersAttribute
}