Merge "bp2build: handle system_shared_libs"
This commit is contained in:
@@ -204,16 +204,11 @@ var (
|
|||||||
"libBionicBenchmarksUtils", // cc_library_static, fatal error: 'map' file not found, from libcxx
|
"libBionicBenchmarksUtils", // cc_library_static, fatal error: 'map' file not found, from libcxx
|
||||||
"fmtlib", // cc_library_static, fatal error: 'cassert' file not found, from libcxx
|
"fmtlib", // cc_library_static, fatal error: 'cassert' file not found, from libcxx
|
||||||
"fmtlib_ndk", // cc_library_static, fatal error: 'cassert' file not found
|
"fmtlib_ndk", // cc_library_static, fatal error: 'cassert' file not found
|
||||||
"libbase", // Requires liblog. http://b/186826479, cc_library, fatal error: 'memory' file not found, from libcxx.
|
|
||||||
|
|
||||||
// http://b/186024507: Includes errors because of the system_shared_libs default value.
|
|
||||||
// Missing -isystem bionic/libc/include through the libc/libm/libdl
|
|
||||||
// default dependencies if system_shared_libs is unset.
|
|
||||||
"liblog", // http://b/186822772: cc_library, 'sys/cdefs.h' file not found
|
"liblog", // http://b/186822772: cc_library, 'sys/cdefs.h' file not found
|
||||||
"libjemalloc5_jet", // cc_library, 'sys/cdefs.h' file not found
|
"libbase", // Requires liblog. http://b/186826479, cc_library, fatal error: 'memory' file not found, from libcxx.
|
||||||
"libseccomp_policy", // http://b/186476753: cc_library, 'linux/filter.h' not found
|
// Also depends on fmtlib.
|
||||||
"note_memtag_heap_async", // http://b/185127353: cc_library_static, error: feature.h not found
|
|
||||||
"note_memtag_heap_sync", // http://b/185127353: cc_library_static, error: feature.h not found
|
"libseccomp_policy", // depends on libbase
|
||||||
|
|
||||||
"gwp_asan_crash_handler", // cc_library, ld.lld: error: undefined symbol: memset
|
"gwp_asan_crash_handler", // cc_library, ld.lld: error: undefined symbol: memset
|
||||||
|
|
||||||
|
@@ -115,6 +115,11 @@ func BazelLabelForModuleWholeDepsExcludes(ctx BazelConversionPathContext, module
|
|||||||
|
|
||||||
func bazelLabelForModuleDeps(ctx BazelConversionPathContext, modules []string, isWholeLibs bool) bazel.LabelList {
|
func bazelLabelForModuleDeps(ctx BazelConversionPathContext, modules []string, isWholeLibs bool) bazel.LabelList {
|
||||||
var labels bazel.LabelList
|
var labels bazel.LabelList
|
||||||
|
// In some cases, a nil string list is different than an explicitly empty list.
|
||||||
|
if len(modules) == 0 && modules != nil {
|
||||||
|
labels.Includes = []bazel.Label{}
|
||||||
|
return labels
|
||||||
|
}
|
||||||
for _, module := range modules {
|
for _, module := range modules {
|
||||||
bpText := module
|
bpText := module
|
||||||
if m := SrcIsModule(module); m == "" {
|
if m := SrcIsModule(module); m == "" {
|
||||||
|
@@ -56,7 +56,7 @@ const (
|
|||||||
// This is consistently named "conditions_default" to mirror the Soong
|
// This is consistently named "conditions_default" to mirror the Soong
|
||||||
// config variable default key in an Android.bp file, although there's no
|
// config variable default key in an Android.bp file, although there's no
|
||||||
// integration with Soong config variables (yet).
|
// integration with Soong config variables (yet).
|
||||||
conditionsDefault = "conditions_default"
|
ConditionsDefaultConfigKey = "conditions_default"
|
||||||
|
|
||||||
ConditionsDefaultSelectKey = "//conditions:default"
|
ConditionsDefaultSelectKey = "//conditions:default"
|
||||||
|
|
||||||
@@ -76,7 +76,7 @@ var (
|
|||||||
archArm64: "//build/bazel/platforms/arch:arm64",
|
archArm64: "//build/bazel/platforms/arch:arm64",
|
||||||
archX86: "//build/bazel/platforms/arch:x86",
|
archX86: "//build/bazel/platforms/arch:x86",
|
||||||
archX86_64: "//build/bazel/platforms/arch:x86_64",
|
archX86_64: "//build/bazel/platforms/arch:x86_64",
|
||||||
conditionsDefault: ConditionsDefaultSelectKey, // The default condition of as arch select map.
|
ConditionsDefaultConfigKey: ConditionsDefaultSelectKey, // The default condition of as arch select map.
|
||||||
}
|
}
|
||||||
|
|
||||||
// A map of target operating systems to the Bazel label of the
|
// A map of target operating systems to the Bazel label of the
|
||||||
@@ -88,12 +88,12 @@ var (
|
|||||||
osLinuxMusl: "//build/bazel/platforms/os:linux_musl",
|
osLinuxMusl: "//build/bazel/platforms/os:linux_musl",
|
||||||
osLinuxBionic: "//build/bazel/platforms/os:linux_bionic",
|
osLinuxBionic: "//build/bazel/platforms/os:linux_bionic",
|
||||||
osWindows: "//build/bazel/platforms/os:windows",
|
osWindows: "//build/bazel/platforms/os:windows",
|
||||||
conditionsDefault: ConditionsDefaultSelectKey, // The default condition of an os select map.
|
ConditionsDefaultConfigKey: ConditionsDefaultSelectKey, // The default condition of an os select map.
|
||||||
}
|
}
|
||||||
|
|
||||||
platformBionicMap = map[string]string{
|
platformBionicMap = map[string]string{
|
||||||
"bionic": "//build/bazel/platforms/os:bionic",
|
"bionic": "//build/bazel/platforms/os:bionic",
|
||||||
conditionsDefault: ConditionsDefaultSelectKey, // The default condition of an os select map.
|
ConditionsDefaultConfigKey: ConditionsDefaultSelectKey, // The default condition of an os select map.
|
||||||
}
|
}
|
||||||
|
|
||||||
platformOsArchMap = map[string]string{
|
platformOsArchMap = map[string]string{
|
||||||
@@ -110,7 +110,7 @@ var (
|
|||||||
osArchLinuxBionicX86_64: "//build/bazel/platforms/os_arch:linux_bionic_x86_64",
|
osArchLinuxBionicX86_64: "//build/bazel/platforms/os_arch:linux_bionic_x86_64",
|
||||||
osArchWindowsX86: "//build/bazel/platforms/os_arch:windows_x86",
|
osArchWindowsX86: "//build/bazel/platforms/os_arch:windows_x86",
|
||||||
osArchWindowsX86_64: "//build/bazel/platforms/os_arch:windows_x86_64",
|
osArchWindowsX86_64: "//build/bazel/platforms/os_arch:windows_x86_64",
|
||||||
conditionsDefault: ConditionsDefaultSelectKey, // The default condition of an os select map.
|
ConditionsDefaultConfigKey: ConditionsDefaultSelectKey, // The default condition of an os select map.
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -181,7 +181,7 @@ func (ct configurationType) SelectKey(config string) string {
|
|||||||
case bionic:
|
case bionic:
|
||||||
return platformBionicMap[config]
|
return platformBionicMap[config]
|
||||||
case productVariables:
|
case productVariables:
|
||||||
if config == conditionsDefault {
|
if config == ConditionsDefaultConfigKey {
|
||||||
return ConditionsDefaultSelectKey
|
return ConditionsDefaultSelectKey
|
||||||
}
|
}
|
||||||
return fmt.Sprintf("%s:%s", productVariableBazelPackage, strings.ToLower(config))
|
return fmt.Sprintf("%s:%s", productVariableBazelPackage, strings.ToLower(config))
|
||||||
|
@@ -69,6 +69,23 @@ type LabelList struct {
|
|||||||
Excludes []Label
|
Excludes []Label
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (ll *LabelList) Equals(other LabelList) bool {
|
||||||
|
if len(ll.Includes) != len(other.Includes) || len(ll.Excludes) != len(other.Excludes) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
for i, _ := range ll.Includes {
|
||||||
|
if ll.Includes[i] != other.Includes[i] {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for i, _ := range ll.Excludes {
|
||||||
|
if ll.Excludes[i] != other.Excludes[i] {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
func (ll *LabelList) IsNil() bool {
|
func (ll *LabelList) IsNil() bool {
|
||||||
return ll.Includes == nil && ll.Excludes == nil
|
return ll.Includes == nil && ll.Excludes == nil
|
||||||
}
|
}
|
||||||
@@ -446,7 +463,7 @@ func (ll labelListSelectValues) appendSelects(other labelListSelectValues) {
|
|||||||
// HasConfigurableValues returns whether there are configurable values within this set of selects.
|
// HasConfigurableValues returns whether there are configurable values within this set of selects.
|
||||||
func (ll labelListSelectValues) HasConfigurableValues() bool {
|
func (ll labelListSelectValues) HasConfigurableValues() bool {
|
||||||
for _, v := range ll {
|
for _, v := range ll {
|
||||||
if len(v.Includes) > 0 {
|
if v.Includes != nil {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -462,6 +479,13 @@ type LabelListAttribute struct {
|
|||||||
// The configured attribute label list Values. Optional
|
// The configured attribute label list Values. Optional
|
||||||
// a map of independent configurability axes
|
// a map of independent configurability axes
|
||||||
ConfigurableValues configurableLabelLists
|
ConfigurableValues configurableLabelLists
|
||||||
|
|
||||||
|
// If true, differentiate between "nil" and "empty" list. nil means that
|
||||||
|
// this attribute should not be specified at all, and "empty" means that
|
||||||
|
// the attribute should be explicitly specified as an empty list.
|
||||||
|
// This mode facilitates use of attribute defaults: an empty list should
|
||||||
|
// override the default.
|
||||||
|
ForceSpecifyEmptyList bool
|
||||||
}
|
}
|
||||||
|
|
||||||
type configurableLabelLists map[ConfigurationAxis]labelListSelectValues
|
type configurableLabelLists map[ConfigurationAxis]labelListSelectValues
|
||||||
@@ -546,6 +570,9 @@ func (lla *LabelListAttribute) SortedConfigurationAxes() []ConfigurationAxis {
|
|||||||
// Append all values, including os and arch specific ones, from another
|
// Append all values, including os and arch specific ones, from another
|
||||||
// LabelListAttribute to this LabelListAttribute.
|
// LabelListAttribute to this LabelListAttribute.
|
||||||
func (lla *LabelListAttribute) Append(other LabelListAttribute) {
|
func (lla *LabelListAttribute) Append(other LabelListAttribute) {
|
||||||
|
if lla.ForceSpecifyEmptyList && !other.Value.IsNil() {
|
||||||
|
lla.Value.Includes = []Label{}
|
||||||
|
}
|
||||||
lla.Value.Append(other.Value)
|
lla.Value.Append(other.Value)
|
||||||
if lla.ConfigurableValues == nil {
|
if lla.ConfigurableValues == nil {
|
||||||
lla.ConfigurableValues = make(configurableLabelLists)
|
lla.ConfigurableValues = make(configurableLabelLists)
|
||||||
@@ -595,7 +622,7 @@ func (lla *LabelListAttribute) ResolveExcludes() {
|
|||||||
|
|
||||||
// Now that the Value list is finalized for this axis, compare it with the original
|
// Now that the Value list is finalized for this axis, compare it with the original
|
||||||
// list, and put the difference into the default condition for the axis.
|
// list, and put the difference into the default condition for the axis.
|
||||||
lla.ConfigurableValues[axis][conditionsDefault] = SubtractBazelLabelList(baseLabels, lla.Value)
|
lla.ConfigurableValues[axis][ConditionsDefaultConfigKey] = SubtractBazelLabelList(baseLabels, lla.Value)
|
||||||
|
|
||||||
// if everything ends up without includes, just delete the axis
|
// if everything ends up without includes, just delete the axis
|
||||||
if !lla.ConfigurableValues[axis].HasConfigurableValues() {
|
if !lla.ConfigurableValues[axis].HasConfigurableValues() {
|
||||||
|
@@ -1454,3 +1454,213 @@ cc_library {
|
|||||||
)`},
|
)`},
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestCcLibrary_SystemSharedLibsRootEmpty(t *testing.T) {
|
||||||
|
runCcLibraryTestCase(t, bp2buildTestCase{
|
||||||
|
description: "cc_library system_shared_libs empty at root",
|
||||||
|
moduleTypeUnderTest: "cc_library",
|
||||||
|
moduleTypeUnderTestFactory: cc.LibraryFactory,
|
||||||
|
moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
|
||||||
|
blueprint: soongCcLibraryPreamble + `
|
||||||
|
cc_library {
|
||||||
|
name: "root_empty",
|
||||||
|
system_shared_libs: [],
|
||||||
|
}
|
||||||
|
`,
|
||||||
|
expectedBazelTargets: []string{`cc_library(
|
||||||
|
name = "root_empty",
|
||||||
|
copts = [
|
||||||
|
"-I.",
|
||||||
|
"-I$(BINDIR)/.",
|
||||||
|
],
|
||||||
|
system_dynamic_deps = [],
|
||||||
|
)`},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestCcLibrary_SystemSharedLibsStaticEmpty(t *testing.T) {
|
||||||
|
runCcLibraryTestCase(t, bp2buildTestCase{
|
||||||
|
description: "cc_library system_shared_libs empty for static variant",
|
||||||
|
moduleTypeUnderTest: "cc_library",
|
||||||
|
moduleTypeUnderTestFactory: cc.LibraryFactory,
|
||||||
|
moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
|
||||||
|
blueprint: soongCcLibraryPreamble + `
|
||||||
|
cc_library {
|
||||||
|
name: "static_empty",
|
||||||
|
static: {
|
||||||
|
system_shared_libs: [],
|
||||||
|
},
|
||||||
|
}
|
||||||
|
`,
|
||||||
|
expectedBazelTargets: []string{`cc_library(
|
||||||
|
name = "static_empty",
|
||||||
|
copts = [
|
||||||
|
"-I.",
|
||||||
|
"-I$(BINDIR)/.",
|
||||||
|
],
|
||||||
|
static = {
|
||||||
|
"system_dynamic_deps": [],
|
||||||
|
},
|
||||||
|
)`},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestCcLibrary_SystemSharedLibsSharedEmpty(t *testing.T) {
|
||||||
|
runCcLibraryTestCase(t, bp2buildTestCase{
|
||||||
|
description: "cc_library system_shared_libs empty for shared variant",
|
||||||
|
moduleTypeUnderTest: "cc_library",
|
||||||
|
moduleTypeUnderTestFactory: cc.LibraryFactory,
|
||||||
|
moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
|
||||||
|
blueprint: soongCcLibraryPreamble + `
|
||||||
|
cc_library {
|
||||||
|
name: "shared_empty",
|
||||||
|
shared: {
|
||||||
|
system_shared_libs: [],
|
||||||
|
},
|
||||||
|
}
|
||||||
|
`,
|
||||||
|
expectedBazelTargets: []string{`cc_library(
|
||||||
|
name = "shared_empty",
|
||||||
|
copts = [
|
||||||
|
"-I.",
|
||||||
|
"-I$(BINDIR)/.",
|
||||||
|
],
|
||||||
|
shared = {
|
||||||
|
"system_dynamic_deps": [],
|
||||||
|
},
|
||||||
|
)`},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestCcLibrary_SystemSharedLibsSharedBionicEmpty(t *testing.T) {
|
||||||
|
runCcLibraryTestCase(t, bp2buildTestCase{
|
||||||
|
description: "cc_library system_shared_libs empty for shared, bionic variant",
|
||||||
|
moduleTypeUnderTest: "cc_library",
|
||||||
|
moduleTypeUnderTestFactory: cc.LibraryFactory,
|
||||||
|
moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
|
||||||
|
blueprint: soongCcLibraryPreamble + `
|
||||||
|
cc_library {
|
||||||
|
name: "shared_empty",
|
||||||
|
target: {
|
||||||
|
bionic: {
|
||||||
|
shared: {
|
||||||
|
system_shared_libs: [],
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}
|
||||||
|
`,
|
||||||
|
expectedBazelTargets: []string{`cc_library(
|
||||||
|
name = "shared_empty",
|
||||||
|
copts = [
|
||||||
|
"-I.",
|
||||||
|
"-I$(BINDIR)/.",
|
||||||
|
],
|
||||||
|
shared = {
|
||||||
|
"system_dynamic_deps": [],
|
||||||
|
},
|
||||||
|
)`},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestCcLibrary_SystemSharedLibsLinuxBionicEmpty(t *testing.T) {
|
||||||
|
// Note that this behavior is technically incorrect (it's a simplification).
|
||||||
|
// The correct behavior would be if bp2build wrote `system_dynamic_deps = []`
|
||||||
|
// only for linux_bionic, but `android` had `["libc", "libdl", "libm"].
|
||||||
|
// b/195791252 tracks the fix.
|
||||||
|
runCcLibraryTestCase(t, bp2buildTestCase{
|
||||||
|
description: "cc_library system_shared_libs empty for linux_bionic variant",
|
||||||
|
moduleTypeUnderTest: "cc_library",
|
||||||
|
moduleTypeUnderTestFactory: cc.LibraryFactory,
|
||||||
|
moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
|
||||||
|
blueprint: soongCcLibraryPreamble + `
|
||||||
|
cc_library {
|
||||||
|
name: "target_linux_bionic_empty",
|
||||||
|
target: {
|
||||||
|
linux_bionic: {
|
||||||
|
system_shared_libs: [],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
`,
|
||||||
|
expectedBazelTargets: []string{`cc_library(
|
||||||
|
name = "target_linux_bionic_empty",
|
||||||
|
copts = [
|
||||||
|
"-I.",
|
||||||
|
"-I$(BINDIR)/.",
|
||||||
|
],
|
||||||
|
system_dynamic_deps = [],
|
||||||
|
)`},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestCcLibrary_SystemSharedLibsBionicEmpty(t *testing.T) {
|
||||||
|
runCcLibraryTestCase(t, bp2buildTestCase{
|
||||||
|
description: "cc_library system_shared_libs empty for bionic variant",
|
||||||
|
moduleTypeUnderTest: "cc_library",
|
||||||
|
moduleTypeUnderTestFactory: cc.LibraryFactory,
|
||||||
|
moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
|
||||||
|
blueprint: soongCcLibraryPreamble + `
|
||||||
|
cc_library {
|
||||||
|
name: "target_bionic_empty",
|
||||||
|
target: {
|
||||||
|
bionic: {
|
||||||
|
system_shared_libs: [],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
`,
|
||||||
|
expectedBazelTargets: []string{`cc_library(
|
||||||
|
name = "target_bionic_empty",
|
||||||
|
copts = [
|
||||||
|
"-I.",
|
||||||
|
"-I$(BINDIR)/.",
|
||||||
|
],
|
||||||
|
system_dynamic_deps = [],
|
||||||
|
)`},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestCcLibrary_SystemSharedLibsSharedAndRoot(t *testing.T) {
|
||||||
|
runCcLibraryTestCase(t, bp2buildTestCase{
|
||||||
|
description: "cc_library system_shared_libs set for shared and root",
|
||||||
|
moduleTypeUnderTest: "cc_library",
|
||||||
|
moduleTypeUnderTestFactory: cc.LibraryFactory,
|
||||||
|
moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build,
|
||||||
|
blueprint: soongCcLibraryPreamble + `
|
||||||
|
cc_library {name: "libc"}
|
||||||
|
cc_library {name: "libm"}
|
||||||
|
|
||||||
|
cc_library {
|
||||||
|
name: "foo",
|
||||||
|
system_shared_libs: ["libc"],
|
||||||
|
shared: {
|
||||||
|
system_shared_libs: ["libm"],
|
||||||
|
},
|
||||||
|
}
|
||||||
|
`,
|
||||||
|
expectedBazelTargets: []string{`cc_library(
|
||||||
|
name = "foo",
|
||||||
|
copts = [
|
||||||
|
"-I.",
|
||||||
|
"-I$(BINDIR)/.",
|
||||||
|
],
|
||||||
|
shared = {
|
||||||
|
"system_dynamic_deps": [":libm"],
|
||||||
|
},
|
||||||
|
system_dynamic_deps = [":libc"],
|
||||||
|
)`, `cc_library(
|
||||||
|
name = "libc",
|
||||||
|
copts = [
|
||||||
|
"-I.",
|
||||||
|
"-I$(BINDIR)/.",
|
||||||
|
],
|
||||||
|
)`, `cc_library(
|
||||||
|
name = "libm",
|
||||||
|
copts = [
|
||||||
|
"-I.",
|
||||||
|
"-I$(BINDIR)/.",
|
||||||
|
],
|
||||||
|
)`},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
@@ -73,6 +73,8 @@ func registerCcLibraryStaticModuleTypes(ctx android.RegistrationContext) {
|
|||||||
ctx.RegisterModuleType("toolchain_library", cc.ToolchainLibraryFactory)
|
ctx.RegisterModuleType("toolchain_library", cc.ToolchainLibraryFactory)
|
||||||
ctx.RegisterModuleType("cc_library_headers", cc.LibraryHeaderFactory)
|
ctx.RegisterModuleType("cc_library_headers", cc.LibraryHeaderFactory)
|
||||||
ctx.RegisterModuleType("genrule", genrule.GenRuleFactory)
|
ctx.RegisterModuleType("genrule", genrule.GenRuleFactory)
|
||||||
|
// Required for system_shared_libs dependencies.
|
||||||
|
ctx.RegisterModuleType("cc_library", cc.LibraryFactory)
|
||||||
}
|
}
|
||||||
|
|
||||||
func runCcLibraryStaticTestCase(t *testing.T, tc bp2buildTestCase) {
|
func runCcLibraryStaticTestCase(t *testing.T, tc bp2buildTestCase) {
|
||||||
@@ -1427,3 +1429,185 @@ cc_library_static {
|
|||||||
)`},
|
)`},
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestStaticLibrary_SystemSharedLibsRootEmpty(t *testing.T) {
|
||||||
|
runCcLibraryStaticTestCase(t, bp2buildTestCase{
|
||||||
|
description: "cc_library_static system_shared_lib empty root",
|
||||||
|
moduleTypeUnderTest: "cc_library_static",
|
||||||
|
moduleTypeUnderTestFactory: cc.LibraryStaticFactory,
|
||||||
|
moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryStaticBp2Build,
|
||||||
|
blueprint: soongCcLibraryStaticPreamble + `
|
||||||
|
cc_library_static {
|
||||||
|
name: "root_empty",
|
||||||
|
system_shared_libs: [],
|
||||||
|
}
|
||||||
|
`,
|
||||||
|
expectedBazelTargets: []string{`cc_library_static(
|
||||||
|
name = "root_empty",
|
||||||
|
copts = [
|
||||||
|
"-I.",
|
||||||
|
"-I$(BINDIR)/.",
|
||||||
|
],
|
||||||
|
linkstatic = True,
|
||||||
|
system_dynamic_deps = [],
|
||||||
|
)`},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestStaticLibrary_SystemSharedLibsStaticEmpty(t *testing.T) {
|
||||||
|
runCcLibraryStaticTestCase(t, bp2buildTestCase{
|
||||||
|
description: "cc_library_static system_shared_lib empty static default",
|
||||||
|
moduleTypeUnderTest: "cc_library_static",
|
||||||
|
moduleTypeUnderTestFactory: cc.LibraryStaticFactory,
|
||||||
|
moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryStaticBp2Build,
|
||||||
|
blueprint: soongCcLibraryStaticPreamble + `
|
||||||
|
cc_defaults {
|
||||||
|
name: "static_empty_defaults",
|
||||||
|
static: {
|
||||||
|
system_shared_libs: [],
|
||||||
|
},
|
||||||
|
}
|
||||||
|
cc_library_static {
|
||||||
|
name: "static_empty",
|
||||||
|
defaults: ["static_empty_defaults"],
|
||||||
|
}
|
||||||
|
`,
|
||||||
|
expectedBazelTargets: []string{`cc_library_static(
|
||||||
|
name = "static_empty",
|
||||||
|
copts = [
|
||||||
|
"-I.",
|
||||||
|
"-I$(BINDIR)/.",
|
||||||
|
],
|
||||||
|
linkstatic = True,
|
||||||
|
system_dynamic_deps = [],
|
||||||
|
)`},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestStaticLibrary_SystemSharedLibsBionicEmpty(t *testing.T) {
|
||||||
|
runCcLibraryStaticTestCase(t, bp2buildTestCase{
|
||||||
|
description: "cc_library_static system_shared_lib empty for bionic variant",
|
||||||
|
moduleTypeUnderTest: "cc_library_static",
|
||||||
|
moduleTypeUnderTestFactory: cc.LibraryStaticFactory,
|
||||||
|
moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryStaticBp2Build,
|
||||||
|
blueprint: soongCcLibraryStaticPreamble + `
|
||||||
|
cc_library_static {
|
||||||
|
name: "target_bionic_empty",
|
||||||
|
target: {
|
||||||
|
bionic: {
|
||||||
|
system_shared_libs: [],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
`,
|
||||||
|
expectedBazelTargets: []string{`cc_library_static(
|
||||||
|
name = "target_bionic_empty",
|
||||||
|
copts = [
|
||||||
|
"-I.",
|
||||||
|
"-I$(BINDIR)/.",
|
||||||
|
],
|
||||||
|
linkstatic = True,
|
||||||
|
system_dynamic_deps = [],
|
||||||
|
)`},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestStaticLibrary_SystemSharedLibsLinuxBionicEmpty(t *testing.T) {
|
||||||
|
// Note that this behavior is technically incorrect (it's a simplification).
|
||||||
|
// The correct behavior would be if bp2build wrote `system_dynamic_deps = []`
|
||||||
|
// only for linux_bionic, but `android` had `["libc", "libdl", "libm"].
|
||||||
|
// b/195791252 tracks the fix.
|
||||||
|
runCcLibraryStaticTestCase(t, bp2buildTestCase{
|
||||||
|
description: "cc_library_static system_shared_lib empty for linux_bionic variant",
|
||||||
|
moduleTypeUnderTest: "cc_library_static",
|
||||||
|
moduleTypeUnderTestFactory: cc.LibraryStaticFactory,
|
||||||
|
moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryStaticBp2Build,
|
||||||
|
blueprint: soongCcLibraryStaticPreamble + `
|
||||||
|
cc_library_static {
|
||||||
|
name: "target_linux_bionic_empty",
|
||||||
|
target: {
|
||||||
|
linux_bionic: {
|
||||||
|
system_shared_libs: [],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
`,
|
||||||
|
expectedBazelTargets: []string{`cc_library_static(
|
||||||
|
name = "target_linux_bionic_empty",
|
||||||
|
copts = [
|
||||||
|
"-I.",
|
||||||
|
"-I$(BINDIR)/.",
|
||||||
|
],
|
||||||
|
linkstatic = True,
|
||||||
|
system_dynamic_deps = [],
|
||||||
|
)`},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestStaticLibrary_SystemSharedLibsBionic(t *testing.T) {
|
||||||
|
runCcLibraryStaticTestCase(t, bp2buildTestCase{
|
||||||
|
description: "cc_library_static system_shared_libs set for bionic variant",
|
||||||
|
moduleTypeUnderTest: "cc_library_static",
|
||||||
|
moduleTypeUnderTestFactory: cc.LibraryStaticFactory,
|
||||||
|
moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryStaticBp2Build,
|
||||||
|
blueprint: soongCcLibraryStaticPreamble + `
|
||||||
|
cc_library{name: "libc"}
|
||||||
|
|
||||||
|
cc_library_static {
|
||||||
|
name: "target_bionic",
|
||||||
|
target: {
|
||||||
|
bionic: {
|
||||||
|
system_shared_libs: ["libc"],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
`,
|
||||||
|
expectedBazelTargets: []string{`cc_library_static(
|
||||||
|
name = "target_bionic",
|
||||||
|
copts = [
|
||||||
|
"-I.",
|
||||||
|
"-I$(BINDIR)/.",
|
||||||
|
],
|
||||||
|
linkstatic = True,
|
||||||
|
system_dynamic_deps = select({
|
||||||
|
"//build/bazel/platforms/os:bionic": [":libc"],
|
||||||
|
"//conditions:default": [],
|
||||||
|
}),
|
||||||
|
)`},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestStaticLibrary_SystemSharedLibsLinuxRootAndLinuxBionic(t *testing.T) {
|
||||||
|
runCcLibraryStaticTestCase(t, bp2buildTestCase{
|
||||||
|
description: "cc_library_static system_shared_libs set for root and linux_bionic variant",
|
||||||
|
moduleTypeUnderTest: "cc_library_static",
|
||||||
|
moduleTypeUnderTestFactory: cc.LibraryStaticFactory,
|
||||||
|
moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryStaticBp2Build,
|
||||||
|
blueprint: soongCcLibraryStaticPreamble + `
|
||||||
|
cc_library{name: "libc"}
|
||||||
|
cc_library{name: "libm"}
|
||||||
|
|
||||||
|
cc_library_static {
|
||||||
|
name: "target_linux_bionic",
|
||||||
|
system_shared_libs: ["libc"],
|
||||||
|
target: {
|
||||||
|
linux_bionic: {
|
||||||
|
system_shared_libs: ["libm"],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
`,
|
||||||
|
expectedBazelTargets: []string{`cc_library_static(
|
||||||
|
name = "target_linux_bionic",
|
||||||
|
copts = [
|
||||||
|
"-I.",
|
||||||
|
"-I$(BINDIR)/.",
|
||||||
|
],
|
||||||
|
linkstatic = True,
|
||||||
|
system_dynamic_deps = [":libc"] + select({
|
||||||
|
"//build/bazel/platforms/os:linux_bionic": [":libm"],
|
||||||
|
"//conditions:default": [],
|
||||||
|
}),
|
||||||
|
)`},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
@@ -82,7 +82,12 @@ func getLabelListValues(list bazel.LabelListAttribute) (reflect.Value, []selects
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
archSelects := map[string]reflect.Value{}
|
archSelects := map[string]reflect.Value{}
|
||||||
|
defaultVal := configToLabels[bazel.ConditionsDefaultConfigKey]
|
||||||
for config, labels := range configToLabels {
|
for config, labels := range configToLabels {
|
||||||
|
// Omit any entries in the map which match the default value, for brevity.
|
||||||
|
if config != bazel.ConditionsDefaultConfigKey && labels.Equals(defaultVal) {
|
||||||
|
continue
|
||||||
|
}
|
||||||
selectKey := axis.SelectKey(config)
|
selectKey := axis.SelectKey(config)
|
||||||
if use, value := labelListSelectValue(selectKey, labels); use {
|
if use, value := labelListSelectValue(selectKey, labels); use {
|
||||||
archSelects[selectKey] = value
|
archSelects[selectKey] = value
|
||||||
@@ -118,6 +123,8 @@ func prettyPrintAttribute(v bazel.Attribute, indent int) (string, error) {
|
|||||||
var value reflect.Value
|
var value reflect.Value
|
||||||
var configurableAttrs []selects
|
var configurableAttrs []selects
|
||||||
var defaultSelectValue *string
|
var defaultSelectValue *string
|
||||||
|
// If true, print the default attribute value, even if the attribute is zero.
|
||||||
|
shouldPrintDefault := false
|
||||||
switch list := v.(type) {
|
switch list := v.(type) {
|
||||||
case bazel.StringListAttribute:
|
case bazel.StringListAttribute:
|
||||||
value, configurableAttrs = getStringListValues(list)
|
value, configurableAttrs = getStringListValues(list)
|
||||||
@@ -125,6 +132,9 @@ func prettyPrintAttribute(v bazel.Attribute, indent int) (string, error) {
|
|||||||
case bazel.LabelListAttribute:
|
case bazel.LabelListAttribute:
|
||||||
value, configurableAttrs = getLabelListValues(list)
|
value, configurableAttrs = getLabelListValues(list)
|
||||||
defaultSelectValue = &emptyBazelList
|
defaultSelectValue = &emptyBazelList
|
||||||
|
if list.ForceSpecifyEmptyList && (!value.IsNil() || list.HasConfigurableValues()) {
|
||||||
|
shouldPrintDefault = true
|
||||||
|
}
|
||||||
case bazel.LabelAttribute:
|
case bazel.LabelAttribute:
|
||||||
value, configurableAttrs = getLabelValue(list)
|
value, configurableAttrs = getLabelValue(list)
|
||||||
defaultSelectValue = &bazelNone
|
defaultSelectValue = &bazelNone
|
||||||
@@ -166,6 +176,9 @@ func prettyPrintAttribute(v bazel.Attribute, indent int) (string, error) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ret == "" && shouldPrintDefault {
|
||||||
|
return *defaultSelectValue, nil
|
||||||
|
}
|
||||||
return ret, nil
|
return ret, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -35,6 +35,8 @@ type staticOrSharedAttributes struct {
|
|||||||
Static_deps bazel.LabelListAttribute
|
Static_deps bazel.LabelListAttribute
|
||||||
Dynamic_deps bazel.LabelListAttribute
|
Dynamic_deps bazel.LabelListAttribute
|
||||||
Whole_archive_deps bazel.LabelListAttribute
|
Whole_archive_deps bazel.LabelListAttribute
|
||||||
|
|
||||||
|
System_dynamic_deps bazel.LabelListAttribute
|
||||||
}
|
}
|
||||||
|
|
||||||
func groupSrcsByExtension(ctx android.TopDownMutatorContext, srcs bazel.LabelListAttribute) (cppSrcs, cSrcs, asSrcs bazel.LabelListAttribute) {
|
func groupSrcsByExtension(ctx android.TopDownMutatorContext, srcs bazel.LabelListAttribute) (cppSrcs, cSrcs, asSrcs bazel.LabelListAttribute) {
|
||||||
@@ -137,12 +139,19 @@ func bp2buildParseStaticOrSharedProps(ctx android.TopDownMutatorContext, module
|
|||||||
props = lib.SharedProperties.Shared
|
props = lib.SharedProperties.Shared
|
||||||
}
|
}
|
||||||
|
|
||||||
|
system_dynamic_deps := bazel.MakeLabelListAttribute(android.BazelLabelForModuleDeps(ctx, props.System_shared_libs))
|
||||||
|
system_dynamic_deps.ForceSpecifyEmptyList = true
|
||||||
|
if system_dynamic_deps.IsEmpty() && props.System_shared_libs != nil {
|
||||||
|
system_dynamic_deps.Value.Includes = []bazel.Label{}
|
||||||
|
}
|
||||||
|
|
||||||
attrs := staticOrSharedAttributes{
|
attrs := staticOrSharedAttributes{
|
||||||
Copts: bazel.StringListAttribute{Value: props.Cflags},
|
Copts: bazel.StringListAttribute{Value: props.Cflags},
|
||||||
Srcs: bazel.MakeLabelListAttribute(android.BazelLabelForModuleSrc(ctx, props.Srcs)),
|
Srcs: bazel.MakeLabelListAttribute(android.BazelLabelForModuleSrc(ctx, props.Srcs)),
|
||||||
Static_deps: bazel.MakeLabelListAttribute(android.BazelLabelForModuleDeps(ctx, props.Static_libs)),
|
Static_deps: bazel.MakeLabelListAttribute(android.BazelLabelForModuleDeps(ctx, props.Static_libs)),
|
||||||
Dynamic_deps: bazel.MakeLabelListAttribute(android.BazelLabelForModuleDeps(ctx, append(props.Shared_libs, props.System_shared_libs...))),
|
Dynamic_deps: bazel.MakeLabelListAttribute(android.BazelLabelForModuleDeps(ctx, props.Shared_libs)),
|
||||||
Whole_archive_deps: bazel.MakeLabelListAttribute(android.BazelLabelForModuleWholeDeps(ctx, props.Whole_static_libs)),
|
Whole_archive_deps: bazel.MakeLabelListAttribute(android.BazelLabelForModuleWholeDeps(ctx, props.Whole_static_libs)),
|
||||||
|
System_dynamic_deps: system_dynamic_deps,
|
||||||
}
|
}
|
||||||
|
|
||||||
setAttrs := func(axis bazel.ConfigurationAxis, config string, props StaticOrSharedProperties) {
|
setAttrs := func(axis bazel.ConfigurationAxis, config string, props StaticOrSharedProperties) {
|
||||||
@@ -151,6 +160,7 @@ func bp2buildParseStaticOrSharedProps(ctx android.TopDownMutatorContext, module
|
|||||||
attrs.Static_deps.SetSelectValue(axis, config, android.BazelLabelForModuleDeps(ctx, props.Static_libs))
|
attrs.Static_deps.SetSelectValue(axis, config, android.BazelLabelForModuleDeps(ctx, props.Static_libs))
|
||||||
attrs.Dynamic_deps.SetSelectValue(axis, config, android.BazelLabelForModuleDeps(ctx, props.Shared_libs))
|
attrs.Dynamic_deps.SetSelectValue(axis, config, android.BazelLabelForModuleDeps(ctx, props.Shared_libs))
|
||||||
attrs.Whole_archive_deps.SetSelectValue(axis, config, android.BazelLabelForModuleWholeDeps(ctx, props.Whole_static_libs))
|
attrs.Whole_archive_deps.SetSelectValue(axis, config, android.BazelLabelForModuleWholeDeps(ctx, props.Whole_static_libs))
|
||||||
|
attrs.System_dynamic_deps.SetSelectValue(axis, config, android.BazelLabelForModuleDeps(ctx, props.System_shared_libs))
|
||||||
}
|
}
|
||||||
|
|
||||||
if isStatic {
|
if isStatic {
|
||||||
@@ -377,6 +387,7 @@ func bp2BuildParseCompilerProps(ctx android.TopDownMutatorContext, module *Modul
|
|||||||
type linkerAttributes struct {
|
type linkerAttributes struct {
|
||||||
deps bazel.LabelListAttribute
|
deps bazel.LabelListAttribute
|
||||||
dynamicDeps bazel.LabelListAttribute
|
dynamicDeps bazel.LabelListAttribute
|
||||||
|
systemDynamicDeps bazel.LabelListAttribute
|
||||||
wholeArchiveDeps bazel.LabelListAttribute
|
wholeArchiveDeps bazel.LabelListAttribute
|
||||||
exportedDeps bazel.LabelListAttribute
|
exportedDeps bazel.LabelListAttribute
|
||||||
useLibcrt bazel.BoolAttribute
|
useLibcrt bazel.BoolAttribute
|
||||||
@@ -406,6 +417,7 @@ func bp2BuildParseLinkerProps(ctx android.TopDownMutatorContext, module *Module)
|
|||||||
var exportedDeps bazel.LabelListAttribute
|
var exportedDeps bazel.LabelListAttribute
|
||||||
var dynamicDeps bazel.LabelListAttribute
|
var dynamicDeps bazel.LabelListAttribute
|
||||||
var wholeArchiveDeps bazel.LabelListAttribute
|
var wholeArchiveDeps bazel.LabelListAttribute
|
||||||
|
var systemSharedDeps bazel.LabelListAttribute
|
||||||
var linkopts bazel.StringListAttribute
|
var linkopts bazel.StringListAttribute
|
||||||
var versionScript bazel.LabelAttribute
|
var versionScript bazel.LabelAttribute
|
||||||
var useLibcrt bazel.BoolAttribute
|
var useLibcrt bazel.BoolAttribute
|
||||||
@@ -445,9 +457,16 @@ func bp2BuildParseLinkerProps(ctx android.TopDownMutatorContext, module *Module)
|
|||||||
staticDeps.Value = android.BazelLabelForModuleDepsExcludes(ctx, staticLibs, baseLinkerProps.Exclude_static_libs)
|
staticDeps.Value = android.BazelLabelForModuleDepsExcludes(ctx, staticLibs, baseLinkerProps.Exclude_static_libs)
|
||||||
wholeArchiveLibs := android.FirstUniqueStrings(baseLinkerProps.Whole_static_libs)
|
wholeArchiveLibs := android.FirstUniqueStrings(baseLinkerProps.Whole_static_libs)
|
||||||
wholeArchiveDeps = bazel.MakeLabelListAttribute(android.BazelLabelForModuleWholeDepsExcludes(ctx, wholeArchiveLibs, baseLinkerProps.Exclude_static_libs))
|
wholeArchiveDeps = bazel.MakeLabelListAttribute(android.BazelLabelForModuleWholeDepsExcludes(ctx, wholeArchiveLibs, baseLinkerProps.Exclude_static_libs))
|
||||||
// TODO(b/186024507): Handle system_shared_libs as its own attribute, so that the appropriate default
|
|
||||||
// may be supported.
|
systemSharedLibs := android.FirstUniqueStrings(baseLinkerProps.System_shared_libs)
|
||||||
sharedLibs := android.FirstUniqueStrings(append(baseLinkerProps.Shared_libs, baseLinkerProps.System_shared_libs...))
|
systemSharedDeps = bazel.MakeLabelListAttribute(android.BazelLabelForModuleDeps(ctx, systemSharedLibs))
|
||||||
|
systemSharedDeps.ForceSpecifyEmptyList = true
|
||||||
|
if systemSharedDeps.Value.IsNil() && baseLinkerProps.System_shared_libs != nil {
|
||||||
|
systemSharedDeps.Value.Includes = []bazel.Label{}
|
||||||
|
}
|
||||||
|
|
||||||
|
sharedLibs := android.FirstUniqueStrings(baseLinkerProps.Shared_libs)
|
||||||
|
|
||||||
dynamicDeps = bazel.MakeLabelListAttribute(android.BazelLabelForModuleDepsExcludes(ctx, sharedLibs, baseLinkerProps.Exclude_shared_libs))
|
dynamicDeps = bazel.MakeLabelListAttribute(android.BazelLabelForModuleDepsExcludes(ctx, sharedLibs, baseLinkerProps.Exclude_shared_libs))
|
||||||
|
|
||||||
headerLibs := android.FirstUniqueStrings(baseLinkerProps.Header_libs)
|
headerLibs := android.FirstUniqueStrings(baseLinkerProps.Header_libs)
|
||||||
@@ -474,7 +493,14 @@ func bp2BuildParseLinkerProps(ctx android.TopDownMutatorContext, module *Module)
|
|||||||
staticDeps.SetSelectValue(axis, config, android.BazelLabelForModuleDepsExcludes(ctx, staticLibs, baseLinkerProps.Exclude_static_libs))
|
staticDeps.SetSelectValue(axis, config, android.BazelLabelForModuleDepsExcludes(ctx, staticLibs, baseLinkerProps.Exclude_static_libs))
|
||||||
wholeArchiveLibs := android.FirstUniqueStrings(baseLinkerProps.Whole_static_libs)
|
wholeArchiveLibs := android.FirstUniqueStrings(baseLinkerProps.Whole_static_libs)
|
||||||
wholeArchiveDeps.SetSelectValue(axis, config, android.BazelLabelForModuleWholeDepsExcludes(ctx, wholeArchiveLibs, baseLinkerProps.Exclude_static_libs))
|
wholeArchiveDeps.SetSelectValue(axis, config, android.BazelLabelForModuleWholeDepsExcludes(ctx, wholeArchiveLibs, baseLinkerProps.Exclude_static_libs))
|
||||||
sharedLibs := android.FirstUniqueStrings(append(baseLinkerProps.Shared_libs, baseLinkerProps.System_shared_libs...))
|
|
||||||
|
systemSharedLibs := android.FirstUniqueStrings(baseLinkerProps.System_shared_libs)
|
||||||
|
if len(systemSharedLibs) == 0 && baseLinkerProps.System_shared_libs != nil {
|
||||||
|
systemSharedLibs = baseLinkerProps.System_shared_libs
|
||||||
|
}
|
||||||
|
systemSharedDeps.SetSelectValue(axis, config, android.BazelLabelForModuleDeps(ctx, systemSharedLibs))
|
||||||
|
|
||||||
|
sharedLibs := android.FirstUniqueStrings(baseLinkerProps.Shared_libs)
|
||||||
dynamicDeps.SetSelectValue(axis, config, android.BazelLabelForModuleDepsExcludes(ctx, sharedLibs, baseLinkerProps.Exclude_shared_libs))
|
dynamicDeps.SetSelectValue(axis, config, android.BazelLabelForModuleDepsExcludes(ctx, sharedLibs, baseLinkerProps.Exclude_shared_libs))
|
||||||
|
|
||||||
headerLibs := android.FirstUniqueStrings(baseLinkerProps.Header_libs)
|
headerLibs := android.FirstUniqueStrings(baseLinkerProps.Header_libs)
|
||||||
@@ -553,6 +579,7 @@ func bp2BuildParseLinkerProps(ctx android.TopDownMutatorContext, module *Module)
|
|||||||
deps: headerDeps,
|
deps: headerDeps,
|
||||||
exportedDeps: exportedDeps,
|
exportedDeps: exportedDeps,
|
||||||
dynamicDeps: dynamicDeps,
|
dynamicDeps: dynamicDeps,
|
||||||
|
systemDynamicDeps: systemSharedDeps,
|
||||||
wholeArchiveDeps: wholeArchiveDeps,
|
wholeArchiveDeps: wholeArchiveDeps,
|
||||||
linkopts: linkopts,
|
linkopts: linkopts,
|
||||||
useLibcrt: useLibcrt,
|
useLibcrt: useLibcrt,
|
||||||
|
@@ -23,13 +23,12 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
"github.com/google/blueprint"
|
|
||||||
"github.com/google/blueprint/pathtools"
|
|
||||||
|
|
||||||
"android/soong/android"
|
"android/soong/android"
|
||||||
"android/soong/bazel"
|
"android/soong/bazel"
|
||||||
"android/soong/bazel/cquery"
|
"android/soong/bazel/cquery"
|
||||||
"android/soong/cc/config"
|
"android/soong/cc/config"
|
||||||
|
"github.com/google/blueprint"
|
||||||
|
"github.com/google/blueprint/pathtools"
|
||||||
)
|
)
|
||||||
|
|
||||||
// LibraryProperties is a collection of properties shared by cc library rules.
|
// LibraryProperties is a collection of properties shared by cc library rules.
|
||||||
@@ -233,6 +232,7 @@ type bazelCcLibraryAttributes struct {
|
|||||||
Implementation_deps bazel.LabelListAttribute
|
Implementation_deps bazel.LabelListAttribute
|
||||||
Dynamic_deps bazel.LabelListAttribute
|
Dynamic_deps bazel.LabelListAttribute
|
||||||
Whole_archive_deps bazel.LabelListAttribute
|
Whole_archive_deps bazel.LabelListAttribute
|
||||||
|
System_dynamic_deps bazel.LabelListAttribute
|
||||||
Includes bazel.StringListAttribute
|
Includes bazel.StringListAttribute
|
||||||
Linkopts bazel.StringListAttribute
|
Linkopts bazel.StringListAttribute
|
||||||
Use_libcrt bazel.BoolAttribute
|
Use_libcrt bazel.BoolAttribute
|
||||||
@@ -319,6 +319,7 @@ func CcLibraryBp2Build(ctx android.TopDownMutatorContext) {
|
|||||||
Deps: linkerAttrs.exportedDeps,
|
Deps: linkerAttrs.exportedDeps,
|
||||||
Dynamic_deps: linkerAttrs.dynamicDeps,
|
Dynamic_deps: linkerAttrs.dynamicDeps,
|
||||||
Whole_archive_deps: linkerAttrs.wholeArchiveDeps,
|
Whole_archive_deps: linkerAttrs.wholeArchiveDeps,
|
||||||
|
System_dynamic_deps: linkerAttrs.systemDynamicDeps,
|
||||||
Includes: exportedIncludes,
|
Includes: exportedIncludes,
|
||||||
Linkopts: linkerAttrs.linkopts,
|
Linkopts: linkerAttrs.linkopts,
|
||||||
Use_libcrt: linkerAttrs.useLibcrt,
|
Use_libcrt: linkerAttrs.useLibcrt,
|
||||||
@@ -2329,6 +2330,8 @@ type bazelCcLibraryStaticAttributes struct {
|
|||||||
Implementation_deps bazel.LabelListAttribute
|
Implementation_deps bazel.LabelListAttribute
|
||||||
Deps bazel.LabelListAttribute
|
Deps bazel.LabelListAttribute
|
||||||
Whole_archive_deps bazel.LabelListAttribute
|
Whole_archive_deps bazel.LabelListAttribute
|
||||||
|
Dynamic_deps bazel.LabelListAttribute
|
||||||
|
System_dynamic_deps bazel.LabelListAttribute
|
||||||
Linkopts bazel.StringListAttribute
|
Linkopts bazel.StringListAttribute
|
||||||
Linkstatic bool
|
Linkstatic bool
|
||||||
Use_libcrt bazel.BoolAttribute
|
Use_libcrt bazel.BoolAttribute
|
||||||
@@ -2340,6 +2343,8 @@ type bazelCcLibraryStaticAttributes struct {
|
|||||||
Conlyflags bazel.StringListAttribute
|
Conlyflags bazel.StringListAttribute
|
||||||
Srcs_as bazel.LabelListAttribute
|
Srcs_as bazel.LabelListAttribute
|
||||||
Asflags bazel.StringListAttribute
|
Asflags bazel.StringListAttribute
|
||||||
|
|
||||||
|
Static staticOrSharedAttributes
|
||||||
}
|
}
|
||||||
|
|
||||||
type bazelCcLibraryStatic struct {
|
type bazelCcLibraryStatic struct {
|
||||||
@@ -2365,12 +2370,28 @@ func ccLibraryStaticBp2BuildInternal(ctx android.TopDownMutatorContext, module *
|
|||||||
asFlags = bazel.MakeStringListAttribute(nil)
|
asFlags = bazel.MakeStringListAttribute(nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Append static{} stanza properties. These won't be specified on
|
||||||
|
// cc_library_static itself, but may be specified in cc_defaults that this module
|
||||||
|
// depends on.
|
||||||
|
staticAttrs := bp2BuildParseStaticProps(ctx, module)
|
||||||
|
|
||||||
|
compilerAttrs.srcs.Append(staticAttrs.Srcs)
|
||||||
|
compilerAttrs.cSrcs.Append(staticAttrs.Srcs_c)
|
||||||
|
compilerAttrs.asSrcs.Append(staticAttrs.Srcs_as)
|
||||||
|
compilerAttrs.copts.Append(staticAttrs.Copts)
|
||||||
|
linkerAttrs.exportedDeps.Append(staticAttrs.Static_deps)
|
||||||
|
linkerAttrs.dynamicDeps.Append(staticAttrs.Dynamic_deps)
|
||||||
|
linkerAttrs.wholeArchiveDeps.Append(staticAttrs.Whole_archive_deps)
|
||||||
|
linkerAttrs.systemDynamicDeps.Append(staticAttrs.System_dynamic_deps)
|
||||||
|
|
||||||
attrs := &bazelCcLibraryStaticAttributes{
|
attrs := &bazelCcLibraryStaticAttributes{
|
||||||
Copts: compilerAttrs.copts,
|
Copts: compilerAttrs.copts,
|
||||||
Srcs: compilerAttrs.srcs,
|
Srcs: compilerAttrs.srcs,
|
||||||
Implementation_deps: linkerAttrs.deps,
|
Implementation_deps: linkerAttrs.deps,
|
||||||
Deps: linkerAttrs.exportedDeps,
|
Deps: linkerAttrs.exportedDeps,
|
||||||
Whole_archive_deps: linkerAttrs.wholeArchiveDeps,
|
Whole_archive_deps: linkerAttrs.wholeArchiveDeps,
|
||||||
|
Dynamic_deps: linkerAttrs.dynamicDeps,
|
||||||
|
System_dynamic_deps: linkerAttrs.systemDynamicDeps,
|
||||||
|
|
||||||
Linkopts: linkerAttrs.linkopts,
|
Linkopts: linkerAttrs.linkopts,
|
||||||
Linkstatic: true,
|
Linkstatic: true,
|
||||||
|
@@ -108,6 +108,7 @@ type bazelCcLibraryHeadersAttributes struct {
|
|||||||
Includes bazel.StringListAttribute
|
Includes bazel.StringListAttribute
|
||||||
Deps bazel.LabelListAttribute
|
Deps bazel.LabelListAttribute
|
||||||
Implementation_deps bazel.LabelListAttribute
|
Implementation_deps bazel.LabelListAttribute
|
||||||
|
System_dynamic_deps bazel.LabelListAttribute
|
||||||
}
|
}
|
||||||
|
|
||||||
type bazelCcLibraryHeaders struct {
|
type bazelCcLibraryHeaders struct {
|
||||||
@@ -146,6 +147,7 @@ func CcLibraryHeadersBp2Build(ctx android.TopDownMutatorContext) {
|
|||||||
Includes: exportedIncludes,
|
Includes: exportedIncludes,
|
||||||
Implementation_deps: linkerAttrs.deps,
|
Implementation_deps: linkerAttrs.deps,
|
||||||
Deps: linkerAttrs.exportedDeps,
|
Deps: linkerAttrs.exportedDeps,
|
||||||
|
System_dynamic_deps: linkerAttrs.systemDynamicDeps,
|
||||||
}
|
}
|
||||||
|
|
||||||
props := bazel.BazelTargetModuleProperties{
|
props := bazel.BazelTargetModuleProperties{
|
||||||
|
Reference in New Issue
Block a user