refactor bp2build module allowlists into struct

To make testing easier, refactor existing module-global variables into a
struct that can be mocked.

Test: build/bazel/bp2build.go
Change-Id: I9d177677644ea743641a745b1839a3a8b29f902a
This commit is contained in:
Sam Delmerico
2022-03-28 19:53:03 +00:00
parent 5e7455996e
commit 24c5603815
12 changed files with 698 additions and 527 deletions

View File

@@ -19,6 +19,7 @@ bootstrap_go_package {
"soong-shared", "soong-shared",
"soong-starlark-format", "soong-starlark-format",
"soong-ui-metrics_proto", "soong-ui-metrics_proto",
"soong-android-allowlists",
"golang-protobuf-proto", "golang-protobuf-proto",
"golang-protobuf-encoding-prototext", "golang-protobuf-encoding-prototext",

View File

@@ -0,0 +1,25 @@
// Copyright 2022 Google Inc. All rights reserved.
//
// 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 {
default_applicable_licenses: ["Android-Apache-2.0"],
}
bootstrap_go_package {
name: "soong-android-allowlists",
pkgPath: "android/soong/android/allowlists",
srcs: [
"allowlists.go",
],
}

View File

@@ -0,0 +1,414 @@
// Copyright 2022 Google Inc. All rights reserved.
//
// 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 allowlists
// Configuration to decide if modules in a directory should default to true/false for bp2build_available
type Bp2BuildConfig map[string]BazelConversionConfigEntry
type BazelConversionConfigEntry int
const (
// iota + 1 ensures that the int value is not 0 when used in the Bp2buildAllowlist map,
// which can also mean that the key doesn't exist in a lookup.
// all modules in this package and subpackages default to bp2build_available: true.
// allows modules to opt-out.
Bp2BuildDefaultTrueRecursively BazelConversionConfigEntry = iota + 1
// all modules in this package (not recursively) default to bp2build_available: true.
// allows modules to opt-out.
Bp2BuildDefaultTrue
// all modules in this package (not recursively) default to bp2build_available: false.
// allows modules to opt-in.
Bp2BuildDefaultFalse
)
var (
Bp2buildDefaultConfig = Bp2BuildConfig{
"art/libartpalette": Bp2BuildDefaultTrueRecursively,
"art/libdexfile": Bp2BuildDefaultTrueRecursively,
"art/runtime": Bp2BuildDefaultTrueRecursively,
"art/tools": Bp2BuildDefaultTrue,
"bionic": Bp2BuildDefaultTrueRecursively,
"bootable/recovery/tools/recovery_l10n": Bp2BuildDefaultTrue,
"build/bazel/examples/soong_config_variables": Bp2BuildDefaultTrueRecursively,
"build/bazel/examples/apex/minimal": Bp2BuildDefaultTrueRecursively,
"build/make/tools/signapk": Bp2BuildDefaultTrue,
"build/make/target/product/security": Bp2BuildDefaultTrue,
"build/soong": Bp2BuildDefaultTrue,
"build/soong/cc/libbuildversion": Bp2BuildDefaultTrue, // Skip tests subdir
"build/soong/cc/ndkstubgen": Bp2BuildDefaultTrue,
"build/soong/cc/symbolfile": Bp2BuildDefaultTrue,
"build/soong/linkerconfig": Bp2BuildDefaultTrueRecursively,
"build/soong/scripts": Bp2BuildDefaultTrueRecursively,
"cts/common/device-side/nativetesthelper/jni": Bp2BuildDefaultTrueRecursively,
"development/apps/DevelopmentSettings": Bp2BuildDefaultTrue,
"development/apps/Fallback": Bp2BuildDefaultTrue,
"development/apps/WidgetPreview": Bp2BuildDefaultTrue,
"development/samples/BasicGLSurfaceView": Bp2BuildDefaultTrue,
"development/samples/BluetoothChat": Bp2BuildDefaultTrue,
"development/samples/BrokenKeyDerivation": Bp2BuildDefaultTrue,
"development/samples/Compass": Bp2BuildDefaultTrue,
"development/samples/ContactManager": Bp2BuildDefaultTrue,
"development/samples/FixedGridLayout": Bp2BuildDefaultTrue,
"development/samples/HelloEffects": Bp2BuildDefaultTrue,
"development/samples/Home": Bp2BuildDefaultTrue,
"development/samples/HoneycombGallery": Bp2BuildDefaultTrue,
"development/samples/JetBoy": Bp2BuildDefaultTrue,
"development/samples/KeyChainDemo": Bp2BuildDefaultTrue,
"development/samples/LceDemo": Bp2BuildDefaultTrue,
"development/samples/LunarLander": Bp2BuildDefaultTrue,
"development/samples/MultiResolution": Bp2BuildDefaultTrue,
"development/samples/MultiWindow": Bp2BuildDefaultTrue,
"development/samples/NotePad": Bp2BuildDefaultTrue,
"development/samples/Obb": Bp2BuildDefaultTrue,
"development/samples/RSSReader": Bp2BuildDefaultTrue,
"development/samples/ReceiveShareDemo": Bp2BuildDefaultTrue,
"development/samples/SearchableDictionary": Bp2BuildDefaultTrue,
"development/samples/SipDemo": Bp2BuildDefaultTrue,
"development/samples/SkeletonApp": Bp2BuildDefaultTrue,
"development/samples/Snake": Bp2BuildDefaultTrue,
"development/samples/SpellChecker/": Bp2BuildDefaultTrueRecursively,
"development/samples/ThemedNavBarKeyboard": Bp2BuildDefaultTrue,
"development/samples/ToyVpn": Bp2BuildDefaultTrue,
"development/samples/TtsEngine": Bp2BuildDefaultTrue,
"development/samples/USB/AdbTest": Bp2BuildDefaultTrue,
"development/samples/USB/MissileLauncher": Bp2BuildDefaultTrue,
"development/samples/VoiceRecognitionService": Bp2BuildDefaultTrue,
"development/samples/VoicemailProviderDemo": Bp2BuildDefaultTrue,
"development/samples/WiFiDirectDemo": Bp2BuildDefaultTrue,
"development/sdk": Bp2BuildDefaultTrueRecursively,
"external/arm-optimized-routines": Bp2BuildDefaultTrueRecursively,
"external/auto/android-annotation-stubs": Bp2BuildDefaultTrueRecursively,
"external/auto/common": Bp2BuildDefaultTrueRecursively,
"external/auto/service": Bp2BuildDefaultTrueRecursively,
"external/boringssl": Bp2BuildDefaultTrueRecursively,
"external/bouncycastle": Bp2BuildDefaultTrue,
"external/brotli": Bp2BuildDefaultTrue,
"external/conscrypt": Bp2BuildDefaultTrue,
"external/e2fsprogs": Bp2BuildDefaultTrueRecursively,
"external/error_prone": Bp2BuildDefaultTrueRecursively,
"external/fmtlib": Bp2BuildDefaultTrueRecursively,
"external/google-benchmark": Bp2BuildDefaultTrueRecursively,
"external/googletest": Bp2BuildDefaultTrueRecursively,
"external/gwp_asan": Bp2BuildDefaultTrueRecursively,
"external/icu": Bp2BuildDefaultTrueRecursively,
"external/icu/android_icu4j": Bp2BuildDefaultFalse, // java rules incomplete
"external/icu/icu4j": Bp2BuildDefaultFalse, // java rules incomplete
"external/javapoet": Bp2BuildDefaultTrueRecursively,
"external/jemalloc_new": Bp2BuildDefaultTrueRecursively,
"external/jsoncpp": Bp2BuildDefaultTrueRecursively,
"external/libcap": Bp2BuildDefaultTrueRecursively,
"external/libcxx": Bp2BuildDefaultTrueRecursively,
"external/libcxxabi": Bp2BuildDefaultTrueRecursively,
"external/libevent": Bp2BuildDefaultTrueRecursively,
"external/libpng": Bp2BuildDefaultTrueRecursively,
"external/lz4/lib": Bp2BuildDefaultTrue,
"external/lzma/C": Bp2BuildDefaultTrueRecursively,
"external/mdnsresponder": Bp2BuildDefaultTrueRecursively,
"external/minijail": Bp2BuildDefaultTrueRecursively,
"external/pcre": Bp2BuildDefaultTrueRecursively,
"external/protobuf": Bp2BuildDefaultTrueRecursively,
"external/python/six": Bp2BuildDefaultTrueRecursively,
"external/scudo": Bp2BuildDefaultTrueRecursively,
"external/selinux/libselinux": Bp2BuildDefaultTrueRecursively,
"external/selinux/libsepol": Bp2BuildDefaultTrueRecursively,
"external/zlib": Bp2BuildDefaultTrueRecursively,
"external/zstd": Bp2BuildDefaultTrueRecursively,
"frameworks/base/media/tests/MediaDump": Bp2BuildDefaultTrue,
"frameworks/base/startop/apps/test": Bp2BuildDefaultTrue,
"frameworks/base/tests/appwidgets/AppWidgetHostTest": Bp2BuildDefaultTrueRecursively,
"frameworks/native/libs/adbd_auth": Bp2BuildDefaultTrueRecursively,
"frameworks/native/opengl/tests/gl2_cameraeye": Bp2BuildDefaultTrue,
"frameworks/native/opengl/tests/gl2_java": Bp2BuildDefaultTrue,
"frameworks/native/opengl/tests/testLatency": Bp2BuildDefaultTrue,
"frameworks/native/opengl/tests/testPauseResume": Bp2BuildDefaultTrue,
"frameworks/native/opengl/tests/testViewport": Bp2BuildDefaultTrue,
"frameworks/proto_logging/stats/stats_log_api_gen": Bp2BuildDefaultTrueRecursively,
"libnativehelper": Bp2BuildDefaultTrueRecursively,
"packages/apps/DevCamera": Bp2BuildDefaultTrue,
"packages/apps/HTMLViewer": Bp2BuildDefaultTrue,
"packages/apps/Protips": Bp2BuildDefaultTrue,
"packages/modules/StatsD/lib/libstatssocket": Bp2BuildDefaultTrueRecursively,
"packages/modules/adb": Bp2BuildDefaultTrue,
"packages/modules/adb/apex": Bp2BuildDefaultTrue,
"packages/modules/adb/crypto": Bp2BuildDefaultTrueRecursively,
"packages/modules/adb/libs": Bp2BuildDefaultTrueRecursively,
"packages/modules/adb/pairing_auth": Bp2BuildDefaultTrueRecursively,
"packages/modules/adb/pairing_connection": Bp2BuildDefaultTrueRecursively,
"packages/modules/adb/proto": Bp2BuildDefaultTrueRecursively,
"packages/modules/adb/tls": Bp2BuildDefaultTrueRecursively,
"packages/providers/MediaProvider/tools/dialogs": Bp2BuildDefaultTrue,
"packages/screensavers/Basic": Bp2BuildDefaultTrue,
"packages/services/Car/tests/SampleRearViewCamera": Bp2BuildDefaultTrue,
"prebuilts/clang/host/linux-x86": Bp2BuildDefaultTrueRecursively,
"prebuilts/tools/common/m2": Bp2BuildDefaultTrue,
"system/apex": Bp2BuildDefaultFalse, // TODO(b/207466993): flaky failures
"system/apex/proto": Bp2BuildDefaultTrueRecursively,
"system/apex/libs": Bp2BuildDefaultTrueRecursively,
"system/core/debuggerd": Bp2BuildDefaultTrueRecursively,
"system/core/diagnose_usb": Bp2BuildDefaultTrueRecursively,
"system/core/libasyncio": Bp2BuildDefaultTrue,
"system/core/libcrypto_utils": Bp2BuildDefaultTrueRecursively,
"system/core/libcutils": Bp2BuildDefaultTrueRecursively,
"system/core/libpackagelistparser": Bp2BuildDefaultTrueRecursively,
"system/core/libprocessgroup": Bp2BuildDefaultTrue,
"system/core/libprocessgroup/cgrouprc": Bp2BuildDefaultTrue,
"system/core/libprocessgroup/cgrouprc_format": Bp2BuildDefaultTrue,
"system/core/libsystem": Bp2BuildDefaultTrueRecursively,
"system/core/libutils": Bp2BuildDefaultTrueRecursively,
"system/core/libvndksupport": Bp2BuildDefaultTrueRecursively,
"system/core/property_service/libpropertyinfoparser": Bp2BuildDefaultTrueRecursively,
"system/libbase": Bp2BuildDefaultTrueRecursively,
"system/libprocinfo": Bp2BuildDefaultTrue,
"system/libziparchive": Bp2BuildDefaultTrueRecursively,
"system/logging/liblog": Bp2BuildDefaultTrueRecursively,
"system/sepolicy/apex": Bp2BuildDefaultTrueRecursively,
"system/timezone/apex": Bp2BuildDefaultTrueRecursively,
"system/timezone/output_data": Bp2BuildDefaultTrueRecursively,
"system/unwinding/libbacktrace": Bp2BuildDefaultTrueRecursively,
"system/unwinding/libunwindstack": Bp2BuildDefaultTrueRecursively,
"tools/apksig": Bp2BuildDefaultTrue,
"tools/platform-compat/java/android/compat": Bp2BuildDefaultTrueRecursively,
}
Bp2buildKeepExistingBuildFile = map[string]bool{
// This is actually build/bazel/build.BAZEL symlinked to ./BUILD
".":/*recursive = */ false,
// build/bazel/examples/apex/... BUILD files should be generated, so
// build/bazel is not recursive. Instead list each subdirectory under
// build/bazel explicitly.
"build/bazel":/* recursive = */ false,
"build/bazel/ci/dist":/* recursive = */ false,
"build/bazel/examples/android_app":/* recursive = */ true,
"build/bazel/examples/java":/* recursive = */ true,
"build/bazel/bazel_skylib":/* recursive = */ true,
"build/bazel/rules":/* recursive = */ true,
"build/bazel/rules_cc":/* recursive = */ true,
"build/bazel/scripts":/* recursive = */ true,
"build/bazel/tests":/* recursive = */ true,
"build/bazel/platforms":/* recursive = */ true,
"build/bazel/product_variables":/* recursive = */ true,
"build/bazel/vendor/google":/* recursive = */ true,
"build/bazel_common_rules":/* recursive = */ true,
// build/make/tools/signapk BUILD file is generated, so build/make/tools is not recursive.
"build/make/tools":/* recursive = */ false,
"build/pesto":/* recursive = */ true,
// external/bazelbuild-rules_android/... is needed by mixed builds, otherwise mixed builds analysis fails
// e.g. ERROR: Analysis of target '@soong_injection//mixed_builds:buildroot' failed
"external/bazelbuild-rules_android":/* recursive = */ true,
"external/bazel-skylib":/* recursive = */ true,
"external/guava":/* recursive = */ true,
"external/jsr305":/* recursive = */ true,
"frameworks/ex/common":/* recursive = */ true,
"packages/apps/Music":/* recursive = */ true,
"packages/apps/QuickSearchBox":/* recursive = */ true,
"packages/apps/WallpaperPicker":/* recursive = */ false,
"prebuilts/bundletool":/* recursive = */ true,
"prebuilts/gcc":/* recursive = */ true,
"prebuilts/build-tools":/* recursive = */ false,
"prebuilts/jdk/jdk11":/* recursive = */ false,
"prebuilts/sdk":/* recursive = */ false,
"prebuilts/sdk/current/extras/app-toolkit":/* recursive = */ false,
"prebuilts/sdk/current/support":/* recursive = */ false,
"prebuilts/sdk/tools":/* recursive = */ false,
"prebuilts/r8":/* recursive = */ false,
}
Bp2buildModuleAlwaysConvertList = []string{
//external/avb
"avbtool",
"libavb",
"avb_headers",
//external/fec
"libfec_rs",
//system/core/libsparse
"libsparse",
//system/extras/ext4_utils
"libext4_utils",
//system/extras/libfec
"libfec",
//system/extras/squashfs_utils
"libsquashfs_utils",
//system/extras/verity/fec
"fec",
//packages/apps/Car/libs/car-ui-lib/car-ui-androidx
// genrule dependencies for java_imports
"car-ui-androidx-annotation-nodeps",
"car-ui-androidx-collection-nodeps",
"car-ui-androidx-core-common-nodeps",
"car-ui-androidx-lifecycle-common-nodeps",
"car-ui-androidx-constraintlayout-solver-nodeps",
}
Bp2buildModuleTypeAlwaysConvertList = []string{
"java_import",
"java_import_host",
}
Bp2buildModuleDoNotConvertList = []string{
// cc bugs
"libsepol", // TODO(b/207408632): Unsupported case of .l sources in cc library rules
"libactivitymanager_aidl", // TODO(b/207426160): Unsupported use of aidl sources (via Dactivity_manager_procstate_aidl) in a cc_library
"gen-kotlin-build-file.py", // TODO(b/198619163) module has same name as source
"libgtest_ndk_c++", "libgtest_main_ndk_c++", // TODO(b/201816222): Requires sdk_version support.
"linkerconfig", "mdnsd", // TODO(b/202876379): has arch-variant static_executable
"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
// java bugs
"libbase_ndk", // TODO(b/186826477): fails to link libctscamera2_jni for device (required for CtsCameraTestCases)
// python protos
"libprotobuf-python", // TODO(b/196084681): contains .proto sources
"apex_build_info_proto", "apex_manifest_proto", // TODO(b/196084681): a python lib with proto sources
"linker_config_proto", // TODO(b/196084681): contains .proto sources
// genrule incompatibilities
"brotli-fuzzer-corpus", // TODO(b/202015218): outputs are in location incompatible with bazel genrule handling.
"platform_tools_properties", "build_tools_source_properties", // TODO(b/203369847): multiple genrules in the same package creating the same file
// aar support
"prebuilt_car-ui-androidx-core-common", // TODO(b/224773339), genrule dependency creates an .aar, not a .jar
"prebuilt_platform-robolectric-4.4-prebuilt", // aosp/1999250, needs .aar support in Jars
"prebuilt_platform-robolectric-4.5.1-prebuilt", // aosp/1999250, needs .aar support in Jars
// path property for filegroups
"conscrypt", // TODO(b/210751803), we don't handle path property for filegroups
"conscrypt-for-host", // TODO(b/210751803), we don't handle path property for filegroups
"host-libprotobuf-java-full", // TODO(b/210751803), we don't handle path property for filegroups
"libprotobuf-internal-protos", // TODO(b/210751803), we don't handle path property for filegroups
"libprotobuf-internal-python-srcs", // TODO(b/210751803), we don't handle path property for filegroups
"libprotobuf-java-full", // TODO(b/210751803), we don't handle path property for filegroups
"libprotobuf-java-util-full", // TODO(b/210751803), we don't handle path property for filegroups
// go deps:
"analyze_bcpf", // depends on bpmodify a blueprint_go_binary.
"apex-protos", // depends on soong_zip, a go binary
"generated_android_icu4j_src_files", "generated_android_icu4j_test_files", "icu4c_test_data", // depends on unconverted modules: soong_zip
"host_bionic_linker_asm", // depends on extract_linker, a go binary.
"host_bionic_linker_script", // depends on extract_linker, a go binary.
"libc_musl_sysroot_bionic_arch_headers", // depends on soong_zip
"libc_musl_sysroot_bionic_headers", // 218405924, depends on soong_zip and generates duplicate srcs
"libc_musl_sysroot_libc++_headers", "libc_musl_sysroot_libc++abi_headers", // depends on soong_zip, zip2zip
"robolectric-sqlite4java-native", // depends on soong_zip, a go binary
"robolectric_tzdata", // depends on soong_zip, a go binary
// rust support
"libtombstoned_client_rust_bridge_code", "libtombstoned_client_wrapper", // rust conversions are not supported
// unconverted deps
"CarHTMLViewer", // depends on unconverted modules android.car-stubs, car-ui-lib
"abb", // depends on unconverted modules: libcmd, libbinder
"adb", // depends on unconverted modules: AdbWinApi, libandroidfw, libopenscreen-discovery, libopenscreen-platform-impl, libusb, bin2c_fastdeployagent, AdbWinUsbApi
"android_icu4j_srcgen", // depends on unconverted modules: currysrc
"android_icu4j_srcgen_binary", // depends on unconverted modules: android_icu4j_srcgen, currysrc
"apex_manifest_proto_java", // b/210751803, depends on libprotobuf-java-full
"art-script", // depends on unconverted modules: dalvikvm, dex2oat
"bin2c_fastdeployagent", // depends on unconverted modules: deployagent
"chkcon", "sefcontext_compile", // depends on unconverted modules: libsepol
"com.android.runtime", // depends on unconverted modules: bionic-linker-config, linkerconfig
"conv_linker_config", // depends on unconverted modules: linker_config_proto
"currysrc", // depends on unconverted modules: currysrc_org.eclipse, guavalib, jopt-simple-4.9
"dex2oat-script", // depends on unconverted modules: dex2oat
"generated_android_icu4j_resources", // depends on unconverted modules: android_icu4j_srcgen_binary, soong_zip
"generated_android_icu4j_test_resources", // depends on unconverted modules: android_icu4j_srcgen_binary, soong_zip
"host-libprotobuf-java-nano", // b/220869005, depends on libprotobuf-java-nano
"libadb_host", // depends on unconverted modules: AdbWinApi, libopenscreen-discovery, libopenscreen-platform-impl, libusb
"libart", // depends on unconverted modules: apex-info-list-tinyxml, libtinyxml2, libnativeloader-headers, heapprofd_client_api, art_operator_srcs, libcpu_features, libodrstatslog, libelffile, art_cmdlineparser_headers, cpp-define-generator-definitions, libdexfile, libnativebridge, libnativeloader, libsigchain, libartbase, libprofile, cpp-define-generator-asm-support
"libart-runtime-gtest", // depends on unconverted modules: libgtest_isolated, libart-compiler, libdexfile, libprofile, libartbase, libartbase-art-gtest
"libart_headers", // depends on unconverted modules: art_libartbase_headers
"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
"libdebuggerd_handler", // depends on unconverted module libdebuggerd_handler_core
"libdebuggerd_handler_core", "libdebuggerd_handler_fallback", // depends on unconverted module libdebuggerd
"libdexfile", // depends on unconverted modules: dexfile_operator_srcs, libartbase, libartpalette,
"libdexfile_static", // depends on unconverted modules: libartbase, libdexfile
"libdexfiled", // depends on unconverted modules: dexfile_operator_srcs, libartbased, libartpalette
"libfastdeploy_host", // depends on unconverted modules: libandroidfw, libusb, AdbWinApi
"libgmock_main_ndk", // depends on unconverted modules: libgtest_ndk_c++
"libgmock_ndk", // depends on unconverted modules: libgtest_ndk_c++
"libnativehelper_lazy_mts_jni", "libnativehelper_mts_jni", // depends on unconverted modules: libnativetesthelper_jni, libgmock_ndk
"libnativetesthelper_jni", // depends on unconverted modules: libgtest_ndk_c++
"libprotobuf-java-nano", // b/220869005, depends on non-public_current SDK
"libstatslog", // depends on unconverted modules: libstatspull, statsd-aidl-ndk, libbinder_ndk
"libstatslog_art", // depends on unconverted modules: statslog_art.cpp, statslog_art.h
"linker_reloc_bench_main", // depends on unconverted modules: liblinker_reloc_bench_*
"pbtombstone", "crash_dump", // depends on libdebuggerd, libunwindstack
"robolectric-sqlite4java-0.282", // depends on unconverted modules: robolectric-sqlite4java-import, robolectric-sqlite4java-native
"static_crasher", // depends on unconverted modules: libdebuggerd_handler
"stats-log-api-gen", // depends on unconverted modules: libstats_proto_host
"statslog.cpp", "statslog.h", "statslog.rs", // depends on unconverted modules: stats-log-api-gen
"statslog_art.cpp", "statslog_art.h", "statslog_header.rs", // depends on unconverted modules: stats-log-api-gen
"timezone-host", // depends on unconverted modules: art.module.api.annotations
"truth-host-prebuilt", // depends on unconverted modules: truth-prebuilt
"truth-prebuilt", // depends on unconverted modules: asm-7.0, guava
}
Bp2buildCcLibraryStaticOnlyList = []string{}
MixedBuildsDisabledList = []string{
"art_libdexfile_dex_instruction_list_header", // breaks libart_mterp.armng, header not found
"libbrotli", // http://b/198585397, ld.lld: error: bionic/libc/arch-arm64/generic/bionic/memmove.S:95:(.text+0x10): relocation R_AARCH64_CONDBR19 out of range: -1404176 is not in [-1048576, 1048575]; references __memcpy
"minijail_constants_json", // http://b/200899432, bazel-built cc_genrule does not work in mixed build when it is a dependency of another soong module.
"cap_names.h", // TODO(b/204913827) runfiles need to be handled in mixed builds
"libcap", // TODO(b/204913827) runfiles need to be handled in mixed builds
"libprotobuf-cpp-full", "libprotobuf-cpp-lite", // Unsupported product&vendor suffix. b/204811222 and b/204810610.
// Depends on libprotobuf-cpp-*
"libadb_pairing_connection",
"libadb_pairing_connection_static",
"libadb_pairing_server", "libadb_pairing_server_static",
// TODO(b/204811222) support suffix in cc_binary
"acvp_modulewrapper",
"android.hardware.media.c2@1.0-service-v4l2",
"app_process",
"bar_test",
"bench_cxa_atexit",
"bench_noop",
"bench_noop_nostl",
"bench_noop_static",
"boringssl_self_test",
"boringssl_self_test_vendor",
"bssl",
"cavp",
"crash_dump",
"crasher",
"libcxx_test_template",
"linker",
"memory_replay",
"native_bridge_guest_linker",
"native_bridge_stub_library_defaults",
"noop",
"simpleperf_ndk",
"toybox-static",
"zlib_bench",
}
)

