Add support for per-target exported includes.
Test: Added unit test Change-Id: I8ab58ddc73c15d5ec0f515e43407542bd4e8081a
This commit is contained in:
@@ -269,6 +269,63 @@ cc_library_headers {
|
|||||||
],
|
],
|
||||||
"//conditions:default": [],
|
"//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": [],
|
||||||
|
}),
|
||||||
)`},
|
)`},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
@@ -262,6 +262,7 @@ func bp2BuildParseExportedIncludes(ctx android.TopDownMutatorContext, module *Mo
|
|||||||
archIncludeDirs = append(archIncludeDirs, flagExporterProperties.Export_include_dirs...)
|
archIncludeDirs = append(archIncludeDirs, flagExporterProperties.Export_include_dirs...)
|
||||||
|
|
||||||
// To avoid duplicate includes when base includes + arch includes are combined
|
// 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)
|
archIncludeDirs = bazel.SubtractStrings(archIncludeDirs, includeDirs)
|
||||||
|
|
||||||
if len(archIncludeDirs) > 0 {
|
if len(archIncludeDirs) > 0 {
|
||||||
@@ -275,6 +276,7 @@ func bp2BuildParseExportedIncludes(ctx android.TopDownMutatorContext, module *Mo
|
|||||||
archHeaders = bazel.UniqueBazelLabelList(archHeaders)
|
archHeaders = bazel.UniqueBazelLabelList(archHeaders)
|
||||||
|
|
||||||
// To avoid duplicate headers when base headers + arch headers are combined
|
// 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)
|
archHeaders = bazel.SubtractBazelLabelList(archHeaders, headers)
|
||||||
|
|
||||||
if len(archHeaders.Includes) > 0 || len(archHeaders.Excludes) > 0 {
|
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
|
return includeDirsAttribute, headersAttribute
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user