Enable bp2build for cc modules relying on sysprop
Bug: 244439349 Test: m bp2build Test: Inspect BUILD.bazel files Test: Unit tests Change-Id: I85bfb9fa69cb3f96b15bdbeb797dba86b3349804
This commit is contained in:
@@ -676,3 +676,77 @@ func TestCcArchVariantBinarySuffix(t *testing.T) {
|
|||||||
},
|
},
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestCcBinaryWithSyspropSrcs(t *testing.T) {
|
||||||
|
runCcBinaryTestCase(t, ccBinaryBp2buildTestCase{
|
||||||
|
description: "cc_binary with sysprop sources",
|
||||||
|
blueprint: `
|
||||||
|
{rule_name} {
|
||||||
|
name: "foo",
|
||||||
|
srcs: [
|
||||||
|
"bar.sysprop",
|
||||||
|
"baz.sysprop",
|
||||||
|
"blah.cpp",
|
||||||
|
],
|
||||||
|
min_sdk_version: "5",
|
||||||
|
}`,
|
||||||
|
targets: []testBazelTarget{
|
||||||
|
{"sysprop_library", "foo_sysprop_library", AttrNameToString{
|
||||||
|
"srcs": `[
|
||||||
|
"bar.sysprop",
|
||||||
|
"baz.sysprop",
|
||||||
|
]`,
|
||||||
|
}},
|
||||||
|
{"cc_sysprop_library_static", "foo_cc_sysprop_library_static", AttrNameToString{
|
||||||
|
"dep": `":foo_sysprop_library"`,
|
||||||
|
"min_sdk_version": `"5"`,
|
||||||
|
}},
|
||||||
|
{"cc_binary", "foo", AttrNameToString{
|
||||||
|
"srcs": `["blah.cpp"]`,
|
||||||
|
"local_includes": `["."]`,
|
||||||
|
"min_sdk_version": `"5"`,
|
||||||
|
"whole_archive_deps": `[":foo_cc_sysprop_library_static"]`,
|
||||||
|
}},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestCcBinaryWithSyspropSrcsSomeConfigs(t *testing.T) {
|
||||||
|
runCcBinaryTestCase(t, ccBinaryBp2buildTestCase{
|
||||||
|
description: "cc_binary with sysprop sources in some configs but not others",
|
||||||
|
blueprint: `
|
||||||
|
{rule_name} {
|
||||||
|
name: "foo",
|
||||||
|
srcs: [
|
||||||
|
"blah.cpp",
|
||||||
|
],
|
||||||
|
target: {
|
||||||
|
android: {
|
||||||
|
srcs: ["bar.sysprop"],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
min_sdk_version: "5",
|
||||||
|
}`,
|
||||||
|
targets: []testBazelTarget{
|
||||||
|
{"sysprop_library", "foo_sysprop_library", AttrNameToString{
|
||||||
|
"srcs": `select({
|
||||||
|
"//build/bazel/platforms/os:android": ["bar.sysprop"],
|
||||||
|
"//conditions:default": [],
|
||||||
|
})`,
|
||||||
|
}},
|
||||||
|
{"cc_sysprop_library_static", "foo_cc_sysprop_library_static", AttrNameToString{
|
||||||
|
"dep": `":foo_sysprop_library"`,
|
||||||
|
"min_sdk_version": `"5"`,
|
||||||
|
}},
|
||||||
|
{"cc_binary", "foo", AttrNameToString{
|
||||||
|
"srcs": `["blah.cpp"]`,
|
||||||
|
"local_includes": `["."]`,
|
||||||
|
"min_sdk_version": `"5"`,
|
||||||
|
"whole_archive_deps": `select({
|
||||||
|
"//build/bazel/platforms/os:android": [":foo_cc_sysprop_library_static"],
|
||||||
|
"//conditions:default": [],
|
||||||
|
})`,
|
||||||
|
}},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
@@ -3132,3 +3132,97 @@ cc_library_static {
|
|||||||
},
|
},
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestCcLibraryWithSyspropSrcs(t *testing.T) {
|
||||||
|
runCcLibraryTestCase(t, Bp2buildTestCase{
|
||||||
|
Description: "cc_library with sysprop sources",
|
||||||
|
ModuleTypeUnderTest: "cc_library",
|
||||||
|
ModuleTypeUnderTestFactory: cc.LibraryFactory,
|
||||||
|
Blueprint: `
|
||||||
|
cc_library {
|
||||||
|
name: "foo",
|
||||||
|
srcs: [
|
||||||
|
"bar.sysprop",
|
||||||
|
"baz.sysprop",
|
||||||
|
"blah.cpp",
|
||||||
|
],
|
||||||
|
min_sdk_version: "5",
|
||||||
|
}`,
|
||||||
|
ExpectedBazelTargets: []string{
|
||||||
|
MakeBazelTarget("sysprop_library", "foo_sysprop_library", AttrNameToString{
|
||||||
|
"srcs": `[
|
||||||
|
"bar.sysprop",
|
||||||
|
"baz.sysprop",
|
||||||
|
]`,
|
||||||
|
}),
|
||||||
|
MakeBazelTarget("cc_sysprop_library_static", "foo_cc_sysprop_library_static", AttrNameToString{
|
||||||
|
"dep": `":foo_sysprop_library"`,
|
||||||
|
"min_sdk_version": `"5"`,
|
||||||
|
}),
|
||||||
|
MakeBazelTarget("cc_library_static", "foo_bp2build_cc_library_static", AttrNameToString{
|
||||||
|
"srcs": `["blah.cpp"]`,
|
||||||
|
"local_includes": `["."]`,
|
||||||
|
"min_sdk_version": `"5"`,
|
||||||
|
"whole_archive_deps": `[":foo_cc_sysprop_library_static"]`,
|
||||||
|
}),
|
||||||
|
MakeBazelTarget("cc_library_shared", "foo", AttrNameToString{
|
||||||
|
"srcs": `["blah.cpp"]`,
|
||||||
|
"local_includes": `["."]`,
|
||||||
|
"min_sdk_version": `"5"`,
|
||||||
|
"whole_archive_deps": `[":foo_cc_sysprop_library_static"]`,
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestCcLibraryWithSyspropSrcsSomeConfigs(t *testing.T) {
|
||||||
|
runCcLibraryTestCase(t, Bp2buildTestCase{
|
||||||
|
Description: "cc_library with sysprop sources in some configs but not others",
|
||||||
|
ModuleTypeUnderTest: "cc_library",
|
||||||
|
ModuleTypeUnderTestFactory: cc.LibraryFactory,
|
||||||
|
Blueprint: `
|
||||||
|
cc_library {
|
||||||
|
name: "foo",
|
||||||
|
host_supported: true,
|
||||||
|
srcs: [
|
||||||
|
"blah.cpp",
|
||||||
|
],
|
||||||
|
target: {
|
||||||
|
android: {
|
||||||
|
srcs: ["bar.sysprop"],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
min_sdk_version: "5",
|
||||||
|
}`,
|
||||||
|
ExpectedBazelTargets: []string{
|
||||||
|
MakeBazelTargetNoRestrictions("sysprop_library", "foo_sysprop_library", AttrNameToString{
|
||||||
|
"srcs": `select({
|
||||||
|
"//build/bazel/platforms/os:android": ["bar.sysprop"],
|
||||||
|
"//conditions:default": [],
|
||||||
|
})`,
|
||||||
|
}),
|
||||||
|
MakeBazelTargetNoRestrictions("cc_sysprop_library_static", "foo_cc_sysprop_library_static", AttrNameToString{
|
||||||
|
"dep": `":foo_sysprop_library"`,
|
||||||
|
"min_sdk_version": `"5"`,
|
||||||
|
}),
|
||||||
|
MakeBazelTargetNoRestrictions("cc_library_static", "foo_bp2build_cc_library_static", AttrNameToString{
|
||||||
|
"srcs": `["blah.cpp"]`,
|
||||||
|
"local_includes": `["."]`,
|
||||||
|
"min_sdk_version": `"5"`,
|
||||||
|
"whole_archive_deps": `select({
|
||||||
|
"//build/bazel/platforms/os:android": [":foo_cc_sysprop_library_static"],
|
||||||
|
"//conditions:default": [],
|
||||||
|
})`,
|
||||||
|
}),
|
||||||
|
MakeBazelTargetNoRestrictions("cc_library_shared", "foo", AttrNameToString{
|
||||||
|
"srcs": `["blah.cpp"]`,
|
||||||
|
"local_includes": `["."]`,
|
||||||
|
"min_sdk_version": `"5"`,
|
||||||
|
"whole_archive_deps": `select({
|
||||||
|
"//build/bazel/platforms/os:android": [":foo_cc_sysprop_library_static"],
|
||||||
|
"//conditions:default": [],
|
||||||
|
})`,
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
@@ -718,3 +718,77 @@ cc_library_shared {
|
|||||||
},
|
},
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestCcLibrarySharedWithSyspropSrcs(t *testing.T) {
|
||||||
|
runCcLibrarySharedTestCase(t, Bp2buildTestCase{
|
||||||
|
Description: "cc_library_shared with sysprop sources",
|
||||||
|
Blueprint: `
|
||||||
|
cc_library_shared {
|
||||||
|
name: "foo",
|
||||||
|
srcs: [
|
||||||
|
"bar.sysprop",
|
||||||
|
"baz.sysprop",
|
||||||
|
"blah.cpp",
|
||||||
|
],
|
||||||
|
min_sdk_version: "5",
|
||||||
|
}`,
|
||||||
|
ExpectedBazelTargets: []string{
|
||||||
|
MakeBazelTarget("sysprop_library", "foo_sysprop_library", AttrNameToString{
|
||||||
|
"srcs": `[
|
||||||
|
"bar.sysprop",
|
||||||
|
"baz.sysprop",
|
||||||
|
]`,
|
||||||
|
}),
|
||||||
|
MakeBazelTarget("cc_sysprop_library_static", "foo_cc_sysprop_library_static", AttrNameToString{
|
||||||
|
"dep": `":foo_sysprop_library"`,
|
||||||
|
"min_sdk_version": `"5"`,
|
||||||
|
}),
|
||||||
|
MakeBazelTarget("cc_library_shared", "foo", AttrNameToString{
|
||||||
|
"srcs": `["blah.cpp"]`,
|
||||||
|
"local_includes": `["."]`,
|
||||||
|
"min_sdk_version": `"5"`,
|
||||||
|
"whole_archive_deps": `[":foo_cc_sysprop_library_static"]`,
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestCcLibrarySharedWithSyspropSrcsSomeConfigs(t *testing.T) {
|
||||||
|
runCcLibrarySharedTestCase(t, Bp2buildTestCase{
|
||||||
|
Description: "cc_library_shared with sysprop sources in some configs but not others",
|
||||||
|
Blueprint: `
|
||||||
|
cc_library_shared {
|
||||||
|
name: "foo",
|
||||||
|
srcs: [
|
||||||
|
"blah.cpp",
|
||||||
|
],
|
||||||
|
target: {
|
||||||
|
android: {
|
||||||
|
srcs: ["bar.sysprop"],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
min_sdk_version: "5",
|
||||||
|
}`,
|
||||||
|
ExpectedBazelTargets: []string{
|
||||||
|
MakeBazelTarget("sysprop_library", "foo_sysprop_library", AttrNameToString{
|
||||||
|
"srcs": `select({
|
||||||
|
"//build/bazel/platforms/os:android": ["bar.sysprop"],
|
||||||
|
"//conditions:default": [],
|
||||||
|
})`,
|
||||||
|
}),
|
||||||
|
MakeBazelTarget("cc_sysprop_library_static", "foo_cc_sysprop_library_static", AttrNameToString{
|
||||||
|
"dep": `":foo_sysprop_library"`,
|
||||||
|
"min_sdk_version": `"5"`,
|
||||||
|
}),
|
||||||
|
MakeBazelTarget("cc_library_shared", "foo", AttrNameToString{
|
||||||
|
"srcs": `["blah.cpp"]`,
|
||||||
|
"local_includes": `["."]`,
|
||||||
|
"min_sdk_version": `"5"`,
|
||||||
|
"whole_archive_deps": `select({
|
||||||
|
"//build/bazel/platforms/os:android": [":foo_cc_sysprop_library_static"],
|
||||||
|
"//conditions:default": [],
|
||||||
|
})`,
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
@@ -1629,3 +1629,77 @@ cc_library_static {
|
|||||||
},
|
},
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestCcLibraryStaticWithSyspropSrcs(t *testing.T) {
|
||||||
|
runCcLibraryTestCase(t, Bp2buildTestCase{
|
||||||
|
Description: "cc_library_static with sysprop sources",
|
||||||
|
Blueprint: `
|
||||||
|
cc_library_static {
|
||||||
|
name: "foo",
|
||||||
|
srcs: [
|
||||||
|
"bar.sysprop",
|
||||||
|
"baz.sysprop",
|
||||||
|
"blah.cpp",
|
||||||
|
],
|
||||||
|
min_sdk_version: "5",
|
||||||
|
}`,
|
||||||
|
ExpectedBazelTargets: []string{
|
||||||
|
MakeBazelTarget("sysprop_library", "foo_sysprop_library", AttrNameToString{
|
||||||
|
"srcs": `[
|
||||||
|
"bar.sysprop",
|
||||||
|
"baz.sysprop",
|
||||||
|
]`,
|
||||||
|
}),
|
||||||
|
MakeBazelTarget("cc_sysprop_library_static", "foo_cc_sysprop_library_static", AttrNameToString{
|
||||||
|
"dep": `":foo_sysprop_library"`,
|
||||||
|
"min_sdk_version": `"5"`,
|
||||||
|
}),
|
||||||
|
MakeBazelTarget("cc_library_static", "foo", AttrNameToString{
|
||||||
|
"srcs": `["blah.cpp"]`,
|
||||||
|
"local_includes": `["."]`,
|
||||||
|
"min_sdk_version": `"5"`,
|
||||||
|
"whole_archive_deps": `[":foo_cc_sysprop_library_static"]`,
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestCcLibraryStaticWithSyspropSrcsSomeConfigs(t *testing.T) {
|
||||||
|
runCcLibraryTestCase(t, Bp2buildTestCase{
|
||||||
|
Description: "cc_library_static with sysprop sources in some configs but not others",
|
||||||
|
Blueprint: `
|
||||||
|
cc_library_static {
|
||||||
|
name: "foo",
|
||||||
|
srcs: [
|
||||||
|
"blah.cpp",
|
||||||
|
],
|
||||||
|
target: {
|
||||||
|
android: {
|
||||||
|
srcs: ["bar.sysprop"],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
min_sdk_version: "5",
|
||||||
|
}`,
|
||||||
|
ExpectedBazelTargets: []string{
|
||||||
|
MakeBazelTarget("sysprop_library", "foo_sysprop_library", AttrNameToString{
|
||||||
|
"srcs": `select({
|
||||||
|
"//build/bazel/platforms/os:android": ["bar.sysprop"],
|
||||||
|
"//conditions:default": [],
|
||||||
|
})`,
|
||||||
|
}),
|
||||||
|
MakeBazelTarget("cc_sysprop_library_static", "foo_cc_sysprop_library_static", AttrNameToString{
|
||||||
|
"dep": `":foo_sysprop_library"`,
|
||||||
|
"min_sdk_version": `"5"`,
|
||||||
|
}),
|
||||||
|
MakeBazelTarget("cc_library_static", "foo", AttrNameToString{
|
||||||
|
"srcs": `["blah.cpp"]`,
|
||||||
|
"local_includes": `["."]`,
|
||||||
|
"min_sdk_version": `"5"`,
|
||||||
|
"whole_archive_deps": `select({
|
||||||
|
"//build/bazel/platforms/os:android": [":foo_cc_sysprop_library_static"],
|
||||||
|
"//conditions:default": [],
|
||||||
|
})`,
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
@@ -45,6 +45,7 @@ bootstrap_go_package {
|
|||||||
"snapshot_utils.go",
|
"snapshot_utils.go",
|
||||||
"stl.go",
|
"stl.go",
|
||||||
"strip.go",
|
"strip.go",
|
||||||
|
"sysprop.go",
|
||||||
"tidy.go",
|
"tidy.go",
|
||||||
"util.go",
|
"util.go",
|
||||||
"vendor_snapshot.go",
|
"vendor_snapshot.go",
|
||||||
|
@@ -36,6 +36,7 @@ const (
|
|||||||
cppSrcPartition = "cpp"
|
cppSrcPartition = "cpp"
|
||||||
protoSrcPartition = "proto"
|
protoSrcPartition = "proto"
|
||||||
aidlSrcPartition = "aidl"
|
aidlSrcPartition = "aidl"
|
||||||
|
syspropSrcPartition = "sysprop"
|
||||||
|
|
||||||
stubsSuffix = "_stub_libs_current"
|
stubsSuffix = "_stub_libs_current"
|
||||||
)
|
)
|
||||||
@@ -105,6 +106,7 @@ func groupSrcsByExtension(ctx android.BazelConversionPathContext, srcs bazel.Lab
|
|||||||
// C++ is the "catch-all" group, and comprises generated sources because we don't
|
// C++ is the "catch-all" group, and comprises generated sources because we don't
|
||||||
// know the language of these sources until the genrule is executed.
|
// know the language of these sources until the genrule is executed.
|
||||||
cppSrcPartition: bazel.LabelPartition{Extensions: []string{".cpp", ".cc", ".cxx", ".mm"}, LabelMapper: addSuffixForFilegroup("_cpp_srcs"), Keep_remainder: true},
|
cppSrcPartition: bazel.LabelPartition{Extensions: []string{".cpp", ".cc", ".cxx", ".mm"}, LabelMapper: addSuffixForFilegroup("_cpp_srcs"), Keep_remainder: true},
|
||||||
|
syspropSrcPartition: bazel.LabelPartition{Extensions: []string{".sysprop"}},
|
||||||
}
|
}
|
||||||
|
|
||||||
return bazel.PartitionLabelListAttribute(ctx, &srcs, labels)
|
return bazel.PartitionLabelListAttribute(ctx, &srcs, labels)
|
||||||
@@ -320,6 +322,9 @@ type compilerAttributes struct {
|
|||||||
llSrcs bazel.LabelListAttribute
|
llSrcs bazel.LabelListAttribute
|
||||||
lexopts bazel.StringListAttribute
|
lexopts bazel.StringListAttribute
|
||||||
|
|
||||||
|
// Sysprop sources
|
||||||
|
syspropSrcs bazel.LabelListAttribute
|
||||||
|
|
||||||
hdrs bazel.LabelListAttribute
|
hdrs bazel.LabelListAttribute
|
||||||
|
|
||||||
rtti bazel.BoolAttribute
|
rtti bazel.BoolAttribute
|
||||||
@@ -482,6 +487,7 @@ func (ca *compilerAttributes) finalize(ctx android.BazelConversionPathContext, i
|
|||||||
ca.asmSrcs = partitionedSrcs[asmSrcPartition]
|
ca.asmSrcs = partitionedSrcs[asmSrcPartition]
|
||||||
ca.lSrcs = partitionedSrcs[lSrcPartition]
|
ca.lSrcs = partitionedSrcs[lSrcPartition]
|
||||||
ca.llSrcs = partitionedSrcs[llSrcPartition]
|
ca.llSrcs = partitionedSrcs[llSrcPartition]
|
||||||
|
ca.syspropSrcs = partitionedSrcs[syspropSrcPartition]
|
||||||
|
|
||||||
ca.absoluteIncludes.DeduplicateAxesFromBase()
|
ca.absoluteIncludes.DeduplicateAxesFromBase()
|
||||||
ca.localIncludes.DeduplicateAxesFromBase()
|
ca.localIncludes.DeduplicateAxesFromBase()
|
||||||
@@ -734,6 +740,10 @@ func bp2BuildParseBaseProps(ctx android.Bp2buildMutatorContext, module *Module)
|
|||||||
(&compilerAttrs).srcs.Add(&convertedLSrcs.srcName)
|
(&compilerAttrs).srcs.Add(&convertedLSrcs.srcName)
|
||||||
(&compilerAttrs).cSrcs.Add(&convertedLSrcs.cSrcName)
|
(&compilerAttrs).cSrcs.Add(&convertedLSrcs.cSrcName)
|
||||||
|
|
||||||
|
if !compilerAttrs.syspropSrcs.IsEmpty() {
|
||||||
|
(&linkerAttrs).wholeArchiveDeps.Add(bp2buildCcSysprop(ctx, module.Name(), module.Properties.Min_sdk_version, compilerAttrs.syspropSrcs))
|
||||||
|
}
|
||||||
|
|
||||||
features := compilerAttrs.features.Clone().Append(linkerAttrs.features)
|
features := compilerAttrs.features.Clone().Append(linkerAttrs.features)
|
||||||
features.DeduplicateAxesFromBase()
|
features.DeduplicateAxesFromBase()
|
||||||
|
|
||||||
@@ -1208,10 +1218,14 @@ func bp2BuildParseExportedIncludes(ctx android.BazelConversionPathContext, modul
|
|||||||
return exported
|
return exported
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func BazelLabelNameForStaticModule(baseLabel string) string {
|
||||||
|
return baseLabel + "_bp2build_cc_library_static"
|
||||||
|
}
|
||||||
|
|
||||||
func bazelLabelForStaticModule(ctx android.BazelConversionPathContext, m blueprint.Module) string {
|
func bazelLabelForStaticModule(ctx android.BazelConversionPathContext, m blueprint.Module) string {
|
||||||
label := android.BazelModuleLabel(ctx, m)
|
label := android.BazelModuleLabel(ctx, m)
|
||||||
if ccModule, ok := m.(*Module); ok && ccModule.typ() == fullLibrary && !android.GetBp2BuildAllowList().GenerateCcLibraryStaticOnly(m.Name()) {
|
if ccModule, ok := m.(*Module); ok && ccModule.typ() == fullLibrary && !android.GetBp2BuildAllowList().GenerateCcLibraryStaticOnly(m.Name()) {
|
||||||
label += "_bp2build_cc_library_static"
|
return BazelLabelNameForStaticModule(label)
|
||||||
}
|
}
|
||||||
return label
|
return label
|
||||||
}
|
}
|
||||||
|
28
cc/gen.go
28
cc/gen.go
@@ -229,6 +229,34 @@ func genSysprop(ctx android.ModuleContext, syspropFile android.Path) (android.Pa
|
|||||||
return cppFile, headers.Paths()
|
return cppFile, headers.Paths()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func bp2buildCcSysprop(ctx android.Bp2buildMutatorContext, moduleName string, minSdkVersion *string, srcs bazel.LabelListAttribute) *bazel.LabelAttribute {
|
||||||
|
labels := SyspropLibraryLabels{
|
||||||
|
SyspropLibraryLabel: moduleName + "_sysprop_library",
|
||||||
|
StaticLibraryLabel: moduleName + "_cc_sysprop_library_static",
|
||||||
|
}
|
||||||
|
Bp2buildSysprop(ctx, labels, srcs, minSdkVersion)
|
||||||
|
return createLabelAttributeCorrespondingToSrcs(":"+labels.StaticLibraryLabel, srcs)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Creates a LabelAttribute for a given label where the value is only set for
|
||||||
|
// the same config values that have values in a given LabelListAttribute
|
||||||
|
func createLabelAttributeCorrespondingToSrcs(baseLabelName string, srcs bazel.LabelListAttribute) *bazel.LabelAttribute {
|
||||||
|
baseLabel := bazel.Label{Label: baseLabelName}
|
||||||
|
label := bazel.LabelAttribute{}
|
||||||
|
if !srcs.Value.IsNil() && !srcs.Value.IsEmpty() {
|
||||||
|
label.Value = &baseLabel
|
||||||
|
return &label
|
||||||
|
}
|
||||||
|
for axis, configToSrcs := range srcs.ConfigurableValues {
|
||||||
|
for config, val := range configToSrcs {
|
||||||
|
if !val.IsNil() && !val.IsEmpty() {
|
||||||
|
label.SetSelectValue(axis, config, baseLabel)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return &label
|
||||||
|
}
|
||||||
|
|
||||||
// Used to communicate information from the genSources method back to the library code that uses
|
// Used to communicate information from the genSources method back to the library code that uses
|
||||||
// it.
|
// it.
|
||||||
type generatedSourceInfo struct {
|
type generatedSourceInfo struct {
|
||||||
|
71
cc/sysprop.go
Normal file
71
cc/sysprop.go
Normal file
@@ -0,0 +1,71 @@
|
|||||||
|
// Copyright (C) 2019 The Android Open Source Project
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
package cc
|
||||||
|
|
||||||
|
import (
|
||||||
|
"android/soong/android"
|
||||||
|
"android/soong/bazel"
|
||||||
|
)
|
||||||
|
|
||||||
|
// TODO(b/240463568): Additional properties will be added for API validation
|
||||||
|
type bazelSyspropLibraryAttributes struct {
|
||||||
|
Srcs bazel.LabelListAttribute
|
||||||
|
}
|
||||||
|
|
||||||
|
type bazelCcSyspropLibraryAttributes struct {
|
||||||
|
Dep bazel.LabelAttribute
|
||||||
|
Min_sdk_version *string
|
||||||
|
}
|
||||||
|
|
||||||
|
type SyspropLibraryLabels struct {
|
||||||
|
SyspropLibraryLabel string
|
||||||
|
SharedLibraryLabel string
|
||||||
|
StaticLibraryLabel string
|
||||||
|
}
|
||||||
|
|
||||||
|
func Bp2buildSysprop(ctx android.Bp2buildMutatorContext, labels SyspropLibraryLabels, srcs bazel.LabelListAttribute, minSdkVersion *string) {
|
||||||
|
ctx.CreateBazelTargetModule(
|
||||||
|
bazel.BazelTargetModuleProperties{
|
||||||
|
Rule_class: "sysprop_library",
|
||||||
|
Bzl_load_location: "//build/bazel/rules/sysprop:sysprop_library.bzl",
|
||||||
|
},
|
||||||
|
android.CommonAttributes{Name: labels.SyspropLibraryLabel},
|
||||||
|
&bazelSyspropLibraryAttributes{
|
||||||
|
Srcs: srcs,
|
||||||
|
})
|
||||||
|
|
||||||
|
attrs := &bazelCcSyspropLibraryAttributes{
|
||||||
|
Dep: *bazel.MakeLabelAttribute(":" + labels.SyspropLibraryLabel),
|
||||||
|
Min_sdk_version: minSdkVersion,
|
||||||
|
}
|
||||||
|
|
||||||
|
if labels.SharedLibraryLabel != "" {
|
||||||
|
ctx.CreateBazelTargetModule(
|
||||||
|
bazel.BazelTargetModuleProperties{
|
||||||
|
Rule_class: "cc_sysprop_library_shared",
|
||||||
|
Bzl_load_location: "//build/bazel/rules/cc:cc_sysprop_library.bzl",
|
||||||
|
},
|
||||||
|
android.CommonAttributes{Name: labels.SharedLibraryLabel},
|
||||||
|
attrs)
|
||||||
|
}
|
||||||
|
|
||||||
|
ctx.CreateBazelTargetModule(
|
||||||
|
bazel.BazelTargetModuleProperties{
|
||||||
|
Rule_class: "cc_sysprop_library_static",
|
||||||
|
Bzl_load_location: "//build/bazel/rules/cc:cc_sysprop_library.bzl",
|
||||||
|
},
|
||||||
|
android.CommonAttributes{Name: labels.StaticLibraryLabel},
|
||||||
|
attrs)
|
||||||
|
}
|
@@ -573,43 +573,14 @@ func syspropLibraryHook(ctx android.LoadHookContext, m *syspropLibrary) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// TODO(b/240463568): Additional properties will be added for API validation
|
// TODO(b/240463568): Additional properties will be added for API validation
|
||||||
type bazelSyspropLibraryAttributes struct {
|
|
||||||
Srcs bazel.LabelListAttribute
|
|
||||||
}
|
|
||||||
|
|
||||||
type bazelCcSyspropLibraryAttributes struct {
|
|
||||||
Dep bazel.LabelAttribute
|
|
||||||
Min_sdk_version *string
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *syspropLibrary) ConvertWithBp2build(ctx android.TopDownMutatorContext) {
|
func (m *syspropLibrary) ConvertWithBp2build(ctx android.TopDownMutatorContext) {
|
||||||
ctx.CreateBazelTargetModule(
|
labels := cc.SyspropLibraryLabels{
|
||||||
bazel.BazelTargetModuleProperties{
|
SyspropLibraryLabel: m.BaseModuleName(),
|
||||||
Rule_class: "sysprop_library",
|
SharedLibraryLabel: m.CcImplementationModuleName(),
|
||||||
Bzl_load_location: "//build/bazel/rules/sysprop:sysprop_library.bzl",
|
StaticLibraryLabel: cc.BazelLabelNameForStaticModule(m.CcImplementationModuleName()),
|
||||||
},
|
|
||||||
android.CommonAttributes{Name: m.Name()},
|
|
||||||
&bazelSyspropLibraryAttributes{
|
|
||||||
Srcs: bazel.MakeLabelListAttribute(android.BazelLabelForModuleSrc(ctx, m.properties.Srcs)),
|
|
||||||
})
|
|
||||||
|
|
||||||
attrs := &bazelCcSyspropLibraryAttributes{
|
|
||||||
Dep: *bazel.MakeLabelAttribute(":" + m.Name()),
|
|
||||||
Min_sdk_version: m.properties.Cpp.Min_sdk_version,
|
|
||||||
}
|
}
|
||||||
|
cc.Bp2buildSysprop(ctx,
|
||||||
ctx.CreateBazelTargetModule(
|
labels,
|
||||||
bazel.BazelTargetModuleProperties{
|
bazel.MakeLabelListAttribute(android.BazelLabelForModuleSrc(ctx, m.properties.Srcs)),
|
||||||
Rule_class: "cc_sysprop_library_shared",
|
m.properties.Cpp.Min_sdk_version)
|
||||||
Bzl_load_location: "//build/bazel/rules/cc:cc_sysprop_library.bzl",
|
|
||||||
},
|
|
||||||
android.CommonAttributes{Name: m.CcImplementationModuleName()},
|
|
||||||
attrs)
|
|
||||||
ctx.CreateBazelTargetModule(
|
|
||||||
bazel.BazelTargetModuleProperties{
|
|
||||||
Rule_class: "cc_sysprop_library_static",
|
|
||||||
Bzl_load_location: "//build/bazel/rules/cc:cc_sysprop_library.bzl",
|
|
||||||
},
|
|
||||||
android.CommonAttributes{Name: m.CcImplementationModuleName() + "_bp2build_cc_library_static"},
|
|
||||||
attrs)
|
|
||||||
}
|
}
|
||||||
|
@@ -41,7 +41,7 @@ sysprop_library {
|
|||||||
`,
|
`,
|
||||||
ExpectedBazelTargets: []string{
|
ExpectedBazelTargets: []string{
|
||||||
bp2build.MakeBazelTargetNoRestrictions("sysprop_library",
|
bp2build.MakeBazelTargetNoRestrictions("sysprop_library",
|
||||||
"sysprop_foo_sysprop_library",
|
"sysprop_foo",
|
||||||
bp2build.AttrNameToString{
|
bp2build.AttrNameToString{
|
||||||
"srcs": `[
|
"srcs": `[
|
||||||
"foo.sysprop",
|
"foo.sysprop",
|
||||||
@@ -51,12 +51,12 @@ sysprop_library {
|
|||||||
bp2build.MakeBazelTargetNoRestrictions("cc_sysprop_library_shared",
|
bp2build.MakeBazelTargetNoRestrictions("cc_sysprop_library_shared",
|
||||||
"libsysprop_foo",
|
"libsysprop_foo",
|
||||||
bp2build.AttrNameToString{
|
bp2build.AttrNameToString{
|
||||||
"dep": `":sysprop_foo_sysprop_library"`,
|
"dep": `":sysprop_foo"`,
|
||||||
}),
|
}),
|
||||||
bp2build.MakeBazelTargetNoRestrictions("cc_sysprop_library_static",
|
bp2build.MakeBazelTargetNoRestrictions("cc_sysprop_library_static",
|
||||||
"libsysprop_foo_bp2build_cc_library_static",
|
"libsysprop_foo_bp2build_cc_library_static",
|
||||||
bp2build.AttrNameToString{
|
bp2build.AttrNameToString{
|
||||||
"dep": `":sysprop_foo_sysprop_library"`,
|
"dep": `":sysprop_foo"`,
|
||||||
}),
|
}),
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
@@ -86,7 +86,7 @@ sysprop_library {
|
|||||||
`,
|
`,
|
||||||
ExpectedBazelTargets: []string{
|
ExpectedBazelTargets: []string{
|
||||||
bp2build.MakeBazelTargetNoRestrictions("sysprop_library",
|
bp2build.MakeBazelTargetNoRestrictions("sysprop_library",
|
||||||
"sysprop_foo_sysprop_library",
|
"sysprop_foo",
|
||||||
bp2build.AttrNameToString{
|
bp2build.AttrNameToString{
|
||||||
"srcs": `[
|
"srcs": `[
|
||||||
"foo.sysprop",
|
"foo.sysprop",
|
||||||
@@ -96,13 +96,13 @@ sysprop_library {
|
|||||||
bp2build.MakeBazelTargetNoRestrictions("cc_sysprop_library_shared",
|
bp2build.MakeBazelTargetNoRestrictions("cc_sysprop_library_shared",
|
||||||
"libsysprop_foo",
|
"libsysprop_foo",
|
||||||
bp2build.AttrNameToString{
|
bp2build.AttrNameToString{
|
||||||
"dep": `":sysprop_foo_sysprop_library"`,
|
"dep": `":sysprop_foo"`,
|
||||||
"min_sdk_version": `"5"`,
|
"min_sdk_version": `"5"`,
|
||||||
}),
|
}),
|
||||||
bp2build.MakeBazelTargetNoRestrictions("cc_sysprop_library_static",
|
bp2build.MakeBazelTargetNoRestrictions("cc_sysprop_library_static",
|
||||||
"libsysprop_foo_bp2build_cc_library_static",
|
"libsysprop_foo_bp2build_cc_library_static",
|
||||||
bp2build.AttrNameToString{
|
bp2build.AttrNameToString{
|
||||||
"dep": `":sysprop_foo_sysprop_library"`,
|
"dep": `":sysprop_foo"`,
|
||||||
"min_sdk_version": `"5"`,
|
"min_sdk_version": `"5"`,
|
||||||
}),
|
}),
|
||||||
},
|
},
|
||||||
|
Reference in New Issue
Block a user