View File

@@ -24,6 +24,15 @@ import (
"github.com/google/blueprint" "github.com/google/blueprint"
"github.com/google/blueprint/proptools" "github.com/google/blueprint/proptools"
"android/soong/android/allowlists"
)
const (
// A sentinel value to be used as a key in Bp2BuildConfig for modules with
// no package path. This is also the module dir for top level Android.bp
// modules.
Bp2BuildTopLevel = "."
) )
type bazelModuleProperties struct { type bazelModuleProperties struct {
@@ -87,7 +96,7 @@ type Bazelable interface {
HandcraftedLabel() string HandcraftedLabel() string
GetBazelLabel(ctx BazelConversionPathContext, module blueprint.Module) string GetBazelLabel(ctx BazelConversionPathContext, module blueprint.Module) string
ShouldConvertWithBp2build(ctx BazelConversionContext) bool ShouldConvertWithBp2build(ctx BazelConversionContext) bool
shouldConvertWithBp2build(ctx BazelConversionContext, module blueprint.Module) bool shouldConvertWithBp2build(ctx bazelOtherModuleContext, module blueprint.Module) bool
GetBazelBuildFileContents(c Config, path, name string) (string, error) GetBazelBuildFileContents(c Config, path, name string) (string, error)
ConvertWithBp2build(ctx TopDownMutatorContext) ConvertWithBp2build(ctx TopDownMutatorContext)
@@ -161,231 +170,13 @@ func (b *BazelModuleBase) GetBazelLabel(ctx BazelConversionPathContext, module b
return "" // no label for unconverted module return "" // no label for unconverted module
} }
// Configuration to decide if modules in a directory should default to true/false for bp2build_available type bp2BuildConversionAllowlist struct {
type Bp2BuildConfig map[string]BazelConversionConfigEntry // Configure modules in these directories to enable bp2build_available: true or false by default.
type BazelConversionConfigEntry int defaultConfig allowlists.Bp2BuildConfig
const (
// A sentinel value to be used as a key in Bp2BuildConfig for modules with
// no package path. This is also the module dir for top level Android.bp
// modules.
BP2BUILD_TOPLEVEL = "."
// iota + 1 ensures that the int value is not 0 when used in the Bp2buildAllowlist map,
// which can also mean that the key doesn't exist in a lookup.
// all modules in this package and subpackages default to bp2build_available: true.
// allows modules to opt-out.
Bp2BuildDefaultTrueRecursively BazelConversionConfigEntry = iota + 1
// all modules in this package (not recursively) default to bp2build_available: true.
// allows modules to opt-out.
Bp2BuildDefaultTrue
// all modules in this package (not recursively) default to bp2build_available: false.
// allows modules to opt-in.
Bp2BuildDefaultFalse
)
var (
// Keep any existing BUILD files (and do not generate new BUILD files) for these directories // Keep any existing BUILD files (and do not generate new BUILD files) for these directories
// in the synthetic Bazel workspace. // in the synthetic Bazel workspace.
bp2buildKeepExistingBuildFile = map[string]bool{ keepExistingBuildFile map[string]bool
// This is actually build/bazel/build.BAZEL symlinked to ./BUILD
".":/*recursive = */ false,
// build/bazel/examples/apex/... BUILD files should be generated, so
// build/bazel is not recursive. Instead list each subdirectory under
// build/bazel explicitly.
"build/bazel":/* recursive = */ false,
"build/bazel/ci/dist":/* recursive = */ false,
"build/bazel/examples/android_app":/* recursive = */ true,
"build/bazel/examples/java":/* recursive = */ true,
"build/bazel/bazel_skylib":/* recursive = */ true,
"build/bazel/rules":/* recursive = */ true,
"build/bazel/rules_cc":/* recursive = */ true,
"build/bazel/scripts":/* recursive = */ true,
"build/bazel/tests":/* recursive = */ true,
"build/bazel/platforms":/* recursive = */ true,
"build/bazel/product_variables":/* recursive = */ true,
"build/bazel/vendor/google":/* recursive = */ true,
"build/bazel_common_rules":/* recursive = */ true,
// build/make/tools/signapk BUILD file is generated, so build/make/tools is not recursive.
"build/make/tools":/* recursive = */ false,
"build/pesto":/* recursive = */ true,
// external/bazelbuild-rules_android/... is needed by mixed builds, otherwise mixed builds analysis fails
// e.g. ERROR: Analysis of target '@soong_injection//mixed_builds:buildroot' failed
"external/bazelbuild-rules_android":/* recursive = */ true,
"external/bazel-skylib":/* recursive = */ true,
"external/guava":/* recursive = */ true,
"external/jsr305":/* recursive = */ true,
"frameworks/ex/common":/* recursive = */ true,
"packages/apps/Music":/* recursive = */ true,
"packages/apps/QuickSearchBox":/* recursive = */ true,
"packages/apps/WallpaperPicker":/* recursive = */ false,
"prebuilts/bundletool":/* recursive = */ true,
"prebuilts/gcc":/* recursive = */ true,
"prebuilts/build-tools":/* recursive = */ false,
"prebuilts/jdk/jdk11":/* recursive = */ false,
"prebuilts/sdk":/* recursive = */ false,
"prebuilts/sdk/current/extras/app-toolkit":/* recursive = */ false,
"prebuilts/sdk/current/support":/* recursive = */ false,
"prebuilts/sdk/tools":/* recursive = */ false,
"prebuilts/r8":/* recursive = */ false,
}
// Configure modules in these directories to enable bp2build_available: true or false by default.
bp2buildDefaultConfig = Bp2BuildConfig{
"art/libartpalette": Bp2BuildDefaultTrueRecursively,
"art/libdexfile": Bp2BuildDefaultTrueRecursively,
"art/runtime": Bp2BuildDefaultTrueRecursively,
"art/tools": Bp2BuildDefaultTrue,
"bionic": Bp2BuildDefaultTrueRecursively,
"bootable/recovery/tools/recovery_l10n": Bp2BuildDefaultTrue,
"build/bazel/examples/soong_config_variables": Bp2BuildDefaultTrueRecursively,
"build/bazel/examples/apex/minimal": Bp2BuildDefaultTrueRecursively,
"build/make/tools/signapk": Bp2BuildDefaultTrue,
"build/make/target/product/security": Bp2BuildDefaultTrue,
"build/soong": Bp2BuildDefaultTrue,
"build/soong/cc/libbuildversion": Bp2BuildDefaultTrue, // Skip tests subdir
"build/soong/cc/ndkstubgen": Bp2BuildDefaultTrue,
"build/soong/cc/symbolfile": Bp2BuildDefaultTrue,
"build/soong/linkerconfig": Bp2BuildDefaultTrueRecursively,
"build/soong/scripts": Bp2BuildDefaultTrueRecursively,
"cts/common/device-side/nativetesthelper/jni": Bp2BuildDefaultTrueRecursively,
"development/apps/DevelopmentSettings": Bp2BuildDefaultTrue,
"development/apps/Fallback": Bp2BuildDefaultTrue,
"development/apps/WidgetPreview": Bp2BuildDefaultTrue,
"development/samples/BasicGLSurfaceView": Bp2BuildDefaultTrue,
"development/samples/BluetoothChat": Bp2BuildDefaultTrue,
"development/samples/BrokenKeyDerivation": Bp2BuildDefaultTrue,
"development/samples/Compass": Bp2BuildDefaultTrue,
"development/samples/ContactManager": Bp2BuildDefaultTrue,
"development/samples/FixedGridLayout": Bp2BuildDefaultTrue,
"development/samples/HelloEffects": Bp2BuildDefaultTrue,
"development/samples/Home": Bp2BuildDefaultTrue,
"development/samples/HoneycombGallery": Bp2BuildDefaultTrue,
"development/samples/JetBoy": Bp2BuildDefaultTrue,
"development/samples/KeyChainDemo": Bp2BuildDefaultTrue,
"development/samples/LceDemo": Bp2BuildDefaultTrue,
"development/samples/LunarLander": Bp2BuildDefaultTrue,
"development/samples/MultiResolution": Bp2BuildDefaultTrue,
"development/samples/MultiWindow": Bp2BuildDefaultTrue,
"development/samples/NotePad": Bp2BuildDefaultTrue,
"development/samples/Obb": Bp2BuildDefaultTrue,
"development/samples/RSSReader": Bp2BuildDefaultTrue,
"development/samples/ReceiveShareDemo": Bp2BuildDefaultTrue,
"development/samples/SearchableDictionary": Bp2BuildDefaultTrue,
"development/samples/SipDemo": Bp2BuildDefaultTrue,
"development/samples/SkeletonApp": Bp2BuildDefaultTrue,
"development/samples/Snake": Bp2BuildDefaultTrue,
"development/samples/SpellChecker/": Bp2BuildDefaultTrueRecursively,
"development/samples/ThemedNavBarKeyboard": Bp2BuildDefaultTrue,
"development/samples/ToyVpn": Bp2BuildDefaultTrue,
"development/samples/TtsEngine": Bp2BuildDefaultTrue,
"development/samples/USB/AdbTest": Bp2BuildDefaultTrue,
"development/samples/USB/MissileLauncher": Bp2BuildDefaultTrue,
"development/samples/VoiceRecognitionService": Bp2BuildDefaultTrue,
"development/samples/VoicemailProviderDemo": Bp2BuildDefaultTrue,
"development/samples/WiFiDirectDemo": Bp2BuildDefaultTrue,
"development/sdk": Bp2BuildDefaultTrueRecursively,
"external/arm-optimized-routines": Bp2BuildDefaultTrueRecursively,
"external/auto/android-annotation-stubs": Bp2BuildDefaultTrueRecursively,
"external/auto/common": Bp2BuildDefaultTrueRecursively,
"external/auto/service": Bp2BuildDefaultTrueRecursively,
"external/boringssl": Bp2BuildDefaultTrueRecursively,
"external/bouncycastle": Bp2BuildDefaultTrue,
"external/brotli": Bp2BuildDefaultTrue,
"external/conscrypt": Bp2BuildDefaultTrue,
"external/e2fsprogs": Bp2BuildDefaultTrueRecursively,
"external/error_prone": Bp2BuildDefaultTrueRecursively,
"external/fmtlib": Bp2BuildDefaultTrueRecursively,
"external/google-benchmark": Bp2BuildDefaultTrueRecursively,
"external/googletest": Bp2BuildDefaultTrueRecursively,
"external/gwp_asan": Bp2BuildDefaultTrueRecursively,
"external/icu": Bp2BuildDefaultTrueRecursively,
"external/icu/android_icu4j": Bp2BuildDefaultFalse, // java rules incomplete
"external/icu/icu4j": Bp2BuildDefaultFalse, // java rules incomplete
"external/javapoet": Bp2BuildDefaultTrueRecursively,
"external/jemalloc_new": Bp2BuildDefaultTrueRecursively,
"external/jsoncpp": Bp2BuildDefaultTrueRecursively,
"external/libcap": Bp2BuildDefaultTrueRecursively,
"external/libcxx": Bp2BuildDefaultTrueRecursively,
"external/libcxxabi": Bp2BuildDefaultTrueRecursively,
"external/libevent": Bp2BuildDefaultTrueRecursively,
"external/libpng": Bp2BuildDefaultTrueRecursively,
"external/lz4/lib": Bp2BuildDefaultTrue,
"external/lzma/C": Bp2BuildDefaultTrueRecursively,
"external/mdnsresponder": Bp2BuildDefaultTrueRecursively,
"external/minijail": Bp2BuildDefaultTrueRecursively,
"external/pcre": Bp2BuildDefaultTrueRecursively,
"external/protobuf": Bp2BuildDefaultTrueRecursively,
"external/python/six": Bp2BuildDefaultTrueRecursively,
"external/scudo": Bp2BuildDefaultTrueRecursively,
"external/selinux/libselinux": Bp2BuildDefaultTrueRecursively,
"external/selinux/libsepol": Bp2BuildDefaultTrueRecursively,
"external/zlib": Bp2BuildDefaultTrueRecursively,
"external/zstd": Bp2BuildDefaultTrueRecursively,
"frameworks/base/media/tests/MediaDump": Bp2BuildDefaultTrue,
"frameworks/base/startop/apps/test": Bp2BuildDefaultTrue,
"frameworks/base/tests/appwidgets/AppWidgetHostTest": Bp2BuildDefaultTrueRecursively,
"frameworks/native/libs/adbd_auth": Bp2BuildDefaultTrueRecursively,
"frameworks/native/opengl/tests/gl2_cameraeye": Bp2BuildDefaultTrue,
"frameworks/native/opengl/tests/gl2_java": Bp2BuildDefaultTrue,
"frameworks/native/opengl/tests/testLatency": Bp2BuildDefaultTrue,
"frameworks/native/opengl/tests/testPauseResume": Bp2BuildDefaultTrue,
"frameworks/native/opengl/tests/testViewport": Bp2BuildDefaultTrue,
"frameworks/proto_logging/stats/stats_log_api_gen": Bp2BuildDefaultTrueRecursively,
"libnativehelper": Bp2BuildDefaultTrueRecursively,
"packages/apps/DevCamera": Bp2BuildDefaultTrue,
"packages/apps/HTMLViewer": Bp2BuildDefaultTrue,
"packages/apps/Protips": Bp2BuildDefaultTrue,
"packages/modules/StatsD/lib/libstatssocket": Bp2BuildDefaultTrueRecursively,
"packages/modules/adb": Bp2BuildDefaultTrue,
"packages/modules/adb/apex": Bp2BuildDefaultTrue,
"packages/modules/adb/crypto": Bp2BuildDefaultTrueRecursively,
"packages/modules/adb/libs": Bp2BuildDefaultTrueRecursively,
"packages/modules/adb/pairing_auth": Bp2BuildDefaultTrueRecursively,
"packages/modules/adb/pairing_connection": Bp2BuildDefaultTrueRecursively,
"packages/modules/adb/proto": Bp2BuildDefaultTrueRecursively,
"packages/modules/adb/tls": Bp2BuildDefaultTrueRecursively,
"packages/providers/MediaProvider/tools/dialogs": Bp2BuildDefaultTrue,
"packages/screensavers/Basic": Bp2BuildDefaultTrue,
"packages/services/Car/tests/SampleRearViewCamera": Bp2BuildDefaultTrue,
"prebuilts/clang/host/linux-x86": Bp2BuildDefaultTrueRecursively,
"prebuilts/tools/common/m2": Bp2BuildDefaultTrue,
"prebuilts/sdk/tools/jetifier/jetifier-standalone": Bp2BuildDefaultTrue,
"system/apex": Bp2BuildDefaultFalse, // TODO(b/207466993): flaky failures
"system/apex/proto": Bp2BuildDefaultTrueRecursively,
"system/apex/libs": Bp2BuildDefaultTrueRecursively,
"system/core/debuggerd": Bp2BuildDefaultTrueRecursively,
"system/core/diagnose_usb": Bp2BuildDefaultTrueRecursively,
"system/core/libasyncio": Bp2BuildDefaultTrue,
"system/core/libcrypto_utils": Bp2BuildDefaultTrueRecursively,
"system/core/libcutils": Bp2BuildDefaultTrueRecursively,
"system/core/libpackagelistparser": Bp2BuildDefaultTrueRecursively,
"system/core/libprocessgroup": Bp2BuildDefaultTrue,
"system/core/libprocessgroup/cgrouprc": Bp2BuildDefaultTrue,
"system/core/libprocessgroup/cgrouprc_format": Bp2BuildDefaultTrue,
"system/core/libsystem": Bp2BuildDefaultTrueRecursively,
"system/core/libutils": Bp2BuildDefaultTrueRecursively,
"system/core/libvndksupport": Bp2BuildDefaultTrueRecursively,
"system/core/property_service/libpropertyinfoparser": Bp2BuildDefaultTrueRecursively,
"system/libbase": Bp2BuildDefaultTrueRecursively,
"system/libprocinfo": Bp2BuildDefaultTrue,
"system/libziparchive": Bp2BuildDefaultTrueRecursively,
"system/logging/liblog": Bp2BuildDefaultTrueRecursively,
"system/sepolicy/apex": Bp2BuildDefaultTrueRecursively,
"system/timezone/apex": Bp2BuildDefaultTrueRecursively,
"system/timezone/output_data": Bp2BuildDefaultTrueRecursively,
"system/unwinding/libbacktrace": Bp2BuildDefaultTrueRecursively,
"system/unwinding/libunwindstack": Bp2BuildDefaultTrueRecursively,
"tools/apksig": Bp2BuildDefaultTrue,
"tools/platform-compat/java/android/compat": Bp2BuildDefaultTrueRecursively,
}
// Per-module allowlist to always opt modules in of both bp2build and mixed builds. // Per-module allowlist to always opt modules in of both bp2build and mixed builds.
// These modules are usually in directories with many other modules that are not ready for // These modules are usually in directories with many other modules that are not ready for
@@ -393,235 +184,150 @@ var (
// //
// A module can either be in this list or its directory allowlisted entirely // A module can either be in this list or its directory allowlisted entirely
// in bp2buildDefaultConfig, but not both at the same time. // in bp2buildDefaultConfig, but not both at the same time.
bp2buildModuleAlwaysConvertList = []string{ moduleAlwaysConvert map[string]bool
//external/avb
"avbtool",
"libavb",
"avb_headers",
//external/fec
"libfec_rs",
//system/core/libsparse
"libsparse",
//system/extras/ext4_utils
"libext4_utils",
//system/extras/libfec
"libfec",
//system/extras/squashfs_utils
"libsquashfs_utils",
//system/extras/verity/fec
"fec",
//packages/apps/Car/libs/car-ui-lib/car-ui-androidx
// genrule dependencies for java_imports
"car-ui-androidx-annotation-nodeps",
"car-ui-androidx-collection-nodeps",
"car-ui-androidx-core-common-nodeps",
"car-ui-androidx-lifecycle-common-nodeps",
"car-ui-androidx-constraintlayout-solver-nodeps",
}
// Per-module-type allowlist to always opt modules in to both bp2build and mixed builds // Per-module-type allowlist to always opt modules in to both bp2build and mixed builds
// when they have the same type as one listed. // when they have the same type as one listed.
bp2buildModuleTypeAlwaysConvertList = []string{ moduleTypeAlwaysConvert map[string]bool
"java_import",
"java_import_host",
}
// Per-module denylist to always opt modules out of both bp2build and mixed builds. // Per-module denylist to always opt modules out of both bp2build and mixed builds.
bp2buildModuleDoNotConvertList = []string{ moduleDoNotConvert map[string]bool
// cc bugs
"libsepol", // TODO(b/207408632): Unsupported case of .l sources in cc library rules
"libactivitymanager_aidl", // TODO(b/207426160): Unsupported use of aidl sources (via Dactivity_manager_procstate_aidl) in a cc_library
"gen-kotlin-build-file.py", // TODO(b/198619163) module has same name as source
"libgtest_ndk_c++", "libgtest_main_ndk_c++", // TODO(b/201816222): Requires sdk_version support.
"linkerconfig", "mdnsd", // TODO(b/202876379): has arch-variant static_executable
"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
// java bugs
"libbase_ndk", // TODO(b/186826477): fails to link libctscamera2_jni for device (required for CtsCameraTestCases)
// python protos
"libprotobuf-python", // TODO(b/196084681): contains .proto sources
"apex_build_info_proto", "apex_manifest_proto", // TODO(b/196084681): a python lib with proto sources
"linker_config_proto", // TODO(b/196084681): contains .proto sources
// genrule incompatibilities
"brotli-fuzzer-corpus", // TODO(b/202015218): outputs are in location incompatible with bazel genrule handling.
"platform_tools_properties", "build_tools_source_properties", // TODO(b/203369847): multiple genrules in the same package creating the same file
// aar support
"prebuilt_car-ui-androidx-core-common", // TODO(b/224773339), genrule dependency creates an .aar, not a .jar
"prebuilt_platform-robolectric-4.4-prebuilt", // aosp/1999250, needs .aar support in Jars
"prebuilt_platform-robolectric-4.5.1-prebuilt", // aosp/1999250, needs .aar support in Jars
// path property for filegroups
"conscrypt", // TODO(b/210751803), we don't handle path property for filegroups
"conscrypt-for-host", // TODO(b/210751803), we don't handle path property for filegroups
"host-libprotobuf-java-full", // TODO(b/210751803), we don't handle path property for filegroups
"libprotobuf-internal-protos", // TODO(b/210751803), we don't handle path property for filegroups
"libprotobuf-internal-python-srcs", // TODO(b/210751803), we don't handle path property for filegroups
"libprotobuf-java-full", // TODO(b/210751803), we don't handle path property for filegroups
"libprotobuf-java-util-full", // TODO(b/210751803), we don't handle path property for filegroups
// go deps:
"analyze_bcpf", // depends on bpmodify a blueprint_go_binary.
"apex-protos", // depends on soong_zip, a go binary
"generated_android_icu4j_src_files", "generated_android_icu4j_test_files", "icu4c_test_data", // depends on unconverted modules: soong_zip
"host_bionic_linker_asm", // depends on extract_linker, a go binary.
"host_bionic_linker_script", // depends on extract_linker, a go binary.
"libc_musl_sysroot_bionic_arch_headers", // depends on soong_zip
"libc_musl_sysroot_bionic_headers", // 218405924, depends on soong_zip and generates duplicate srcs
"libc_musl_sysroot_libc++_headers", "libc_musl_sysroot_libc++abi_headers", // depends on soong_zip, zip2zip
"robolectric-sqlite4java-native", // depends on soong_zip, a go binary
"robolectric_tzdata", // depends on soong_zip, a go binary
// rust support
"libtombstoned_client_rust_bridge_code", "libtombstoned_client_wrapper", // rust conversions are not supported
// unconverted deps
"CarHTMLViewer", // depends on unconverted modules android.car-stubs, car-ui-lib
"abb", // depends on unconverted modules: libcmd, libbinder
"adb", // depends on unconverted modules: AdbWinApi, libandroidfw, libopenscreen-discovery, libopenscreen-platform-impl, libusb, bin2c_fastdeployagent, AdbWinUsbApi
"android_icu4j_srcgen", // depends on unconverted modules: currysrc
"android_icu4j_srcgen_binary", // depends on unconverted modules: android_icu4j_srcgen, currysrc
"apex_manifest_proto_java", // b/210751803, depends on libprotobuf-java-full
"art-script", // depends on unconverted modules: dalvikvm, dex2oat
"bin2c_fastdeployagent", // depends on unconverted modules: deployagent
"chkcon", "sefcontext_compile", // depends on unconverted modules: libsepol
"com.android.runtime", // depends on unconverted modules: bionic-linker-config, linkerconfig
"conv_linker_config", // depends on unconverted modules: linker_config_proto
"currysrc", // depends on unconverted modules: currysrc_org.eclipse, guavalib, jopt-simple-4.9
"dex2oat-script", // depends on unconverted modules: dex2oat
"generated_android_icu4j_resources", // depends on unconverted modules: android_icu4j_srcgen_binary, soong_zip
"generated_android_icu4j_test_resources", // depends on unconverted modules: android_icu4j_srcgen_binary, soong_zip
"host-libprotobuf-java-nano", // b/220869005, depends on libprotobuf-java-nano
"libadb_host", // depends on unconverted modules: AdbWinApi, libopenscreen-discovery, libopenscreen-platform-impl, libusb
"libart", // depends on unconverted modules: apex-info-list-tinyxml, libtinyxml2, libnativeloader-headers, heapprofd_client_api, art_operator_srcs, libcpu_features, libodrstatslog, libelffile, art_cmdlineparser_headers, cpp-define-generator-definitions, libdexfile, libnativebridge, libnativeloader, libsigchain, libartbase, libprofile, cpp-define-generator-asm-support
"libart-runtime-gtest", // depends on unconverted modules: libgtest_isolated, libart-compiler, libdexfile, libprofile, libartbase, libartbase-art-gtest
"libart_headers", // depends on unconverted modules: art_libartbase_headers
"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
"libdebuggerd_handler", // depends on unconverted module libdebuggerd_handler_core
"libdebuggerd_handler_core", "libdebuggerd_handler_fallback", // depends on unconverted module libdebuggerd
"libdexfile", // depends on unconverted modules: dexfile_operator_srcs, libartbase, libartpalette,
"libdexfile_static", // depends on unconverted modules: libartbase, libdexfile
"libdexfiled", // depends on unconverted modules: dexfile_operator_srcs, libartbased, libartpalette
"libfastdeploy_host", // depends on unconverted modules: libandroidfw, libusb, AdbWinApi
"libgmock_main_ndk", // depends on unconverted modules: libgtest_ndk_c++
"libgmock_ndk", // depends on unconverted modules: libgtest_ndk_c++
"libnativehelper_lazy_mts_jni", "libnativehelper_mts_jni", // depends on unconverted modules: libnativetesthelper_jni, libgmock_ndk
"libnativetesthelper_jni", // depends on unconverted modules: libgtest_ndk_c++
"libprotobuf-java-nano", // b/220869005, depends on non-public_current SDK
"libstatslog", // depends on unconverted modules: libstatspull, statsd-aidl-ndk, libbinder_ndk
"libstatslog_art", // depends on unconverted modules: statslog_art.cpp, statslog_art.h
"linker_reloc_bench_main", // depends on unconverted modules: liblinker_reloc_bench_*
"pbtombstone", "crash_dump", // depends on libdebuggerd, libunwindstack
"robolectric-sqlite4java-0.282", // depends on unconverted modules: robolectric-sqlite4java-import, robolectric-sqlite4java-native
"static_crasher", // depends on unconverted modules: libdebuggerd_handler
"stats-log-api-gen", // depends on unconverted modules: libstats_proto_host
"statslog.cpp", "statslog.h", "statslog.rs", // depends on unconverted modules: stats-log-api-gen
"statslog_art.cpp", "statslog_art.h", "statslog_header.rs", // depends on unconverted modules: stats-log-api-gen
"timezone-host", // depends on unconverted modules: art.module.api.annotations
"truth-host-prebuilt", // depends on unconverted modules: truth-prebuilt
"truth-prebuilt", // depends on unconverted modules: asm-7.0, guava
}
// Per-module denylist of cc_library modules to only generate the static // Per-module denylist of cc_library modules to only generate the static
// variant if their shared variant isn't ready or buildable by Bazel. // variant if their shared variant isn't ready or buildable by Bazel.
bp2buildCcLibraryStaticOnlyList = []string{} ccLibraryStaticOnly map[string]bool
// Per-module denylist to opt modules out of mixed builds. Such modules will // Per-module denylist to opt modules out of mixed builds. Such modules will
// still be generated via bp2build. // still be generated via bp2build.
mixedBuildsDisabledList = []string{ mixedBuildsDisabled map[string]bool
"art_libdexfile_dex_instruction_list_header", // breaks libart_mterp.armng, header not found }
"libbrotli", // http://b/198585397, ld.lld: error: bionic/libc/arch-arm64/generic/bionic/memmove.S:95:(.text+0x10): relocation R_AARCH64_CONDBR19 out of range: -1404176 is not in [-1048576, 1048575]; references __memcpy // NewBp2BuildAllowlist creates a new, empty bp2BuildConversionAllowlist
"minijail_constants_json", // http://b/200899432, bazel-built cc_genrule does not work in mixed build when it is a dependency of another soong module. // which can be populated using builder pattern Set* methods
func NewBp2BuildAllowlist() bp2BuildConversionAllowlist {
"cap_names.h", // TODO(b/204913827) runfiles need to be handled in mixed builds return bp2BuildConversionAllowlist{
"libcap", // TODO(b/204913827) runfiles need to be handled in mixed builds allowlists.Bp2BuildConfig{},
"libprotobuf-cpp-full", "libprotobuf-cpp-lite", // Unsupported product&vendor suffix. b/204811222 and b/204810610. map[string]bool{},
map[string]bool{},
// Depends on libprotobuf-cpp-* map[string]bool{},
"libadb_pairing_connection", map[string]bool{},
"libadb_pairing_connection_static", map[string]bool{},
"libadb_pairing_server", "libadb_pairing_server_static", map[string]bool{},
// TODO(b/204811222) support suffix in cc_binary
"acvp_modulewrapper",
"android.hardware.media.c2@1.0-service-v4l2",
"app_process",
"bar_test",
"bench_cxa_atexit",
"bench_noop",
"bench_noop_nostl",
"bench_noop_static",
"boringssl_self_test",
"boringssl_self_test_vendor",
"bssl",
"cavp",
"crash_dump",
"crasher",
"libcxx_test_template",
"linker",
"memory_replay",
"native_bridge_guest_linker",
"native_bridge_stub_library_defaults",
"noop",
"simpleperf_ndk",
"toybox-static",
"zlib_bench",
}
// Used for quicker lookups
bp2buildModuleDoNotConvert = map[string]bool{}
bp2buildModuleAlwaysConvert = map[string]bool{}
bp2buildModuleTypeAlwaysConvert = map[string]bool{}
bp2buildCcLibraryStaticOnly = map[string]bool{}
mixedBuildsDisabled = map[string]bool{}
)
func init() {
for _, moduleName := range bp2buildModuleAlwaysConvertList {
bp2buildModuleAlwaysConvert[moduleName] = true
}
for _, moduleType := range bp2buildModuleTypeAlwaysConvertList {
bp2buildModuleTypeAlwaysConvert[moduleType] = true
}
for _, moduleName := range bp2buildModuleDoNotConvertList {
bp2buildModuleDoNotConvert[moduleName] = true
}
for _, moduleName := range bp2buildCcLibraryStaticOnlyList {
bp2buildCcLibraryStaticOnly[moduleName] = true
}
for _, moduleName := range mixedBuildsDisabledList {
mixedBuildsDisabled[moduleName] = true
} }
} }
// SetDefaultConfig copies the entries from defaultConfig into the allowlist
func (a bp2BuildConversionAllowlist) SetDefaultConfig(defaultConfig allowlists.Bp2BuildConfig) bp2BuildConversionAllowlist {
if a.defaultConfig == nil {
a.defaultConfig = allowlists.Bp2BuildConfig{}
}
for k, v := range defaultConfig {
a.defaultConfig[k] = v
}
return a
}
// SetKeepExistingBuildFile copies the entries from keepExistingBuildFile into the allowlist
func (a bp2BuildConversionAllowlist) SetKeepExistingBuildFile(keepExistingBuildFile map[string]bool) bp2BuildConversionAllowlist {
if a.keepExistingBuildFile == nil {
a.keepExistingBuildFile = map[string]bool{}
}
for k, v := range keepExistingBuildFile {
a.keepExistingBuildFile[k] = v
}
return a
}
// SetModuleAlwaysConvertList copies the entries from moduleAlwaysConvert into the allowlist
func (a bp2BuildConversionAllowlist) SetModuleAlwaysConvertList(moduleAlwaysConvert []string) bp2BuildConversionAllowlist {
if a.moduleAlwaysConvert == nil {
a.moduleAlwaysConvert = map[string]bool{}
}
for _, m := range moduleAlwaysConvert {
a.moduleAlwaysConvert[m] = true
}
return a
}
// SetModuleTypeAlwaysConvertList copies the entries from moduleTypeAlwaysConvert into the allowlist
func (a bp2BuildConversionAllowlist) SetModuleTypeAlwaysConvertList(moduleTypeAlwaysConvert []string) bp2BuildConversionAllowlist {
if a.moduleTypeAlwaysConvert == nil {
a.moduleTypeAlwaysConvert = map[string]bool{}
}
for _, m := range moduleTypeAlwaysConvert {
a.moduleTypeAlwaysConvert[m] = true
}
return a
}
// SetModuleDoNotConvertList copies the entries from moduleDoNotConvert into the allowlist
func (a bp2BuildConversionAllowlist) SetModuleDoNotConvertList(moduleDoNotConvert []string) bp2BuildConversionAllowlist {
if a.moduleDoNotConvert == nil {
a.moduleDoNotConvert = map[string]bool{}
}
for _, m := range moduleDoNotConvert {
a.moduleDoNotConvert[m] = true
}
return a
}
// SetCcLibraryStaticOnlyList copies the entries from ccLibraryStaticOnly into the allowlist
func (a bp2BuildConversionAllowlist) SetCcLibraryStaticOnlyList(ccLibraryStaticOnly []string) bp2BuildConversionAllowlist {
if a.ccLibraryStaticOnly == nil {
a.ccLibraryStaticOnly = map[string]bool{}
}
for _, m := range ccLibraryStaticOnly {
a.ccLibraryStaticOnly[m] = true
}
return a
}
// SetMixedBuildsDisabledList copies the entries from mixedBuildsDisabled into the allowlist
func (a bp2BuildConversionAllowlist) SetMixedBuildsDisabledList(mixedBuildsDisabled []string) bp2BuildConversionAllowlist {
if a.mixedBuildsDisabled == nil {
a.mixedBuildsDisabled = map[string]bool{}
}
for _, m := range mixedBuildsDisabled {
a.mixedBuildsDisabled[m] = true
}
return a
}
var bp2buildAllowlist = NewBp2BuildAllowlist().
SetDefaultConfig(allowlists.Bp2buildDefaultConfig).
SetKeepExistingBuildFile(allowlists.Bp2buildKeepExistingBuildFile).
SetModuleAlwaysConvertList(allowlists.Bp2buildModuleAlwaysConvertList).
SetModuleTypeAlwaysConvertList(allowlists.Bp2buildModuleTypeAlwaysConvertList).
SetModuleDoNotConvertList(allowlists.Bp2buildModuleDoNotConvertList).
SetCcLibraryStaticOnlyList(allowlists.Bp2buildCcLibraryStaticOnlyList).
SetMixedBuildsDisabledList(allowlists.MixedBuildsDisabledList)
// GenerateCcLibraryStaticOnly returns whether a cc_library module should only
// generate a static version of itself based on the current global configuration.
func GenerateCcLibraryStaticOnly(moduleName string) bool { func GenerateCcLibraryStaticOnly(moduleName string) bool {
return bp2buildCcLibraryStaticOnly[moduleName] return bp2buildAllowlist.ccLibraryStaticOnly[moduleName]
} }
// ShouldKeepExistingBuildFileForDir returns whether an existing BUILD file should be
// added to the build symlink forest based on the current global configuration.
func ShouldKeepExistingBuildFileForDir(dir string) bool { func ShouldKeepExistingBuildFileForDir(dir string) bool {
if _, ok := bp2buildKeepExistingBuildFile[dir]; ok { return shouldKeepExistingBuildFileForDir(bp2buildAllowlist, dir)
}
func shouldKeepExistingBuildFileForDir(allowlist bp2BuildConversionAllowlist, dir string) bool {
if _, ok := allowlist.keepExistingBuildFile[dir]; ok {
// Exact dir match // Exact dir match
return true return true
} }
// Check if subtree match // Check if subtree match
for prefix, recursive := range bp2buildKeepExistingBuildFile { for prefix, recursive := range allowlist.keepExistingBuildFile {
if recursive { if recursive {
if strings.HasPrefix(dir, prefix+"/") { if strings.HasPrefix(dir, prefix+"/") {
return true return true
@@ -655,7 +361,7 @@ func (b *BazelModuleBase) MixedBuildsEnabled(ctx ModuleContext) bool {
// variants of a cc_library. // variants of a cc_library.
return false return false
} }
return !mixedBuildsDisabled[ctx.Module().Name()] return !bp2buildAllowlist.mixedBuildsDisabled[ctx.Module().Name()]
} }
// ConvertedToBazel returns whether this module has been converted (with bp2build or manually) to Bazel. // ConvertedToBazel returns whether this module has been converted (with bp2build or manually) to Bazel.
@@ -667,53 +373,66 @@ func convertedToBazel(ctx BazelConversionContext, module blueprint.Module) bool
return b.shouldConvertWithBp2build(ctx, module) || b.HasHandcraftedLabel() return b.shouldConvertWithBp2build(ctx, module) || b.HasHandcraftedLabel()
} }
// ShouldConvertWithBp2build returns whether the given BazelModuleBase should be converted with bp2build. // ShouldConvertWithBp2build returns whether the given BazelModuleBase should be converted with bp2build
func (b *BazelModuleBase) ShouldConvertWithBp2build(ctx BazelConversionContext) bool { func (b *BazelModuleBase) ShouldConvertWithBp2build(ctx BazelConversionContext) bool {
return b.shouldConvertWithBp2build(ctx, ctx.Module()) return b.shouldConvertWithBp2build(ctx, ctx.Module())
} }
func (b *BazelModuleBase) shouldConvertWithBp2build(ctx BazelConversionContext, module blueprint.Module) bool { type bazelOtherModuleContext interface {
moduleName := module.Name() ModuleErrorf(format string, args ...interface{})
moduleNameAllowed := bp2buildModuleAlwaysConvert[moduleName] Config() Config
moduleTypeAllowed := bp2buildModuleTypeAlwaysConvert[ctx.OtherModuleType(module)] OtherModuleType(m blueprint.Module) string
allowlistConvert := moduleNameAllowed || moduleTypeAllowed OtherModuleName(m blueprint.Module) string
if moduleNameAllowed && moduleTypeAllowed { OtherModuleDir(m blueprint.Module) string
ctx.(BaseModuleContext).ModuleErrorf("A module cannot be in bp2buildModuleAlwaysConvert and also be" + }
" in bp2buildModuleTypeAlwaysConvert")
}
if bp2buildModuleDoNotConvert[moduleName] {
if moduleNameAllowed {
ctx.(BaseModuleContext).ModuleErrorf("a module cannot be in bp2buildModuleDoNotConvert" +
" and also be in bp2buildModuleAlwaysConvert")
}
return false
}
func (b *BazelModuleBase) shouldConvertWithBp2build(ctx bazelOtherModuleContext, module blueprint.Module) bool {
if !b.bazelProps().Bazel_module.CanConvertToBazel { if !b.bazelProps().Bazel_module.CanConvertToBazel {
return false return false
} }
propValue := b.bazelProperties.Bazel_module.Bp2build_available propValue := b.bazelProperties.Bazel_module.Bp2build_available
packagePath := ctx.OtherModuleDir(module) packagePath := ctx.OtherModuleDir(module)
// Modules in unit tests which are enabled in the allowlist by type or name // Modules in unit tests which are enabled in the allowlist by type or name
// trigger this conditional because unit tests run under the "." package path // trigger this conditional because unit tests run under the "." package path
isTestModule := packagePath == "." && proptools.BoolDefault(propValue, false) isTestModule := packagePath == Bp2BuildTopLevel && proptools.BoolDefault(propValue, false)
if allowlistConvert && !isTestModule && ShouldKeepExistingBuildFileForDir(packagePath) { if isTestModule {
return true
}
moduleName := module.Name()
allowlist := ctx.Config().bp2buildPackageConfig
moduleNameAllowed := allowlist.moduleAlwaysConvert[moduleName]
moduleTypeAllowed := allowlist.moduleTypeAlwaysConvert[ctx.OtherModuleType(module)]
allowlistConvert := moduleNameAllowed || moduleTypeAllowed
if moduleNameAllowed && moduleTypeAllowed {
ctx.ModuleErrorf("A module cannot be in moduleAlwaysConvert and also be in moduleTypeAlwaysConvert")
return false
}
if allowlist.moduleDoNotConvert[moduleName] {
if moduleNameAllowed { if moduleNameAllowed {
ctx.(BaseModuleContext).ModuleErrorf("A module cannot be in a directory listed in bp2buildKeepExistingBuildFile"+ ctx.ModuleErrorf("a module cannot be in moduleDoNotConvert and also be in moduleAlwaysConvert")
" and also be in bp2buildModuleAlwaysConvert. Directory: '%s'", packagePath)
} }
return false return false
} }
config := ctx.Config().bp2buildPackageConfig if allowlistConvert && shouldKeepExistingBuildFileForDir(allowlist, packagePath) {
// This is a tristate value: true, false, or unset.
if bp2buildDefaultTrueRecursively(packagePath, config) {
if moduleNameAllowed { if moduleNameAllowed {
ctx.(BaseModuleContext).ModuleErrorf("A module cannot be in a directory marked Bp2BuildDefaultTrue"+ ctx.ModuleErrorf("A module cannot be in a directory listed in keepExistingBuildFile"+
" or Bp2BuildDefaultTrueRecursively and also be in bp2buildModuleAlwaysConvert. Directory: '%s'", " and also be in moduleAlwaysConvert. Directory: '%s'", packagePath)
packagePath) return false
}
}
// This is a tristate value: true, false, or unset.
if ok, directoryPath := bp2buildDefaultTrueRecursively(packagePath, allowlist.defaultConfig); ok {
if moduleNameAllowed {
ctx.ModuleErrorf("A module cannot be in a directory marked Bp2BuildDefaultTrue"+
" or Bp2BuildDefaultTrueRecursively and also be in moduleAlwaysConvert. Directory: '%s'",
directoryPath)
return false
} }
// Allow modules to explicitly opt-out. // Allow modules to explicitly opt-out.
@@ -734,14 +453,16 @@ func (b *BazelModuleBase) shouldConvertWithBp2build(ctx BazelConversionContext,
// //
// This function will also return false if the package doesn't match anything in // This function will also return false if the package doesn't match anything in
// the config. // the config.
func bp2buildDefaultTrueRecursively(packagePath string, config Bp2BuildConfig) bool { //
ret := false // This function will also return the allowlist entry which caused a particular
// package to be enabled. Since packages can be enabled via a recursive declaration,
// the path returned will not always be the same as the one provided.
func bp2buildDefaultTrueRecursively(packagePath string, config allowlists.Bp2BuildConfig) (bool, string) {
// Check if the package path has an exact match in the config. // Check if the package path has an exact match in the config.
if config[packagePath] == Bp2BuildDefaultTrue || config[packagePath] == Bp2BuildDefaultTrueRecursively { if config[packagePath] == allowlists.Bp2BuildDefaultTrue || config[packagePath] == allowlists.Bp2BuildDefaultTrueRecursively {
return true return true, packagePath
} else if config[packagePath] == Bp2BuildDefaultFalse { } else if config[packagePath] == allowlists.Bp2BuildDefaultFalse {
return false return false, packagePath
} }
// If not, check for the config recursively. // If not, check for the config recursively.
@@ -749,15 +470,15 @@ func bp2buildDefaultTrueRecursively(packagePath string, config Bp2BuildConfig) b
// e.g. for x/y/z, iterate over x, x/y, then x/y/z, taking the final value from the allowlist. // e.g. for x/y/z, iterate over x, x/y, then x/y/z, taking the final value from the allowlist.
for _, part := range strings.Split(packagePath, "/") { for _, part := range strings.Split(packagePath, "/") {
packagePrefix += part packagePrefix += part
if config[packagePrefix] == Bp2BuildDefaultTrueRecursively { if config[packagePrefix] == allowlists.Bp2BuildDefaultTrueRecursively {
// package contains this prefix and this prefix should convert all modules // package contains this prefix and this prefix should convert all modules
return true return true, packagePrefix
} }
// Continue to the next part of the package dir. // Continue to the next part of the package dir.
packagePrefix += "/" packagePrefix += "/"
} }
return ret return false, packagePath
} }
// GetBazelBuildFileContents returns the file contents of a hand-crafted BUILD file if available or // GetBazelBuildFileContents returns the file contents of a hand-crafted BUILD file if available or

View File

@@ -79,6 +79,7 @@ type BazelConversionContext interface {
OtherModuleType(m blueprint.Module) string OtherModuleType(m blueprint.Module) string
OtherModuleName(m blueprint.Module) string OtherModuleName(m blueprint.Module) string
OtherModuleDir(m blueprint.Module) string OtherModuleDir(m blueprint.Module) string
ModuleErrorf(format string, args ...interface{})
} }
// A subset of the ModuleContext methods which are sufficient to resolve references to paths/deps in // A subset of the ModuleContext methods which are sufficient to resolve references to paths/deps in

View File

@@ -13,59 +13,62 @@
// limitations under the License. // limitations under the License.
package android package android
import "testing" import (
"android/soong/android/allowlists"
"testing"
)
func TestConvertAllModulesInPackage(t *testing.T) { func TestConvertAllModulesInPackage(t *testing.T) {
testCases := []struct { testCases := []struct {
prefixes Bp2BuildConfig prefixes allowlists.Bp2BuildConfig
packageDir string packageDir string
}{ }{
{ {
prefixes: Bp2BuildConfig{ prefixes: allowlists.Bp2BuildConfig{
"a": Bp2BuildDefaultTrueRecursively, "a": allowlists.Bp2BuildDefaultTrueRecursively,
}, },
packageDir: "a", packageDir: "a",
}, },
{ {
prefixes: Bp2BuildConfig{ prefixes: allowlists.Bp2BuildConfig{
"a/b": Bp2BuildDefaultTrueRecursively, "a/b": allowlists.Bp2BuildDefaultTrueRecursively,
}, },
packageDir: "a/b", packageDir: "a/b",
}, },
{ {
prefixes: Bp2BuildConfig{ prefixes: allowlists.Bp2BuildConfig{
"a/b": Bp2BuildDefaultTrueRecursively, "a/b": allowlists.Bp2BuildDefaultTrueRecursively,
"a/b/c": Bp2BuildDefaultTrueRecursively, "a/b/c": allowlists.Bp2BuildDefaultTrueRecursively,
}, },
packageDir: "a/b", packageDir: "a/b",
}, },
{ {
prefixes: Bp2BuildConfig{ prefixes: allowlists.Bp2BuildConfig{
"a": Bp2BuildDefaultTrueRecursively, "a": allowlists.Bp2BuildDefaultTrueRecursively,
"d/e/f": Bp2BuildDefaultTrueRecursively, "d/e/f": allowlists.Bp2BuildDefaultTrueRecursively,
}, },
packageDir: "a/b", packageDir: "a/b",
}, },
{ {
prefixes: Bp2BuildConfig{ prefixes: allowlists.Bp2BuildConfig{
"a": Bp2BuildDefaultFalse, "a": allowlists.Bp2BuildDefaultFalse,
"a/b": Bp2BuildDefaultTrueRecursively, "a/b": allowlists.Bp2BuildDefaultTrueRecursively,
"a/b/c": Bp2BuildDefaultFalse, "a/b/c": allowlists.Bp2BuildDefaultFalse,
}, },
packageDir: "a/b", packageDir: "a/b",
}, },
{ {
prefixes: Bp2BuildConfig{ prefixes: allowlists.Bp2BuildConfig{
"a": Bp2BuildDefaultTrueRecursively, "a": allowlists.Bp2BuildDefaultTrueRecursively,
"a/b": Bp2BuildDefaultFalse, "a/b": allowlists.Bp2BuildDefaultFalse,
"a/b/c": Bp2BuildDefaultTrueRecursively, "a/b/c": allowlists.Bp2BuildDefaultTrueRecursively,
}, },
packageDir: "a", packageDir: "a",
}, },
} }
for _, test := range testCases { for _, test := range testCases {
if !bp2buildDefaultTrueRecursively(test.packageDir, test.prefixes) { if ok, _ := bp2buildDefaultTrueRecursively(test.packageDir, test.prefixes); !ok {
t.Errorf("Expected to convert all modules in %s based on %v, but failed.", test.packageDir, test.prefixes) t.Errorf("Expected to convert all modules in %s based on %v, but failed.", test.packageDir, test.prefixes)
} }
} }
@@ -73,61 +76,61 @@ func TestConvertAllModulesInPackage(t *testing.T) {
func TestModuleOptIn(t *testing.T) { func TestModuleOptIn(t *testing.T) {
testCases := []struct { testCases := []struct {
prefixes Bp2BuildConfig prefixes allowlists.Bp2BuildConfig
packageDir string packageDir string
}{ }{
{ {
prefixes: Bp2BuildConfig{ prefixes: allowlists.Bp2BuildConfig{
"a/b": Bp2BuildDefaultFalse, "a/b": allowlists.Bp2BuildDefaultFalse,
}, },
packageDir: "a/b", packageDir: "a/b",
}, },
{ {
prefixes: Bp2BuildConfig{ prefixes: allowlists.Bp2BuildConfig{
"a": Bp2BuildDefaultFalse, "a": allowlists.Bp2BuildDefaultFalse,
"a/b": Bp2BuildDefaultTrueRecursively, "a/b": allowlists.Bp2BuildDefaultTrueRecursively,
}, },
packageDir: "a", packageDir: "a",
}, },
{ {
prefixes: Bp2BuildConfig{ prefixes: allowlists.Bp2BuildConfig{
"a/b": Bp2BuildDefaultTrueRecursively, "a/b": allowlists.Bp2BuildDefaultTrueRecursively,
}, },
packageDir: "a", // opt-in by default packageDir: "a", // opt-in by default
}, },
{ {
prefixes: Bp2BuildConfig{ prefixes: allowlists.Bp2BuildConfig{
"a/b/c": Bp2BuildDefaultTrueRecursively, "a/b/c": allowlists.Bp2BuildDefaultTrueRecursively,
}, },
packageDir: "a/b", packageDir: "a/b",
}, },
{ {
prefixes: Bp2BuildConfig{ prefixes: allowlists.Bp2BuildConfig{
"a": Bp2BuildDefaultTrueRecursively, "a": allowlists.Bp2BuildDefaultTrueRecursively,
"d/e/f": Bp2BuildDefaultTrueRecursively, "d/e/f": allowlists.Bp2BuildDefaultTrueRecursively,
}, },
packageDir: "foo/bar", packageDir: "foo/bar",
}, },
{ {
prefixes: Bp2BuildConfig{ prefixes: allowlists.Bp2BuildConfig{
"a": Bp2BuildDefaultTrueRecursively, "a": allowlists.Bp2BuildDefaultTrueRecursively,
"a/b": Bp2BuildDefaultFalse, "a/b": allowlists.Bp2BuildDefaultFalse,
"a/b/c": Bp2BuildDefaultTrueRecursively, "a/b/c": allowlists.Bp2BuildDefaultTrueRecursively,
}, },
packageDir: "a/b", packageDir: "a/b",
}, },
{ {
prefixes: Bp2BuildConfig{ prefixes: allowlists.Bp2BuildConfig{
"a": Bp2BuildDefaultFalse, "a": allowlists.Bp2BuildDefaultFalse,
"a/b": Bp2BuildDefaultTrueRecursively, "a/b": allowlists.Bp2BuildDefaultTrueRecursively,
"a/b/c": Bp2BuildDefaultFalse, "a/b/c": allowlists.Bp2BuildDefaultFalse,
}, },
packageDir: "a", packageDir: "a",
}, },
} }
for _, test := range testCases { for _, test := range testCases {
if bp2buildDefaultTrueRecursively(test.packageDir, test.prefixes) { if ok, _ := bp2buildDefaultTrueRecursively(test.packageDir, test.prefixes); ok {
t.Errorf("Expected to allow module opt-in in %s based on %v, but failed.", test.packageDir, test.prefixes) t.Errorf("Expected to allow module opt-in in %s based on %v, but failed.", test.packageDir, test.prefixes)
} }
} }

View File

@@ -158,7 +158,7 @@ type config struct {
mockBpList string mockBpList string
runningAsBp2Build bool runningAsBp2Build bool
bp2buildPackageConfig Bp2BuildConfig bp2buildPackageConfig bp2BuildConversionAllowlist
Bp2buildSoongConfigDefinitions soongconfig.Bp2BuildSoongConfigDefinitions Bp2buildSoongConfigDefinitions soongconfig.Bp2BuildSoongConfigDefinitions
// If testAllowNonExistentPaths is true then PathForSource and PathForModuleSrc won't error // If testAllowNonExistentPaths is true then PathForSource and PathForModuleSrc won't error
@@ -550,7 +550,7 @@ func NewConfig(moduleListFile string, runGoTests bool, outDir, soongOutDir strin
} }
config.BazelContext, err = NewBazelContext(config) config.BazelContext, err = NewBazelContext(config)
config.bp2buildPackageConfig = bp2buildDefaultConfig config.bp2buildPackageConfig = bp2buildAllowlist
return Config{config}, err return Config{config}, err
} }

View File

@@ -211,7 +211,7 @@ func (ctx *TestContext) FinalDepsMutators(f RegisterMutatorFunc) {
ctx.finalDeps = append(ctx.finalDeps, f) ctx.finalDeps = append(ctx.finalDeps, f)
} }
func (ctx *TestContext) RegisterBp2BuildConfig(config Bp2BuildConfig) { func (ctx *TestContext) RegisterBp2BuildConfig(config bp2BuildConversionAllowlist) {
ctx.config.bp2buildPackageConfig = config ctx.config.bp2buildPackageConfig = config
} }

View File

@@ -10,11 +10,11 @@ bootstrap_go_package {
"configurability.go", "configurability.go",
"constants.go", "constants.go",
"properties.go", "properties.go",
"testing.go",
], ],
testSrcs: [ testSrcs: [
"aquery_test.go", "aquery_test.go",
"properties_test.go", "properties_test.go",
"testing.go",
], ],
pluginFor: [ pluginFor: [
"soong_build", "soong_build",

View File

@@ -18,6 +18,7 @@ bootstrap_go_package {
], ],
deps: [ deps: [
"soong-android", "soong-android",
"soong-android-allowlists",
"soong-android-soongconfig", "soong-android-soongconfig",
"soong-shared", "soong-shared",
"soong-apex", "soong-apex",

View File

@@ -20,6 +20,7 @@ import (
"testing" "testing"
"android/soong/android" "android/soong/android"
"android/soong/android/allowlists"
"android/soong/python" "android/soong/python"
) )
@@ -922,7 +923,7 @@ func TestAllowlistingBp2buildTargetsWithConfig(t *testing.T) {
moduleTypeUnderTestFactory android.ModuleFactory moduleTypeUnderTestFactory android.ModuleFactory
expectedCount map[string]int expectedCount map[string]int
description string description string
bp2buildConfig android.Bp2BuildConfig bp2buildConfig allowlists.Bp2BuildConfig
checkDir string checkDir string
fs map[string]string fs map[string]string
}{ }{
@@ -937,10 +938,10 @@ func TestAllowlistingBp2buildTargetsWithConfig(t *testing.T) {
"not_migrated": 0, "not_migrated": 0,
"also_not_migrated": 0, "also_not_migrated": 0,
}, },
bp2buildConfig: android.Bp2BuildConfig{ bp2buildConfig: allowlists.Bp2BuildConfig{
"migrated": android.Bp2BuildDefaultTrueRecursively, "migrated": allowlists.Bp2BuildDefaultTrueRecursively,
"migrated/but_not_really": android.Bp2BuildDefaultFalse, "migrated/but_not_really": allowlists.Bp2BuildDefaultFalse,
"not_migrated": android.Bp2BuildDefaultFalse, "not_migrated": allowlists.Bp2BuildDefaultFalse,
}, },
fs: map[string]string{ fs: map[string]string{
"migrated/Android.bp": `filegroup { name: "a" }`, "migrated/Android.bp": `filegroup { name: "a" }`,
@@ -960,9 +961,9 @@ func TestAllowlistingBp2buildTargetsWithConfig(t *testing.T) {
"package-opt-out": 1, "package-opt-out": 1,
"package-opt-out/subpackage": 0, "package-opt-out/subpackage": 0,
}, },
bp2buildConfig: android.Bp2BuildConfig{ bp2buildConfig: allowlists.Bp2BuildConfig{
"package-opt-in": android.Bp2BuildDefaultFalse, "package-opt-in": allowlists.Bp2BuildDefaultFalse,
"package-opt-out": android.Bp2BuildDefaultTrueRecursively, "package-opt-out": allowlists.Bp2BuildDefaultTrueRecursively,
}, },
fs: map[string]string{ fs: map[string]string{
"package-opt-in/Android.bp": ` "package-opt-in/Android.bp": `
@@ -1004,7 +1005,8 @@ filegroup { name: "opt-out-h", bazel_module: { bp2build_available: false } }
config := android.TestConfig(buildDir, nil, "", fs) config := android.TestConfig(buildDir, nil, "", fs)
ctx := android.NewTestContext(config) ctx := android.NewTestContext(config)
ctx.RegisterModuleType(testCase.moduleTypeUnderTest, testCase.moduleTypeUnderTestFactory) ctx.RegisterModuleType(testCase.moduleTypeUnderTest, testCase.moduleTypeUnderTestFactory)
ctx.RegisterBp2BuildConfig(testCase.bp2buildConfig) allowlist := android.NewBp2BuildAllowlist().SetDefaultConfig(testCase.bp2buildConfig)
ctx.RegisterBp2BuildConfig(allowlist)
ctx.RegisterForBazelConversion() ctx.RegisterForBazelConversion()
_, errs := ctx.ParseFileList(dir, toParse) _, errs := ctx.ParseFileList(dir, toParse)

View File

@@ -25,14 +25,17 @@ import (
"testing" "testing"
"android/soong/android" "android/soong/android"
"android/soong/android/allowlists"
"android/soong/bazel" "android/soong/bazel"
) )
var ( var (
// A default configuration for tests to not have to specify bp2build_available on top level targets. // A default configuration for tests to not have to specify bp2build_available on top level targets.
bp2buildConfig = android.Bp2BuildConfig{ bp2buildConfig = android.NewBp2BuildAllowlist().SetDefaultConfig(
android.BP2BUILD_TOPLEVEL: android.Bp2BuildDefaultTrueRecursively, allowlists.Bp2BuildConfig{
} android.Bp2BuildTopLevel: allowlists.Bp2BuildDefaultTrueRecursively,
},
)
buildDir string buildDir string
) )