Handle product config specific header_libs prop in cc bp2build
Product variable header_libs is able to be converted. Since static_libs and header_libs both use implementationDeps, also added logic to make sure they both contribute to bazel target. Bug: 228314770 Test: m bp2build Test: TestCcLibraryProductVariablesHeaderLibs in cc_library_conversion_test Change-Id: I370fc75b666b3908b6ac5ed42bca5560f957fc42
This commit is contained in:
@@ -407,7 +407,6 @@ var (
|
|||||||
"libgtest_ndk_c++", "libgtest_main_ndk_c++", // TODO(b/201816222): Requires sdk_version support.
|
"libgtest_ndk_c++", "libgtest_main_ndk_c++", // TODO(b/201816222): Requires sdk_version support.
|
||||||
"linkerconfig", "mdnsd", // TODO(b/202876379): has arch-variant static_executable
|
"linkerconfig", "mdnsd", // TODO(b/202876379): has arch-variant static_executable
|
||||||
"linker", // TODO(b/228316882): cc_binary uses link_crt
|
"linker", // TODO(b/228316882): cc_binary uses link_crt
|
||||||
"libdebuggerd", // TODO(b/228314770): support product variable-specific header_libs
|
|
||||||
"versioner", // TODO(b/228313961): depends on prebuilt shared library libclang-cpp_host as a shared library, which does not supply expected providers for a shared library
|
"versioner", // TODO(b/228313961): depends on prebuilt shared library libclang-cpp_host as a shared library, which does not supply expected providers for a shared library
|
||||||
"libspeexresampler", // TODO(b/231995978): Filter out unknown cflags
|
"libspeexresampler", // TODO(b/231995978): Filter out unknown cflags
|
||||||
"libvpx", // TODO(b/240756936): Arm neon variant not supported
|
"libvpx", // TODO(b/240756936): Arm neon variant not supported
|
||||||
@@ -485,6 +484,7 @@ var (
|
|||||||
"libartbased-art-gtest", // depends on unconverted modules: libgtest_isolated, libartd, libartd-compiler, libdexfiled, libprofiled
|
"libartbased-art-gtest", // depends on unconverted modules: libgtest_isolated, libartd, libartd-compiler, libdexfiled, libprofiled
|
||||||
"libartd", // depends on unconverted modules: art_operator_srcs, libcpu_features, libodrstatslog, libelffiled, art_cmdlineparser_headers, cpp-define-generator-definitions, libdexfiled, libnativebridge, libnativeloader, libsigchain, libartbased, libprofiled, cpp-define-generator-asm-support, apex-info-list-tinyxml, libtinyxml2, libnativeloader-headers, heapprofd_client_api
|
"libartd", // depends on unconverted modules: art_operator_srcs, libcpu_features, libodrstatslog, libelffiled, art_cmdlineparser_headers, cpp-define-generator-definitions, libdexfiled, libnativebridge, libnativeloader, libsigchain, libartbased, libprofiled, cpp-define-generator-asm-support, apex-info-list-tinyxml, libtinyxml2, libnativeloader-headers, heapprofd_client_api
|
||||||
"libartd-runtime-gtest", // depends on unconverted modules: libgtest_isolated, libartd-compiler, libdexfiled, libprofiled, libartbased, libartbased-art-gtest
|
"libartd-runtime-gtest", // depends on unconverted modules: libgtest_isolated, libartd-compiler, libdexfiled, libprofiled, libartbased, libartbased-art-gtest
|
||||||
|
"libdebuggerd", // depends on unconverted module: libdexfile
|
||||||
"libdebuggerd_handler", // depends on unconverted module libdebuggerd_handler_core
|
"libdebuggerd_handler", // depends on unconverted module libdebuggerd_handler_core
|
||||||
"libdebuggerd_handler_core", "libdebuggerd_handler_fallback", // depends on unconverted module libdebuggerd
|
"libdebuggerd_handler_core", "libdebuggerd_handler_fallback", // depends on unconverted module libdebuggerd
|
||||||
"libdexfile", // depends on unconverted modules: dexfile_operator_srcs, libartbase, libartpalette,
|
"libdexfile", // depends on unconverted modules: dexfile_operator_srcs, libartbase, libartpalette,
|
||||||
|
@@ -1199,6 +1199,40 @@ cc_library {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestCcLibraryProductVariablesHeaderLibs(t *testing.T) {
|
||||||
|
runCcLibraryTestCase(t, Bp2buildTestCase{
|
||||||
|
ModuleTypeUnderTest: "cc_library",
|
||||||
|
ModuleTypeUnderTestFactory: cc.LibraryFactory,
|
||||||
|
Filesystem: map[string]string{},
|
||||||
|
Blueprint: soongCcLibraryStaticPreamble + `
|
||||||
|
cc_library {
|
||||||
|
name: "foo_static",
|
||||||
|
srcs: ["common.c"],
|
||||||
|
product_variables: {
|
||||||
|
malloc_not_svelte: {
|
||||||
|
header_libs: ["malloc_not_svelte_header_lib"],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
include_build_directory: false,
|
||||||
|
}
|
||||||
|
|
||||||
|
cc_library {
|
||||||
|
name: "malloc_not_svelte_header_lib",
|
||||||
|
bazel_module: { bp2build_available: false },
|
||||||
|
}
|
||||||
|
`,
|
||||||
|
ExpectedBazelTargets: makeCcLibraryTargets("foo_static", AttrNameToString{
|
||||||
|
"implementation_deps": `select({
|
||||||
|
"//build/bazel/product_variables:malloc_not_svelte": [":malloc_not_svelte_header_lib"],
|
||||||
|
"//conditions:default": [],
|
||||||
|
})`,
|
||||||
|
"srcs_c": `["common.c"]`,
|
||||||
|
"target_compatible_with": `["//build/bazel/platforms/os:android"]`,
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
func TestCCLibraryNoCrtTrue(t *testing.T) {
|
func TestCCLibraryNoCrtTrue(t *testing.T) {
|
||||||
runCcLibraryTestCase(t, Bp2buildTestCase{
|
runCcLibraryTestCase(t, Bp2buildTestCase{
|
||||||
Description: "cc_library - nocrt: true emits attribute",
|
Description: "cc_library - nocrt: true emits attribute",
|
||||||
|
@@ -850,11 +850,17 @@ func (la *linkerAttributes) convertProductVariables(ctx android.BazelConversionP
|
|||||||
depResolutionFunc func(ctx android.BazelConversionPathContext, modules, excludes []string) bazel.LabelList
|
depResolutionFunc func(ctx android.BazelConversionPathContext, modules, excludes []string) bazel.LabelList
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// an intermediate attribute that holds Header_libs info, and will be appended to
|
||||||
|
// implementationDeps at the end, to solve the confliction that both header_libs
|
||||||
|
// and static_libs use implementationDeps.
|
||||||
|
var headerDeps bazel.LabelListAttribute
|
||||||
|
|
||||||
productVarToDepFields := map[string]productVarDep{
|
productVarToDepFields := map[string]productVarDep{
|
||||||
// product variables do not support exclude_shared_libs
|
// product variables do not support exclude_shared_libs
|
||||||
"Shared_libs": {attribute: &la.implementationDynamicDeps, depResolutionFunc: bazelLabelForSharedDepsExcludes},
|
"Shared_libs": {attribute: &la.implementationDynamicDeps, depResolutionFunc: bazelLabelForSharedDepsExcludes},
|
||||||
"Static_libs": {"Exclude_static_libs", &la.implementationDeps, bazelLabelForStaticDepsExcludes},
|
"Static_libs": {"Exclude_static_libs", &la.implementationDeps, bazelLabelForStaticDepsExcludes},
|
||||||
"Whole_static_libs": {"Exclude_static_libs", &la.wholeArchiveDeps, bazelLabelForWholeDepsExcludes},
|
"Whole_static_libs": {"Exclude_static_libs", &la.wholeArchiveDeps, bazelLabelForWholeDepsExcludes},
|
||||||
|
"Header_libs": {attribute: &headerDeps, depResolutionFunc: bazelLabelForHeaderDepsExcludes},
|
||||||
}
|
}
|
||||||
|
|
||||||
for name, dep := range productVarToDepFields {
|
for name, dep := range productVarToDepFields {
|
||||||
@@ -896,6 +902,7 @@ func (la *linkerAttributes) convertProductVariables(ctx android.BazelConversionP
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
la.implementationDeps.Append(headerDeps)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (la *linkerAttributes) finalize(ctx android.BazelConversionPathContext) {
|
func (la *linkerAttributes) finalize(ctx android.BazelConversionPathContext) {
|
||||||
@@ -1024,6 +1031,12 @@ func bazelLabelForHeaderDeps(ctx android.BazelConversionPathContext, modules []s
|
|||||||
return bazelLabelForSharedDeps(ctx, modules)
|
return bazelLabelForSharedDeps(ctx, modules)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func bazelLabelForHeaderDepsExcludes(ctx android.BazelConversionPathContext, modules, excludes []string) bazel.LabelList {
|
||||||
|
// This is only used when product_variable header_libs is processed, to follow
|
||||||
|
// the pattern of depResolutionFunc
|
||||||
|
return android.BazelLabelForModuleDepsExcludesWithFn(ctx, modules, excludes, bazelLabelForSharedModule)
|
||||||
|
}
|
||||||
|
|
||||||
func bazelLabelForSharedDepsExcludes(ctx android.BazelConversionPathContext, modules, excludes []string) bazel.LabelList {
|
func bazelLabelForSharedDepsExcludes(ctx android.BazelConversionPathContext, modules, excludes []string) bazel.LabelList {
|
||||||
return android.BazelLabelForModuleDepsExcludesWithFn(ctx, modules, excludes, bazelLabelForSharedModule)
|
return android.BazelLabelForModuleDepsExcludesWithFn(ctx, modules, excludes, bazelLabelForSharedModule)
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user