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:
@@ -45,6 +45,7 @@ bootstrap_go_package {
|
||||
"snapshot_utils.go",
|
||||
"stl.go",
|
||||
"strip.go",
|
||||
"sysprop.go",
|
||||
"tidy.go",
|
||||
"util.go",
|
||||
"vendor_snapshot.go",
|
||||
|
@@ -28,14 +28,15 @@ import (
|
||||
)
|
||||
|
||||
const (
|
||||
cSrcPartition = "c"
|
||||
asSrcPartition = "as"
|
||||
asmSrcPartition = "asm"
|
||||
lSrcPartition = "l"
|
||||
llSrcPartition = "ll"
|
||||
cppSrcPartition = "cpp"
|
||||
protoSrcPartition = "proto"
|
||||
aidlSrcPartition = "aidl"
|
||||
cSrcPartition = "c"
|
||||
asSrcPartition = "as"
|
||||
asmSrcPartition = "asm"
|
||||
lSrcPartition = "l"
|
||||
llSrcPartition = "ll"
|
||||
cppSrcPartition = "cpp"
|
||||
protoSrcPartition = "proto"
|
||||
aidlSrcPartition = "aidl"
|
||||
syspropSrcPartition = "sysprop"
|
||||
|
||||
stubsSuffix = "_stub_libs_current"
|
||||
)
|
||||
@@ -104,7 +105,8 @@ func groupSrcsByExtension(ctx android.BazelConversionPathContext, srcs bazel.Lab
|
||||
llSrcPartition: bazel.LabelPartition{Extensions: []string{".ll"}},
|
||||
// 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.
|
||||
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)
|
||||
@@ -320,6 +322,9 @@ type compilerAttributes struct {
|
||||
llSrcs bazel.LabelListAttribute
|
||||
lexopts bazel.StringListAttribute
|
||||
|
||||
// Sysprop sources
|
||||
syspropSrcs bazel.LabelListAttribute
|
||||
|
||||
hdrs bazel.LabelListAttribute
|
||||
|
||||
rtti bazel.BoolAttribute
|
||||
@@ -482,6 +487,7 @@ func (ca *compilerAttributes) finalize(ctx android.BazelConversionPathContext, i
|
||||
ca.asmSrcs = partitionedSrcs[asmSrcPartition]
|
||||
ca.lSrcs = partitionedSrcs[lSrcPartition]
|
||||
ca.llSrcs = partitionedSrcs[llSrcPartition]
|
||||
ca.syspropSrcs = partitionedSrcs[syspropSrcPartition]
|
||||
|
||||
ca.absoluteIncludes.DeduplicateAxesFromBase()
|
||||
ca.localIncludes.DeduplicateAxesFromBase()
|
||||
@@ -734,6 +740,10 @@ func bp2BuildParseBaseProps(ctx android.Bp2buildMutatorContext, module *Module)
|
||||
(&compilerAttrs).srcs.Add(&convertedLSrcs.srcName)
|
||||
(&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.DeduplicateAxesFromBase()
|
||||
|
||||
@@ -1208,10 +1218,14 @@ func bp2BuildParseExportedIncludes(ctx android.BazelConversionPathContext, modul
|
||||
return exported
|
||||
}
|
||||
|
||||
func BazelLabelNameForStaticModule(baseLabel string) string {
|
||||
return baseLabel + "_bp2build_cc_library_static"
|
||||
}
|
||||
|
||||
func bazelLabelForStaticModule(ctx android.BazelConversionPathContext, m blueprint.Module) string {
|
||||
label := android.BazelModuleLabel(ctx, m)
|
||||
if ccModule, ok := m.(*Module); ok && ccModule.typ() == fullLibrary && !android.GetBp2BuildAllowList().GenerateCcLibraryStaticOnly(m.Name()) {
|
||||
label += "_bp2build_cc_library_static"
|
||||
return BazelLabelNameForStaticModule(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()
|
||||
}
|
||||
|
||||
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
|
||||
// it.
|
||||
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)
|
||||
}
|
Reference in New Issue
Block a user