diff options
51 files changed, 1608 insertions, 601 deletions
diff --git a/android/allowlists/allowlists.go b/android/allowlists/allowlists.go index 0cdf792ac..7a62bae3a 100644 --- a/android/allowlists/allowlists.go +++ b/android/allowlists/allowlists.go @@ -139,6 +139,7 @@ var ( "external/lzma/C": Bp2BuildDefaultTrueRecursively, "external/mdnsresponder": Bp2BuildDefaultTrueRecursively, "external/minijail": Bp2BuildDefaultTrueRecursively, + "external/openscreen": Bp2BuildDefaultTrueRecursively, "external/pcre": Bp2BuildDefaultTrueRecursively, "external/protobuf": Bp2BuildDefaultTrueRecursively, "external/python/six": Bp2BuildDefaultTrueRecursively, @@ -225,6 +226,8 @@ var ( "prebuilts/sdk/current/support": Bp2BuildDefaultTrue, "prebuilts/tools/common/m2": Bp2BuildDefaultTrue, + "platform_testing/tests/example": Bp2BuildDefaultTrueRecursively, + "system/apex": Bp2BuildDefaultFalse, // TODO(b/207466993): flaky failures "system/apex/apexer": Bp2BuildDefaultTrue, "system/apex/libs": Bp2BuildDefaultTrueRecursively, @@ -240,6 +243,7 @@ var ( "system/core/libprocessgroup/cgrouprc": Bp2BuildDefaultTrue, "system/core/libprocessgroup/cgrouprc_format": Bp2BuildDefaultTrue, "system/core/libsystem": Bp2BuildDefaultTrueRecursively, + "system/core/libsysutils": Bp2BuildDefaultTrueRecursively, "system/core/libutils": Bp2BuildDefaultTrueRecursively, "system/core/libvndksupport": Bp2BuildDefaultTrueRecursively, "system/core/property_service/libpropertyinfoparser": Bp2BuildDefaultTrueRecursively, @@ -262,12 +266,13 @@ var ( "system/libhwbinder": Bp2BuildDefaultTrueRecursively, "system/libprocinfo": Bp2BuildDefaultTrue, "system/libziparchive": Bp2BuildDefaultTrueRecursively, - "system/logging/liblog": Bp2BuildDefaultTrueRecursively, + "system/logging": Bp2BuildDefaultTrueRecursively, "system/media/audio": Bp2BuildDefaultTrueRecursively, "system/media/audio_utils": Bp2BuildDefaultTrueRecursively, "system/memory/libion": Bp2BuildDefaultTrueRecursively, "system/memory/libmemunreachable": Bp2BuildDefaultTrueRecursively, "system/sepolicy/apex": Bp2BuildDefaultTrueRecursively, + "system/testing/gtest_extras": Bp2BuildDefaultTrueRecursively, "system/timezone/apex": Bp2BuildDefaultTrueRecursively, "system/timezone/output_data": Bp2BuildDefaultTrueRecursively, "system/tools/sysprop": Bp2BuildDefaultTrue, @@ -295,6 +300,7 @@ var ( "external/bazel-skylib":/* recursive = */ true, "external/guava":/* recursive = */ true, "external/jsr305":/* recursive = */ true, + "external/protobuf":/* recursive = */ false, "frameworks/ex/common":/* recursive = */ true, "packages/apps/Music":/* recursive = */ true, @@ -302,6 +308,7 @@ var ( "prebuilts/bazel":/* recursive = */ true, "prebuilts/bundletool":/* recursive = */ true, + "prebuilts/clang/host/linux-x86":/* recursive = */ false, "prebuilts/gcc":/* recursive = */ true, "prebuilts/build-tools":/* recursive = */ true, "prebuilts/jdk/jdk11":/* recursive = */ false, @@ -430,6 +437,13 @@ var ( // needed for aidl_interface's ndk backend "libbinder_ndk", + + "libusb", + + // needed by liblogd + "ILogcatManagerService_aidl", + "libincremental_aidl-cpp", + "incremental_aidl", } Bp2buildModuleTypeAlwaysConvertList = []string{ @@ -441,10 +455,20 @@ var ( Bp2buildModuleDoNotConvertList = []string{ // cc bugs - "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 + "libactivitymanager_aidl", // TODO(b/207426160): Unsupported use of aidl sources (via Dactivity_manager_procstate_aidl) in a cc_library + + // TODO(b/198619163) module has same name as source + "gen-kotlin-build-file.py", + "logtagd.rc", + "libgtest_ndk_c++", "libgtest_main_ndk_c++", // TODO(b/201816222): Requires sdk_version support. - "linkerconfig", "mdnsd", // TODO(b/202876379): has arch-variant static_executable + + // TODO(b/202876379): has arch-variant static_executable + "linkerconfig", + "mdnsd", + "libcutils_test_static", + "KernelLibcutilsTest", + "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 @@ -514,7 +538,6 @@ var ( "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 "libapexutil", // depends on unconverted modules: apex-info-list-tinyxml "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 @@ -546,30 +569,468 @@ var ( "truth-host-prebuilt", // depends on unconverted modules: truth-prebuilt "truth-prebuilt", // depends on unconverted modules: asm-7.0, guava - // b/215723302; awaiting tz{data,_version} to then rename targets conflicting with srcs - "tzdata", - "tz_version", - // '//bionic/libc:libc_bp2build_cc_library_static' is duplicated in the 'deps' attribute of rule "toybox-static", - // Do not convert the following modules because of duplicate labels checking in Bazel. - // See b/241283350. They should be removed from this list once the bug is fixed. - "libartpalette", - "libartbase", - "libdexfile", - "libartbased", - "libdexfile_static", - "libartbase-testing", - "libartbased-testing", - "libdexfile_support", - "libunwindstack", - "libunwindstack_local", - "libfdtrack", - "libc_malloc_debug", - "libutilscallstack", - "libunwindstack_utils", - "unwind_for_offline", + // cc_test related. + // Failing host cc_tests + "memunreachable_unit_test", + "libprocinfo_test", + "ziparchive-tests", + "gtest_isolated_tests", + "libunwindstack_unit_test", + "task_profiles_test", + "power_tests", // failing test on server, but not on host + + // reflect: call of reflect.Value.NumField on interface Value + // affects all cc_tests that depend on art_defaults + "libnativebridge-tests", + "libnativeloader_test", + "art_libnativebridge_cts_tests", + "art_standalone_libdexfile_external_tests", + "art_standalone_libdexfile_support_tests", + "libnativebridge-lazy-tests", + "libnativebridge-test-case", + "libnativebridge2-test-case", + "libnativebridge3-test-case", + "libnativebridge6-test-case", + "libnativebridge6prezygotefork", + + // cc_test with unconverted deps, or are device-only (and not verified to pass yet) + "AMRWBEncTest", + "AmrnbDecoderTest", // depends on unconverted modules: libaudioutils, libsndfile + "AmrnbEncoderTest", // depends on unconverted modules: libaudioutils, libsndfile + "AmrwbDecoderTest", // depends on unconverted modules: libsndfile, libaudioutils + "AmrwbEncoderTest", // depends on unconverted modules: libaudioutils, libsndfile + "Mp3DecoderTest", // depends on unconverted modules: libsndfile, libaudioutils + "Mpeg4H263DecoderTest", // depends on unconverted modules: libstagefright_foundation + "Mpeg4H263EncoderTest", + "adb_crypto_test", + "adb_pairing_auth_test", + "adb_pairing_connection_test", + "adb_tls_connection_test", + "adbd_test", // depends on unconverted modules: libusb + "avcdec", + "avcenc", + "bionic-benchmarks-tests", + "bionic-fortify-runtime-asan-test", + "bionic-stress-tests", + "bionic-unit-tests", + "bionic-unit-tests-glibc", + "bionic-unit-tests-static", + "boringssl_crypto_test", + "boringssl_ssl_test", + "cfi_test_helper", + "cfi_test_helper2", + "cintltst32", + "cintltst64", + "compare", + "cpuid", + "debuggerd_test", // depends on unconverted modules: libdebuggerd + "elftls_dlopen_ie_error_helper", + "exec_linker_helper", + "fastdeploy_test", // depends on unconverted modules: AdbWinApi, libadb_host, libandroidfw, libfastdeploy_host, libopenscreen-discovery, libopenscreen-platform-impl, libusb + "fdtrack_test", + "google-benchmark-test", + "googletest-param-test-test_ndk", // depends on unconverted modules: libgtest_ndk_c++ + "gtest-typed-test_test", + "gtest-typed-test_test_ndk", // depends on unconverted modules: libgtest_ndk_c++, libgtest_main_ndk_c++ + "gtest_ndk_tests", // depends on unconverted modules: libgtest_ndk_c++, libgtest_main_ndk_c++ + "gtest_ndk_tests_no_main", // depends on unconverted modules: libgtest_ndk_c++ + "gtest_prod_test_ndk", // depends on unconverted modules: libgtest_ndk_c++, libgtest_main_ndk_c++ + "gtest_tests", + "gtest_tests_no_main", + "gwp_asan_unittest", + "half_test", + "hashcombine_test", + "hevcdec", + "hevcenc", + "hwbinderThroughputTest", // depends on unconverted modules: android.hardware.tests.libhwbinder@1.0-impl.test, android.hardware.tests.libhwbinder@1.0 + "i444tonv12_eg", + "icu4c_sample_break", + "intltest32", + "intltest64", + "ion-unit-tests", + "jemalloc5_integrationtests", + "jemalloc5_unittests", + "ld_config_test_helper", + "ld_preload_test_helper", + "libBionicCtsGtestMain", // depends on unconverted modules: libgtest_isolated + "libBionicLoaderTests", // depends on unconverted modules: libmeminfo + "libapexutil_tests", // depends on unconverted modules: apex-info-list-tinyxml, libapexutil + "libavservices_minijail_unittest", + "libcutils_sockets_test", + "libexpectedutils_test", + "libhwbinder_latency", + "liblog-host-test", // failing tests + "libminijail_test", + "libminijail_unittest_gtest", + "libpackagelistparser_test", + "libprotobuf_vendor_suffix_test", + "libstagefright_amrnbdec_test", // depends on unconverted modules: libsndfile, libaudioutils + "libstagefright_amrnbenc_test", + "libstagefright_amrwbdec_test", // depends on unconverted modules: libsndfile, libaudioutils + "libstagefright_m4vh263enc_test", + "libstagefright_mp3dec_test", // depends on unconverted modules: libsndfile, libaudioutils + "libstatssocket_test", + "libvndksupport-tests", + "libyuv_unittest", + "linker-unit-tests", + "malloc_debug_system_tests", + "malloc_debug_unit_tests", + "malloc_hooks_system_tests", + "mat_test", + "mathtest", + "memunreachable_binder_test", // depends on unconverted modules: libbinder + "memunreachable_test", + "metadata_tests", + "minijail0_cli_unittest_gtest", + "mpeg2dec", + "mvcdec", + "ns_hidden_child_helper", + "pngtest", + "preinit_getauxval_test_helper", + "preinit_syscall_test_helper", + "psnr", + "quat_test", + "rappor-tests", // depends on unconverted modules: jsr305, guava + "scudo_unit_tests", + "stats-log-api-gen-test", // depends on unconverted modules: libstats_proto_host + "syscall_filter_unittest_gtest", + "sysprop_test", // depends on unconverted modules: libcom.android.sysprop.tests + "thread_exit_cb_helper", + "tls_properties_helper", + "ulp", + "vec_test", + "yuvconstants", + "yuvconvert", + "zipalign_tests", + // "zlib_tests", + + // cc_test_library + "clang_diagnostic_tests", + "exec_linker_helper_lib", + "fortify_disabled_for_tidy", + "ld_config_test_helper_lib1", + "ld_config_test_helper_lib2", + "ld_config_test_helper_lib3", + "ld_preload_test_helper_lib1", + "ld_preload_test_helper_lib2", + "libBionicElfTlsLoaderTests", + "libBionicElfTlsTests", + "libBionicElfTlsTests", + "libBionicFramePointerTests", + "libBionicFramePointerTests", + "libBionicStandardTests", + "libBionicStandardTests", + "libBionicTests", + "libart-broken", + "libatest_simple_zip", + "libcfi-test", + "libcfi-test-bad", + "libcrash_test", + // "libcrypto_fuzz_unsafe", + "libdl_preempt_test_1", + "libdl_preempt_test_2", + "libdl_test_df_1_global", + "libdlext_test", + "libdlext_test_different_soname", + "libdlext_test_fd", + "libdlext_test_norelro", + "libdlext_test_recursive", + "libdlext_test_zip", + "libfortify1-new-tests-clang", + "libfortify1-new-tests-clang", + "libfortify1-tests-clang", + "libfortify1-tests-clang", + "libfortify2-new-tests-clang", + "libfortify2-new-tests-clang", + "libfortify2-tests-clang", + "libfortify2-tests-clang", + "libgnu-hash-table-library", + "libicutest_static", + "liblinker_reloc_bench_000", + "liblinker_reloc_bench_001", + "liblinker_reloc_bench_002", + "liblinker_reloc_bench_003", + "liblinker_reloc_bench_004", + "liblinker_reloc_bench_005", + "liblinker_reloc_bench_006", + "liblinker_reloc_bench_007", + "liblinker_reloc_bench_008", + "liblinker_reloc_bench_009", + "liblinker_reloc_bench_010", + "liblinker_reloc_bench_011", + "liblinker_reloc_bench_012", + "liblinker_reloc_bench_013", + "liblinker_reloc_bench_014", + "liblinker_reloc_bench_015", + "liblinker_reloc_bench_016", + "liblinker_reloc_bench_017", + "liblinker_reloc_bench_018", + "liblinker_reloc_bench_019", + "liblinker_reloc_bench_020", + "liblinker_reloc_bench_021", + "liblinker_reloc_bench_022", + "liblinker_reloc_bench_023", + "liblinker_reloc_bench_024", + "liblinker_reloc_bench_025", + "liblinker_reloc_bench_026", + "liblinker_reloc_bench_027", + "liblinker_reloc_bench_028", + "liblinker_reloc_bench_029", + "liblinker_reloc_bench_030", + "liblinker_reloc_bench_031", + "liblinker_reloc_bench_032", + "liblinker_reloc_bench_033", + "liblinker_reloc_bench_034", + "liblinker_reloc_bench_035", + "liblinker_reloc_bench_036", + "liblinker_reloc_bench_037", + "liblinker_reloc_bench_038", + "liblinker_reloc_bench_039", + "liblinker_reloc_bench_040", + "liblinker_reloc_bench_041", + "liblinker_reloc_bench_042", + "liblinker_reloc_bench_043", + "liblinker_reloc_bench_044", + "liblinker_reloc_bench_045", + "liblinker_reloc_bench_046", + "liblinker_reloc_bench_047", + "liblinker_reloc_bench_048", + "liblinker_reloc_bench_049", + "liblinker_reloc_bench_050", + "liblinker_reloc_bench_051", + "liblinker_reloc_bench_052", + "liblinker_reloc_bench_053", + "liblinker_reloc_bench_054", + "liblinker_reloc_bench_055", + "liblinker_reloc_bench_056", + "liblinker_reloc_bench_057", + "liblinker_reloc_bench_058", + "liblinker_reloc_bench_059", + "liblinker_reloc_bench_060", + "liblinker_reloc_bench_061", + "liblinker_reloc_bench_062", + "liblinker_reloc_bench_063", + "liblinker_reloc_bench_064", + "liblinker_reloc_bench_065", + "liblinker_reloc_bench_066", + "liblinker_reloc_bench_067", + "liblinker_reloc_bench_068", + "liblinker_reloc_bench_069", + "liblinker_reloc_bench_070", + "liblinker_reloc_bench_071", + "liblinker_reloc_bench_072", + "liblinker_reloc_bench_073", + "liblinker_reloc_bench_074", + "liblinker_reloc_bench_075", + "liblinker_reloc_bench_076", + "liblinker_reloc_bench_077", + "liblinker_reloc_bench_078", + "liblinker_reloc_bench_079", + "liblinker_reloc_bench_080", + "liblinker_reloc_bench_081", + "liblinker_reloc_bench_082", + "liblinker_reloc_bench_083", + "liblinker_reloc_bench_084", + "liblinker_reloc_bench_085", + "liblinker_reloc_bench_086", + "liblinker_reloc_bench_087", + "liblinker_reloc_bench_088", + "liblinker_reloc_bench_089", + "liblinker_reloc_bench_090", + "liblinker_reloc_bench_091", + "liblinker_reloc_bench_092", + "liblinker_reloc_bench_093", + "liblinker_reloc_bench_094", + "liblinker_reloc_bench_095", + "liblinker_reloc_bench_096", + "liblinker_reloc_bench_097", + "liblinker_reloc_bench_098", + "liblinker_reloc_bench_099", + "liblinker_reloc_bench_100", + "liblinker_reloc_bench_101", + "liblinker_reloc_bench_102", + "liblinker_reloc_bench_103", + "liblinker_reloc_bench_104", + "liblinker_reloc_bench_105", + "liblinker_reloc_bench_106", + "liblinker_reloc_bench_107", + "liblinker_reloc_bench_108", + "liblinker_reloc_bench_109", + "liblinker_reloc_bench_110", + "liblinker_reloc_bench_111", + "liblinker_reloc_bench_112", + "liblinker_reloc_bench_113", + "liblinker_reloc_bench_114", + "liblinker_reloc_bench_115", + "liblinker_reloc_bench_116", + "liblinker_reloc_bench_117", + "liblinker_reloc_bench_118", + "liblinker_reloc_bench_119", + "liblinker_reloc_bench_120", + "liblinker_reloc_bench_121", + "liblinker_reloc_bench_122", + "liblinker_reloc_bench_123", + "liblinker_reloc_bench_124", + "liblinker_reloc_bench_125", + "liblinker_reloc_bench_126", + "liblinker_reloc_bench_127", + "liblinker_reloc_bench_128", + "liblinker_reloc_bench_129", + "liblinker_reloc_bench_130", + "liblinker_reloc_bench_131", + "liblinker_reloc_bench_132", + "liblinker_reloc_bench_133", + "liblinker_reloc_bench_134", + "liblinker_reloc_bench_135", + "liblinker_reloc_bench_136", + "liblinker_reloc_bench_137", + "liblinker_reloc_bench_138", + "liblinker_reloc_bench_139", + "liblinker_reloc_bench_140", + "liblinker_reloc_bench_141", + "liblinker_reloc_bench_142", + "liblinker_reloc_bench_143", + "liblinker_reloc_bench_144", + "liblinker_reloc_bench_145", + "liblinker_reloc_bench_146", + "liblinker_reloc_bench_147", + "liblinker_reloc_bench_148", + "liblinker_reloc_bench_149", + "liblinker_reloc_bench_150", + "liblinker_reloc_bench_151", + "liblinker_reloc_bench_152", + "liblinker_reloc_bench_153", + "liblinker_reloc_bench_154", + "liblinker_reloc_bench_155", + "liblinker_reloc_bench_156", + "liblinker_reloc_bench_157", + "liblinker_reloc_bench_158", + "liblinker_reloc_bench_159", + "liblinker_reloc_bench_160", + "liblinker_reloc_bench_161", + "liblinker_reloc_bench_162", + "liblinker_reloc_bench_163", + "liblinker_reloc_bench_164", + "liblinker_reloc_bench_165", + "liblinker_reloc_bench_166", + "liblinker_reloc_bench_167", + "liblinker_reloc_bench_168", + "libns_hidden_child_app", + "libns_hidden_child_global", + "libns_hidden_child_internal", + "libns_hidden_child_public", + "libnstest_dlopened", + "libnstest_ns_a_public1", + "libnstest_ns_a_public1_internal", + "libnstest_ns_b_public2", + "libnstest_ns_b_public3", + "libnstest_private", + "libnstest_private_external", + "libnstest_public", + "libnstest_public_internal", + "libnstest_root", + "libnstest_root_not_isolated", + "librelocations-ANDROID_REL", + "librelocations-ANDROID_RELR", + "librelocations-RELR", + "librelocations-fat", + "libsegment_gap_inner", + "libsegment_gap_outer", + // "libssl_fuzz_unsafe", + "libstatssocket_private", + "libsysv-hash-table-library", + "libtest_atexit", + "libtest_check_order_dlsym", + "libtest_check_order_dlsym_1_left", + "libtest_check_order_dlsym_2_right", + "libtest_check_order_dlsym_3_c", + "libtest_check_order_dlsym_a", + "libtest_check_order_dlsym_b", + "libtest_check_order_dlsym_d", + "libtest_check_order_reloc_root", + "libtest_check_order_reloc_root_1", + "libtest_check_order_reloc_root_2", + "libtest_check_order_reloc_siblings", + "libtest_check_order_reloc_siblings_1", + "libtest_check_order_reloc_siblings_2", + "libtest_check_order_reloc_siblings_3", + "libtest_check_order_reloc_siblings_a", + "libtest_check_order_reloc_siblings_b", + "libtest_check_order_reloc_siblings_c", + "libtest_check_order_reloc_siblings_c_1", + "libtest_check_order_reloc_siblings_c_2", + "libtest_check_order_reloc_siblings_d", + "libtest_check_order_reloc_siblings_e", + "libtest_check_order_reloc_siblings_f", + "libtest_check_rtld_next_from_library", + "libtest_dlopen_df_1_global", + "libtest_dlopen_from_ctor", + "libtest_dlopen_from_ctor_main", + "libtest_dlopen_weak_undefined_func", + "libtest_dlsym_df_1_global", + "libtest_dlsym_from_this", + "libtest_dlsym_from_this_child", + "libtest_dlsym_from_this_grandchild", + "libtest_dlsym_weak_func", + "libtest_dt_runpath_a", + "libtest_dt_runpath_b", + "libtest_dt_runpath_c", + "libtest_dt_runpath_d", + "libtest_dt_runpath_d_zip", + "libtest_dt_runpath_x", + "libtest_dt_runpath_y", + "libtest_elftls_dynamic", + "libtest_elftls_dynamic_filler_1", + "libtest_elftls_dynamic_filler_2", + "libtest_elftls_dynamic_filler_3", + "libtest_elftls_shared_var", + "libtest_elftls_shared_var_ie", + "libtest_elftls_tprel", + "libtest_empty", + "libtest_ifunc", + "libtest_ifunc_variable", + "libtest_ifunc_variable_impl", + "libtest_indirect_thread_local_dtor", + "libtest_init_fini_order_child", + "libtest_init_fini_order_grand_child", + "libtest_init_fini_order_root", + "libtest_init_fini_order_root2", + "libtest_missing_symbol", + "libtest_missing_symbol_child_private", + "libtest_missing_symbol_child_public", + "libtest_missing_symbol_root", + "libtest_nodelete_1", + "libtest_nodelete_2", + "libtest_nodelete_dt_flags_1", + "libtest_pthread_atfork", + "libtest_relo_check_dt_needed_order", + "libtest_relo_check_dt_needed_order_1", + "libtest_relo_check_dt_needed_order_2", + "libtest_simple", + "libtest_thread_local_dtor", + "libtest_thread_local_dtor2", + "libtest_two_parents_child", + "libtest_two_parents_parent1", + "libtest_two_parents_parent2", + "libtest_versioned_lib", + "libtest_versioned_libv1", + "libtest_versioned_libv2", + "libtest_versioned_otherlib", + "libtest_versioned_otherlib_empty", + "libtest_versioned_uselibv1", + "libtest_versioned_uselibv2", + "libtest_versioned_uselibv2_other", + "libtest_versioned_uselibv3_other", + "libtest_with_dependency", + "libtest_with_dependency_loop", + "libtest_with_dependency_loop_a", + "libtest_with_dependency_loop_b", + "libtest_with_dependency_loop_b_tmp", + "libtest_with_dependency_loop_c", + "libtestshared", } Bp2buildCcLibraryStaticOnlyList = []string{} diff --git a/android/bazel.go b/android/bazel.go index 15729c18d..27ec92bd1 100644 --- a/android/bazel.go +++ b/android/bazel.go @@ -17,9 +17,6 @@ package android import ( "bufio" "errors" - "fmt" - "io/ioutil" - "path/filepath" "strings" "github.com/google/blueprint" @@ -117,7 +114,6 @@ type Bazelable interface { GetBazelLabel(ctx BazelConversionPathContext, module blueprint.Module) string ShouldConvertWithBp2build(ctx BazelConversionContext) bool shouldConvertWithBp2build(ctx bazelOtherModuleContext, module blueprint.Module) bool - GetBazelBuildFileContents(c Config, path, name string) (string, error) ConvertWithBp2build(ctx TopDownMutatorContext) // namespacedVariableProps is a map from a soong config variable namespace @@ -498,28 +494,6 @@ func bp2buildDefaultTrueRecursively(packagePath string, config allowlists.Bp2Bui return false, packagePath } -// GetBazelBuildFileContents returns the file contents of a hand-crafted BUILD file if available or -// an error if there are errors reading the file. -// TODO(b/181575318): currently we append the whole BUILD file, let's change that to do -// something more targeted based on the rule type and target. -func (b *BazelModuleBase) GetBazelBuildFileContents(c Config, path, name string) (string, error) { - if !strings.Contains(b.HandcraftedLabel(), path) { - return "", fmt.Errorf("%q not found in bazel_module.label %q", path, b.HandcraftedLabel()) - } - name = filepath.Join(path, name) - f, err := c.fs.Open(name) - if err != nil { - return "", err - } - defer f.Close() - - data, err := ioutil.ReadAll(f) - if err != nil { - return "", err - } - return string(data[:]), nil -} - func registerBp2buildConversionMutator(ctx RegisterMutatorsContext) { ctx.TopDown("bp2build_conversion", convertWithBp2build).Parallel() } diff --git a/android/paths.go b/android/paths.go index 1f6912589..27f4bf577 100644 --- a/android/paths.go +++ b/android/paths.go @@ -1474,41 +1474,6 @@ func pathForModuleOut(ctx ModuleOutPathContext) OutputPath { return PathForOutput(ctx, ".intermediates", ctx.ModuleDir(), ctx.ModuleName(), ctx.ModuleSubDir()) } -// PathForVndkRefAbiDump returns an OptionalPath representing the path of the -// reference abi dump for the given module. This is not guaranteed to be valid. -func PathForVndkRefAbiDump(ctx ModuleInstallPathContext, version, fileName string, - isNdk, isVndk, isGzip bool) OptionalPath { - - currentArchType := ctx.Arch().ArchType - primaryArchType := ctx.Config().DevicePrimaryArchType() - archName := currentArchType.String() - if currentArchType != primaryArchType { - archName += "_" + primaryArchType.String() - } - - var dirName string - if isNdk { - dirName = "ndk" - } else if isVndk { - dirName = "vndk" - } else { - dirName = "platform" // opt-in libs - } - - binderBitness := ctx.DeviceConfig().BinderBitness() - - var ext string - if isGzip { - ext = ".lsdump.gz" - } else { - ext = ".lsdump" - } - - return ExistentPathForSource(ctx, "prebuilts", "abi-dumps", dirName, - version, binderBitness, archName, "source-based", - fileName+ext) -} - // PathForModuleOut returns a Path representing the paths... under the module's // output directory. func PathForModuleOut(ctx ModuleOutPathContext, paths ...string) ModuleOutPath { diff --git a/bp2build/Android.bp b/bp2build/Android.bp index cb25627b2..3d9fc5a2b 100644 --- a/bp2build/Android.bp +++ b/bp2build/Android.bp @@ -51,6 +51,7 @@ bootstrap_go_package { "cc_prebuilt_library_conversion_test.go", "cc_prebuilt_library_shared_test.go", "cc_prebuilt_library_static_test.go", + "cc_test_conversion_test.go", "cc_yasm_conversion_test.go", "conversion_test.go", "filegroup_conversion_test.go", @@ -63,6 +64,7 @@ bootstrap_go_package { "java_plugin_conversion_test.go", "java_proto_conversion_test.go", "linker_config_conversion_test.go", + "ndk_headers_conversion_test.go", "performance_test.go", "prebuilt_etc_conversion_test.go", "python_binary_conversion_test.go", diff --git a/bp2build/aar_conversion_test.go b/bp2build/aar_conversion_test.go index 8e7c2b5da..ff8269420 100644 --- a/bp2build/aar_conversion_test.go +++ b/bp2build/aar_conversion_test.go @@ -53,7 +53,7 @@ android_library { } `, ExpectedBazelTargets: []string{ - makeBazelTarget( + MakeBazelTarget( "android_library", "TestLib", AttrNameToString{ @@ -120,7 +120,7 @@ android_library_import { } `, ExpectedBazelTargets: []string{ - makeBazelTarget( + MakeBazelTarget( "aar_import", "TestImport", AttrNameToString{ diff --git a/bp2build/android_app_conversion_test.go b/bp2build/android_app_conversion_test.go index a37af12bd..e112be3a3 100644 --- a/bp2build/android_app_conversion_test.go +++ b/bp2build/android_app_conversion_test.go @@ -47,7 +47,7 @@ android_app { } `, ExpectedBazelTargets: []string{ - makeBazelTarget("android_binary", "TestApp", AttrNameToString{ + MakeBazelTarget("android_binary", "TestApp", AttrNameToString{ "srcs": `["app.java"]`, "manifest": `"AndroidManifest.xml"`, "resource_files": `["res/res.png"]`, @@ -79,7 +79,7 @@ android_app { } `, ExpectedBazelTargets: []string{ - makeBazelTarget("android_binary", "TestApp", AttrNameToString{ + MakeBazelTarget("android_binary", "TestApp", AttrNameToString{ "srcs": `["app.java"]`, "manifest": `"manifest/AndroidManifest.xml"`, "resource_files": `[ @@ -119,7 +119,7 @@ android_app { } `, ExpectedBazelTargets: []string{ - makeBazelTarget("android_binary", "TestApp", AttrNameToString{ + MakeBazelTarget("android_binary", "TestApp", AttrNameToString{ "srcs": `select({ "//build/bazel/platforms/arch:arm": ["arm.java"], "//build/bazel/platforms/arch:x86": ["x86.java"], diff --git a/bp2build/apex_conversion_test.go b/bp2build/apex_conversion_test.go index 415e69558..b0a2966b3 100644 --- a/bp2build/apex_conversion_test.go +++ b/bp2build/apex_conversion_test.go @@ -141,7 +141,7 @@ apex { } `, ExpectedBazelTargets: []string{ - makeBazelTarget("apex", "com.android.apogee", AttrNameToString{ + MakeBazelTarget("apex", "com.android.apogee", AttrNameToString{ "android_manifest": `"ApogeeAndroidManifest.xml"`, "binaries": `[ ":cc_binary_1", @@ -203,7 +203,7 @@ apex { } `, ExpectedBazelTargets: []string{ - makeBazelTarget("apex", "com.android.apogee", AttrNameToString{ + MakeBazelTarget("apex", "com.android.apogee", AttrNameToString{ "file_contexts": `"//a/b:com.android.apogee-file_contexts"`, "manifest": `"apex_manifest.json"`, }), @@ -223,7 +223,7 @@ apex { } `, ExpectedBazelTargets: []string{ - makeBazelTarget("apex", "com.android.apogee", AttrNameToString{ + MakeBazelTarget("apex", "com.android.apogee", AttrNameToString{ "file_contexts": `"file_contexts_file"`, "manifest": `"apex_manifest.json"`, }), @@ -252,7 +252,7 @@ apex { } `, ExpectedBazelTargets: []string{ - makeBazelTarget("apex", "com.android.apogee", AttrNameToString{ + MakeBazelTarget("apex", "com.android.apogee", AttrNameToString{ "file_contexts": `"//system/sepolicy/apex:com.android.apogee-file_contexts"`, "manifest": `"apex_manifest.json"`, }), @@ -275,7 +275,7 @@ filegroup { }, Blueprint: createMultilibBlueprint("both"), ExpectedBazelTargets: []string{ - makeBazelTarget("apex", "com.android.apogee", AttrNameToString{ + MakeBazelTarget("apex", "com.android.apogee", AttrNameToString{ "native_shared_libs_32": `[ ":native_shared_lib_1", ":native_shared_lib_3", @@ -319,7 +319,7 @@ filegroup { }, Blueprint: createMultilibBlueprint("first"), ExpectedBazelTargets: []string{ - makeBazelTarget("apex", "com.android.apogee", AttrNameToString{ + MakeBazelTarget("apex", "com.android.apogee", AttrNameToString{ "native_shared_libs_32": `select({ "//build/bazel/platforms/arch:arm": [ ":native_shared_lib_1", @@ -368,7 +368,7 @@ filegroup { }, Blueprint: createMultilibBlueprint("32"), ExpectedBazelTargets: []string{ - makeBazelTarget("apex", "com.android.apogee", AttrNameToString{ + MakeBazelTarget("apex", "com.android.apogee", AttrNameToString{ "native_shared_libs_32": `[ ":native_shared_lib_1", ":native_shared_lib_3", @@ -399,7 +399,7 @@ filegroup { }, Blueprint: createMultilibBlueprint("64"), ExpectedBazelTargets: []string{ - makeBazelTarget("apex", "com.android.apogee", AttrNameToString{ + MakeBazelTarget("apex", "com.android.apogee", AttrNameToString{ "native_shared_libs_64": `select({ "//build/bazel/platforms/arch:arm64": [ ":native_shared_lib_1", @@ -439,7 +439,7 @@ apex { manifest: "apogee_manifest.json", } `, - ExpectedBazelTargets: []string{makeBazelTarget("apex", "com.android.apogee", AttrNameToString{ + ExpectedBazelTargets: []string{MakeBazelTarget("apex", "com.android.apogee", AttrNameToString{ "manifest": `"apogee_manifest.json"`, "file_contexts": `"//system/sepolicy/apex:com.android.apogee-file_contexts"`, }), @@ -467,7 +467,7 @@ apex { bazel_module: { bp2build_available: true }, } `, - ExpectedBazelTargets: []string{makeBazelTarget("apex", "apogee", AttrNameToString{ + ExpectedBazelTargets: []string{MakeBazelTarget("apex", "apogee", AttrNameToString{ "manifest": `"manifest.json"`, "file_contexts": `"//system/sepolicy/apex:apogee-file_contexts"`, }), @@ -624,7 +624,7 @@ override_apex { } `, ExpectedBazelTargets: []string{ - makeBazelTarget("apex", "com.google.android.apogee", AttrNameToString{ + MakeBazelTarget("apex", "com.google.android.apogee", AttrNameToString{ "android_manifest": `"ApogeeAndroidManifest.xml"`, "binaries": `[ ":cc_binary_1", @@ -684,7 +684,7 @@ override_apex { } `, ExpectedBazelTargets: []string{ - makeBazelTarget("apex", "com.google.android.apogee", AttrNameToString{ + MakeBazelTarget("apex", "com.google.android.apogee", AttrNameToString{ "file_contexts": `"//system/sepolicy/apex:com.android.apogee-file_contexts"`, "manifest": `"//a/b:apex_manifest.json"`, }), @@ -718,7 +718,7 @@ override_apex { } `, ExpectedBazelTargets: []string{ - makeBazelTarget("apex", "com.google.android.apogee", AttrNameToString{ + MakeBazelTarget("apex", "com.google.android.apogee", AttrNameToString{ "file_contexts": `"//system/sepolicy/apex:com.android.apogee-file_contexts"`, "manifest": `"//a/b:apogee_manifest.json"`, }), @@ -750,7 +750,7 @@ override_apex { } `, ExpectedBazelTargets: []string{ - makeBazelTarget("apex", "com.google.android.apogee", AttrNameToString{ + MakeBazelTarget("apex", "com.google.android.apogee", AttrNameToString{ "file_contexts": `"//system/sepolicy/apex:com.android.apogee-file_contexts"`, "manifest": `"apex_manifest.json"`, }), @@ -783,7 +783,7 @@ override_apex { } `, ExpectedBazelTargets: []string{ - makeBazelTarget("apex", "com.google.android.apogee", AttrNameToString{ + MakeBazelTarget("apex", "com.google.android.apogee", AttrNameToString{ "file_contexts": `"//system/sepolicy/apex:com.android.apogee-file_contexts"`, "manifest": `"apogee_manifest.json"`, }), @@ -816,7 +816,7 @@ override_apex { } `, ExpectedBazelTargets: []string{ - makeBazelTarget("apex", "com.google.android.apogee", AttrNameToString{ + MakeBazelTarget("apex", "com.google.android.apogee", AttrNameToString{ "file_contexts": `"//system/sepolicy/apex:com.android.apogee-file_contexts"`, "manifest": `"apex_manifest.json"`, "package_name": `"com.google.android.apogee"`, @@ -855,7 +855,7 @@ override_apex { } `, ExpectedBazelTargets: []string{ - makeBazelTarget("apex", "com.google.android.apogee", AttrNameToString{ + MakeBazelTarget("apex", "com.google.android.apogee", AttrNameToString{ "file_contexts": `"//system/sepolicy/apex:com.android.apogee-file_contexts"`, "manifest": `"apex_manifest.json"`, "prebuilts": `[":prebuilt_file"]`, @@ -900,7 +900,7 @@ override_apex { } `, ExpectedBazelTargets: []string{ - makeBazelTarget("apex", "com.google.android.apogee", AttrNameToString{ + MakeBazelTarget("apex", "com.google.android.apogee", AttrNameToString{ "file_contexts": `"//system/sepolicy/apex:com.android.apogee-file_contexts"`, "manifest": `"apex_manifest.json"`, "prebuilts": `[":prebuilt_file2"]`, @@ -940,7 +940,7 @@ override_apex { } `, ExpectedBazelTargets: []string{ - makeBazelTarget("apex", "com.google.android.apogee", AttrNameToString{ + MakeBazelTarget("apex", "com.google.android.apogee", AttrNameToString{ "file_contexts": `"//system/sepolicy/apex:com.android.apogee-file_contexts"`, "manifest": `"apex_manifest.json"`, "prebuilts": `[]`, @@ -974,7 +974,7 @@ override_apex { } `, ExpectedBazelTargets: []string{ - makeBazelTarget("apex", "com.google.android.apogee", AttrNameToString{ + MakeBazelTarget("apex", "com.google.android.apogee", AttrNameToString{ "file_contexts": `"//system/sepolicy/apex:com.android.apogee-file_contexts"`, "manifest": `"apex_manifest.json"`, "logging_parent": `"foo.bar.baz"`, @@ -1009,7 +1009,7 @@ override_apex { } `, ExpectedBazelTargets: []string{ - makeBazelTarget("apex", "com.google.android.apogee", AttrNameToString{ + MakeBazelTarget("apex", "com.google.android.apogee", AttrNameToString{ "file_contexts": `"//system/sepolicy/apex:com.android.apogee-file_contexts"`, "manifest": `"apex_manifest.json"`, "logging_parent": `"foo.bar.baz.override"`, diff --git a/bp2build/build_conversion.go b/bp2build/build_conversion.go index 8de6d1881..cf465335b 100644 --- a/bp2build/build_conversion.go +++ b/bp2build/build_conversion.go @@ -43,7 +43,6 @@ type BazelTarget struct { content string ruleClass string bzlLoadLocation string - handcrafted bool } // IsLoadedFromStarlark determines if the BazelTarget's rule class is loaded from a .bzl file, @@ -65,25 +64,9 @@ func (t BazelTarget) Label() string { // BazelTargets is a typedef for a slice of BazelTarget objects. type BazelTargets []BazelTarget -// HasHandcraftedTargetsreturns true if a set of bazel targets contain -// handcrafted ones. -func (targets BazelTargets) hasHandcraftedTargets() bool { - for _, target := range targets { - if target.handcrafted { - return true - } - } - return false -} - -// sort a list of BazelTargets in-place, by name, and by generated/handcrafted types. +// sort a list of BazelTargets in-place by name func (targets BazelTargets) sort() { sort.Slice(targets, func(i, j int) bool { - if targets[i].handcrafted != targets[j].handcrafted { - // Handcrafted targets will be generated after the bp2build generated targets. - return targets[j].handcrafted - } - // This will cover all bp2build generated targets. return targets[i].name < targets[j].name }) } @@ -94,18 +77,6 @@ func (targets BazelTargets) sort() { func (targets BazelTargets) String() string { var res string for i, target := range targets { - // There is only at most 1 handcrafted "target", because its contents - // represent the entire BUILD file content from the tree. See - // build_conversion.go#getHandcraftedBuildContent for more information. - // - // Add a header to make it easy to debug where the handcrafted targets - // are in a generated BUILD file. - if target.handcrafted { - res += "# -----------------------------\n" - res += "# Section: Handcrafted targets. \n" - res += "# -----------------------------\n\n" - } - res += target.content if i != len(targets)-1 { res += "\n\n" @@ -256,7 +227,6 @@ func (r conversionResults) BuildDirToTargets() map[string]BazelTargets { func GenerateBazelTargets(ctx *CodegenContext, generateFilegroups bool) (conversionResults, []error) { buildFileToTargets := make(map[string]BazelTargets) - buildFileToAppend := make(map[string]bool) // Simple metrics tracking for bp2build metrics := CodegenMetrics{ @@ -288,30 +258,10 @@ func GenerateBazelTargets(ctx *CodegenContext, generateFilegroups bool) (convers // Handle modules converted to handcrafted targets. // // Since these modules are associated with some handcrafted - // target in a BUILD file, we simply append the entire contents - // of that BUILD file to the generated BUILD file. - // - // The append operation is only done once, even if there are - // multiple modules from the same directory associated to - // targets in the same BUILD file (or package). + // target in a BUILD file, we don't autoconvert them. // Log the module. metrics.AddConvertedModule(m, moduleType, Handcrafted) - - pathToBuildFile := getBazelPackagePath(b) - if _, exists := buildFileToAppend[pathToBuildFile]; exists { - // Append the BUILD file content once per package, at most. - return - } - t, err := getHandcraftedBuildContent(ctx, b, pathToBuildFile) - if err != nil { - errs = append(errs, fmt.Errorf("Error converting %s: %s", bpCtx.ModuleName(m), err)) - return - } - targets = append(targets, t) - // TODO(b/181575318): currently we append the whole BUILD file, let's change that to do - // something more targeted based on the rule type and target - buildFileToAppend[pathToBuildFile] = true } else if aModule, ok := m.(android.Module); ok && aModule.IsConvertedByBp2build() { // Handle modules converted to generated targets. @@ -397,29 +347,6 @@ func GenerateBazelTargets(ctx *CodegenContext, generateFilegroups bool) (convers }, errs } -func getBazelPackagePath(b android.Bazelable) string { - label := b.HandcraftedLabel() - pathToBuildFile := strings.TrimPrefix(label, "//") - pathToBuildFile = strings.Split(pathToBuildFile, ":")[0] - return pathToBuildFile -} - -func getHandcraftedBuildContent(ctx *CodegenContext, b android.Bazelable, pathToBuildFile string) (BazelTarget, error) { - p := android.ExistentPathForSource(ctx, pathToBuildFile, HandcraftedBuildFileName) - if !p.Valid() { - return BazelTarget{}, fmt.Errorf("Could not find file %q for handcrafted target.", pathToBuildFile) - } - c, err := b.GetBazelBuildFileContents(ctx.Config(), pathToBuildFile, HandcraftedBuildFileName) - if err != nil { - return BazelTarget{}, err - } - // TODO(b/181575318): once this is more targeted, we need to include name, rule class, etc - return BazelTarget{ - content: c, - handcrafted: true, - }, nil -} - func generateBazelTargets(ctx bpToBuildContext, m android.Module) []BazelTarget { var targets []BazelTarget for _, m := range m.Bp2buildTargets() { @@ -462,7 +389,6 @@ func generateBazelTarget(ctx bpToBuildContext, m bp2buildModule) BazelTarget { targetName, attributes, ), - handcrafted: false, } } diff --git a/bp2build/build_conversion_test.go b/bp2build/build_conversion_test.go index 1ac7518a8..587b8d90c 100644 --- a/bp2build/build_conversion_test.go +++ b/bp2build/build_conversion_test.go @@ -238,7 +238,7 @@ func TestGenerateBazelTargetModules(t *testing.T) { bazel_module: { bp2build_available: true }, }`, ExpectedBazelTargets: []string{ - makeBazelTarget("custom", "foo", AttrNameToString{ + MakeBazelTarget("custom", "foo", AttrNameToString{ "string_literal_prop": `""`, }), }, @@ -251,7 +251,7 @@ func TestGenerateBazelTargetModules(t *testing.T) { bazel_module: { bp2build_available: true }, }`, ExpectedBazelTargets: []string{ - makeBazelTarget("custom", "foo", AttrNameToString{ + MakeBazelTarget("custom", "foo", AttrNameToString{ "string_literal_prop": `"PROP"`, }), }, @@ -267,7 +267,7 @@ func TestGenerateBazelTargetModules(t *testing.T) { bazel_module: { bp2build_available: true }, }`, ExpectedBazelTargets: []string{ - makeBazelTarget("custom", "foo", AttrNameToString{ + MakeBazelTarget("custom", "foo", AttrNameToString{ "string_literal_prop": `select({ "//build/bazel/platforms/arch:arm": "ARM", "//build/bazel/platforms/arch:arm64": "ARM64", @@ -284,7 +284,7 @@ func TestGenerateBazelTargetModules(t *testing.T) { bazel_module: { bp2build_available: true }, }`, ExpectedBazelTargets: []string{ - makeBazelTarget("custom", "foo", AttrNameToString{ + MakeBazelTarget("custom", "foo", AttrNameToString{ "string_ptr_prop": `""`, }), }, @@ -298,7 +298,7 @@ func TestGenerateBazelTargetModules(t *testing.T) { bazel_module: { bp2build_available: true }, }`, ExpectedBazelTargets: []string{ - makeBazelTarget("custom", "foo", AttrNameToString{ + MakeBazelTarget("custom", "foo", AttrNameToString{ "string_list_prop": `[ "a", "b", @@ -316,7 +316,7 @@ func TestGenerateBazelTargetModules(t *testing.T) { bazel_module: { bp2build_available: true }, }`, ExpectedBazelTargets: []string{ - makeBazelTarget("custom", "foo", AttrNameToString{ + MakeBazelTarget("custom", "foo", AttrNameToString{ "string_list_prop": `[ "\t", "\n", @@ -339,10 +339,10 @@ custom { bazel_module: { bp2build_available: true }, }`, ExpectedBazelTargets: []string{ - makeBazelTarget("custom", "dep", AttrNameToString{ + MakeBazelTarget("custom", "dep", AttrNameToString{ "arch_paths": `["abc"]`, }), - makeBazelTarget("custom", "has_dep", AttrNameToString{ + MakeBazelTarget("custom", "has_dep", AttrNameToString{ "arch_paths": `[":dep"]`, }), }, @@ -355,7 +355,7 @@ custom { bazel_module: { bp2build_available: true }, }`, ExpectedBazelTargets: []string{ - makeBazelTarget("custom", "has_dep", AttrNameToString{ + MakeBazelTarget("custom", "has_dep", AttrNameToString{ "arch_paths": `[":dep__BP2BUILD__MISSING__DEP"]`, }), }, @@ -391,7 +391,7 @@ custom { bazel_module: { bp2build_available: true }, }`, ExpectedBazelTargets: []string{ - makeBazelTarget("custom", "arch_paths", AttrNameToString{ + MakeBazelTarget("custom", "arch_paths", AttrNameToString{ "arch_paths": `select({ "//build/bazel/platforms/arch:arm": [ "arm.txt", @@ -469,10 +469,10 @@ custom { bazel_module: { bp2build_available: true }, }`, ExpectedBazelTargets: []string{ - makeBazelTarget("custom", "dep", AttrNameToString{ + MakeBazelTarget("custom", "dep", AttrNameToString{ "arch_paths": `["abc"]`, }), - makeBazelTarget("custom", "has_dep", AttrNameToString{ + MakeBazelTarget("custom", "has_dep", AttrNameToString{ "arch_paths": `select({ "//build/bazel/platforms/arch:x86": [":dep"], "//conditions:default": [], @@ -488,7 +488,7 @@ custom { bazel_module: { bp2build_available: true }, }`, ExpectedBazelTargets: []string{ - makeBazelTarget("custom", "embedded_props", AttrNameToString{ + MakeBazelTarget("custom", "embedded_props", AttrNameToString{ "embedded_attr": `"abc"`, }), }, @@ -501,7 +501,7 @@ custom { bazel_module: { bp2build_available: true }, }`, ExpectedBazelTargets: []string{ - makeBazelTarget("custom", "ptr_to_embedded_props", AttrNameToString{ + MakeBazelTarget("custom", "ptr_to_embedded_props", AttrNameToString{ "other_embedded_attr": `"abc"`, }), }, @@ -1299,9 +1299,7 @@ func TestCombineBuildFilesBp2buildTargets(t *testing.T) { name: "fg_foo", bazel_module: { label: "//other:fg_foo" }, }`, - ExpectedBazelTargets: []string{ - `// BUILD file`, - }, + ExpectedBazelTargets: []string{}, Filesystem: map[string]string{ "other/BUILD.bazel": `// BUILD file`, }, @@ -1319,9 +1317,7 @@ func TestCombineBuildFilesBp2buildTargets(t *testing.T) { name: "foo", bazel_module: { label: "//other:foo" }, }`, - ExpectedBazelTargets: []string{ - `// BUILD file`, - }, + ExpectedBazelTargets: []string{}, Filesystem: map[string]string{ "other/BUILD.bazel": `// BUILD file`, }, @@ -1349,7 +1345,6 @@ func TestCombineBuildFilesBp2buildTargets(t *testing.T) { }, ExpectedBazelTargets: []string{ MakeBazelTargetNoRestrictions("filegroup", "fg_foo", map[string]string{}), - `// definition for fg_bar`, }, }, { @@ -1375,7 +1370,6 @@ func TestCombineBuildFilesBp2buildTargets(t *testing.T) { }`, ExpectedBazelTargets: []string{ MakeBazelTargetNoRestrictions("filegroup", "fg_bar", map[string]string{}), - `// BUILD file`, }, }, } @@ -1420,9 +1414,6 @@ func TestCombineBuildFilesBp2buildTargets(t *testing.T) { if actualCount != expectedCount { t.Errorf("Expected %d bazel target, got %d\n%s", expectedCount, actualCount, bazelTargets) } - if !strings.Contains(bazelTargets.String(), "Section: Handcrafted targets. ") { - t.Errorf("Expected string representation of bazelTargets to contain handcrafted section header.") - } for i, target := range bazelTargets { actualContent := target.content expectedContent := testCase.ExpectedBazelTargets[i] @@ -1545,7 +1536,7 @@ python_library { bazel_module: { bp2build_available: true }, }`, ExpectedBazelTargets: []string{ - makeBazelTarget("py_library", "fg_foo", map[string]string{ + MakeBazelTarget("py_library", "fg_foo", map[string]string{ "data": `select({ "//build/bazel/platforms/arch:arm": [":reqdarm"], "//build/bazel/platforms/arch:x86": [":reqdx86"], @@ -1572,7 +1563,7 @@ python_library { bazel_module: { bp2build_available: true }, }`, ExpectedBazelTargets: []string{ - makeBazelTarget("py_library", "fg_foo", map[string]string{ + MakeBazelTarget("py_library", "fg_foo", map[string]string{ "data": `[ "data.bin", ":reqd", diff --git a/bp2build/cc_library_conversion_test.go b/bp2build/cc_library_conversion_test.go index c1b4cd097..45f15bfcd 100644 --- a/bp2build/cc_library_conversion_test.go +++ b/bp2build/cc_library_conversion_test.go @@ -355,7 +355,7 @@ cc_library { } `, ExpectedBazelTargets: []string{ - makeBazelTarget("cc_library_static", "a_bp2build_cc_library_static", AttrNameToString{ + MakeBazelTarget("cc_library_static", "a_bp2build_cc_library_static", AttrNameToString{ "copts": `[ "bothflag", "staticflag", @@ -377,7 +377,7 @@ cc_library { ":whole_and_static_lib_for_both", ":whole_static_lib_for_static", ]`}), - makeBazelTarget("cc_library_shared", "a", AttrNameToString{ + MakeBazelTarget("cc_library_shared", "a", AttrNameToString{ "copts": `[ "bothflag", "sharedflag", @@ -463,7 +463,7 @@ cc_library { simpleModuleDoNotConvertBp2build("cc_library", "shared_dep_for_both") + simpleModuleDoNotConvertBp2build("cc_library", "implementation_shared_dep_for_both"), ExpectedBazelTargets: []string{ - makeBazelTarget("cc_library_static", "a_bp2build_cc_library_static", AttrNameToString{ + MakeBazelTarget("cc_library_static", "a_bp2build_cc_library_static", AttrNameToString{ "copts": `[ "bothflag", "staticflag", @@ -495,7 +495,7 @@ cc_library { ":whole_static_dep_for_static", ]`, }), - makeBazelTarget("cc_library_shared", "a", AttrNameToString{ + MakeBazelTarget("cc_library_shared", "a", AttrNameToString{ "copts": `[ "bothflag", "sharedflag", @@ -560,13 +560,13 @@ cc_prebuilt_library_static { name: "whole_static_lib_for_both" } }, Blueprint: soongCcLibraryPreamble, ExpectedBazelTargets: []string{ - makeBazelTarget("cc_library_static", "a_bp2build_cc_library_static", AttrNameToString{ + MakeBazelTarget("cc_library_static", "a_bp2build_cc_library_static", AttrNameToString{ "whole_archive_deps": `[ ":whole_static_lib_for_both_alwayslink", ":whole_static_lib_for_static_alwayslink", ]`, }), - makeBazelTarget("cc_library_shared", "a", AttrNameToString{ + MakeBazelTarget("cc_library_shared", "a", AttrNameToString{ "whole_archive_deps": `[ ":whole_static_lib_for_both_alwayslink", ":whole_static_lib_for_shared_alwayslink", @@ -654,7 +654,7 @@ cc_library_static { name: "android_dep_for_shared" } }, Blueprint: soongCcLibraryPreamble, ExpectedBazelTargets: []string{ - makeBazelTarget("cc_library_static", "a_bp2build_cc_library_static", AttrNameToString{ + MakeBazelTarget("cc_library_static", "a_bp2build_cc_library_static", AttrNameToString{ "copts": `[ "bothflag", "staticflag", @@ -678,7 +678,7 @@ cc_library_static { name: "android_dep_for_shared" } "//conditions:default": [], })`, }), - makeBazelTarget("cc_library_shared", "a", AttrNameToString{ + MakeBazelTarget("cc_library_shared", "a", AttrNameToString{ "copts": `[ "bothflag", "sharedflag", @@ -807,7 +807,7 @@ filegroup { }, Blueprint: soongCcLibraryPreamble, ExpectedBazelTargets: []string{ - makeBazelTarget("cc_library_static", "a_bp2build_cc_library_static", AttrNameToString{ + MakeBazelTarget("cc_library_static", "a_bp2build_cc_library_static", AttrNameToString{ "local_includes": `["."]`, "srcs": `[ "both_source.cpp", @@ -832,7 +832,7 @@ filegroup { ":static_filegroup_c_srcs", ]`, }), - makeBazelTarget("cc_library_shared", "a", AttrNameToString{ + MakeBazelTarget("cc_library_shared", "a", AttrNameToString{ "local_includes": `["."]`, "srcs": `[ "both_source.cpp", @@ -1315,8 +1315,8 @@ func makeCcLibraryTargets(name string, attrs AttrNameToString) []string { staticAttrs[key] = val } } - sharedTarget := makeBazelTarget("cc_library_shared", name, sharedAttrs) - staticTarget := makeBazelTarget("cc_library_static", name+"_bp2build_cc_library_static", staticAttrs) + sharedTarget := MakeBazelTarget("cc_library_shared", name, sharedAttrs) + staticTarget := MakeBazelTarget("cc_library_static", name+"_bp2build_cc_library_static", staticAttrs) return []string{staticTarget, sharedTarget} } @@ -1338,7 +1338,7 @@ func makeCcStubSuiteTargets(name string, attrs AttrNameToString) string { stubSuiteAttrs[STUB_SUITE_ATTRS[key]] = attrs[key] } } - return makeBazelTarget("cc_stub_suite", name+"_stub_libs", stubSuiteAttrs) + return MakeBazelTarget("cc_stub_suite", name+"_stub_libs", stubSuiteAttrs) } func TestCCLibraryNoLibCrtFalse(t *testing.T) { @@ -1649,10 +1649,10 @@ cc_library { } `, ExpectedBazelTargets: []string{ - makeBazelTarget("cc_library_static", "static_empty_bp2build_cc_library_static", AttrNameToString{ + MakeBazelTarget("cc_library_static", "static_empty_bp2build_cc_library_static", AttrNameToString{ "system_dynamic_deps": "[]", }), - makeBazelTarget("cc_library_shared", "static_empty", AttrNameToString{}), + MakeBazelTarget("cc_library_shared", "static_empty", AttrNameToString{}), }, }) } @@ -1672,8 +1672,8 @@ cc_library { } `, ExpectedBazelTargets: []string{ - makeBazelTarget("cc_library_static", "shared_empty_bp2build_cc_library_static", AttrNameToString{}), - makeBazelTarget("cc_library_shared", "shared_empty", AttrNameToString{ + MakeBazelTarget("cc_library_static", "shared_empty_bp2build_cc_library_static", AttrNameToString{}), + MakeBazelTarget("cc_library_shared", "shared_empty", AttrNameToString{ "system_dynamic_deps": "[]", }), }, @@ -1699,8 +1699,8 @@ cc_library { } `, ExpectedBazelTargets: []string{ - makeBazelTarget("cc_library_static", "shared_empty_bp2build_cc_library_static", AttrNameToString{}), - makeBazelTarget("cc_library_shared", "shared_empty", AttrNameToString{ + MakeBazelTarget("cc_library_static", "shared_empty_bp2build_cc_library_static", AttrNameToString{}), + MakeBazelTarget("cc_library_shared", "shared_empty", AttrNameToString{ "system_dynamic_deps": "[]", }), }, @@ -1782,10 +1782,10 @@ cc_library { } `, ExpectedBazelTargets: []string{ - makeBazelTarget("cc_library_static", "foo_bp2build_cc_library_static", AttrNameToString{ + MakeBazelTarget("cc_library_static", "foo_bp2build_cc_library_static", AttrNameToString{ "system_dynamic_deps": `[":libc"]`, }), - makeBazelTarget("cc_library_shared", "foo", AttrNameToString{ + MakeBazelTarget("cc_library_shared", "foo", AttrNameToString{ "system_dynamic_deps": `[ ":libc", ":libm", @@ -2000,7 +2000,7 @@ cc_library_static { } `, name_prefix, cppStdProp, cStdProp, gnuExtensionsProp), ExpectedBazelTargets: []string{ - makeBazelTarget("cc_library_static", name_prefix+"_static", attrs), + MakeBazelTarget("cc_library_static", name_prefix+"_static", attrs), }, }) @@ -2019,7 +2019,7 @@ cc_library_shared { } `, name_prefix, cppStdProp, cStdProp, gnuExtensionsProp), ExpectedBazelTargets: []string{ - makeBazelTarget("cc_library_shared", name_prefix+"_shared", attrs), + MakeBazelTarget("cc_library_shared", name_prefix+"_shared", attrs), }, }) }) @@ -2036,14 +2036,14 @@ func TestCcLibraryProtoSimple(t *testing.T) { include_build_directory: false, }`, ExpectedBazelTargets: []string{ - makeBazelTarget("proto_library", "foo_proto", AttrNameToString{ + MakeBazelTarget("proto_library", "foo_proto", AttrNameToString{ "srcs": `["foo.proto"]`, - }), makeBazelTarget("cc_lite_proto_library", "foo_cc_proto_lite", AttrNameToString{ + }), MakeBazelTarget("cc_lite_proto_library", "foo_cc_proto_lite", AttrNameToString{ "deps": `[":foo_proto"]`, - }), makeBazelTarget("cc_library_static", "foo_bp2build_cc_library_static", AttrNameToString{ + }), MakeBazelTarget("cc_library_static", "foo_bp2build_cc_library_static", AttrNameToString{ "implementation_whole_archive_deps": `[":foo_cc_proto_lite"]`, "deps": `[":libprotobuf-cpp-lite"]`, - }), makeBazelTarget("cc_library_shared", "foo", AttrNameToString{ + }), MakeBazelTarget("cc_library_shared", "foo", AttrNameToString{ "dynamic_deps": `[":libprotobuf-cpp-lite"]`, }), }, @@ -2061,15 +2061,15 @@ func TestCcLibraryProtoNoCanonicalPathFromRoot(t *testing.T) { include_build_directory: false, }`, ExpectedBazelTargets: []string{ - makeBazelTarget("proto_library", "foo_proto", AttrNameToString{ + MakeBazelTarget("proto_library", "foo_proto", AttrNameToString{ "srcs": `["foo.proto"]`, "strip_import_prefix": `""`, - }), makeBazelTarget("cc_lite_proto_library", "foo_cc_proto_lite", AttrNameToString{ + }), MakeBazelTarget("cc_lite_proto_library", "foo_cc_proto_lite", AttrNameToString{ "deps": `[":foo_proto"]`, - }), makeBazelTarget("cc_library_static", "foo_bp2build_cc_library_static", AttrNameToString{ + }), MakeBazelTarget("cc_library_static", "foo_bp2build_cc_library_static", AttrNameToString{ "implementation_whole_archive_deps": `[":foo_cc_proto_lite"]`, "deps": `[":libprotobuf-cpp-lite"]`, - }), makeBazelTarget("cc_library_shared", "foo", AttrNameToString{ + }), MakeBazelTarget("cc_library_shared", "foo", AttrNameToString{ "dynamic_deps": `[":libprotobuf-cpp-lite"]`, }), }, @@ -2087,14 +2087,14 @@ func TestCcLibraryProtoExplicitCanonicalPathFromRoot(t *testing.T) { include_build_directory: false, }`, ExpectedBazelTargets: []string{ - makeBazelTarget("proto_library", "foo_proto", AttrNameToString{ + MakeBazelTarget("proto_library", "foo_proto", AttrNameToString{ "srcs": `["foo.proto"]`, - }), makeBazelTarget("cc_lite_proto_library", "foo_cc_proto_lite", AttrNameToString{ + }), MakeBazelTarget("cc_lite_proto_library", "foo_cc_proto_lite", AttrNameToString{ "deps": `[":foo_proto"]`, - }), makeBazelTarget("cc_library_static", "foo_bp2build_cc_library_static", AttrNameToString{ + }), MakeBazelTarget("cc_library_static", "foo_bp2build_cc_library_static", AttrNameToString{ "implementation_whole_archive_deps": `[":foo_cc_proto_lite"]`, "deps": `[":libprotobuf-cpp-lite"]`, - }), makeBazelTarget("cc_library_shared", "foo", AttrNameToString{ + }), MakeBazelTarget("cc_library_shared", "foo", AttrNameToString{ "dynamic_deps": `[":libprotobuf-cpp-lite"]`, }), }, @@ -2114,14 +2114,14 @@ func TestCcLibraryProtoFull(t *testing.T) { include_build_directory: false, }`, ExpectedBazelTargets: []string{ - makeBazelTarget("proto_library", "foo_proto", AttrNameToString{ + MakeBazelTarget("proto_library", "foo_proto", AttrNameToString{ "srcs": `["foo.proto"]`, - }), makeBazelTarget("cc_proto_library", "foo_cc_proto", AttrNameToString{ + }), MakeBazelTarget("cc_proto_library", "foo_cc_proto", AttrNameToString{ "deps": `[":foo_proto"]`, - }), makeBazelTarget("cc_library_static", "foo_bp2build_cc_library_static", AttrNameToString{ + }), MakeBazelTarget("cc_library_static", "foo_bp2build_cc_library_static", AttrNameToString{ "implementation_whole_archive_deps": `[":foo_cc_proto"]`, "deps": `[":libprotobuf-cpp-full"]`, - }), makeBazelTarget("cc_library_shared", "foo", AttrNameToString{ + }), MakeBazelTarget("cc_library_shared", "foo", AttrNameToString{ "dynamic_deps": `[":libprotobuf-cpp-full"]`, }), }, @@ -2141,14 +2141,14 @@ func TestCcLibraryProtoLite(t *testing.T) { include_build_directory: false, }`, ExpectedBazelTargets: []string{ - makeBazelTarget("proto_library", "foo_proto", AttrNameToString{ + MakeBazelTarget("proto_library", "foo_proto", AttrNameToString{ "srcs": `["foo.proto"]`, - }), makeBazelTarget("cc_lite_proto_library", "foo_cc_proto_lite", AttrNameToString{ + }), MakeBazelTarget("cc_lite_proto_library", "foo_cc_proto_lite", AttrNameToString{ "deps": `[":foo_proto"]`, - }), makeBazelTarget("cc_library_static", "foo_bp2build_cc_library_static", AttrNameToString{ + }), MakeBazelTarget("cc_library_static", "foo_bp2build_cc_library_static", AttrNameToString{ "implementation_whole_archive_deps": `[":foo_cc_proto_lite"]`, "deps": `[":libprotobuf-cpp-lite"]`, - }), makeBazelTarget("cc_library_shared", "foo", AttrNameToString{ + }), MakeBazelTarget("cc_library_shared", "foo", AttrNameToString{ "dynamic_deps": `[":libprotobuf-cpp-lite"]`, }), }, @@ -2168,14 +2168,14 @@ func TestCcLibraryProtoExportHeaders(t *testing.T) { include_build_directory: false, }`, ExpectedBazelTargets: []string{ - makeBazelTarget("proto_library", "foo_proto", AttrNameToString{ + MakeBazelTarget("proto_library", "foo_proto", AttrNameToString{ "srcs": `["foo.proto"]`, - }), makeBazelTarget("cc_lite_proto_library", "foo_cc_proto_lite", AttrNameToString{ + }), MakeBazelTarget("cc_lite_proto_library", "foo_cc_proto_lite", AttrNameToString{ "deps": `[":foo_proto"]`, - }), makeBazelTarget("cc_library_static", "foo_bp2build_cc_library_static", AttrNameToString{ + }), MakeBazelTarget("cc_library_static", "foo_bp2build_cc_library_static", AttrNameToString{ "deps": `[":libprotobuf-cpp-lite"]`, "whole_archive_deps": `[":foo_cc_proto_lite"]`, - }), makeBazelTarget("cc_library_shared", "foo", AttrNameToString{ + }), MakeBazelTarget("cc_library_shared", "foo", AttrNameToString{ "dynamic_deps": `[":libprotobuf-cpp-lite"]`, "whole_archive_deps": `[":foo_cc_proto_lite"]`, }), @@ -2228,65 +2228,65 @@ cc_library { include_build_directory: false, }`, ExpectedBazelTargets: []string{ - makeBazelTarget("proto_library", "a_proto", AttrNameToString{ + MakeBazelTarget("proto_library", "a_proto", AttrNameToString{ "srcs": `[":a_fg_proto"]`, - }), makeBazelTarget("cc_lite_proto_library", "a_cc_proto_lite", AttrNameToString{ + }), MakeBazelTarget("cc_lite_proto_library", "a_cc_proto_lite", AttrNameToString{ "deps": `[":a_proto"]`, - }), makeBazelTarget("cc_library_static", "a_bp2build_cc_library_static", AttrNameToString{ + }), MakeBazelTarget("cc_library_static", "a_bp2build_cc_library_static", AttrNameToString{ "deps": `[":libprotobuf-cpp-lite"]`, "whole_archive_deps": `[":a_cc_proto_lite"]`, "srcs": `[":a_fg_proto_cpp_srcs"]`, "srcs_as": `[":a_fg_proto_as_srcs"]`, "srcs_c": `[":a_fg_proto_c_srcs"]`, - }), makeBazelTarget("cc_library_shared", "a", AttrNameToString{ + }), MakeBazelTarget("cc_library_shared", "a", AttrNameToString{ "dynamic_deps": `[":libprotobuf-cpp-lite"]`, "whole_archive_deps": `[":a_cc_proto_lite"]`, "srcs": `[":a_fg_proto_cpp_srcs"]`, "srcs_as": `[":a_fg_proto_as_srcs"]`, "srcs_c": `[":a_fg_proto_c_srcs"]`, - }), makeBazelTarget("proto_library", "b_proto", AttrNameToString{ + }), MakeBazelTarget("proto_library", "b_proto", AttrNameToString{ "srcs": `[":b_protos"]`, - }), makeBazelTarget("cc_lite_proto_library", "b_cc_proto_lite", AttrNameToString{ + }), MakeBazelTarget("cc_lite_proto_library", "b_cc_proto_lite", AttrNameToString{ "deps": `[":b_proto"]`, - }), makeBazelTarget("cc_library_static", "b_bp2build_cc_library_static", AttrNameToString{ + }), MakeBazelTarget("cc_library_static", "b_bp2build_cc_library_static", AttrNameToString{ "deps": `[":libprotobuf-cpp-lite"]`, "whole_archive_deps": `[":b_cc_proto_lite"]`, "srcs": `[":b_protos_cpp_srcs"]`, "srcs_as": `[":b_protos_as_srcs"]`, "srcs_c": `[":b_protos_c_srcs"]`, - }), makeBazelTarget("cc_library_shared", "b", AttrNameToString{ + }), MakeBazelTarget("cc_library_shared", "b", AttrNameToString{ "dynamic_deps": `[":libprotobuf-cpp-lite"]`, "whole_archive_deps": `[":b_cc_proto_lite"]`, "srcs": `[":b_protos_cpp_srcs"]`, "srcs_as": `[":b_protos_as_srcs"]`, "srcs_c": `[":b_protos_c_srcs"]`, - }), makeBazelTarget("proto_library", "c_proto", AttrNameToString{ + }), MakeBazelTarget("proto_library", "c_proto", AttrNameToString{ "srcs": `[":c-proto-srcs"]`, - }), makeBazelTarget("cc_lite_proto_library", "c_cc_proto_lite", AttrNameToString{ + }), MakeBazelTarget("cc_lite_proto_library", "c_cc_proto_lite", AttrNameToString{ "deps": `[":c_proto"]`, - }), makeBazelTarget("cc_library_static", "c_bp2build_cc_library_static", AttrNameToString{ + }), MakeBazelTarget("cc_library_static", "c_bp2build_cc_library_static", AttrNameToString{ "deps": `[":libprotobuf-cpp-lite"]`, "whole_archive_deps": `[":c_cc_proto_lite"]`, "srcs": `[":c-proto-srcs_cpp_srcs"]`, "srcs_as": `[":c-proto-srcs_as_srcs"]`, "srcs_c": `[":c-proto-srcs_c_srcs"]`, - }), makeBazelTarget("cc_library_shared", "c", AttrNameToString{ + }), MakeBazelTarget("cc_library_shared", "c", AttrNameToString{ "dynamic_deps": `[":libprotobuf-cpp-lite"]`, "whole_archive_deps": `[":c_cc_proto_lite"]`, "srcs": `[":c-proto-srcs_cpp_srcs"]`, "srcs_as": `[":c-proto-srcs_as_srcs"]`, "srcs_c": `[":c-proto-srcs_c_srcs"]`, - }), makeBazelTarget("proto_library", "d_proto", AttrNameToString{ + }), MakeBazelTarget("proto_library", "d_proto", AttrNameToString{ "srcs": `[":proto-srcs-d"]`, - }), makeBazelTarget("cc_lite_proto_library", "d_cc_proto_lite", AttrNameToString{ + }), MakeBazelTarget("cc_lite_proto_library", "d_cc_proto_lite", AttrNameToString{ "deps": `[":d_proto"]`, - }), makeBazelTarget("cc_library_static", "d_bp2build_cc_library_static", AttrNameToString{ + }), MakeBazelTarget("cc_library_static", "d_bp2build_cc_library_static", AttrNameToString{ "deps": `[":libprotobuf-cpp-lite"]`, "whole_archive_deps": `[":d_cc_proto_lite"]`, "srcs": `[":proto-srcs-d_cpp_srcs"]`, "srcs_as": `[":proto-srcs-d_as_srcs"]`, "srcs_c": `[":proto-srcs-d_c_srcs"]`, - }), makeBazelTarget("cc_library_shared", "d", AttrNameToString{ + }), MakeBazelTarget("cc_library_shared", "d", AttrNameToString{ "dynamic_deps": `[":libprotobuf-cpp-lite"]`, "whole_archive_deps": `[":d_cc_proto_lite"]`, "srcs": `[":proto-srcs-d_cpp_srcs"]`, @@ -2385,10 +2385,10 @@ func TestCcLibrarySharedDisabled(t *testing.T) { }, include_build_directory: false, }`, - ExpectedBazelTargets: []string{makeBazelTarget("cc_library_static", "foo_bp2build_cc_library_static", AttrNameToString{ + ExpectedBazelTargets: []string{MakeBazelTarget("cc_library_static", "foo_bp2build_cc_library_static", AttrNameToString{ "srcs": `["foo.cpp"]`, "target_compatible_with": `["@platforms//:incompatible"]`, - }), makeBazelTarget("cc_library_shared", "foo", AttrNameToString{ + }), MakeBazelTarget("cc_library_shared", "foo", AttrNameToString{ "srcs": `["foo.cpp"]`, "target_compatible_with": `select({ "//build/bazel/platforms/os:android": ["@platforms//:incompatible"], @@ -2425,13 +2425,13 @@ func TestCcLibraryStaticDisabledForSomeArch(t *testing.T) { }, include_build_directory: false, }`, - ExpectedBazelTargets: []string{makeBazelTarget("cc_library_static", "foo_bp2build_cc_library_static", AttrNameToString{ + ExpectedBazelTargets: []string{MakeBazelTarget("cc_library_static", "foo_bp2build_cc_library_static", AttrNameToString{ "srcs": `["foo.cpp"]`, "target_compatible_with": `select({ "//build/bazel/platforms/os:windows": ["@platforms//:incompatible"], "//conditions:default": [], })`, - }), makeBazelTarget("cc_library_shared", "foo", AttrNameToString{ + }), MakeBazelTarget("cc_library_shared", "foo", AttrNameToString{ "srcs": `["foo.cpp"]`, "target_compatible_with": `select({ "//build/bazel/platforms/os_arch:darwin_arm64": [], @@ -2513,14 +2513,14 @@ func TestCcLibraryConvertLex(t *testing.T) { bazel_module: { bp2build_available: true }, }`, ExpectedBazelTargets: append([]string{ - makeBazelTarget("genlex", "foo_lib_genlex_l", AttrNameToString{ + MakeBazelTarget("genlex", "foo_lib_genlex_l", AttrNameToString{ "srcs": `[ "foo1.l", "foo2.l", ]`, "lexopts": `["--foo_flags"]`, }), - makeBazelTarget("genlex", "foo_lib_genlex_ll", AttrNameToString{ + MakeBazelTarget("genlex", "foo_lib_genlex_ll", AttrNameToString{ "srcs": `[ "bar1.ll", "bar2.ll", @@ -2552,14 +2552,14 @@ cc_library { runtime_libs: ["foo"], }`, ExpectedBazelTargets: []string{ - makeBazelTarget("cc_library_shared", "bar", AttrNameToString{ + MakeBazelTarget("cc_library_shared", "bar", AttrNameToString{ "local_includes": `["."]`, }), - makeBazelTarget("cc_library_static", "foo_bp2build_cc_library_static", AttrNameToString{ + MakeBazelTarget("cc_library_static", "foo_bp2build_cc_library_static", AttrNameToString{ "runtime_deps": `[":foo"]`, "local_includes": `["."]`, }), - makeBazelTarget("cc_library_shared", "foo", AttrNameToString{ + MakeBazelTarget("cc_library_shared", "foo", AttrNameToString{ "runtime_deps": `[":foo"]`, "local_includes": `["."]`, }), @@ -2608,10 +2608,10 @@ func TestCcLibraryEmptySuffix(t *testing.T) { include_build_directory: false, }`, ExpectedBazelTargets: []string{ - makeBazelTarget("cc_library_static", "foo_bp2build_cc_library_static", AttrNameToString{ + MakeBazelTarget("cc_library_static", "foo_bp2build_cc_library_static", AttrNameToString{ "srcs_c": `["foo.c"]`, }), - makeBazelTarget("cc_library_shared", "foo", AttrNameToString{ + MakeBazelTarget("cc_library_shared", "foo", AttrNameToString{ "srcs_c": `["foo.c"]`, "suffix": `""`, }), @@ -2634,10 +2634,10 @@ func TestCcLibrarySuffix(t *testing.T) { include_build_directory: false, }`, ExpectedBazelTargets: []string{ - makeBazelTarget("cc_library_static", "foo_bp2build_cc_library_static", AttrNameToString{ + MakeBazelTarget("cc_library_static", "foo_bp2build_cc_library_static", AttrNameToString{ "srcs_c": `["foo.c"]`, }), - makeBazelTarget("cc_library_shared", "foo", AttrNameToString{ + MakeBazelTarget("cc_library_shared", "foo", AttrNameToString{ "srcs_c": `["foo.c"]`, "suffix": `"-suf"`, }), @@ -2663,10 +2663,10 @@ func TestCcLibraryArchVariantSuffix(t *testing.T) { include_build_directory: false, }`, ExpectedBazelTargets: []string{ - makeBazelTarget("cc_library_static", "foo_bp2build_cc_library_static", AttrNameToString{ + MakeBazelTarget("cc_library_static", "foo_bp2build_cc_library_static", AttrNameToString{ "srcs_c": `["foo.c"]`, }), - makeBazelTarget("cc_library_shared", "foo", AttrNameToString{ + MakeBazelTarget("cc_library_shared", "foo", AttrNameToString{ "srcs_c": `["foo.c"]`, "suffix": `select({ "//build/bazel/platforms/arch:arm": "-32", @@ -2701,20 +2701,20 @@ cc_library { "srcs": `["aidl/A.aidl"]`, "strip_import_prefix": `"aidl"`, }), - makeBazelTarget("aidl_library", "foo_aidl_library", AttrNameToString{ + MakeBazelTarget("aidl_library", "foo_aidl_library", AttrNameToString{ "srcs": `["B.aidl"]`, }), - makeBazelTarget("cc_aidl_library", "foo_cc_aidl_library", AttrNameToString{ + MakeBazelTarget("cc_aidl_library", "foo_cc_aidl_library", AttrNameToString{ "deps": `[ ":A_aidl", ":foo_aidl_library", ]`, }), - makeBazelTarget("cc_library_static", "foo_bp2build_cc_library_static", AttrNameToString{ + MakeBazelTarget("cc_library_static", "foo_bp2build_cc_library_static", AttrNameToString{ "whole_archive_deps": `[":foo_cc_aidl_library"]`, "local_includes": `["."]`, }), - makeBazelTarget("cc_library_shared", "foo", AttrNameToString{ + MakeBazelTarget("cc_library_shared", "foo", AttrNameToString{ "whole_archive_deps": `[":foo_cc_aidl_library"]`, "local_includes": `["."]`, }), @@ -2743,14 +2743,14 @@ cc_library { ], }`, ExpectedBazelTargets: []string{ - makeBazelTarget("cc_aidl_library", "foo_cc_aidl_library", AttrNameToString{ + MakeBazelTarget("cc_aidl_library", "foo_cc_aidl_library", AttrNameToString{ "deps": `["//path/to/A:A_aidl"]`, }), - makeBazelTarget("cc_library_static", "foo_bp2build_cc_library_static", AttrNameToString{ + MakeBazelTarget("cc_library_static", "foo_bp2build_cc_library_static", AttrNameToString{ "whole_archive_deps": `[":foo_cc_aidl_library"]`, "local_includes": `["."]`, }), - makeBazelTarget("cc_library_shared", "foo", AttrNameToString{ + MakeBazelTarget("cc_library_shared", "foo", AttrNameToString{ "whole_archive_deps": `[":foo_cc_aidl_library"]`, "local_includes": `["."]`, }), diff --git a/bp2build/cc_library_headers_conversion_test.go b/bp2build/cc_library_headers_conversion_test.go index 5846f8308..5fa7cac5e 100644 --- a/bp2build/cc_library_headers_conversion_test.go +++ b/bp2build/cc_library_headers_conversion_test.go @@ -106,7 +106,7 @@ cc_library_headers { // TODO: Also support export_header_lib_headers }`, ExpectedBazelTargets: []string{ - makeBazelTarget("cc_library_headers", "foo_headers", AttrNameToString{ + MakeBazelTarget("cc_library_headers", "foo_headers", AttrNameToString{ "export_includes": `[ "dir-1", "dir-2", @@ -183,7 +183,7 @@ cc_library_headers { include_build_directory: false, }`, ExpectedBazelTargets: []string{ - makeBazelTarget("cc_library_headers", "foo_headers", AttrNameToString{ + MakeBazelTarget("cc_library_headers", "foo_headers", AttrNameToString{ "deps": `[":base-lib"] + select({ "//build/bazel/platforms/os:android": [":android-lib"], "//build/bazel/platforms/os:darwin": [":darwin-lib"], @@ -223,7 +223,7 @@ cc_library_headers { include_build_directory: false, }`, ExpectedBazelTargets: []string{ - makeBazelTarget("cc_library_headers", "foo_headers", AttrNameToString{ + MakeBazelTarget("cc_library_headers", "foo_headers", AttrNameToString{ "deps": `select({ "//build/bazel/platforms/os:android": [":exported-lib"], "//conditions:default": [], @@ -276,7 +276,7 @@ func TestCcLibraryHeadersArchAndTargetExportSystemIncludes(t *testing.T) { include_build_directory: false, }`, ExpectedBazelTargets: []string{ - makeBazelTarget("cc_library_headers", "foo_headers", AttrNameToString{ + MakeBazelTarget("cc_library_headers", "foo_headers", AttrNameToString{ "export_system_includes": `["shared_include_dir"] + select({ "//build/bazel/platforms/arch:arm": ["arm_include_dir"], "//build/bazel/platforms/arch:x86_64": ["x86_64_include_dir"], @@ -318,7 +318,7 @@ cc_library_headers { include_build_directory: false, }`, ExpectedBazelTargets: []string{ - makeBazelTarget("cc_library_headers", "lib-1", AttrNameToString{ + MakeBazelTarget("cc_library_headers", "lib-1", AttrNameToString{ "export_includes": `["lib-1"]`, }), }, @@ -340,7 +340,7 @@ cc_library_headers { } ` + simpleModuleDoNotConvertBp2build("cc_library_headers", "foo_export"), ExpectedBazelTargets: []string{ - makeBazelTarget("cc_library_headers", "foo_headers", AttrNameToString{ + MakeBazelTarget("cc_library_headers", "foo_headers", AttrNameToString{ "deps": `[":foo_export"]`, }), }, @@ -362,7 +362,7 @@ cc_library_headers { } ` + simpleModuleDoNotConvertBp2build("cc_library_headers", "foo_export"), ExpectedBazelTargets: []string{ - makeBazelTarget("cc_library_headers", "foo_headers", AttrNameToString{ + MakeBazelTarget("cc_library_headers", "foo_headers", AttrNameToString{ "deps": `[":foo_export"]`, }), }, @@ -384,7 +384,7 @@ cc_library_headers { } ` + simpleModuleDoNotConvertBp2build("cc_library_headers", "foo_export"), ExpectedBazelTargets: []string{ - makeBazelTarget("cc_library_headers", "foo_headers", AttrNameToString{ + MakeBazelTarget("cc_library_headers", "foo_headers", AttrNameToString{ "deps": `[":foo_export"]`, }), }, @@ -405,7 +405,7 @@ cc_library_headers { } ` + simpleModuleDoNotConvertBp2build("cc_library_headers", "foo_export"), ExpectedBazelTargets: []string{ - makeBazelTarget("cc_library_headers", "foo_headers", AttrNameToString{ + MakeBazelTarget("cc_library_headers", "foo_headers", AttrNameToString{ "deps": `[":foo_export"]`, }), }, diff --git a/bp2build/cc_library_shared_conversion_test.go b/bp2build/cc_library_shared_conversion_test.go index ed983bf43..4d8e59b30 100644 --- a/bp2build/cc_library_shared_conversion_test.go +++ b/bp2build/cc_library_shared_conversion_test.go @@ -142,7 +142,7 @@ cc_library_shared { // TODO: Also support export_header_lib_headers }`, ExpectedBazelTargets: []string{ - makeBazelTarget("cc_library_shared", "foo_shared", AttrNameToString{ + MakeBazelTarget("cc_library_shared", "foo_shared", AttrNameToString{ "absolute_includes": `[ "include_dir_1", "include_dir_2", @@ -202,7 +202,7 @@ cc_library_shared { include_build_directory: false, }`, ExpectedBazelTargets: []string{ - makeBazelTarget("cc_library_shared", "foo_shared", AttrNameToString{ + MakeBazelTarget("cc_library_shared", "foo_shared", AttrNameToString{ "implementation_dynamic_deps": `select({ "//build/bazel/platforms/arch:arm64": [":shared_dep"], "//conditions:default": [], @@ -231,7 +231,7 @@ cc_library_shared { include_build_directory: false, }`, ExpectedBazelTargets: []string{ - makeBazelTarget("cc_library_shared", "foo_shared", AttrNameToString{ + MakeBazelTarget("cc_library_shared", "foo_shared", AttrNameToString{ "implementation_dynamic_deps": `select({ "//build/bazel/platforms/os:android": [":shared_dep"], "//conditions:default": [], @@ -266,7 +266,7 @@ cc_library_shared { include_build_directory: false, }`, ExpectedBazelTargets: []string{ - makeBazelTarget("cc_library_shared", "foo_shared", AttrNameToString{ + MakeBazelTarget("cc_library_shared", "foo_shared", AttrNameToString{ "implementation_dynamic_deps": `[":shared_dep"] + select({ "//build/bazel/platforms/arch:arm64": [":shared_dep3"], "//conditions:default": [], @@ -295,7 +295,7 @@ cc_library_shared { include_build_directory: false, }`, ExpectedBazelTargets: []string{ - makeBazelTarget("cc_library_shared", "foo_shared", AttrNameToString{ + MakeBazelTarget("cc_library_shared", "foo_shared", AttrNameToString{ "srcs_c": `[ "common.c", "foo-a.c", @@ -322,7 +322,7 @@ cc_library_shared { include_build_directory: false, }`, ExpectedBazelTargets: []string{ - makeBazelTarget("cc_library_shared", "foo_shared", AttrNameToString{ + MakeBazelTarget("cc_library_shared", "foo_shared", AttrNameToString{ "strip": `{ "all": True, "keep_symbols": False, @@ -351,7 +351,7 @@ cc_library_shared { include_build_directory: false, }`, ExpectedBazelTargets: []string{ - makeBazelTarget("cc_library_shared", "foo_shared", AttrNameToString{ + MakeBazelTarget("cc_library_shared", "foo_shared", AttrNameToString{ "additional_linker_inputs": `["version_script"]`, "linkopts": `["-Wl,--version-script,$(location version_script)"]`, }), @@ -374,7 +374,7 @@ cc_library_shared { } `, ExpectedBazelTargets: []string{ - makeBazelTarget("cc_library_shared", "foo_shared", AttrNameToString{ + MakeBazelTarget("cc_library_shared", "foo_shared", AttrNameToString{ "link_crt": `False`, "srcs": `["impl.cpp"]`, }), @@ -397,7 +397,7 @@ cc_library_shared { } `, ExpectedBazelTargets: []string{ - makeBazelTarget("cc_library_shared", "foo_shared", AttrNameToString{ + MakeBazelTarget("cc_library_shared", "foo_shared", AttrNameToString{ "srcs": `["impl.cpp"]`, }), }, @@ -440,11 +440,11 @@ func TestCcLibrarySharedProto(t *testing.T) { include_build_directory: false, }`, ExpectedBazelTargets: []string{ - makeBazelTarget("proto_library", "foo_proto", AttrNameToString{ + MakeBazelTarget("proto_library", "foo_proto", AttrNameToString{ "srcs": `["foo.proto"]`, - }), makeBazelTarget("cc_lite_proto_library", "foo_cc_proto_lite", AttrNameToString{ + }), MakeBazelTarget("cc_lite_proto_library", "foo_cc_proto_lite", AttrNameToString{ "deps": `[":foo_proto"]`, - }), makeBazelTarget("cc_library_shared", "foo", AttrNameToString{ + }), MakeBazelTarget("cc_library_shared", "foo", AttrNameToString{ "dynamic_deps": `[":libprotobuf-cpp-lite"]`, "whole_archive_deps": `[":foo_cc_proto_lite"]`, }), @@ -460,7 +460,7 @@ func TestCcLibrarySharedUseVersionLib(t *testing.T) { include_build_directory: false, }`, ExpectedBazelTargets: []string{ - makeBazelTarget("cc_library_shared", "foo", AttrNameToString{ + MakeBazelTarget("cc_library_shared", "foo", AttrNameToString{ "use_version_lib": "True", }), }, @@ -484,7 +484,7 @@ cc_library_shared { `, }, Blueprint: soongCcLibraryPreamble, - ExpectedBazelTargets: []string{makeBazelTarget("cc_library_shared", "a", AttrNameToString{ + ExpectedBazelTargets: []string{MakeBazelTarget("cc_library_shared", "a", AttrNameToString{ "has_stubs": `True`, }), }, @@ -510,7 +510,7 @@ cc_library_shared { defaults: ["empty_defaults"], } `, - ExpectedBazelTargets: []string{makeBazelTarget("cc_library_shared", "empty", AttrNameToString{ + ExpectedBazelTargets: []string{MakeBazelTarget("cc_library_shared", "empty", AttrNameToString{ "system_dynamic_deps": "[]", })}, }) @@ -537,21 +537,21 @@ func TestCcLibrarySharedConvertLex(t *testing.T) { bazel_module: { bp2build_available: true }, }`, ExpectedBazelTargets: []string{ - makeBazelTarget("genlex", "foo_lib_genlex_l", AttrNameToString{ + MakeBazelTarget("genlex", "foo_lib_genlex_l", AttrNameToString{ "srcs": `[ "foo1.l", "foo2.l", ]`, "lexopts": `["--foo_flags"]`, }), - makeBazelTarget("genlex", "foo_lib_genlex_ll", AttrNameToString{ + MakeBazelTarget("genlex", "foo_lib_genlex_ll", AttrNameToString{ "srcs": `[ "bar1.ll", "bar2.ll", ]`, "lexopts": `["--foo_flags"]`, }), - makeBazelTarget("cc_library_shared", "foo_lib", AttrNameToString{ + MakeBazelTarget("cc_library_shared", "foo_lib", AttrNameToString{ "srcs": `[ "bar.cc", ":foo_lib_genlex_ll", @@ -576,7 +576,7 @@ func TestCcLibrarySharedClangUnknownFlags(t *testing.T) { include_build_directory: false, }`, ExpectedBazelTargets: []string{ - makeBazelTarget("cc_library_shared", "foo", AttrNameToString{ + MakeBazelTarget("cc_library_shared", "foo", AttrNameToString{ "conlyflags": `["-a"]`, "copts": `["-b"]`, "cppflags": `["-c"]`, @@ -600,7 +600,7 @@ func TestCCLibraryFlagSpaceSplitting(t *testing.T) { include_build_directory: false, }`, ExpectedBazelTargets: []string{ - makeBazelTarget("cc_library_shared", "foo", AttrNameToString{ + MakeBazelTarget("cc_library_shared", "foo", AttrNameToString{ "additional_linker_inputs": `["version_script"]`, "conlyflags": `[ "-include", @@ -631,10 +631,10 @@ cc_library_shared { runtime_libs: ["foo"], }`, ExpectedBazelTargets: []string{ - makeBazelTarget("cc_library_shared", "bar", AttrNameToString{ + MakeBazelTarget("cc_library_shared", "bar", AttrNameToString{ "local_includes": `["."]`, }), - makeBazelTarget("cc_library_shared", "foo", AttrNameToString{ + MakeBazelTarget("cc_library_shared", "foo", AttrNameToString{ "runtime_deps": `[":foo"]`, "local_includes": `["."]`, }), @@ -656,7 +656,7 @@ cc_library_shared { include_build_directory: false, }`, ExpectedBazelTargets: []string{ - makeBazelTarget("cc_library_shared", "foo_shared", AttrNameToString{ + MakeBazelTarget("cc_library_shared", "foo_shared", AttrNameToString{ "srcs_c": `["foo.c"]`, "suffix": `""`, }), @@ -678,7 +678,7 @@ cc_library_shared { include_build_directory: false, }`, ExpectedBazelTargets: []string{ - makeBazelTarget("cc_library_shared", "foo_shared", AttrNameToString{ + MakeBazelTarget("cc_library_shared", "foo_shared", AttrNameToString{ "srcs_c": `["foo.c"]`, "suffix": `"-suf"`, }), @@ -703,7 +703,7 @@ cc_library_shared { include_build_directory: false, }`, ExpectedBazelTargets: []string{ - makeBazelTarget("cc_library_shared", "foo_shared", AttrNameToString{ + MakeBazelTarget("cc_library_shared", "foo_shared", AttrNameToString{ "srcs_c": `["foo.c"]`, "suffix": `select({ "//build/bazel/platforms/arch:arm": "-32", diff --git a/bp2build/cc_library_static_conversion_test.go b/bp2build/cc_library_static_conversion_test.go index 1c160ec6a..0e47ee816 100644 --- a/bp2build/cc_library_static_conversion_test.go +++ b/bp2build/cc_library_static_conversion_test.go @@ -173,7 +173,7 @@ cc_library_static { // TODO: Also support export_header_lib_headers }`, ExpectedBazelTargets: []string{ - makeBazelTarget("cc_library_static", "foo_static", AttrNameToString{ + MakeBazelTarget("cc_library_static", "foo_static", AttrNameToString{ "absolute_includes": `[ "include_dir_1", "include_dir_2", @@ -238,7 +238,7 @@ cc_library_static { ], }`, ExpectedBazelTargets: []string{ - makeBazelTarget("cc_library_static", "foo_static", AttrNameToString{ + MakeBazelTarget("cc_library_static", "foo_static", AttrNameToString{ "absolute_includes": `["subpackage"]`, "local_includes": `["."]`, }), @@ -262,7 +262,7 @@ cc_library_static { include_build_directory: false, }`, ExpectedBazelTargets: []string{ - makeBazelTarget("cc_library_static", "foo_static", AttrNameToString{ + MakeBazelTarget("cc_library_static", "foo_static", AttrNameToString{ "export_includes": `["subpackage"]`, }), }, @@ -285,7 +285,7 @@ cc_library_static { include_build_directory: false, }`, ExpectedBazelTargets: []string{ - makeBazelTarget("cc_library_static", "foo_static", AttrNameToString{ + MakeBazelTarget("cc_library_static", "foo_static", AttrNameToString{ "export_system_includes": `["subpackage"]`, }), }, @@ -320,7 +320,7 @@ cc_library_static { }, Blueprint: soongCcLibraryStaticPreamble, ExpectedBazelTargets: []string{ - makeBazelTarget("cc_library_static", "foo_static", AttrNameToString{ + MakeBazelTarget("cc_library_static", "foo_static", AttrNameToString{ "absolute_includes": `[ "subpackage/subsubpackage", "subpackage2", @@ -352,7 +352,7 @@ cc_library_static { include_build_directory: false, }`, ExpectedBazelTargets: []string{ - makeBazelTarget("cc_library_static", "foo_static", AttrNameToString{ + MakeBazelTarget("cc_library_static", "foo_static", AttrNameToString{ "absolute_includes": `["subpackage"]`, "local_includes": `["subpackage2"]`, }), @@ -379,7 +379,7 @@ cc_library_static { include_build_directory: true, }`, ExpectedBazelTargets: []string{ - makeBazelTarget("cc_library_static", "foo_static", AttrNameToString{ + MakeBazelTarget("cc_library_static", "foo_static", AttrNameToString{ "absolute_includes": `["subpackage"]`, "local_includes": `[ "subpackage2", @@ -409,7 +409,7 @@ cc_library_static { include_build_directory: false, }`, ExpectedBazelTargets: []string{ - makeBazelTarget("cc_library_static", "foo_static", AttrNameToString{ + MakeBazelTarget("cc_library_static", "foo_static", AttrNameToString{ "implementation_deps": `select({ "//build/bazel/platforms/arch:arm64": [":static_dep"], "//conditions:default": [], @@ -442,7 +442,7 @@ cc_library_static { include_build_directory: false, }`, ExpectedBazelTargets: []string{ - makeBazelTarget("cc_library_static", "foo_static", AttrNameToString{ + MakeBazelTarget("cc_library_static", "foo_static", AttrNameToString{ "implementation_deps": `select({ "//build/bazel/platforms/os:android": [":static_dep"], "//conditions:default": [], @@ -486,7 +486,7 @@ cc_library_static { include_build_directory: false, }`, ExpectedBazelTargets: []string{ - makeBazelTarget("cc_library_static", "foo_static", AttrNameToString{ + MakeBazelTarget("cc_library_static", "foo_static", AttrNameToString{ "implementation_deps": `[":static_dep"] + select({ "//build/bazel/platforms/arch:arm64": [":static_dep4"], "//conditions:default": [], @@ -516,7 +516,7 @@ cc_library_static { include_build_directory: false, }`, ExpectedBazelTargets: []string{ - makeBazelTarget("cc_library_static", "foo_static", AttrNameToString{ + MakeBazelTarget("cc_library_static", "foo_static", AttrNameToString{ "srcs_c": `[ "common.c", "foo-a.c", @@ -541,7 +541,7 @@ cc_library_static { include_build_directory: false, }`, ExpectedBazelTargets: []string{ - makeBazelTarget("cc_library_static", "foo_static", AttrNameToString{ + MakeBazelTarget("cc_library_static", "foo_static", AttrNameToString{ "srcs_c": `["common.c"] + select({ "//build/bazel/platforms/arch:arm": ["foo-arm.c"], "//conditions:default": [], @@ -571,7 +571,7 @@ cc_library_static { include_build_directory: false, }`, ExpectedBazelTargets: []string{ - makeBazelTarget("cc_library_static", "foo_static", AttrNameToString{ + MakeBazelTarget("cc_library_static", "foo_static", AttrNameToString{ "srcs_c": `["common.c"] + select({ "//build/bazel/platforms/arch:arm": ["for-arm.c"], "//conditions:default": ["not-for-arm.c"], @@ -603,7 +603,7 @@ cc_library_static { include_build_directory: false, } `, ExpectedBazelTargets: []string{ - makeBazelTarget("cc_library_static", "foo_static", AttrNameToString{ + MakeBazelTarget("cc_library_static", "foo_static", AttrNameToString{ "srcs_c": `["common.c"] + select({ "//build/bazel/platforms/arch:arm": [ "not-for-x86.c", @@ -652,7 +652,7 @@ cc_library_static { include_build_directory: false, } `, ExpectedBazelTargets: []string{ - makeBazelTarget("cc_library_static", "foo_static", AttrNameToString{ + MakeBazelTarget("cc_library_static", "foo_static", AttrNameToString{ "srcs_c": `["common.c"] + select({ "//build/bazel/platforms/arch:arm": [ "not-for-arm64.c", @@ -709,7 +709,7 @@ cc_library_static { include_build_directory: false, }`, ExpectedBazelTargets: []string{ - makeBazelTarget("cc_library_static", "foo_static", AttrNameToString{ + MakeBazelTarget("cc_library_static", "foo_static", AttrNameToString{ "srcs": `["common.cc"] + select({ "//build/bazel/platforms/arch:arm": [], "//conditions:default": ["foo-no-arm.cc"], @@ -740,7 +740,7 @@ cc_library_static { include_build_directory: false, }`, ExpectedBazelTargets: []string{ - makeBazelTarget("cc_library_static", "foo_static", AttrNameToString{ + MakeBazelTarget("cc_library_static", "foo_static", AttrNameToString{ "srcs": `["common.cc"] + select({ "//build/bazel/platforms/arch:arm": [], "//build/bazel/platforms/arch:x86": [ @@ -769,7 +769,7 @@ cc_library_static { include_build_directory: false, }`, ExpectedBazelTargets: []string{ - makeBazelTarget("cc_library_static", "foo_static", AttrNameToString{ + MakeBazelTarget("cc_library_static", "foo_static", AttrNameToString{ "implementation_deps": `[":static_dep"]`, }), }, @@ -794,7 +794,7 @@ cc_library_static { include_build_directory: false, } `, ExpectedBazelTargets: []string{ - makeBazelTarget("cc_library_static", "foo_static", AttrNameToString{ + MakeBazelTarget("cc_library_static", "foo_static", AttrNameToString{ "srcs_c": `["common.c"] + select({ "//build/bazel/platforms/arch:arm": ["for-lib32.c"], "//build/bazel/platforms/arch:x86": ["for-lib32.c"], @@ -826,7 +826,7 @@ cc_library_static { include_build_directory: false, } `, ExpectedBazelTargets: []string{ - makeBazelTarget("cc_library_static", "foo_static", AttrNameToString{ + MakeBazelTarget("cc_library_static", "foo_static", AttrNameToString{ "srcs_c": `["common.c"] + select({ "//build/bazel/platforms/arch:arm": [ "not-for-lib64.c", @@ -891,7 +891,7 @@ cc_library_static { include_build_directory: false, }`, ExpectedBazelTargets: []string{ - makeBazelTarget("cc_library_static", "foo_static", AttrNameToString{ + MakeBazelTarget("cc_library_static", "foo_static", AttrNameToString{ "srcs_c": `["common.c"] + select({ "//build/bazel/platforms/arch:arm": [ "not-for-arm64.c", @@ -962,7 +962,7 @@ cc_library_static { include_build_directory: false, }`, ExpectedBazelTargets: []string{ - makeBazelTarget("cc_library_static", "foo_static", AttrNameToString{ + MakeBazelTarget("cc_library_static", "foo_static", AttrNameToString{ "export_includes": `["."]`, "local_includes": `["."]`, "hdrs": `[":export_generated_hdr"]`, @@ -1030,7 +1030,7 @@ cc_library_static { } `, ExpectedBazelTargets: []string{ - makeBazelTarget("cc_library_static", "foo_static", AttrNameToString{ + MakeBazelTarget("cc_library_static", "foo_static", AttrNameToString{ "srcs": `[ "common.cpp", ":generated_src", @@ -1093,7 +1093,7 @@ cc_library_static { include_build_directory: false, }`, ExpectedBazelTargets: []string{ - makeBazelTarget("cc_library_static", "foo_static", AttrNameToString{ + MakeBazelTarget("cc_library_static", "foo_static", AttrNameToString{ "srcs_c": `select({ "//build/bazel/platforms/os:android": ["android_src.c"], "//conditions:default": [], @@ -1132,7 +1132,7 @@ cc_library_static { include_build_directory: false, } `, ExpectedBazelTargets: []string{ - makeBazelTarget("cc_library_static", "foo_static", AttrNameToString{ + MakeBazelTarget("cc_library_static", "foo_static", AttrNameToString{ "copts": `select({ "//build/bazel/product_variables:binder32bit": ["-Wbinder32bit"], "//conditions:default": [], @@ -1192,7 +1192,7 @@ cc_library_static { include_build_directory: false, } `, ExpectedBazelTargets: []string{ - makeBazelTarget("cc_library_static", "foo_static", AttrNameToString{ + MakeBazelTarget("cc_library_static", "foo_static", AttrNameToString{ "copts": `select({ "//build/bazel/product_variables:malloc_not_svelte": ["-Wmalloc_not_svelte"], "//conditions:default": [], @@ -1231,7 +1231,7 @@ cc_library_static { include_build_directory: false, } `, ExpectedBazelTargets: []string{ - makeBazelTarget("cc_library_static", "foo_static", AttrNameToString{ + MakeBazelTarget("cc_library_static", "foo_static", AttrNameToString{ "asflags": `select({ "//build/bazel/product_variables:platform_sdk_version": ["-DPLATFORM_SDK_VERSION=$(Platform_sdk_version)"], "//conditions:default": [], @@ -1253,7 +1253,7 @@ cc_library_static { } `, ExpectedBazelTargets: []string{ - makeBazelTarget("cc_library_static", "root_empty", AttrNameToString{ + MakeBazelTarget("cc_library_static", "root_empty", AttrNameToString{ "system_dynamic_deps": `[]`, }), }, @@ -1277,7 +1277,7 @@ cc_library_static { } `, ExpectedBazelTargets: []string{ - makeBazelTarget("cc_library_static", "static_empty", AttrNameToString{ + MakeBazelTarget("cc_library_static", "static_empty", AttrNameToString{ "system_dynamic_deps": `[]`, }), }, @@ -1299,7 +1299,7 @@ cc_library_static { } `, ExpectedBazelTargets: []string{ - makeBazelTarget("cc_library_static", "target_bionic_empty", AttrNameToString{ + MakeBazelTarget("cc_library_static", "target_bionic_empty", AttrNameToString{ "system_dynamic_deps": `[]`, }), }, @@ -1325,7 +1325,7 @@ cc_library_static { } `, ExpectedBazelTargets: []string{ - makeBazelTarget("cc_library_static", "target_linux_bionic_empty", AttrNameToString{ + MakeBazelTarget("cc_library_static", "target_linux_bionic_empty", AttrNameToString{ "system_dynamic_deps": `[]`, }), }, @@ -1348,7 +1348,7 @@ cc_library_static { } `, ExpectedBazelTargets: []string{ - makeBazelTarget("cc_library_static", "target_bionic", AttrNameToString{ + MakeBazelTarget("cc_library_static", "target_bionic", AttrNameToString{ "system_dynamic_deps": `select({ "//build/bazel/platforms/os:android": [":libc"], "//build/bazel/platforms/os:linux_bionic": [":libc"], @@ -1377,7 +1377,7 @@ cc_library_static { } `, ExpectedBazelTargets: []string{ - makeBazelTarget("cc_library_static", "target_linux_bionic", AttrNameToString{ + MakeBazelTarget("cc_library_static", "target_linux_bionic", AttrNameToString{ "system_dynamic_deps": `[":libc"] + select({ "//build/bazel/platforms/os:linux_bionic": [":libm"], "//conditions:default": [], @@ -1419,18 +1419,18 @@ cc_library_static { } `, ExpectedBazelTargets: []string{ - makeBazelTarget("cc_library_static", "all", AttrNameToString{ + MakeBazelTarget("cc_library_static", "all", AttrNameToString{ "implementation_dynamic_deps": `select({ "//build/bazel/platforms/os:android": [], "//build/bazel/platforms/os:linux_bionic": [], "//conditions:default": [":libc"], })`, }), - makeBazelTarget("cc_library_static", "keep_for_empty_system_shared_libs", AttrNameToString{ + MakeBazelTarget("cc_library_static", "keep_for_empty_system_shared_libs", AttrNameToString{ "implementation_dynamic_deps": `[":libc"]`, "system_dynamic_deps": `[]`, }), - makeBazelTarget("cc_library_static", "used_in_bionic_oses", AttrNameToString{}), + MakeBazelTarget("cc_library_static", "used_in_bionic_oses", AttrNameToString{}), }, }) } @@ -1446,11 +1446,11 @@ func TestCcLibraryStaticProto(t *testing.T) { include_build_directory: false, }`, ExpectedBazelTargets: []string{ - makeBazelTarget("proto_library", "foo_proto", AttrNameToString{ + MakeBazelTarget("proto_library", "foo_proto", AttrNameToString{ "srcs": `["foo.proto"]`, - }), makeBazelTarget("cc_lite_proto_library", "foo_cc_proto_lite", AttrNameToString{ + }), MakeBazelTarget("cc_lite_proto_library", "foo_cc_proto_lite", AttrNameToString{ "deps": `[":foo_proto"]`, - }), makeBazelTarget("cc_library_static", "foo", AttrNameToString{ + }), MakeBazelTarget("cc_library_static", "foo", AttrNameToString{ "deps": `[":libprotobuf-cpp-lite"]`, "whole_archive_deps": `[":foo_cc_proto_lite"]`, }), @@ -1466,7 +1466,7 @@ func TestCcLibraryStaticUseVersionLib(t *testing.T) { include_build_directory: false, }`, ExpectedBazelTargets: []string{ - makeBazelTarget("cc_library_static", "foo", AttrNameToString{ + MakeBazelTarget("cc_library_static", "foo", AttrNameToString{ "use_version_lib": "True", }), }, @@ -1483,7 +1483,7 @@ func TestCcLibraryStaticStdInFlags(t *testing.T) { include_build_directory: false, }`, ExpectedBazelTargets: []string{ - makeBazelTarget("cc_library_static", "foo", AttrNameToString{ + MakeBazelTarget("cc_library_static", "foo", AttrNameToString{ "conlyflags": `["-std=conly"]`, "cppflags": `["-std=cpp"]`, }), @@ -1553,7 +1553,7 @@ func TestCcLibraryStaticStl(t *testing.T) { %s }`, tc.prop), ExpectedBazelTargets: []string{ - makeBazelTarget("cc_library_static", "foo", tc.attr), + MakeBazelTarget("cc_library_static", "foo", tc.attr), }, }) }) @@ -1571,10 +1571,10 @@ cc_library_static { runtime_libs: ["foo"], }`, ExpectedBazelTargets: []string{ - makeBazelTarget("cc_library_shared", "bar", AttrNameToString{ + MakeBazelTarget("cc_library_shared", "bar", AttrNameToString{ "local_includes": `["."]`, }), - makeBazelTarget("cc_library_static", "foo", AttrNameToString{ + MakeBazelTarget("cc_library_static", "foo", AttrNameToString{ "runtime_deps": `[":foo"]`, "local_includes": `["."]`, }), diff --git a/bp2build/cc_object_conversion_test.go b/bp2build/cc_object_conversion_test.go index 37d55809a..b8dc690d5 100644 --- a/bp2build/cc_object_conversion_test.go +++ b/bp2build/cc_object_conversion_test.go @@ -60,7 +60,7 @@ func TestCcObjectSimple(t *testing.T) { } `, ExpectedBazelTargets: []string{ - makeBazelTarget("cc_object", "foo", AttrNameToString{ + MakeBazelTarget("cc_object", "foo", AttrNameToString{ "copts": `[ "-fno-addrsig", "-Wno-gcc-compat", @@ -106,7 +106,7 @@ cc_defaults { } `, ExpectedBazelTargets: []string{ - makeBazelTarget("cc_object", "foo", AttrNameToString{ + MakeBazelTarget("cc_object", "foo", AttrNameToString{ "copts": `[ "-Werror", "-fno-addrsig", @@ -141,11 +141,11 @@ cc_object { } `, ExpectedBazelTargets: []string{ - makeBazelTarget("cc_object", "bar", AttrNameToString{ + MakeBazelTarget("cc_object", "bar", AttrNameToString{ "copts": `["-fno-addrsig"]`, "srcs": `["x/y/z.c"]`, "system_dynamic_deps": `[]`, - }), makeBazelTarget("cc_object", "foo", AttrNameToString{ + }), MakeBazelTarget("cc_object", "foo", AttrNameToString{ "copts": `["-fno-addrsig"]`, "deps": `[":bar"]`, "srcs": `["a/b/c.c"]`, @@ -170,7 +170,7 @@ func TestCcObjectIncludeBuildDirFalse(t *testing.T) { } `, ExpectedBazelTargets: []string{ - makeBazelTarget("cc_object", "foo", AttrNameToString{ + MakeBazelTarget("cc_object", "foo", AttrNameToString{ "copts": `["-fno-addrsig"]`, "srcs": `["a/b/c.c"]`, "system_dynamic_deps": `[]`, @@ -195,7 +195,7 @@ func TestCcObjectProductVariable(t *testing.T) { } `, ExpectedBazelTargets: []string{ - makeBazelTarget("cc_object", "foo", AttrNameToString{ + MakeBazelTarget("cc_object", "foo", AttrNameToString{ "asflags": `select({ "//build/bazel/product_variables:platform_sdk_version": ["-DPLATFORM_SDK_VERSION=$(Platform_sdk_version)"], "//conditions:default": [], @@ -227,7 +227,7 @@ func TestCcObjectCflagsOneArch(t *testing.T) { } `, ExpectedBazelTargets: []string{ - makeBazelTarget("cc_object", "foo", AttrNameToString{ + MakeBazelTarget("cc_object", "foo", AttrNameToString{ "copts": `["-fno-addrsig"] + select({ "//build/bazel/platforms/arch:x86": ["-fPIC"], "//conditions:default": [], @@ -271,7 +271,7 @@ func TestCcObjectCflagsFourArch(t *testing.T) { } `, ExpectedBazelTargets: []string{ - makeBazelTarget("cc_object", "foo", AttrNameToString{ + MakeBazelTarget("cc_object", "foo", AttrNameToString{ "copts": `["-fno-addrsig"] + select({ "//build/bazel/platforms/arch:arm": ["-Wall"], "//build/bazel/platforms/arch:arm64": ["-Wall"], @@ -303,7 +303,7 @@ func TestCcObjectLinkerScript(t *testing.T) { } `, ExpectedBazelTargets: []string{ - makeBazelTarget("cc_object", "foo", AttrNameToString{ + MakeBazelTarget("cc_object", "foo", AttrNameToString{ "copts": `["-fno-addrsig"]`, "linker_script": `"bunny.lds"`, "srcs": `["base.cpp"]`, @@ -360,7 +360,7 @@ cc_object { } `, ExpectedBazelTargets: []string{ - makeBazelTarget("cc_object", "foo", AttrNameToString{ + MakeBazelTarget("cc_object", "foo", AttrNameToString{ "copts": `["-fno-addrsig"]`, "deps": `select({ "//build/bazel/platforms/arch:arm": [":arm_obj"], @@ -401,7 +401,7 @@ func TestCcObjectSelectOnLinuxAndBionicArchs(t *testing.T) { } `, ExpectedBazelTargets: []string{ - makeBazelTarget("cc_object", "foo", AttrNameToString{ + MakeBazelTarget("cc_object", "foo", AttrNameToString{ "copts": `["-fno-addrsig"]`, "srcs": `["base.cpp"] + select({ "//build/bazel/platforms/os_arch:android_arm64": [ diff --git a/bp2build/cc_prebuilt_library_conversion_test.go b/bp2build/cc_prebuilt_library_conversion_test.go index 32c3f4d9b..9d91e40ba 100644 --- a/bp2build/cc_prebuilt_library_conversion_test.go +++ b/bp2build/cc_prebuilt_library_conversion_test.go @@ -36,10 +36,10 @@ cc_prebuilt_library { bazel_module: { bp2build_available: true }, }`, ExpectedBazelTargets: []string{ - makeBazelTarget("prebuilt_library_static", "libtest_bp2build_cc_library_static", AttrNameToString{ + MakeBazelTarget("prebuilt_library_static", "libtest_bp2build_cc_library_static", AttrNameToString{ "static_library": `"libf.so"`, }), - makeBazelTarget("prebuilt_library_shared", "libtest", AttrNameToString{ + MakeBazelTarget("prebuilt_library_shared", "libtest", AttrNameToString{ "shared_library": `"libf.so"`, }), }, @@ -66,14 +66,14 @@ cc_prebuilt_library { bazel_module: { bp2build_available: true }, }`, ExpectedBazelTargets: []string{ - makeBazelTarget("prebuilt_library_static", "libtest_bp2build_cc_library_static", AttrNameToString{ + MakeBazelTarget("prebuilt_library_static", "libtest_bp2build_cc_library_static", AttrNameToString{ "static_library": `select({ "//build/bazel/platforms/arch:arm": "libg.so", "//build/bazel/platforms/arch:arm64": "libf.so", "//conditions:default": None, })`, }), - makeBazelTarget("prebuilt_library_shared", "libtest", AttrNameToString{ + MakeBazelTarget("prebuilt_library_shared", "libtest", AttrNameToString{ "shared_library": `select({ "//build/bazel/platforms/arch:arm": "libg.so", "//build/bazel/platforms/arch:arm64": "libf.so", @@ -104,13 +104,13 @@ cc_prebuilt_library { bazel_module: { bp2build_available: true }, }`, ExpectedBazelTargets: []string{ - makeBazelTarget("prebuilt_library_static", "libtest_bp2build_cc_library_static", AttrNameToString{ + MakeBazelTarget("prebuilt_library_static", "libtest_bp2build_cc_library_static", AttrNameToString{ "static_library": `"libf.so"`, "export_includes": `["testdir/1/"]`, "export_system_includes": `["testdir/2/"]`, }), // TODO(b/229374533): When fixed, update this test - makeBazelTarget("prebuilt_library_shared", "libtest", AttrNameToString{ + MakeBazelTarget("prebuilt_library_shared", "libtest", AttrNameToString{ "shared_library": `"libf.so"`, }), }, @@ -185,10 +185,10 @@ cc_prebuilt_library { bazel_module: { bp2build_available: true }, }`, ExpectedBazelTargets: []string{ - makeBazelTarget("prebuilt_library_static", "libtest_bp2build_cc_library_static", AttrNameToString{ + MakeBazelTarget("prebuilt_library_static", "libtest_bp2build_cc_library_static", AttrNameToString{ "static_library": `"libf.so"`, }), - makeBazelTarget("prebuilt_library_shared", "libtest", AttrNameToString{ + MakeBazelTarget("prebuilt_library_shared", "libtest", AttrNameToString{ "shared_library": `"libg.so"`, }), }, diff --git a/bp2build/cc_prebuilt_library_shared_test.go b/bp2build/cc_prebuilt_library_shared_test.go index bcf0ce20a..9cee2dde5 100644 --- a/bp2build/cc_prebuilt_library_shared_test.go +++ b/bp2build/cc_prebuilt_library_shared_test.go @@ -23,7 +23,7 @@ cc_prebuilt_library_shared { bazel_module: { bp2build_available: true }, }`, ExpectedBazelTargets: []string{ - makeBazelTarget("prebuilt_library_shared", "libtest", AttrNameToString{ + MakeBazelTarget("prebuilt_library_shared", "libtest", AttrNameToString{ "shared_library": `"libf.so"`, }), }, @@ -50,7 +50,7 @@ cc_prebuilt_library_shared { bazel_module: { bp2build_available: true }, }`, ExpectedBazelTargets: []string{ - makeBazelTarget("prebuilt_library_shared", "libtest", AttrNameToString{ + MakeBazelTarget("prebuilt_library_shared", "libtest", AttrNameToString{ "shared_library": `select({ "//build/bazel/platforms/arch:arm": "libg.so", "//build/bazel/platforms/arch:arm64": "libf.so", diff --git a/bp2build/cc_prebuilt_library_static_test.go b/bp2build/cc_prebuilt_library_static_test.go index 489a53d75..7c224f14c 100644 --- a/bp2build/cc_prebuilt_library_static_test.go +++ b/bp2build/cc_prebuilt_library_static_test.go @@ -36,7 +36,7 @@ cc_prebuilt_library_static { bazel_module: { bp2build_available: true }, }`, ExpectedBazelTargets: []string{ - makeBazelTarget("prebuilt_library_static", "libtest", AttrNameToString{ + MakeBazelTarget("prebuilt_library_static", "libtest", AttrNameToString{ "static_library": `"libf.so"`, }), }, @@ -63,7 +63,7 @@ cc_prebuilt_library_static { bazel_module: { bp2build_available: true }, }`, ExpectedBazelTargets: []string{ - makeBazelTarget("prebuilt_library_static", "libtest", AttrNameToString{ + MakeBazelTarget("prebuilt_library_static", "libtest", AttrNameToString{ "static_library": `select({ "//build/bazel/platforms/arch:arm": "libg.so", "//build/bazel/platforms/arch:arm64": "libf.so", @@ -118,21 +118,21 @@ func TestCcLibraryStaticConvertLex(t *testing.T) { bazel_module: { bp2build_available: true }, }`, ExpectedBazelTargets: []string{ - makeBazelTarget("genlex", "foo_lib_genlex_l", AttrNameToString{ + MakeBazelTarget("genlex", "foo_lib_genlex_l", AttrNameToString{ "srcs": `[ "foo1.l", "foo2.l", ]`, "lexopts": `["--foo_flags"]`, }), - makeBazelTarget("genlex", "foo_lib_genlex_ll", AttrNameToString{ + MakeBazelTarget("genlex", "foo_lib_genlex_ll", AttrNameToString{ "srcs": `[ "bar1.ll", "bar2.ll", ]`, "lexopts": `["--foo_flags"]`, }), - makeBazelTarget("cc_library_static", "foo_lib", AttrNameToString{ + MakeBazelTarget("cc_library_static", "foo_lib", AttrNameToString{ "srcs": `[ "bar.cc", ":foo_lib_genlex_ll", diff --git a/bp2build/cc_test_conversion_test.go b/bp2build/cc_test_conversion_test.go new file mode 100644 index 000000000..9b7748f10 --- /dev/null +++ b/bp2build/cc_test_conversion_test.go @@ -0,0 +1,150 @@ +// 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 bp2build + +import ( + "fmt" + "testing" + + "android/soong/android" + "android/soong/cc" + "android/soong/genrule" +) + +type ccTestBp2buildTestCase struct { + description string + blueprint string + targets []testBazelTarget +} + +func registerCcTestModuleTypes(ctx android.RegistrationContext) { + cc.RegisterCCBuildComponents(ctx) + ctx.RegisterModuleType("cc_binary", cc.BinaryFactory) + ctx.RegisterModuleType("cc_library_static", cc.LibraryStaticFactory) + ctx.RegisterModuleType("cc_library", cc.LibraryFactory) + ctx.RegisterModuleType("cc_test_library", cc.TestLibraryFactory) + ctx.RegisterModuleType("genrule", genrule.GenRuleFactory) +} + +func runCcTestTestCase(t *testing.T, testCase ccTestBp2buildTestCase) { + t.Helper() + moduleTypeUnderTest := "cc_test" + + description := fmt.Sprintf("%s %s", moduleTypeUnderTest, testCase.description) + t.Run(description, func(t *testing.T) { + t.Helper() + RunBp2BuildTestCase(t, registerCcTestModuleTypes, Bp2buildTestCase{ + ExpectedBazelTargets: generateBazelTargetsForTest(testCase.targets, android.HostAndDeviceSupported), + ModuleTypeUnderTest: moduleTypeUnderTest, + ModuleTypeUnderTestFactory: cc.TestFactory, + Description: description, + Blueprint: testCase.blueprint, + }) + }) +} + +func TestBasicCcTest(t *testing.T) { + runCcTestTestCase(t, ccTestBp2buildTestCase{ + description: "basic cc_test with commonly used attributes", + blueprint: ` +cc_test { + name: "mytest", + host_supported: true, + srcs: ["test.cpp"], + target: { + android: { + srcs: ["android.cpp"], + shared_libs: ["foolib"], + }, + linux: { + srcs: ["linux.cpp"], + }, + host: { + static_libs: ["hostlib"], + }, + }, + data: [":data_mod", "file.txt"], + data_bins: [":cc_bin"], + data_libs: [":cc_lib"], + cflags: ["-Wall"], +} +` + simpleModuleDoNotConvertBp2build("cc_library", "foolib") + + simpleModuleDoNotConvertBp2build("cc_library_static", "hostlib") + + simpleModuleDoNotConvertBp2build("genrule", "data_mod") + + simpleModuleDoNotConvertBp2build("cc_binary", "cc_bin") + + simpleModuleDoNotConvertBp2build("cc_test_library", "cc_lib"), + targets: []testBazelTarget{ + {"cc_test", "mytest", AttrNameToString{ + "copts": `["-Wall"]`, + "data": `[ + ":data_mod", + "file.txt", + ":cc_bin", + ":cc_lib", + ]`, + "deps": `select({ + "//build/bazel/platforms/os:darwin": [":hostlib"], + "//build/bazel/platforms/os:linux": [":hostlib"], + "//build/bazel/platforms/os:linux_bionic": [":hostlib"], + "//build/bazel/platforms/os:linux_musl": [":hostlib"], + "//build/bazel/platforms/os:windows": [":hostlib"], + "//conditions:default": [], + })`, + "gtest": "True", + "isolated": "True", + "local_includes": `["."]`, + "dynamic_deps": `select({ + "//build/bazel/platforms/os:android": [":foolib"], + "//conditions:default": [], + })`, + "srcs": `["test.cpp"] + select({ + "//build/bazel/platforms/os:android": [ + "linux.cpp", + "android.cpp", + ], + "//build/bazel/platforms/os:linux": ["linux.cpp"], + "//build/bazel/platforms/os:linux_bionic": ["linux.cpp"], + "//build/bazel/platforms/os:linux_musl": ["linux.cpp"], + "//conditions:default": [], + })`, + }, + }, + }, + }) +} + +func TestBasicCcTestGtestIsolatedDisabled(t *testing.T) { + runCcTestTestCase(t, ccTestBp2buildTestCase{ + description: "cc test with disabled gtest and isolated props", + blueprint: ` +cc_test { + name: "mytest", + host_supported: true, + srcs: ["test.cpp"], + gtest: false, + isolated: false, +} +`, + targets: []testBazelTarget{ + {"cc_test", "mytest", AttrNameToString{ + "gtest": "False", + "isolated": "False", + "local_includes": `["."]`, + "srcs": `["test.cpp"]`, + }, + }, + }, + }) +} diff --git a/bp2build/cc_yasm_conversion_test.go b/bp2build/cc_yasm_conversion_test.go index 2a7183499..55d4febf9 100644 --- a/bp2build/cc_yasm_conversion_test.go +++ b/bp2build/cc_yasm_conversion_test.go @@ -48,7 +48,7 @@ cc_library { srcs: ["main.cpp", "myfile.asm"], }`, ExpectedBazelTargets: append([]string{ - makeBazelTarget("yasm", "foo_yasm", map[string]string{ + MakeBazelTarget("yasm", "foo_yasm", map[string]string{ "include_dirs": `["."]`, "srcs": `["myfile.asm"]`, }), @@ -81,7 +81,7 @@ cc_library { srcs: ["main.cpp", "myfile.asm"], }`, ExpectedBazelTargets: append([]string{ - makeBazelTarget("yasm", "foo_yasm", map[string]string{ + MakeBazelTarget("yasm", "foo_yasm", map[string]string{ "include_dirs": `[ "include1/foo", ".", @@ -123,7 +123,7 @@ cc_library { }, }`, ExpectedBazelTargets: append([]string{ - makeBazelTarget("yasm", "foo_yasm", map[string]string{ + MakeBazelTarget("yasm", "foo_yasm", map[string]string{ "include_dirs": `["."]`, "srcs": `select({ "//build/bazel/platforms/arch:x86": ["myfile.asm"], @@ -161,7 +161,7 @@ cc_library { }, }`, ExpectedBazelTargets: append([]string{ - makeBazelTarget("yasm", "foo_yasm", map[string]string{ + MakeBazelTarget("yasm", "foo_yasm", map[string]string{ "include_dirs": `["."]`, "srcs": `["myfile.asm"] + select({ "//build/bazel/platforms/arch:x86": ["mysecondfile.asm"], diff --git a/bp2build/conversion.go b/bp2build/conversion.go index d98b6a369..6fb28236b 100644 --- a/bp2build/conversion.go +++ b/bp2build/conversion.go @@ -96,17 +96,9 @@ func createBuildFiles(buildToTargets map[string]BazelTargets, mode CodegenMode) # This file was automatically generated by bp2build for the Bazel migration project. # Feel free to edit or test it, but do *not* check it into your version control system. ` - if targets.hasHandcraftedTargets() { - // For BUILD files with both handcrafted and generated targets, - // don't hardcode actual content, like package() declarations. - // Leave that responsibility to the checked-in BUILD file - // instead. - content += `# This file contains generated targets and handcrafted targets that are manually managed in the source tree.` - } else { - // For fully-generated BUILD files, hardcode the default visibility. - content += "package(default_visibility = [\"//visibility:public\"])" - } - content += "\n" + + // Hardcode the default visibility. + content += "package(default_visibility = [\"//visibility:public\"])\n" content += targets.LoadStatements() } else if mode == QueryView { content = soongModuleLoad diff --git a/bp2build/java_binary_host_conversion_test.go b/bp2build/java_binary_host_conversion_test.go index 50ea542b7..86f3d423b 100644 --- a/bp2build/java_binary_host_conversion_test.go +++ b/bp2build/java_binary_host_conversion_test.go @@ -55,7 +55,7 @@ func TestJavaBinaryHost(t *testing.T) { java_version: "8", }`, ExpectedBazelTargets: []string{ - makeBazelTarget("java_binary", "java-binary-host-1", AttrNameToString{ + MakeBazelTarget("java_binary", "java-binary-host-1", AttrNameToString{ "srcs": `["a.java"]`, "main_class": `"com.android.test.MainClass"`, "deps": `["//other:jni-lib-1"]`, @@ -91,7 +91,7 @@ java_library { } `, ExpectedBazelTargets: []string{ - makeBazelTarget("java_binary", "java-binary-host-1", AttrNameToString{ + MakeBazelTarget("java_binary", "java-binary-host-1", AttrNameToString{ "main_class": `"com.android.test.MainClass"`, "runtime_deps": `[":java-dep-1"]`, "target_compatible_with": `select({ diff --git a/bp2build/java_import_conversion_test.go b/bp2build/java_import_conversion_test.go index 707ecce91..05d714240 100644 --- a/bp2build/java_import_conversion_test.go +++ b/bp2build/java_import_conversion_test.go @@ -45,7 +45,7 @@ java_import { } `, ExpectedBazelTargets: []string{ - makeBazelTarget("java_import", "example_import", AttrNameToString{ + MakeBazelTarget("java_import", "example_import", AttrNameToString{ "jars": `["import.jar"]`, }), }}) @@ -74,7 +74,7 @@ java_import { } `, ExpectedBazelTargets: []string{ - makeBazelTarget("java_import", "example_import", AttrNameToString{ + MakeBazelTarget("java_import", "example_import", AttrNameToString{ "jars": `select({ "//build/bazel/platforms/os:android": ["android.jar"], "//build/bazel/platforms/os:linux": ["linux.jar"], diff --git a/bp2build/java_library_conversion_test.go b/bp2build/java_library_conversion_test.go index b57cf355b..4a4da18d0 100644 --- a/bp2build/java_library_conversion_test.go +++ b/bp2build/java_library_conversion_test.go @@ -51,11 +51,11 @@ java_library { bazel_module: { bp2build_available: true }, }`, ExpectedBazelTargets: []string{ - makeBazelTarget("java_library", "java-lib-1", AttrNameToString{ + MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{ "srcs": `["a.java"]`, "deps": `[":java-lib-2"]`, }), - makeBazelTarget("java_library", "java-lib-2", AttrNameToString{ + MakeBazelTarget("java_library", "java-lib-2", AttrNameToString{ "srcs": `["b.java"]`, }), }, @@ -84,7 +84,7 @@ java_library { bazel_module: { bp2build_available: false }, }`, ExpectedBazelTargets: []string{ - makeBazelTarget("java_library", "java-lib-1", AttrNameToString{ + MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{ "srcs": `["a.java"]`, "deps": `[ ":java-lib-2", @@ -110,7 +110,7 @@ java_library { bazel_module: { bp2build_available: false }, }`, ExpectedBazelTargets: []string{ - makeBazelTarget("java_library", "java-lib-1", AttrNameToString{ + MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{ "exports": `[":java-lib-2"]`, }), }, @@ -149,7 +149,7 @@ java_plugin { bazel_module: { bp2build_available: false }, }`, ExpectedBazelTargets: []string{ - makeBazelTarget("java_library", "java-lib-1", AttrNameToString{ + MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{ "plugins": `[":java-plugin-1"]`, }), }, @@ -166,7 +166,7 @@ func TestJavaLibraryJavaVersion(t *testing.T) { java_version: "11", }`, ExpectedBazelTargets: []string{ - makeBazelTarget("java_library", "java-lib-1", AttrNameToString{ + MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{ "srcs": `["a.java"]`, "javacopts": `["-source 11 -target 11"]`, }), @@ -186,7 +186,7 @@ func TestJavaLibraryErrorproneJavacflagsEnabledManually(t *testing.T) { }, }`, ExpectedBazelTargets: []string{ - makeBazelTarget("java_library", "java-lib-1", AttrNameToString{ + MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{ "javacopts": `[ "-Xsuper-fast", "-Xep:SpeedLimit:OFF", @@ -208,7 +208,7 @@ func TestJavaLibraryErrorproneJavacflagsErrorproneDisabledByDefault(t *testing.T }, }`, ExpectedBazelTargets: []string{ - makeBazelTarget("java_library", "java-lib-1", AttrNameToString{ + MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{ "javacopts": `["-Xsuper-fast"]`, "srcs": `["a.java"]`, }), @@ -228,7 +228,7 @@ func TestJavaLibraryErrorproneJavacflagsErrorproneDisabledManually(t *testing.T) }, }`, ExpectedBazelTargets: []string{ - makeBazelTarget("java_library", "java-lib-1", AttrNameToString{ + MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{ "javacopts": `["-Xsuper-fast"]`, "srcs": `["a.java"]`, }), @@ -252,13 +252,13 @@ func TestJavaLibraryLogTags(t *testing.T) { bazel_module: { bp2build_available: true }, }`, ExpectedBazelTargets: []string{ - makeBazelTarget("event_log_tags", "example_lib_logtags", AttrNameToString{ + MakeBazelTarget("event_log_tags", "example_lib_logtags", AttrNameToString{ "srcs": `[ "a.logtag", "b.logtag", ]`, }), - makeBazelTarget("java_library", "example_lib", AttrNameToString{ + MakeBazelTarget("java_library", "example_lib", AttrNameToString{ "srcs": `[ "a.java", "b.java", @@ -280,7 +280,7 @@ func TestJavaLibraryResources(t *testing.T) { java_resources: ["res/a.res", "res/b.res"], }`, ExpectedBazelTargets: []string{ - makeBazelTarget("java_library", "java-lib-1", AttrNameToString{ + MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{ "resources": `[ "res/a.res", "res/b.res", @@ -302,7 +302,7 @@ func TestJavaLibraryResourceDirs(t *testing.T) { java_resource_dirs: ["res"], }`, ExpectedBazelTargets: []string{ - makeBazelTarget("java_library", "java-lib-1", AttrNameToString{ + MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{ "resource_strip_prefix": `"res"`, "resources": `[ "res/a.res", @@ -326,7 +326,7 @@ func TestJavaLibraryResourcesExcludeDir(t *testing.T) { exclude_java_resource_dirs: ["res/exclude"], }`, ExpectedBazelTargets: []string{ - makeBazelTarget("java_library", "java-lib-1", AttrNameToString{ + MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{ "resource_strip_prefix": `"res"`, "resources": `["res/a.res"]`, }), @@ -347,7 +347,7 @@ func TestJavaLibraryResourcesExcludeFile(t *testing.T) { exclude_java_resources: ["res/dir1/exclude.res"], }`, ExpectedBazelTargets: []string{ - makeBazelTarget("java_library", "java-lib-1", AttrNameToString{ + MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{ "resource_strip_prefix": `"res"`, "resources": `[ "res/a.res", @@ -389,16 +389,16 @@ func TestJavaLibraryAidl(t *testing.T) { bazel_module: { bp2build_available: true }, }`, ExpectedBazelTargets: []string{ - makeBazelTarget("aidl_library", "example_lib_aidl_library", AttrNameToString{ + MakeBazelTarget("aidl_library", "example_lib_aidl_library", AttrNameToString{ "srcs": `[ "a.aidl", "b.aidl", ]`, }), - makeBazelTarget("java_aidl_library", "example_lib_java_aidl_library", AttrNameToString{ + MakeBazelTarget("java_aidl_library", "example_lib_java_aidl_library", AttrNameToString{ "deps": `[":example_lib_aidl_library"]`, }), - makeBazelTarget("java_library", "example_lib", AttrNameToString{ + MakeBazelTarget("java_library", "example_lib", AttrNameToString{ "deps": `[":example_lib_java_aidl_library"]`, "exports": `[":example_lib_java_aidl_library"]`, "srcs": `[ @@ -424,13 +424,13 @@ java_library { bazel_module: { bp2build_available: true }, }`, ExpectedBazelTargets: []string{ - makeBazelTarget("aidl_library", "example_lib_aidl_library", AttrNameToString{ + MakeBazelTarget("aidl_library", "example_lib_aidl_library", AttrNameToString{ "srcs": `["b.aidl"]`, }), - makeBazelTarget("java_aidl_library", "example_lib_java_aidl_library", AttrNameToString{ + MakeBazelTarget("java_aidl_library", "example_lib_java_aidl_library", AttrNameToString{ "deps": `[":example_lib_aidl_library"]`, }), - makeBazelTarget("java_library", "example_lib", AttrNameToString{ + MakeBazelTarget("java_library", "example_lib", AttrNameToString{ "deps": `[":example_lib_java_aidl_library"]`, "exports": `[":example_lib_java_aidl_library"]`, "srcs": `["a.java"]`, @@ -478,10 +478,10 @@ java_library { "b.aidl", ]`, }), - makeBazelTarget("java_aidl_library", "example_lib_java_aidl_library", AttrNameToString{ + MakeBazelTarget("java_aidl_library", "example_lib_java_aidl_library", AttrNameToString{ "deps": `[":aidl_files"]`, }), - makeBazelTarget("java_library", "example_lib", AttrNameToString{ + MakeBazelTarget("java_library", "example_lib", AttrNameToString{ "deps": `[":example_lib_java_aidl_library"]`, "exports": `[":example_lib_java_aidl_library"]`, "srcs": `[ @@ -523,10 +523,10 @@ java_library { ], }`, ExpectedBazelTargets: []string{ - makeBazelTarget("java_aidl_library", "foo_java_aidl_library", AttrNameToString{ + MakeBazelTarget("java_aidl_library", "foo_java_aidl_library", AttrNameToString{ "deps": `["//path/to/A:A_aidl"]`, }), - makeBazelTarget("java_library", "foo", AttrNameToString{ + MakeBazelTarget("java_library", "foo", AttrNameToString{ "exports": `[":foo_java_aidl_library"]`, }), }, diff --git a/bp2build/java_library_host_conversion_test.go b/bp2build/java_library_host_conversion_test.go index 1dcf16337..edd8690af 100644 --- a/bp2build/java_library_host_conversion_test.go +++ b/bp2build/java_library_host_conversion_test.go @@ -46,7 +46,7 @@ java_library_host { java_version: "9", }`, ExpectedBazelTargets: []string{ - makeBazelTarget("java_library", "java-lib-host-1", AttrNameToString{ + MakeBazelTarget("java_library", "java-lib-host-1", AttrNameToString{ "srcs": `["a.java"]`, "deps": `[":java-lib-host-2"]`, "target_compatible_with": `select({ @@ -54,7 +54,7 @@ java_library_host { "//conditions:default": [], })`, }), - makeBazelTarget("java_library", "java-lib-host-2", AttrNameToString{ + MakeBazelTarget("java_library", "java-lib-host-2", AttrNameToString{ "javacopts": `["-source 1.9 -target 1.9"]`, "srcs": `["c.java"]`, "target_compatible_with": `select({ diff --git a/bp2build/java_plugin_conversion_test.go b/bp2build/java_plugin_conversion_test.go index 2d2e5ff5d..d9049d46b 100644 --- a/bp2build/java_plugin_conversion_test.go +++ b/bp2build/java_plugin_conversion_test.go @@ -54,7 +54,7 @@ java_library { bazel_module: { bp2build_available: false }, }`, ExpectedBazelTargets: []string{ - makeBazelTarget("java_plugin", "java-plug-1", AttrNameToString{ + MakeBazelTarget("java_plugin", "java-plug-1", AttrNameToString{ "target_compatible_with": `select({ "//build/bazel/platforms/os:android": ["@platforms//:incompatible"], "//conditions:default": [], @@ -95,7 +95,7 @@ java_library { bazel_module: { bp2build_available: false }, }`, ExpectedBazelTargets: []string{ - makeBazelTarget("java_plugin", "java-plug-1", AttrNameToString{ + MakeBazelTarget("java_plugin", "java-plug-1", AttrNameToString{ "target_compatible_with": `select({ "//build/bazel/platforms/os:android": ["@platforms//:incompatible"], "//conditions:default": [], diff --git a/bp2build/java_proto_conversion_test.go b/bp2build/java_proto_conversion_test.go index 6465641f0..df0df2fee 100644 --- a/bp2build/java_proto_conversion_test.go +++ b/bp2build/java_proto_conversion_test.go @@ -70,7 +70,7 @@ func TestJavaProto(t *testing.T) { srcs: ["a.proto"], }` - protoLibrary := makeBazelTarget("proto_library", "java-protos_proto", AttrNameToString{ + protoLibrary := MakeBazelTarget("proto_library", "java-protos_proto", AttrNameToString{ "srcs": `["a.proto"]`, }) @@ -82,13 +82,13 @@ func TestJavaProto(t *testing.T) { Blueprint: fmt.Sprintf(bp, tc.protoType), ExpectedBazelTargets: []string{ protoLibrary, - makeBazelTarget( + MakeBazelTarget( tc.javaLibraryType, javaLibraryName, AttrNameToString{ "deps": `[":java-protos_proto"]`, }), - makeBazelTarget("java_library", "java-protos", AttrNameToString{ + MakeBazelTarget("java_library", "java-protos", AttrNameToString{ "exports": fmt.Sprintf(`[":%s"]`, javaLibraryName), }), }, @@ -106,16 +106,16 @@ func TestJavaProtoDefault(t *testing.T) { } `, ExpectedBazelTargets: []string{ - makeBazelTarget("proto_library", "java-protos_proto", AttrNameToString{ + MakeBazelTarget("proto_library", "java-protos_proto", AttrNameToString{ "srcs": `["a.proto"]`, }), - makeBazelTarget( + MakeBazelTarget( "java_lite_proto_library", "java-protos_java_proto_lite", AttrNameToString{ "deps": `[":java-protos_proto"]`, }), - makeBazelTarget("java_library", "java-protos", AttrNameToString{ + MakeBazelTarget("java_library", "java-protos", AttrNameToString{ "exports": `[":java-protos_java_proto_lite"]`, "javacopts": `["-source 1.7 -target 1.7"]`, }), diff --git a/bp2build/linker_config_conversion_test.go b/bp2build/linker_config_conversion_test.go index 3b8a36355..c4c4d8774 100644 --- a/bp2build/linker_config_conversion_test.go +++ b/bp2build/linker_config_conversion_test.go @@ -37,7 +37,7 @@ linker_config { src: "a.json", } `, - ExpectedBazelTargets: []string{makeBazelTarget("linker_config", "foo", AttrNameToString{ + ExpectedBazelTargets: []string{MakeBazelTarget("linker_config", "foo", AttrNameToString{ "src": `"a.json"`, })}, }) diff --git a/bp2build/ndk_headers_conversion_test.go b/bp2build/ndk_headers_conversion_test.go new file mode 100644 index 000000000..c7cc6b21a --- /dev/null +++ b/bp2build/ndk_headers_conversion_test.go @@ -0,0 +1,164 @@ +// 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 bp2build + +import ( + "fmt" + "testing" + + "android/soong/cc" +) + +func TestNdkHeaderFilepaths(t *testing.T) { + bpTemplate := ` + ndk_headers { + name: "foo", + srcs: %v, + exclude_srcs: %v, + } + ` + testCases := []struct { + desc string + srcs string + excludeSrcs string + expectedHdrs string + }{ + { + desc: "Single header file", + srcs: `["foo.h"]`, + excludeSrcs: `[]`, + expectedHdrs: `["foo.h"]`, + }, + { + desc: "Multiple header files", + srcs: `["foo.h", "foo_other.h"]`, + excludeSrcs: `[]`, + expectedHdrs: `[ + "foo.h", + "foo_other.h", + ]`, + }, + { + desc: "Multiple header files with excludes", + srcs: `["foo.h", "foo_other.h"]`, + excludeSrcs: `["foo_other.h"]`, + expectedHdrs: `["foo.h"]`, + }, + { + desc: "Multiple header files via Soong-supported globs", + srcs: `["*.h"]`, + excludeSrcs: `[]`, + expectedHdrs: `[ + "foo.h", + "foo_other.h", + ]`, + }, + } + for _, testCase := range testCases { + fs := map[string]string{ + "foo.h": "", + "foo_other.h": "", + } + expectedApiContributionTargetName := "foo.contribution" + expectedBazelTarget := MakeBazelTargetNoRestrictions( + "cc_api_headers", + expectedApiContributionTargetName, + AttrNameToString{ + "hdrs": testCase.expectedHdrs, + }, + ) + RunBp2BuildTestCase(t, cc.RegisterNdkModuleTypes, Bp2buildTestCase{ + Description: testCase.desc, + Blueprint: fmt.Sprintf(bpTemplate, testCase.srcs, testCase.excludeSrcs), + ExpectedBazelTargets: []string{expectedBazelTarget}, + Filesystem: fs, + }) + } +} + +func TestNdkHeaderIncludeDir(t *testing.T) { + bpTemplate := ` + ndk_headers { + name: "foo", + from: %v, + to: "this/value/is/ignored", + } + ` + testCases := []struct { + desc string + from string + expectedIncludeDir string + }{ + { + desc: "Empty `from` value", + from: `""`, + expectedIncludeDir: `""`, + }, + { + desc: "Non-Empty `from` value", + from: `"include"`, + expectedIncludeDir: `"include"`, + }, + } + for _, testCase := range testCases { + expectedApiContributionTargetName := "foo.contribution" + expectedBazelTarget := MakeBazelTargetNoRestrictions( + "cc_api_headers", + expectedApiContributionTargetName, + AttrNameToString{ + "include_dir": testCase.expectedIncludeDir, + }, + ) + RunBp2BuildTestCase(t, cc.RegisterNdkModuleTypes, Bp2buildTestCase{ + Description: testCase.desc, + Blueprint: fmt.Sprintf(bpTemplate, testCase.from), + ExpectedBazelTargets: []string{expectedBazelTarget}, + }) + } +} + +func TestVersionedNdkHeaderFilepaths(t *testing.T) { + bp := ` + versioned_ndk_headers { + name: "common_libc", + from: "include" + } + ` + fs := map[string]string{ + "include/math.h": "", + "include/stdio.h": "", + "include/arm/arm.h": "", + "include/x86/x86.h": "", + } + expectedApiContributionTargetName := "common_libc.contribution" + expectedBazelTarget := MakeBazelTargetNoRestrictions( + "cc_api_headers", + expectedApiContributionTargetName, + AttrNameToString{ + "include_dir": `"include"`, + "hdrs": `[ + "include/math.h", + "include/stdio.h", + "include/arm/arm.h", + "include/x86/x86.h", + ]`, + }, + ) + RunBp2BuildTestCase(t, cc.RegisterNdkModuleTypes, Bp2buildTestCase{ + Blueprint: bp, + Filesystem: fs, + ExpectedBazelTargets: []string{expectedBazelTarget}, + }) +} diff --git a/bp2build/prebuilt_etc_conversion_test.go b/bp2build/prebuilt_etc_conversion_test.go index fce4c745b..6738b4bcb 100644 --- a/bp2build/prebuilt_etc_conversion_test.go +++ b/bp2build/prebuilt_etc_conversion_test.go @@ -45,7 +45,7 @@ prebuilt_etc { } `, ExpectedBazelTargets: []string{ - makeBazelTarget("prebuilt_file", "apex_tz_version", AttrNameToString{ + MakeBazelTarget("prebuilt_file", "apex_tz_version", AttrNameToString{ "filename": `"tz_version"`, "installable": `False`, "src": `"version/tz_version"`, @@ -75,7 +75,7 @@ prebuilt_etc { } `, ExpectedBazelTargets: []string{ - makeBazelTarget("prebuilt_file", "apex_tz_version", AttrNameToString{ + MakeBazelTarget("prebuilt_file", "apex_tz_version", AttrNameToString{ "filename": `"tz_version"`, "installable": `False`, "src": `select({ @@ -114,7 +114,7 @@ prebuilt_etc { } `, ExpectedBazelTargets: []string{ - makeBazelTarget("prebuilt_file", "apex_tz_version", AttrNameToString{ + MakeBazelTarget("prebuilt_file", "apex_tz_version", AttrNameToString{ "filename": `"tz_version"`, "installable": `False`, "src": `select({ @@ -153,7 +153,7 @@ prebuilt_usr_share { } `, ExpectedBazelTargets: []string{ - makeBazelTarget("prebuilt_file", "apex_tz_version", AttrNameToString{ + MakeBazelTarget("prebuilt_file", "apex_tz_version", AttrNameToString{ "filename": `"tz_version"`, "installable": `False`, "src": `"version/tz_version"`, @@ -174,7 +174,7 @@ prebuilt_etc { } `, ExpectedBazelTargets: []string{ - makeBazelTarget("prebuilt_file", "apex_tz_version", AttrNameToString{ + MakeBazelTarget("prebuilt_file", "apex_tz_version", AttrNameToString{ "filename": `"tz_version"`, "installable": `False`, "src": `"version/tz_version"`, diff --git a/bp2build/python_binary_conversion_test.go b/bp2build/python_binary_conversion_test.go index 79da5d597..59055aa25 100644 --- a/bp2build/python_binary_conversion_test.go +++ b/bp2build/python_binary_conversion_test.go @@ -42,7 +42,7 @@ func TestPythonBinaryHostSimple(t *testing.T) { bazel_module: { bp2build_available: false }, }`, ExpectedBazelTargets: []string{ - makeBazelTarget("py_binary", "foo", AttrNameToString{ + MakeBazelTarget("py_binary", "foo", AttrNameToString{ "data": `["files/data.txt"]`, "deps": `[":bar"]`, "main": `"a.py"`, @@ -82,7 +82,7 @@ func TestPythonBinaryHostPy2(t *testing.T) { } `, ExpectedBazelTargets: []string{ - makeBazelTarget("py_binary", "foo", AttrNameToString{ + MakeBazelTarget("py_binary", "foo", AttrNameToString{ "python_version": `"PY2"`, "imports": `["."]`, "srcs": `["a.py"]`, @@ -117,7 +117,7 @@ func TestPythonBinaryHostPy3(t *testing.T) { `, ExpectedBazelTargets: []string{ // python_version is PY3 by default. - makeBazelTarget("py_binary", "foo", AttrNameToString{ + MakeBazelTarget("py_binary", "foo", AttrNameToString{ "imports": `["."]`, "srcs": `["a.py"]`, "target_compatible_with": `select({ @@ -150,7 +150,7 @@ func TestPythonBinaryHostArchVariance(t *testing.T) { }, }`, ExpectedBazelTargets: []string{ - makeBazelTarget("py_binary", "foo-arm", AttrNameToString{ + MakeBazelTarget("py_binary", "foo-arm", AttrNameToString{ "imports": `["."]`, "srcs": `select({ "//build/bazel/platforms/arch:arm": ["arm.py"], diff --git a/bp2build/python_library_conversion_test.go b/bp2build/python_library_conversion_test.go index 1d6061bf1..58587a698 100644 --- a/bp2build/python_library_conversion_test.go +++ b/bp2build/python_library_conversion_test.go @@ -35,7 +35,7 @@ func convertPythonLibTestCaseToBp2build_Host(tc pythonLibBp2BuildTestCase) Bp2bu func convertPythonLibTestCaseToBp2build(tc pythonLibBp2BuildTestCase) Bp2buildTestCase { var bp2BuildTargets []string for _, t := range tc.expectedBazelTargets { - bp2BuildTargets = append(bp2BuildTargets, makeBazelTarget(t.typ, t.name, t.attrs)) + bp2BuildTargets = append(bp2BuildTargets, MakeBazelTarget(t.typ, t.name, t.attrs)) } // Copy the filesystem so that we can change stuff in it later without it // affecting the original pythonLibBp2BuildTestCase diff --git a/bp2build/sh_conversion_test.go b/bp2build/sh_conversion_test.go index d8f701d94..92b3a6575 100644 --- a/bp2build/sh_conversion_test.go +++ b/bp2build/sh_conversion_test.go @@ -66,7 +66,7 @@ func TestShBinarySimple(t *testing.T) { bazel_module: { bp2build_available: true }, }`, ExpectedBazelTargets: []string{ - makeBazelTarget("sh_binary", "foo", AttrNameToString{ + MakeBazelTarget("sh_binary", "foo", AttrNameToString{ "srcs": `["foo.sh"]`, "filename": `"foo.exe"`, "sub_dir": `"sub"`, @@ -85,7 +85,7 @@ func TestShBinaryDefaults(t *testing.T) { bazel_module: { bp2build_available: true }, }`, ExpectedBazelTargets: []string{ - makeBazelTarget("sh_binary", "foo", AttrNameToString{ + MakeBazelTarget("sh_binary", "foo", AttrNameToString{ "srcs": `["foo.sh"]`, })}, }) diff --git a/bp2build/testing.go b/bp2build/testing.go index 0f321de54..b64678d27 100644 --- a/bp2build/testing.go +++ b/bp2build/testing.go @@ -444,6 +444,6 @@ func MakeBazelTargetNoRestrictions(typ, name string, attrs AttrNameToString) str // makeBazelTargetNoRestrictions returns bazel target build file definition that is device specific // as this is the most common default in Soong. -func makeBazelTarget(typ, name string, attrs AttrNameToString) string { +func MakeBazelTarget(typ, name string, attrs AttrNameToString) string { return makeBazelTargetHostOrDevice(typ, name, attrs, android.DeviceSupported) } diff --git a/cc/Android.bp b/cc/Android.bp index ce944674b..2963c77b5 100644 --- a/cc/Android.bp +++ b/cc/Android.bp @@ -99,10 +99,12 @@ bootstrap_go_package { "library_headers_test.go", "library_stub_test.go", "library_test.go", + "ndk_test.go", "object_test.go", "prebuilt_test.go", "proto_test.go", "sanitize_test.go", + "sdk_test.go", "test_data_test.go", "tidy_test.go", "vendor_public_library_test.go", diff --git a/cc/androidmk.go b/cc/androidmk.go index a95724687..a9ba1a9e6 100644 --- a/cc/androidmk.go +++ b/cc/androidmk.go @@ -644,6 +644,16 @@ func (a *apiLibraryDecorator) AndroidMkEntries(ctx AndroidMkContext, entries *an }) } +func (a *apiHeadersDecorator) AndroidMkEntries(ctx AndroidMkContext, entries *android.AndroidMkEntries) { + entries.Class = "HEADER_LIBRARIES" + entries.SubName += multitree.GetApiImportSuffix() + + entries.ExtraEntries = append(entries.ExtraEntries, func(_ android.AndroidMkExtraEntriesContext, entries *android.AndroidMkEntries) { + a.libraryDecorator.androidMkWriteExportedFlags(entries) + entries.SetBool("LOCAL_UNINSTALLABLE_MODULE", true) + }) +} + func androidMkWriteAllowUndefinedSymbols(linker *baseLinker, entries *android.AndroidMkEntries) { allow := linker.Properties.Allow_undefined_symbols if allow != nil { diff --git a/cc/binary.go b/cc/binary.go index 849aafaaa..3351fd732 100644 --- a/cc/binary.go +++ b/cc/binary.go @@ -18,6 +18,7 @@ import ( "path/filepath" "android/soong/bazel/cquery" + "github.com/google/blueprint" "github.com/google/blueprint/proptools" @@ -591,7 +592,7 @@ func (handler *ccBinaryBazelHandler) ProcessBazelQueryResponse(ctx android.Modul handler.module.linker.(*binaryDecorator).unstrippedOutputFile = outputFilePath } -func binaryBp2build(ctx android.TopDownMutatorContext, m *Module, typ string) { +func binaryBp2buildAttrs(ctx android.TopDownMutatorContext, m *Module) binaryAttributes { baseAttrs := bp2BuildParseBaseProps(ctx, m) binaryLinkerAttrs := bp2buildBinaryLinkerProps(ctx, m) @@ -601,7 +602,7 @@ func binaryBp2build(ctx android.TopDownMutatorContext, m *Module, typ string) { baseAttrs.implementationDeps.Add(baseAttrs.protoDependency) } - attrs := &binaryAttributes{ + attrs := binaryAttributes{ binaryLinkerAttrs: binaryLinkerAttrs, Srcs: baseAttrs.srcs, @@ -644,12 +645,19 @@ func binaryBp2build(ctx android.TopDownMutatorContext, m *Module, typ string) { sdkAttributes: bp2BuildParseSdkAttributes(m), } + return attrs +} + +func binaryBp2build(ctx android.TopDownMutatorContext, m *Module) { + // shared with cc_test + binaryAttrs := binaryBp2buildAttrs(ctx, m) + ctx.CreateBazelTargetModule(bazel.BazelTargetModuleProperties{ Rule_class: "cc_binary", Bzl_load_location: "//build/bazel/rules/cc:cc_binary.bzl", }, android.CommonAttributes{Name: m.Name()}, - attrs) + &binaryAttrs) } // binaryAttributes contains Bazel attributes corresponding to a cc binary diff --git a/cc/builder.go b/cc/builder.go index 35ae69b45..cb21b1ff4 100644 --- a/cc/builder.go +++ b/cc/builder.go @@ -920,14 +920,14 @@ func unzipRefDump(ctx android.ModuleContext, zippedRefDump android.Path, baseNam // sourceAbiDiff registers a build statement to compare linked sAbi dump files (.lsdump). func sourceAbiDiff(ctx android.ModuleContext, inputDump android.Path, referenceDump android.Path, - baseName, prevVersion, exportedHeaderFlags string, diffFlags []string, + baseName, exportedHeaderFlags string, diffFlags []string, prevVersion int, checkAllApis, isLlndk, isNdk, isVndkExt, previousVersionDiff bool) android.OptionalPath { var outputFile android.ModuleOutPath - if prevVersion == "" { - outputFile = android.PathForModuleOut(ctx, baseName+".abidiff") + if previousVersionDiff { + outputFile = android.PathForModuleOut(ctx, baseName+"."+strconv.Itoa(prevVersion)+".abidiff") } else { - outputFile = android.PathForModuleOut(ctx, baseName+"."+prevVersion+".abidiff") + outputFile = android.PathForModuleOut(ctx, baseName+".abidiff") } libName := strings.TrimSuffix(baseName, filepath.Ext(baseName)) @@ -946,14 +946,11 @@ func sourceAbiDiff(ctx android.ModuleContext, inputDump android.Path, referenceD if previousVersionDiff { // TODO(b/241496591): Remove -advice-only after b/239792343 and b/239790286 are reolved. extraFlags = append(extraFlags, "-advice-only") - errorMessage = "error: Please follow development/vndk/tools/header-checker/README.md to ensure the ABI compatibility between your source code and version " + prevVersion + "." - // The prevVersion is expected as a string of int, skip it if not. - if prevVersionInt, err := strconv.Atoi(prevVersion); err == nil { - sourceVersion := strconv.Itoa(prevVersionInt + 1) - extraFlags = append(extraFlags, "-target-version", sourceVersion) - } + errorMessage = "error: Please follow development/vndk/tools/header-checker/README.md to ensure the ABI compatibility between your source code and version " + strconv.Itoa(prevVersion) + "." + sourceVersion := prevVersion + 1 + extraFlags = append(extraFlags, "-target-version", strconv.Itoa(sourceVersion)) } else { - errorMessage = "error: Please update ABI references with: $ANDROID_BUILD_TOP/development/vndk/tools/header-checker/utils/create_reference_dumps.py -l " + libName + errorMessage = "error: Please update ABI references with: $$ANDROID_BUILD_TOP/development/vndk/tools/header-checker/utils/create_reference_dumps.py -l " + libName extraFlags = append(extraFlags, "-target-version", "current") } @@ -2302,9 +2302,14 @@ func updateDepsWithApiImports(deps Deps, apiImports multitree.ApiImportInfo) Dep deps.RuntimeLibs[idx] = GetReplaceModuleName(lib, apiImports.SharedLibs) } - for idx, lib := range deps.HeaderLibs { - deps.HeaderLibs[idx] = GetReplaceModuleName(lib, apiImports.HeaderLibs) + for idx, lib := range deps.SystemSharedLibs { + deps.SystemSharedLibs[idx] = GetReplaceModuleName(lib, apiImports.SharedLibs) } + + for idx, lib := range deps.ReexportSharedLibHeaders { + deps.ReexportSharedLibHeaders[idx] = GetReplaceModuleName(lib, apiImports.SharedLibs) + } + return deps } @@ -2348,9 +2353,14 @@ func (c *Module) DepsMutator(actx android.BottomUpMutatorContext) { depTag.reexportFlags = true } + // Check header lib replacement from API surface first, and then check again with VSDK + lib = GetReplaceModuleName(lib, apiImportInfo.HeaderLibs) lib = GetReplaceModuleName(lib, GetSnapshot(c, &snapshotInfo, actx).HeaderLibs) - if c.IsStubs() { + if c.isNDKStubLibrary() { + // ndk_headers do not have any variations + actx.AddFarVariationDependencies([]blueprint.Variation{}, depTag, lib) + } else if c.IsStubs() && !c.isImportedApiLibrary() { actx.AddFarVariationDependencies(append(ctx.Target().Variations(), c.ImageVariation()), depTag, lib) } else { @@ -3255,11 +3265,6 @@ func MakeLibName(ctx android.ModuleContext, c LinkableInterface, ccDep LinkableI return baseName + snapshotPrebuilt.SnapshotAndroidMkSuffix() } - - // Remove API import suffix if exists - if _, ok := ccDepModule.linker.(*apiLibraryDecorator); ok { - libName = strings.TrimSuffix(libName, multitree.GetApiImportSuffix()) - } } if ctx.DeviceConfig().VndkUseCoreVariant() && ccDep.IsVndk() && !ccDep.MustUseVendorVariant() && @@ -3371,6 +3376,15 @@ func (c *Module) testBinary() bool { return false } +func (c *Module) testLibrary() bool { + if test, ok := c.linker.(interface { + testLibrary() bool + }); ok { + return test.testLibrary() + } + return false +} + func (c *Module) benchmarkBinary() bool { if b, ok := c.linker.(interface { benchmarkBinary() bool @@ -3595,9 +3609,6 @@ func (c *Module) ShouldSupportSdkVersion(ctx android.BaseModuleContext, if _, ok := c.linker.(prebuiltLinkerInterface); ok { return nil } - if _, ok := c.linker.(*apiLibraryDecorator); ok { - return nil - } minSdkVersion := c.MinSdkVersion() if minSdkVersion == "apex_inherit" { @@ -3652,13 +3663,25 @@ const ( staticLibrary sharedLibrary headerLibrary + testBin // testBinary already declared ) func (c *Module) typ() moduleType { - if c.Binary() { + if c.testBinary() { + // testBinary is also a binary, so this comes before the c.Binary() + // conditional. A testBinary has additional implicit dependencies and + // other test-only semantics. + return testBin + } else if c.Binary() { return binary } else if c.Object() { return object + } else if c.testLibrary() { + // TODO(b/244431896) properly convert cc_test_library to its own macro. This + // will let them add implicit compile deps on gtest, for example. + // + // For now, treat them as regular shared libraries. + return sharedLibrary } else if c.CcLibrary() { static := false shared := false @@ -3687,7 +3710,11 @@ func (c *Module) ConvertWithBp2build(ctx android.TopDownMutatorContext) { switch c.typ() { case binary: if !prebuilt { - binaryBp2build(ctx, c, ctx.ModuleType()) + binaryBp2build(ctx, c) + } + case testBin: + if !prebuilt { + testBinaryBp2build(ctx, c) } case object: if !prebuilt { @@ -3778,6 +3805,11 @@ func (c *Module) IsSdkVariant() bool { return c.Properties.IsSdkVariant } +func (c *Module) isImportedApiLibrary() bool { + _, ok := c.linker.(*apiLibraryDecorator) + return ok +} + func kytheExtractAllFactory() android.Singleton { return &kytheExtractAllSingleton{} } diff --git a/cc/library.go b/cc/library.go index c97970e77..8804bbb8f 100644 --- a/cc/library.go +++ b/cc/library.go @@ -1632,13 +1632,48 @@ func (library *libraryDecorator) coverageOutputFilePath() android.OptionalPath { return library.coverageOutputFile } +// pathForVndkRefAbiDump returns an OptionalPath representing the path of the +// reference abi dump for the given module. This is not guaranteed to be valid. +func pathForVndkRefAbiDump(ctx android.ModuleInstallPathContext, version, fileName string, + isNdk, isVndk, isGzip bool) android.OptionalPath { + + currentArchType := ctx.Arch().ArchType + primaryArchType := ctx.Config().DevicePrimaryArchType() + archName := currentArchType.String() + if currentArchType != primaryArchType { + archName += "_" + primaryArchType.String() + } + + var dirName string + if isNdk { + dirName = "ndk" + } else if isVndk { + dirName = "vndk" + } else { + dirName = "platform" // opt-in libs + } + + binderBitness := ctx.DeviceConfig().BinderBitness() + + var ext string + if isGzip { + ext = ".lsdump.gz" + } else { + ext = ".lsdump" + } + + return android.ExistentPathForSource(ctx, "prebuilts", "abi-dumps", dirName, + version, binderBitness, archName, "source-based", + fileName+ext) +} + func getRefAbiDumpFile(ctx ModuleContext, vndkVersion, fileName string) android.Path { // The logic must be consistent with classifySourceAbiDump. isNdk := ctx.isNdk(ctx.Config()) isVndk := ctx.useVndk() && ctx.isVndk() - refAbiDumpTextFile := android.PathForVndkRefAbiDump(ctx, vndkVersion, fileName, isNdk, isVndk, false) - refAbiDumpGzipFile := android.PathForVndkRefAbiDump(ctx, vndkVersion, fileName, isNdk, isVndk, true) + refAbiDumpTextFile := pathForVndkRefAbiDump(ctx, vndkVersion, fileName, isNdk, isVndk, false) + refAbiDumpGzipFile := pathForVndkRefAbiDump(ctx, vndkVersion, fileName, isNdk, isVndk, true) if refAbiDumpTextFile.Valid() { if refAbiDumpGzipFile.Valid() { @@ -1655,12 +1690,12 @@ func getRefAbiDumpFile(ctx ModuleContext, vndkVersion, fileName string) android. return nil } -func prevDumpRefVersion(ctx ModuleContext) string { +func prevDumpRefVersion(ctx ModuleContext) int { sdkVersionInt := ctx.Config().PlatformSdkVersion().FinalInt() sdkVersionStr := ctx.Config().PlatformSdkVersion().String() if ctx.Config().PlatformSdkFinal() { - return strconv.Itoa(sdkVersionInt - 1) + return sdkVersionInt - 1 } else { var dirName string @@ -1676,9 +1711,9 @@ func prevDumpRefVersion(ctx ModuleContext) string { // This situation could be identified by checking the existence of the PLATFORM_SDK_VERION dump directory. refDumpDir := android.ExistentPathForSource(ctx, "prebuilts", "abi-dumps", dirName, sdkVersionStr) if refDumpDir.Valid() { - return sdkVersionStr + return sdkVersionInt } else { - return strconv.Itoa(sdkVersionInt - 1) + return sdkVersionInt - 1 } } } @@ -1686,7 +1721,7 @@ func prevDumpRefVersion(ctx ModuleContext) string { func (library *libraryDecorator) linkSAbiDumpFiles(ctx ModuleContext, objs Objects, fileName string, soFile android.Path) { if library.sabi.shouldCreateSourceAbiDump() { var version string - var prevVersion string + var prevVersion int if ctx.useVndk() { // For modules linking against vndk, follow its vndk version @@ -1718,12 +1753,13 @@ func (library *libraryDecorator) linkSAbiDumpFiles(ctx ModuleContext, objs Objec addLsdumpPath(classifySourceAbiDump(ctx) + ":" + library.sAbiOutputFile.String()) - if prevVersion != "" { - prevRefAbiDumpFile := getRefAbiDumpFile(ctx, prevVersion, fileName) + // If NDK or PLATFORM library, check against previous version ABI. + if !ctx.useVndk() { + prevRefAbiDumpFile := getRefAbiDumpFile(ctx, strconv.Itoa(prevVersion), fileName) if prevRefAbiDumpFile != nil { library.prevSAbiDiff = sourceAbiDiff(ctx, library.sAbiOutputFile.Path(), - prevRefAbiDumpFile, fileName, prevVersion, exportedHeaderFlags, - library.Properties.Header_abi_checker.Diff_flags, + prevRefAbiDumpFile, fileName, exportedHeaderFlags, + library.Properties.Header_abi_checker.Diff_flags, prevVersion, Bool(library.Properties.Header_abi_checker.Check_all_apis), ctx.IsLlndk(), ctx.isNdk(ctx.Config()), ctx.IsVndkExt(), true) } @@ -1732,8 +1768,9 @@ func (library *libraryDecorator) linkSAbiDumpFiles(ctx ModuleContext, objs Objec refAbiDumpFile := getRefAbiDumpFile(ctx, version, fileName) if refAbiDumpFile != nil { library.sAbiDiff = sourceAbiDiff(ctx, library.sAbiOutputFile.Path(), - refAbiDumpFile, fileName, "", exportedHeaderFlags, + refAbiDumpFile, fileName, exportedHeaderFlags, library.Properties.Header_abi_checker.Diff_flags, + /* unused if not previousVersionDiff */ 0, Bool(library.Properties.Header_abi_checker.Check_all_apis), ctx.IsLlndk(), ctx.isNdk(ctx.Config()), ctx.IsVndkExt(), false) } diff --git a/cc/library_stub.go b/cc/library_stub.go index fa6c27950..2ebb6efa1 100644 --- a/cc/library_stub.go +++ b/cc/library_stub.go @@ -17,7 +17,6 @@ package cc import ( "android/soong/android" "android/soong/multitree" - "strings" ) func init() { @@ -25,8 +24,10 @@ func init() { } func RegisterLibraryStubBuildComponents(ctx android.RegistrationContext) { - // cc_api_stub_library shares a lot of ndk_library, and this will be refactored later ctx.RegisterModuleType("cc_api_library", CcApiLibraryFactory) + ctx.RegisterModuleType("cc_api_headers", CcApiHeadersFactory) + + // cc_api_stub_library shares a lot of ndk_library, and this will be refactored later ctx.RegisterModuleType("cc_api_stub_library", CcApiStubLibraryFactory) ctx.RegisterModuleType("cc_api_contribution", CcApiContributionFactory) } @@ -81,6 +82,14 @@ func (d *apiLibraryDecorator) Name(basename string) string { } func (d *apiLibraryDecorator) link(ctx ModuleContext, flags Flags, deps PathDeps, objects Objects) android.Path { + // Export headers as system include dirs if specified. Mostly for libc + if Bool(d.libraryDecorator.Properties.Llndk.Export_headers_as_system) { + d.libraryDecorator.flagExporter.Properties.Export_system_include_dirs = append( + d.libraryDecorator.flagExporter.Properties.Export_system_include_dirs, + d.libraryDecorator.flagExporter.Properties.Export_include_dirs...) + d.libraryDecorator.flagExporter.Properties.Export_include_dirs = nil + } + // Flags reexported from dependencies. (e.g. vndk_prebuilt_shared) d.libraryDecorator.flagExporter.exportIncludes(ctx) d.libraryDecorator.reexportDirs(deps.ReexportedDirs...) @@ -114,9 +123,51 @@ func (d *apiLibraryDecorator) availableFor(what string) bool { return true } -func (d *apiLibraryDecorator) linkerFlags(ctx ModuleContext, flags Flags) Flags { - d.libraryDecorator.libName = strings.TrimSuffix(ctx.ModuleName(), multitree.GetApiImportSuffix()) - return d.libraryDecorator.linkerFlags(ctx, flags) +// 'cc_api_headers' is similar with 'cc_api_library', but which replaces +// header libraries. The module will replace any dependencies to existing +// original header libraries. +type apiHeadersDecorator struct { + *libraryDecorator +} + +func CcApiHeadersFactory() android.Module { + module, decorator := NewLibrary(android.DeviceSupported) + apiHeadersDecorator := &apiHeadersDecorator{ + libraryDecorator: decorator, + } + apiHeadersDecorator.HeaderOnly() + + module.stl = nil + module.sanitize = nil + decorator.disableStripping() + + module.compiler = nil + module.linker = apiHeadersDecorator + module.installer = nil + + // Mark module as stub, so APEX would not include this stub in the package. + module.library.setBuildStubs(true) + + // Prevent default system libs (libc, libm, and libdl) from being linked + if apiHeadersDecorator.baseLinker.Properties.System_shared_libs == nil { + apiHeadersDecorator.baseLinker.Properties.System_shared_libs = []string{} + } + + apiHeadersDecorator.baseLinker.Properties.No_libcrt = BoolPtr(true) + apiHeadersDecorator.baseLinker.Properties.Nocrt = BoolPtr(true) + + module.Init() + + return module +} + +func (d *apiHeadersDecorator) Name(basename string) string { + return basename + multitree.GetApiImportSuffix() +} + +func (d *apiHeadersDecorator) availableFor(what string) bool { + // Stub from API surface should be available for any APEX. + return true } func CcApiStubLibraryFactory() android.Module { diff --git a/cc/library_stub_test.go b/cc/library_stub_test.go index c2ac941dd..cd061722e 100644 --- a/cc/library_stub_test.go +++ b/cc/library_stub_test.go @@ -216,3 +216,112 @@ func TestApiLibraryShouldNotReplaceWithoutApiImport(t *testing.T) { android.AssertBoolEquals(t, "original library should be linked", true, hasDirectDependency(t, ctx, libfoo, libbar)) android.AssertBoolEquals(t, "Stub library from API surface should not be linked", false, hasDirectDependency(t, ctx, libfoo, libbarApiImport)) } + +func TestApiHeaderReplacesExistingModule(t *testing.T) { + bp := ` + cc_library { + name: "libfoo", + header_libs: ["libfoo_headers"], + } + + cc_api_library { + name: "libfoo", + header_libs: ["libfoo_headers"], + src: "libfoo.so", + } + + cc_library_headers { + name: "libfoo_headers", + } + + cc_api_headers { + name: "libfoo_headers", + } + + api_imports { + name: "api_imports", + shared_libs: [ + "libfoo", + ], + header_libs: [ + "libfoo_headers", + ], + } + ` + + ctx := prepareForCcTest.RunTestWithBp(t, bp) + + libfoo := ctx.ModuleForTests("libfoo", "android_arm64_armv8-a_shared").Module() + libfooApiImport := ctx.ModuleForTests("libfoo.apiimport", "android_arm64_armv8-a_shared").Module() + libfooHeader := ctx.ModuleForTests("libfoo_headers", "android_arm64_armv8-a").Module() + libfooHeaderApiImport := ctx.ModuleForTests("libfoo_headers.apiimport", "android_arm64_armv8-a").Module() + + android.AssertBoolEquals(t, "original header should not be used for original library", false, hasDirectDependency(t, ctx, libfoo, libfooHeader)) + android.AssertBoolEquals(t, "Header from API surface should be used for original library", true, hasDirectDependency(t, ctx, libfoo, libfooHeaderApiImport)) + android.AssertBoolEquals(t, "original header should not be used for library imported from API surface", false, hasDirectDependency(t, ctx, libfooApiImport, libfooHeader)) + android.AssertBoolEquals(t, "Header from API surface should be used for library imported from API surface", true, hasDirectDependency(t, ctx, libfooApiImport, libfooHeaderApiImport)) +} + +func TestApiHeadersDoNotRequireOriginalModule(t *testing.T) { + bp := ` + cc_library { + name: "libfoo", + header_libs: ["libfoo_headers"], + } + + cc_api_headers { + name: "libfoo_headers", + } + + api_imports { + name: "api_imports", + shared_libs: [ + "libfoo", + ], + header_libs: [ + "libfoo_headers", + ], + } + ` + + ctx := prepareForCcTest.RunTestWithBp(t, bp) + + libfoo := ctx.ModuleForTests("libfoo", "android_arm64_armv8-a_shared").Module() + libfooHeaderApiImport := ctx.ModuleForTests("libfoo_headers.apiimport", "android_arm64_armv8-a").Module() + + android.AssertBoolEquals(t, "Header from API surface should be used for original library", true, hasDirectDependency(t, ctx, libfoo, libfooHeaderApiImport)) +} + +func TestApiHeadersShouldNotReplaceWithoutApiImport(t *testing.T) { + bp := ` + cc_library { + name: "libfoo", + header_libs: ["libfoo_headers"], + } + + cc_library_headers { + name: "libfoo_headers", + } + + cc_api_headers { + name: "libfoo_headers", + } + + api_imports { + name: "api_imports", + shared_libs: [ + "libfoo", + ], + header_libs: [], + } + ` + + ctx := prepareForCcTest.RunTestWithBp(t, bp) + + libfoo := ctx.ModuleForTests("libfoo", "android_arm64_armv8-a_shared").Module() + libfooHeader := ctx.ModuleForTests("libfoo_headers", "android_arm64_armv8-a").Module() + libfooHeaderApiImport := ctx.ModuleForTests("libfoo_headers.apiimport", "android_arm64_armv8-a").Module() + + android.AssertBoolEquals(t, "original header should be used for original library", true, hasDirectDependency(t, ctx, libfoo, libfooHeader)) + android.AssertBoolEquals(t, "Header from API surface should not be used for original library", false, hasDirectDependency(t, ctx, libfoo, libfooHeaderApiImport)) +} diff --git a/cc/ndk_headers.go b/cc/ndk_headers.go index ef38a064a..5e0694880 100644 --- a/cc/ndk_headers.go +++ b/cc/ndk_headers.go @@ -19,8 +19,10 @@ import ( "path/filepath" "github.com/google/blueprint" + "github.com/google/blueprint/proptools" "android/soong/android" + "android/soong/bazel" ) var ( @@ -79,6 +81,7 @@ type headerProperties struct { type headerModule struct { android.ModuleBase + android.BazelModuleBase properties headerProperties @@ -144,6 +147,47 @@ func (m *headerModule) GenerateAndroidBuildActions(ctx android.ModuleContext) { } } +const ( + apiContributionSuffix = ".contribution" +) + +// apiContributionTargetName returns the name of the cc_api(headers|contribution) bp2build target of ndk modules +// A suffix is necessary to prevent a name collision with the base ndk_(library|header) target in the same bp2build bazel package +func apiContributionTargetName(moduleName string) string { + return moduleName + apiContributionSuffix +} + +// TODO(b/243196151): Populate `system` and `arch` metadata +type bazelCcApiHeadersAttributes struct { + Hdrs bazel.LabelListAttribute + Include_dir *string +} + +func createCcApiHeadersTarget(ctx android.TopDownMutatorContext, includes []string, excludes []string, include_dir *string) { + props := bazel.BazelTargetModuleProperties{ + Rule_class: "cc_api_headers", + Bzl_load_location: "//build/bazel/rules/apis:cc_api_contribution.bzl", + } + attrs := &bazelCcApiHeadersAttributes{ + Hdrs: bazel.MakeLabelListAttribute( + android.BazelLabelForModuleSrcExcludes( + ctx, + includes, + excludes, + ), + ), + Include_dir: include_dir, + } + ctx.CreateBazelTargetModule(props, android.CommonAttributes{ + Name: apiContributionTargetName(ctx.ModuleName()), + }, attrs) +} + +func (h *headerModule) ConvertWithBp2build(ctx android.TopDownMutatorContext) { + // Generate `cc_api_headers` target for Multi-tree API export + createCcApiHeadersTarget(ctx, h.properties.Srcs, h.properties.Exclude_srcs, h.properties.From) +} + // ndk_headers installs the sets of ndk headers defined in the srcs property // to the sysroot base + "usr/include" + to directory + directory component. // ndk_headers requires the license file to be specified. Example: @@ -158,6 +202,7 @@ func ndkHeadersFactory() android.Module { module := &headerModule{} module.AddProperties(&module.properties) android.InitAndroidModule(module) + android.InitBazelModule(module) return module } @@ -190,6 +235,7 @@ type versionedHeaderProperties struct { // Note that this is really only built to handle bionic/libc/include. type versionedHeaderModule struct { android.ModuleBase + android.BazelModuleBase properties versionedHeaderProperties @@ -197,6 +243,11 @@ type versionedHeaderModule struct { licensePath android.Path } +// Return the glob pattern to find all .h files beneath `dir` +func headerGlobPattern(dir string) string { + return filepath.Join(dir, "**", "*.h") +} + func (m *versionedHeaderModule) GenerateAndroidBuildActions(ctx android.ModuleContext) { if String(m.properties.License) == "" { ctx.PropertyErrorf("license", "field is required") @@ -206,7 +257,7 @@ func (m *versionedHeaderModule) GenerateAndroidBuildActions(ctx android.ModuleCo fromSrcPath := android.PathForModuleSrc(ctx, String(m.properties.From)) toOutputPath := getCurrentIncludePath(ctx).Join(ctx, String(m.properties.To)) - srcFiles := ctx.GlobFiles(filepath.Join(fromSrcPath.String(), "**/*.h"), nil) + srcFiles := ctx.GlobFiles(headerGlobPattern(fromSrcPath.String()), nil) var installPaths []android.WritablePath for _, header := range srcFiles { installDir := getHeaderInstallDir(ctx, header, String(m.properties.From), String(m.properties.To)) @@ -222,6 +273,13 @@ func (m *versionedHeaderModule) GenerateAndroidBuildActions(ctx android.ModuleCo processHeadersWithVersioner(ctx, fromSrcPath, toOutputPath, srcFiles, installPaths) } +func (h *versionedHeaderModule) ConvertWithBp2build(ctx android.TopDownMutatorContext) { + // Glob all .h files under `From` + includePattern := headerGlobPattern(proptools.String(h.properties.From)) + // Generate `cc_api_headers` target for Multi-tree API export + createCcApiHeadersTarget(ctx, []string{includePattern}, []string{}, h.properties.From) +} + func processHeadersWithVersioner(ctx android.ModuleContext, srcDir, outDir android.Path, srcFiles android.Paths, installPaths []android.WritablePath) android.Path { // The versioner depends on a dependencies directory to simplify determining include paths @@ -271,16 +329,19 @@ func versionedNdkHeadersFactory() android.Module { module.AddProperties(&module.properties) android.InitAndroidModule(module) + android.InitBazelModule(module) return module } -// preprocessed_ndk_header { -// name: "foo", -// preprocessor: "foo.sh", -// srcs: [...], -// to: "android", -// } +// preprocessed_ndk_header { +// +// name: "foo", +// preprocessor: "foo.sh", +// srcs: [...], +// to: "android", +// +// } // // Will invoke the preprocessor as: // diff --git a/cc/ndk_library.go b/cc/ndk_library.go index 2bbfc4aee..e2b968296 100644 --- a/cc/ndk_library.go +++ b/cc/ndk_library.go @@ -84,11 +84,13 @@ var ( // // Example: // -// ndk_library { -// name: "libfoo", -// symbol_file: "libfoo.map.txt", -// first_version: "9", -// } +// ndk_library { +// +// name: "libfoo", +// symbol_file: "libfoo.map.txt", +// first_version: "9", +// +// } type libraryProperties struct { // Relative path to the symbol map. // An example file can be seen here: TODO(danalbert): Make an example. @@ -109,6 +111,9 @@ type libraryProperties struct { // where it is enabled pending a fix for http://b/190554910 (no debug info // for asm implemented symbols). Allow_untyped_symbols *bool + + // Headers presented by this library to the Public API Surface + Export_header_libs []string } type stubDecorator struct { @@ -483,8 +488,11 @@ func (c *stubDecorator) compile(ctx ModuleContext, flags Flags, deps PathDeps) O return objs } +// Add a dependency on the header modules of this ndk_library func (linker *stubDecorator) linkerDeps(ctx DepsContext, deps Deps) Deps { - return Deps{} + return Deps{ + HeaderLibs: linker.properties.Export_header_libs, + } } func (linker *stubDecorator) Name(name string) string { diff --git a/cc/ndk_sysroot.go b/cc/ndk_sysroot.go index 6c200f5dd..622558edf 100644 --- a/cc/ndk_sysroot.go +++ b/cc/ndk_sysroot.go @@ -57,15 +57,18 @@ import ( ) func init() { - android.RegisterModuleType("ndk_headers", ndkHeadersFactory) - android.RegisterModuleType("ndk_library", NdkLibraryFactory) - android.RegisterModuleType("versioned_ndk_headers", versionedNdkHeadersFactory) - android.RegisterModuleType("preprocessed_ndk_headers", preprocessedNdkHeadersFactory) - android.RegisterSingletonType("ndk", NdkSingleton) - + RegisterNdkModuleTypes(android.InitRegistrationContext) pctx.Import("android/soong/android") } +func RegisterNdkModuleTypes(ctx android.RegistrationContext) { + ctx.RegisterModuleType("ndk_headers", ndkHeadersFactory) + ctx.RegisterModuleType("ndk_library", NdkLibraryFactory) + ctx.RegisterModuleType("versioned_ndk_headers", versionedNdkHeadersFactory) + ctx.RegisterModuleType("preprocessed_ndk_headers", preprocessedNdkHeadersFactory) + ctx.RegisterSingletonType("ndk", NdkSingleton) +} + func getNdkInstallBase(ctx android.PathContext) android.InstallPath { return android.PathForNdkInstall(ctx) } diff --git a/cc/ndk_test.go b/cc/ndk_test.go new file mode 100644 index 000000000..f20d3c61f --- /dev/null +++ b/cc/ndk_test.go @@ -0,0 +1,56 @@ +// 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 cc + +import ( + "testing" + + "github.com/google/blueprint" + + "android/soong/android" +) + +func TestNdkHeaderDependency(t *testing.T) { + isDep := func(ctx *android.TestResult, from, toExpected android.Module) bool { + foundDep := false + ctx.VisitDirectDeps(from, func(toActual blueprint.Module) { + if toExpected.Name() == toActual.Name() { + foundDep = true + } + }) + return foundDep + } + bp := ` + ndk_library { + name: "libfoo", + first_version: "29", + symbol_file: "libfoo.map.txt", + export_header_libs: ["libfoo_headers"], + } + ndk_headers { + name: "libfoo_headers", + srcs: ["foo.h"], + license: "NOTICE", + } + //This module is needed since Soong creates a dep edge on source + cc_library { + name: "libfoo", + } + ` + ctx := prepareForCcTest.RunTestWithBp(t, bp) + libfoo := ctx.ModuleForTests("libfoo.ndk", "android_arm64_armv8-a_sdk_shared") + libfoo_headers := ctx.ModuleForTests("libfoo_headers", "") + android.AssertBoolEquals(t, "Could not find headers of ndk_library", true, isDep(ctx, libfoo.Module(), libfoo_headers.Module())) +} diff --git a/cc/test.go b/cc/test.go index f5abc454d..3e85e2df9 100644 --- a/cc/test.go +++ b/cc/test.go @@ -22,6 +22,7 @@ import ( "github.com/google/blueprint/proptools" "android/soong/android" + "android/soong/bazel" "android/soong/tradefed" ) @@ -133,7 +134,7 @@ func init() { // specific functionality on a device. The executable binary gets an implicit // static_libs dependency on libgtests unless the gtest flag is set to false. func TestFactory() android.Module { - module := NewTest(android.HostAndDeviceSupported) + module := NewTest(android.HostAndDeviceSupported, true) return module.Init() } @@ -156,7 +157,7 @@ func BenchmarkFactory() android.Module { // cc_test_host compiles a test host binary. func TestHostFactory() android.Module { - module := NewTest(android.HostSupported) + module := NewTest(android.HostSupported, true) return module.Init() } @@ -204,6 +205,10 @@ func (test *testBinary) unsetSrc() { test.binaryDecorator.Properties.Stem = StringPtr("") } +func (test *testBinary) testBinary() bool { + return true +} + var _ testPerSrc = (*testBinary)(nil) func TestPerSrcMutator(mctx android.BottomUpMutatorContext) { @@ -257,16 +262,10 @@ func (test *testDecorator) gtest() bool { } func (test *testDecorator) isolated(ctx BaseModuleContext) bool { - if !ctx.Windows() { - return BoolDefault(test.LinkerProperties.Isolated, false) - } return BoolDefault(test.LinkerProperties.Isolated, false) } -func (test *testDecorator) testBinary() bool { - return true -} - +// NOTE: Keep this in sync with cc/cc_test.bzl#gtest_copts func (test *testDecorator) linkerFlags(ctx ModuleContext, flags Flags) Flags { if !test.gtest() { return flags @@ -480,8 +479,8 @@ func (test *testBinary) install(ctx ModuleContext, file android.Path) { test.binaryDecorator.baseInstaller.install(ctx, file) } -func NewTest(hod android.HostOrDeviceSupported) *Module { - module, binary := newBinary(hod, false) +func NewTest(hod android.HostOrDeviceSupported, bazelable bool) *Module { + module, binary := newBinary(hod, bazelable) module.multilib = android.MultilibBoth binary.baseInstaller = NewTestInstaller() @@ -504,6 +503,10 @@ type testLibrary struct { *libraryDecorator } +func (test *testLibrary) testLibrary() bool { + return true +} + func (test *testLibrary) linkerProps() []interface{} { var props []interface{} props = append(props, test.testDecorator.linkerProps()...) @@ -543,6 +546,7 @@ func NewTestLibrary(hod android.HostOrDeviceSupported) *Module { } module.linker = test module.installer = test + module.bazelable = true return module } @@ -632,3 +636,56 @@ func NewBenchmark(hod android.HostOrDeviceSupported) *Module { module.installer = benchmark return module } + +// binaryAttributes contains Bazel attributes corresponding to a cc test +type testBinaryAttributes struct { + binaryAttributes + + Gtest bool + Isolated bool + Data bazel.LabelListAttribute +} + +// testBinaryBp2build is the bp2build converter for cc_test modules. A cc_test's +// dependency graph and compilation/linking steps are functionally similar to a +// cc_binary, but has additional dependencies on test deps like gtest, and +// produces additional runfiles like XML plans for Tradefed orchestration +// +// TODO(b/244432609): handle `isolated` property. +// TODO(b/244432134): handle custom runpaths for tests that assume runfile layouts not +// default to bazel. (see linkerInit function) +// TODO(b/244432500): handle test.testConfig generation (see install function) +func testBinaryBp2build(ctx android.TopDownMutatorContext, m *Module) { + var testBinaryAttrs testBinaryAttributes + testBinaryAttrs.binaryAttributes = binaryBp2buildAttrs(ctx, m) + + testBinaryProps := m.GetArchVariantProperties(ctx, &TestBinaryProperties{}) + for axis, configToProps := range testBinaryProps { + for config, props := range configToProps { + if p, ok := props.(*TestBinaryProperties); ok { + // Combine data, data_bins and data_libs into a single 'data' attribute. + var combinedData bazel.LabelList + combinedData.Append(android.BazelLabelForModuleSrc(ctx, p.Data)) + combinedData.Append(android.BazelLabelForModuleDeps(ctx, p.Data_bins)) + combinedData.Append(android.BazelLabelForModuleDeps(ctx, p.Data_libs)) + testBinaryAttrs.Data.SetSelectValue(axis, config, combinedData) + } + } + } + + for _, propIntf := range m.GetProperties() { + if testLinkerProps, ok := propIntf.(*TestLinkerProperties); ok { + testBinaryAttrs.Gtest = proptools.BoolDefault(testLinkerProps.Gtest, true) + testBinaryAttrs.Isolated = proptools.BoolDefault(testLinkerProps.Isolated, true) + break + } + } + + ctx.CreateBazelTargetModule( + bazel.BazelTargetModuleProperties{ + Rule_class: "cc_test", + Bzl_load_location: "//build/bazel/rules/cc:cc_test.bzl", + }, + android.CommonAttributes{Name: m.Name()}, + &testBinaryAttrs) +} diff --git a/cc/testing.go b/cc/testing.go index 44a865d2a..e42b9fab7 100644 --- a/cc/testing.go +++ b/cc/testing.go @@ -41,6 +41,7 @@ func RegisterRequiredBuildComponentsForTest(ctx android.RegistrationContext) { ctx.RegisterModuleType("ndk_prebuilt_static_stl", NdkPrebuiltStaticStlFactory) ctx.RegisterModuleType("ndk_prebuilt_object", NdkPrebuiltObjectFactory) ctx.RegisterModuleType("ndk_library", NdkLibraryFactory) + ctx.RegisterModuleType("ndk_headers", ndkHeadersFactory) } func GatherRequiredDepsForTest(oses ...android.OsType) string { diff --git a/cmd/soong_ui/main.go b/cmd/soong_ui/main.go index cb8563488..b06e4fe73 100644 --- a/cmd/soong_ui/main.go +++ b/cmd/soong_ui/main.go @@ -176,10 +176,6 @@ func main() { build.SetupOutDir(buildCtx, config) - if config.UseBazel() && config.Dist() { - defer populateExternalDistDir(buildCtx, config) - } - // Set up files to be outputted in the log directory. logsDir := config.LogsDir() diff --git a/ui/build/build.go b/ui/build/build.go index c61baa135..ecf11ccd6 100644 --- a/ui/build/build.go +++ b/ui/build/build.go @@ -104,10 +104,9 @@ const ( // Whether to run ninja on the combined ninja. RunNinja = 1 << iota // Whether to run bazel on the combined ninja. - RunBazel = 1 << iota - RunBuildTests = 1 << iota - RunAll = RunProductConfig | RunSoong | RunKati | RunKatiNinja | RunNinja - RunAllWithBazel = RunProductConfig | RunSoong | RunKati | RunKatiNinja | RunBazel + RunBazel = 1 << iota + RunBuildTests = 1 << iota + RunAll = RunProductConfig | RunSoong | RunKati | RunKatiNinja | RunNinja ) // checkBazelMode fails the build if there are conflicting arguments for which bazel @@ -256,9 +255,6 @@ func Build(ctx Context, config Config) { SetupPath(ctx, config) what := RunAll - if config.UseBazel() { - what = RunAllWithBazel - } if config.Checkbuild() { what |= RunBuildTests } diff --git a/ui/build/config.go b/ui/build/config.go index 590aeb9be..14a99d080 100644 --- a/ui/build/config.go +++ b/ui/build/config.go @@ -99,15 +99,9 @@ type configImpl struct { pathReplaced bool - // TODO(b/243077098): Remove useBazel. - useBazel bool bazelProdMode bool bazelDevMode bool - // During Bazel execution, Bazel cannot write outside OUT_DIR. - // So if DIST_DIR is set to an external dir (outside of OUT_DIR), we need to rig it temporarily and then migrate files at the end of the build. - riggedDistDirForBazel string - // Set by multiproduct_kati emptyNinjaFile bool @@ -439,21 +433,6 @@ func NewConfig(ctx Context, args ...string) Config { ctx.Fatalf("Unable to remove bazel profile directory %q: %v", bpd, err) } - ret.useBazel = ret.environ.IsEnvTrue("USE_BAZEL") - - if ret.UseBazel() { - if err := os.MkdirAll(bpd, 0777); err != nil { - ctx.Fatalf("Failed to create bazel profile directory %q: %v", bpd, err) - } - } - - if ret.UseBazel() { - ret.riggedDistDirForBazel = filepath.Join(ret.OutDir(), "dist") - } else { - // Not rigged - ret.riggedDistDirForBazel = ret.distDir - } - c := Config{ret} storeConfigMetrics(ctx, c) return c @@ -486,7 +465,6 @@ func buildConfig(config Config) *smpb.BuildConfig { ForceUseGoma: proto.Bool(config.ForceUseGoma()), UseGoma: proto.Bool(config.UseGoma()), UseRbe: proto.Bool(config.UseRBE()), - BazelAsNinja: proto.Bool(config.UseBazel()), BazelMixedBuild: proto.Bool(config.BazelBuildEnabled()), } c.Targets = append(c.Targets, config.arguments...) @@ -877,11 +855,7 @@ func (c *configImpl) OutDir() string { } func (c *configImpl) DistDir() string { - if c.UseBazel() { - return c.riggedDistDirForBazel - } else { - return c.distDir - } + return c.distDir } func (c *configImpl) RealDistDir() string { @@ -1129,11 +1103,6 @@ func (c *configImpl) UseRBE() bool { return false } -// TODO(b/243077098): Remove UseBazel. -func (c *configImpl) UseBazel() bool { - return c.useBazel -} - func (c *configImpl) BazelBuildEnabled() bool { return c.bazelProdMode || c.bazelDevMode } diff --git a/ui/build/config_test.go b/ui/build/config_test.go index 63716b0f7..2887f59a6 100644 --- a/ui/build/config_test.go +++ b/ui/build/config_test.go @@ -1017,7 +1017,6 @@ func TestBuildConfig(t *testing.T) { ForceUseGoma: proto.Bool(false), UseGoma: proto.Bool(false), UseRbe: proto.Bool(false), - BazelAsNinja: proto.Bool(false), BazelMixedBuild: proto.Bool(false), }, }, @@ -1028,7 +1027,6 @@ func TestBuildConfig(t *testing.T) { ForceUseGoma: proto.Bool(true), UseGoma: proto.Bool(false), UseRbe: proto.Bool(false), - BazelAsNinja: proto.Bool(false), BazelMixedBuild: proto.Bool(false), }, }, @@ -1039,7 +1037,6 @@ func TestBuildConfig(t *testing.T) { ForceUseGoma: proto.Bool(false), UseGoma: proto.Bool(true), UseRbe: proto.Bool(false), - BazelAsNinja: proto.Bool(false), BazelMixedBuild: proto.Bool(false), }, }, @@ -1050,7 +1047,6 @@ func TestBuildConfig(t *testing.T) { ForceUseGoma: proto.Bool(false), UseGoma: proto.Bool(false), UseRbe: proto.Bool(true), - BazelAsNinja: proto.Bool(false), BazelMixedBuild: proto.Bool(false), }, }, @@ -1062,7 +1058,6 @@ func TestBuildConfig(t *testing.T) { ForceUseGoma: proto.Bool(false), UseGoma: proto.Bool(false), UseRbe: proto.Bool(false), - BazelAsNinja: proto.Bool(true), BazelMixedBuild: proto.Bool(false), }, }, @@ -1073,7 +1068,6 @@ func TestBuildConfig(t *testing.T) { ForceUseGoma: proto.Bool(false), UseGoma: proto.Bool(false), UseRbe: proto.Bool(false), - BazelAsNinja: proto.Bool(false), BazelMixedBuild: proto.Bool(true), }, }, @@ -1085,7 +1079,6 @@ func TestBuildConfig(t *testing.T) { ForceUseGoma: proto.Bool(false), UseGoma: proto.Bool(false), UseRbe: proto.Bool(false), - BazelAsNinja: proto.Bool(false), BazelMixedBuild: proto.Bool(true), }, }, @@ -1097,7 +1090,6 @@ func TestBuildConfig(t *testing.T) { ForceUseGoma: proto.Bool(false), UseGoma: proto.Bool(false), UseRbe: proto.Bool(false), - BazelAsNinja: proto.Bool(false), BazelMixedBuild: proto.Bool(true), }, }, @@ -1110,7 +1102,6 @@ func TestBuildConfig(t *testing.T) { ForceUseGoma: proto.Bool(false), UseGoma: proto.Bool(false), UseRbe: proto.Bool(false), - BazelAsNinja: proto.Bool(true), BazelMixedBuild: proto.Bool(false), Targets: []string{"droid", "dist"}, }, @@ -1128,7 +1119,6 @@ func TestBuildConfig(t *testing.T) { ForceUseGoma: proto.Bool(true), UseGoma: proto.Bool(true), UseRbe: proto.Bool(true), - BazelAsNinja: proto.Bool(true), BazelMixedBuild: proto.Bool(true), }, }, @@ -1139,7 +1129,6 @@ func TestBuildConfig(t *testing.T) { t.Run(tc.name, func(t *testing.T) { c := &configImpl{ environ: &tc.environ, - useBazel: tc.useBazel, bazelDevMode: tc.bazelDevMode, bazelProdMode: tc.bazelProdMode, arguments: tc.arguments, |