From 471436e01b77d763ca159473043235681e03d5d6 Mon Sep 17 00:00:00 2001 From: Cheng Zhao Date: Sat, 26 Aug 2023 12:34:53 +0900 Subject: [PATCH] Update build configurations to latest --- .gitmodules | 18 +- build/3pp/.style.yapf | 2 + build/3pp/README.md | 5 + build/3pp/fetch_github_release.py | 94 + build/3pp/print_cipd_version.py | 53 + build/OWNERS | 2 + build/OWNERS.setnoparent | 8 +- build/PRESUBMIT.py | 14 +- build/PRESUBMIT_test.py | 1 - build/action_helpers.py | 126 + build/action_helpers_unittest.py | 87 + build/args/README.txt | 4 - build/build_config.h | 26 +- build/check_gn_headers_whitelist.txt | 3 - build/cipd/cipd.gni | 140 + build/cipd/cipd_from_file.py | 65 + build/clobber_unittest.py | 148 + build/config/BUILD.gn | 41 +- build/config/BUILDCONFIG.gn | 29 +- build/config/android/BUILD.gn | 52 +- build/config/android/abi.gni | 18 +- build/config/android/android_nocompile.gni | 2 +- build/config/android/config.gni | 162 +- build/config/android/create_unwind_table.gni | 58 +- build/config/android/internal_rules.gni | 1639 ++++++----- build/config/android/jni.gni | 293 ++ .../config/android/linker_version_script.gni | 14 +- build/config/android/rules.gni | 2469 +++++++++-------- build/config/android/sdk.gni | 4 +- .../android/test/resource_overlay/BUILD.gn | 2 +- .../resource_overlay/ResourceOverlayTest.java | 2 +- build/config/apple/BUILD.gn | 17 + build/config/apple/symbols.gni | 2 +- build/config/arm.gni | 2 + build/config/c++/BUILD.gn | 10 +- build/config/c++/c++.gni | 15 +- build/config/c++/libc++.natvis | 158 +- build/config/chromecast/OWNERS | 1 - build/config/chromeos/BUILD.gn | 15 - build/config/chromeos/OWNERS | 1 + build/config/chromeos/rules.gni | 411 +-- build/config/clang/BUILD.gn | 156 ++ build/config/clang/clang.gni | 19 + build/config/compiler/BUILD.gn | 419 ++- build/config/compiler/compiler.gni | 3 +- build/config/compiler/pgo/BUILD.gn | 61 +- build/config/compiler/pgo/pgo.gni | 8 +- build/config/coverage/BUILD.gn | 20 +- build/config/coverage/coverage.gni | 3 + build/config/cronet/config.gni | 7 + build/config/fuchsia/BUILD.gn | 17 +- build/config/fuchsia/OWNERS | 4 +- .../config/fuchsia/build_cmx_from_fragment.py | 49 - .../fuchsia/generate_runner_scripts.gni | 124 +- build/config/fuchsia/gn_configs.gni | 57 + ...ackaged_content_embedder_excluded_dirs.gni | 2 + .../size_optimized_cast_receiver_args.gn | 2 + build/config/fuchsia/sizes.gni | 2 + build/config/fuchsia/test/OWNERS | 4 - build/config/fuchsia/test/README.md | 67 +- .../fuchsia/test/archivist.shard.test-cml | 19 +- .../fuchsia/test/asan_options.shard.test-cml | 12 + .../chromium_system_test_facet.shard.test-cml | 8 + .../test/context_provider.shard.test-cml | 2 - .../config/fuchsia/test/fonts.shard.test-cml | 27 +- .../test/gfx_test_ui_stack.shard.test-cml | 5 +- .../fuchsia/test/minimum.shard.test-cml | 13 +- .../test/platform_video_codecs.shard.test-cml | 3 + ...r.shard.test-cml => sysmem.shard.test-cml} | 2 +- .../test/system_test_minimum.shard.test-cml | 46 + .../fuchsia/test/test_fonts.shard.test-cml | 6 +- .../fuchsia/test/test_ui_stack.shard.test-cml | 29 +- .../test/web_instance_host.shard.test-cml | 12 - build/config/gclient_args.gni | 2 +- build/config/ios/BUILD.gn | 20 +- build/config/ios/asset_catalog.gni | 100 +- build/config/ios/ios_sdk.gni | 48 +- build/config/ios/ios_sdk_overrides.gni | 4 +- build/config/ios/ios_test_runner_wrapper.gni | 6 +- build/config/ios/rules.gni | 1210 ++++---- build/config/linux/pkg_config.gni | 2 +- build/config/loongarch64.gni | 13 + build/config/mac/BUILD.gn | 12 - build/config/mac/mac_sdk.gni | 41 +- build/config/mac/rules.gni | 17 +- build/config/ozone.gni | 2 +- build/config/pch.gni | 5 +- build/config/posix/BUILD.gn | 6 +- build/config/riscv.gni | 3 +- build/config/rust.gni | 270 +- build/config/sanitizers/BUILD.gn | 47 +- build/config/sanitizers/sanitizers.gni | 57 +- build/config/siso/.gitignore | 1 + build/config/siso/OWNERS | 6 + build/config/siso/PRESUBMIT.py | 29 + build/config/siso/README.md | 8 + build/config/siso/android.star | 410 +++ build/config/siso/blink_all.star | 39 + build/config/siso/clang_all.star | 47 + .../siso/clang_code_coverage_wrapper.star | 223 ++ build/config/siso/clang_linux.star | 124 + build/config/siso/clang_mac.star | 126 + build/config/siso/clang_windows.star | 251 ++ build/config/siso/config.star | 30 + build/config/siso/configure_siso.py | 37 + build/config/siso/linux.star | 124 + build/config/siso/mac.star | 32 + build/config/siso/main.star | 63 + build/config/siso/mojo.star | 170 ++ build/config/siso/nacl_linux.star | 215 ++ build/config/siso/nasm_linux.star | 55 + build/config/siso/nasm_scandeps.star | 88 + build/config/siso/proto_linux.star | 63 + build/config/siso/protoc_wrapper.star | 112 + build/config/siso/reproxy.star | 264 ++ build/config/siso/rewrapper_cfg.star | 61 + build/config/siso/simple.star | 46 + build/config/siso/windows.star | 32 + build/config/unwind.gni | 7 + build/config/win/BUILD.gn | 174 +- build/config/win/visual_studio_version.gni | 8 +- build/docs/debugging_slow_builds.md | 18 +- build/docs/writing_gn_templates.md | 13 +- build/dotfile_settings.gni | 2 +- build/env_dump.py | 4 +- build/gn_helpers.py | 36 +- build/install-build-deps.py | 914 ++++++ build/install-build-deps.sh | 803 +----- build/ios/PRESUBMIT.py | 8 +- build/ios/extension_bundle_data.gni | 13 +- build/ios/intent_definition.gni | 1 - build/ios/presubmit_support_test.py | 18 + .../ignore_outside_globlist_dir.filelist | 8 + .../ignore_outside_globlist_dir.globlist | 8 + .../test_data/outside_globlist_dir.filelist | 8 + .../test_data/outside_globlist_dir.globlist | 6 + build/ios/update_bundle_filelist.py | 118 +- build/lacros/PRESUBMIT.py | 8 +- build/lacros/README.md | 11 + build/lacros/lacros_resource_sizes.py | 2 + build/lacros/lacros_resource_sizes.pydeps | 1 + .../lacros/mojo_connection_lacros_launcher.py | 2 +- build/lacros/test_runner.py | 131 +- build/lacros/test_runner_test.py | 10 +- build/linux/install-chromeos-fonts.py | 10 +- build/linux/strip_binary.py | 4 +- .../linux/sysroot_scripts/build_and_upload.py | 76 +- .../debian_archive_unstable.gpg | Bin 94381 -> 0 bytes .../generate_debian_archive_unstable_gpg.sh | 41 - .../linux/sysroot_scripts/generate_keyring.sh | 18 +- .../generated_package_lists/bullseye.amd64 | 800 +++--- .../generated_package_lists/bullseye.arm | 391 --- .../generated_package_lists/bullseye.arm64 | 806 +++--- .../generated_package_lists/bullseye.armel | 796 +++--- .../generated_package_lists/bullseye.armhf | 409 +++ .../generated_package_lists/bullseye.i386 | 796 +++--- .../generated_package_lists/bullseye.mips64el | 786 +++--- .../generated_package_lists/bullseye.mipsel | 784 +++--- .../generated_package_lists/sid.amd64 | 378 --- .../generated_package_lists/sid.arm | 374 --- .../generated_package_lists/sid.arm64 | 377 --- .../generated_package_lists/sid.armel | 372 --- .../generated_package_lists/sid.i386 | 374 --- .../generated_package_lists/sid.mips64el | 365 --- .../generated_package_lists/sid.mipsel | 364 --- .../linux/sysroot_scripts/install-sysroot.py | 46 +- build/linux/sysroot_scripts/keyring.gpg | Bin 94381 -> 36472 bytes .../linux/sysroot_scripts/libdbus-1-3-symbols | 235 -- .../sysroot_scripts/libxkbcommon0-symbols | 93 - .../sysroot-creator-bullseye.sh | 485 ---- .../sysroot_scripts/sysroot-creator-sid.sh | 472 ---- .../linux/sysroot_scripts/sysroot-creator.sh | 1082 ++++---- build/linux/sysroot_scripts/sysroots.json | 61 +- .../update-archive-timestamp.sh | 4 +- build/mac_toolchain.py | 10 +- build/nocompile.gni | 87 +- build/print_python_deps.py | 4 +- build/private_code_test/BUILD.gn | 4 +- build/private_code_test/README.md | 4 +- build/private_code_test/list_gclient_deps.py | 25 +- build/private_code_test/private_code_test.gni | 15 +- build/private_code_test/private_code_test.py | 31 +- build/protoc_java.py | 10 +- build/protoc_java.pydeps | 2 + build/rust/BUILD.gn | 40 +- build/rust/OWNERS | 1 - build/rust/analyze.gni | 78 - build/rust/cargo_crate.gni | 292 +- build/rust/clanglibs/BUILD.gn | 80 - build/rust/clanglibs/find_clanglibs.py | 58 - build/rust/collect_rust_sources.py | 64 - build/rust/rs_bindings_from_cc.gni | 14 +- build/rust/run_bindgen.py | 36 +- build/rust/run_build_script.py | 44 +- build/rust/run_rs_bindings_from_cc.py | 18 +- build/rust/rust_bindgen.gni | 185 +- build/rust/rust_executable.gni | 10 +- build/rust/rust_macro.gni | 11 +- build/rust/rust_shared_library.gni | 34 +- build/rust/rust_static_library.gni | 54 +- build/rust/rust_target.gni | 241 +- build/rust/rust_unit_test.gni | 30 +- build/rust/rust_unit_tests_group.gni | 27 +- build/rust/rustc_wrapper.py | 139 +- build/rust/std/BUILD.gn | 492 +++- build/rust/std/BUILD.gn.hbs | 122 + build/rust/std/alias.cc | 22 + build/rust/std/alias.h | 37 + build/rust/std/compiler_specific.h | 38 + build/rust/std/fake_root/.cargo/config.toml | 5 - .../std/fake_root/.cargo/config.toml.template | 5 + build/rust/std/fake_root/.gitignore | 2 + build/rust/std/fake_root/Cargo.toml | 16 - build/rust/std/fake_root/Cargo.toml.template | 25 + build/rust/std/find_std_rlibs.py | 25 - build/rust/std/gnrt_config.toml | 122 +- build/rust/std/immediate_crash.h | 3 +- build/rust/std/remap_alloc.cc | 137 +- build/rust/std/rules/BUILD.gn | 2168 ++++++++++++++- build/rust/tests/BUILD.gn | 69 +- build/rust/tests/bindgen_test/BUILD.gn | 4 +- build/rust/tests/bindgen_test/src/lib.rs | 1 + build/rust/tests/test_bin_crate/BUILD.gn | 5 +- .../tests/test_bin_crate/crate/src/main.rs | 4 + .../crate/src/more.rs} | 4 +- .../tests/test_control_flow_guard/BUILD.gn | 14 + .../test_control_flow_guard.rs | 43 + .../tests/test_cpp_including_rust/BUILD.gn | 16 +- .../shared_unittests.cc | 31 + .../{unittests.cc => static_unittests.cc} | 6 +- build/rust/tests/test_local_std/BUILD.gn | 34 - .../rust/tests/test_rust_calling_cpp/BUILD.gn | 21 + .../test_rust_calling_cpp/cpp_library.cc | 9 + .../tests/test_rust_calling_cpp/cpp_library.h | 12 + .../rust/tests/test_rust_calling_cpp/main.cc | 10 + .../rust_calling_cpp_rlib.rs | 22 + build/rust/tests/test_rust_metadata/BUILD.gn | 81 + .../test_rust_metadata/foo_dependency.rs | 10 + build/rust/tests/test_rust_metadata/lib.rs | 22 + .../lib.rs => test_rust_metadata/main.cc} | 7 +- build/rust/tests/test_rust_metadata/main.rs | 8 + build/rust/tests/test_rust_metadata/tests.rs | 10 + .../test_rust_metadata/transitive_dep.rs | 14 + .../tests/test_rust_shared_library/BUILD.gn | 1 + .../tests/test_rust_shared_library/src/lib.rs | 8 +- .../tests/test_rust_static_library/BUILD.gn | 1 + .../tests/test_rust_static_library/src/lib.rs | 4 + .../tests/test_serde_json_lenient/BUILD.gn | 1 + .../rust/tests/test_simple_rust_exe/BUILD.gn | 3 +- build/sanitizers/asan_suppressions.cc | 4 + build/sanitizers/lsan_suppressions.cc | 18 +- build/sanitizers/tsan_suppressions.cc | 45 +- build/skia_gold_common/PRESUBMIT.py | 5 +- .../output_managerless_skia_gold_session.py | 17 +- ..._managerless_skia_gold_session_unittest.py | 13 +- .../skia_gold_common/skia_gold_properties.py | 66 +- build/skia_gold_common/skia_gold_session.py | 33 +- .../skia_gold_session_manager.py | 34 +- build/skia_gold_common/unittest_utils.py | 50 +- build/toolchain/android/BUILD.gn | 46 +- build/toolchain/apple/linker_driver.py | 105 +- build/toolchain/apple/toolchain.gni | 245 +- .../toolchain/clang_code_coverage_wrapper.py | 34 +- build/toolchain/cros/BUILD.gn | 7 + build/toolchain/gcc_toolchain.gni | 185 +- build/toolchain/ios/BUILD.gn | 69 +- build/toolchain/ios/swiftc.py | 15 +- build/toolchain/linux/BUILD.gn | 4 +- build/toolchain/mac/BUILD.gn | 36 +- build/toolchain/nacl/BUILD.gn | 40 + build/toolchain/nacl_toolchain.gni | 8 + build/toolchain/rbe.gni | 12 +- build/toolchain/siso.gni | 7 + build/toolchain/toolchain.gni | 34 +- build/toolchain/whole_archive.py | 57 + build/toolchain/win/BUILD.gn | 5 + build/toolchain/win/rc/linux64/rc.sha1 | 2 +- build/toolchain/win/rc/mac/rc.sha1 | 2 +- build/toolchain/win/rc/win/rc.exe.sha1 | 2 +- build/toolchain/win/toolchain.gni | 389 ++- build/toolchain/win/win_toolchain_data.gni | 44 + build/toolchain/wrapper_utils.py | 40 +- build/util/LASTCHANGE | 2 +- build/util/LASTCHANGE.committime | 2 +- build/util/PRESUBMIT.py | 6 +- build/util/android_chrome_version.py | 96 +- build/util/android_chrome_version_test.py | 558 +++- build/util/lib/common/PRESUBMIT.py | 8 +- .../lib/common/chrome_test_server_spawner.py | 11 +- build/util/lib/results/result_sink.py | 33 +- build/util/lib/results/result_sink_test.py | 70 +- build/util/version_test.py | 2 - build/vs_toolchain.py | 13 +- build/xcode_binaries.yaml | 4 + build/zip_helpers.py | 238 ++ build/zip_helpers_unittest.py | 58 + buildtools/third_party/libc++/BUILD.gn | 125 +- buildtools/third_party/libc++/OWNERS | 1 + buildtools/third_party/libc++/__config_site | 19 +- buildtools/third_party/libc++/trunk | 1 - buildtools/third_party/libc++abi/BUILD.gn | 55 +- buildtools/third_party/libc++abi/trunk | 1 - buildtools/third_party/libunwind/BUILD.gn | 24 +- buildtools/third_party/libunwind/trunk | 1 - scripts/create_dist.js | 14 +- third_party/libc++/OWNERS | 3 + .../libc++/README.chromium | 3 +- third_party/libc++/README.md | 4 + third_party/libc++/src | 1 + third_party/libc++abi/OWNERS | 2 + .../libc++abi/README.chromium | 5 +- third_party/libc++abi/README.md | 4 + third_party/libc++abi/src | 1 + third_party/libunwind/OWNERS | 2 + .../libunwind/README.chromium | 5 +- third_party/libunwind/README.md | 4 + third_party/libunwind/src | 1 + tools/clang/scripts/update.py | 51 +- tools/gn | 2 +- 319 files changed, 19532 insertions(+), 13986 deletions(-) create mode 100644 build/3pp/.style.yapf create mode 100644 build/3pp/README.md create mode 100644 build/3pp/fetch_github_release.py create mode 100755 build/3pp/print_cipd_version.py create mode 100644 build/action_helpers.py create mode 100755 build/action_helpers_unittest.py create mode 100644 build/cipd/cipd.gni create mode 100755 build/cipd/cipd_from_file.py create mode 100755 build/clobber_unittest.py create mode 100644 build/config/android/jni.gni create mode 100644 build/config/apple/BUILD.gn create mode 100644 build/config/chromeos/OWNERS delete mode 100644 build/config/fuchsia/build_cmx_from_fragment.py create mode 100644 build/config/fuchsia/gn_configs.gni create mode 100644 build/config/fuchsia/test/asan_options.shard.test-cml create mode 100644 build/config/fuchsia/test/chromium_system_test_facet.shard.test-cml rename build/config/fuchsia/test/{cfv1_launcher.shard.test-cml => sysmem.shard.test-cml} (79%) create mode 100644 build/config/fuchsia/test/system_test_minimum.shard.test-cml delete mode 100644 build/config/fuchsia/test/web_instance_host.shard.test-cml create mode 100644 build/config/loongarch64.gni create mode 100644 build/config/siso/.gitignore create mode 100644 build/config/siso/OWNERS create mode 100644 build/config/siso/PRESUBMIT.py create mode 100644 build/config/siso/README.md create mode 100644 build/config/siso/android.star create mode 100644 build/config/siso/blink_all.star create mode 100644 build/config/siso/clang_all.star create mode 100644 build/config/siso/clang_code_coverage_wrapper.star create mode 100644 build/config/siso/clang_linux.star create mode 100644 build/config/siso/clang_mac.star create mode 100644 build/config/siso/clang_windows.star create mode 100644 build/config/siso/config.star create mode 100755 build/config/siso/configure_siso.py create mode 100644 build/config/siso/linux.star create mode 100644 build/config/siso/mac.star create mode 100644 build/config/siso/main.star create mode 100644 build/config/siso/mojo.star create mode 100644 build/config/siso/nacl_linux.star create mode 100644 build/config/siso/nasm_linux.star create mode 100644 build/config/siso/nasm_scandeps.star create mode 100644 build/config/siso/proto_linux.star create mode 100644 build/config/siso/protoc_wrapper.star create mode 100644 build/config/siso/reproxy.star create mode 100644 build/config/siso/rewrapper_cfg.star create mode 100644 build/config/siso/simple.star create mode 100644 build/config/siso/windows.star create mode 100644 build/config/unwind.gni create mode 100755 build/install-build-deps.py create mode 100644 build/ios/test_data/ignore_outside_globlist_dir.filelist create mode 100644 build/ios/test_data/ignore_outside_globlist_dir.globlist create mode 100644 build/ios/test_data/outside_globlist_dir.filelist create mode 100644 build/ios/test_data/outside_globlist_dir.globlist create mode 100644 build/lacros/README.md delete mode 100644 build/linux/sysroot_scripts/debian_archive_unstable.gpg delete mode 100755 build/linux/sysroot_scripts/generate_debian_archive_unstable_gpg.sh delete mode 100644 build/linux/sysroot_scripts/generated_package_lists/bullseye.arm create mode 100644 build/linux/sysroot_scripts/generated_package_lists/bullseye.armhf delete mode 100644 build/linux/sysroot_scripts/generated_package_lists/sid.amd64 delete mode 100644 build/linux/sysroot_scripts/generated_package_lists/sid.arm delete mode 100644 build/linux/sysroot_scripts/generated_package_lists/sid.arm64 delete mode 100644 build/linux/sysroot_scripts/generated_package_lists/sid.armel delete mode 100644 build/linux/sysroot_scripts/generated_package_lists/sid.i386 delete mode 100644 build/linux/sysroot_scripts/generated_package_lists/sid.mips64el delete mode 100644 build/linux/sysroot_scripts/generated_package_lists/sid.mipsel delete mode 100644 build/linux/sysroot_scripts/libdbus-1-3-symbols delete mode 100644 build/linux/sysroot_scripts/libxkbcommon0-symbols delete mode 100755 build/linux/sysroot_scripts/sysroot-creator-bullseye.sh delete mode 100755 build/linux/sysroot_scripts/sysroot-creator-sid.sh mode change 100644 => 100755 build/linux/sysroot_scripts/sysroot-creator.sh delete mode 100644 build/rust/analyze.gni delete mode 100644 build/rust/clanglibs/BUILD.gn delete mode 100755 build/rust/clanglibs/find_clanglibs.py delete mode 100755 build/rust/collect_rust_sources.py create mode 100644 build/rust/std/BUILD.gn.hbs create mode 100644 build/rust/std/alias.cc create mode 100644 build/rust/std/alias.h create mode 100644 build/rust/std/compiler_specific.h delete mode 100644 build/rust/std/fake_root/.cargo/config.toml create mode 100644 build/rust/std/fake_root/.cargo/config.toml.template delete mode 100644 build/rust/std/fake_root/Cargo.toml create mode 100644 build/rust/std/fake_root/Cargo.toml.template rename build/rust/tests/{test_local_std/main.rs => test_bin_crate/crate/src/more.rs} (77%) create mode 100644 build/rust/tests/test_control_flow_guard/BUILD.gn create mode 100644 build/rust/tests/test_control_flow_guard/test_control_flow_guard.rs create mode 100644 build/rust/tests/test_cpp_including_rust/shared_unittests.cc rename build/rust/tests/test_cpp_including_rust/{unittests.cc => static_unittests.cc} (87%) delete mode 100644 build/rust/tests/test_local_std/BUILD.gn create mode 100644 build/rust/tests/test_rust_calling_cpp/BUILD.gn create mode 100644 build/rust/tests/test_rust_calling_cpp/cpp_library.cc create mode 100644 build/rust/tests/test_rust_calling_cpp/cpp_library.h create mode 100644 build/rust/tests/test_rust_calling_cpp/main.cc create mode 100644 build/rust/tests/test_rust_calling_cpp/rust_calling_cpp_rlib.rs create mode 100644 build/rust/tests/test_rust_metadata/BUILD.gn create mode 100644 build/rust/tests/test_rust_metadata/foo_dependency.rs create mode 100644 build/rust/tests/test_rust_metadata/lib.rs rename build/rust/tests/{test_local_std/lib.rs => test_rust_metadata/main.cc} (68%) create mode 100644 build/rust/tests/test_rust_metadata/main.rs create mode 100644 build/rust/tests/test_rust_metadata/tests.rs create mode 100644 build/rust/tests/test_rust_metadata/transitive_dep.rs create mode 100644 build/toolchain/siso.gni create mode 100644 build/toolchain/whole_archive.py create mode 100644 build/toolchain/win/win_toolchain_data.gni create mode 100644 build/zip_helpers.py create mode 100755 build/zip_helpers_unittest.py delete mode 160000 buildtools/third_party/libc++/trunk delete mode 160000 buildtools/third_party/libc++abi/trunk delete mode 160000 buildtools/third_party/libunwind/trunk create mode 100644 third_party/libc++/OWNERS rename {buildtools/third_party => third_party}/libc++/README.chromium (81%) create mode 100644 third_party/libc++/README.md create mode 160000 third_party/libc++/src create mode 100644 third_party/libc++abi/OWNERS rename {buildtools/third_party => third_party}/libc++abi/README.chromium (82%) create mode 100644 third_party/libc++abi/README.md create mode 160000 third_party/libc++abi/src create mode 100644 third_party/libunwind/OWNERS rename {buildtools/third_party => third_party}/libunwind/README.chromium (75%) create mode 100644 third_party/libunwind/README.md create mode 160000 third_party/libunwind/src diff --git a/.gitmodules b/.gitmodules index e156524..f9792f6 100644 --- a/.gitmodules +++ b/.gitmodules @@ -7,12 +7,12 @@ [submodule "tools/gn"] path = tools/gn url = https://github.com/yue/gn -[submodule "buildtools/third_party/libc++/trunk"] - path = buildtools/third_party/libc++/trunk - url = https://chromium.googlesource.com/external/github.com/llvm/llvm-project/libcxx.git -[submodule "buildtools/third_party/libc++abi/trunk"] - path = buildtools/third_party/libc++abi/trunk - url = https://chromium.googlesource.com/external/github.com/llvm/llvm-project/libcxxabi.git -[submodule "buildtools/third_party/libunwind/trunk"] - path = buildtools/third_party/libunwind/trunk - url = https://chromium.googlesource.com/external/github.com/llvm/llvm-project/libunwind.git +[submodule "third_party/libc++/src"] + path = third_party/libc++/src + url = https://chromium.googlesource.com/external/github.com/llvm/llvm-project/libcxx +[submodule "third_party/libc++abi/src"] + path = third_party/libc++abi/src + url = https://chromium.googlesource.com/external/github.com/llvm/llvm-project/libcxxabi +[submodule "third_party/libunwind/src"] + path = third_party/libunwind/src + url = https://chromium.googlesource.com/external/github.com/llvm/llvm-project/libunwind diff --git a/build/3pp/.style.yapf b/build/3pp/.style.yapf new file mode 100644 index 0000000..557fa7b --- /dev/null +++ b/build/3pp/.style.yapf @@ -0,0 +1,2 @@ +[style] +based_on_style = pep8 diff --git a/build/3pp/README.md b/build/3pp/README.md new file mode 100644 index 0000000..5030d5d --- /dev/null +++ b/build/3pp/README.md @@ -0,0 +1,5 @@ +# 3pp_util + +Contains helper scripts for 3pp configs. + +See [`//docs/docs/cipd_and_3pp.md`](/docs/cipd_and_3pp.md) diff --git a/build/3pp/fetch_github_release.py b/build/3pp/fetch_github_release.py new file mode 100644 index 0000000..57b2786 --- /dev/null +++ b/build/3pp/fetch_github_release.py @@ -0,0 +1,94 @@ +# Copyright 2023 The Chromium Authors +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +import argparse +import hashlib +import json +import os +import pathlib +import re +import urllib.request + + +def _fetch_json(url): + return json.load(urllib.request.urlopen(url)) + + +def _latest(api_url, install_scripts=None): + # Make the version change every time this file changes. + md5 = hashlib.md5() + md5.update(pathlib.Path(__file__).read_bytes()) + import __main__ + md5.update(pathlib.Path(__main__.__file__).read_bytes()) + + if install_scripts: + for path in install_scripts: + md5.update(pathlib.Path(path).read_bytes()) + file_hash = md5.hexdigest()[:10] + + release = _fetch_json(f'{api_url}/releases/latest')['tag_name'] + print('{}.{}'.format(release, file_hash)) + + +def _get_url(api_url, + artifact_filename=None, + artifact_extension=None, + artifact_regex=None): + # Split off our md5 hash. + version = os.environ['_3PP_VERSION'].rsplit('.', 1)[0] + json_dict = _fetch_json(f'{api_url}/releases/tags/{version}') + urls = [x['browser_download_url'] for x in json_dict['assets']] + + if artifact_regex: + urls = [x for x in urls if re.search(artifact_regex, x)] + + if len(urls) != 1: + raise Exception('len(urls) != 1: \n' + '\n'.join(urls)) + + partial_manifest = { + 'url': urls, + 'ext': artifact_extension or '', + } + if artifact_filename: + partial_manifest['name'] = [artifact_filename] + + print(json.dumps(partial_manifest)) + + +def main(*, + project, + artifact_filename=None, + artifact_extension=None, + artifact_regex=None, + install_scripts=None, + extract_extension=None): + """The fetch.py script for a 3pp module. + + Args: + project: GitHub username for the repo. e.g. "google/protobuf". + artifact_filename: The name for the downloaded file. Required when not + setting "unpack_archive: true" in 3pp.pb. + artifact_extension: File extension of file being downloaded. Required when + setting "unpack_archive: true" in 3pp.pb. + artifact_regex: A regex to use to identify the desired artifact from the + list of artifacts on the release. + install_scripts: List of script to add to the md5 of the version. The main + module and this module are always included. + """ + parser = argparse.ArgumentParser() + parser.add_argument('action', choices=('latest', 'get_url')) + args = parser.parse_args() + + api_url = f'https://api.github.com/repos/{project}' + if args.action == 'latest': + _latest(api_url, install_scripts=install_scripts) + else: + _get_url(api_url, + artifact_filename=artifact_filename, + artifact_extension=artifact_extension, + artifact_regex=artifact_regex) + + +if __name__ == '__main__': + main() diff --git a/build/3pp/print_cipd_version.py b/build/3pp/print_cipd_version.py new file mode 100755 index 0000000..33c29ea --- /dev/null +++ b/build/3pp/print_cipd_version.py @@ -0,0 +1,53 @@ +#!/usr/bin/env python3 +# Copyright 2023 The Chromium Authors +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +import argparse +import pathlib +import re +import subprocess + +_DIR_SOURCE_ROOT = str(pathlib.Path(__file__).absolute().parents[2]) + + +def main(): + parser = argparse.ArgumentParser() + # Hide args set by wrappers so that using --help with the wrappers does not + # show them. + parser.add_argument('--subdir', required=True, help=argparse.SUPPRESS) + parser.add_argument('--cipd-package', + required=True, + help=argparse.SUPPRESS) + parser.add_argument('--git-log-url', help=argparse.SUPPRESS) + parser.add_argument('--cipd-instance', + help='Uses value from DEPS by default') + args = parser.parse_args() + + if not args.cipd_instance: + cmd = [ + 'gclient', 'getdep', '-r', f'src/{args.subdir}:{args.cipd_package}' + ] + args.cipd_instance = subprocess.check_output(cmd, + cwd=_DIR_SOURCE_ROOT, + text=True) + + cmd = [ + 'cipd', 'describe', args.cipd_package, '-version', args.cipd_instance + ] + print(' '.join(cmd)) + output = subprocess.check_output(cmd, text=True) + print(output, end='') + if args.git_log_url: + git_hashes = re.findall(r'version:.*?@(\w+)', output) + if not git_hashes: + print('Could not find git hash from output.') + else: + # Multiple version tags exist when multiple versions have the same sha1. + last_version = git_hashes[-1] + print() + print('Recent commits:', args.git_log_url.format(last_version)) + + +if __name__ == '__main__': + main() diff --git a/build/OWNERS b/build/OWNERS index dce9d55..e6a4d3c 100644 --- a/build/OWNERS +++ b/build/OWNERS @@ -32,3 +32,5 @@ per-file whitespace_file.txt=* per-file OWNERS.status=* per-file OWNERS.setnoparent=set noparent per-file OWNERS.setnoparent=file://ATL_OWNERS + +per-file nocompile.gni=file://tools/nocompile/OWNERS diff --git a/build/OWNERS.setnoparent b/build/OWNERS.setnoparent index 260254e..98f3e9a 100644 --- a/build/OWNERS.setnoparent +++ b/build/OWNERS.setnoparent @@ -10,7 +10,7 @@ file://third_party/OWNERS # Security reviews file://build/fuchsia/SECURITY_OWNERS file://chromeos/SECURITY_OWNERS -file://content/browser/SITE_ISOLATION_OWNERS +file://content/browser/CHILD_PROCESS_SECURITY_POLICY_OWNERS file://ipc/SECURITY_OWNERS file://net/base/SECURITY_OWNERS file://sandbox/linux/OWNERS @@ -40,12 +40,14 @@ file://extensions/common/api/API_OWNERS # we don't want them. file://ui/android/java/res/LAYOUT_OWNERS -# Updating policy_templates.json can have drastic effects for systems depending +# Enterprise policies +# Updating policy templates can have drastic effects for systems depending # on policy definitions (for example, Google's cloud management tools for # Chrome and Chrome OS). # The rules are documented at: # https://sites.google.com/a/chromium.org/dev/developers/how-tos/enterprise/adding-new-policies file://components/policy/ENTERPRISE_POLICY_OWNERS +file://components/policy/resources/templates/OWNERS # This restriction is in place due to the complicated compliance regulations # around this code. @@ -74,7 +76,7 @@ file://infra/config/groups/sheriff-rotations/CHROMIUM_OWNERS # completed manually. file://third_party/blink/common/origin_trials/OT_OWNERS -# New notifiers added to //ash/constants/notifier_catalogs.h and +# New notifiers added to //ash/constants/notifier_catalogs.h and # //ash/constants/quick_settings_catalogs.h should be reviewed # by //ash/system owners to ensure that the correct notifier is being used. file://ash/system/OWNERS diff --git a/build/PRESUBMIT.py b/build/PRESUBMIT.py index fba4d32..a74917b 100644 --- a/build/PRESUBMIT.py +++ b/build/PRESUBMIT.py @@ -4,10 +4,6 @@ PRESUBMIT_VERSION = '2.0.0' -# This line is 'magic' in that git-cl looks for it to decide whether to -# use Python3 instead of Python2 when running the code in this file. -USE_PYTHON3 = True - import textwrap @@ -17,6 +13,9 @@ def CheckNoBadDeps(input_api, output_api): r'(.+/)?BUILD\.gn', r'.+\.gni', ] + exclude_file_patterns = [ + r'build/rust/tests', + ] blocklist_pattern = input_api.re.compile(r'^[^#]*"//(?!build).+?/.*"') allowlist_pattern = input_api.re.compile(r'^[^#]*"//third_party/junit') @@ -31,7 +30,8 @@ def CheckNoBadDeps(input_api, output_api): def FilterFile(affected_file): return input_api.FilterSourceFile(affected_file, - files_to_check=build_file_patterns) + files_to_check=build_file_patterns, + files_to_skip=exclude_file_patterns) problems = [] for f in input_api.AffectedSourceFiles(FilterFile): @@ -52,6 +52,4 @@ def CheckPythonTests(input_api, output_api): input_api, output_api, input_api.PresubmitLocalPath(), - files_to_check=[r'.+_(?:unit)?test\.py$'], - run_on_python2=False, - run_on_python3=True)) + files_to_check=[r'.+_(?:unit)?test\.py$'])) diff --git a/build/PRESUBMIT_test.py b/build/PRESUBMIT_test.py index c5065f4..c39c19c 100755 --- a/build/PRESUBMIT_test.py +++ b/build/PRESUBMIT_test.py @@ -14,7 +14,6 @@ from PRESUBMIT_test_mocks import MockAffectedFile from PRESUBMIT_test_mocks import MockInputApi, MockOutputApi -USE_PYTHON3 = True def _fails_deps_check(line, filename='BUILD.gn'): diff --git a/build/action_helpers.py b/build/action_helpers.py new file mode 100644 index 0000000..046a292 --- /dev/null +++ b/build/action_helpers.py @@ -0,0 +1,126 @@ +# Copyright 2023 The Chromium Authors +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. +"""Helper functions useful when writing scripts used by action() targets.""" + +import contextlib +import filecmp +import os +import pathlib +import posixpath +import shutil +import tempfile + +import gn_helpers + + +@contextlib.contextmanager +def atomic_output(path, mode='w+b', only_if_changed=True): + """Prevent half-written files and dirty mtimes for unchanged files. + + Args: + path: Path to the final output file, which will be written atomically. + mode: The mode to open the file in (str). + only_if_changed: Whether to maintain the mtime if the file has not changed. + Returns: + A Context Manager that yields a NamedTemporaryFile instance. On exit, the + manager will check if the file contents is different from the destination + and if so, move it into place. + + Example: + with action_helpers.atomic_output(output_path) as tmp_file: + subprocess.check_call(['prog', '--output', tmp_file.name]) + """ + # Create in same directory to ensure same filesystem when moving. + dirname = os.path.dirname(path) or '.' + os.makedirs(dirname, exist_ok=True) + with tempfile.NamedTemporaryFile(mode, + suffix=os.path.basename(path), + dir=dirname, + delete=False) as f: + try: + yield f + + # File should be closed before comparison/move. + f.close() + if not (only_if_changed and os.path.exists(path) + and filecmp.cmp(f.name, path)): + shutil.move(f.name, path) + finally: + f.close() + if os.path.exists(f.name): + os.unlink(f.name) + + +def add_depfile_arg(parser): + if hasattr(parser, 'add_option'): + func = parser.add_option + else: + func = parser.add_argument + func('--depfile', help='Path to depfile (refer to "gn help depfile")') + + +def write_depfile(depfile_path, first_gn_output, inputs=None): + """Writes a ninja depfile. + + See notes about how to use depfiles in //build/docs/writing_gn_templates.md. + + Args: + depfile_path: Path to file to write. + first_gn_output: Path of first entry in action's outputs. + inputs: List of inputs to add to depfile. + """ + assert depfile_path != first_gn_output # http://crbug.com/646165 + assert not isinstance(inputs, str) # Easy mistake to make + + def _process_path(path): + assert not os.path.isabs(path), f'Found abs path in depfile: {path}' + if os.path.sep != posixpath.sep: + path = str(pathlib.Path(path).as_posix()) + assert '\\' not in path, f'Found \\ in depfile: {path}' + return path.replace(' ', '\\ ') + + sb = [] + sb.append(_process_path(first_gn_output)) + if inputs: + # Sort and uniquify to ensure file is hermetic. + # One path per line to keep it human readable. + sb.append(': \\\n ') + sb.append(' \\\n '.join(sorted(_process_path(p) for p in set(inputs)))) + else: + sb.append(': ') + sb.append('\n') + + path = pathlib.Path(depfile_path) + path.parent.mkdir(parents=True, exist_ok=True) + path.write_text(''.join(sb)) + + +def parse_gn_list(value): + """Converts a "GN-list" command-line parameter into a list. + + Conversions handled: + * None -> [] + * '' -> [] + * 'asdf' -> ['asdf'] + * '["a", "b"]' -> ['a', 'b'] + * ['["a", "b"]', 'c'] -> ['a', 'b', 'c'] (action='append') + + This allows passing args like: + gn_list = [ "one", "two", "three" ] + args = [ "--items=$gn_list" ] + """ + # Convert None to []. + if not value: + return [] + # Convert a list of GN lists to a flattened list. + if isinstance(value, list): + ret = [] + for arg in value: + ret.extend(parse_gn_list(arg)) + return ret + # Convert normal GN list. + if value.startswith('['): + return gn_helpers.GNValueParser(value).ParseList() + # Convert a single string value to a list. + return [value] diff --git a/build/action_helpers_unittest.py b/build/action_helpers_unittest.py new file mode 100755 index 0000000..6a9f908 --- /dev/null +++ b/build/action_helpers_unittest.py @@ -0,0 +1,87 @@ +#!/usr/bin/env python3 +# Copyright 2023 The Chromium Authors +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +import os +import pathlib +import shutil +import sys +import tempfile +import time +import unittest + +import action_helpers + + +class ActionHelpersTest(unittest.TestCase): + def test_atomic_output(self): + tmp_file = pathlib.Path(tempfile.mktemp()) + tmp_file.write_text('test') + try: + # Test that same contents does not change mtime. + orig_mtime = os.path.getmtime(tmp_file) + with action_helpers.atomic_output(str(tmp_file), 'wt') as af: + time.sleep(.01) + af.write('test') + + self.assertEqual(os.path.getmtime(tmp_file), orig_mtime) + + # Test that contents is written. + with action_helpers.atomic_output(str(tmp_file), 'wt') as af: + af.write('test2') + self.assertEqual(tmp_file.read_text(), 'test2') + self.assertNotEqual(os.path.getmtime(tmp_file), orig_mtime) + finally: + tmp_file.unlink() + + def test_parse_gn_list(self): + def test(value, expected): + self.assertEqual(action_helpers.parse_gn_list(value), expected) + + test(None, []) + test('', []) + test('asdf', ['asdf']) + test('["one"]', ['one']) + test(['["one"]', '["two"]'], ['one', 'two']) + test(['["one", "two"]', '["three"]'], ['one', 'two', 'three']) + + def test_write_depfile(self): + tmp_file = pathlib.Path(tempfile.mktemp()) + try: + + def capture_output(inputs): + action_helpers.write_depfile(str(tmp_file), 'output', inputs) + return tmp_file.read_text() + + self.assertEqual(capture_output(None), 'output: \n') + self.assertEqual(capture_output([]), 'output: \n') + self.assertEqual(capture_output(['a']), 'output: \\\n a\n') + # Check sorted. + self.assertEqual(capture_output(['b', 'a']), 'output: \\\n a \\\n b\n') + # Check converts to forward slashes. + self.assertEqual(capture_output(['a', os.path.join('b', 'c')]), + 'output: \\\n a \\\n b/c\n') + + # Arg should be a list. + with self.assertRaises(AssertionError): + capture_output('a') + + # Do not use depfile itself as an output. + with self.assertRaises(AssertionError): + capture_output([str(tmp_file)]) + + # Do not use absolute paths. + with self.assertRaises(AssertionError): + capture_output([os.path.sep + 'foo']) + + # Do not use absolute paths (output path). + with self.assertRaises(AssertionError): + action_helpers.write_depfile(str(tmp_file), '/output', []) + + finally: + tmp_file.unlink() + + +if __name__ == '__main__': + unittest.main() diff --git a/build/args/README.txt b/build/args/README.txt index 825bf64..b82fb04 100644 --- a/build/args/README.txt +++ b/build/args/README.txt @@ -1,10 +1,6 @@ This directory is here to hold .gni files that contain sets of GN build arguments for given configurations. -(Currently this directory is empty because we removed the only thing here, but -this has come up several times so I'm confident we'll need this again. If this -directory is still empty by 2017, feel free to delete it. --Brett) - Some projects or bots may have build configurations with specific combinations of flags. Rather than making a new global flag for your specific project and adding it all over the build to each arg it should affect, you can add a .gni diff --git a/build/build_config.h b/build/build_config.h index 33a2769..1b38c7e 100644 --- a/build/build_config.h +++ b/build/build_config.h @@ -33,13 +33,13 @@ // COMPILER_MSVC / COMPILER_GCC // // Processor: -// ARCH_CPU_ARM64 / ARCH_CPU_ARMEL / ARCH_CPU_LOONG32 / ARCH_CPU_LOONG64 / -// ARCH_CPU_MIPS / ARCH_CPU_MIPS64 / ARCH_CPU_MIPS64EL / ARCH_CPU_MIPSEL / -// ARCH_CPU_PPC64 / ARCH_CPU_S390 / ARCH_CPU_S390X / ARCH_CPU_X86 / -// ARCH_CPU_X86_64 / ARCH_CPU_RISCV64 +// ARCH_CPU_ARM64 / ARCH_CPU_ARMEL / ARCH_CPU_LOONGARCH32 / +// ARCH_CPU_LOONGARCH64 / ARCH_CPU_MIPS / ARCH_CPU_MIPS64 / +// ARCH_CPU_MIPS64EL / ARCH_CPU_MIPSEL / ARCH_CPU_PPC64 / ARCH_CPU_S390 / +// ARCH_CPU_S390X / ARCH_CPU_X86 / ARCH_CPU_X86_64 / ARCH_CPU_RISCV64 // Processor family: // ARCH_CPU_ARM_FAMILY: ARMEL or ARM64 -// ARCH_CPU_LOONG_FAMILY: LOONG32 or LOONG64 +// ARCH_CPU_LOONGARCH_FAMILY: LOONGARCH32 or LOONGARCH64 // ARCH_CPU_MIPS_FAMILY: MIPS64EL or MIPSEL or MIPS64 or MIPS // ARCH_CPU_PPC64_FAMILY: PPC64 // ARCH_CPU_S390_FAMILY: S390 or S390X @@ -337,16 +337,16 @@ #define ARCH_CPU_32_BITS 1 #define ARCH_CPU_BIG_ENDIAN 1 #endif -#elif defined(__loongarch32) -#define ARCH_CPU_LOONG_FAMILY 1 -#define ARCH_CPU_LOONG32 1 -#define ARCH_CPU_32_BITS 1 +#elif defined(__loongarch__) +#define ARCH_CPU_LOONGARCH_FAMILY 1 #define ARCH_CPU_LITTLE_ENDIAN 1 -#elif defined(__loongarch64) -#define ARCH_CPU_LOONG_FAMILY 1 -#define ARCH_CPU_LOONG64 1 +#if __loongarch_grlen == 64 +#define ARCH_CPU_LOONGARCH64 1 #define ARCH_CPU_64_BITS 1 -#define ARCH_CPU_LITTLE_ENDIAN 1 +#else +#define ARCH_CPU_LOONGARCH32 1 +#define ARCH_CPU_32_BITS 1 +#endif #elif defined(__riscv) && (__riscv_xlen == 64) #define ARCH_CPU_RISCV_FAMILY 1 #define ARCH_CPU_RISCV64 1 diff --git a/build/check_gn_headers_whitelist.txt b/build/check_gn_headers_whitelist.txt index e46a598..dfefd7d 100644 --- a/build/check_gn_headers_whitelist.txt +++ b/build/check_gn_headers_whitelist.txt @@ -20,7 +20,6 @@ cc/layers/performance_properties.h chrome/browser/android/android_theme_resources.h chrome/browser/android/resource_id.h chrome/browser/ash/login/signin/oauth2_login_manager.h -chrome/browser/ash/login/signin/oauth2_login_verifier.h chrome/browser/ash/login/signin/oauth2_token_fetcher.h chrome/browser/ash/profiles/profile_helper.h chrome/browser/ash/settings/cros_settings.h @@ -54,8 +53,6 @@ chrome/install_static/install_modes.h chrome/install_static/install_util.h chrome/install_static/test/scoped_install_details.h chrome/installer/util/google_update_settings.h -components/browser_watcher/features.h -components/browser_watcher/stability_paths.h components/cdm/browser/cdm_message_filter_android.h components/device_event_log/device_event_log_export.h components/login/login_export.h diff --git a/build/cipd/cipd.gni b/build/cipd/cipd.gni new file mode 100644 index 0000000..852adef --- /dev/null +++ b/build/cipd/cipd.gni @@ -0,0 +1,140 @@ +# Copyright 2020 The Chromium Authors +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +# Build targets for constructing CIPD packages. +# +# Prepares a CIPD archive and generates a manifest file. +# +# TODO(crbug.com/1042819): Add support for including directories. +# +# Parameters: +# package_definition_yaml: CIPD package definition filename. "cipd.yaml" +# if unspecified. +# package: The path where the package will be located inside the CIPD +# repository. +# description: Sets the "description" field in CIPD package definition. +# install_mode: String, should be either "symlink" or "copy". Defaults to +# "symlink". +# deps: A list of targets to build prior to copying files. +# sources: A list of files to copy into the staging root. +# source_directories: A list of directories to include in the package. Should +# only be used when listing out all the files (in a given +# directory) in |sources| is unfeasible. +# +# Example: +# cipd_package_definition("chromedriver") { +# package = "path/to/cipd/package" +# description = "Prebuilt test binary." +# install_mode = "copy" +# deps = [ "//path/to:test_binary_target" ] +# sources = [ "//path/to:test_binary_file" ] +# } +# +template("cipd_package_definition") { + forward_variables_from(invoker, + [ + "deps", + "data", + "source_directories", + "data_deps", + "sources", + "testonly", + ]) + + assert(defined(sources) || defined(source_directories), + "At least one sources input must be specified.") + + _install_mode = "symlink" + if (defined(invoker.install_mode)) { + _install_mode = invoker.install_mode + } + assert(_install_mode == "copy" || _install_mode == "symlink", + "\"install_mode\" arg should be either \"copy\" or \"symlink\".") + + _cipd_definition_yaml = "cipd.yaml" + if (defined(invoker.package_definition_yaml)) { + _cipd_definition_yaml = invoker.package_definition_yaml + } + + _package_staging_dir = "${target_gen_dir}/${target_name}" + + _yaml_contents = [ + "package: ${invoker.package}", + "description: ${invoker.description}", + "root: " + rebase_path(_package_staging_dir), + "install_mode: ${_install_mode}", + "data:", + ] + + if (defined(sources)) { + foreach(source, sources) { + _yaml_contents += [ " - file: " + get_path_info(source, "file") ] + } + copy(target_name) { + outputs = [ "${_package_staging_dir}/{{source_file_part}}" ] + } + } + + if (defined(source_directories)) { + foreach(directory, source_directories) { + _yaml_contents += [ " - dir: " + directory ] + } + } + + write_file("${_package_staging_dir}/${_cipd_definition_yaml}", _yaml_contents) +} + +# Create a cipd file based on inputs and FILES.cfg config. Most of the arguments +# are similar with |cipd_package_definition| above. +# +# Additional parameters: +# +# package_definition_yaml: The output yaml file. Default is +# ${target_name}_cipd.yaml. +# files_file: The file defines what files and directories to include. +# Example: //tools/build/chromeos/FILES.cfg. +# buildtype: str, required. It can be "dev" or "official". +# Only when the file has the same buildtype, it will be included. +# arch: str, required. It can be "32bit", "64bit", "arm". +# +# Example: +# cipd_package_definition_by_file("chrome_cipd") { +# package = "path/to/cipd/package" +# description = "Prebuilt test binary." +# install_mode = "copy" +# files_file = "//chrome/tools/build/chromeos/FILES.json" +# buildtype = "dev" +# arch = "64bit" +# deps = [ "//path/to:test_binary_target" ] +# } +template("cipd_package_definition_by_file") { + forward_variables_from(invoker, + [ + "deps", + "data", + "data_deps", + "sources", + "testonly", + ]) + _output_yaml_filename = "${target_name}_cipd.yaml" + if (defined(invoker.package_definition_yaml)) { + _output_yaml_filename = invoker.package_definition_yaml + } + action(target_name) { + script = "//build/cipd/cipd_from_file.py" + inputs = [ invoker.files_file ] + args = [ + "--description=" + invoker.description, + "--buildtype=" + invoker.buildtype, + "--arch=" + invoker.arch, + "--files_file=" + rebase_path(invoker.files_file, root_build_dir), + "--package=" + invoker.package, + "--install_mode=" + invoker.install_mode, + "--output_yaml_file=" + + rebase_path("${root_out_dir}/" + _output_yaml_filename, + root_build_dir), + ] + outputs = [ "${root_out_dir}/" + _output_yaml_filename ] + } +} diff --git a/build/cipd/cipd_from_file.py b/build/cipd/cipd_from_file.py new file mode 100755 index 0000000..979b2b5 --- /dev/null +++ b/build/cipd/cipd_from_file.py @@ -0,0 +1,65 @@ +#!/usr/bin/env python3 +# Copyright 2021 The Chromium Authors +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. +"""Script to generate yaml file based on FILES.cfg.""" + +import argparse +import os + + +def _ParseFilesCfg(files_file): + """Return the dictionary of archive file info read from the given file.""" + if not os.path.exists(files_file): + raise IOError('Files list does not exist (%s).' % files_file) + exec_globals = {'__builtins__': None} + + exec(open(files_file).read(), exec_globals) + return exec_globals['FILES'] + + +def _Process(args): + yaml_content = ('package: ' + args.package + '\ndescription: ' + + args.description + '\ninstall_mode: ' + args.install_mode + + '\ndata:\n') + fileobj = _ParseFilesCfg(args.files_file) + for item in fileobj: + if 'buildtype' in item: + if args.buildtype not in item['buildtype']: + continue + if 'arch' in item: + if args.arch not in item['arch']: + continue + if 'type' in item and item['type'] == 'folder': + yaml_content += ' - dir: ' + item['filename'] + '\n' + else: + yaml_content += ' - file: ' + item['filename'] + '\n' + + with open(args.output_yaml_file, 'w') as f: + f.write(yaml_content) + + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument('--output_yaml_file', help='File to create.') + parser.add_argument( + '--package', + help='The path where the package will be located inside the CIPD\ + repository.') + parser.add_argument( + '--description', + help='Sets the "description" field in CIPD package definition.') + parser.add_argument('--install_mode', + help='String, should be either "symlink" or "copy".') + parser.add_argument('--files_file', + help='FILES.cfg describes what files to include.') + parser.add_argument('--buildtype', help='buildtype for FILES.cfg.') + parser.add_argument('--arch', help='arch for FILES.cfg') + + args = parser.parse_args() + + _Process(args) + + +if __name__ == '__main__': + main() diff --git a/build/clobber_unittest.py b/build/clobber_unittest.py new file mode 100755 index 0000000..d38c447 --- /dev/null +++ b/build/clobber_unittest.py @@ -0,0 +1,148 @@ +#!/usr/bin/env python3 +# Copyright 2023 The Chromium Authors +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +import os +import pathlib +import shutil +import sys +import tempfile +import textwrap +import unittest +from unittest import mock + +import clobber + + +class TestExtractBuildCommand(unittest.TestCase): + def setUp(self): + self.build_ninja_file, self.build_ninja_path = tempfile.mkstemp(text=True) + + def tearDown(self): + os.close(self.build_ninja_file) + os.remove(self.build_ninja_path) + + def test_normal_extraction(self): + build_ninja_file_contents = textwrap.dedent(""" + ninja_required_version = 1.7.2 + + rule gn + command = ../../buildtools/gn --root=../.. -q --regeneration gen . + pool = console + description = Regenerating ninja files + + build build.ninja.stamp: gn + generator = 1 + depfile = build.ninja.d + + build build.ninja: phony build.ninja.stamp + generator = 1 + + pool build_toolchain_action_pool + depth = 72 + + pool build_toolchain_link_pool + depth = 23 + + subninja toolchain.ninja + subninja clang_newlib_x64/toolchain.ninja + subninja glibc_x64/toolchain.ninja + subninja irt_x64/toolchain.ninja + subninja nacl_bootstrap_x64/toolchain.ninja + subninja newlib_pnacl/toolchain.ninja + + build blink_python_tests: phony obj/blink_python_tests.stamp + build blink_tests: phony obj/blink_tests.stamp + + default all + """) # Based off of a standard linux build dir. + with open(self.build_ninja_path, 'w') as f: + f.write(build_ninja_file_contents) + + expected_build_ninja_file_contents = textwrap.dedent(""" + ninja_required_version = 1.7.2 + + rule gn + command = ../../buildtools/gn --root=../.. -q --regeneration gen . + pool = console + description = Regenerating ninja files + + build build.ninja.stamp: gn + generator = 1 + depfile = build.ninja.d + + build build.ninja: phony build.ninja.stamp + generator = 1 + + """) + + self.assertEqual(clobber.extract_gn_build_commands(self.build_ninja_path), + expected_build_ninja_file_contents) + + def test_unexpected_format(self): + # No "build build.ninja:" line should make it return an empty string. + build_ninja_file_contents = textwrap.dedent(""" + ninja_required_version = 1.7.2 + + rule gn + command = ../../buildtools/gn --root=../.. -q --regeneration gen . + pool = console + description = Regenerating ninja files + + subninja toolchain.ninja + + build blink_python_tests: phony obj/blink_python_tests.stamp + build blink_tests: phony obj/blink_tests.stamp + + """) + with open(self.build_ninja_path, 'w') as f: + f.write(build_ninja_file_contents) + + self.assertEqual(clobber.extract_gn_build_commands(self.build_ninja_path), + '') + + +class TestDelete(unittest.TestCase): + def setUp(self): + self.build_dir = tempfile.mkdtemp() + + pathlib.Path(os.path.join(self.build_dir, 'build.ninja')).touch() + pathlib.Path(os.path.join(self.build_dir, 'build.ninja.d')).touch() + + def tearDown(self): + shutil.rmtree(self.build_dir) + + def test_delete_build_dir_full(self): + # Create a dummy file in the build dir and ensure it gets removed. + dummy_file = os.path.join(self.build_dir, 'dummy') + pathlib.Path(dummy_file).touch() + + clobber.delete_build_dir(self.build_dir) + + self.assertFalse(os.path.exists(dummy_file)) + + def test_delete_build_dir_fail(self): + # Make delete_dir() throw to ensure it's handled gracefully. + + with mock.patch('clobber._clean_dir', side_effect=OSError): + with self.assertRaises(OSError): + clobber.delete_build_dir(self.build_dir) + + @unittest.skipIf(sys.platform == 'win32', 'Symlinks are not allowed on Windows by default') + def test_delete_build_dir_link(self): + with tempfile.TemporaryDirectory() as tmpdir: + # create a symlink. + build_dir = os.path.join(tmpdir, 'link') + os.symlink(self.build_dir, build_dir) + + # create a dummy file. + dummy_file = os.path.join(build_dir, 'dummy') + pathlib.Path(dummy_file).touch() + clobber.delete_build_dir(build_dir) + + self.assertFalse(os.path.exists(dummy_file)) + + +if __name__ == '__main__': + unittest.main() diff --git a/build/config/BUILD.gn b/build/config/BUILD.gn index 35c9a62..53511ac 100644 --- a/build/config/BUILD.gn +++ b/build/config/BUILD.gn @@ -16,6 +16,7 @@ import("//build/config/ios/ios_sdk_overrides.gni") import("//build/config/mac/mac_sdk_overrides.gni") import("//build/config/pch.gni") +import("//build/config/rust.gni") import("//build/config/sanitizers/sanitizers.gni") import("//build/config/ui.gni") import("//build/toolchain/goma.gni") @@ -210,14 +211,9 @@ config("default_libs") { # linking can have run-time side effects, nothing should be listed here. libs = [] } else if (is_ios) { - # The libraries listed here will be specified for both the target and the - # host. Only the common ones should be listed here. - frameworks = [ - "CoreFoundation.framework", - "CoreGraphics.framework", - "CoreText.framework", - "Foundation.framework", - ] + # Targets should choose to explicitly link frameworks they require. Since + # linking can have run-time side effects, nothing should be listed here. + libs = [] } else if (is_linux || is_chromeos) { libs = [ "dl", @@ -261,29 +257,42 @@ group("common_deps") { public_deps += [ "//build/config/fuchsia:asan_runtime_library" ] } } + + if (is_win) { + # The CRT runtime is dynamically linked in component builds and needs to + # be present on bots that run exes or load DLLs. This also includes + # debugging DLLs in all builds. + data_deps = [ "//build/win:runtime_libs" ] + } } # Only the executable template in BUILDCONFIG.gn should reference this. group("executable_deps") { - public_deps = [ ":common_deps" ] - if (export_libcxxabi_from_executables) { - public_deps += [ "//buildtools/third_party/libc++abi" ] + if (!toolchain_for_rust_host_build_tools) { + public_deps = [ ":common_deps" ] + if (export_libcxxabi_from_executables) { + public_deps += [ "//buildtools/third_party/libc++abi" ] + } + public_configs = [ "//build/config/sanitizers:link_executable" ] } - public_configs = [ "//build/config/sanitizers:link_executable" ] } # Only the loadable_module template in BUILDCONFIG.gn should reference this. group("loadable_module_deps") { - public_deps = [ ":common_deps" ] + if (!toolchain_for_rust_host_build_tools) { + public_deps = [ ":common_deps" ] - public_configs = [ "//build/config/sanitizers:link_shared_library" ] + public_configs = [ "//build/config/sanitizers:link_shared_library" ] + } } # Only the shared_library template in BUILDCONFIG.gn should reference this. group("shared_library_deps") { - public_deps = [ ":common_deps" ] + if (!toolchain_for_rust_host_build_tools) { + public_deps = [ ":common_deps" ] - public_configs = [ "//build/config/sanitizers:link_shared_library" ] + public_configs = [ "//build/config/sanitizers:link_shared_library" ] + } } # Executable configs ----------------------------------------------------------- diff --git a/build/config/BUILDCONFIG.gn b/build/config/BUILDCONFIG.gn index 95a8c53..cab7285 100644 --- a/build/config/BUILDCONFIG.gn +++ b/build/config/BUILDCONFIG.gn @@ -363,6 +363,10 @@ if (is_win) { ] } +if (is_apple) { + default_compiler_configs += [ "//build/config/compiler:enable_arc" ] +} + if (is_posix) { if (current_os != "aix") { default_compiler_configs += @@ -396,11 +400,6 @@ if (is_debug) { # Static libraries and source sets use only the compiler ones. set_defaults("static_library") { configs = default_compiler_configs - - # For Rust, a static library involves linking in all dependencies, and it - # performs LTO. But since we will perform LTO in the C++ linker which - # consumes the library, we defer LTO from Rust into the linker. - configs += [ "//build/config/compiler:rust_defer_lto_to_linker" ] } set_defaults("source_set") { configs = default_compiler_configs @@ -421,8 +420,8 @@ if (is_win) { # that shouldn't use the windows subsystem. "//build/config/win:console", ] -} else if (is_mac) { - _linker_configs = [ "//build/config/mac:strip_all" ] +} else if (is_apple) { + _linker_configs = [ "//build/config/apple:strip_all" ] } else { _linker_configs = [] } @@ -438,6 +437,14 @@ if (is_win) { # if needed. default_executable_configs += [ "//build/config/win:cfi_linker" ] } +if (is_fuchsia) { + # Sometimes executables are linked by rustc passing a command line to + # clang++. It includes "-pie" which is pointless on Fuchsia. Suppress the + # resulting (fatal) warning. Unfortunately there's no way to do this only + # for binaries linked by rustc; gn does not make the distinction. + default_executable_configs += + [ "//build/config/fuchsia:rustc_no_pie_warning" ] +} set_defaults("executable") { configs = default_executable_configs @@ -460,6 +467,14 @@ if (is_android) { default_shared_library_configs += [ "//build/config/android:hide_all_but_jni_onload" ] } +if (is_fuchsia) { + # Sometimes shared libraries are linked by rustc passing a command line to + # clang++. It includes "-pie" which is pointless on Fuchsia. Suppress the + # resulting (fatal) warning. Unfortunately there's no way to do this only + # for binaries linked by rustc; gn does not make the distinction. + default_shared_library_configs += + [ "//build/config/fuchsia:rustc_no_pie_warning" ] +} set_defaults("shared_library") { configs = default_shared_library_configs } diff --git a/build/config/android/BUILD.gn b/build/config/android/BUILD.gn index 69341ce..e7c18c0 100644 --- a/build/config/android/BUILD.gn +++ b/build/config/android/BUILD.gn @@ -1,8 +1,8 @@ -# Copyright 2014 The Chromium Authors. All rights reserved. +# Copyright 2014 The Chromium Authors # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. -import("//build/config/android/config.gni") +import("//build/config/android/rules.gni") import("//build/config/c++/c++.gni") import("//build/config/compiler/compiler.gni") import("//build/config/sanitizers/sanitizers.gni") @@ -33,13 +33,6 @@ config("compiler") { "ANDROID_NDK_VERSION_ROLL=${android_ndk_version}_1", ] - if (current_cpu == "mips64el") { - cflags += [ - # Have to force IAS for mips64. - "-fintegrated-as", - ] - } - ldflags = [ # Don't allow visible symbols from libraries that contain # assembly code with symbols that aren't hidden properly. @@ -57,15 +50,13 @@ config("compiler") { if (current_cpu == "arm64") { if (arm_control_flow_integrity == "standard") { cflags += [ "-mbranch-protection=standard" ] + rustflags = [ "-Zbranch-protection=bti" ] } else if (arm_control_flow_integrity == "pac") { cflags += [ "-mbranch-protection=pac-ret" ] + rustflags = [ "-Zbranch-protection=pac-ret" ] } } - # Instead of using an unwind lib from the toolchain, - # buildtools/third_party/libunwind will be built and used directly. - ldflags += [ "--unwindlib=none" ] - # $compile_api_level corresponds to the API level used for the sysroot path # calculation in //build/config/android/config.gni if (android_64bit_target_cpu) { @@ -101,16 +92,6 @@ config("runtime_library") { if (current_cpu == "arm" && arm_version == 6) { libs += [ "atomic" ] } - - if (current_cpu == "mipsel") { - libs += [ "atomic" ] - } - - # TODO(jdduke) Re-enable on mips after resolving linking - # issues with libc++ (crbug.com/456380). - if (current_cpu != "mipsel" && current_cpu != "mips64el") { - ldflags += [ "-Wl,--warn-shared-textrel" ] - } } config("hide_all_but_jni_onload") { @@ -129,6 +110,27 @@ config("lld_pack_relocations") { ldflags = [ "-Wl,--pack-dyn-relocs=android" ] } +config("lld_relr_relocations") { + # RELR supported API 30+, but supported 28+ with --use-android-relr-tags. + # https://android.googlesource.com/platform/bionic/+/master/android-changes-for-ndk-developers.md#relative-relocations-relr + ldflags = [ "-Wl,--pack-dyn-relocs=relr,--use-android-relr-tags" ] +} + +config("lld_branch_target_hardening") { + # Config opts a shared library into BTI linker hardening. This + # is an opt-in config (rather than default-enabled) to avoid + # interfering with the V8 CFI bots (crbug.com/1334614). + if (current_cpu == "arm64") { + if (arm_control_flow_integrity == "standard") { + # Linking objects without GNU_PROPERTY_AARCH64_FEATURE_1_BTI + # in their .gnu.note section implicitly results in the final + # binary losing Branch Target Identification (BTI) support. + # Issue a warning if this happens. + ldflags = [ "-Wl,-z,force-bti" ] + } + } +} + # Used for instrumented build to generate the orderfile. config("default_orderfile_instrumentation") { if (use_order_profiling) { @@ -141,6 +143,10 @@ config("default_orderfile_instrumentation") { } } +config("jni_include_dir") { + include_dirs = [ jni_headers_dir ] +} + if (current_toolchain == default_toolchain) { pool("goma_javac_pool") { # Override action_pool when goma is enabled for javac. diff --git a/build/config/android/abi.gni b/build/config/android/abi.gni index 43c62b1..1a082cf 100644 --- a/build/config/android/abi.gni +++ b/build/config/android/abi.gni @@ -30,8 +30,8 @@ declare_args() { # Build additional browser splits with HWASAN instrumentation enabled. build_hwasan_splits = false - # *For CQ puposes only* Leads to non-working APKs. - # Forces all APKs/bundles to be 64-bit only to improve build speed in the CQ + # This configuration has minimal coverage. + # Forces all APKs/bundles to be 64-bit only to improve build speed # (no need to also build 32-bit library). skip_secondary_abi_for_cq = false } @@ -69,11 +69,17 @@ if (current_cpu == "x86") { # Place holder for mips64 support, not tested. android_abi_target = "mips64el-linux-android" +} else if (current_cpu == "riscv64") { + android_app_abi = "riscv64" + + # Place holder for riscv64 support, not tested. + android_abi_target = "riscv64-linux-android" } else { assert(false, "Unknown Android ABI: " + current_cpu) } -if (target_cpu == "arm64" || target_cpu == "x64" || target_cpu == "mips64el") { +if (target_cpu == "arm64" || target_cpu == "x64" || target_cpu == "mips64el" || + target_cpu == "riscv64") { android_64bit_target_cpu = true } else if (target_cpu == "arm" || target_cpu == "x86" || target_cpu == "mipsel") { @@ -82,8 +88,10 @@ if (target_cpu == "arm64" || target_cpu == "x64" || target_cpu == "mips64el") { assert(false, "Unknown target CPU: $target_cpu") } -# Intentionally do not define android_app_secondary_abi_cpu and -# android_app_secondary_abi for 32-bit target_cpu, since they are not used. +# Do not define android_secondary_abi_cpu or android_app_secondary_abi for +# target_cpu's that are 32-bit-only or 64-bit-only, as they are not used. The +# presence of this variable may be used in conjunction with android_64bit_target_cpu +# to identify target_cpu's that are 32-bit-only or 64-bit-only. if (target_cpu == "arm64") { android_secondary_abi_cpu = "arm" android_app_secondary_abi = "armeabi-v7a" diff --git a/build/config/android/android_nocompile.gni b/build/config/android/android_nocompile.gni index 159ebd5..0b3f517 100644 --- a/build/config/android/android_nocompile.gni +++ b/build/config/android/android_nocompile.gni @@ -1,4 +1,4 @@ -# Copyright 2020 The Chromium Authors. All rights reserved. +# Copyright 2020 The Chromium Authors # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. diff --git a/build/config/android/config.gni b/build/config/android/config.gni index 4732145..0a4ea11 100644 --- a/build/config/android/config.gni +++ b/build/config/android/config.gni @@ -1,15 +1,30 @@ -# Copyright 2014 The Chromium Authors. All rights reserved. +# Copyright 2014 The Chromium Authors # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. # This file contains common system config stuff for the Android build. +# Some arguments that are needed across all builds that import this file, for +# example by is_robolectric. +declare_args() { + # Build incremental targets whenever possible. + # See //build/android/incremental_install/README.md for more details. + incremental_install = false +} + +declare_args() { + # Java debug on Android. Having this on enables multidexing, and turning it + # off will enable proguard. + is_java_debug = is_debug || incremental_install +} + # NOTE: Because Chrome OS builds may depend on targets built with the Android # toolchain, this GNI file may be read and processed from within Chrome OS # toolchains. Checking |is_android| here would therefore be too restrictive. if (is_android || is_chromeos) { import("//build/config/android/channel.gni") import("//build/config/chromecast_build.gni") + import("//build/config/clang/clang.gni") import("//build/config/dcheck_always_on.gni") import("//build_overrides/build.gni") import("abi.gni") @@ -31,25 +46,24 @@ if (is_android || is_chromeos) { } } - has_chrome_android_internal = - exec_script("//build/dir_exists.py", - [ rebase_path("//clank", root_build_dir) ], - "string") == "True" - # We are using a separate declare_args block for only this argument so that # we can decide if we have to pull in definitions from the internal config # early. declare_args() { # Enables using the internal Chrome for Android repository. The default - # value depends on whether the repository is available, and if it's not but - # this argument is manually set to True, the generation will fail. - # The main purpose of this argument is to avoid having to maintain 2 - # repositories to support both public only and internal builds. - enable_chrome_android_internal = has_chrome_android_internal + # is set from gclient vars, with target_os needed for chromeos. + # Can be set to false to disable all internal android things. + enable_chrome_android_internal = + build_with_chromium && checkout_src_internal && target_os == "android" + + # Experimental new flag for the build system to automatically attempt to + # fix missing java deps. This should always be false on bots so they do not + # succeed when there are build errors. Devs can override this in args.gn. + auto_add_missing_java_deps = false # The default to use for android:minSdkVersion for targets that do # not explicitly set it. - default_min_sdk_version = 23 + default_min_sdk_version = 24 # Static analysis can be either "on" or "off" or "build_server". This # controls how android lint, error-prone, bytecode checks are run. This @@ -73,17 +87,9 @@ if (is_android || is_chromeos) { assert(android_static_analysis == "on" || android_static_analysis == "off" || android_static_analysis == "build_server") - declare_args() { - # Android API level for 32 bits platforms - android32_ndk_api_level = default_min_sdk_version - - # Android API level for 64 bits platforms - if (default_min_sdk_version < 21) { - android64_ndk_api_level = 21 - } else { - android64_ndk_api_level = default_min_sdk_version - } - } + # This configuration has not bot coverage and has broken multiple times. + # Warn against it. + assert(!(enable_chrome_android_internal && skip_secondary_abi_for_cq)) if (enable_chrome_android_internal) { import("//clank/config.gni") @@ -96,19 +102,29 @@ if (is_android || is_chromeos) { } if (!defined(default_android_ndk_root)) { - default_android_ndk_root = "//third_party/android_ndk" - default_android_ndk_version = "r23" - default_android_ndk_major_version = 23 + default_android_ndk_root = "//third_party/android_toolchain/ndk" + default_android_ndk_version = "r25c" + default_android_ndk_major_version = 25 } else { assert(defined(default_android_ndk_version)) assert(defined(default_android_ndk_major_version)) } public_android_sdk_root = "//third_party/android_sdk/public" - if (android_sdk_release == "s") { + public_android_sdk_build_tools = + "${public_android_sdk_root}/build-tools/34.0.0" + public_android_sdk_version = "34" + if (android_sdk_release == "u") { + default_android_sdk_root = public_android_sdk_root + default_android_sdk_version = public_android_sdk_version + default_android_sdk_build_tools_version = "34.0.0" + public_android_sdk = true + } + + if (android_sdk_release == "tprivacysandbox") { default_android_sdk_root = public_android_sdk_root - default_android_sdk_version = "31" - default_android_sdk_build_tools_version = "31.0.0" + default_android_sdk_version = "TiramisuPrivacySandbox" + default_android_sdk_build_tools_version = "33.0.0" public_android_sdk = true } @@ -121,7 +137,7 @@ if (is_android || is_chromeos) { # Purposefully repeated so that downstream can change # default_android_sdk_root without changing lint version. default_lint_android_sdk_root = public_android_sdk_root - default_lint_android_sdk_version = 31 + default_lint_android_sdk_version = 34 } if (!defined(default_extras_android_sdk_root)) { @@ -140,31 +156,7 @@ if (is_android || is_chromeos) { # google_play_services_package contains the path where individual client # targets (e.g. google_play_services_base_java) are located. if (!defined(google_play_services_package)) { - if (is_chromecast && chromecast_branding != "public") { - google_play_services_package = "//chromecast/internal/android/prebuilt/google-play-services-first-party" - } else { - google_play_services_package = "//third_party/android_deps" - } - } - - if (!defined(dagger_java_target)) { - dagger_java_target = - "//third_party/android_deps:com_google_dagger_dagger_java" - } - - if (!defined(dagger_annotation_processor_target)) { - dagger_annotation_processor_target = - "//third_party/android_deps:com_google_dagger_dagger_compiler_java" - } - - if (!defined(guava_android_target)) { - guava_android_target = - "//third_party/android_deps:com_google_guava_guava_android_java" - } - - if (!defined(material_design_target)) { - material_design_target = - "//third_party/android_deps:com_google_android_material_material_java" + google_play_services_package = "//third_party/android_deps" } if (!defined(android_protoc_bin)) { @@ -187,6 +179,17 @@ if (is_android || is_chromeos) { android_ndk_version = default_android_ndk_version android_ndk_major_version = default_android_ndk_major_version + # Android API level for 32 bits platforms + android32_ndk_api_level = default_min_sdk_version + + # Android API level for 64 bits platforms + android64_ndk_api_level = default_min_sdk_version + + if (default_min_sdk_version < 21) { + # Android did not support 64 bit before API 21. + android64_ndk_api_level = 21 + } + android_sdk_root = default_android_sdk_root android_sdk_version = default_android_sdk_version android_sdk_build_tools_version = default_android_sdk_build_tools_version @@ -218,20 +221,12 @@ if (is_android || is_chromeos) { # The password for the keystore to use for signing builds. android_keystore_password = default_android_keystore_password - # Java debug on Android. Having this on enables multidexing, and turning it - # off will enable proguard. - is_java_debug = is_debug - # Mark APKs as android:debuggable="true". debuggable_apks = !is_official_build # Set to false to disable the Errorprone compiler. use_errorprone_java_compiler = android_static_analysis != "off" - # Build incremental targets whenever possible. - # See //build/android/incremental_install/README.md for more details. - incremental_install = false - # When true, updates all android_aar_prebuilt() .info files during gn gen. # Refer to android_aar_prebuilt() for more details. update_android_aar_prebuilts = false @@ -257,6 +252,23 @@ if (is_android || is_chromeos) { # support mapping these names. enable_arsc_obfuscation = true + # Controls whether |strip_unused_resources| is respected. Useful when trying + # to analyze APKs using tools that do not support missing resources from + # resources.arsc. + enable_unused_resource_stripping = true + + # Controls whether specifying |art_profile_path| automatically adds a binary + # baseline profile to the APK/AAB. + # Currently disabled while bundletool does not support baseline profiles in + # non-base splits. + enable_baseline_profiles = false + + # Controls whether specifying |art_profile_path| automatically applies it as + # a startup profile to the APK/AAB. + # Currently disabled while R8 causes checkdiscard errors due to + # methods/classes not being inlined correctly. + enable_startup_profiles = false + # The target to use as the system WebView implementation. if (android_64bit_target_cpu && skip_secondary_abi_for_cq) { system_webview_apk_target = "//android_webview:system_webview_64_apk" @@ -283,13 +295,6 @@ if (is_android || is_chromeos) { # Reduce build time by using d8 incremental build. enable_incremental_d8 = true - # Use hashed symbol names to reduce JNI symbol overhead. - use_hashed_jni_names = !is_java_debug - - # Enables Java library desugaring. - # This will cause an extra classes.dex file to appear in every apk. - enable_jdk_library_desugaring = true - # Enables trace event injection on Android views with bytecode rewriting. # This adds an additional step on android_app_bundle_module targets that # adds trace events to some methods in android.view.View subclasses. @@ -297,6 +302,9 @@ if (is_android || is_chromeos) { !is_java_debug && android_channel != "stable" } + assert(!incremental_install || is_java_debug, + "incremental_install=true && is_java_debug=false is not supported.") + # Host stuff ----------------------------------------------------------------- # Defines the name the Android build gives to the current host CPU @@ -348,17 +356,29 @@ if (is_android || is_chromeos) { android_prebuilt_arch = "android-arm64" } else if (current_cpu == "mips64el") { android_prebuilt_arch = "android-mips64" + } else if (current_cpu == "riscv64") { + # Place holder for riscv64 support, not tested. + android_prebuilt_arch = "android-riscv64" } else { assert(false, "Need android libgcc support for your target arch.") } android_toolchain_root = "$android_ndk_root/toolchains/llvm/prebuilt/${android_host_os}-${android_host_arch}" android_ndk_library_path = "$android_toolchain_root/lib64" - android_tool_prefix = "$android_toolchain_root/bin/llvm-" + + # Point to Chromium's LLVM for tooling. + android_tool_prefix = "$clang_base_path/bin/llvm-" android_readelf = "${android_tool_prefix}readobj" android_objcopy = "${android_tool_prefix}objcopy" android_gdbserver = "$android_ndk_root/prebuilt/$android_prebuilt_arch/gdbserver/gdbserver" android_sdk_tools_bundle_aapt2 = "${android_sdk_tools_bundle_aapt2_dir}/aapt2" + + # Actions that use java should add this as an input so that they are rebuilt + # when the JDK changes. + java_path_for_inputs = "//third_party/jdk/current/bin/java.chromium" + + # Toolchain used to create native libraries for robolectric_binary() targets. + robolectric_toolchain = "//build/toolchain/android:robolectric_$host_cpu" } diff --git a/build/config/android/create_unwind_table.gni b/build/config/android/create_unwind_table.gni index 0e553ea..92b7427 100644 --- a/build/config/android/create_unwind_table.gni +++ b/build/config/android/create_unwind_table.gni @@ -1,46 +1,50 @@ -# Copyright 2021 The Chromium Authors. All rights reserved. +# Copyright 2021 The Chromium Authors # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. import("//build/config/android/rules.gni") -template("unwind_table_asset_v2") { - _asset_path = "${target_out_dir}/${target_name}/unwind_cfi_32_v2" - _unwind_action = "${target_name}__create_unwind_table" +unwind_table_asset_v2_filename = "unwind_cfi_32_v2" - action(_unwind_action) { +_dump_syms_target = "//third_party/breakpad:dump_syms($host_toolchain)" +_dump_syms = get_label_info(_dump_syms_target, "root_out_dir") + "/dump_syms" +_readobj_path = "$clang_base_path/bin/llvm-readobj" + +template("unwind_table_v2") { + action(target_name) { forward_variables_from(invoker, TESTONLY_AND_VISIBILITY) + _output_path = + "$target_out_dir/$target_name/$unwind_table_asset_v2_filename" - _root_dir = "$root_out_dir" - if (defined(android_secondary_abi_cpu)) { - _root_dir = get_label_info(":foo($android_secondary_abi_toolchain)", - "root_out_dir") - } + # Strip the "lib" prefix, if present. Add and then remove a space because + # our ownly tool is "replace all". + _library_name = get_label_info(invoker.library_target, "name") + _library_name = + string_replace(string_replace(" $_library_name", " $shlib_prefix", ""), + " ", + "") + _library_path = "$root_out_dir/lib.unstripped/$shlib_prefix$_library_name$shlib_extension" script = "//build/android/gyp/create_unwind_table.py" - outputs = [ _asset_path ] - inputs = [ "${_root_dir}/lib.unstripped/$shlib_prefix${invoker.library_target}$shlib_extension" ] + outputs = [ _output_path ] + inputs = [ + _dump_syms, + _library_path, + ] + deps = [ + _dump_syms_target, + invoker.library_target, + ] args = [ "--input_path", - rebase_path( - "${_root_dir}/lib.unstripped/$shlib_prefix${invoker.library_target}$shlib_extension", - root_build_dir), + rebase_path(_library_path, root_build_dir), "--output_path", - rebase_path(_asset_path, root_build_dir), + rebase_path(_output_path, root_build_dir), "--dump_syms_path", - rebase_path("$root_out_dir/dump_syms", root_build_dir), + rebase_path(_dump_syms, root_build_dir), "--readobj_path", - rebase_path("$clang_base_path/bin/llvm-readobj", root_build_dir), + rebase_path(_readobj_path, root_build_dir), ] - deps = invoker.deps - deps += [ "//third_party/breakpad:dump_syms" ] - } - - android_assets(target_name) { - forward_variables_from(invoker, TESTONLY_AND_VISIBILITY) - sources = [ _asset_path ] - disable_compression = true - deps = [ ":$_unwind_action" ] } } diff --git a/build/config/android/internal_rules.gni b/build/config/android/internal_rules.gni index 93d1ce9..d6bcf85 100644 --- a/build/config/android/internal_rules.gni +++ b/build/config/android/internal_rules.gni @@ -1,11 +1,11 @@ -# Copyright 2014 The Chromium Authors. All rights reserved. +# Copyright 2014 The Chromium Authors # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. # Do not add any imports to non-//build directories here. # Some projects (e.g. V8) do not have non-build directories DEPS'ed in. +import("//build/config/android/channel.gni") import("//build/config/android/config.gni") -import("//build/config/android/copy_ex.gni") import("//build/config/compiler/compiler.gni") import("//build/config/compute_inputs_for_analyze.gni") import("//build/config/coverage/coverage.gni") @@ -20,6 +20,16 @@ if (current_toolchain == default_toolchain) { } assert(is_android) +default_android_sdk_dep = "//third_party/android_sdk:android_sdk_java" +_kotlin_stdlib_dep = "//third_party/kotlin_stdlib:kotlin_stdlib_java" +_jacoco_dep = "//third_party/jacoco:jacocoagent_java" +_jacoco_host_jar = + "$root_build_dir/lib.java/third_party/jacoco/jacocoagent_java.jar" +_robolectric_libs_dir = + rebase_path( + get_label_info("//:foo($robolectric_toolchain)", "root_out_dir"), + root_build_dir) + # The following _java_*_types variables capture all the existing target types. # If a new type is introduced, please add it to one of these categories, # preferring the more specific resource/library types. @@ -43,48 +53,58 @@ _java_leaf_types = [ "dist_jar", "java_annotation_processor", "java_binary", - "junit_binary", + "robolectric_binary", ] # All _java_resource_types targets must conform to these patterns. -_java_resource_patterns = [ - "*:*_assets", +java_resource_patterns = [ + "*_assets", + "*_grd", + "*_java_strings", + "*locale_paks", + "*_resources", + "*strings_java", "*android*:assets", "*:*_apk_*resources", "*android*:resources", - "*:*_resources", - "*:*_grd", - "*:*locale_paks", - "*:*_java_strings", - "*:*strings_java", ] # All _java_library_types targets must conform to these patterns. This includes # all non-leaf targets that use java_library_impl. -_java_library_patterns = [ - "*:*_java", - "*:*_javalib", - "*:*_java_*", # e.g. chrome_java_test_support +java_library_patterns = [ + "*_java", + "*_javalib", + "*javatests", + "*_bundle_module", + "*:*_java_*", # E.g. chrome_java_test_support "*:java", + "*/java", # to allow filtering without expanding labels //a/java -> + # //a/java:java "*:junit", + "*/junit", "*:junit_*", "*:*_junit_*", - "*:*javatests", - "*:*_bundle_module", - # TODO(agrieve): Rename targets below to match above patterns. + # TODO(agrieve): Rename to glue_java + "//android_webview/glue", "//android_webview/glue:glue", ] # These identify all non-leaf targets that have .build_config.json files. This is the # set of patterns that other targets can use to filter out java targets. -java_target_patterns = _java_library_patterns + _java_resource_patterns +java_target_patterns = java_library_patterns + java_resource_patterns _r8_path = "//third_party/r8/lib/r8.jar" + +# This duplication is intentional, so we avoid updating the r8.jar used by +# dexing unless necessary, since each update invalidates all incremental dexing +# and unnecessarily slows down all bots. +_d8_path = "//third_party/r8/d8/lib/r8.jar" _custom_d8_path = "//third_party/r8/custom_d8.jar" -_desugar_jdk_libs_json = "//third_party/r8/desugar_jdk_libs.json" -_desugar_jdk_libs_jar = "//third_party/android_deps/libs/com_android_tools_desugar_jdk_libs/desugar_jdk_libs-1.1.5.jar" -_desugar_jdk_libs_configuration_jar = "//third_party/android_deps/libs/com_android_tools_desugar_jdk_libs_configuration/desugar_jdk_libs_configuration-1.1.5.jar" +_default_lint_jar_path = "//third_party/android_build_tools/lint/lint.jar" +_custom_lint_jar_path = "//third_party/android_build_tools/lint/custom_lint.jar" +_manifest_merger_jar_path = + "//third_party/android_build_tools/manifest_merger/manifest-merger.jar" # Put the bug number in the target name so that false-positives have a hint in # the error message about why non-existent dependencies are there. @@ -105,16 +125,15 @@ template("write_build_config") { _target_label = get_label_info(":${_parent_invoker.target_name}", "label_no_toolchain") - # Ensure targets match naming patterns so that __assetres, __header, __impl - # targets work properly. Those generated targets allow for effective deps - # filtering. + # Ensure targets match naming patterns so that __assetres, __header, __host, + # and __validate targets work properly. if (filter_exclude([ _type ], _java_resource_types) == []) { - if (filter_exclude([ _target_label ], _java_resource_patterns) != []) { + if (filter_exclude([ _target_label ], java_resource_patterns) != []) { assert(false, "Invalid java resource target name: $_target_label") } } else if (filter_exclude([ _type ], _java_library_types) == []) { - if (filter_exclude([ _target_label ], _java_library_patterns) != [] || - filter_exclude([ _target_label ], _java_resource_patterns) == []) { + if (filter_exclude([ _target_label ], java_library_patterns) != [] || + filter_exclude([ _target_label ], java_resource_patterns) == []) { assert(false, "Invalid java library target name: $_target_label") } } else if (_type == "group") { @@ -152,8 +171,6 @@ template("write_build_config") { foreach(_possible_dep, invoker.possible_config_deps) { _dep_label = get_label_info(_possible_dep, "label_no_toolchain") if (filter_exclude([ _dep_label ], java_target_patterns) == []) { - # Put the bug number in the target name so that false-positives - # have a hint in the error message about non-existent dependencies. deps += [ "$_dep_label$build_config_target_suffix" ] _dep_gen_dir = get_label_info(_possible_dep, "target_gen_dir") _dep_name = get_label_info(_possible_dep, "name") @@ -167,18 +184,28 @@ template("write_build_config") { if (defined(invoker.possible_config_public_deps)) { foreach(_possible_dep, invoker.possible_config_public_deps) { _dep_label = get_label_info(_possible_dep, "label_no_toolchain") - if (filter_exclude([ _dep_label ], java_target_patterns) == []) { - # Put the bug number in the target name so that false-positives - # have a hint in the error message about non-existent dependencies. - deps += [ "$_dep_label$build_config_target_suffix" ] - _dep_gen_dir = get_label_info(_possible_dep, "target_gen_dir") - _dep_name = get_label_info(_possible_dep, "name") - _dep_config = "$_dep_gen_dir/$_dep_name.build_config.json" - _public_deps_configs += [ _dep_config ] - } + # E.g. Adding an action that generates a .java file that is then + # consumed by a subsequent java_library() target would not work + # because the libraries depend only on the nested targets of one + # another. It is simplest to just ban non-java public_deps. + assert(filter_exclude([ _dep_label ], java_target_patterns) == [], + "Only java_library targets can be used as public_deps. " + + "Found:\n${_dep_label}\non Target:\n" + + get_label_info(":$target_name", "label_no_toolchain")) + + # Put the bug number in the target name so that false-positives + # have a hint in the error message about non-existent dependencies. + deps += [ "$_dep_label$build_config_target_suffix" ] + _dep_gen_dir = get_label_info(_possible_dep, "target_gen_dir") + _dep_name = get_label_info(_possible_dep, "name") + _dep_config = "$_dep_gen_dir/$_dep_name.build_config.json" + + _public_deps_configs += [ _dep_config ] } } + inputs += _deps_configs + inputs += _public_deps_configs _rebased_deps_configs = rebase_path(_deps_configs, root_build_dir) _rebased_public_deps_configs = rebase_path(_public_deps_configs, root_build_dir) @@ -195,6 +222,10 @@ template("write_build_config") { _target_label, ] + if (defined(invoker.preferred_dep) && invoker.preferred_dep) { + args += [ "--preferred-dep" ] + } + if (defined(invoker.aar_path)) { args += [ "--aar-path", @@ -231,6 +262,12 @@ template("write_build_config") { rebase_path(invoker.ijar_path, root_build_dir), ] } + if (defined(invoker.kotlinc_jar_path)) { + args += [ + "--kotlinc-jar-path", + rebase_path(invoker.kotlinc_jar_path, root_build_dir), + ] + } if (defined(invoker.java_resources_jar)) { args += [ "--java-resources-jar-path", @@ -240,15 +277,16 @@ template("write_build_config") { if (defined(invoker.annotation_processor_deps) && invoker.annotation_processor_deps != []) { _processor_configs = [] - foreach(_processor_dep, invoker.annotation_processor_deps) { - _dep_label = get_label_info(_processor_dep, "label_no_toolchain") - _dep_gen_dir = get_label_info(_processor_dep, "target_gen_dir") - _dep_name = get_label_info(_processor_dep, "name") + foreach(_dep_label, invoker.annotation_processor_deps) { deps += [ "$_dep_label$build_config_target_suffix" ] - _processor_configs += [ "$_dep_gen_dir/$_dep_name.build_config.json" ] + _dep_gen_dir = get_label_info(_dep_label, "target_gen_dir") + _dep_name = get_label_info(_dep_label, "name") + _dep_config = "$_dep_gen_dir/$_dep_name.build_config.json" + _processor_configs += [ _dep_config ] } _rebased_processor_configs = rebase_path(_processor_configs, root_build_dir) + inputs += _processor_configs args += [ "--annotation-processor-configs=$_rebased_processor_configs" ] } @@ -280,17 +318,20 @@ template("write_build_config") { invoker.bypass_platform_checks) { args += [ "--bypass-platform-checks" ] } + if (defined(invoker.is_robolectric) && invoker.is_robolectric) { + args += [ "--is-robolectric" ] + } if (defined(invoker.apk_under_test)) { - deps += [ "${invoker.apk_under_test}$build_config_target_suffix" ] - apk_under_test_gen_dir = - get_label_info(invoker.apk_under_test, "target_gen_dir") - apk_under_test_name = get_label_info(invoker.apk_under_test, "name") - apk_under_test_config = - "$apk_under_test_gen_dir/$apk_under_test_name.build_config.json" + _dep_label = invoker.apk_under_test + _dep_gen_dir = get_label_info(_dep_label, "target_gen_dir") + _dep_name = get_label_info(_dep_label, "name") + _dep_config = "$_dep_gen_dir/$_dep_name.build_config.json" + inputs += [ _dep_config ] + deps += [ "$_dep_label$build_config_target_suffix" ] args += [ "--tested-apk-config", - rebase_path(apk_under_test_config, root_build_dir), + rebase_path(_dep_config, root_build_dir), ] } @@ -394,10 +435,6 @@ template("write_build_config") { ] } - if (defined(invoker.is_base_module) && invoker.is_base_module) { - args += [ "--is-base-module" ] - } - if (defined(invoker.loadable_modules)) { _rebased_loadable_modules = rebase_path(invoker.loadable_modules, root_build_dir) @@ -432,19 +469,10 @@ template("write_build_config") { args += [ "--secondary-native-lib-placeholders=${invoker.secondary_native_lib_placeholders}" ] } - if (defined(invoker.uncompress_shared_libraries) && - invoker.uncompress_shared_libraries) { - args += [ "--uncompress-shared-libraries" ] - } - if (defined(invoker.library_always_compress)) { args += [ "--library-always-compress=${invoker.library_always_compress}" ] } - if (defined(invoker.library_renames)) { - args += [ "--library-renames=${invoker.library_renames}" ] - } - if (defined(invoker.apk_path)) { # TODO(tiborg): Remove APK path from build config and use # install_artifacts from metadata instead. @@ -462,10 +490,10 @@ template("write_build_config") { } } - if (defined(invoker.java_sources_file)) { + if (defined(invoker.target_sources_file)) { args += [ - "--java-sources-file", - rebase_path(invoker.java_sources_file, root_build_dir), + "--target-sources-file", + rebase_path(invoker.target_sources_file, root_build_dir), ] } if (defined(invoker.srcjar)) { @@ -508,20 +536,6 @@ template("write_build_config") { rebase_path(invoker.proguard_configs, root_build_dir) args += [ "--proguard-configs=$_rebased_proguard_configs" ] } - if (defined(invoker.static_library_dependent_targets)) { - _dependent_configs = [] - foreach(_dep, invoker.static_library_dependent_targets) { - _dep_name = _dep.name - _dep_label = get_label_info(_dep_name, "label_no_toolchain") - deps += [ "$_dep_label$build_config_target_suffix" ] - _dep_gen_dir = get_label_info(_dep_name, "target_gen_dir") - _dep_name = get_label_info(_dep_name, "name") - _config = rebase_path("$_dep_gen_dir/$_dep_name.build_config.json", - root_build_dir) - _dependent_configs += [ _config ] - } - args += [ "--static-library-dependent-configs=$_dependent_configs" ] - } if (defined(invoker.gradle_treat_as_prebuilt) && invoker.gradle_treat_as_prebuilt) { args += [ "--gradle-treat-as-prebuilt" ] @@ -533,18 +547,42 @@ template("write_build_config") { ] } if (defined(invoker.base_module_target)) { - _base_label = - get_label_info(invoker.base_module_target, "label_no_toolchain") - _dep_gen_dir = get_label_info(_base_label, "target_gen_dir") - _dep_name = get_label_info(_base_label, "name") - deps += [ "$_base_label$build_config_target_suffix" ] - _base_module_build_config = "$_dep_gen_dir/$_dep_name.build_config.json" - inputs += [ _base_module_build_config ] + _dep_label = invoker.base_module_target + _dep_gen_dir = get_label_info(_dep_label, "target_gen_dir") + _dep_name = get_label_info(_dep_label, "name") + _dep_config = "$_dep_gen_dir/$_dep_name.build_config.json" + deps += [ "$_dep_label$build_config_target_suffix" ] + inputs += [ _dep_config ] args += [ "--base-module-build-config", - rebase_path(_base_module_build_config, root_build_dir), + rebase_path(_dep_config, root_build_dir), + ] + } + if (defined(invoker.parent_module_target)) { + _dep_label = invoker.parent_module_target + _dep_gen_dir = get_label_info(_dep_label, "target_gen_dir") + _dep_name = get_label_info(_dep_label, "name") + _dep_config = "$_dep_gen_dir/$_dep_name.build_config.json" + deps += [ "$_dep_label$build_config_target_suffix" ] + inputs += [ _dep_config ] + args += [ + "--parent-module-build-config", + rebase_path(_dep_config, root_build_dir), ] } + if (defined(invoker.module_name)) { + args += [ + "--module-name", + invoker.module_name, + ] + } + if (defined(invoker.modules)) { + foreach(_module, invoker.modules) { + if (defined(_module.uses_split)) { + args += [ "--uses-split=${_module.name}:${_module.uses_split}" ] + } + } + } if (defined(invoker.module_build_configs)) { inputs += invoker.module_build_configs _rebased_configs = @@ -553,8 +591,6 @@ template("write_build_config") { } if (defined(invoker.add_view_trace_events) && invoker.add_view_trace_events) { - args += [ "--add-view-trace-events" ] - # Adding trace events involves rewriting bytecode and generating a new set # of jar files. In order to avoid conflicts between bundles we save the # new jars in a bundle specific gen/ directory. The build config for the @@ -563,24 +599,22 @@ template("write_build_config") { # We use the base module's target_gen_dir because non-base modules and the # app bundle targets have a reference to it (base_module_target). if (_type == "android_app_bundle") { - _base_module_target_name = + _trace_events_target_name = get_label_info(_parent_invoker.base_module_target, "name") - _base_module_gen_dir = - get_label_info(_base_module_target_name, "target_gen_dir") + } else if (defined(invoker.base_module_target)) { + _trace_events_target_name = + get_label_info(invoker.base_module_target, "name") } else { - if (defined(invoker.base_module_target)) { - _base_module_name = get_label_info(invoker.base_module_target, "name") - _base_module_gen_dir = - get_label_info(_base_module_name, "target_gen_dir") - } else { - _grandparent_invoker = _parent_invoker.invoker - _base_module_gen_dir = - get_label_info(_grandparent_invoker.target_name, "target_gen_dir") - } + _grandparent_invoker = _parent_invoker.invoker + _trace_events_target_name = _grandparent_invoker.target_name } + + # FIXME: This should likely be using the base module's target_out_dir + # rather than the current target's. args += [ - "--base-module-gen-dir", - rebase_path(_base_module_gen_dir, root_build_dir), + "--trace-events-jar-dir", + rebase_path("$target_out_dir/$_trace_events_target_name", + root_build_dir), ] } if (defined(invoker.version_name)) { @@ -638,22 +672,6 @@ template("generate_android_wrapper") { template("generate_r_java") { action_with_pydeps(target_name) { forward_variables_from(invoker, TESTONLY_AND_VISIBILITY + [ "deps" ]) - if (!defined(deps)) { - deps = [] - } - if (defined(invoker.possible_resource_deps)) { - foreach(_dep, invoker.possible_resource_deps) { - _target_label = get_label_info(_dep, "label_no_toolchain") - if (filter_exclude([ _target_label ], _java_library_patterns) == [] && - filter_exclude([ _target_label ], _java_resource_patterns) != []) { - # Depend on the java libraries' transitive __assetres target instead. - # This is required to ensure depending on java_groups works. - deps += [ "${_target_label}__assetres" ] - } else { - deps += [ _dep ] - } - } - } depfile = "$target_gen_dir/${invoker.target_name}.d" inputs = [ invoker.build_config ] outputs = [ invoker.srcjar_path ] @@ -676,6 +694,7 @@ template("test_runner_script") { testonly = true _test_name = invoker.test_name _test_type = invoker.test_type + _is_unit_test = defined(invoker.is_unit_test) && invoker.is_unit_test _incremental_apk = defined(invoker.incremental_apk) && invoker.incremental_apk _runtime_deps = @@ -709,7 +728,8 @@ template("test_runner_script") { if (defined(invoker.apk_under_test)) { _install_artifacts_json = "${target_gen_dir}/${target_name}.install_artifacts" - generated_file("${target_name}__install_artifacts") { + _install_artifacts_target_name = "${target_name}__install_artifacts" + generated_file(_install_artifacts_target_name) { deps = [ invoker.apk_under_test ] output_conversion = "json" outputs = [ _install_artifacts_json ] @@ -720,12 +740,19 @@ template("test_runner_script") { } generate_android_wrapper(target_name) { + forward_variables_from(invoker, + [ + "assert_no_deps", + "metadata", + "public_deps", + "visibility", + ]) wrapper_script = "$root_build_dir/bin/run_${_test_name}" executable = "//testing/test_env.py" - if (defined(android_test_runner_script)) { - _runner_script = android_test_runner_script + if (defined(invoker.android_test_runner_script)) { + _runner_script = invoker.android_test_runner_script } else { _runner_script = "//build/android/test_runner.py" } @@ -735,9 +762,12 @@ template("test_runner_script") { deps = invoker.deps } data_deps = [ - "//build/android:test_runner_py", + "//build/android:test_runner_core_py", "//testing:test_scripts_shared", ] + if (_test_type != "junit") { + data_deps += [ "//build/android:test_runner_device_support" ] + } if (defined(invoker.data_deps)) { data_deps += invoker.data_deps } @@ -751,8 +781,13 @@ template("test_runner_script") { _test_type, "--output-directory", "@WrappedPath(.)", + "--wrapper-script-args", ] + if (_is_unit_test) { + executable_args += [ "--is-unit-test" ] + } + if (_runtime_deps) { deps += [ ":$_runtime_deps_target" ] data += [ _runtime_deps_file ] @@ -808,12 +843,9 @@ template("test_runner_script") { if (_incremental_apk) { _test_apk = "@WrappedPath(@FileArg($_rebased_apk_build_config:deps_info:incremental_apk_path))" } - _rebased_test_jar = rebase_path(invoker.test_jar, root_build_dir) executable_args += [ "--test-apk", _test_apk, - "--test-jar", - "@WrappedPath(${_rebased_test_jar})", ] if (defined(invoker.apk_under_test)) { if (_incremental_apk) { @@ -826,7 +858,7 @@ template("test_runner_script") { rebase_path(_apk_under_test_build_config, root_build_dir) _apk_under_test = "@WrappedPath(@FileArg($_rebased_apk_under_test_build_config:deps_info:incremental_apk_path))" } else { - deps += [ ":${target_name}__install_artifacts" ] + deps += [ ":${_install_artifacts_target_name}" ] _rebased_install_artifacts_json = rebase_path(_install_artifacts_json, root_build_dir) _apk_under_test = @@ -878,11 +910,14 @@ template("test_runner_script") { executable_args += [ "--test-suite", invoker.test_suite, + "--native-libs-dir", + "@WrappedPath($_robolectric_libs_dir)", ] + # Test runner uses this generated wrapper script. + data += [ "$root_build_dir/bin/helper/${invoker.test_suite}" ] + deps += [ ":${invoker.test_suite}$build_config_target_suffix" ] - _junit_binary_build_config = - "${target_gen_dir}/${invoker.test_suite}.build_config.json" _rebased_robolectric_runtime_deps_dir = rebase_path("//third_party/robolectric/lib", root_build_dir) @@ -912,6 +947,13 @@ template("test_runner_script") { assert(false, "Invalid test type: $_test_type.") } + # Devil does not reliably work with component builds of its tools. + # There's no benefit to them, so fall back to prebuilts for component builds. + # https://crbug.com/1404180 + if (_test_type != "junit" && !is_component_build) { + executable_args += [ "--use-local-devil-tools" ] + } + if (defined(invoker.additional_apks)) { foreach(additional_apk, invoker.additional_apks) { deps += [ "$additional_apk$build_config_target_suffix" ] @@ -982,9 +1024,6 @@ if (enable_java_templates) { template("android_lint") { action_with_pydeps(target_name) { forward_variables_from(invoker, TESTONLY_AND_VISIBILITY) - if (!defined(deps)) { - deps = [] - } # https://crbug.com/1098752 Fix for bot OOM (https://crbug.com/1098333). if (defined(java_cmd_pool_size)) { @@ -996,22 +1035,23 @@ if (enable_java_templates) { # Lint requires generated sources and generated resources from the build. # Turbine __header targets depend on all generated sources, and the # __assetres targets depend on all generated resources. + deps = [] if (defined(invoker.deps)) { - foreach(_dep, invoker.deps) { - _target_label = get_label_info(_dep, "label_no_toolchain") - if (filter_exclude([ _target_label ], _java_library_patterns) == [] && - filter_exclude([ _target_label ], _java_resource_patterns) != - []) { - deps += [ - "${_target_label}__assetres", - "${_target_label}__header", - ] - } else { - # Keep non-java deps as they may generate files used only by lint. - # e.g. generated suppressions.xml files. - deps += [ _dep ] - } + _lib_deps = + filter_exclude(filter_include(invoker.deps, java_library_patterns), + java_resource_patterns) + foreach(_lib_dep, _lib_deps) { + # Expand //foo/java -> //foo/java:java + _lib_dep = get_label_info(_lib_dep, "label_no_toolchain") + deps += [ + "${_lib_dep}__assetres", + "${_lib_dep}__header", + ] } + + # Keep non-java deps as they may generate files used only by lint. + # e.g. generated suppressions.xml files. + deps += filter_exclude(invoker.deps, _lib_deps) } if (defined(invoker.min_sdk_version)) { @@ -1020,7 +1060,12 @@ if (enable_java_templates) { _min_sdk_version = default_min_sdk_version } - _lint_binary_path = "$lint_android_sdk_root/cmdline-tools/latest/bin/lint" + if (defined(invoker.lint_jar_path)) { + _lint_jar_path = invoker.lint_jar_path + } else { + _lint_jar_path = _default_lint_jar_path + } + _cache_dir = "$root_build_dir/android_lint_cache" # Save generated xml files in a consistent location for debugging. @@ -1030,7 +1075,9 @@ if (enable_java_templates) { script = "//build/android/gyp/lint.py" depfile = "$target_gen_dir/$target_name.d" inputs = [ - _lint_binary_path, + java_path_for_inputs, + _lint_jar_path, + _custom_lint_jar_path, _backported_methods, ] @@ -1039,8 +1086,10 @@ if (enable_java_templates) { get_label_info(":${target_name}", "label_no_toolchain"), "--depfile", rebase_path(depfile, root_build_dir), - "--lint-binary-path", - rebase_path(_lint_binary_path, root_build_dir), + "--lint-jar-path", + rebase_path(_lint_jar_path, root_build_dir), + "--custom-lint-jar-path", + rebase_path(_custom_lint_jar_path, root_build_dir), "--cache-dir", rebase_path(_cache_dir, root_build_dir), "--lint-gen-dir", @@ -1119,7 +1168,7 @@ if (enable_java_templates) { # Lint requires all source and all resource files to be passed in the # same invocation for checks like UnusedResources. - "--java-sources=@FileArg($_rebased_build_config:deps_info:lint_java_sources)", + "--sources=@FileArg($_rebased_build_config:deps_info:lint_sources)", "--aars=@FileArg($_rebased_build_config:deps_info:lint_aars)", "--srcjars=@FileArg($_rebased_build_config:deps_info:lint_srcjars)", "--resource-sources=@FileArg($_rebased_build_config:deps_info:lint_resource_sources)", @@ -1139,16 +1188,12 @@ if (enable_java_templates) { } template("proguard") { - forward_variables_from(invoker, - TESTONLY_AND_VISIBILITY + [ - "data", - "data_deps", - "public_deps", - ]) + forward_variables_from(invoker, TESTONLY_AND_VISIBILITY) _script = "//build/android/gyp/proguard.py" _deps = invoker.deps _inputs = [ + java_path_for_inputs, invoker.build_config, _r8_path, ] @@ -1161,13 +1206,25 @@ if (enable_java_templates) { _mapping_path = "${invoker.output_path}.mapping" } - _enable_jdk_library_desugaring = enable_jdk_library_desugaring - if (defined(invoker.supports_jdk_library_desugaring) && - !invoker.supports_jdk_library_desugaring) { - _enable_jdk_library_desugaring = false + _rebased_build_config = rebase_path(invoker.build_config, root_build_dir) + + # This is generally the apk name, and serves to identify the mapping + # file that would be required to deobfuscate a stacktrace. + _mapping_basename = get_path_info(_mapping_path, "name") + _version_code = "@FileArg($_rebased_build_config:deps_info:version_code)" + _package_name = "@FileArg($_rebased_build_config:deps_info:package_name)" + if (defined(invoker.package_name)) { + _package_name = invoker.package_name + } + if (defined(invoker.version_code)) { + _version_code = invoker.version_code } - _rebased_build_config = rebase_path(invoker.build_config, root_build_dir) + # The Mapping ID is parsed to when uploading mapping files. + # See: https://crbug.com/1417308 + _source_file_template = + "chromium-$_mapping_basename-$android_channel-$_version_code" + _args = [ "--mapping-output", rebase_path(_mapping_path, root_build_dir), @@ -1177,33 +1234,20 @@ if (enable_java_templates) { "@FileArg($_rebased_build_config:android:sdk_jars)", "--r8-path", rebase_path(_r8_path, root_build_dir), + "--package-name=$_package_name", + "--source-file", + _source_file_template, ] if (treat_warnings_as_errors) { _args += [ "--warnings-as-errors" ] } - if (defined(invoker.desugar_jars_paths)) { - _rebased_desugar_jars_paths = - rebase_path(invoker.desugar_jars_paths, root_build_dir) - args += [ "--classpath=${_rebased_desugar_jars_paths}" ] - } if ((!defined(invoker.proguard_enable_obfuscation) || invoker.proguard_enable_obfuscation) && enable_proguard_obfuscation) { - _proguard_sourcefile_suffix = "" - if (defined(invoker.proguard_sourcefile_suffix)) { - _proguard_sourcefile_suffix = "-${invoker.proguard_sourcefile_suffix}" - } - - # This is generally the apk name, and serves to identify the mapping - # file that would be required to deobfuscate a stacktrace. - _mapping_id = get_path_info(_mapping_path, "name") - _args += [ - "--enable-obfuscation", - "--sourcefile", - "chromium-${_mapping_id}${_proguard_sourcefile_suffix}", - ] - } else if (defined(invoker.proguard_sourcefile_suffix)) { - not_needed(invoker, [ "proguard_sourcefile_suffix" ]) + _args += [ "--enable-obfuscation" ] + } + if (defined(invoker.repackage_classes)) { + _args += [ "--repackage-classes=" + invoker.repackage_classes ] } if (defined(invoker.modules)) { @@ -1215,11 +1259,13 @@ if (enable_java_templates) { "--dex-dest=@FileArg($_rebased_module_build_config:final_dex:path)", ] + # The bundle's build config has the correct classpaths - the individual + # modules' build configs may double-use some jars. if (defined(invoker.add_view_trace_events) && invoker.add_view_trace_events) { - _args += [ "--feature-jars=@FileArg($_rebased_module_build_config:deps_info:trace_event_rewritten_device_classpath)" ] + _args += [ "--feature-jars=@FileArg($_rebased_build_config:modules:${_feature_module.name}:trace_event_rewritten_device_classpath)" ] } else { - _args += [ "--feature-jars=@FileArg($_rebased_module_build_config:deps_info:device_classpath)" ] + _args += [ "--feature-jars=@FileArg($_rebased_build_config:modules:${_feature_module.name}:device_classpath)" ] } if (defined(_feature_module.uses_split)) { @@ -1245,43 +1291,26 @@ if (enable_java_templates) { } _outputs += [ _mapping_path ] + if (defined(invoker.input_art_profile)) { + _inputs += [ invoker.input_art_profile ] + _args += [ "--input-art-profile=" + + rebase_path(invoker.input_art_profile, root_build_dir) ] + if (defined(invoker.output_art_profile)) { + _outputs += [ invoker.output_art_profile ] + _args += [ "--output-art-profile=" + + rebase_path(invoker.output_art_profile, root_build_dir) ] + } + if (defined(invoker.enable_startup_profile) && + invoker.enable_startup_profile) { + _args += [ "--apply-startup-profile" ] + } + } + if (defined(invoker.enable_proguard_checks) && !invoker.enable_proguard_checks) { _args += [ "--disable-checks" ] } - if (defined(invoker.is_static_library) && invoker.is_static_library) { - _args += [ - "--extra-mapping-output-paths", - "@FileArg($_rebased_build_config:deps_info:static_library_proguard_mapping_output_paths)", - ] - } - - if (_enable_jdk_library_desugaring) { - _args += [ - "--desugar-jdk-libs-json", - rebase_path(_desugar_jdk_libs_json, root_build_dir), - ] - _inputs += [ _desugar_jdk_libs_json ] - - _args += [ - "--desugar-jdk-libs-jar", - rebase_path(_desugar_jdk_libs_jar, root_build_dir), - "--desugar-jdk-libs-configuration-jar", - rebase_path(_desugar_jdk_libs_configuration_jar, root_build_dir), - ] - _inputs += [ - _desugar_jdk_libs_jar, - _desugar_jdk_libs_configuration_jar, - ] - - _desugared_library_keep_rule_output_path = - "$target_gen_dir/$target_name.desugared_library_keep_rules.flags" - _args += [ - "--desugared-library-keep-rule-output", - rebase_path(_desugared_library_keep_rule_output_path, root_build_dir), - ] - } _ignore_desugar_missing_deps = defined(invoker.ignore_desugar_missing_deps) && invoker.ignore_desugar_missing_deps @@ -1289,7 +1318,12 @@ if (enable_java_templates) { _args += [ "--show-desugar-default-interface-warnings" ] } - if (enable_java_asserts) { + if (defined(invoker.custom_assertion_handler)) { + _args += [ + "--assertion-handler", + invoker.custom_assertion_handler, + ] + } else if (enable_java_asserts) { # The default for generating dex file format is # --force-disable-assertions. _args += [ "--force-enable-assertions" ] @@ -1346,6 +1380,12 @@ if (enable_java_templates) { _deps += [ ":$_expectations_target" ] } action_with_pydeps(target_name) { + forward_variables_from(invoker, + [ + "data", + "data_deps", + "public_deps", + ]) script = _script deps = _deps inputs = _inputs @@ -1376,11 +1416,16 @@ if (enable_java_templates) { # template("java_binary_script") { action_with_pydeps(target_name) { - forward_variables_from(invoker, TESTONLY_AND_VISIBILITY + [ "deps" ]) + forward_variables_from(invoker, TESTONLY_AND_VISIBILITY) _main_class = invoker.main_class _build_config = invoker.build_config _script_name = invoker.script_name + if (defined(invoker.max_heap_size)) { + _max_heap_size = invoker.max_heap_size + } else { + _max_heap_size = "1G" + } script = "//build/android/gyp/create_java_binary_script.py" inputs = [ _build_config ] @@ -1392,25 +1437,32 @@ if (enable_java_templates) { rebase_path(_java_script, root_build_dir), "--main-class", _main_class, - ] - args += [ "--classpath=@FileArg($_rebased_build_config:deps_info:host_classpath)", + "--max-heap-size=$_max_heap_size", ] + data = [] + deps = [ "//third_party/jdk:java_data" ] + if (defined(invoker.deps)) { + deps += invoker.deps + } if (use_jacoco_coverage) { args += [ "--classpath", - rebase_path("//third_party/jacoco/lib/jacocoagent.jar", - root_build_dir), + rebase_path(_jacoco_host_jar, root_build_dir), ] - } - if (use_jacoco_coverage || !treat_warnings_as_errors) { - args += [ "--noverify" ] + data += [ _jacoco_host_jar ] } if (defined(invoker.tiered_stop_at_level_one) && invoker.tiered_stop_at_level_one) { args += [ "--tiered-stop-at-level-one" ] } + if (defined(invoker.extra_classpath_jars)) { + _rebased_extra_classpath_jars = + rebase_path(invoker.extra_classpath_jars, root_build_dir) + args += [ "--classpath=${_rebased_extra_classpath_jars}" ] + data += invoker.extra_classpath_jars + } if (defined(invoker.wrapper_script_args)) { args += [ "--" ] + invoker.wrapper_script_args } @@ -1457,6 +1509,10 @@ if (enable_java_templates) { assert(!(defined(invoker.apply_mapping) && !_proguard_enabled), "apply_mapping can only be specified if proguard is enabled.") + if (defined(invoker.custom_assertion_handler)) { + assert(_proguard_enabled, + "Proguard is required to support the custom assertion handler.") + } if (_enable_main_dex_list) { _main_dex_rules = "//build/android/main_dex_classes.flags" @@ -1473,35 +1529,42 @@ if (enable_java_templates) { forward_variables_from(invoker, TESTONLY_AND_VISIBILITY + [ "add_view_trace_events", + "input_art_profile", + "output_art_profile", + "enable_startup_profile", "build_config", + "custom_assertion_handler", "data", "data_deps", "deps", - "desugar_jars_paths", "enable_proguard_checks", "expected_proguard_config", "expected_proguard_config_base", "ignore_desugar_missing_deps", - "is_static_library", "modules", + "package_name", "proguard_enable_obfuscation", "proguard_mapping_path", "proguard_sourcefile_suffix", - "supports_jdk_library_desugaring", + "repackage_classes", "top_target_name", + "version_code", ]) + args = [ + "--proguard-configs=@FileArg($_rebased_build_config:deps_info:proguard_all_configs)", + "--min-api=$_min_sdk_version", + ] inputs = [] if (defined(invoker.inputs)) { inputs += invoker.inputs } if (defined(invoker.proguard_configs)) { inputs += invoker.proguard_configs + _rebased_proguard_configs = + rebase_path(invoker.proguard_configs, root_build_dir) + args += [ "--proguard-configs=$_rebased_proguard_configs" ] } - args = [ - "--proguard-configs=@FileArg($_rebased_build_config:deps_info:proguard_all_configs)", - "--min-api=$_min_sdk_version", - ] if (defined(invoker.has_apk_under_test) && invoker.has_apk_under_test) { args += [ "--input-paths=@FileArg($_rebased_build_config:deps_info:device_classpath_extended)" ] } else if (defined(invoker.add_view_trace_events) && @@ -1544,6 +1607,8 @@ if (enable_java_templates) { } } else { # !_proguard_enabled _is_library = defined(invoker.is_library) && invoker.is_library + assert(!(defined(invoker.input_classes_filearg) && _is_library)) + assert(_is_library == defined(invoker.unprocessed_jar_path)) _input_class_jars = [] if (defined(invoker.input_class_jars)) { _input_class_jars = invoker.input_class_jars @@ -1566,9 +1631,13 @@ if (enable_java_templates) { depfile = "$target_gen_dir/$target_name.d" outputs = [ invoker.output ] inputs = [ - _r8_path, + java_path_for_inputs, + _d8_path, _custom_d8_path, ] + if (defined(invoker.inputs)) { + inputs += invoker.inputs + } if (!_is_library) { # http://crbug.com/725224. Fix for bots running out of memory. @@ -1586,7 +1655,7 @@ if (enable_java_templates) { rebase_path(outputs[0], root_build_dir), "--min-api=$_min_sdk_version", "--r8-jar-path", - rebase_path(_r8_path, root_build_dir), + rebase_path(_d8_path, root_build_dir), "--custom-d8-jar-path", rebase_path(_custom_d8_path, root_build_dir), @@ -1634,6 +1703,10 @@ if (enable_java_templates) { if (defined(invoker.input_classes_filearg)) { inputs += [ invoker.build_config ] args += [ "--class-inputs-filearg=${invoker.input_classes_filearg}" ] + + # Required for the same reason as unprocessed_jar_path is added to + # classpath (see note below). + args += [ "--classpath=${invoker.input_classes_filearg}" ] } if (_input_class_jars != []) { inputs += _input_class_jars @@ -1651,14 +1724,6 @@ if (enable_java_templates) { if (_enable_desugar) { args += [ "--desugar" ] - # Passing the flag for dex merging causes invalid dex files to be created. - if (enable_jdk_library_desugaring && !_is_dex_merging) { - inputs += [ _desugar_jdk_libs_json ] - args += [ - "--desugar-jdk-libs-json", - rebase_path(_desugar_jdk_libs_json, root_build_dir), - ] - } _ignore_desugar_missing_deps = defined(invoker.ignore_desugar_missing_deps) && invoker.ignore_desugar_missing_deps @@ -1667,36 +1732,38 @@ if (enable_java_templates) { } } if (_desugar_needs_classpath) { + # Cannot use header jar for the active jar, because it does not + # contain anonymous classes. https://crbug.com/1342018#c5 + # Cannot use processed .jar here because it might have classes + # filtered out via jar_excluded_patterns. + # Must come first in classpath in order to take precedence over + # deps that defined the same classes (via jar_excluded_patterns). + if (defined(invoker.unprocessed_jar_path)) { + args += [ + "--classpath", + rebase_path(invoker.unprocessed_jar_path, root_build_dir), + + # Pass the full classpath to find new dependencies that are not in + # the .desugardeps file. + "--classpath=@FileArg($_rebased_build_config:deps_info:javac_full_interface_classpath)", + ] + inputs += [ invoker.unprocessed_jar_path ] + } _desugar_dependencies_path = "$target_gen_dir/$target_name.desugardeps" args += [ "--desugar-dependencies", rebase_path(_desugar_dependencies_path, root_build_dir), "--bootclasspath=@FileArg($_rebased_build_config:android:sdk_jars)", - - # Pass the full classpath to find new dependencies that are not in - # the .desugardeps file. - "--classpath=@FileArg($_rebased_build_config:deps_info:javac_full_interface_classpath)", ] - if (defined(invoker.desugar_jars_paths)) { - _rebased_desugar_jars_paths = - rebase_path(invoker.desugar_jars_paths, root_build_dir) - args += [ "--classpath=${_rebased_desugar_jars_paths}" ] - } - if (defined(invoker.final_ijar_path)) { - # Need to include the input .interface.jar on the classpath in order to make - # jar_excluded_patterns classes visible to desugar. - args += [ - "--classpath", - rebase_path(invoker.final_ijar_path, root_build_dir), - ] - inputs += [ invoker.final_ijar_path ] - } - } else { - not_needed(invoker, [ "desugar_jars_paths" ]) } - if (enable_java_asserts) { + if (defined(invoker.custom_assertion_handler)) { + args += [ + "--assertion-handler", + invoker.custom_assertion_handler, + ] + } else if (enable_java_asserts) { # The default for generating dex file format is # --force-disable-assertions. args += [ "--force-enable-assertions" ] @@ -1705,38 +1772,6 @@ if (enable_java_templates) { } } - # Variables - # output: Path to output ".l8.dex". - # min_sdk_version: The minimum Android SDK version this target supports. - template("dex_jdk_libs") { - action_with_pydeps(target_name) { - script = "//build/android/gyp/dex_jdk_libs.py" - inputs = [ - _r8_path, - _desugar_jdk_libs_json, - _desugar_jdk_libs_jar, - _desugar_jdk_libs_configuration_jar, - ] - outputs = [ invoker.output ] - args = [ - "--r8-path", - rebase_path(_r8_path, root_build_dir), - "--desugar-jdk-libs-json", - rebase_path(_desugar_jdk_libs_json, root_build_dir), - "--desugar-jdk-libs-jar", - rebase_path(_desugar_jdk_libs_jar, root_build_dir), - "--desugar-jdk-libs-configuration-jar", - rebase_path(_desugar_jdk_libs_configuration_jar, root_build_dir), - "--output", - rebase_path(invoker.output, root_build_dir), - "--min-api=${invoker.min_sdk_version}", - ] - if (treat_warnings_as_errors) { - args += [ "--warnings-as-errors" ] - } - } - } - template("jacoco_instr") { action_with_pydeps(target_name) { forward_variables_from(invoker, @@ -1751,7 +1786,8 @@ if (enable_java_templates) { _jacococli_jar = "//third_party/jacoco/lib/jacococli.jar" script = "//build/android/gyp/jacoco_instr.py" - inputs = invoker.java_files + [ + inputs = invoker.source_files + [ + java_path_for_inputs, _jacococli_jar, invoker.input_jar_path, ] @@ -1766,8 +1802,8 @@ if (enable_java_templates) { rebase_path(invoker.output_jar_path, root_build_dir), "--sources-json-file", rebase_path(_sources_json_file, root_build_dir), - "--java-sources-file", - rebase_path(invoker.java_sources_file, root_build_dir), + "--target-sources-file", + rebase_path(invoker.target_sources_file, root_build_dir), "--jacococli-jar", rebase_path(_jacococli_jar, root_build_dir), ] @@ -1783,7 +1819,12 @@ if (enable_java_templates) { template("filter_jar") { action_with_pydeps(target_name) { script = "//build/android/gyp/filter_zip.py" - forward_variables_from(invoker, TESTONLY_AND_VISIBILITY + [ "deps" ]) + forward_variables_from(invoker, + TESTONLY_AND_VISIBILITY + [ + "deps", + "data", + "data_deps", + ]) inputs = [ invoker.input_jar ] if (defined(invoker.inputs)) { inputs += invoker.inputs @@ -1812,7 +1853,6 @@ if (enable_java_templates) { template("process_java_library") { forward_variables_from(invoker, TESTONLY_AND_VISIBILITY) - _deps = invoker.jar_deps _previous_output_jar = invoker.input_jar_path if (invoker.jacoco_instrument) { @@ -1826,10 +1866,12 @@ if (enable_java_templates) { filter_jar(_filter_jar_target_name) { forward_variables_from(invoker, [ + "data", + "data_deps", "jar_excluded_patterns", "jar_included_patterns", ]) - deps = _deps + deps = invoker.deps input_jar = _previous_output_jar output_jar = _filter_jar_output_jar } @@ -1842,11 +1884,11 @@ if (enable_java_templates) { # javaagent as the desired coverage data was not being generated. # See crbug.com/1097815. jacoco_instr(target_name) { - deps = [ ":$_filter_jar_target_name" ] + invoker.jar_deps + deps = [ ":$_filter_jar_target_name" ] + invoker.deps forward_variables_from(invoker, [ - "java_files", - "java_sources_file", + "source_files", + "target_sources_file", ]) input_jar_path = _filter_jar_output_jar @@ -1857,10 +1899,11 @@ if (enable_java_templates) { template("bytecode_processor") { action_with_pydeps(target_name) { - forward_variables_from(invoker, TESTONLY_AND_VISIBILITY) + forward_variables_from(invoker, TESTONLY_AND_VISIBILITY + [ "data_deps" ]) _bytecode_checker_script = "$root_build_dir/bin/helper/bytecode_processor" script = "//build/android/gyp/bytecode_processor.py" inputs = [ + java_path_for_inputs, invoker.build_config, invoker.input_jar, _bytecode_checker_script, @@ -1880,19 +1923,21 @@ if (enable_java_templates) { rebase_path(invoker.input_jar, root_build_dir), "--stamp", rebase_path(outputs[0], root_build_dir), + "--chromium-output-dir", + rebase_path(root_build_dir, root_build_dir), "--direct-classpath-jars=@FileArg($_rebased_build_config:javac:classpath)", "--full-classpath-jars=@FileArg($_rebased_build_config:deps_info:javac_full_classpath)", "--full-classpath-gn-targets=@FileArg($_rebased_build_config:deps_info:javac_full_classpath_targets)", ] + if (auto_add_missing_java_deps) { + args += [ "--auto-add-deps" ] + } if (android_static_analysis == "build_server") { args += [ "--use-build-server" ] } - if (invoker.requires_android) { + if (invoker.include_android_sdk) { args += [ "--sdk-classpath-jars=@FileArg($_rebased_build_config:android:sdk_jars)" ] } - if (invoker.is_prebuilt) { - args += [ "--is-prebuilt" ] - } if (treat_warnings_as_errors) { args += [ "--warnings-as-errors" ] } @@ -1911,8 +1956,10 @@ if (enable_java_templates) { depfile = "$target_gen_dir/$target_name.d" inputs = [ + java_path_for_inputs, invoker.build_config, invoker.input_manifest, + _manifest_merger_jar_path, ] outputs = [ invoker.output_manifest ] @@ -1921,9 +1968,8 @@ if (enable_java_templates) { args = [ "--depfile", rebase_path(depfile, root_build_dir), - "--android-sdk-cmdline-tools", - rebase_path("${public_android_sdk_root}/cmdline-tools/latest", - root_build_dir), + "--manifest-merger-jar", + rebase_path(_manifest_merger_jar_path, root_build_dir), "--root-manifest", rebase_path(invoker.input_manifest, root_build_dir), "--output", @@ -1984,6 +2030,7 @@ if (enable_java_templates) { forward_variables_from(invoker, TESTONLY_AND_VISIBILITY + [ "deps", + "public_deps", "sources", ]) script = "//build/android/gyp/prepare_resources.py" @@ -2030,7 +2077,7 @@ if (enable_java_templates) { } # A template that is used to compile all resources needed by a binary - # (e.g. an android_apk or a junit_binary) into an intermediate .ar_ + # (e.g. an android_apk or a robolectric_binary) into an intermediate .ar_ # archive. It can also generate an associated .srcjar that contains the # final R.java sources for all resource packages the binary depends on. # @@ -2090,8 +2137,6 @@ if (enable_java_templates) { # # resource_values_filter_rules: (optional) # - # no_xml_namespaces: (optional) - # # png_to_webp: (optional) # If true, convert all PNG resources (except 9-patch files) to WebP. # @@ -2129,23 +2174,10 @@ if (enable_java_templates) { template("compile_resources") { forward_variables_from(invoker, TESTONLY_AND_VISIBILITY) - _deps = [ - invoker.android_sdk_dep, - invoker.build_config_dep, - ] + _deps = invoker.deps + [ invoker.build_config_dep ] if (defined(invoker.android_manifest_dep)) { _deps += [ invoker.android_manifest_dep ] } - foreach(_dep, invoker.deps) { - _target_label = get_label_info(_dep, "label_no_toolchain") - if (filter_exclude([ _target_label ], _java_library_patterns) == [] && - filter_exclude([ _target_label ], _java_resource_patterns) != []) { - # Depend on the java libraries' transitive __assetres target instead. - _deps += [ "${_target_label}__assetres" ] - } else { - _deps += [ _dep ] - } - } if (defined(invoker.arsc_output)) { _arsc_output = invoker.arsc_output @@ -2157,17 +2189,18 @@ if (enable_java_templates) { _inputs = [ invoker.build_config, android_sdk_tools_bundle_aapt2, + android_sdk_jar, ] _rebased_build_config = rebase_path(invoker.build_config, root_build_dir) + _rebased_android_sdk_jar = rebase_path(android_sdk_jar, root_build_dir) _args = [ - "--include-resources=@FileArg($_rebased_build_config:android:sdk_jars)", + "--include-resources=$_rebased_android_sdk_jar", "--aapt2-path", rebase_path(android_sdk_tools_bundle_aapt2, root_build_dir), "--dependencies-res-zips=@FileArg($_rebased_build_config:deps_info:dependency_zips)", "--extra-res-packages=@FileArg($_rebased_build_config:deps_info:extra_package_names)", - "--extra-main-r-text-files=@FileArg($_rebased_build_config:deps_info:extra_main_r_text_files)", "--min-sdk-version=${invoker.min_sdk_version}", "--target-sdk-version=${invoker.target_sdk_version}", "--webp-cache-dir=obj/android-webp-cache", @@ -2181,9 +2214,6 @@ if (enable_java_templates) { "--srcjar-out", rebase_path(_final_srcjar_path, root_build_dir), ] - if (defined(invoker.no_xml_namespaces) && invoker.no_xml_namespaces) { - _args += [ "--no-xml-namespaces" ] - } if (defined(invoker.version_code)) { _args += [ "--version-code", @@ -2422,18 +2452,20 @@ if (enable_java_templates) { ] inputs += [ invoker.expected_android_manifest_base ] } - if (fail_on_android_expectations) { - args += [ "--fail-on-expectations" ] + if (defined(invoker.expected_android_manifest_version_code_offset)) { + args += [ + "--verification-version-code-offset", + invoker.expected_android_manifest_version_code_offset, + ] } - if (defined(invoker.extra_verification_manifest)) { - inputs += [ invoker.extra_verification_manifest ] + if (defined(invoker.expected_android_manifest_library_version_offset)) { args += [ - "--extra-verification-manifest", - rebase_path(invoker.extra_verification_manifest, root_build_dir), + "--verification-library-version-offset", + invoker.expected_android_manifest_library_version_offset, ] - if (defined(invoker.extra_verification_manifest_dep)) { - deps += [ invoker.extra_verification_manifest_dep ] - } + } + if (fail_on_android_expectations) { + args += [ "--fail-on-expectations" ] } } _deps += [ ":$_expectations_target" ] @@ -2528,7 +2560,10 @@ if (enable_java_templates) { script = "//build/android/gyp/unused_resources.py" depfile = "$target_gen_dir/${target_name}.d" _unused_resources_script = "$root_build_dir/bin/helper/unused_resources" - inputs = [ _unused_resources_script ] + inputs = [ + _unused_resources_script, + java_path_for_inputs, + ] outputs = [ invoker.output_config, invoker.output_r_txt, @@ -2634,6 +2669,48 @@ if (enable_java_templates) { } } + template("create_binary_profile") { + action_with_pydeps(target_name) { + forward_variables_from(invoker, TESTONLY_AND_VISIBILITY) + forward_variables_from(invoker, [ "deps" ]) + script = "//build/android/gyp/binary_baseline_profile.py" + depfile = "$target_gen_dir/$target_name.d" + outputs = [ + invoker.binary_baseline_profile_path, + invoker.binary_baseline_profile_metadata_path, + ] + _profgen_path = + "$public_android_sdk_root/cmdline-tools/latest/bin/profgen" + _rebased_build_config = rebase_path(invoker.build_config, root_build_dir) + inputs = [ + invoker.build_config, + invoker.input_profile_path, + _profgen_path, + ] + args = [ + "--profgen", + rebase_path(_profgen_path, root_build_dir), + "--output-profile", + rebase_path(invoker.binary_baseline_profile_path, root_build_dir), + "--output-metadata", + rebase_path(invoker.binary_baseline_profile_metadata_path, + root_build_dir), + "--dex=@FileArg($_rebased_build_config:final_dex:path)", + "--input-profile-path", + rebase_path(invoker.input_profile_path, root_build_dir), + "--depfile", + rebase_path(depfile, root_build_dir), + ] + if (defined(invoker.proguard_mapping_path)) { + args += [ + "--proguard-mapping", + rebase_path(invoker.proguard_mapping_path, root_build_dir), + ] + inputs += [ invoker.proguard_mapping_path ] + } + } + } + # Creates a signed and aligned .apk. # # Variables @@ -2647,7 +2724,6 @@ if (enable_java_templates) { # and assets is consistent with the given expectation file. # expected_libs_and_assets_base: Treat expected_libs_and_assets as a diff # with this file as the base. - # jdk_libs_dex: Path to classes.dex for desugar_jdk_libs. # packaged_resources_path: Path to .ap_ to use. # output_apk_path: Output path for the generated .apk. # min_sdk_version: The minimum Android SDK version this target supports. @@ -2664,10 +2740,10 @@ if (enable_java_templates) { # keystore_path: Path to keystore to use for signing. # keystore_name: Key alias to use. # keystore_password: Keystore password. - # uncompress_shared_libraries: (optional, default false) Whether to store - # native libraries inside the APK uncompressed and page-aligned. template("package_apk") { forward_variables_from(invoker, TESTONLY_AND_VISIBILITY + [ "public_deps" ]) + _is_robolectric_apk = + defined(invoker.is_robolectric_apk) && invoker.is_robolectric_apk _deps = invoker.deps _native_lib_placeholders = [] if (defined(invoker.native_lib_placeholders)) { @@ -2680,16 +2756,8 @@ if (enable_java_templates) { } _script = "//build/android/gyp/apkbuilder.py" - _apksigner = "$android_sdk_build_tools/lib/apksigner.jar" - _zipalign = "$android_sdk_build_tools/zipalign" - _inputs = [ - invoker.build_config, - invoker.keystore_path, - invoker.packaged_resources_path, - _apksigner, - _zipalign, - ] + _inputs = [ invoker.packaged_resources_path ] _outputs = [ invoker.output_apk_path ] _data = [ invoker.output_apk_path ] @@ -2698,45 +2766,75 @@ if (enable_java_templates) { rebase_path(invoker.packaged_resources_path, root_build_dir) _rebased_packaged_apk_path = rebase_path(invoker.output_apk_path, root_build_dir) - _rebased_build_config = rebase_path(invoker.build_config, root_build_dir) _args = [ "--resource-apk=$_rebased_compiled_resources_path", "--output-apk=$_rebased_packaged_apk_path", - "--assets=@FileArg($_rebased_build_config:assets)", - "--uncompressed-assets=@FileArg($_rebased_build_config:uncompressed_assets)", - "--apksigner-jar", - rebase_path(_apksigner, root_build_dir), - "--zipalign-path", - rebase_path(_zipalign, root_build_dir), - "--key-path", - rebase_path(invoker.keystore_path, root_build_dir), - "--key-name", - invoker.keystore_name, - "--key-passwd", - invoker.keystore_password, "--min-sdk-version=${invoker.min_sdk_version}", - - # TODO(mlopatkin) We are relying on the fact that build_config is an APK - # build_config. - "--java-resources=@FileArg($_rebased_build_config:java_resources_jars)", ] - if (is_official_build) { - _args += [ "--best-compression" ] + + # system_image_stub_apk does not use a build_config.json. + if (defined(invoker.build_config)) { + _inputs += [ invoker.build_config ] + _rebased_build_config = rebase_path(invoker.build_config, root_build_dir) + _args += [ + "--assets=@FileArg($_rebased_build_config:assets)", + "--uncompressed-assets=@FileArg($_rebased_build_config:uncompressed_assets)", + ] + if (!_is_robolectric_apk) { + _args += [ "--java-resources=@FileArg($_rebased_build_config:java_resources_jars)" ] + } } - if (defined(invoker.uncompress_dex) && invoker.uncompress_dex) { - _args += [ "--uncompress-dex" ] + if (defined(invoker.extra_assets)) { + _args += [ "--assets=${invoker.extra_assets}" ] } - if (defined(invoker.uncompress_shared_libraries) && - invoker.uncompress_shared_libraries) { - _args += [ "--uncompress-shared-libraries=True" ] + if (!_is_robolectric_apk) { + _apksigner = "$android_sdk_build_tools/lib/apksigner.jar" + _zipalign = "$android_sdk_build_tools/zipalign" + _keystore_path = android_keystore_path + _keystore_name = android_keystore_name + _keystore_password = android_keystore_password + + if (defined(invoker.keystore_path)) { + _keystore_path = invoker.keystore_path + _keystore_name = invoker.keystore_name + _keystore_password = invoker.keystore_password + } + + _inputs += [ + _apksigner, + _zipalign, + _keystore_path, + ] + _args += [ + "--apksigner-jar", + rebase_path(_apksigner, root_build_dir), + "--zipalign-path", + rebase_path(_zipalign, root_build_dir), + "--key-path", + rebase_path(_keystore_path, root_build_dir), + "--key-name", + _keystore_name, + "--key-passwd", + _keystore_password, + ] + if (is_official_build) { + _args += [ "--best-compression" ] + } + } + if (defined(invoker.uncompress_dex)) { + _uncompress_dex = invoker.uncompress_dex + } else { + # Uncompressed dex support started on Android P. + _uncompress_dex = invoker.min_sdk_version >= 28 + } + + if (_uncompress_dex) { + _args += [ "--uncompress-dex" ] } if (defined(invoker.library_always_compress)) { _args += [ "--library-always-compress=${invoker.library_always_compress}" ] } - if (defined(invoker.library_renames)) { - _args += [ "--library-renames=${invoker.library_renames}" ] - } if (defined(invoker.dex_path)) { _inputs += [ invoker.dex_path ] _args += [ @@ -2744,13 +2842,6 @@ if (enable_java_templates) { rebase_path(invoker.dex_path, root_build_dir), ] } - if (defined(invoker.jdk_libs_dex)) { - _inputs += [ invoker.jdk_libs_dex ] - _args += [ - "--jdk-libs-dex-file", - rebase_path(invoker.jdk_libs_dex, root_build_dir), - ] - } if ((defined(invoker.loadable_modules) && invoker.loadable_modules != []) || defined(invoker.native_libs_filearg) || _native_lib_placeholders != []) { @@ -2798,10 +2889,10 @@ if (enable_java_templates) { _failure_file = "$expectations_failure_dir/" + string_replace(invoker.expected_libs_and_assets, "/", "_") - inputs = [ - invoker.build_config, - invoker.expected_libs_and_assets, - ] + inputs = [ invoker.expected_libs_and_assets ] + if (defined(invoker.build_config)) { + inputs += [ invoker.build_config ] + } deps = [ invoker.build_config_dep ] outputs = [ _actual_file, @@ -2845,29 +2936,26 @@ if (enable_java_templates) { } # Compile Java source files into a .jar file, potentially using an - # annotation processor, and/or the errorprone compiler. + # annotation processor, and/or the errorprone compiler. Also includes Kotlin + # source files in the resulting info file. # # Note that the only way to specify custom annotation processors is # by using build_config to point to a file that corresponds to a java-related # target that includes javac:processor_classes entries (i.e. there is no # variable here that can be used for this purpose). # - # Note also the peculiar use of java_files / java_sources_file. The content - # of the java_files list and the java_sources_file file must match exactly. - # This rule uses java_files only to list the inputs to the action that - # calls compile_java.py, but will pass the list of Java source files - # with the '@${java_sources_file}" command-line syntax. Not a problem in - # practice since this is only called from java_library_impl() that sets up - # the variables properly. + # Note also the peculiar use of source_files / target_sources_file. The content + # of the source_files list and the source files in target_sources_file file must + # match exactly. # # Variables: # main_target_name: Used when extracting srcjars for codesearch. - # java_files: Optional list of Java source file paths. + # source_files: Optional list of Java and Kotlin source file paths. # srcjar_deps: Optional list of .srcjar dependencies (not file paths). # The corresponding source files they contain will be compiled too. - # java_sources_file: Optional path to file containing list of Java source - # file paths. This must always be provided if java_files is not empty - # and must match it exactly. + # target_sources_file: Optional path to file containing list of source file + # paths. This must always be provided if java_files is not empty and the + # .java files in it must match the list of java_files exactly. # build_config: Path to the .build_config.json file of the corresponding # java_library_impl() target. The following entries will be used by this # template: javac:srcjars, deps_info:javac_full_classpath, @@ -2912,7 +3000,7 @@ if (enable_java_templates) { _srcjar_deps = [] if (defined(invoker.srcjar_deps)) { - _srcjar_deps += invoker.srcjar_deps + _srcjar_deps = invoker.srcjar_deps } _java_srcjars = [] @@ -2941,7 +3029,7 @@ if (enable_java_templates) { if (target_name == "chrome_java__header") { # Regression test for: https://crbug.com/1154302 - assert_no_deps = [ "//base:base_java__impl" ] + assert_no_deps = [ "//base:base_java__compile_java" ] } depfile = "$target_gen_dir/$target_name.d" @@ -2954,9 +3042,12 @@ if (enable_java_templates) { if (!invoker.enable_errorprone && !invoker.use_turbine) { outputs += [ invoker.output_jar_path + ".info" ] } - inputs = invoker.java_files + _java_srcjars + [ _build_config ] - if (invoker.java_files != []) { - inputs += [ invoker.java_sources_file ] + inputs = invoker.source_files + _java_srcjars + [ + _build_config, + java_path_for_inputs, + ] + if (invoker.source_files != []) { + inputs += [ invoker.target_sources_file ] } _rebased_build_config = rebase_path(_build_config, root_build_dir) @@ -2976,6 +3067,11 @@ if (enable_java_templates) { get_label_info(":${target_name}", "label_no_toolchain"), ] + # SDK jar must be first on classpath. + if (invoker.include_android_sdk) { + args += [ "--classpath=@FileArg($_rebased_build_config:android:sdk_interface_jars)" ] + } + if (defined(invoker.header_jar_path)) { inputs += [ invoker.header_jar_path ] args += [ @@ -2987,6 +3083,16 @@ if (enable_java_templates) { args += [ "--classpath=$_header_jar_classpath" ] } + if (defined(invoker.kotlin_jar_path)) { + inputs += [ invoker.kotlin_jar_path ] + _rebased_kotlin_jar_path = + rebase_path(invoker.kotlin_jar_path, root_build_dir) + args += [ + "--kotlin-jar-path=$_rebased_kotlin_jar_path", + "--classpath=$_rebased_kotlin_jar_path", + ] + } + if (invoker.use_turbine) { # Prefer direct deps for turbine as much as possible. args += [ "--classpath=@FileArg($_rebased_build_config:javac:interface_classpath)" ] @@ -3013,10 +3119,6 @@ if (enable_java_templates) { ] } - # Currently turbine does not support JDK11. - if (invoker.supports_android || invoker.use_turbine) { - args += [ "--java-version=1.8" ] - } if (use_java_goma) { args += [ "--gomacc-path=$goma_dir/gomacc" ] @@ -3029,9 +3131,6 @@ if (enable_java_templates) { if (enable_kythe_annotations && !invoker.enable_errorprone) { args += [ "--enable-kythe-annotations" ] } - if (invoker.requires_android) { - args += [ "--bootclasspath=@FileArg($_rebased_build_config:android:sdk_interface_jars)" ] - } if (_chromium_code) { args += [ "--chromium-code=1" ] if (treat_warnings_as_errors) { @@ -3074,8 +3173,9 @@ if (enable_java_templates) { [ "--additional-jar-file=" + rebase_path(file_tuple[0], root_build_dir) + ":" + file_tuple[1] ] } - if (invoker.java_files != []) { - args += [ "@" + rebase_path(invoker.java_sources_file, root_build_dir) ] + if (invoker.source_files != []) { + args += + [ "@" + rebase_path(invoker.target_sources_file, root_build_dir) ] } foreach(e, _javac_args) { args += [ "--javac-arg=" + e ] @@ -3083,26 +3183,92 @@ if (enable_java_templates) { } } - template("java_lib_group") { - forward_variables_from(invoker, [ "testonly" ]) - _group_name = invoker.group_name - not_needed([ "_group_name" ]) - group(target_name) { + # Compile Kotlin source files into .class files and store them in a .jar. + # This explicitly does not run annotation processing on the Kotlin files. + # Java files and srcjars are also passed to kotlinc for reference, although + # no .class files will be generated for any Java files. A subsequent call to + # javac will be required to actually compile Java files into .class files. + # + # This action also creates a "header" .jar file for the Kotlin source files. + # It is similar to using turbine to create headers for Java files, but since + # turbine does not support Kotlin files, this is done via a plugin for + # kotlinc instead, at the same time as compilation (whereas turbine is run as + # a separate action before javac compilation). + template("compile_kt") { + forward_variables_from(invoker, TESTONLY_AND_VISIBILITY) + + _build_config = invoker.build_config + _chromium_code = invoker.chromium_code + + _srcjar_deps = [] + if (defined(invoker.srcjar_deps)) { + _srcjar_deps = invoker.srcjar_deps + } + + _java_srcjars = [] + foreach(dep, _srcjar_deps) { + _dep_gen_dir = get_label_info(dep, "target_gen_dir") + _dep_name = get_label_info(dep, "name") + _java_srcjars += [ "$_dep_gen_dir/$_dep_name.srcjar" ] + } + + action_with_pydeps(target_name) { + script = "//build/android/gyp/compile_kt.py" + depfile = "$target_gen_dir/$target_name.d" + deps = _srcjar_deps if (defined(invoker.deps)) { - deps = [] - foreach(_dep, invoker.deps) { - _target_label = get_label_info(_dep, "label_no_toolchain") - if (filter_exclude([ _target_label ], _java_library_patterns) == [] && - filter_exclude([ _target_label ], _java_resource_patterns) != - []) { - # This is a java library dep, so replace it. - deps += [ "${_target_label}__${_group_name}" ] - } else { - # Transitive java group targets should also include direct deps. - deps += [ _dep ] - } + deps += invoker.deps + } + + outputs = [ + invoker.output_jar_path, + invoker.output_interface_jar_path, + ] + inputs = invoker.source_files + _java_srcjars + [ + _build_config, + invoker.target_sources_file, + ] + + _rebased_build_config = rebase_path(_build_config, root_build_dir) + _rebased_output_jar_path = + rebase_path(invoker.output_jar_path, root_build_dir) + _rebased_output_interface_jar_path = + rebase_path(invoker.output_interface_jar_path, root_build_dir) + _rebased_java_srcjars = rebase_path(_java_srcjars, root_build_dir) + _rebased_depfile = rebase_path(depfile, root_build_dir) + _rebased_generated_dir = rebase_path( + "$target_gen_dir/${invoker.main_target_name}/generated_java", + root_build_dir) + args = [ + "--depfile=$_rebased_depfile", + "--generated-dir=$_rebased_generated_dir", + "--jar-path=$_rebased_output_jar_path", + "--interface-jar-path=$_rebased_output_interface_jar_path", + "--java-srcjars=$_rebased_java_srcjars", + ] + + # SDK jar must be first on classpath. + if (invoker.include_android_sdk) { + args += [ "--classpath=@FileArg($_rebased_build_config:android:sdk_interface_jars)" ] + } + + args += [ "--classpath=@FileArg($_rebased_build_config:deps_info:javac_full_interface_classpath)" ] + + if (use_java_goma) { + args += [ "--gomacc-path=$goma_dir/gomacc" ] + + # Override the default action_pool when goma is enabled. + pool = "//build/config/android:goma_javac_pool" + } + + if (_chromium_code) { + args += [ "--chromium-code" ] + if (treat_warnings_as_errors) { + args += [ "--warnings-as-errors" ] } } + + args += [ "@" + rebase_path(invoker.target_sources_file, root_build_dir) ] } } @@ -3157,7 +3323,7 @@ if (enable_java_templates) { # # Variables: # type: type of Java target, valid values: 'java_library', 'java_binary', - # 'junit_binary', 'java_annotation_processor', and 'android_apk' + # 'robolectric_binary', 'java_annotation_processor', and 'android_apk' # main_target_name: optional. If provided, overrides target_name when # creating sub-targets (e.g. "${main_target_name}__dex") and # some output files (e.g. "${main_target_name}.sources"). Only used @@ -3165,21 +3331,21 @@ if (enable_java_templates) { # be the name of the main APK target. # supports_android: Optional. True if target can run on Android. # requires_android: Optional. True if target can only run on Android. - # java_files: Optional list of Java source file paths for this target. + # source_files: Optional list of Java source file paths for this target. # javac_args: Optional list of extra arguments to pass to javac. # errorprone_args: Optional list of extra arguments to pass to. # srcjar_deps: Optional list of .srcjar targets (not file paths). The Java # source files they contain will also be compiled for this target. - # java_sources_file: Optional path to a file which will be written with - # the content of java_files. If not provided, the file will be written + # target_sources_file: Optional path to a file which will be written with + # the content of source_files. If not provided, the file will be written # under $target_gen_dir/$main_target_name.sources. Ignored if - # java_files is empty. If not + # sources_files is empty. If not # jar_path: Optional path to a prebuilt .jar file for this target. # Mutually exclusive with java_files and srcjar_deps. # output_name: Optional output name for the final jar path. Used to # determine the name of the final jar. Default is to use the same # name as jar_path, if provided, or main_target_name. - # main_class: Main Java class name for 'java_binary', 'junit_binary' and + # main_class: Main Java class name for 'java_binary', 'robolectric_binary' and # 'java_annotation_processor' target types. Should not be set for other # ones. # deps: Dependencies for this target. @@ -3204,18 +3370,12 @@ if (enable_java_templates) { # input_jars_paths: Optional list of additional .jar file paths, which will # be added to the compile-time classpath when building this target (but # not to the runtime classpath). - # desugar_jars_paths: Optional list of additional .jar file paths, which will - # be added to the desugar classpath when building this target (but not to - # any other classpath). This is only used to break dependency cycles. # gradle_treat_as_prebuilt: Cause generate_gradle.py to reference this # library via its built .jar rather than including its .java sources. # proguard_enabled: Optional. True to enable ProGuard obfuscation. # proguard_configs: Optional list of additional proguard config file paths. - # bypass_platform_checks: Optional. If True, platform checks will not - # be performed. They are used to verify that every target with - # requires_android only depends on targets that, at least supports_android. - # Similarly, if a target has !supports_android, then it cannot depend on - # any other target that has requires_android. + # is_robolectric: Optional. If True, this is a host side android test binary + # which is allowed to depend on other android targets. # include_java_resources: Optional. If True, include Java (not Android) # resources into final .jar file. # jar_excluded_patterns: Optional list of .class file patterns to exclude @@ -3251,8 +3411,6 @@ if (enable_java_templates) { # be stored in the APK. # secondary_abi_loadable_modules: Optional list of native libraries for # secondary ABI. - # uncompress_shared_libraries: Optional. True to store native shared - # libraries uncompressed and page-aligned. # proto_resources_path: The path of an zip archive containing the APK's # resources compiled to the protocol buffer format (instead of regular # binary xml + resources.arsc). @@ -3264,7 +3422,7 @@ if (enable_java_templates) { # list of string resources to keep in the base split APK for any bundle # that uses this target. # - # For 'java_binary' and 'junit_binary' targets only. Ignored by others: + # For 'java_binary' and 'robolectric_binary' targets only. Ignored by others: # # wrapper_script_name: Optional name for the generated wrapper script. # Default is main target name. @@ -3279,13 +3437,20 @@ if (enable_java_templates) { _is_prebuilt = defined(invoker.jar_path) _type = invoker.type _is_annotation_processor = _type == "java_annotation_processor" - _is_java_binary = _type == "java_binary" || _type == "junit_binary" + _is_java_binary = _type == "java_binary" || _type == "robolectric_binary" + _is_library = _type == "java_library" _supports_android = defined(invoker.supports_android) && invoker.supports_android _requires_android = defined(invoker.requires_android) && invoker.requires_android + _supports_host = !_requires_android + if (_is_java_binary || _is_annotation_processor) { + assert(!_requires_android && !_supports_android) + } + _bypass_platform_checks = defined(invoker.bypass_platform_checks) && invoker.bypass_platform_checks + _is_robolectric = defined(invoker.is_robolectric) && invoker.is_robolectric _invoker_deps = [] if (defined(invoker.deps)) { @@ -3300,19 +3465,16 @@ if (enable_java_templates) { _main_target_name = invoker.main_target_name } - if (defined(invoker.resources_package)) { - _resources_package = invoker.resources_package - } - - _java_files = [] + _source_files = [] if (defined(invoker.sources)) { - _java_files = invoker.sources + _source_files = invoker.sources } + _srcjar_deps = [] if (defined(invoker.srcjar_deps)) { _srcjar_deps = invoker.srcjar_deps } - _has_sources = _java_files != [] || _srcjar_deps != [] + _has_sources = _source_files != [] || _srcjar_deps != [] if (_is_prebuilt) { assert(!_has_sources) @@ -3339,10 +3501,10 @@ if (enable_java_templates) { _chromium_code = filter_exclude([ get_label_info(":$_main_target_name", "dir") ], [ "*\bthird_party\b*" ]) != [] - if (!_chromium_code && !_is_prebuilt && _java_files != []) { + if (!_chromium_code && !_is_prebuilt && _source_files != []) { # Unless third_party code has an org.chromium file in it. _chromium_code = - filter_exclude(_java_files, [ "*\bchromium\b*" ]) != _java_files + filter_exclude(_source_files, [ "*\bchromium\b*" ]) != _source_files } } @@ -3358,8 +3520,6 @@ if (enable_java_templates) { if (_is_prebuilt || _has_sources) { if (defined(invoker.output_name)) { _output_name = invoker.output_name - } else if (_is_prebuilt) { - _output_name = get_path_info(invoker.jar_path, "name") } else { _output_name = _main_target_name } @@ -3369,12 +3529,15 @@ if (enable_java_templates) { _build_device_jar = _type != "system_java_library" && _supports_android _jacoco_instrument = - use_jacoco_coverage && _chromium_code && _java_files != [] && + use_jacoco_coverage && _chromium_code && _source_files != [] && _build_device_jar && (!defined(invoker.testonly) || !invoker.testonly) if (defined(invoker.jacoco_never_instrument)) { _jacoco_instrument = !invoker.jacoco_never_instrument && _jacoco_instrument } + if (_jacoco_instrument) { + _invoker_deps += [ _jacoco_dep ] + } if (_build_host_jar) { # Jar files can be needed at runtime (by Robolectric tests or java binaries), @@ -3432,80 +3595,89 @@ if (enable_java_templates) { } } - if (_is_prebuilt || _has_sources) { - _java_res_deps = [] - _java_header_deps = [] - _java_impl_deps = [] - _non_java_deps = [] - foreach(_dep, _invoker_deps) { - _target_label = get_label_info(_dep, "label_no_toolchain") - if (filter_exclude([ _target_label ], _java_resource_patterns) == []) { - _java_res_deps += [ _dep ] - } else if (filter_exclude([ _target_label ], _java_library_patterns) == - []) { - # This is a java library dep, so it has header and impl targets. - _java_header_deps += [ "${_target_label}__header" ] - _java_impl_deps += [ "${_target_label}__impl" ] - } else { - _non_java_deps += [ _dep ] - } - } + _java_assetres_deps = filter_include(_invoker_deps, java_resource_patterns) - # Don't need to depend on the apk-under-test to be packaged. - if (defined(invoker.apk_under_test)) { - _java_header_deps += [ "${invoker.apk_under_test}__java__header" ] - _java_impl_deps += [ "${invoker.apk_under_test}__java__impl" ] - } + # Cannot use minus operator because it does not work when the operand has + # repeated entries. + _invoker_deps_minus_assetres = + filter_exclude(_invoker_deps, _java_assetres_deps) + _lib_deps = + filter_include(_invoker_deps_minus_assetres, java_library_patterns) + _non_java_deps = filter_exclude(_invoker_deps_minus_assetres, _lib_deps) - # These deps cannot be passed via invoker.deps since bundle_module targets - # have bundle_module.build_config without the __java suffix, so they are - # special and cannot be passed as regular deps to write_build_config. - if (defined(invoker.base_module_target)) { - _java_header_deps += [ "${invoker.base_module_target}__java__header" ] - _java_impl_deps += [ "${invoker.base_module_target}__java__impl" ] - } + _java_header_deps = [] # Turbine / ijar - _extra_java_deps = [] - if (_jacoco_instrument) { - _extra_java_deps += [ "//third_party/jacoco:jacocoagent_java" ] - } + # It would be more ideal to split this into __host and __javac, but we + # combine the two concepts to save on a group() target. + _java_host_deps = [] # Processed host .jar + javac .jar. + _java_validate_deps = [] # Bytecode checker & errorprone. + + foreach(_lib_dep, _lib_deps) { + # Expand //foo/java -> //foo/java:java + _lib_dep = get_label_info(_lib_dep, "label_no_toolchain") + _java_assetres_deps += [ "${_lib_dep}__assetres" ] + _java_header_deps += [ "${_lib_dep}__header" ] + _java_host_deps += [ "${_lib_dep}__host" ] + _java_validate_deps += [ "${_lib_dep}__validate" ] + } + + # APK and base module targets are special because: + # 1) They do not follow java target naming scheme (since they are not + # generally deps, there is no need for them to). + # 2) They do not bother to define a __host target. + # Since __host is used as an indirect dep for the compile_java artifacts, + # add the __compile_java target directly for them. + if (defined(invoker.apk_under_test)) { + _java_assetres_deps += [ "${invoker.apk_under_test}__java__assetres" ] + _java_header_deps += [ "${invoker.apk_under_test}__java__header" ] + _java_validate_deps += [ "${invoker.apk_under_test}__java__validate" ] + _java_host_deps += [ "${invoker.apk_under_test}__compile_java" ] + } + if (defined(invoker.base_module_target)) { + _java_assetres_deps += [ "${invoker.base_module_target}__java__assetres" ] + _java_header_deps += [ "${invoker.base_module_target}__java__header" ] + _java_validate_deps += [ "${invoker.base_module_target}__java__validate" ] + _java_host_deps += [ "${invoker.base_module_target}__compile_java" ] + } + + not_needed([ "_non_java_deps" ]) + + if (_is_prebuilt || _has_sources) { + # Classpath deps are used for header and dex targets, they do not need + # __assetres deps. + # _non_java_deps are needed for input_jars_paths that are generated. + _header_classpath_deps = + _java_header_deps + _non_java_deps + [ ":$_build_config_target_name" ] + + _javac_classpath_deps = + _java_host_deps + _non_java_deps + [ ":$_build_config_target_name" ] _include_android_sdk = _build_device_jar if (defined(invoker.include_android_sdk)) { _include_android_sdk = invoker.include_android_sdk } if (_include_android_sdk) { - _sdk_java_dep = "//third_party/android_sdk:android_sdk_java" if (defined(invoker.alternative_android_sdk_dep)) { - _sdk_java_dep = invoker.alternative_android_sdk_dep + _android_sdk_dep = invoker.alternative_android_sdk_dep + } else { + _android_sdk_dep = default_android_sdk_dep } - # This is an android_system_java_prebuilt target, so no headers. - _extra_java_deps += [ _sdk_java_dep ] + _header_classpath_deps += [ "${_android_sdk_dep}__header" ] + _javac_classpath_deps += [ "${_android_sdk_dep}" ] } - - # Classpath deps is used for header and dex targets, they do not need - # resource deps. - _classpath_deps = _java_header_deps + _non_java_deps + _extra_java_deps + - [ ":$_build_config_target_name" ] - - _full_classpath_deps = - _java_impl_deps + _java_res_deps + _non_java_deps + _extra_java_deps + - [ ":$_build_config_target_name" ] } # Often needed, but too hard to figure out when ahead of time. not_needed([ - "_classpath_deps", - "_full_classpath_deps", + "_header_classpath_deps", + "_javac_classpath_deps", ]) - if (_java_files != []) { - _java_sources_file = "$target_gen_dir/$_main_target_name.sources" - if (defined(invoker.java_sources_file)) { - _java_sources_file = invoker.java_sources_file - } - write_file(_java_sources_file, rebase_path(_java_files, root_build_dir)) + if (_source_files != []) { + _target_sources_file = "$target_gen_dir/$_main_target_name.sources" + write_file(_target_sources_file, + rebase_path(_source_files, root_build_dir)) } write_build_config(_build_config_target_name) { @@ -3516,14 +3688,20 @@ if (enable_java_templates) { "base_allowlist_rtxt_path", "gradle_treat_as_prebuilt", "input_jars_paths", + "preferred_dep", "low_classpath_priority", "main_class", + "mergeable_android_manifests", + "module_name", + "parent_module_target", "proguard_configs", "proguard_enabled", "proguard_mapping_path", "public_target_label", "r_text_path", "type", + "version_code", + "version_name", ]) if (_type == "android_apk" || _type == "android_app_bundle_module") { forward_variables_from( @@ -3540,10 +3718,7 @@ if (enable_java_templates) { "secondary_abi_shared_libraries_runtime_deps_file", "secondary_native_lib_placeholders", "shared_libraries_runtime_deps_file", - "static_library_dependent_targets", - "uncompress_shared_libraries", "library_always_compress", - "library_renames", ]) } if (_type == "android_apk") { @@ -3560,11 +3735,8 @@ if (enable_java_templates) { [ "add_view_trace_events", "base_module_target", - "is_base_module", "module_pathmap_path", "proto_resources_path", - "version_name", - "version_code", ]) } chromium_code = _chromium_code @@ -3580,19 +3752,23 @@ if (enable_java_templates) { if (defined(invoker.public_deps)) { possible_config_public_deps = invoker.public_deps } - if (defined(_extra_java_deps)) { - possible_config_deps += _extra_java_deps - } if (defined(apk_under_test)) { possible_config_deps += [ apk_under_test ] } + if (defined(_jacoco_instrument) && _jacoco_instrument) { + possible_config_deps += [ _jacoco_dep ] + } + if (defined(_android_sdk_dep)) { + possible_config_deps += [ _android_sdk_dep ] + } supports_android = _supports_android requires_android = _requires_android + is_robolectric = _is_robolectric bypass_platform_checks = _bypass_platform_checks - if (defined(_resources_package)) { - custom_package = _resources_package + if (defined(invoker.resources_package)) { + custom_package = invoker.resources_package } if (_is_prebuilt || _has_sources) { ijar_path = _final_ijar_path @@ -3605,8 +3781,8 @@ if (enable_java_templates) { device_jar_path = _device_processed_jar_path dex_path = _dex_path } - if (_java_files != []) { - java_sources_file = _java_sources_file + if (_source_files != []) { + target_sources_file = _target_sources_file } bundled_srcjars = [] @@ -3631,10 +3807,10 @@ if (enable_java_templates) { _header_target_name = "${target_name}__header" } - _public_deps = [] - _analysis_public_deps = [] - if (_has_sources) { + _kt_files = filter_include(_source_files, [ "*.kt" ]) + _java_files = filter_exclude(_source_files, [ "*.kt" ]) + if (defined(invoker.enable_errorprone)) { _enable_errorprone = invoker.enable_errorprone } else { @@ -3642,47 +3818,89 @@ if (enable_java_templates) { _java_files != [] && _chromium_code && use_errorprone_java_compiler } - if (defined(_resources_package) && _type == "java_library") { - assert(_requires_android || _bypass_platform_checks, + if (defined(invoker.resources_package) && _type == "java_library") { + # TODO(crbug.com/1296632): remove _bypass_platform_checks from the list + # once all robolectric targets have migrated to robolectric_library. + assert(_requires_android || _bypass_platform_checks || _is_robolectric, "Setting resources_package applicable only for " + - "android_library(), or java_library() with " + - "bypass_platform_checks=true. Target=$target_name") + "android_library(), or robolectric_library(). " + + "Target=$target_name") - # has _resources at the end so it looks like a resources pattern, since - # it does act like one (and other resources patterns need to depend on - # this before they can read its output R.txt). - _fake_rjava_target = "${target_name}__rjava_resources" + # Serves double purpose: Generating R.java, as well as being the + #__assetres target (instead of using a separate group). + _fake_rjava_target = "${target_name}__assetres" generate_r_java(_fake_rjava_target) { - deps = [ ":$_build_config_target_name" ] - possible_resource_deps = _invoker_deps + deps = [ ":$_build_config_target_name" ] + _java_assetres_deps + + _non_java_deps build_config = _build_config # Filepath has to be exactly this because compile_java looks for the # srcjar of srcjar_deps at this location $gen_dir/$target_name.srcjar srcjar_path = "$target_gen_dir/$target_name.srcjar" - package = _resources_package + package = invoker.resources_package } _srcjar_deps += [ ":$_fake_rjava_target" ] } + if (_kt_files != []) { + _kt_allowlist = [ + "android/java/src/org/chromium/chrome/browser/tabmodel/AsyncTabParamsManagerImpl.kt", + "java/androidx/core/os/BuildCompat.kt", + "webengine_shell_apk/src/org/chromium/webengine/shell/*.kt", + ] + _found_kt = filter_exclude(_kt_files, _kt_allowlist) + assert( + _found_kt == [], + "Only a files in the allowlist can be included for now. Feel " + "free to remove this assert when experimenting locally. Found: $_found_kt") + _compile_kt_target_name = "${_main_target_name}__compile_kt" + _kotlinc_jar_path = "$target_out_dir/$_output_name.kotlinc.jar" + _kotlin_interface_jar_path = + "$target_out_dir/$_output_name.kt-jvm-abi.jar" + assert(filter_include(_lib_deps, [ _kotlin_stdlib_dep ]) != [], + "${_main_target_name} is missing dep: $_kotlin_stdlib_dep") + compile_kt(_compile_kt_target_name) { + deps = _header_classpath_deps + output_jar_path = _kotlinc_jar_path + output_interface_jar_path = _kotlin_interface_jar_path + main_target_name = _main_target_name + build_config = _build_config + srcjar_deps = _srcjar_deps + source_files = _source_files + target_sources_file = _target_sources_file + chromium_code = _chromium_code + include_android_sdk = _is_robolectric || _requires_android + } + } + template("compile_java_helper") { _enable_errorprone = defined(invoker.enable_errorprone) && invoker.enable_errorprone if (_enable_errorprone) { # Rely on the header jar to provide all .class files so that it is # safe to omit generated files entirely for errorprone. - _filtered_java_files = - filter_exclude(_java_files, [ "$root_gen_dir*" ]) + _filtered_source_files = + filter_exclude(_source_files, [ "$root_gen_dir*" ]) } - if (_enable_errorprone && _filtered_java_files == []) { + if (_enable_errorprone && _filtered_source_files == []) { # Filtering out generated files resulted in no files left. group(target_name) { not_needed(invoker, "*") + deps = _header_classpath_deps } } else { compile_java(target_name) { - forward_variables_from(invoker, "*", TESTONLY_AND_VISIBILITY) + forward_variables_from(invoker, + "*", + TESTONLY_AND_VISIBILITY + [ "deps" ]) + deps = _header_classpath_deps + if (defined(invoker.deps)) { + deps += invoker.deps + } output_jar_path = invoker.output_jar_path + if (defined(invoker.kotlin_jar_path)) { + deps += [ ":$_compile_kt_target_name" ] + kotlin_jar_path = invoker.kotlin_jar_path + } enable_errorprone = _enable_errorprone use_turbine = defined(invoker.use_turbine) && invoker.use_turbine @@ -3690,22 +3908,17 @@ if (enable_java_templates) { build_config = _build_config if (_enable_errorprone) { - java_files = _filtered_java_files + source_files = _filtered_source_files } else { - java_files = _java_files + source_files = _source_files srcjar_deps = _srcjar_deps } - if (java_files != []) { - java_sources_file = _java_sources_file + if (source_files != []) { + target_sources_file = _target_sources_file } chromium_code = _chromium_code - supports_android = _supports_android - requires_android = _requires_android - if (!defined(deps)) { - deps = [] - } - deps += _classpath_deps + include_android_sdk = _is_robolectric || _requires_android } } } @@ -3728,8 +3941,10 @@ if (enable_java_templates) { output_jar_path = _final_ijar_path generated_jar_path = _generated_jar_path deps = _annotation_processor_deps + if (_kt_files != []) { + kotlin_jar_path = _kotlin_interface_jar_path + } } - _public_deps += [ ":$_header_target_name" ] _compile_java_target = "${_main_target_name}__compile_java" compile_java_helper(_compile_java_target) { @@ -3738,6 +3953,9 @@ if (enable_java_templates) { deps = [ ":$_header_target_name" ] header_jar_path = _final_ijar_path generated_jar_path = _generated_jar_path + if (_kt_files != []) { + kotlin_jar_path = _kotlinc_jar_path + } } if (_enable_errorprone) { _compile_java_errorprone_target = "${_main_target_name}__errorprone" @@ -3751,18 +3969,23 @@ if (enable_java_templates) { javac_args += invoker.errorprone_args } deps = [ ":$_header_target_name" ] + if (_kt_files != []) { + kotlin_jar_path = _kotlinc_jar_path + } header_jar_path = _final_ijar_path generated_jar_path = _generated_jar_path output_jar_path = "$target_out_dir/$target_name.errorprone.stamp" } - _analysis_public_deps += [ ":$_compile_java_errorprone_target" ] + _java_validate_deps += [ ":$_compile_java_errorprone_target" ] } } # _has_sources if (_is_prebuilt || _build_device_jar || _build_host_jar) { - _unprocessed_jar_deps = [] if (_has_sources) { - _unprocessed_jar_deps += [ ":$_compile_java_target" ] + _unprocessed_jar_deps = [ ":$_compile_java_target" ] + } else { + # jars might be generated by a dep. + _unprocessed_jar_deps = _non_java_deps } } @@ -3778,6 +4001,7 @@ if (enable_java_templates) { action_with_pydeps(_rewritten_jar_target_name) { script = "//build/android/gyp/bytecode_rewriter.py" inputs = [ + java_path_for_inputs, _rewriter_path, _build_config, _unprocessed_jar_path, @@ -3798,7 +4022,7 @@ if (enable_java_templates) { "--output-jar", rebase_path(_rewritten_jar, root_build_dir), ] - deps = _unprocessed_jar_deps + _full_classpath_deps + + deps = _unprocessed_jar_deps + _javac_classpath_deps + [ invoker.bytecode_rewriter_target ] } @@ -3815,56 +4039,72 @@ if (enable_java_templates) { input_jar = _unprocessed_jar_path output_jar = _final_ijar_path - # Normally ijar does not require any deps, but: - # 1 - Some jars are bytecode rewritten by _unprocessed_jar_deps. - # 2 - Other jars need to be unzipped by _non_java_deps. - # 3 - It is expected that depending on a header target implies depending - # on its transitive header target deps via _java_header_deps. - deps = _unprocessed_jar_deps + _non_java_deps + _java_header_deps + # ijar needs only _unprocessed_jar_deps, but this also needs to export + # __header target from deps. + deps = _unprocessed_jar_deps + _java_header_deps } - _public_deps += [ ":$_header_target_name" ] } if (_build_host_jar || _build_device_jar) { _enable_bytecode_checks = (!defined(invoker.enable_bytecode_checks) || - invoker.enable_bytecode_checks) && android_static_analysis != "off" + invoker.enable_bytecode_checks) && !_is_prebuilt && + android_static_analysis != "off" if (_enable_bytecode_checks) { - _bytecode_checks_target = "${target_name}__validate_classpath" - bytecode_processor(_bytecode_checks_target) { + _validate_target_name = "${target_name}__validate" + bytecode_processor(_validate_target_name) { forward_variables_from(invoker, [ "missing_classes_allowlist" ]) - deps = _unprocessed_jar_deps + _full_classpath_deps + + deps = _unprocessed_jar_deps + _javac_classpath_deps + [ ":$_build_config_target_name" ] - requires_android = _requires_android + data_deps = _java_validate_deps + if (defined(_compile_java_errorprone_target)) { + data_deps += [ ":$_compile_java_errorprone_target" ] + } + + include_android_sdk = _requires_android || _is_robolectric target_label = get_label_info(":${invoker.target_name}", "label_no_toolchain") input_jar = _unprocessed_jar_path build_config = _build_config - is_prebuilt = _is_prebuilt } - _analysis_public_deps += [ ":$_bytecode_checks_target" ] } else { not_needed(invoker, [ "missing_classes_allowlist" ]) } if (_build_host_jar) { - _process_host_jar_target_name = "${target_name}__process_host" + _process_host_jar_target_name = "${target_name}__host" process_java_library(_process_host_jar_target_name) { forward_variables_from(invoker, [ "jar_excluded_patterns", "jar_included_patterns", ]) + + # Robolectric tests require these to be on swarming. + data = [ _host_processed_jar_path ] input_jar_path = _unprocessed_jar_path - jar_deps = _unprocessed_jar_deps + _full_classpath_deps + deps = _unprocessed_jar_deps + _javac_classpath_deps output_jar_path = _host_processed_jar_path jacoco_instrument = _jacoco_instrument if (_jacoco_instrument) { - java_files = _java_files - java_sources_file = _java_sources_file + source_files = _source_files + target_sources_file = _target_sources_file + } + + # _java_host_deps isn't necessary for process_java_library(), but is + # necessary so that this target can be used to depend on transitive + # __device targets without the need to create a separate group() + # target. This trade-off works because process_java_library is fast. + deps += _java_host_deps + + # Add runtime_deps here since robolectric_binary does not depend on top-level group. + if (defined(invoker.data)) { + data += invoker.data + } + if (defined(invoker.data_deps)) { + data_deps = invoker.data_deps } } - _public_deps += [ ":${_process_host_jar_target_name}" ] } if (_build_device_jar) { @@ -3877,27 +4117,27 @@ if (enable_java_templates) { "jar_included_patterns", ]) input_jar_path = _unprocessed_jar_path - jar_deps = _unprocessed_jar_deps + _full_classpath_deps + + deps = _unprocessed_jar_deps + _javac_classpath_deps output_jar_path = _device_processed_jar_path jacoco_instrument = _jacoco_instrument if (_jacoco_instrument) { - java_files = _java_files - java_sources_file = _java_sources_file + source_files = _source_files + target_sources_file = _target_sources_file } } _process_device_jar_deps = [ ":${_process_device_jar_target_name}" ] - _public_deps += _process_device_jar_deps } else { assert(_unprocessed_jar_path == _device_processed_jar_path) - _process_device_jar_deps = - _unprocessed_jar_deps + _full_classpath_deps + _process_device_jar_deps = _unprocessed_jar_deps } - dex("${target_name}__dex") { + _dex_target_name = "${target_name}__dex" + dex(_dex_target_name) { forward_variables_from(invoker, [ - "desugar_jars_paths", "proguard_enable_obfuscation", + "repackage_classes", ]) input_class_jars = [ _device_processed_jar_path ] enable_desugar = _enable_desugar @@ -3912,25 +4152,38 @@ if (enable_java_templates) { if (enable_desugar) { # Desugaring with D8 requires full classpath. build_config = _build_config - final_ijar_path = _final_ijar_path - deps += _classpath_deps + [ ":$_header_target_name" ] + unprocessed_jar_path = _unprocessed_jar_path + deps += _header_classpath_deps + _unprocessed_jar_deps } enable_multidex = false is_library = true + + # proguard_configs listed on java_library targets need to be marked + # as inputs to at least one target so that "gn analyze" will know + # about them. Although this target doesn't use them, it's a convenient spot + # to list them. + # https://crbug.com/827197 + if (compute_inputs_for_analyze && defined(invoker.proguard_configs)) { + inputs = invoker.proguard_configs + + # For the aapt-generated proguard rules. + deps += _non_java_deps + _srcjar_deps + } } - _public_deps += [ ":${target_name}__dex" ] } } if (_is_java_binary) { # Targets might use the generated script while building, so make it a dep # rather than a data_dep. - java_binary_script("${target_name}__java_binary_script") { + _java_binary_script_target_name = "${target_name}__java_binary_script" + java_binary_script(_java_binary_script_target_name) { forward_variables_from(invoker, [ "tiered_stop_at_level_one", "main_class", + "max_heap_size", "wrapper_script_args", ]) build_config = _build_config @@ -3939,58 +4192,113 @@ if (enable_java_templates) { script_name = invoker.wrapper_script_name } deps = [ ":$_build_config_target_name" ] + if (_is_robolectric) { + # For robolectric tests, we also add the normal sdk jar to the + # classpath since whenever we start using a new Android SDK, + # robolectric doesn't support it, and they often take a few months to + # support it. This causes issues when mocking classes that reference + # new SDK classes, so providing our normal SDK will allow these + # classes to resolve. For an example, see crbug.com/1350963. + extra_classpath_jars = [ android_sdk_jar ] + } } - _public_deps += [ ":${target_name}__java_binary_script" ] } - # The __impl target contains all non-analysis steps for this template. - # Having this separated out from the main target (which contains analysis - # steps) allows analysis steps for this target to be run concurrently with - # the non-analysis steps of other targets that depend on this one. - group("${target_name}__impl") { - public_deps = _public_deps - - # proguard_configs listed on java_library targets need to be marked - # as inputs to at least one target so that "gn analyze" will know - # about them. Although this target doesn't use them, it's a convenient spot - # to list them. - # https://crbug.com/827197 - if (compute_inputs_for_analyze && defined(invoker.proguard_configs)) { - assert(_build_host_jar || _build_device_jar) - data = invoker.proguard_configs + if (!defined(_validate_target_name)) { + _validate_target_name = "${target_name}__validate" - # For the aapt-generated proguard rules. - deps = _non_java_deps + _srcjar_deps + # Allow other targets to depend on this __validate one. + group(_validate_target_name) { + deps = _java_validate_deps } } - java_lib_group("${target_name}__assetres") { - deps = _invoker_deps - group_name = "assetres" + if (_supports_host && !defined(_process_host_jar_target_name)) { + group("${target_name}__host") { + deps = _java_host_deps + } + } - if (defined(_fake_rjava_target)) { - deps += [ ":$_fake_rjava_target" ] + # robolectric_library can depend on java_library, so java_library must + # define __assetres. + if ((_is_library || _supports_android || _is_robolectric) && + !defined(_fake_rjava_target)) { + group("${target_name}__assetres") { + if (_supports_android || _is_robolectric) { + deps = _java_assetres_deps + } } } + # The top-level group is used: + # 1) To allow building the target explicitly via ninja, + # 2) To trigger all analysis deps, + # 3) By custom action() targets that want to use artifacts as inputs. group(target_name) { forward_variables_from(invoker, [ "assert_no_deps", "data", "data_deps", - "deps", - "public_deps", "visibility", ]) - if (!defined(public_deps)) { + if (_requires_android || (_supports_android && _is_library)) { + # For non-robolectric targets, depend on other java target's top-level + # groups so that the __dex step gets depended on. + forward_variables_from(invoker, + [ + "deps", + "public_deps", + ]) + if (!defined(deps)) { + deps = [] + } + if (!defined(public_deps)) { + public_deps = [] + } + } else { + # For robolectric targets, depend only on non-java deps and the specific + # subtargets below, which will not include __dex. + deps = _non_java_deps public_deps = [] + if (defined(invoker.public_deps)) { + public_deps += + filter_exclude(invoker.public_deps, java_target_patterns) + } + } + if (defined(_jacoco_instrument) && _jacoco_instrument) { + deps += [ _jacoco_dep ] + } + if (defined(invoker.apk_under_test)) { + deps += [ invoker.apk_under_test ] + } + if (defined(_process_device_jar_target_name)) { + public_deps += [ ":$_process_device_jar_target_name" ] + } + if (defined(_dex_target_name)) { + public_deps += [ ":$_dex_target_name" ] + } + if (_supports_android && _is_library) { + # Robolectric targets define __assetres, but there's no need to build it + # by default. + public_deps += [ ":${target_name}__assetres" ] + } + if (_supports_host) { + # android_* targets define __host, but there's no need to build it by + # default. + public_deps += [ ":${target_name}__host" ] + } + if (_is_java_binary) { + public_deps += [ ":$_java_binary_script_target_name" ] } - public_deps += [ ":${target_name}__impl" ] if (!defined(data_deps)) { data_deps = [] } - data_deps += _analysis_public_deps + if (defined(_validate_target_name)) { + data_deps += [ ":$_validate_target_name" ] + } else { + data_deps += _java_validate_deps + } } } } @@ -4030,8 +4338,6 @@ template("create_android_app_bundle_module") { _rebased_build_config = rebase_path(invoker.build_config, root_build_dir) _rebased_native_libraries_config = rebase_path(invoker.native_libraries_config, root_build_dir) - _proguard_enabled = - defined(invoker.proguard_enabled) && invoker.proguard_enabled forward_variables_from(invoker, TESTONLY_AND_VISIBILITY) _deps = invoker.deps @@ -4066,10 +4372,7 @@ template("create_android_app_bundle_module") { ":native:secondary_native_library_placeholders)", "--android-abi=$android_app_abi", "--min-sdk-version=${invoker.min_sdk_version}", - "--uncompress-shared-libraries=@FileArg(" + - "$_rebased_build_config:native:uncompress_shared_libraries)", "--library-always-compress=@FileArg($_rebased_build_config:native:library_always_compress)", - "--library-renames=@FileArg($_rebased_build_config:native:library_renames)", ] if (defined(android_app_secondary_abi)) { _rebased_secondary_abi_native_libraries_config = @@ -4088,6 +4391,9 @@ template("create_android_app_bundle_module") { if (defined(invoker.uncompress_dex) && invoker.uncompress_dex) { _args += [ "--uncompress-dex" ] } + if (defined(invoker.extra_assets)) { + _args += [ "--assets=${invoker.extra_assets}" ] + } # Use either provided dex path or build config path based on type of module. if (defined(invoker.dex_path)) { @@ -4098,20 +4404,6 @@ template("create_android_app_bundle_module") { _args += [ "--dex-file=@FileArg($_rebased_build_config:final_dex:path)" ] } - # The library is imported via proguard when proguard is enabled. - if (!_proguard_enabled && enable_jdk_library_desugaring && - invoker.module_name == "base") { - _all_jdk_libs = "//build/android:all_jdk_libs" - _deps += [ _all_jdk_libs ] - _jdk_libs_dex = - get_label_info(_all_jdk_libs, "target_out_dir") + "/all_jdk_libs.l8.dex" - _inputs += [ _jdk_libs_dex ] - _args += [ - "--jdk-libs-dex-file", - rebase_path(_jdk_libs_dex, root_build_dir), - ] - } - if (treat_warnings_as_errors) { _args += [ "--warnings-as-errors" ] } @@ -4176,59 +4468,6 @@ template("create_android_app_bundle_module") { } } -# Splits input dex file(s) based on given feature jars into seperate dex files -# for each feature. -# -# Variables: -# proguard_mapping: Path to input proguard mapping produced by synchronized -# proguarding. -# input_dex_zip: Path to zipped dex files to split. -# all_modules: Path to list of all modules. Each Module must have -# build_config, name, and build_config_target properties. -# feature_jars_args: Optional list of args to be passed to dexsplitter.py. -# If used should include the jars owned by each feature (in the same order -# as all_modules). Allows invoker to pull the list of jars from a different -# .build_config.json than the module's .build_config. -template("dexsplitter") { - action_with_pydeps(target_name) { - forward_variables_from(invoker, [ "deps" ]) - script = "//build/android/gyp/dexsplitter.py" - _stamp = "${target_gen_dir}/${target_name}.stamp" - outputs = [ _stamp ] - - depfile = "${target_gen_dir}/${target_name}.d" - args = [ - "--stamp", - rebase_path(_stamp, root_build_dir), - "--depfile", - rebase_path(depfile, root_build_dir), - "--r8-path", - rebase_path(_r8_path, root_build_dir), - "--input-dex-zip", - rebase_path(invoker.input_dex_zip, root_build_dir), - "--proguard-mapping-file", - rebase_path(invoker.proguard_mapping, root_build_dir), - ] - - foreach(_feature_module, invoker.all_modules) { - _rebased_module_build_config = - rebase_path(_feature_module.build_config, root_build_dir) - args += [ - "--feature-name", - _feature_module.name, - "--dex-dest=@FileArg($_rebased_module_build_config:final_dex:path)", - ] - if (!defined(invoker.feature_jars_args)) { - args += [ "--feature-jars=@FileArg($_rebased_module_build_config:deps_info:device_classpath)" ] - } - deps += [ _feature_module.build_config_target ] - } - if (defined(invoker.feature_jars_args)) { - args += invoker.feature_jars_args - } - } -} - # Allots native libraries depended on by feature modules to the module the # libraries should be packaged into. The packaging module may be different from # the dependee module in case a library is depended on by multiple modules. In diff --git a/build/config/android/jni.gni b/build/config/android/jni.gni new file mode 100644 index 0000000..0b97fa9 --- /dev/null +++ b/build/config/android/jni.gni @@ -0,0 +1,293 @@ +# Copyright 2023 The Chromium Authors +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +import("//build/config/android/config.gni") +import("//build/config/python.gni") +import("//build/partitioned_shared_library.gni") + +declare_args() { + # Enables JNI multiplexing to reduce JNI native methods overhead. + allow_jni_multiplexing = false + + # Use hashed symbol names to reduce JNI symbol overhead. + use_hashed_jni_names = !is_java_debug +} + +# Use a dedicated include dir so that files can #include headers from other +# toolchains without affecting non-JNI #includes. +if (target_os == "android") { + jni_headers_dir = "$root_build_dir/gen/jni_headers" +} else { + # Chrome OS builds cannot share gen/ directories because is_android=false + # within default_toolchain. + jni_headers_dir = "$root_gen_dir/jni_headers" +} + +template("jni_sources_list") { + generated_file(target_name) { + forward_variables_from(invoker, + TESTONLY_AND_VISIBILITY + [ + "deps", + "walk_keys", + ]) + outputs = [ invoker.output ] + data_keys = [ "jni_source_files" ] + rebase = root_build_dir + metadata = { + # This target is just collecting source files used - this is not a + # legitimate dependency. + shared_libraries_barrier = [] + } + } +} + +# Declare a jni registration target. +# +# This target generates a srcjar containing a copy of GEN_JNI.java, which has +# the native methods of all dependent java files. It can also create a .h file +# for use with manual JNI registration. +# +# The script does not scan any generated sources (those within .srcjars, or +# within root_build_dir). This could be fixed by adding deps & logic to scan +# .srcjars, but isn't currently needed. +# +# See third_party/jni_zero/jni_registration_generator.py for more info +# about the format of the header file. +# +# Variables +# java_targets: List of android_* targets that comprise your app. +# native_deps: List of shared_library targets that comprise your app. +# manual_jni_registration: Manually do JNI registration - required for feature +# splits which provide their own native library. (optional) +# namespace: Registration functions will be wrapped into this. (optional) +# require_native_mocks: Enforce that any native calls using +# org.chromium.base.annotations.NativeMethods must have a mock set +# (optional). +# enable_native_mocks: Allow native calls using +# org.chromium.base.annotations.NativeMethods to be mocked in tests +# (optional). +# +# Example +# generate_jni_registration("chrome_jni_registration") { +# java_targets = [ ":chrome_public_apk" ] +# manual_jni_registration = false +# } +template("generate_jni_registration") { + forward_variables_from(invoker, TESTONLY_AND_VISIBILITY) + if (defined(invoker.native_deps)) { + _native_sources_list = "$target_gen_dir/$target_name.nativesources.txt" + jni_sources_list("${target_name}__native_sources") { + deps = invoker.native_deps + output = _native_sources_list + } + } + + _java_sources_list = "$target_gen_dir/$target_name.javasources.txt" + jni_sources_list("${target_name}__java_sources") { + deps = invoker.java_targets + output = _java_sources_list + + # When apk or bundle module targets are uses, do not pull metadata from + # their native library deps. + walk_keys = [ "java_walk_keys" ] + } + + action_with_pydeps(target_name) { + script = "//third_party/jni_zero/jni_zero.py" + inputs = [] + + # Cannot depend on jni_sources_list targets since they likely depend on + # this target via srcjar_deps. Depfiles are used to add the dep instead. + deps = [] + _srcjar_output = "$target_gen_dir/$target_name.srcjar" + outputs = [ _srcjar_output ] + depfile = "$target_gen_dir/$target_name.d" + + args = [ + "generate-final", + "--srcjar-path", + rebase_path(_srcjar_output, root_build_dir), + "--depfile", + rebase_path(depfile, root_build_dir), + "--java-sources-file", + rebase_path(_java_sources_list, root_build_dir), + ] + + if (defined(_native_sources_list)) { + args += [ + "--native-sources-file", + rebase_path(_native_sources_list, root_build_dir), + ] + } + + if (defined(invoker.include_testonly)) { + _include_testonly = invoker.include_testonly + } else { + _include_testonly = defined(testonly) && testonly + } + if (_include_testonly) { + args += [ "--include-test-only" ] + } + + if (use_hashed_jni_names) { + args += [ "--use-proxy-hash" ] + } + + if (defined(invoker.enable_native_mocks) && invoker.enable_native_mocks) { + args += [ "--enable-proxy-mocks" ] + + if (defined(invoker.require_native_mocks) && + invoker.require_native_mocks) { + args += [ "--require-mocks" ] + } + } + + if (defined(invoker.remove_uncalled_jni) && invoker.remove_uncalled_jni) { + args += [ "--remove-uncalled-methods" ] + } + if (defined(invoker.add_stubs_for_missing_jni) && + invoker.add_stubs_for_missing_jni) { + args += [ "--add-stubs-for-missing-native" ] + } + + _manual_jni_registration = defined(invoker.manual_jni_registration) && + invoker.manual_jni_registration + _enable_jni_multiplexing = defined(invoker.enable_jni_multiplexing) && + invoker.enable_jni_multiplexing + if (_manual_jni_registration) { + args += [ "--manual-jni-registration" ] + } + if (_enable_jni_multiplexing) { + args += [ "--enable-jni-multiplexing" ] + } + + if (_manual_jni_registration || _enable_jni_multiplexing) { + _subdir = rebase_path(target_gen_dir, root_gen_dir) + _jni_header_output = + "$jni_headers_dir/$_subdir/${target_name}_generated.h" + outputs += [ _jni_header_output ] + args += [ + "--header-path", + rebase_path(_jni_header_output, root_build_dir), + ] + + # This gives targets depending on this registration access to our generated header. + public_configs = [ "//build/config/android:jni_include_dir" ] + } + + if (defined(invoker.namespace)) { + args += [ "--namespace=${invoker.namespace}" ] + } + + if (defined(invoker.module_name)) { + args += [ "--module-name=${invoker.module_name}" ] + } + } +} + +# This is a wrapper around an underlying native target which inserts JNI +# registration. +# +# The registration is based on the closure of the native target's generate_jni +# transitive dependencies. Additionally, we use provided java_targets to assert +# that our native and Java sides line up. +# +# In order to depend on the JNI registration, use +# __jni_registration. +template("_native_with_jni") { + _needs_native_dep = + (defined(invoker.manual_jni_registration) && + invoker.manual_jni_registration) || allow_jni_multiplexing + if (_needs_native_dep || current_toolchain == default_toolchain) { + _jni_registration_target_name = "${target_name}__jni_registration" + } + + if (current_toolchain == default_toolchain) { + generate_jni_registration(_jni_registration_target_name) { + forward_variables_from(invoker, TESTONLY_AND_VISIBILITY) + native_deps = invoker.deps + + if (allow_jni_multiplexing) { + enable_jni_multiplexing = true + } + if (defined(invoker.testonly) && invoker.testonly) { + enable_native_mocks = true + add_stubs_for_missing_jni = true + remove_uncalled_jni = true + } + forward_variables_from(invoker, + [ + "add_stubs_for_missing_jni", + "java_targets", + "manual_jni_registration", + "module_name", + "namespace", + "remove_uncalled_jni", + ]) + } + } else { + not_needed(invoker, + [ + "add_stubs_for_missing_jni", + "java_targets", + "manual_jni_registration", + "module_name", + "namespace", + "remove_uncalled_jni", + ]) + } + + if (!defined(invoker.enable_target) || invoker.enable_target) { + target(invoker.target_type, target_name) { + deps = invoker.deps + if (_needs_native_dep) { + deps += [ ":$_jni_registration_target_name($default_toolchain)" ] + } + forward_variables_from(invoker, TESTONLY_AND_VISIBILITY) + forward_variables_from(invoker, "*", TESTONLY_AND_VISIBILITY + [ "deps" ]) + } + } else { + not_needed(invoker, "*") + if (current_toolchain != default_toolchain) { + not_needed([ "target_name" ]) + } + } +} + +# native_with_jni for shared libraries - see _native_with_jni for details. +template("shared_library_with_jni") { + _native_with_jni(target_name) { + forward_variables_from(invoker, "*", TESTONLY_AND_VISIBILITY) + forward_variables_from(invoker, TESTONLY_AND_VISIBILITY) + target_type = "shared_library" + } +} +set_defaults("shared_library_with_jni") { + configs = default_shared_library_configs +} + +# native_with_jni for partitioned shared libraries - see _native_with_jni for +# details. +template("partitioned_shared_library_with_jni") { + _native_with_jni(target_name) { + forward_variables_from(invoker, "*", TESTONLY_AND_VISIBILITY) + forward_variables_from(invoker, TESTONLY_AND_VISIBILITY) + target_type = "partitioned_shared_library" + } +} +set_defaults("partitioned_shared_library_with_jni") { + configs = default_shared_library_configs +} + +# native_with_jni for components - see _native_with_jni for details. +template("component_with_jni") { + _native_with_jni(target_name) { + forward_variables_from(invoker, "*", TESTONLY_AND_VISIBILITY) + forward_variables_from(invoker, TESTONLY_AND_VISIBILITY) + target_type = "component" + } +} +set_defaults("component_with_jni") { + configs = default_component_configs +} diff --git a/build/config/android/linker_version_script.gni b/build/config/android/linker_version_script.gni index 7dab722..77d9983 100644 --- a/build/config/android/linker_version_script.gni +++ b/build/config/android/linker_version_script.gni @@ -3,6 +3,7 @@ # found in the LICENSE file. import("//build/config/android/config.gni") +import("//build/config/android/jni.gni") import("//build/config/python.gni") # Generate a custom linker version script that can later be used with @@ -23,14 +24,11 @@ template("generate_linker_version_script") { inputs = [] args = [ "--output=" + rebase_path(invoker.linker_script, root_build_dir) ] - if (defined(invoker.export_java_symbols) && invoker.export_java_symbols) { - args += [ "--export-java-symbols" ] - if (defined(invoker.testonly) && invoker.testonly) { - args += [ "--export-fortesting-java-symbols" ] - } - if (allow_jni_multiplexing) { - args += [ "--jni-multiplexing" ] - } + if (defined(invoker.testonly) && invoker.testonly) { + args += [ "--export-fortesting-java-symbols" ] + } + if (allow_jni_multiplexing) { + args += [ "--jni-multiplexing" ] } if (defined(invoker.export_feature_registrations) && diff --git a/build/config/android/rules.gni b/build/config/android/rules.gni index 191998b..1e42bf0 100644 --- a/build/config/android/rules.gni +++ b/build/config/android/rules.gni @@ -1,26 +1,22 @@ -# Copyright 2014 The Chromium Authors. All rights reserved. +# Copyright 2014 The Chromium Authors # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. # Do not add any imports to non-//build directories here. # Some projects (e.g. V8) do not have non-build directories DEPS'ed in. - -import("//build/config/android/channel.gni") import("//build/config/android/config.gni") -import("//build/config/android/internal_rules.gni") +import("//build/config/android/copy_ex.gni") +import("//build/config/android/jni.gni") import("//build/config/clang/clang.gni") import("//build/config/compiler/compiler.gni") import("//build/config/coverage/coverage.gni") +import("//build/config/profiling/profiling.gni") import("//build/config/python.gni") import("//build/config/rts.gni") +import("//build/config/sanitizers/sanitizers.gni") import("//build/config/zip.gni") import("//build/toolchain/toolchain.gni") - -assert(is_android) - -declare_args() { - enable_jni_tracing = false -} +assert(is_android || is_robolectric) if (target_cpu == "arm") { _sanitizer_arch = "arm" @@ -28,6 +24,8 @@ if (target_cpu == "arm") { _sanitizer_arch = "aarch64" } else if (target_cpu == "x86") { _sanitizer_arch = "i686" +} else if (target_cpu == "riscv64") { + _sanitizer_arch = "riscv64" } _sanitizer_runtimes = [] @@ -38,6 +36,8 @@ if (use_cfi_diag || is_ubsan || is_ubsan_security || is_ubsan_vptr) { _BUNDLETOOL_JAR_PATH = "//third_party/android_build_tools/bundletool/bundletool.jar" +_JAVAP_PATH = "//third_party/jdk/current/bin/javap" + # Creates a dist directory for a native executable. # # Running a native executable on a device requires all the shared library @@ -124,107 +124,152 @@ template("create_native_executable_dist") { } if (enable_java_templates) { - import("//build/config/sanitizers/sanitizers.gni") + if (is_android) { + import("//build/config/android/internal_rules.gni") + } # JNI target implementation. See generate_jni or generate_jar_jni for usage. - template("generate_jni_impl") { - _jni_output_dir = "${target_gen_dir}/${target_name}" - if (defined(invoker.jni_generator_include)) { - _jni_generator_include = invoker.jni_generator_include - _jni_generator_include_deps = [] + template("_generate_jni_impl") { + forward_variables_from(invoker, TESTONLY_AND_VISIBILITY) + if (current_toolchain != default_toolchain && target_os == "android") { + # Rather than regenerating .h files in secondary toolchains, re-use the + # ones from the primary toolchain by depending on it and adding the + # root gen directory to the include paths. + # https://crbug.com/1369398 + group(target_name) { + not_needed(invoker, "*") + public_deps = [ ":$target_name($default_toolchain)" ] + public_configs = + [ "//build/config/android:jni_include_dir($default_toolchain)" ] + } } else { - _jni_generator_include = - "//base/android/jni_generator/jni_generator_helper.h" - _jni_generator_include_deps = [ - # Using //base/android/jni_generator/jni_generator_helper.h introduces - # a dependency on buildflags targets indirectly through - # base/android/jni_android.h, which is part of the //base target. - # This can't depend directly on //base without causing a dependency - # cycle, though. - "//base:debugging_buildflags", - "//base:logging_buildflags", - "//build:chromeos_buildflags", - ] - } + action_with_pydeps(target_name) { + _subdir = rebase_path(target_gen_dir, root_gen_dir) + _jni_output_dir = "$jni_headers_dir/$_subdir/$target_name" + if (defined(invoker.jni_generator_include)) { + _jni_generator_include = invoker.jni_generator_include + _jni_generator_include_deps = [] + } else { + _jni_generator_include = + "//base/android/jni_generator/jni_generator_helper.h" + _jni_generator_include_deps = [ + # Using //base/android/jni_generator/jni_generator_helper.h introduces + # a dependency on buildflags targets indirectly through + # base/android/jni_android.h, which is part of the //base target. + # This can't depend directly on //base without causing a dependency + # cycle, though. + "//base:debugging_buildflags", + "//base:logging_buildflags", + "//build:chromeos_buildflags", + ] + } - action_with_pydeps(target_name) { - # The sources aren't compiled so don't check their dependencies. - check_includes = false - script = "//base/android/jni_generator/jni_generator.py" - forward_variables_from(invoker, - TESTONLY_AND_VISIBILITY + [ - "deps", - "public_deps", - ]) - if (!defined(public_deps)) { - public_deps = [] - } - public_deps += _jni_generator_include_deps - inputs = [] - args = [ - "--ptr_type=long", - "--includes", - rebase_path(_jni_generator_include, _jni_output_dir), - ] + # The sources aren't compiled so don't check their dependencies. + check_includes = false + script = "//third_party/jni_zero/jni_zero.py" + forward_variables_from(invoker, + [ + "deps", + "metadata", + "public_deps", + ]) + if (!defined(public_deps)) { + public_deps = [] + } + public_deps += _jni_generator_include_deps - if (defined(invoker.classes)) { - if (defined(invoker.jar_file)) { - _jar_file = invoker.jar_file + public_configs = [ "//build/config/android:jni_include_dir" ] + if (defined(visibility)) { + # Allow dependency on ourselves from secondary toolchain. + visibility += [ ":$target_name" ] + } + + inputs = [] + outputs = [] + args = [] + if (defined(invoker.classes)) { + args += [ "from-jar" ] } else { - _jar_file = android_sdk_jar + args += [ "from-source" ] } - inputs += [ _jar_file ] args += [ - "--jar_file", - rebase_path(_jar_file, root_build_dir), + "--output-dir", + rebase_path(_jni_output_dir, root_build_dir), + "--extra-include", + rebase_path(_jni_generator_include, _jni_output_dir), ] - _input_args = invoker.classes - _input_names = invoker.classes - if (defined(invoker.always_mangle) && invoker.always_mangle) { - args += [ "--always_mangle" ] - } - if (defined(invoker.unchecked_exceptions) && - invoker.unchecked_exceptions) { - args += [ "--unchecked_exceptions" ] - } - } else { - assert(defined(invoker.sources)) - inputs += invoker.sources - _input_args = rebase_path(invoker.sources, root_build_dir) - _input_names = invoker.sources - if (use_hashed_jni_names) { - args += [ "--use_proxy_hash" ] + + if (defined(invoker.classes)) { + if (is_robolectric) { + not_needed(invoker, [ "jar_file" ]) + } else { + if (defined(invoker.jar_file)) { + _jar_file = invoker.jar_file + } else { + _jar_file = android_sdk_jar + } + inputs += [ + _jar_file, + _JAVAP_PATH, + ] + args += [ + "--jar-file", + rebase_path(_jar_file, root_build_dir), + "--javap", + rebase_path(_JAVAP_PATH, root_build_dir), + ] + } + _input_args = invoker.classes + _input_names = invoker.classes + if (defined(invoker.unchecked_exceptions) && + invoker.unchecked_exceptions) { + args += [ "--unchecked-exceptions" ] + } + } else { + assert(defined(invoker.sources)) + _srcjar_output = "$target_gen_dir/$target_name.srcjar" + args += [ + "--srcjar-path", + rebase_path(_srcjar_output, root_build_dir), + ] + outputs += [ _srcjar_output ] + inputs += invoker.sources + _input_args = rebase_path(invoker.sources, root_build_dir) + _input_names = invoker.sources + if (use_hashed_jni_names) { + args += [ "--use-proxy-hash" ] + } + + if (defined(invoker.enable_jni_multiplexing) && + invoker.enable_jni_multiplexing) { + args += [ "--enable-jni-multiplexing" ] + } + if (defined(invoker.namespace)) { + args += [ "--namespace=${invoker.namespace}" ] + } } - if (defined(invoker.namespace)) { - args += [ "-n ${invoker.namespace}" ] + if (defined(invoker.split_name)) { + args += [ "--split-name=${invoker.split_name}" ] } - } - if (defined(invoker.split_name)) { - args += [ "--split_name=${invoker.split_name}" ] - } - outputs = [] - foreach(_name, _input_names) { - _name_part = get_path_info(_name, "name") - outputs += [ "${_jni_output_dir}/${_name_part}_jni.h" ] - } + foreach(_name, _input_names) { + _name = get_path_info(_name, "name") + "_jni.h" + outputs += [ "$_jni_output_dir/$_name" ] - # Avoid passing GN lists because not all webrtc embedders use //build. - foreach(_output, outputs) { - args += [ - "--output_file", - rebase_path(_output, root_build_dir), - ] - } - foreach(_input, _input_args) { - args += [ "--input_file=$_input" ] - } + # Avoid passing GN lists because not all webrtc embedders use //build. + args += [ + "--output-name", + _name, + ] + } - if (enable_profiling) { - args += [ "--enable_profiling" ] - } - if (enable_jni_tracing) { - args += [ "--enable_tracing" ] + foreach(_input, _input_args) { + args += [ "--input-file=$_input" ] + } + + if (enable_profiling) { + args += [ "--enable_profiling" ] + } } } } @@ -233,7 +278,7 @@ if (enable_java_templates) { # # This target generates the native jni bindings for a set of .java files. # - # See base/android/jni_generator/jni_generator.py for more info about the + # See third_party/jni_zero/jni_generator.py for more info about the # format of generating JNI bindings. # # Variables @@ -252,9 +297,12 @@ if (enable_java_templates) { # ] # } template("generate_jni") { - generate_jni_impl(target_name) { + _generate_jni_impl(target_name) { forward_variables_from(invoker, "*", TESTONLY_AND_VISIBILITY) forward_variables_from(invoker, TESTONLY_AND_VISIBILITY) + metadata = { + jni_source_files = sources + } } } @@ -262,7 +310,7 @@ if (enable_java_templates) { # # This target generates the native jni bindings for a set of classes in a .jar. # - # See base/android/jni_generator/jni_generator.py for more info about the + # See third_party/jni_zero/jni_generator.py for more info about the # format of generating JNI bindings. # # Variables @@ -270,8 +318,6 @@ if (enable_java_templates) { # include the full path to the .class file. # jar_file: the path to the .jar. If not provided, will default to the sdk's # android.jar - # always_mangle: Mangle all generated method names. By default, the script - # only mangles methods that cause ambiguity due to method overload. # unchecked_exceptions: Don't CHECK() for exceptions in generated stubs. # This behaves as if every method had @CalledByNativeUnchecked. # deps, public_deps: As normal @@ -286,117 +332,15 @@ if (enable_java_templates) { # ] # } template("generate_jar_jni") { - generate_jni_impl(target_name) { + _generate_jni_impl(target_name) { forward_variables_from(invoker, "*", TESTONLY_AND_VISIBILITY) forward_variables_from(invoker, TESTONLY_AND_VISIBILITY) } } +} # enable_java_templates - # Declare a jni registration target. - # - # This target generates a srcjar containing a copy of GEN_JNI.java, which has - # the native methods of all dependent java files. It can also create a .h file - # for use with manual JNI registration. - # - # The script does not scan any generated sources (those within .srcjars, or - # within root_build_dir). This could be fixed by adding deps & logic to scan - # .srcjars, but isn't currently needed. - # - # See base/android/jni_generator/jni_registration_generator.py for more info - # about the format of the header file. - # - # Variables - # targets: List of .build_config.json supported targets to provide java sources. - # header_output: Path to the generated .h file (optional). - # sources_exclusions: List of .java files that should be skipped. (optional) - # namespace: Registration functions will be wrapped into this. (optional) - # require_native_mocks: Enforce that any native calls using - # org.chromium.base.annotations.NativeMethods must have a mock set - # (optional). - # enable_native_mocks: Allow native calls using - # org.chromium.base.annotations.NativeMethods to be mocked in tests - # (optional). - # no_transitive_deps: Generate registration for only the Java source in the - # specified target(s). This is useful for generating registration for - # feature modules, without including base module dependencies. - # - # Example - # generate_jni_registration("chrome_jni_registration") { - # targets = [ ":chrome_public_apk" ] - # header_output = "$target_gen_dir/$target_name.h" - # sources_exclusions = [ - # "//path/to/Exception.java", - # ] - # } - template("generate_jni_registration") { - action_with_pydeps(target_name) { - forward_variables_from(invoker, TESTONLY_AND_VISIBILITY) - - script = "//base/android/jni_generator/jni_registration_generator.py" - inputs = [] - deps = [] - _srcjar_output = "$target_gen_dir/$target_name.srcjar" - outputs = [ _srcjar_output ] - depfile = "$target_gen_dir/$target_name.d" - - args = [ - "--srcjar-path", - rebase_path(_srcjar_output, root_build_dir), - "--depfile", - rebase_path(depfile, root_build_dir), - ] - foreach(_target, invoker.targets) { - deps += [ "${_target}$build_config_target_suffix($default_toolchain)" ] - _build_config = - get_label_info("${_target}($default_toolchain)", "target_gen_dir") + - "/" + get_label_info("${_target}($default_toolchain)", "name") + - ".build_config.json" - _rebased_build_config = rebase_path(_build_config, root_build_dir) - inputs += [ _build_config ] - - if (defined(invoker.no_transitive_deps) && invoker.no_transitive_deps) { - args += [ "--sources-files=@FileArg($_rebased_build_config:deps_info:java_sources_file)" ] - } else { - args += [ - # This is a list of .sources files. - "--sources-files=@FileArg($_rebased_build_config:deps_info:jni:all_source)", - ] - } - } - - if (use_hashed_jni_names) { - args += [ "--use_proxy_hash" ] - } - - if (defined(invoker.enable_native_mocks) && invoker.enable_native_mocks) { - args += [ "--enable_proxy_mocks" ] - - if (defined(invoker.require_native_mocks) && - invoker.require_native_mocks) { - args += [ "--require_mocks" ] - } - } - - if (defined(invoker.header_output)) { - outputs += [ invoker.header_output ] - args += [ - "--header-path", - rebase_path(invoker.header_output, root_build_dir), - ] - } - - if (defined(invoker.sources_exclusions)) { - _rebase_sources_exclusions = - rebase_path(invoker.sources_exclusions, root_build_dir) - args += [ "--sources-exclusions=$_rebase_sources_exclusions" ] - } - - if (defined(invoker.namespace)) { - args += [ "--namespace=${invoker.namespace}" ] - } - } - } - +# non-robolectric things +if (enable_java_templates && is_android) { # Declare a target for c-preprocessor-generated java files # # NOTE: For generating Java conterparts to enums prefer using the java_cpp_enum @@ -595,8 +539,8 @@ if (enable_java_templates) { # foo_features.cc: # # // A feature. - # const base::Feature kSomeFeature{"SomeFeature", - # base::FEATURE_DISABLED_BY_DEFAULT}; + # BASE_FEATURE(kSomeFeature, "SomeFeature", + # base::FEATURE_DISABLED_BY_DEFAULT); # # FooFeatures.java.tmpl # @@ -619,7 +563,11 @@ if (enable_java_templates) { # my.java.package. template("java_cpp_features") { action_with_pydeps(target_name) { - forward_variables_from(invoker, TESTONLY_AND_VISIBILITY + [ "sources" ]) + forward_variables_from(invoker, + TESTONLY_AND_VISIBILITY + [ + "deps", + "sources", + ]) # The sources aren't compiled so don't check their dependencies. check_includes = false @@ -697,8 +645,6 @@ if (enable_java_templates) { # version_number: (Optional) String of expected version of 'main' native # library. # enable_chromium_linker: (Optional) Whether to use the Chromium linker. - # load_library_from_apk: (Optional) Whether libraries should be loaded from - # the APK without uncompressing. # use_final_fields: True to use final fields. When false, all other # variables must not be set. template("write_native_libraries_java") { @@ -709,6 +655,8 @@ if (enable_java_templates) { _cpu_family = "CPU_FAMILY_X86" } else if (current_cpu == "mipsel" || current_cpu == "mips64el") { _cpu_family = "CPU_FAMILY_MIPS" + } else if (current_cpu == "riscv64") { + _cpu_family = "CPU_FAMILY_RISCV" } else { assert(false, "Unsupported CPU family") } @@ -726,14 +674,16 @@ if (enable_java_templates) { if (invoker.use_final_fields) { # Write native_libraries_list_file via depfile rather than specifyin it # as a dep in order allow R8 to run in parallel with native compilation. - depfile = "$target_gen_dir/$target_name.d" - args += [ - "--final", - "--depfile", - rebase_path(depfile, root_build_dir), - "--native-libraries-list", - rebase_path(invoker.native_libraries_list_file, root_build_dir), - ] + args += [ "--final" ] + if (defined(invoker.native_libraries_list_file)) { + depfile = "$target_gen_dir/$target_name.d" + args += [ + "--native-libraries-list", + rebase_path(invoker.native_libraries_list_file, root_build_dir), + "--depfile", + rebase_path(depfile, root_build_dir), + ] + } if (defined(invoker.main_component_library)) { args += [ "--main-component-library", @@ -744,13 +694,6 @@ if (enable_java_templates) { invoker.enable_chromium_linker) { args += [ "--enable-chromium-linker" ] } - if (defined(invoker.load_library_from_apk) && - invoker.load_library_from_apk) { - args += [ "--load-library-from-apk" ] - } - if (defined(invoker.use_modern_linker) && invoker.use_modern_linker) { - args += [ "--use-modern-linker" ] - } } } } @@ -1016,9 +959,9 @@ if (enable_java_templates) { } if (defined(invoker.alternative_android_sdk_dep)) { - _deps += [ invoker.alternative_android_sdk_dep ] + _android_sdk_dep = invoker.alternative_android_sdk_dep } else { - _deps += [ "//third_party/android_sdk:android_sdk_java" ] + _android_sdk_dep = default_android_sdk_dep } _resource_files = [] @@ -1057,7 +1000,7 @@ if (enable_java_templates) { ]) r_text = _r_text_out_path - possible_config_deps = _deps + possible_config_deps = _deps + [ _android_sdk_dep ] # Always merge manifests from resources. # * Might want to change this at some point for consistency and clarity, @@ -1070,11 +1013,30 @@ if (enable_java_templates) { prepare_resources(target_name) { forward_variables_from(invoker, [ - "strip_drawables", "allow_missing_resources", + "public_deps", + "strip_drawables", "visibility", ]) - deps = _deps + _lib_deps = filter_exclude(filter_include(_deps, java_library_patterns), + java_resource_patterns) + if (defined(public_deps)) { + # Since java library targets depend directly on sub-targets rather than + # top-level targets, public_deps are not properly propagated, at least + # in terms of the "did you depend on the target that generates your + # inputs" GN check. + assert(filter_include(public_deps, java_target_patterns) == [], + "Java targets should use deps, not public_deps. " + + "target=${target_name}, public_deps=${public_deps}") + } + + # Depend on non-library deps and on __assetres subtargets of library deps. + deps = filter_exclude(_deps, _lib_deps) + [ _android_sdk_dep ] + foreach(_lib_dep, _lib_deps) { + # Expand //foo/java -> //foo/java:java + _lib_dep = get_label_info(_lib_dep, "label_no_toolchain") + deps += [ "${_lib_dep}__assetres" ] + } res_sources_path = _res_sources_path sources = _resource_files @@ -1133,6 +1095,14 @@ if (enable_java_templates) { _build_config = "$target_gen_dir/$target_name.build_config.json" _build_config_target_name = "$target_name$build_config_target_suffix" + _sources = [] + if (defined(invoker.sources)) { + _sources = invoker.sources + } + _renaming_sources = [] + if (defined(invoker.renaming_sources)) { + _renaming_sources = invoker.renaming_sources + } write_build_config(_build_config_target_name) { type = "android_assets" build_config = _build_config @@ -1147,13 +1117,13 @@ if (enable_java_templates) { possible_config_deps = invoker.deps } - if (defined(invoker.sources)) { - asset_sources = invoker.sources + if (_sources != []) { + asset_sources = _sources } - if (defined(invoker.renaming_sources)) { + if (_renaming_sources != []) { assert(defined(invoker.renaming_destinations)) _source_count = 0 - foreach(_, invoker.renaming_sources) { + foreach(_, _renaming_sources) { _source_count += 1 } _dest_count = 0 @@ -1163,14 +1133,36 @@ if (enable_java_templates) { assert( _source_count == _dest_count, "android_assets() renaming_sources.length != renaming_destinations.length") - asset_renaming_sources = invoker.renaming_sources + asset_renaming_sources = _renaming_sources asset_renaming_destinations = invoker.renaming_destinations } } - group(target_name) { - forward_variables_from(invoker, [ "deps" ]) - public_deps = [ ":$_build_config_target_name" ] + # Use an action in order to mark sources as "inputs" to a GN target so that + # GN will fail if the appropriate deps do not exist, and so that "gn refs" + # will know about the sources. We do not add these inputs & deps to the + # __build_config target because we want building .build_config.json files + # to be fast (and because write_build_config.py does not need the files to + # exist). + _all_sources = _sources + _renaming_sources + if (_all_sources != []) { + action(target_name) { + forward_variables_from(invoker, [ "deps" ]) + public_deps = [ ":$_build_config_target_name" ] + + script = "//build/android/gyp/validate_inputs.py" + inputs = _all_sources + outputs = [ "$target_gen_dir/$target_name.stamp" ] + args = [ + "--stamp", + rebase_path(outputs[0], root_build_dir), + ] + rebase_path(_all_sources, root_build_dir) + } + } else { + group(target_name) { + forward_variables_from(invoker, [ "deps" ]) + public_deps = [ ":$_build_config_target_name" ] + } } } @@ -1186,8 +1178,10 @@ if (enable_java_templates) { forward_variables_from(invoker, TESTONLY_AND_VISIBILITY) _build_config_vars = [ "input_jars_paths", + "preferred_dep", "mergeable_android_manifests", "proguard_configs", + "requires_android", ] _invoker_deps = [] if (defined(invoker.deps)) { @@ -1203,17 +1197,34 @@ if (enable_java_templates) { supports_android = true possible_config_deps = _invoker_deps } + + _assetres_deps = filter_include(_invoker_deps, java_resource_patterns) + _invoker_deps_minus_assetres = filter_exclude(_invoker_deps, _assetres_deps) + _lib_deps = + filter_include(_invoker_deps_minus_assetres, java_library_patterns) + + _expanded_lib_deps = [] + foreach(_lib_dep, _lib_deps) { + _expanded_lib_deps += [ get_label_info(_lib_dep, "label_no_toolchain") ] + } foreach(_group_name, [ - "header", - "impl", "assetres", + "header", + "host", + "validate", ]) { - java_lib_group("${target_name}__${_group_name}") { - deps = _invoker_deps - group_name = _group_name + group("${target_name}__$_group_name") { + deps = [] + foreach(_lib_dep, _expanded_lib_deps) { + deps += [ "${_lib_dep}__${_group_name}" ] + } + if (_group_name == "assetres") { + deps += _assetres_deps + } } } + group(target_name) { forward_variables_from(invoker, "*", @@ -1254,10 +1265,6 @@ if (enable_java_templates) { forward_variables_from(invoker, "*", TESTONLY_AND_VISIBILITY) forward_variables_from(invoker, TESTONLY_AND_VISIBILITY) type = "java_binary" - if (!defined(data_deps)) { - data_deps = [] - } - data_deps += [ "//third_party/jdk:java_data" ] } } @@ -1293,90 +1300,165 @@ if (enable_java_templates) { } } - # Declare a Junit executable target + # Declare a Robolectric host side test binary. # - # This target creates an executable from java code for running as a junit test - # suite. The executable will be in the output folder's /bin/ directory. + # This target creates an executable from java code for running as a + # Robolectric test suite. The executable will be in the output folder's /bin/ + # directory. # # Supports all variables of java_binary(). # # Example - # junit_binary("foo") { + # robolectric_binary("foo") { # sources = [ "org/chromium/foo/FooTest.java" ] # deps = [ ":bar_java" ] # } - template("junit_binary") { + template("robolectric_binary") { testonly = true - _java_binary_target_name = "${target_name}__java_binary" - _test_runner_target_name = "${target_name}__test_runner_script" _main_class = "org.chromium.testing.local.JunitTestMain" - _build_config = "$target_gen_dir/$target_name.build_config.json" _build_config_target_name = "$target_name$build_config_target_suffix" - _deps = [ + _java_binary_target_name = "${target_name}__java_binary" + + _invoker_deps = [ "//testing/android/junit:junit_test_support", "//third_party/android_deps:robolectric_all_java", "//third_party/junit", - "//third_party/mockito:mockito_java", + "//third_party/mockito:mockito_jvm_java", ] if (defined(invoker.deps)) { - _deps += invoker.deps - } - if (defined(invoker.alternative_android_sdk_dep)) { - _android_sdk_dep = invoker.alternative_android_sdk_dep - } else { - _android_sdk_dep = "//third_party/android_sdk:android_sdk_java" + _invoker_deps += invoker.deps } + _non_java_deps = filter_exclude(_invoker_deps, java_target_patterns) + _java_assetres_deps = [ ":${_java_binary_target_name}__assetres" ] - # a package name or a manifest is required to have resources. This is + # A package name or a manifest is required to have resources. This is # added so that junit tests that do not care about the package name can # still use resources without having to explicitly set one. if (defined(invoker.package_name)) { _package_name = invoker.package_name } else if (!defined(invoker.android_manifest)) { - _package_name = "org.chromium.test" + _package_name = "no.manifest.configured" } - _resource_arsc_output = "${target_gen_dir}/${target_name}.ap_" - _compile_resources_target = "${target_name}__compile_resources" - compile_resources(_compile_resources_target) { - forward_variables_from(invoker, [ "android_manifest" ]) - deps = _deps - android_sdk_dep = _android_sdk_dep + _merge_manifest_target_name = "${target_name}__merge_manifests" + _android_manifest = + "$target_gen_dir/$target_name.AndroidManifest.merged.xml" + + merge_manifests(_merge_manifest_target_name) { + if (defined(invoker.android_manifest)) { + input_manifest = invoker.android_manifest + } else { + input_manifest = "//build/android/AndroidManifest.xml" + } + + if (defined(_package_name)) { + manifest_package = _package_name + } + output_manifest = _android_manifest + build_config = _build_config + min_sdk_version = default_min_sdk_version + target_sdk_version = android_sdk_version + deps = _non_java_deps + _java_assetres_deps + + [ ":$_build_config_target_name" ] + if (defined(invoker.android_manifest_dep)) { + deps += [ invoker.android_manifest_dep ] + } + } + + _resource_arsc_output = "${target_out_dir}/${target_name}.ap_" + _compile_resources_target_name = "${target_name}__compile_resources" + compile_resources(_compile_resources_target_name) { + deps = _non_java_deps + _java_assetres_deps + + [ ":$_merge_manifest_target_name" ] build_config_dep = ":$_build_config_target_name" build_config = _build_config if (defined(_package_name)) { rename_manifest_package = _package_name } - if (!defined(android_manifest)) { - android_manifest = "//build/android/AndroidManifest.xml" - } + android_manifest = _android_manifest arsc_output = _resource_arsc_output min_sdk_version = default_min_sdk_version target_sdk_version = android_sdk_version } - _jni_srcjar_target = "${target_name}__final_jni" - _outer_target_name = target_name - generate_jni_registration(_jni_srcjar_target) { - enable_native_mocks = true - require_native_mocks = true - targets = [ ":$_outer_target_name" ] + # apkbuilder step needed only to add android assets to the .ap_ file. + _apkbuilder_output = "${target_out_dir}/${target_name}.robo.ap_" + _apkbuilder_target_name = "${target_name}__apkbuilder" + package_apk("$_apkbuilder_target_name") { + build_config = _build_config + min_sdk_version = default_min_sdk_version + deps = _java_assetres_deps + [ + ":$_build_config_target_name", + ":$_compile_resources_target_name", + ] + + is_robolectric_apk = true + packaged_resources_path = _resource_arsc_output + output_apk_path = _apkbuilder_output + } + + # Some may want to disable this to remove dependency on //base + # (JNI generator is in //base). + _generate_final_jni = + !defined(invoker.generate_final_jni) || invoker.generate_final_jni + if (_generate_final_jni) { + _jni_srcjar_deps = [] + if (defined(invoker.shared_libraries)) { + foreach(_dep, invoker.shared_libraries) { + _dep_no_toolchain = get_label_info(_dep, "label_no_toolchain") + _dep_toolchain = get_label_info(_dep, "toolchain") + assert( + _dep_toolchain == robolectric_toolchain, + "$target_name has shared_libraries with incorrect toolchain. " + + "Should contain (\$robolectric_toolchain) suffix: $_dep") + _jni_srcjar_deps += + [ "${_dep_no_toolchain}__jni_registration($default_toolchain)" ] + } + + # Write shared library output files of all dependencies to a file. Those + # will be the shared libraries packaged into the APK. + _shared_library_list_file = "$target_gen_dir/$target_name.native_libs" + generated_file("${target_name}__shared_library_list") { + deps = invoker.shared_libraries + outputs = [ _shared_library_list_file ] + data_keys = [ "shared_libraries" ] + walk_keys = [ "shared_libraries_barrier" ] + rebase = root_build_dir + } + } else { + _jni_srcjar_target_name = "${target_name}__final_jni" + generate_jni_registration(_jni_srcjar_target_name) { + enable_native_mocks = true + require_native_mocks = true + java_targets = [ ":$_java_binary_target_name" ] + add_stubs_for_missing_jni = true + } + _jni_srcjar_deps = [ ":$_jni_srcjar_target_name" ] + } + _native_libraries_target_name = "${target_name}__native_libraries" + write_native_libraries_java(_native_libraries_target_name) { + enable_chromium_linker = false + use_final_fields = true + if (defined(_shared_library_list_file)) { + native_libraries_list_file = _shared_library_list_file + } + } } java_library_impl(_java_binary_target_name) { - forward_variables_from(invoker, "*", TESTONLY_AND_VISIBILITY + [ "deps" ]) - type = "junit_binary" + forward_variables_from(invoker, + "*", + TESTONLY_AND_VISIBILITY + [ + "deps", + "extra_args", + "shared_libraries", + ]) + type = "robolectric_binary" main_target_name = invoker.target_name - # Include the android SDK jar(s) for resource processing. - include_android_sdk = true - - # Robolectric can handle deps that set !supports_android as well those - # that set requires_android. - bypass_platform_checks = true - deps = _deps + deps = _invoker_deps testonly = true main_class = _main_class wrapper_script_name = "helper/$main_target_name" @@ -1386,37 +1468,54 @@ if (enable_java_templates) { # 66%, which makes sharding more effective. tiered_stop_at_level_one = true + is_robolectric = true + include_android_sdk = true + alternative_android_sdk_dep = + "//third_party/robolectric:robolectric_test_sdk_java" + if (!defined(srcjar_deps)) { srcjar_deps = [] } srcjar_deps += [ - ":$_compile_resources_target", - ":$_jni_srcjar_target", - - # This dep is required for any targets that depend on //base:base_java. - "//build/android:build_config_gen", + ":$_compile_resources_target_name", + "//build/android:build_config_for_testing_gen", ] + if (_generate_final_jni) { + srcjar_deps += [ ":$_native_libraries_target_name" ] + _jni_srcjar_deps + } } - test_runner_script(_test_runner_target_name) { - test_name = invoker.target_name - test_suite = invoker.target_name - test_type = "junit" - ignore_all_data_deps = true - resource_apk = _resource_arsc_output - } - - group(target_name) { + test_runner_script(target_name) { forward_variables_from(invoker, [ "assert_no_deps", + "extra_args", "visibility", ]) - public_deps = [ + test_name = invoker.target_name + test_suite = invoker.target_name + test_type = "junit" + ignore_all_data_deps = true + resource_apk = _apkbuilder_output + deps = [ + ":$_apkbuilder_target_name", ":$_build_config_target_name", - ":$_java_binary_target_name", - ":$_test_runner_target_name", + ":${_java_binary_target_name}__host", + ":${_java_binary_target_name}__java_binary_script", + ":${_java_binary_target_name}__validate", + "//third_party/robolectric:robolectric_runtime_jars", ] + if (defined(invoker.shared_libraries)) { + data_deps = invoker.shared_libraries + } + + # Add non-libary deps, since the __host target does not depend on them. + deps += filter_exclude(_invoker_deps, java_library_patterns) + + metadata = { + # Allows metadata collection via apk targets that traverse only java deps. + java_walk_keys = [ ":${_java_binary_target_name}__host" ] + } } } @@ -1530,8 +1629,6 @@ if (enable_java_templates) { # # Variables: # output: Path to the output jar. - # override_build_config: Use a pre-existing .build_config. Must be of type - # "apk". # use_interface_jars: Use all dependent interface .jars rather than # implementation .jars. # use_unprocessed_jars: Use unprocessed / undesugared .jars. @@ -1548,8 +1645,6 @@ if (enable_java_templates) { # TODO(crbug.com/1042017): Remove. not_needed(invoker, [ "no_build_hooks" ]) forward_variables_from(invoker, TESTONLY_AND_VISIBILITY) - _supports_android = - !defined(invoker.supports_android) || invoker.supports_android _use_interface_jars = defined(invoker.use_interface_jars) && invoker.use_interface_jars _use_unprocessed_jars = @@ -1561,30 +1656,23 @@ if (enable_java_templates) { _jar_target_name = target_name - _deps = [] - if (defined(invoker.deps)) { - _deps = invoker.deps - } - if (_supports_android) { - _deps += [ "//third_party/android_sdk:android_sdk_java" ] - } - - if (defined(invoker.override_build_config)) { - _build_config = invoker.override_build_config + if (defined(invoker.build_config)) { + _build_config = invoker.build_config + _build_config_dep = invoker.build_config_dep } else { _build_config = "$target_gen_dir/$target_name.build_config.json" _build_config_target_name = "$target_name$build_config_target_suffix" + _build_config_dep = ":$_build_config_target_name" write_build_config(_build_config_target_name) { type = "dist_jar" - supports_android = _supports_android + supports_android = + !defined(invoker.supports_android) || invoker.supports_android requires_android = defined(invoker.requires_android) && invoker.requires_android - possible_config_deps = _deps + possible_config_deps = invoker.deps build_config = _build_config } - - _deps += [ ":$_build_config_target_name" ] } _rebased_build_config = rebase_path(_build_config, root_build_dir) @@ -1592,7 +1680,22 @@ if (enable_java_templates) { forward_variables_from(invoker, [ "data" ]) script = "//build/android/gyp/zip.py" depfile = "$target_gen_dir/$target_name.d" - deps = _deps + deps = [ _build_config_dep ] + + if (_use_interface_jars) { + _lib_deps = + filter_exclude(filter_include(invoker.deps, java_library_patterns), + java_resource_patterns) + _other_deps = filter_exclude(invoker.deps, _lib_deps) + foreach(_lib_dep, _lib_deps) { + # Expand //foo/java -> //foo/java:java + _lib_dep = get_label_info(_lib_dep, "label_no_toolchain") + deps += [ "${_lib_dep}__header" ] + } + deps += _other_deps + } else { + deps += invoker.deps + } inputs = [ _build_config ] @@ -1627,6 +1730,7 @@ if (enable_java_templates) { args += [ "--input-zips=@FileArg($_rebased_build_config:deps_info:device_classpath)" ] } } + _excludes = [] if (defined(invoker.jar_excluded_patterns)) { _excludes += invoker.jar_excluded_patterns @@ -1635,6 +1739,9 @@ if (enable_java_templates) { # Turbine adds files like: META-INF/TRANSITIVE/.../Foo.class # These confuse proguard: https://crbug.com/1081443 _excludes += [ "META-INF/*" ] + } else { + # Manifest files will never be correct when merging jars. + _excludes += [ "META-INF/*.MF" ] } if (_excludes != []) { args += [ "--input-zips-excluded-globs=$_excludes" ] @@ -1649,6 +1756,8 @@ if (enable_java_templates) { # proguard_enabled: Whether to enable R8. # proguard_configs: List of proguard configs. # proguard_enable_obfuscation: Whether to enable obfuscation (default=true). + # package_name: Used in the Proguard map ID. + # version_code: Used in the Proguard map ID. # # Example # dist_dex("lib_fatjar") { @@ -1656,7 +1765,7 @@ if (enable_java_templates) { # output = "$root_build_dir/MyLibrary.jar" # } template("dist_dex") { - _deps = [ "//third_party/android_sdk:android_sdk_java" ] + _deps = [ default_android_sdk_dep ] if (defined(invoker.deps)) { _deps += invoker.deps } @@ -1677,19 +1786,20 @@ if (enable_java_templates) { build_config = _build_config } - _deps += [ ":$_build_config_target_name" ] - dex(target_name) { forward_variables_from(invoker, TESTONLY_AND_VISIBILITY + [ "data", "data_deps", + "package_name", "proguard_configs", "proguard_enabled", "proguard_enable_obfuscation", "min_sdk_version", + "repackage_classes", + "version_code", ]) - deps = _deps + deps = [ ":$_build_config_target_name" ] + _deps build_config = _build_config enable_multidex = false output = invoker.output @@ -1699,13 +1809,10 @@ if (enable_java_templates) { # per-target dex steps are emitted here since this is using jar files # rather than dex files. ignore_desugar_missing_deps = true - - # When trying to build a stand-alone .dex, don't add in jdk_libs_dex. - supports_jdk_library_desugaring = false } else { _rebased_build_config = rebase_path(_build_config, root_build_dir) input_dex_filearg = - "@FileArg(${_rebased_build_config}:final_dex:all_dex_files)" + "@FileArg(${_rebased_build_config}:deps_info:all_dex_files)" } } } @@ -1730,9 +1837,9 @@ if (enable_java_templates) { # proguard_configs: List of proguard configs (optional). # android_manifest: Path to AndroidManifest.xml (optional). # native_libraries: list of native libraries (optional). - # direct_deps_only: Do not recurse on deps. (optional, defaults false). - # jar_excluded_patterns (optional): List of globs for paths to exclude. - # jar_included_patterns (optional): List of globs for paths to include. + # direct_deps_only: Do not recurse on deps (optional, defaults false). + # jar_excluded_patterns: List of globs for paths to exclude (optional). + # jar_included_patterns: List of globs for paths to include (optional). # # Example # dist_aar("my_aar") { @@ -1742,14 +1849,15 @@ if (enable_java_templates) { template("dist_aar") { forward_variables_from(invoker, TESTONLY_AND_VISIBILITY) + _direct_deps_only = + defined(invoker.direct_deps_only) && invoker.direct_deps_only + _deps = [] + if (defined(invoker.deps)) { - _deps = invoker.deps + _deps += invoker.deps } - _direct_deps_only = - defined(invoker.direct_deps_only) && invoker.direct_deps_only - _build_config = "$target_gen_dir/$target_name.build_config.json" _build_config_target_name = "$target_name$build_config_target_suffix" @@ -1767,7 +1875,11 @@ if (enable_java_templates) { _rebased_build_config = rebase_path(_build_config, root_build_dir) action_with_pydeps(target_name) { - forward_variables_from(invoker, [ "data" ]) + forward_variables_from(invoker, + [ + "data", + "assert_no_deps", + ]) depfile = "$target_gen_dir/$target_name.d" deps = _deps script = "//build/android/gyp/dist_aar.py" @@ -1795,8 +1907,11 @@ if (enable_java_templates) { if (_direct_deps_only) { args += [ "--jars=@FileArg($_rebased_build_config:javac:classpath)" ] } else { - args += [ "--jars=@FileArg($_rebased_build_config:deps_info:javac_full_classpath)" ] + args += [ + "--jars=@FileArg($_rebased_build_config:deps_info:device_classpath)", + ] } + if (defined(invoker.android_manifest)) { args += [ "--android-manifest", @@ -1835,14 +1950,8 @@ if (enable_java_templates) { # Supports all variables of java_library(), plus: # deps: In addition to defining java deps, this can also include # android_assets() and android_resources() targets. - # alternative_android_sdk_ijar: if set, the given android_sdk_ijar file - # replaces the default android_sdk_ijar. - # alternative_android_sdk_ijar_dep: the target that generates - # alternative_android_sdk_ijar, must be set if alternative_android_sdk_ijar - # is used. - # alternative_android_sdk_jar: actual jar corresponding to - # alternative_android_sdk_ijar, must be set if alternative_android_sdk_ijar - # is used. + # alternative_android_sdk_dep: android_system_java_prebuilt target to use + # in place of the default android.jar. # # Example # android_library("foo_java") { @@ -1877,11 +1986,67 @@ if (enable_java_templates) { "*/R\$*.class", "*/Manifest.class", "*/Manifest\$*.class", - "*/GEN_JNI.class", + "*/*GEN_JNI.class", ] } } + # Declare an Android robolectric library target + # + # This target creates an Android library containing java code and Android + # resources. + # + # Supports all variables of java_library(), plus: + # deps: In addition to defining java deps, this can also include + # android_assets() and android_resources() targets. + # + # Example + # robolectric_library("foo_junit") { + # sources = [ + # "android/org/chromium/foo/FooTest.java", + # "android/org/chromium/foo/FooTestUtils.java", + # "android/org/chromium/foo/FooMock.java", + # ] + # deps = [ + # "//base:base_junit_test_support" + # ] + # srcjar_deps = [ + # ":foo_generated_enum" + # ] + # jar_excluded_patterns = [ + # "*/FooService.class", "org/chromium/FooService\$*.class" + # ] + # } + template("robolectric_library") { + java_library(target_name) { + forward_variables_from(invoker, "*", TESTONLY_AND_VISIBILITY) + forward_variables_from(invoker, TESTONLY_AND_VISIBILITY) + + testonly = true + + is_robolectric = true + include_android_sdk = true + alternative_android_sdk_dep = + "//third_party/robolectric:robolectric_test_sdk_java" + + if (!defined(jar_excluded_patterns)) { + jar_excluded_patterns = [] + } + jar_excluded_patterns += [ + "*/R.class", + "*/R\$*.class", + "*/Manifest.class", + "*/Manifest\$*.class", + "*/*GEN_JNI.class", + ] + + if (!defined(deps)) { + deps = [] + } + deps += [ "//third_party/android_deps:robolectric_all_java" ] + } + } + # Declare an Android library target for a prebuilt jar # # This target creates an Android library containing java code and Android @@ -1934,8 +2099,9 @@ if (enable_java_templates) { defines = [] # Set these even when !use_final_fields so that they have correct default - # values within junit_binary(), which ignores jar_excluded_patterns. - if (enable_java_asserts) { + # values within robolectric_binary(), which ignores jar_excluded_patterns. + if ((defined(invoker.assertions_implicitly_enabled) && + invoker.assertions_implicitly_enabled) || enable_java_asserts) { defines += [ "_ENABLE_ASSERTS" ] } if (use_cfi_diag || is_ubsan || is_ubsan_security || is_ubsan_vptr) { @@ -1975,6 +2141,15 @@ if (enable_java_templates) { ] } } + + if (defined(testonly) && testonly) { + defines += [ "_IS_FOR_TEST" ] + } + + if (defined(invoker.write_clang_profiling_data) && + invoker.write_clang_profiling_data) { + defines += [ "_WRITE_CLANG_PROFILING_DATA" ] + } } } @@ -1988,14 +2163,12 @@ if (enable_java_templates) { # is_bundle_module: Whether or not this target is part of a bundle build. # java_package: Java package for the generated class. # use_chromium_linker: - # use_modern_linker: template("generate_product_config_srcjar") { java_cpp_template(target_name) { defines = [] _use_final = defined(invoker.build_config) || - defined(invoker.use_chromium_linker) || - defined(invoker.use_modern_linker) || defined(invoker.is_bundle) + defined(invoker.use_chromium_linker) || defined(invoker.is_bundle) if (_use_final) { defines += [ "USE_FINAL" ] } @@ -2005,12 +2178,9 @@ if (enable_java_templates) { _use_chromium_linker = defined(invoker.use_chromium_linker) && invoker.use_chromium_linker - _use_modern_linker = - defined(invoker.use_modern_linker) && invoker.use_modern_linker _is_bundle = defined(invoker.is_bundle_module) && invoker.is_bundle_module defines += [ "USE_CHROMIUM_LINKER_VALUE=$_use_chromium_linker", - "USE_MODERN_LINKER_VALUE=$_use_modern_linker", "IS_BUNDLE_VALUE=$_is_bundle", ] if (defined(invoker.build_config)) { @@ -2037,8 +2207,7 @@ if (enable_java_templates) { # * dependencies of this .so are not automatically included # * ".cr.so" is never added # * they are not side-loaded when incremental_install=true. - # * load_library_from_apk, use_chromium_linker, - # and enable_relocation_packing do not apply + # * use_chromium_linker, and enable_relocation_packing do not apply # Use this instead of shared_libraries when you are going to load the library # conditionally, and only when shared_libraries doesn't work for you. # secondary_abi_loadable_modules: This is the loadable_modules analog to @@ -2056,13 +2225,10 @@ if (enable_java_templates) { # generate_buildconfig_java: If defined and false, skip generating the # BuildConfig java class describing the build configuration. The default # is true when building with Chromium for non-test APKs. - # generate_final_jni: If defined and false, skip generating the - # GEN_JNI srcjar. - # jni_registration_header: If specified, causes the - # ${target_name}__final_jni target to additionally output a - # header file to this path for use with manual JNI registration. - # jni_sources_exclusions: List of source path to exclude from the - # final_jni step. + # generate_native_libraries_java: If defined, whether NativeLibraries.java is + # generated is solely controlled by this flag. Otherwise, the default behavior + # is NativeLibraries.java will only be generated for the base module/apk when + # its `shared_libraries` is not empty. # aapt_locale_allowlist: If set, all locales not in this list will be # stripped from resources.arsc. # resource_exclusion_regex: Causes all drawable images matching the regex to @@ -2082,10 +2248,8 @@ if (enable_java_templates) { # shared_resources_allowlist_target: Optional name of a target specifying # an input R.txt file that lists the resources that can be exported # by the APK when shared_resources or app_as_shared_lib is defined. - # uncompress_shared_libraries: True if shared libraries should be stored - # uncompressed in the APK. Must be unset or true if load_library_from_apk - # is set to true. # uncompress_dex: Store final .dex files uncompressed in the apk. + # omit_dex: If true, do not build or include classes.dex. # strip_resource_names: True if resource names should be stripped from the # resources.arsc file in the apk or module. # strip_unused_resources: True if unused resources should be stripped from @@ -2103,15 +2267,8 @@ if (enable_java_templates) { # dependent resource targets which override another target set # overlay_resources=true. This check is on for non-test targets and # cannot be disabled. - # static_library_dependent_targets: A list of scopes describing targets that - # use this target as a static library. Common Java code from the targets - # listed in static_library_dependent_targets will be moved into this - # target. Scope members are name and is_resource_ids_provider. # static_library_provider: Specifies a single target that this target will # use as a static library APK. - # static_library_synchronized_proguard: When proguard is enabled, the - # static_library_provider target will provide the dex file(s) for this - # target. # min_sdk_version: The minimum Android SDK version this target supports. # Optional, default $default_min_sdk_version. # target_sdk_version: The target Android SDK version for this target. @@ -2121,9 +2278,6 @@ if (enable_java_templates) { # require_native_mocks: Enforce that any native calls using # org.chromium.base.annotations.NativeMethods must have a mock set # (optional). - # enable_native_mocks: Allow native calls using - # org.chromium.base.annotations.NativeMethods to be mocked in tests - # (optional). # product_config_java_packages: Optional list of java packages. If given, a # ProductConfig.java file will be generated for each package. # enable_proguard_checks: Turns on -checkdiscard directives and missing @@ -2147,10 +2301,11 @@ if (enable_java_templates) { # with this file as the base. template("android_apk_or_module") { forward_variables_from(invoker, TESTONLY_AND_VISIBILITY) - assert(defined(invoker.android_manifest)) + _template_name = target_name _base_path = "$target_out_dir/$target_name/$target_name" _build_config = "$target_gen_dir/$target_name.build_config.json" _build_config_target = "$target_name$build_config_target_suffix" + _java_target_name = "${_template_name}__java" _min_sdk_version = default_min_sdk_version _target_sdk_version = android_sdk_version @@ -2161,8 +2316,6 @@ if (enable_java_templates) { _target_sdk_version = invoker.target_sdk_version } - _template_name = target_name - _is_bundle_module = defined(invoker.is_bundle_module) && invoker.is_bundle_module if (_is_bundle_module) { @@ -2170,6 +2323,7 @@ if (enable_java_templates) { defined(invoker.is_base_module) && invoker.is_base_module } + _omit_dex = defined(invoker.omit_dex) && invoker.omit_dex _enable_multidex = !defined(invoker.enable_multidex) || invoker.enable_multidex @@ -2222,45 +2376,23 @@ if (enable_java_templates) { _version_name = android_override_version_name } - _deps = [] if (defined(invoker.deps)) { - _deps = invoker.deps + _invoker_deps = invoker.deps + } else { + _invoker_deps = [] } + _non_java_deps = filter_exclude(_invoker_deps, java_target_patterns) + _java_assetres_deps = [ ":${_java_target_name}__assetres" ] _srcjar_deps = [] if (defined(invoker.srcjar_deps)) { _srcjar_deps = invoker.srcjar_deps } - _android_root_manifest_deps = [] - if (defined(invoker.android_manifest_dep)) { - _android_root_manifest_deps = [ invoker.android_manifest_dep ] - } - _android_root_manifest = invoker.android_manifest - _use_chromium_linker = defined(invoker.use_chromium_linker) && invoker.use_chromium_linker - _use_modern_linker = - defined(invoker.use_modern_linker) && invoker.use_modern_linker - - _load_library_from_apk = - defined(invoker.load_library_from_apk) && invoker.load_library_from_apk - - not_needed([ - "_use_chromium_linker", - "_use_modern_linker", - ]) - assert(!_load_library_from_apk || _use_chromium_linker, - "load_library_from_apk requires use_chromium_linker") - - # Make sure that uncompress_shared_libraries is set to true if - # load_library_from_apk is true. - if (defined(invoker.uncompress_shared_libraries)) { - _uncompress_shared_libraries = invoker.uncompress_shared_libraries - assert(!_load_library_from_apk || _uncompress_shared_libraries) - } else { - _uncompress_shared_libraries = _load_library_from_apk - } + + not_needed([ "_use_chromium_linker" ]) # The dependency that makes the chromium linker, if any is needed. _native_libs_deps = [] @@ -2313,18 +2445,8 @@ if (enable_java_templates) { _rebased_build_config = rebase_path(_build_config, root_build_dir) assert(_rebased_build_config != "") # Mark as used. - _generate_buildconfig_java = !defined(invoker.apk_under_test) - if (defined(invoker.generate_buildconfig_java)) { - _generate_buildconfig_java = invoker.generate_buildconfig_java - } - - _generate_productconfig_java = defined(invoker.product_config_java_packages) - - # JNI generation usually goes hand-in-hand with buildconfig generation. - _generate_final_jni = _generate_buildconfig_java - if (defined(invoker.generate_final_jni)) { - _generate_final_jni = invoker.generate_final_jni - } + _generate_productconfig_java = + defined(invoker.product_config_java_packages) && !_omit_dex _proguard_enabled = defined(invoker.proguard_enabled) && invoker.proguard_enabled @@ -2333,44 +2455,16 @@ if (enable_java_templates) { _proguard_mapping_path = "$_final_apk_path.mapping" } - # TODO(http://crbug.com/901465): Move shared Java code to static libraries - # when !_proguard_enabled too. - _is_static_library_provider = - defined(invoker.static_library_dependent_targets) && _proguard_enabled - if (_is_static_library_provider) { - _static_library_sync_dex_path = "$_base_path.synchronized.r8dex.jar" - _resource_ids_provider_deps = [] - foreach(_target, invoker.static_library_dependent_targets) { - if (_target.is_resource_ids_provider) { - assert(_resource_ids_provider_deps == [], - "Can only have 1 resource_ids_provider_dep") - _resource_ids_provider_deps += [ _target.name ] - } - } - _resource_ids_provider_dep = _resource_ids_provider_deps[0] - } else if (defined(invoker.resource_ids_provider_dep)) { + if (defined(invoker.resource_ids_provider_dep)) { _resource_ids_provider_dep = invoker.resource_ids_provider_dep } - if (_is_static_library_provider) { - _shared_resources_allowlist_target = _resource_ids_provider_dep - } else if (defined(invoker.shared_resources_allowlist_target)) { + if (defined(invoker.shared_resources_allowlist_target)) { _shared_resources_allowlist_target = invoker.shared_resources_allowlist_target } _uses_static_library = defined(invoker.static_library_provider) - _uses_static_library_synchronized_proguard = - defined(invoker.static_library_synchronized_proguard) && - invoker.static_library_synchronized_proguard - - if (_uses_static_library_synchronized_proguard) { - assert(_uses_static_library) - - # These will be provided by the static library APK. - _generate_buildconfig_java = false - _generate_final_jni = false - } # TODO(crbug.com/864142): Allow incremental installs of bundle modules. _incremental_apk = !_is_bundle_module && @@ -2382,18 +2476,18 @@ if (enable_java_templates) { _incremental_apk_path = "${_final_apk_path_no_ext}_incremental.apk" } - if (!_incremental_apk) { + if (!_incremental_apk && !_omit_dex) { # Bundle modules don't build the dex here, but need to write this path - # to their .build_config.json file. + # to their .build_config.json file only when proguarding. if (_proguard_enabled) { _final_dex_path = "$_base_path.r8dex.jar" - } else { + } else if (!_is_bundle_module) { _final_dex_path = "$_base_path.mergeddex.jar" } } _android_manifest = - "$target_gen_dir/${_template_name}_manifest/AndroidManifest.xml" + "$target_gen_dir/${_template_name}/AndroidManifest.merged.xml" _merge_manifest_target = "${_template_name}__merge_manifests" merge_manifests(_merge_manifest_target) { forward_variables_from(invoker, @@ -2401,15 +2495,21 @@ if (enable_java_templates) { "manifest_package", "max_sdk_version", ]) - input_manifest = _android_root_manifest + input_manifest = invoker.android_manifest output_manifest = _android_manifest build_config = _build_config min_sdk_version = _min_sdk_version target_sdk_version = _target_sdk_version - deps = _android_root_manifest_deps + [ ":$_build_config_target" ] + + # Depend on android_resources() targets that use generated files + # in mergeable_android_manifests (such as android_aar_prebuilt). + deps = _java_assetres_deps + [ ":$_build_config_target" ] + if (defined(invoker.android_manifest_dep)) { + deps += [ invoker.android_manifest_dep ] + } } - _final_deps = [] + _final_deps = [ ":$_java_target_name" ] _enable_main_dex_list = _enable_multidex && _min_sdk_version < 21 if (_enable_main_dex_list) { @@ -2418,18 +2518,6 @@ if (enable_java_templates) { } _generated_proguard_config = "$_base_path.resources.proguard.txt" - if (_generate_buildconfig_java && - defined(invoker.product_version_resources_dep)) { - # Needs to be added as a .build_config.json dep to pick up resources. - _deps += [ invoker.product_version_resources_dep ] - } - - if (defined(invoker.alternative_android_sdk_dep)) { - _android_sdk_dep = invoker.alternative_android_sdk_dep - } else { - _android_sdk_dep = "//third_party/android_sdk:android_sdk_java" - } - if (defined(_shared_resources_allowlist_target)) { _allowlist_gen_dir = get_label_info(_shared_resources_allowlist_target, "target_gen_dir") @@ -2442,35 +2530,55 @@ if (enable_java_templates) { "${_shared_resources_allowlist_target}__compile_resources" } + if (_incremental_apk) { + _incremental_android_manifest = + "$target_gen_dir/${_template_name}/AndroidManifest.incremental.xml" + _incremental_manifest_target_name = "${target_name}__incremental_manifest" + action_with_pydeps(_incremental_manifest_target_name) { + deps = [ ":$_merge_manifest_target" ] + script = + "//build/android/incremental_install/generate_android_manifest.py" + inputs = [ _android_manifest ] + outputs = [ _incremental_android_manifest ] + + args = [ + "--disable-isolated-processes", + "--src-manifest", + rebase_path(_android_manifest, root_build_dir), + "--dst-manifest", + rebase_path(_incremental_android_manifest, root_build_dir), + ] + } + } + _compile_resources_target = "${_template_name}__compile_resources" _compile_resources_rtxt_out = "${target_gen_dir}/${_compile_resources_target}_R.txt" _compile_resources_emit_ids_out = "${target_gen_dir}/${_compile_resources_target}.resource_ids" compile_resources(_compile_resources_target) { - forward_variables_from(invoker, - [ - "aapt_locale_allowlist", - "app_as_shared_lib", - "enforce_resource_overlays_in_tests", - "expected_android_manifest", - "expected_android_manifest_base", - "extra_verification_manifest", - "extra_verification_manifest_dep", - "manifest_package", - "max_sdk_version", - "no_xml_namespaces", - "package_id", - "package_name", - "png_to_webp", - "r_java_root_package_name", - "resource_exclusion_exceptions", - "resource_exclusion_regex", - "resource_values_filter_rules", - "shared_resources", - "shared_resources_allowlist_locales", - "uses_split", - ]) + forward_variables_from( + invoker, + [ + "aapt_locale_allowlist", + "app_as_shared_lib", + "enforce_resource_overlays_in_tests", + "expected_android_manifest", + "expected_android_manifest_base", + "expected_android_manifest_library_version_offset", + "expected_android_manifest_version_code_offset", + "manifest_package", + "max_sdk_version", + "package_id", + "png_to_webp", + "r_java_root_package_name", + "resource_exclusion_exceptions", + "resource_exclusion_regex", + "resource_values_filter_rules", + "shared_resources", + "shared_resources_allowlist_locales", + "uses_split", + ]) android_manifest = _android_manifest android_manifest_dep = ":$_merge_manifest_target" version_code = _version_code @@ -2486,6 +2594,10 @@ if (enable_java_templates) { resource_ids_provider_dep = _resource_ids_provider_dep } + if (defined(invoker.module_name)) { + package_name = invoker.module_name + } + if (defined(invoker.post_process_package_resources_script)) { post_process_script = invoker.post_process_package_resources_script } @@ -2499,15 +2611,11 @@ if (enable_java_templates) { build_config = _build_config build_config_dep = ":$_build_config_target" - android_sdk_dep = _android_sdk_dep - deps = _deps + deps = _java_assetres_deps + _non_java_deps - # The static library uses the R.txt files generated by the - # static_library_dependent_targets when generating the final R.java file. - if (_is_static_library_provider) { - foreach(_dep, invoker.static_library_dependent_targets) { - deps += [ "${_dep.name}__compile_resources" ] - } + if (_incremental_apk) { + android_manifest = _incremental_android_manifest + android_manifest_dep = ":$_incremental_manifest_target_name" } if (defined(invoker.apk_under_test)) { @@ -2563,8 +2671,9 @@ if (enable_java_templates) { _strip_resource_names = defined(invoker.strip_resource_names) && invoker.strip_resource_names && enable_arsc_obfuscation - _strip_unused_resources = defined(invoker.strip_unused_resources) && - invoker.strip_unused_resources + _strip_unused_resources = + defined(invoker.strip_unused_resources) && + invoker.strip_unused_resources && enable_unused_resource_stripping _optimize_resources = _strip_resource_names || _short_resource_paths || _strip_unused_resources } @@ -2578,7 +2687,7 @@ if (enable_java_templates) { } _optimize_resources_target = "${_template_name}__optimize_resources" optimize_resources(_optimize_resources_target) { - deps = _deps + [ ":$_compile_resources_target" ] + deps = _non_java_deps + [ ":$_compile_resources_target" ] short_resource_paths = _short_resource_paths strip_resource_names = _strip_resource_names if (_short_resource_paths) { @@ -2602,6 +2711,13 @@ if (enable_java_templates) { resources_config_paths += invoker.resources_config_paths } } + + if (_strip_unused_resources) { + # Copy the unused resources config to the final bundle output dir. + _copy_unused_resources_target = + "${_template_name}__copy_unused_resources" + _final_deps += [ ":$_copy_unused_resources_target" ] + } } else { not_needed(invoker, [ "resources_config_paths" ]) } @@ -2634,10 +2750,13 @@ if (enable_java_templates) { _final_deps += [ ":$_copy_arsc_target" ] } - _generate_native_libraries_java = - (!_is_bundle_module || _is_base_module) && - (_native_libs_deps != [] || _secondary_abi_native_libs_deps != []) && - !_uses_static_library_synchronized_proguard + if (defined(invoker.generate_native_libraries_java)) { + _generate_native_libraries_java = invoker.generate_native_libraries_java + } else { + _generate_native_libraries_java = + (!_is_bundle_module || _is_base_module) && !_omit_dex && + !defined(invoker.apk_under_test) + } if (_generate_native_libraries_java) { write_native_libraries_java("${_template_name}__native_libraries") { forward_variables_from(invoker, [ "main_component_library" ]) @@ -2645,14 +2764,22 @@ if (enable_java_templates) { # Do not add a dep on the generated_file target in order to avoid having # to build the native libraries before this target. The dependency is # instead captured via a depfile. - if (_native_libs_deps != []) { + if (_uses_static_library) { + _prefix = get_label_info(invoker.static_library_provider, + "target_gen_dir") + "/" + + get_label_info(invoker.static_library_provider, "name") + if (defined(invoker.static_library_provider_use_secondary_abi) && + invoker.static_library_provider_use_secondary_abi) { + native_libraries_list_file = "${_prefix}.secondary_abi_native_libs" + } else { + native_libraries_list_file = "${_prefix}.native_libs" + } + } else if (_native_libs_deps != []) { native_libraries_list_file = _shared_library_list_file - } else { + } else if (_secondary_abi_native_libs_deps != []) { native_libraries_list_file = _secondary_abi_shared_library_list_file } enable_chromium_linker = _use_chromium_linker - load_library_from_apk = _load_library_from_apk - use_modern_linker = _use_modern_linker use_final_fields = true } _srcjar_deps += [ ":${_template_name}__native_libraries" ] @@ -2667,6 +2794,15 @@ if (enable_java_templates) { _loadable_modules += _sanitizer_runtimes } + _assertions_implicitly_enabled = defined(invoker.custom_assertion_handler) + + # Many possible paths where we wouldn't use this variable. + not_needed([ "_assertions_implicitly_enabled" ]) + + _generate_buildconfig_java = !defined(invoker.apk_under_test) && !_omit_dex + if (defined(invoker.generate_buildconfig_java)) { + _generate_buildconfig_java = invoker.generate_buildconfig_java + } if (_generate_buildconfig_java) { generate_build_config_srcjar("${_template_name}__build_config_srcjar") { forward_variables_from(invoker, @@ -2674,15 +2810,19 @@ if (enable_java_templates) { "min_sdk_version", "isolated_splits_enabled", ]) - _bundles_supported = _is_bundle_module || _is_static_library_provider + _bundles_supported = _is_bundle_module if (defined(invoker.bundles_supported)) { _bundles_supported = invoker.bundles_supported } bundles_supported = _bundles_supported use_final_fields = true + assertions_implicitly_enabled = _assertions_implicitly_enabled enable_multidex = _enable_multidex is_incremental_install = _incremental_apk - if (defined(invoker.product_version_resources_dep)) { + write_clang_profiling_data = + use_clang_coverage && _generate_native_libraries_java + if (defined(invoker.build_config_include_product_version_resource) && + invoker.build_config_include_product_version_resource) { resources_version_variable = "org.chromium.base.R.string.product_version" } @@ -2700,55 +2840,21 @@ if (enable_java_templates) { build_config = _build_config java_package = _package use_chromium_linker = _use_chromium_linker - use_modern_linker = _use_modern_linker deps = [ ":$_build_config_target" ] } _srcjar_deps += [ ":$_locale_target_name" ] } } - if (_generate_final_jni) { - generate_jni_registration("${_template_name}__final_jni") { - forward_variables_from(invoker, - [ - "enable_native_mocks", - "require_native_mocks", - ]) - if (defined(invoker.bundle_target)) { - targets = [ invoker.bundle_target ] - } else { - targets = [ ":$_template_name" ] - } - if (_is_static_library_provider) { - foreach(_target, invoker.static_library_dependent_targets) { - targets += [ _target.name ] - } - } - if (defined(invoker.jni_registration_header)) { - header_output = invoker.jni_registration_header - } - if (defined(invoker.jni_sources_exclusions)) { - sources_exclusions = invoker.jni_sources_exclusions - } - } - _srcjar_deps += [ ":${_template_name}__final_jni" ] - } else { - not_needed(invoker, - [ - "enable_native_mocks", - "jni_registration_header", - ]) - } - - _java_target = "${_template_name}__java" - if (_is_bundle_module) { _add_view_trace_events = defined(invoker.add_view_trace_events) && invoker.add_view_trace_events && enable_trace_event_bytecode_rewriting } - java_library_impl(_java_target) { + # We cannot skip this target when omit_dex = true because it writes the + # build_config.json. + java_library_impl(_java_target_name) { forward_variables_from(invoker, [ "alternative_android_sdk_dep", @@ -2758,41 +2864,29 @@ if (enable_java_templates) { "apk_under_test", "base_module_target", "chromium_code", + "deps", "jacoco_never_instrument", "jar_excluded_patterns", "javac_args", + "mergeable_android_manifests", "native_lib_placeholders", + "parent_module_target", "processor_args_javac", "secondary_abi_loadable_modules", "secondary_native_lib_placeholders", "sources", - "static_library_dependent_targets", "library_always_compress", - "library_renames", ]) - deps = _deps - if (_uses_static_library_synchronized_proguard) { - if (!defined(jar_excluded_patterns)) { - jar_excluded_patterns = [] - } - - # The static library will provide all R.java files, but we still need to - # make the base module R.java files available at compile time since DFM - # R.java classes extend base module classes. - jar_excluded_patterns += [ - "*/R.class", - "*/R\$*.class", - ] - } + version_code = _version_code + version_name = _version_name if (_is_bundle_module) { type = "android_app_bundle_module" res_size_info_path = _res_size_info_path - is_base_module = _is_base_module - forward_variables_from(invoker, - [ - "version_code", - "version_name", - ]) + if (defined(invoker.module_name)) { + module_name = invoker.module_name + } else { + module_name = "base" + } add_view_trace_events = _add_view_trace_events } else { type = "android_apk" @@ -2829,11 +2923,6 @@ if (enable_java_templates) { if (defined(invoker.proguard_configs)) { proguard_configs += invoker.proguard_configs } - if (!enable_java_asserts && (!defined(testonly) || !testonly) && - # Injected JaCoCo code causes -checkdiscards to fail. - !use_jacoco_coverage) { - proguard_configs += [ "//build/android/dcheck_is_off.flags" ] - } if (!_is_bundle_module) { proguard_mapping_path = _proguard_mapping_path } @@ -2852,192 +2941,132 @@ if (enable_java_templates) { loadable_modules = _loadable_modules - uncompress_shared_libraries = _uncompress_shared_libraries - if (defined(_allowlist_r_txt_path) && _is_bundle_module) { # Used to write the file path to the target's .build_config.json only. base_allowlist_rtxt_path = _allowlist_r_txt_path } } - # TODO(cjhopman): This is only ever needed to calculate the list of tests to - # run. See build/android/pylib/instrumentation/test_jar.py. We should be - # able to just do that calculation at build time instead. - if (defined(invoker.dist_ijar_path)) { - _dist_ijar_path = invoker.dist_ijar_path - dist_jar("${_template_name}_dist_ijar") { - override_build_config = _build_config - output = _dist_ijar_path - data = [ _dist_ijar_path ] - use_interface_jars = true - deps = [ - ":$_build_config_target", - ":$_java_target", - ] + # Old name for variable, mark as not_needed while it is being renamed + # downstream. Remove after all references to baseline_profile_path have been + # changed. + not_needed(invoker, [ "baseline_profile_path" ]) + + _enable_art_profile_optimizations = + defined(invoker.art_profile_path) && _proguard_enabled + + if (_enable_art_profile_optimizations) { + _include_baseline_profile = enable_baseline_profiles + _enable_startup_profile = enable_startup_profiles + if (_include_baseline_profile) { + _obfuscated_art_profile = + "$target_out_dir/${target_name}.obfuscated.hrf" } + } else { + not_needed(invoker, [ "art_profile_path" ]) } - if (_uses_static_library_synchronized_proguard) { - _final_dex_target_dep = "${invoker.static_library_provider}__dexsplitter" - } else if (_is_bundle_module && _proguard_enabled) { - _final_deps += [ ":$_java_target" ] + if (_is_bundle_module || _omit_dex) { + # Dex generation for app bundle modules take place in the + # android_app_bundle template. + not_needed(invoker, [ "custom_assertion_handler" ]) } else if (_incremental_apk) { - if (defined(invoker.enable_proguard_checks)) { - not_needed(invoker, [ "enable_proguard_checks" ]) - } + not_needed(invoker, + [ + "enable_proguard_checks", + "custom_assertion_handler", + ]) } else { - # Dex generation for app bundle modules with proguarding enabled takes - # place later due to synchronized proguarding. _final_dex_target_name = "${_template_name}__final_dex" dex(_final_dex_target_name) { forward_variables_from(invoker, [ "enable_proguard_checks", + "custom_assertion_handler", "proguard_enable_obfuscation", + "repackage_classes", ]) min_sdk_version = _min_sdk_version proguard_enabled = _proguard_enabled build_config = _build_config + output = _final_dex_path + enable_multidex = _enable_multidex deps = [ ":$_build_config_target", - ":$_java_target", + ":$_java_target_name", ] if (_proguard_enabled) { - deps += _deps + [ ":$_compile_resources_target" ] + # Generates proguard configs + deps += [ ":$_compile_resources_target" ] proguard_mapping_path = _proguard_mapping_path - proguard_sourcefile_suffix = "$android_channel-$_version_code" has_apk_under_test = defined(invoker.apk_under_test) - } else if (_min_sdk_version >= default_min_sdk_version) { - # Enable dex merging only when min_sdk_version is >= what the library - # .dex files were created with. - input_dex_filearg = - "@FileArg(${_rebased_build_config}:final_dex:all_dex_files)" - } else { - input_classes_filearg = - "@FileArg($_rebased_build_config:deps_info:device_classpath)" - } - if (_is_static_library_provider) { - # The list of input jars is already recorded in the .build_config.json, but - # we need to explicitly add the java deps here to ensure they're - # available to be used as inputs to the dex step. - foreach(_dep, invoker.static_library_dependent_targets) { - _target_label = get_label_info(_dep.name, "label_no_toolchain") - deps += [ "${_target_label}__java" ] + if (_enable_art_profile_optimizations) { + input_art_profile = invoker.art_profile_path + if (_include_baseline_profile) { + output_art_profile = _obfuscated_art_profile + } + enable_startup_profile = _enable_startup_profile + } + + # Must not be set via write_build_config, because that will cause it + # to be picked up by test apks that use apk_under_test. + if (!_assertions_implicitly_enabled && !enable_java_asserts && + (!defined(testonly) || !testonly) && + # Injected JaCoCo code causes -checkdiscards to fail. + !use_jacoco_coverage) { + proguard_configs = [ "//build/android/dcheck_is_off.flags" ] } - output = _static_library_sync_dex_path - is_static_library = true } else { - output = _final_dex_path + if (_min_sdk_version >= default_min_sdk_version) { + # Enable dex merging only when min_sdk_version is >= what the library + # .dex files were created with. + input_dex_filearg = + "@FileArg(${_rebased_build_config}:deps_info:all_dex_files)" + + # Pure dex-merge. + enable_desugar = false + } else { + input_classes_filearg = + "@FileArg($_rebased_build_config:deps_info:device_classpath)" + } } - enable_multidex = _enable_multidex # The individual dependencies would have caught real missing deps in # their respective dex steps. False positives that were suppressed at # per-target dex steps are emitted here since this may use jar files # rather than dex files. - ignore_desugar_missing_deps = true + if (!defined(enable_desugar)) { + ignore_desugar_missing_deps = true + } if (_enable_main_dex_list) { - extra_main_dex_proguard_config = _generated_proguard_main_dex_config + # Generates main-dex config. deps += [ ":$_compile_resources_target" ] + extra_main_dex_proguard_config = _generated_proguard_main_dex_config } } _final_dex_target_dep = ":$_final_dex_target_name" - # For static libraries, a single Proguard run is performed that includes - # code from the static library APK and the APKs that use the static - # library (done via. classpath merging in write_build_config.py). - # This dexsplitter target splits the synchronized dex output into dex - # files for each APK/Bundle. In the Bundle case, another dexsplitter step - # is later performed to split the dex further for each feature module. - if (_is_static_library_provider && _proguard_enabled) { - _static_library_modules = [] - foreach(_target, invoker.static_library_dependent_targets) { - _apk_as_module = _target.name - _module_config_target = "${_apk_as_module}$build_config_target_suffix" - _module_gen_dir = get_label_info(_apk_as_module, "target_gen_dir") - _module_name = get_label_info(_apk_as_module, "name") - _module_config = "$_module_gen_dir/$_module_name.build_config.json" - _static_library_modules += [ - { - name = _module_name - build_config = _module_config - build_config_target = _module_config_target - }, - ] - } - - _static_library_dexsplitter_target = "${_template_name}__dexsplitter" - dexsplitter(_static_library_dexsplitter_target) { - input_dex_zip = _static_library_sync_dex_path - proguard_mapping = _proguard_mapping_path - deps = [ - ":$_build_config_target", - "$_final_dex_target_dep", - ] - all_modules = [ - { - name = "base" - build_config = _build_config - build_config_target = ":$_build_config_target" - }, - ] + _static_library_modules - feature_jars_args = [ - "--feature-jars", - "@FileArg($_rebased_build_config:deps_info:" + - "static_library_dependent_classpath_configs:" + - "$_rebased_build_config)", - ] - foreach(_module, _static_library_modules) { - _rebased_module_config = - rebase_path(_module.build_config, root_build_dir) - feature_jars_args += [ - "--feature-jars", - "@FileArg($_rebased_build_config:deps_info:" + - "static_library_dependent_classpath_configs:" + - "$_rebased_module_config)", - ] - } - } - _final_deps += [ ":$_static_library_dexsplitter_target" ] - _validate_dex_target = "${_template_name}__validate_dex" - action_with_pydeps(_validate_dex_target) { - depfile = "$target_gen_dir/$target_name.d" - script = - "//build/android/gyp/validate_static_library_dex_references.py" - inputs = [ _build_config ] - _stamp = "$target_gen_dir/$target_name.stamp" - outputs = [ _stamp ] + if (_enable_art_profile_optimizations && _include_baseline_profile) { + _binary_profile_target = "${_template_name}__binary_baseline_profile" + _binary_baseline_profile_path = + "$target_out_dir/$_template_name.baseline.prof" + _binary_baseline_profile_metadata_path = + _binary_baseline_profile_path + "m" + create_binary_profile(_binary_profile_target) { + forward_variables_from(invoker, TESTONLY_AND_VISIBILITY) + binary_baseline_profile_path = _binary_baseline_profile_path + binary_baseline_profile_metadata_path = + _binary_baseline_profile_metadata_path + build_config = _build_config + input_profile_path = _obfuscated_art_profile deps = [ ":$_build_config_target", - ":$_static_library_dexsplitter_target", - ] - args = [ - "--depfile", - rebase_path(depfile, root_build_dir), - "--stamp", - rebase_path(_stamp, root_build_dir), - "--static-library-dex", - "@FileArg($_rebased_build_config:final_dex:path)", + _final_dex_target_dep, ] - foreach(_module, _static_library_modules) { - inputs += [ _module.build_config ] - _rebased_config = rebase_path(_module.build_config, root_build_dir) - deps += [ _module.build_config_target ] - args += [ - "--static-library-dependent-dex", - "@FileArg($_rebased_config:final_dex:path)", - ] - } } - - # TODO(crbug.com/1032609): Switch to using R8's support for feature - # aware ProGuard and get rid of "_validate_dex_target" or figure out - # why some classes aren't properly being kept. - # _final_deps += [ ":$_validate_dex_target" ] - _final_dex_target_dep = ":$_static_library_dexsplitter_target" } } @@ -3054,9 +3083,9 @@ if (enable_java_templates) { if (_is_bundle_module) { _final_deps += [ - ":$_merge_manifest_target", ":$_build_config_target", ":$_compile_resources_target", + ":$_merge_manifest_target", ] + _all_native_libs_deps if (_optimize_resources) { _final_deps += [ ":$_optimize_resources_target" ] @@ -3077,11 +3106,11 @@ if (enable_java_templates) { name = "${invoker.name}.apk" build_config = _build_config res_size_info_path = _res_size_info_path - deps = _deps + [ - ":$_build_config_target", - ":$_compile_resources_target", - ":$_java_target", - ] + deps = [ + ":$_build_config_target", + ":$_compile_resources_target", + ":$_java_target_name", + ] } _final_deps += [ ":$_size_info_target" ] } else { @@ -3089,51 +3118,6 @@ if (enable_java_templates) { } } - _keystore_path = android_keystore_path - _keystore_name = android_keystore_name - _keystore_password = android_keystore_password - - if (defined(invoker.keystore_path)) { - _keystore_path = invoker.keystore_path - _keystore_name = invoker.keystore_name - _keystore_password = invoker.keystore_password - } - - if (_incremental_apk) { - _incremental_compiled_resources_path = "${_base_path}_incremental.ap_" - _incremental_compile_resources_target_name = - "${target_name}__compile_incremental_resources" - - action_with_pydeps(_incremental_compile_resources_target_name) { - deps = [ - ":$_build_config_target", - ":$_compile_resources_target", - ":$_merge_manifest_target", - ] - script = - "//build/android/incremental_install/generate_android_manifest.py" - inputs = [ - _android_manifest, - _build_config, - _arsc_resources_path, - ] - outputs = [ _incremental_compiled_resources_path ] - - args = [ - "--disable-isolated-processes", - "--src-manifest", - rebase_path(_android_manifest, root_build_dir), - "--in-apk", - rebase_path(_arsc_resources_path, root_build_dir), - "--out-apk", - rebase_path(_incremental_compiled_resources_path, root_build_dir), - "--aapt2-path", - rebase_path(android_sdk_tools_bundle_aapt2, root_build_dir), - "--android-sdk-jars=@FileArg($_rebased_build_config:android:sdk_jars)", - ] - } - } - _create_apk_target = "${_template_name}__create" _final_deps += [ ":$_create_apk_target" ] package_apk("$_create_apk_target") { @@ -3141,13 +3125,14 @@ if (enable_java_templates) { [ "expected_libs_and_assets", "expected_libs_and_assets_base", + "keystore_name", + "keystore_path", + "keystore_password", "native_lib_placeholders", "secondary_abi_loadable_modules", "secondary_native_lib_placeholders", "uncompress_dex", - "uncompress_shared_libraries", "library_always_compress", - "library_renames", ]) if (defined(expected_libs_and_assets)) { @@ -3156,32 +3141,27 @@ if (enable_java_templates) { } build_config = _build_config - keystore_name = _keystore_name - keystore_path = _keystore_path - keystore_password = _keystore_password min_sdk_version = _min_sdk_version - uncompress_shared_libraries = _uncompress_shared_libraries - - deps = _deps + [ ":$_build_config_target" ] + packaged_resources_path = _arsc_resources_path - if ((!_proguard_enabled || _incremental_apk) && - enable_jdk_library_desugaring) { - _all_jdk_libs = "//build/android:all_jdk_libs" - deps += [ _all_jdk_libs ] - jdk_libs_dex = get_label_info(_all_jdk_libs, "target_out_dir") + - "/all_jdk_libs.l8.dex" - } + # Need full deps rather than _non_java_deps, because loadable_modules + # may include .so files extracted by __unpack_aar targets. + deps = _invoker_deps + [ ":$_build_config_target" ] if (_incremental_apk) { _dex_target = "//build/android/incremental_install:apk_dex" deps += [ - ":${_incremental_compile_resources_target_name}", + ":$_compile_resources_target", _dex_target, ] dex_path = get_label_info(_dex_target, "target_out_dir") + "/apk.dex" + # Incremental APKs cannot be installed via `adb install` as such they + # should be clearly named/labeled "incremental". + output_apk_path = _incremental_apk_path + # All native libraries are side-loaded, so use a placeholder to force # the proper bitness for the app. _has_native_libs = @@ -3189,28 +3169,35 @@ if (enable_java_templates) { if (_has_native_libs && !defined(native_lib_placeholders)) { native_lib_placeholders = [ "libfix.crbug.384638.so" ] } - - packaged_resources_path = _incremental_compiled_resources_path - output_apk_path = _incremental_apk_path } else { loadable_modules = _loadable_modules deps += _all_native_libs_deps + [ - ":$_merge_manifest_target", ":$_compile_resources_target", + ":$_merge_manifest_target", ] if (defined(_final_dex_path)) { dex_path = _final_dex_path deps += [ _final_dex_target_dep ] + if (_enable_art_profile_optimizations && + _include_baseline_profile) { + # extra_assets is a list of ["{src_path}:{dst_path}"] + extra_assets = [ + rebase_path(_binary_baseline_profile_path, root_build_dir) + + ":dexopt/baseline.prof", + rebase_path(_binary_baseline_profile_metadata_path, + root_build_dir) + ":dexopt/baseline.profm", + ] + deps += [ ":$_binary_profile_target" ] + } } - packaged_resources_path = _arsc_resources_path + output_apk_path = _final_apk_path if (defined(_native_libs_filearg)) { native_libs_filearg = _native_libs_filearg secondary_abi_native_libs_filearg = "@FileArg($_rebased_build_config:native:secondary_abi_libraries)" } - output_apk_path = _final_apk_path } } } @@ -3232,7 +3219,7 @@ if (enable_java_templates) { args = [ "--apk-path=$_rebased_incremental_apk_path", "--output-path=$_rebased_incremental_install_json_path", - "--dex-file=@FileArg($_rebased_build_config:final_dex:all_dex_files)", + "--dex-file=@FileArg($_rebased_build_config:deps_info:all_dex_files)", ] if (_proguard_enabled) { args += [ "--show-proguard-warning" ] @@ -3247,10 +3234,7 @@ if (enable_java_templates) { args += [ "--native-libs=$_rebased_loadable_modules" ] } } - _final_deps += [ - ":$_java_target", - ":$_write_installer_json_rule_name", - ] + _final_deps += [ ":$_write_installer_json_rule_name" ] } # Generate apk operation related script. @@ -3337,7 +3321,9 @@ if (enable_java_templates) { ]) build_config = _build_config build_config_dep = ":$_build_config_target" - deps = [ ":$_java_target" ] + + # This will use library subtargets under-the-hood + deps = [ ":$_java_target_name" ] if (defined(invoker.lint_suppressions_dep)) { deps += [ invoker.lint_suppressions_dep ] } @@ -3349,6 +3335,7 @@ if (enable_java_templates) { not_needed(invoker, [ "lint_baseline_file", + "lint_jar_path", "lint_min_sdk_version", "lint_suppressions_dep", "lint_suppressions_file", @@ -3361,8 +3348,15 @@ if (enable_java_templates) { "assert_no_deps", "data", "data_deps", - "metadata", ]) + metadata = { + if (defined(invoker.metadata)) { + forward_variables_from(invoker.metadata, "*") + } + + # Allows metadata collection via apk targets that traverse only java deps. + java_walk_keys = [ ":$_java_target_name" ] + } # Generate apk related operations at runtime. public_deps = _final_deps @@ -3372,8 +3366,7 @@ if (enable_java_templates) { } # Include unstripped native libraries so tests can symbolize stacks. - data_deps += _all_native_libs_deps - + data_deps += _all_native_libs_deps + [ ":${_java_target_name}__validate" ] if (_enable_lint) { data_deps += [ ":${target_name}__lint" ] } @@ -3415,96 +3408,97 @@ if (enable_java_templates) { # TODO(crbug.com/1042017): Remove. not_needed(invoker, [ "no_build_hooks" ]) android_apk_or_module(target_name) { - forward_variables_from(invoker, - [ - "aapt_locale_allowlist", - "additional_jar_files", - "alternative_android_sdk_dep", - "android_manifest", - "android_manifest_dep", - "annotation_processor_deps", - "apk_under_test", - "app_as_shared_lib", - "assert_no_deps", - "bundles_supported", - "chromium_code", - "command_line_flags_file", - "create_apk_script", - "data", - "data_deps", - "deps", - "dist_ijar_path", - "enable_lint", - "enable_multidex", - "enable_native_mocks", - "enable_proguard_checks", - "enforce_resource_overlays_in_tests", - "expected_android_manifest", - "expected_android_manifest_base", - "expected_libs_and_assets", - "expected_libs_and_assets_base", - "generate_buildconfig_java", - "generate_final_jni", - "include_size_info", - "input_jars_paths", - "use_modern_linker", - "jacoco_never_instrument", - "javac_args", - "jni_registration_header", - "jni_sources_exclusions", - "keystore_name", - "keystore_password", - "keystore_path", - "lint_baseline_file", - "lint_min_sdk_version", - "lint_suppressions_dep", - "lint_suppressions_file", - "load_library_from_apk", - "loadable_modules", - "manifest_package", - "max_sdk_version", - "product_config_java_packages", - "main_component_library", - "min_sdk_version", - "native_lib_placeholders", - "never_incremental", - "no_xml_namespaces", - "png_to_webp", - "post_process_package_resources_script", - "processor_args_javac", - "product_version_resources_dep", - "proguard_configs", - "proguard_enabled", - "proguard_enable_obfuscation", - "r_java_root_package_name", - "resource_exclusion_exceptions", - "resource_exclusion_regex", - "resource_ids_provider_dep", - "resource_values_filter_rules", - "require_native_mocks", - "secondary_abi_loadable_modules", - "secondary_abi_shared_libraries", - "secondary_native_lib_placeholders", - "shared_libraries", - "shared_resources", - "shared_resources_allowlist_locales", - "shared_resources_allowlist_target", - "sources", - "srcjar_deps", - "static_library_dependent_targets", - "static_library_provider", - "static_library_synchronized_proguard", - "target_sdk_version", - "testonly", - "uncompress_dex", - "uncompress_shared_libraries", - "library_always_compress", - "library_renames", - "use_chromium_linker", - "version_code", - "version_name", - "visibility", - ]) + forward_variables_from( + invoker, + [ + "aapt_locale_allowlist", + "additional_jar_files", + "allow_unused_jni_from_native", + "alternative_android_sdk_dep", + "android_manifest", + "android_manifest_dep", + "annotation_processor_deps", + "apk_under_test", + "app_as_shared_lib", + "art_profile_path", + "assert_no_deps", + "baseline_profile_path", + "build_config_include_product_version_resource", + "bundles_supported", + "chromium_code", + "command_line_flags_file", + "create_apk_script", + "custom_assertion_handler", + "data", + "data_deps", + "deps", + "enable_lint", + "enable_jni_multiplexing", + "enable_multidex", + "enable_proguard_checks", + "enforce_resource_overlays_in_tests", + "expected_android_manifest", + "expected_android_manifest_base", + "expected_android_manifest_library_version_offset", + "expected_android_manifest_version_code_offset", + "expected_libs_and_assets", + "expected_libs_and_assets_base", + "generate_buildconfig_java", + "generate_native_libraries_java", + "include_size_info", + "input_jars_paths", + "jacoco_never_instrument", + "javac_args", + "keystore_name", + "keystore_password", + "keystore_path", + "lint_baseline_file", + "lint_min_sdk_version", + "lint_suppressions_dep", + "lint_suppressions_file", + "loadable_modules", + "manifest_package", + "max_sdk_version", + "mergeable_android_manifests", + "product_config_java_packages", + "main_component_library", + "min_sdk_version", + "native_lib_placeholders", + "never_incremental", + "omit_dex", + "png_to_webp", + "post_process_package_resources_script", + "processor_args_javac", + "proguard_configs", + "proguard_enabled", + "proguard_enable_obfuscation", + "r_java_root_package_name", + "repackage_classes", + "resource_exclusion_exceptions", + "resource_exclusion_regex", + "resource_ids_provider_dep", + "resource_values_filter_rules", + "require_native_mocks", + "secondary_abi_loadable_modules", + "secondary_abi_shared_libraries", + "secondary_native_lib_placeholders", + "shared_libraries", + "shared_resources", + "shared_resources_allowlist_locales", + "shared_resources_allowlist_target", + "sources", + "srcjar_deps", + "static_library_provider", + "static_library_provider_use_secondary_abi", + "target_sdk_version", + "testonly", + "uncompress_dex", + "library_always_compress", + "use_chromium_linker", + "version_code", + "version_name", + "visibility", + ]) is_bundle_module = false name = invoker.apk_name if (defined(invoker.final_apk_path)) { @@ -3514,10 +3508,14 @@ if (enable_java_templates) { } metadata = { install_artifacts = [ final_apk_path ] + if (defined(invoker.static_library_provider)) { + install_artifacts_barrier = [] + } } - if (defined(invoker.static_library_provider)) { - metadata.install_artifacts_barrier = [] - } + + # TODO(smaier) - there were some remaining usages of this in angle. Once + # they are removed, remove this line. + not_needed(invoker, [ "generate_final_jni" ]) } } @@ -3531,8 +3529,6 @@ if (enable_java_templates) { # base module (optional). # base_module_target: Base module target of the bundle this module will be # added to (optional). Can only be specified for non-base modules. - # bundle_target: Bundle target that this module belongs to (optional). - # Can only be specified for base modules. template("android_app_bundle_module") { _is_base_module = defined(invoker.is_base_module) && invoker.is_base_module @@ -3544,7 +3540,15 @@ if (enable_java_templates) { assert(!defined(invoker.shared_resources_allowlist_target)) assert(!defined(invoker.shared_resources_allowlist_locales)) assert(defined(invoker.base_module_target)) - assert(!defined(invoker.bundle_target)) + } + + # android_app_bundle's write_build_config expects module targets to be named + # according to java_target_patterns otherwise it ignores them when listed in + # possible_config_deps. See https://crbug.com/1418398. + if (filter_exclude([ target_name ], [ "*_bundle_module" ]) != []) { + assert(false, + "Invalid android_app_bundle_module target name ($target_name), " + + "must end in _bundle_module.") } # TODO(tiborg): We have several flags that are necessary for workarounds @@ -3556,86 +3560,91 @@ if (enable_java_templates) { # target. Doing so would keep the bundle modules independent from the bundle # and potentially reuse the same bundle modules for multiple bundles. android_apk_or_module(target_name) { - forward_variables_from(invoker, - [ - "add_view_trace_events", - "aapt_locale_allowlist", - "additional_jar_files", - "alternative_android_sdk_dep", - "android_manifest", - "android_manifest_dep", - "annotation_processor_deps", - "app_as_shared_lib", - "assert_no_deps", - "base_module_target", - "bundle_target", - "chromium_code", - "data", - "data_deps", - "deps", - "enable_multidex", - "expected_android_manifest", - "expected_android_manifest_base", - "extra_verification_manifest", - "extra_verification_manifest_dep", - "generate_buildconfig_java", - "generate_final_jni", - "input_jars_paths", - "isolated_splits_enabled", - "is_base_module", - "jacoco_never_instrument", - "jar_excluded_patterns", - "javac_args", - "jni_registration_header", - "jni_sources_exclusions", - "load_library_from_apk", - "loadable_modules", - "product_config_java_packages", - "manifest_package", - "max_sdk_version", - "min_sdk_version", - "native_lib_placeholders", - "no_xml_namespaces", - "package_id", - "package_name", - "png_to_webp", - "processor_args_javac", - "product_version_resources_dep", - "proguard_configs", - "proguard_enabled", - "proguard_enable_obfuscation", - "resource_exclusion_exceptions", - "resource_exclusion_regex", - "resource_ids_provider_dep", - "resource_values_filter_rules", - "resources_config_paths", - "secondary_abi_loadable_modules", - "secondary_abi_shared_libraries", - "secondary_native_lib_placeholders", - "shared_libraries", - "shared_resources", - "shared_resources_allowlist_locales", - "shared_resources_allowlist_target", - "short_resource_paths", - "srcjar_deps", - "static_library_provider", - "static_library_synchronized_proguard", - "strip_resource_names", - "strip_unused_resources", - "target_sdk_version", - "testonly", - "uncompress_shared_libraries", - "library_always_compress", - "library_renames", - "use_chromium_linker", - "use_modern_linker", - "uses_split", - "version_code", - "version_name", - "visibility", - ]) + forward_variables_from( + invoker, + [ + "add_view_trace_events", + "aapt_locale_allowlist", + "additional_jar_files", + "allow_unused_jni_from_native", + "alternative_android_sdk_dep", + "android_manifest", + "android_manifest_dep", + "annotation_processor_deps", + "app_as_shared_lib", + "assert_no_deps", + "base_module_target", + "build_config_include_product_version_resource", + "bundle_target", + "chromium_code", + "custom_assertion_handler", + "data", + "data_deps", + "deps", + "enable_jni_multiplexing", + "enable_multidex", + "expected_android_manifest", + "expected_android_manifest_base", + "expected_android_manifest_library_version_offset", + "expected_android_manifest_version_code_offset", + "generate_buildconfig_java", + "generate_native_libraries_java", + "input_jars_paths", + "isolated_splits_enabled", + "is_base_module", + "jacoco_never_instrument", + "jar_excluded_patterns", + "javac_args", + "loadable_modules", + "product_config_java_packages", + "main_component_library", + "manifest_package", + "max_sdk_version", + "min_sdk_version", + "mergeable_android_manifests", + "module_name", + "native_lib_placeholders", + "package_id", + "parent_module_target", + "png_to_webp", + "processor_args_javac", + "proguard_configs", + "proguard_enabled", + "proguard_enable_obfuscation", + "repackage_classes", + "resource_exclusion_exceptions", + "resource_exclusion_regex", + "resource_ids_provider_dep", + "resource_values_filter_rules", + "resources_config_paths", + "secondary_abi_loadable_modules", + "secondary_abi_shared_libraries", + "secondary_native_lib_placeholders", + "shared_libraries", + "shared_resources", + "shared_resources_allowlist_locales", + "shared_resources_allowlist_target", + "short_resource_paths", + "srcjar_deps", + "static_library_provider", + "static_library_provider_use_secondary_abi", + "strip_resource_names", + "strip_unused_resources", + "target_sdk_version", + "testonly", + "library_always_compress", + "use_chromium_linker", + "uses_split", + "version_code", + "version_name", + "visibility", + ]) is_bundle_module = true generate_buildconfig_java = _is_base_module + if (defined(uses_split)) { + assert(defined(parent_module_target), + "Must set parent_module_target when uses_split is set") + } } } @@ -3645,7 +3654,6 @@ if (enable_java_templates) { # # Arguments: # android_test_apk: The target containing the tests. - # android_test_apk_name: The apk_name in android_test_apk # # The following args are optional: # apk_under_test: The target being tested. @@ -3665,7 +3673,6 @@ if (enable_java_templates) { # Example # instrumentation_test_runner("foo_test_for_bar") { # android_test_apk: ":foo" - # android_test_apk_name: "Foo" # apk_under_test: ":bar" # } template("instrumentation_test_runner") { @@ -3673,8 +3680,97 @@ if (enable_java_templates) { action("${invoker.target_name}__rts_filters") { script = "//build/add_rts_filters.py" rts_file = "${root_build_dir}/gen/rts/${invoker.target_name}.filter" - args = [ rebase_path(rts_file, root_build_dir) ] - outputs = [ rts_file ] + inverted_rts_file = + "${root_build_dir}/gen/rts/${invoker.target_name}_inverted.filter" + args = [ + rebase_path(rts_file, root_build_dir), + rebase_path(inverted_rts_file, root_build_dir), + ] + outputs = [ + rts_file, + inverted_rts_file, + ] + } + } + _incremental_apk = !(defined(invoker.never_incremental) && + invoker.never_incremental) && incremental_install + _apk_operations_target_name = "${target_name}__apk_operations" + _apk_target = invoker.android_test_apk + if (defined(invoker.apk_under_test) && !_incremental_apk) { + # The actual target is defined in the test_runner_script template. + _install_artifacts_json = + "${target_gen_dir}/${target_name}.install_artifacts" + _install_artifacts_target_name = "${target_name}__install_artifacts" + } + + action_with_pydeps(_apk_operations_target_name) { + testonly = true + script = "//build/android/gyp/create_test_apk_wrapper_script.py" + deps = [] + _generated_script = "$root_build_dir/bin/${invoker.target_name}" + outputs = [ _generated_script ] + _apk_build_config = + get_label_info(_apk_target, "target_gen_dir") + "/" + + get_label_info(_apk_target, "name") + ".build_config.json" + _rebased_apk_build_config = rebase_path(_apk_build_config, root_build_dir) + args = [ + "--script-output-path", + rebase_path(_generated_script, root_build_dir), + "--package-name", + "@FileArg($_rebased_apk_build_config:deps_info:package_name)", + ] + deps += [ "${_apk_target}$build_config_target_suffix" ] + if (_incremental_apk) { + args += [ + "--test-apk-incremental-install-json", + "@FileArg($_rebased_apk_build_config:deps_info:incremental_install_json_path)", + ] + } else { + args += [ + "--test-apk", + "@FileArg($_rebased_apk_build_config:deps_info:apk_path)", + ] + } + if (defined(invoker.proguard_mapping_path) && !_incremental_apk) { + args += [ + "--proguard-mapping-path", + rebase_path(invoker.proguard_mapping_path, root_build_dir), + ] + } + if (defined(invoker.apk_under_test)) { + if (_incremental_apk) { + deps += [ "${invoker.apk_under_test}$build_config_target_suffix" ] + _apk_under_test_build_config = + get_label_info(invoker.apk_under_test, "target_gen_dir") + "/" + + get_label_info(invoker.apk_under_test, "name") + + ".build_config.json" + _rebased_apk_under_test_build_config = + rebase_path(_apk_under_test_build_config, root_build_dir) + _apk_under_test = "@FileArg($_rebased_apk_under_test_build_config:deps_info:incremental_apk_path)" + } else { + deps += [ ":${_install_artifacts_target_name}" ] + _rebased_install_artifacts_json = + rebase_path(_install_artifacts_json, root_build_dir) + _apk_under_test = "@FileArg($_rebased_install_artifacts_json[])" + } + args += [ + "--additional-apk", + _apk_under_test, + ] + } + if (defined(invoker.additional_apks)) { + foreach(additional_apk, invoker.additional_apks) { + deps += [ "$additional_apk$build_config_target_suffix" ] + _build_config = + get_label_info(additional_apk, "target_gen_dir") + "/" + + get_label_info(additional_apk, "name") + ".build_config.json" + _rebased_build_config = rebase_path(_build_config, root_build_dir) + args += [ + "--additional-apk", + "@FileArg($_rebased_build_config:deps_info:apk_path)", + ] + } + deps += invoker.additional_apks } } test_runner_script(target_name) { @@ -3689,24 +3785,19 @@ if (enable_java_templates) { "extra_args", "fake_modules", "ignore_all_data_deps", + "is_unit_test", "modules", "proguard_mapping_path", - "public_deps", "use_webview_provider", ]) test_name = invoker.target_name test_type = "instrumentation" apk_target = invoker.android_test_apk - test_jar = "$root_build_dir/test.lib.java/" + - invoker.android_test_apk_name + ".jar" - incremental_apk = !(defined(invoker.never_incremental) && - invoker.never_incremental) && incremental_install + incremental_apk = _incremental_apk public_deps = [ + ":$_apk_operations_target_name", apk_target, - - # Required by test runner to enumerate test list. - "${apk_target}_dist_ijar", ] if (defined(invoker.apk_under_test)) { public_deps += [ invoker.apk_under_test ] @@ -3771,8 +3862,6 @@ if (enable_java_templates) { } if (defined(invoker.apk_under_test)) { data_deps += [ invoker.apk_under_test ] - } else { - enable_native_mocks = true } if (defined(invoker.apk_under_test)) { @@ -3811,7 +3900,6 @@ if (enable_java_templates) { data += [ "$_final_apk_path.mapping" ] } - dist_ijar_path = "$root_build_dir/test.lib.java/${invoker.apk_name}.jar" create_apk_script = false forward_variables_from(invoker, @@ -3820,6 +3908,8 @@ if (enable_java_templates) { "data", "data_deps", "deps", + "extra_args", + "is_unit_test", "proguard_configs", ]) } @@ -3848,13 +3938,13 @@ if (enable_java_templates) { "deps", "extra_args", "ignore_all_data_deps", + "is_unit_test", "modules", "never_incremental", "public_deps", "use_webview_provider", ]) android_test_apk = ":${_apk_target_name}" - android_test_apk_name = invoker.apk_name if (defined(invoker.proguard_enabled) && invoker.proguard_enabled) { proguard_mapping_path = "$root_build_dir/apks/${invoker.apk_name}.apk.mapping" @@ -3921,7 +4011,6 @@ if (enable_java_templates) { forward_variables_from(invoker, "*", TESTONLY_AND_VISIBILITY) testonly = true create_apk_script = false - enable_native_mocks = true # TODO(crbug.com/1099849): Figure out why angle tests fail to launch # with newer target_sdk_version. @@ -3945,7 +4034,6 @@ if (enable_java_templates) { if (!defined(use_default_launcher) || use_default_launcher) { deps += [ - "//base:base_java", "//build/android/gtest_apk:native_test_instrumentation_test_runner_java", "//testing/android/native_test:native_test_java", ] @@ -4043,6 +4131,10 @@ if (enable_java_templates) { # absolute paths, such as for third_party or generated .proto files. # http://crbug.com/691451 tracks fixing this. # + # generator_plugin_label (optional) + # GN label for plugin executable which generates custom cc stubs. + # Don't specify a toolchain, host toolchain is assumed. + # # Example: # proto_java_library("foo_proto_java") { # proto_path = "src/foo" @@ -4059,24 +4151,47 @@ if (enable_java_templates) { _srcjar_path = "$target_gen_dir/$target_name.srcjar" script = "//build/protoc_java.py" - deps = [] if (defined(invoker.deps)) { - deps += invoker.deps + # Need to care only about targets that might generate .proto files. + # No need to depend on java_library or android_resource targets. + deps = filter_exclude(invoker.deps, java_target_patterns) } sources = invoker.sources depfile = "$target_gen_dir/$target_name.d" outputs = [ _srcjar_path ] args = [ - "--depfile", - rebase_path(depfile, root_build_dir), - "--protoc", - rebase_path(android_protoc_bin, root_build_dir), - "--proto-path", - rebase_path(invoker.proto_path, root_build_dir), - "--srcjar", - rebase_path(_srcjar_path, root_build_dir), - ] + rebase_path(sources, root_build_dir) + "--depfile", + rebase_path(depfile, root_build_dir), + "--protoc", + rebase_path(android_protoc_bin, root_build_dir), + "--proto-path", + rebase_path(invoker.proto_path, root_build_dir), + "--srcjar", + rebase_path(_srcjar_path, root_build_dir), + ] + + if (defined(invoker.generator_plugin_label)) { + if (host_os == "win") { + _host_executable_suffix = ".exe" + } else { + _host_executable_suffix = "" + } + + _plugin_host_label = + invoker.generator_plugin_label + "($host_toolchain)" + _plugin_path = + get_label_info(_plugin_host_label, "root_out_dir") + "/" + + get_label_info(_plugin_host_label, "name") + _host_executable_suffix + args += [ + "--plugin", + rebase_path(_plugin_path, root_build_dir), + ] + deps += [ _plugin_host_label ] + inputs = [ _plugin_path ] + } + + args += rebase_path(sources, root_build_dir) if (defined(invoker.import_dirs)) { foreach(_import_dir, invoker.import_dirs) { @@ -4167,7 +4282,7 @@ if (enable_java_templates) { chromium_code = false sources = [] srcjar_deps = [ ":${_template_name}__flatc_java" ] - deps = [ "//third_party/android_deps:com_google_flatbuffers_flatbuffers_java_java" ] + deps = [ "//third_party/flatbuffers:flatbuffers_java" ] if (defined(invoker.deps)) { deps += invoker.deps } @@ -4274,6 +4389,13 @@ if (enable_java_templates) { _use_scanned_assets = !_ignore_assets && _scanned_files.assets != [] _has_resources = _scanned_files.resources != [] + _common_deps = [ ":$_unpack_target_name" ] + if (defined(invoker.deps)) { + _common_deps += invoker.deps + } + if (defined(invoker.public_deps)) { + _common_deps += invoker.public_deps + } assert(_ignore_aidl || _scanned_files.aidl == [], "android_aar_prebuilt() aidl not yet supported." + @@ -4350,7 +4472,7 @@ if (enable_java_templates) { "testonly", "strip_drawables", ]) - deps = [ ":$_unpack_target_name" ] + deps = _common_deps if (_should_process_manifest) { android_manifest_dep = ":$_unpack_target_name" android_manifest = "${_output_path}/AndroidManifest.xml" @@ -4384,6 +4506,7 @@ if (enable_java_templates) { _assets_target_name = "${target_name}__assets" android_assets(_assets_target_name) { forward_variables_from(invoker, TESTONLY_AND_VISIBILITY) + deps = [ ":$_unpack_target_name" ] renaming_sources = [] renaming_destinations = [] foreach(_asset_file, _scanned_files.assets) { @@ -4397,9 +4520,12 @@ if (enable_java_templates) { } } + _target_label = get_label_info(":$target_name", "label_no_toolchain") + # Create android_java_prebuilt target for classes.jar. if (_scanned_files.has_classes_jar) { _java_library_vars = [ + "alternative_android_sdk_dep", "bytecode_rewriter_target", "enable_bytecode_checks", "jar_excluded_patterns", @@ -4416,7 +4542,7 @@ if (enable_java_templates) { _subjar_targets += [ ":$_current_target" ] java_prebuilt(_current_target) { forward_variables_from(invoker, _java_library_vars) - deps = [ ":$_unpack_target_name" ] + deps = _common_deps if (!defined(requires_android)) { requires_android = true } @@ -4424,7 +4550,7 @@ if (enable_java_templates) { jar_path = "$_output_path/${_tuple[1]}" _base_output_name = get_path_info(jar_path, "name") output_name = "${invoker.target_name}-$_base_output_name" - public_target_label = invoker.target_name + public_target_label = _target_label } } @@ -4433,14 +4559,11 @@ if (enable_java_templates) { forward_variables_from(invoker, _java_library_vars) forward_variables_from(invoker, [ - "deps", "input_jars_paths", + "mergeable_android_manifests", "proguard_configs", ]) - if (!defined(deps)) { - deps = [] - } - deps += _subjar_targets + [ ":$_unpack_target_name" ] + deps = _common_deps + _subjar_targets if (defined(_res_target_name)) { deps += [ ":$_res_target_name" ] } @@ -4460,13 +4583,16 @@ if (enable_java_templates) { proguard_configs += [ "$_output_path/proguard.txt" ] } } - public_target_label = invoker.target_name + public_target_label = _target_label } } java_group(target_name) { forward_variables_from(invoker, TESTONLY_AND_VISIBILITY) public_deps = [ ":$_unpack_target_name" ] + if (defined(invoker.public_deps)) { + public_deps += invoker.public_deps + } deps = [] if (defined(_jar_target_name)) { deps += [ ":$_jar_target_name" ] @@ -4513,6 +4639,7 @@ if (enable_java_templates) { # keystore_name: optional keystore name, used only when generating APKs. # keystore_password: optional keystore password, used only when # generating APKs. + # rotation_config: optional .textproto to enable key rotation. # # command_line_flags_file: Optional. If provided, named of the on-device # file that will be used to store command-line arguments. The default @@ -4533,10 +4660,6 @@ if (enable_java_templates) { # proguard_android_sdk_dep: Optional. android_system_java_prebuilt() target # used as a library jar for synchronized proguarding. # - # compress_shared_libraries: Optional. Whether to compress shared libraries - # such that they are extracted upon install. Libraries prefixed with - # "crazy." are never compressed. - # # system_image_locale_allowlist: List of locales that should be included # on system APKs generated from this bundle. # @@ -4586,19 +4709,11 @@ if (enable_java_templates) { _proguard_enabled = defined(invoker.proguard_enabled) && invoker.proguard_enabled - if (defined(invoker.version_code)) { - _version_code = invoker.version_code - } else { - _version_code = android_default_version_code - } - - if (android_override_version_code != "") { - _version_code = android_override_version_code + _min_sdk_version = default_min_sdk_version + if (defined(invoker.min_sdk_version)) { + _min_sdk_version = invoker.min_sdk_version } - # Prevent "unused variable". - not_needed([ "_version_code" ]) - _bundle_base_path = "$root_build_dir/apks" if (defined(invoker.bundle_base_path)) { _bundle_base_path = invoker.bundle_base_path @@ -4633,18 +4748,7 @@ if (enable_java_templates) { }, ] - _enable_multidex = - !defined(invoker.enable_multidex) || invoker.enable_multidex - - # Prevent "unused variable". - not_needed([ "_enable_multidex" ]) - if (_proguard_enabled) { - _uses_static_library_synchronized_proguard = - defined(invoker.static_library_synchronized_proguard) && - invoker.static_library_synchronized_proguard - - # TODO(crbug.com/1032609): Remove dexsplitter from Trichrome Proguard. _dex_target = "${_target_name}__dex" _proguard_mapping_path = "${_bundle_path}.mapping" } @@ -4751,9 +4855,9 @@ if (enable_java_templates) { _rebased_build_config = rebase_path(_build_config, root_build_dir) _build_config_target = "$_target_name$build_config_target_suffix" if (defined(invoker.proguard_android_sdk_dep)) { - proguard_android_sdk_dep_ = invoker.proguard_android_sdk_dep + _android_sdk_dep = invoker.proguard_android_sdk_dep } else { - proguard_android_sdk_dep_ = "//third_party/android_sdk:android_sdk_java" + _android_sdk_dep = default_android_sdk_dep } if (_proguard_enabled) { @@ -4767,10 +4871,11 @@ if (enable_java_templates) { write_build_config(_build_config_target) { type = "android_app_bundle" - possible_config_deps = _module_targets + [ proguard_android_sdk_dep_ ] + possible_config_deps = _module_targets + [ _android_sdk_dep ] build_config = _build_config proguard_enabled = _proguard_enabled module_build_configs = _module_build_configs + modules = _modules if (_proguard_enabled) { add_view_trace_events = _add_view_trace_events @@ -4778,70 +4883,104 @@ if (enable_java_templates) { } } + # Old name for variable, mark as not_needed while it is being renamed + # downstream. Remove after all references to baseline_profile_path have been + # changed. + not_needed(invoker, [ "baseline_profile_path" ]) + + _enable_art_profile_optimizations = + defined(invoker.art_profile_path) && _proguard_enabled + + if (_enable_art_profile_optimizations) { + _include_baseline_profile = enable_baseline_profiles + _enable_startup_profile = enable_startup_profiles + if (_include_baseline_profile) { + _obfuscated_art_profile = + "$target_out_dir/${target_name}.obfuscated.hrf" + } + } else { + not_needed(invoker, [ "art_profile_path" ]) + } + if (_proguard_enabled) { - # If this Bundle uses a static library, the static library APK will - # create the synchronized dex file path. - if (!_uses_static_library_synchronized_proguard) { - if (_add_view_trace_events) { - _trace_event_rewriter_target = - "//build/android/bytecode:trace_event_adder" - _rewritten_jar_target_name = "${target_name}__trace_event_rewritten" - _rewriter_path = root_build_dir + "/bin/helper/trace_event_adder" - _stamp = "${target_gen_dir}/${target_name}.trace_event_rewrite.stamp" - action_with_pydeps(_rewritten_jar_target_name) { - script = "//build/android/gyp/trace_event_bytecode_rewriter.py" - inputs = [ - _rewriter_path, - _build_config, - ] - outputs = [ _stamp ] - depfile = "$target_gen_dir/$_rewritten_jar_target_name.d" - args = [ - "--stamp", - rebase_path(_stamp, root_build_dir), - "--depfile", - rebase_path(depfile, root_build_dir), - "--script", - rebase_path(_rewriter_path, root_build_dir), - "--classpath", - "@FileArg($_rebased_build_config:deps_info:javac_full_classpath)", - "--classpath", - "@FileArg($_rebased_build_config:android:sdk_jars)", - "--input-jars", - "@FileArg($_rebased_build_config:deps_info:device_classpath)", - "--output-jars", - "@FileArg($_rebased_build_config:deps_info:trace_event_rewritten_device_classpath)", - ] - deps = [ - _trace_event_rewriter_target, - ":$_build_config_target", - ] + _module_java_targets - } + if (_add_view_trace_events) { + _trace_event_rewriter_target = + "//build/android/bytecode:trace_event_adder" + _rewritten_jar_target_name = "${target_name}__trace_event_rewritten" + _rewriter_path = root_build_dir + "/bin/helper/trace_event_adder" + _stamp = "${target_out_dir}/${target_name}.trace_event_rewrite.stamp" + action_with_pydeps(_rewritten_jar_target_name) { + script = "//build/android/gyp/trace_event_bytecode_rewriter.py" + inputs = [ + java_path_for_inputs, + _rewriter_path, + _build_config, + ] + outputs = [ _stamp ] + depfile = "$target_gen_dir/$_rewritten_jar_target_name.d" + args = [ + "--stamp", + rebase_path(_stamp, root_build_dir), + "--depfile", + rebase_path(depfile, root_build_dir), + "--script", + rebase_path(_rewriter_path, root_build_dir), + "--classpath", + "@FileArg($_rebased_build_config:deps_info:javac_full_classpath)", + "--classpath", + "@FileArg($_rebased_build_config:android:sdk_jars)", + "--input-jars", + "@FileArg($_rebased_build_config:deps_info:device_classpath)", + "--output-jars", + "@FileArg($_rebased_build_config:deps_info:trace_event_rewritten_device_classpath)", + ] + deps = [ + ":$_build_config_target", + _trace_event_rewriter_target, + ] + _module_java_targets } + } - dex(_dex_target) { - forward_variables_from(invoker, - [ - "expected_proguard_config", - "expected_proguard_config_base", - "min_sdk_version", - "proguard_enable_obfuscation", - ]) - if (defined(expected_proguard_config)) { - top_target_name = _target_name + dex(_dex_target) { + forward_variables_from(invoker, + [ + "custom_assertion_handler", + "expected_proguard_config", + "expected_proguard_config_base", + "proguard_enable_obfuscation", + "repackage_classes", + ]) + if (defined(expected_proguard_config)) { + top_target_name = _target_name + } + min_sdk_version = _min_sdk_version + add_view_trace_events = _add_view_trace_events + proguard_enabled = true + proguard_mapping_path = _proguard_mapping_path + build_config = _build_config + if (_enable_art_profile_optimizations) { + input_art_profile = invoker.art_profile_path + if (_include_baseline_profile) { + output_art_profile = _obfuscated_art_profile } - add_view_trace_events = _add_view_trace_events - enable_multidex = _enable_multidex - proguard_enabled = true - proguard_mapping_path = _proguard_mapping_path - proguard_sourcefile_suffix = "$android_channel-$_version_code" - build_config = _build_config + enable_startup_profile = _enable_startup_profile + } - deps = _module_java_targets + [ ":$_build_config_target" ] - if (_add_view_trace_events) { - deps += [ ":${_rewritten_jar_target_name}" ] - } - modules = _modules + deps = _module_java_targets + [ ":$_build_config_target" ] + if (_add_view_trace_events) { + deps += [ ":${_rewritten_jar_target_name}" ] + } + modules = _modules + + # Must not be set via write_build_config, because that will cause it + # to be picked up by test apks that use apk_under_test. + _assertions_implicitly_enabled = + defined(invoker.custom_assertion_handler) + if (!_assertions_implicitly_enabled && !enable_java_asserts && + (!defined(testonly) || !testonly) && + # Injected JaCoCo code causes -checkdiscards to fail. + !use_jacoco_coverage) { + proguard_configs = [ "//build/android/dcheck_is_off.flags" ] } } } @@ -4856,9 +4995,46 @@ if (enable_java_templates) { _module_build_config_target = _module.build_config_target if (!_proguard_enabled) { - _dex_target_for_module = "${_module_target}__final_dex" - } else { - _dex_target_for_module = ":$_dex_target" + _module_target_name = get_label_info(_module_target, "name") + _dex_target = "${_module_target_name}__final_dex" + _dex_path = "$target_out_dir/$_module_target_name/$_module_target_name.mergeddex.jar" + dex(_dex_target) { + forward_variables_from(invoker, [ "custom_assertion_handler" ]) + min_sdk_version = _min_sdk_version + output = _dex_path + build_config = _build_config + + # This will be a pure dex-merge. + input_dex_filearg = "@FileArg($_rebased_build_config:modules:${_module.name}:all_dex_files)" + enable_desugar = false + + deps = [ + ":$_build_config_target", + ":${_module_target_name}__java", + ] + } + } + _dex_target_for_module = ":$_dex_target" + + if (_enable_art_profile_optimizations && _include_baseline_profile) { + _module_target_name = get_label_info(_module_target, "name") + _binary_profile_target = + "${_module_target_name}__binary_baseline_profile" + _binary_baseline_profile_path = "$target_out_dir/$_module_target_name/$_module_target_name.baseline.prof" + _binary_baseline_profile_metadata_path = + _binary_baseline_profile_path + "m" + create_binary_profile(_binary_profile_target) { + forward_variables_from(invoker, TESTONLY_AND_VISIBILITY) + binary_baseline_profile_path = _binary_baseline_profile_path + binary_baseline_profile_metadata_path = + _binary_baseline_profile_metadata_path + build_config = _module_build_config + input_profile_path = _obfuscated_art_profile + deps = [ + _dex_target_for_module, + _module_build_config_target, + ] + } } # Generate one module .zip file per bundle module. @@ -4867,19 +5043,22 @@ if (enable_java_templates) { # the internal module name inside the final bundle, in other words, # this file *must* be named ${_module.name}.zip _create_module_target = "${_target_name}__${_module.name}__create" - _module_zip_path = "$target_gen_dir/$target_name/${_module.name}.zip" + _module_zip_path = "$target_out_dir/$target_name/${_module.name}.zip" create_android_app_bundle_module(_create_module_target) { forward_variables_from(invoker, [ "is_multi_abi", - "min_sdk_version", "uncompress_dex", - "proguard_enabled", ]) module_name = _module.name + min_sdk_version = _min_sdk_version build_config = _module_build_config module_zip_path = _module_zip_path native_libraries_config = _native_libraries_config + if (!_proguard_enabled) { + dex_path = _dex_path + # dex_path is read from the build_config in the proguard case. + } if (module_name == "base" && defined(invoker.expected_libs_and_assets)) { @@ -4909,6 +5088,17 @@ if (enable_java_templates) { _secondary_abi_native_libraries_config deps += [ ":$_secondary_abi_native_libraries_config_target" ] } + + if (_enable_art_profile_optimizations && _include_baseline_profile) { + # extra_assets is a list of ["{src_path}:{dst_path}"] + extra_assets = [ + rebase_path(_binary_baseline_profile_path, root_build_dir) + + ":dexopt/baseline.prof", + rebase_path(_binary_baseline_profile_metadata_path, + root_build_dir) + ":dexopt/baseline.profm", + ] + deps += [ ":$_binary_profile_target" ] + } } _all_create_module_targets += [ @@ -4944,6 +5134,14 @@ if (enable_java_templates) { output_config = _unused_resources_config output_r_txt = _unused_resources_r_txt_out } + _unused_resources_final_path = "${_bundle_path}.unused_resources" + _copy_unused_resources_target = + "${_base_target_name}__copy_unused_resources" + copy(_copy_unused_resources_target) { + deps = [ ":$_unused_resources_target" ] + sources = [ _unused_resources_config ] + outputs = [ _unused_resources_final_path ] + } } _all_rebased_module_zip_paths = @@ -4972,8 +5170,10 @@ if (enable_java_templates) { _bundle_target_name = "${_target_name}__bundle" action_with_pydeps(_bundle_target_name) { script = "//build/android/gyp/create_app_bundle.py" - inputs = _all_module_zip_paths + _all_module_build_configs + - [ _BUNDLETOOL_JAR_PATH ] + inputs = _all_module_zip_paths + _all_module_build_configs + [ + _BUNDLETOOL_JAR_PATH, + java_path_for_inputs, + ] outputs = [ _bundle_path ] deps = _all_create_module_targets + [ ":$_build_config_target" ] args = [ @@ -4985,26 +5185,25 @@ if (enable_java_templates) { if (_split_dimensions != []) { args += [ "--split-dimensions=$_split_dimensions" ] } - if (defined(invoker.compress_shared_libraries) && - invoker.compress_shared_libraries) { - args += [ "--compress-shared-libraries" ] - } - _min_sdk_version = default_min_sdk_version - if (defined(invoker.min_sdk_version)) { - _min_sdk_version = invoker.min_sdk_version - } # Android P+ support loading from stored dex. if (_min_sdk_version < 27) { args += [ "--compress-dex" ] } + if (defined(invoker.rotation_config)) { + args += [ + "--rotation-config", + rebase_path(invoker.rotation_config, root_build_dir), + ] + } + if (treat_warnings_as_errors) { args += [ "--warnings-as-errors" ] } if (_enable_language_splits) { - args += [ "--base-allowlist-rtxt-path=@FileArg(" + "${_rebased_base_module_build_config}:deps_info:base_allowlist_rtxt_path)" ] + args += [ "--base-allowlist-rtxt-path=@FileArg($_rebased_base_module_build_config:deps_info:base_allowlist_rtxt_path)" ] if (_strip_unused_resources) { # Use the stripped out rtxt file to set resources that are pinned to # the default language split. @@ -5015,9 +5214,7 @@ if (enable_java_templates) { args += [ "--base-module-rtxt-path=$_rebased_unused_resources_r_txt_out" ] } else { - args += - [ "--base-module-rtxt-path=@FileArg(" + - "${_rebased_base_module_build_config}:deps_info:r_text_path)" ] + args += [ "--base-module-rtxt-path=@FileArg($_rebased_base_module_build_config:deps_info:r_text_path)" ] } } if (defined(invoker.validate_services) && invoker.validate_services) { @@ -5101,8 +5298,7 @@ if (enable_java_templates) { args = [ "--script-output-path", rebase_path(_bundle_wrapper_script_path, root_build_dir), - "--package-name=@FileArg(" + - "$_rebased_base_module_build_config:deps_info:package_name)", + "--package-name=@FileArg($_rebased_base_module_build_config:deps_info:package_name)", "--aapt2", rebase_path(_android_aapt2_path, root_build_dir), "--bundle-path", @@ -5162,8 +5358,8 @@ if (enable_java_templates) { forward_variables_from(invoker, [ "lint_baseline_file", + "lint_jar_path", "lint_suppressions_file", - "min_sdk_version", ]) build_config = _build_config build_config_dep = ":$_build_config_target" @@ -5173,12 +5369,15 @@ if (enable_java_templates) { } if (defined(invoker.lint_min_sdk_version)) { min_sdk_version = invoker.lint_min_sdk_version + } else { + min_sdk_version = _min_sdk_version } } } else { not_needed(invoker, [ "lint_baseline_file", + "lint_jar_path", "lint_min_sdk_version", "lint_suppressions_dep", "lint_suppressions_file", @@ -5205,6 +5404,7 @@ if (enable_java_templates) { action_with_pydeps("${_target_name}_apks") { script = "//build/android/gyp/create_app_bundle_apks.py" inputs = [ + java_path_for_inputs, _bundle_path, _BUNDLETOOL_JAR_PATH, ] @@ -5230,9 +5430,9 @@ if (enable_java_templates) { deps = [ ":$_bundle_target_name" ] metadata = { install_artifacts = [ _apks_path ] - } - if (defined(invoker.static_library_provider)) { - metadata.install_artifacts_barrier = [] + if (defined(invoker.static_library_provider)) { + install_artifacts_barrier = [] + } } # http://crbug.com/725224. Fix for bots running out of memory. @@ -5266,7 +5466,10 @@ if (enable_java_templates) { _name = get_path_info(invoker.bundle_path, "name") _output_path = "$_dir/$_name.minimal.apks" outputs = [ _output_path ] - inputs = [ invoker.bundle_path ] + inputs = [ + invoker.bundle_path, + java_path_for_inputs, + ] args = [ "--bundle", rebase_path(invoker.bundle_path, root_build_dir), diff --git a/build/config/android/sdk.gni b/build/config/android/sdk.gni index fb39315..45e3404 100644 --- a/build/config/android/sdk.gni +++ b/build/config/android/sdk.gni @@ -4,10 +4,10 @@ # The default SDK release used by public builds. Value may differ in # internal builds. -default_android_sdk_release = "t" +default_android_sdk_release = "u" # SDK releases against which public builds are supported. public_sdk_releases = [ - "t", "tprivacysandbox", + "u", ] diff --git a/build/config/android/test/resource_overlay/BUILD.gn b/build/config/android/test/resource_overlay/BUILD.gn index 0a5812c..3b79363 100644 --- a/build/config/android/test/resource_overlay/BUILD.gn +++ b/build/config/android/test/resource_overlay/BUILD.gn @@ -53,7 +53,7 @@ android_library("unit_device_javatests") { ":dependency_tagged_root_resources", ":root_tagged_root_resources", "//base:base_java_test_support", - "//third_party/android_support_test_runner:runner_java", + "//third_party/androidx:androidx_test_monitor_java", "//third_party/androidx:androidx_test_runner_java", "//third_party/junit", ] diff --git a/build/config/android/test/resource_overlay/java/src/org/chromium/build/resource_overlay/ResourceOverlayTest.java b/build/config/android/test/resource_overlay/java/src/org/chromium/build/resource_overlay/ResourceOverlayTest.java index 8da9938..d42450e 100644 --- a/build/config/android/test/resource_overlay/java/src/org/chromium/build/resource_overlay/ResourceOverlayTest.java +++ b/build/config/android/test/resource_overlay/java/src/org/chromium/build/resource_overlay/ResourceOverlayTest.java @@ -7,8 +7,8 @@ import static org.junit.Assert.assertEquals; import android.content.res.Resources; -import android.support.test.InstrumentationRegistry; +import androidx.test.InstrumentationRegistry; import androidx.test.filters.SmallTest; import org.junit.Test; diff --git a/build/config/apple/BUILD.gn b/build/config/apple/BUILD.gn new file mode 100644 index 0000000..add2395 --- /dev/null +++ b/build/config/apple/BUILD.gn @@ -0,0 +1,17 @@ +# Copyright 2023 The Chromium Authors +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +import("//build/config/apple/symbols.gni") + +# The ldflags referenced below are handled by +# //build/toolchain/apple/linker_driver.py. +# Remove this config if a target wishes to change the arguments passed to the +# strip command during linking. This config by default strips all symbols +# from a binary, but some targets may wish to specify an exports file to +# preserve specific symbols. +config("strip_all") { + if (enable_stripping) { + ldflags = [ "-Wcrl,strip,-x,-S" ] + } +} diff --git a/build/config/apple/symbols.gni b/build/config/apple/symbols.gni index ef6faf0..3b4dee4 100644 --- a/build/config/apple/symbols.gni +++ b/build/config/apple/symbols.gni @@ -17,7 +17,7 @@ declare_args() { enable_dsyms = is_official_build || using_sanitizer # Strip symbols from linked targets by default. If this is enabled, the - # //build/config/mac:strip_all config will be applied to all linked targets. + # //build/config/apple:strip_all config will be applied to all linked targets. # If custom stripping parameters are required, remove that config from a # linked target and apply custom -Wcrl,strip flags. See # //build/toolchain/apple/linker_driver.py for more information. diff --git a/build/config/arm.gni b/build/config/arm.gni index cc82ed5..5b404c1 100644 --- a/build/config/arm.gni +++ b/build/config/arm.gni @@ -41,6 +41,8 @@ if (current_cpu == "arm" || v8_current_cpu == "arm") { # For lacros build, we use ARM v8 by default. if (is_chromeos_lacros && arm_arch == "") { + # TODO(crbug.com/1467681) Enable i8mm and dotprod instructions for ffmpeg + # if ever we update to a version of arm that supports these instructions. arm_version = 8 arm_arch = "armv8-a+crc" } diff --git a/build/config/c++/BUILD.gn b/build/config/c++/BUILD.gn index c00dcef..abe15b4 100644 --- a/build/config/c++/BUILD.gn +++ b/build/config/c++/BUILD.gn @@ -94,7 +94,11 @@ config("runtime_library") { ] } } - if (use_custom_libcxx && enable_safe_libcxx) { - defines += [ "_LIBCPP_ENABLE_ASSERTIONS=1" ] - } + + # In a world without NaCl, the `runtime_library` config would also configure + # the `_LIBCPP_ENABLE_ASSERTIONS` define to enable hardening when using the + # custom hermetic libc++. However, this is currently added by the `compiler` + # config instead, since this hardening define should also be used by the NaCl + # saigo toolchain, which uses a prebuilt libc++ that is distinct from the + # custom hermetic libc++. } diff --git a/build/config/c++/c++.gni b/build/config/c++/c++.gni index a5436ee..00458df 100644 --- a/build/config/c++/c++.gni +++ b/build/config/c++/c++.gni @@ -2,6 +2,7 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. +import("//build/config/nacl/config.gni") import("//build/config/sanitizers/sanitizers.gni") import("//build_overrides/build.gni") @@ -53,12 +54,10 @@ declare_args() { libcxx_is_shared = use_custom_libcxx && is_component_build } -# TODO(https://crbug.com/1385662): This is temporarily guarded to make it easier -# to roll out this change. Once the various projects (ANGLE, v8, et cetera) -# rolling in Chrome's //build have updated, remove this entirely. -if (!defined(enable_safe_libcxx)) { - enable_safe_libcxx = true -} +# The saigo libc++ is distinct from the custom hermetic libc++. However, since +# the Chrome team controls the saigo toolchain, it is safe to unconditionally +# enable libc++ hardening there as well. +use_safe_libcxx = (use_custom_libcxx && enable_safe_libcxx) || is_nacl_saigo # libc++abi needs to be exported from executables to be picked up by shared # libraries on certain instrumented builds. @@ -82,8 +81,8 @@ if (is_android && export_libcxxabi_from_executables) { libcxx_is_shared = true } -libcxx_prefix = "//buildtools/third_party/libc++/trunk" -libcxxabi_prefix = "//buildtools/third_party/libc++abi/trunk" +libcxx_prefix = "//third_party/libc++/src" +libcxxabi_prefix = "//third_party/libc++abi/src" assert(!(is_ios && libcxx_is_shared), "Can't build libc++ as a shared library on iOS.") diff --git a/build/config/c++/libc++.natvis b/build/config/c++/libc++.natvis index 6378548..26580db 100644 --- a/build/config/c++/libc++.natvis +++ b/build/config/c++/libc++.natvis @@ -11,20 +11,20 @@ * if T is empty and non-final the 3rd param is 1 and it derives from T * else it has a member variable __value_ of type T --> - + {__value_} __value_ - + {*($T1*)this} *($T1*)this - + {{ size={$T2} }} @@ -50,7 +50,7 @@ and the inline data in the remaining storage.) --> - + - + {__cc} __cc - + {{ size={size()} }} diff --git a/build/config/chromecast/OWNERS b/build/config/chromecast/OWNERS index 253037d..8dd6352 100644 --- a/build/config/chromecast/OWNERS +++ b/build/config/chromecast/OWNERS @@ -1,3 +1,2 @@ mfoltz@chromium.org -rwkeane@google.com seantopping@chromium.org diff --git a/build/config/chromeos/BUILD.gn b/build/config/chromeos/BUILD.gn index 0606072..d6b383a 100644 --- a/build/config/chromeos/BUILD.gn +++ b/build/config/chromeos/BUILD.gn @@ -6,21 +6,6 @@ import("//build/config/chromeos/ui_mode.gni") assert(is_chromeos) -declare_args() { - # The location to a file used to dump symbols ordered by Call-Chain Clustering (C3) - # https://research.fb.com/wp-content/uploads/2017/01/cgo2017-hfsort-final1.pdf? - # to a file, used for generating orderfiles in Chrome OS - dump_call_chain_clustering_order = "" -} - -config("print_orderfile") { - if (dump_call_chain_clustering_order != "") { - _output_orderfile = - rebase_path(dump_call_chain_clustering_order, root_build_dir) - ldflags = [ "-Wl,--print-symbol-order=$_output_orderfile" ] - } -} - config("compiler_cpu_abi") { # Lacros currently uses the *-generic-crosstoolchain.gni files generated # by the simplechrome sdk in build/args/chromeos. These target triples diff --git a/build/config/chromeos/OWNERS b/build/config/chromeos/OWNERS new file mode 100644 index 0000000..4926482 --- /dev/null +++ b/build/config/chromeos/OWNERS @@ -0,0 +1 @@ +file://build/chromeos/OWNERS diff --git a/build/config/chromeos/rules.gni b/build/config/chromeos/rules.gni index 10af886..732afc3 100644 --- a/build/config/chromeos/rules.gni +++ b/build/config/chromeos/rules.gni @@ -10,7 +10,8 @@ import("//build/config/gclient_args.gni") import("//build/config/python.gni") import("//build/util/generate_wrapper.gni") -assert(is_chromeos && is_chromeos_device) +assert(is_chromeos) +assert(is_chromeos_device) # Determine the real paths for various items in the SDK, which may be used # in the 'generate_runner_script' template below. We do so outside the template @@ -100,13 +101,80 @@ if (cros_sdk_version != "") { } } -# Creates dependencies required by skylab testing. If passed the -# generated_script and test_exe this will generate the skylab runner script. -# If passed tast_attr_expr, tast_tests or tast_disabled_tests this will -# generate a filter file containing the expression for running tests in skylab. +template("generate_chromeos_sdk_deps") { + forward_variables_from(invoker, + [ + "deploy_chrome", + "is_tast", + ]) + if (!defined(deploy_chrome)) { + deploy_chrome = false + } + if (!defined(is_tast)) { + is_tast = false + } + + _sdk_data = [] + assert(cros_sdk_version != "", "cros sdk version is not defined") + foreach(b, _potential_test_boards) { + _cros_is_vm = false + foreach(b1, string_split(cros_boards_with_qemu_images, ":")) { + if (b == b1) { + _cros_is_vm = true + } + } + + # Determine the real paths for various items in the SDK, which may be used + # in the 'generate_runner_script' template below. + if (is_tast || _cros_is_vm || deploy_chrome) { + _symlink_targets = [] + foreach(m, _symlink_targets_map) { + if (b == m[0]) { + _symlink_targets = [] + _symlink_targets = m[1] + } + } + + if (is_tast) { + # Add tast sdk items. + _sdk_data += [ _symlink_targets[0] ] + } + if (deploy_chrome) { + # To deploy chrome to the VM, it needs to be stripped down to fit into + # the VM. This is done by using binutils in the toolchain. So add the + # toolchain to the data. + _sdk_data += [ + _symlink_targets[1], + _symlink_targets[2], + ] + } + if (_cros_is_vm) { + # Add vm sdk items. + _sdk_data += [ + _symlink_targets[3], + _symlink_targets[4], + _symlink_targets[5], + ] + } + } + } + group(target_name) { + data = _sdk_data + data += [ + # Needed for various SDK components used below. + "//build/cros_cache/chrome-sdk/misc/", + "//build/cros_cache/chrome-sdk/symlinks/", + "//chrome/VERSION", + + # The LKGM file controls what version of the VM image to download. Add it + # as data here so that changes to it will trigger analyze. + "//chromeos/CHROMEOS_LKGM", + ] + } +} + +# Creates tast filter files for skylab tast tests. # Args: -# generated_script: Name of the generated runner script created for test_exe -# test_exe: Name of the executable to run with the generated script. # tast_attr_expr: Tast expression to determine tests to run. This creates the # initial set of tests that can be further filtered.. # tast_tests: Names of tests to enable in tast. All other tests will be @@ -119,110 +187,76 @@ if (cros_sdk_version != "") { # those strings expanded into tests to disable (i.e. as && !"name:test"). # The name of those lists are then intended to be used to specify in # test_suites.pyl which collection to be used on specific test suites. -template("generate_skylab_deps") { +template("generate_skylab_tast_filter") { forward_variables_from(invoker, [ - "generated_script", - "test_exe", "tast_attr_expr", "tast_tests", "tast_disabled_tests", "tast_control", ]) - if (defined(test_exe) || defined(generated_script)) { - assert(defined(test_exe) && defined(generated_script), - "The test_exe and generated_script must both be defined when " + - "generating the skylab runner script") - action(target_name) { - script = "//build/chromeos/generate_skylab_deps.py" - outputs = [ generated_script ] - args = [ - "generate-runner", - "--test-exe", - test_exe, - "--output", - rebase_path(generated_script, root_build_dir), - ] - - deps = [ "//testing/buildbot/filters:chromeos_filters" ] - if (defined(invoker.deps)) { - deps += invoker.deps - } - data = [ generated_script ] - if (defined(invoker.data)) { - data += invoker.data - } - - data_deps = [ "//testing:test_scripts_shared" ] - if (defined(invoker.data_deps)) { - data_deps += invoker.data_deps - } - } + if (defined(tast_disabled_tests)) { + assert(defined(tast_attr_expr), + "tast_attr_expr must be used when specifying tast_disabled_tests.") } - if (defined(tast_attr_expr) || defined(tast_tests) || - defined(tast_disabled_tests)) { - if (defined(tast_disabled_tests)) { - assert(defined(tast_attr_expr), - "tast_attr_expr must be used when specifying tast_disabled_tests.") - } - _generated_filter = "$root_build_dir/bin/${target_name}.filter" - _skylab_args = [ - "generate-filter", - "--output", - rebase_path(_generated_filter), + _generated_filter = "$root_build_dir/bin/${target_name}.filter" + _skylab_args = [ + "generate-filter", + "--output", + rebase_path(_generated_filter), + ] + if (defined(tast_control)) { + _skylab_args += [ + "--tast-control", + rebase_path(tast_control), ] - if (defined(tast_control)) { - _skylab_args += [ - "--tast-control", - rebase_path(tast_control), - ] - } - if (defined(tast_attr_expr)) { + } + if (defined(tast_attr_expr)) { + _skylab_args += [ + "--tast-expr", + tast_attr_expr, + ] + } + if (defined(tast_tests)) { + foreach(_test, tast_tests) { _skylab_args += [ - "--tast-expr", - tast_attr_expr, + "--enabled-tests", + _test, ] } - if (defined(tast_tests)) { - foreach(_test, tast_tests) { + } + if (defined(tast_disabled_tests)) { + foreach(_test, tast_disabled_tests) { + _excluded_test_name_and_board = [] + _excluded_test_name_and_board = string_split(_test, "@") + [ "" ] + _excluded_test_name = _excluded_test_name_and_board[0] + _excluded_board = _excluded_test_name_and_board[1] + if (_excluded_board == "" || _excluded_board == cros_board) { _skylab_args += [ - "--enabled-tests", - _test, + "--disabled-tests", + _excluded_test_name, ] } } - if (defined(tast_disabled_tests)) { - foreach(_test, tast_disabled_tests) { - _excluded_test_name_and_board = [] - _excluded_test_name_and_board = string_split(_test, "@") + [ "" ] - _excluded_test_name = _excluded_test_name_and_board[0] - _excluded_board = _excluded_test_name_and_board[1] - if (_excluded_board == "" || _excluded_board == cros_board) { - _skylab_args += [ - "--disabled-tests", - _excluded_test_name, - ] - } - } + } + action(target_name) { + testonly = true + script = "//build/chromeos/generate_skylab_tast_filter.py" + if (defined(tast_control)) { + sources = [ tast_control ] } - action(target_name) { - script = "//build/chromeos/generate_skylab_deps.py" - if (defined(tast_control)) { - sources = [ tast_control ] - } - outputs = [ _generated_filter ] - args = _skylab_args - if (defined(invoker.data_deps)) { - data_deps = invoker.data_deps - } - data = [ _generated_filter ] - if (defined(invoker.data)) { - data += invoker.data - } - if (defined(invoker.deps)) { - deps = invoker.deps - } + outputs = [ _generated_filter ] + args = _skylab_args + if (defined(invoker.data_deps)) { + data_deps = invoker.data_deps + } + data = [ _generated_filter ] + if (defined(invoker.data)) { + data += invoker.data + } + if (defined(invoker.deps)) { + deps = invoker.deps } } } @@ -302,53 +336,14 @@ template("generate_runner_script") { # If we're in the cros chrome-sdk (and not the raw ebuild), the test will # need some additional runtime data located in the SDK cache. - _sdk_data = [] if (cros_sdk_version != "") { assert(defined(generated_script), "Must specify where to place generated test launcher script via " + "'generated_script'") - foreach(b, _potential_test_boards) { - _cros_is_vm = false - foreach(b1, string_split(cros_boards_with_qemu_images, ":")) { - if (b == b1) { - _cros_is_vm = true - } - } - - # Determine the real paths for various items in the SDK, which may be used - # in the 'generate_runner_script' template below. - if (is_tast || _cros_is_vm || deploy_chrome) { - _symlink_targets = [] - foreach(m, _symlink_targets_map) { - if (b == m[0]) { - _symlink_targets = [] - _symlink_targets = m[1] - } - } - - if (is_tast) { - # Add tast sdk items. - _sdk_data += [ _symlink_targets[0] ] - } - if (deploy_chrome) { - # To deploy chrome to the VM, it needs to be stripped down to fit into - # the VM. This is done by using binutils in the toolchain. So add the - # toolchain to the data. - _sdk_data += [ - _symlink_targets[1], - _symlink_targets[2], - ] - } - if (_cros_is_vm) { - # Add vm sdk items. - _sdk_data += [ - _symlink_targets[3], - _symlink_targets[4], - _symlink_targets[5], - ] - } - } + generate_chromeos_sdk_deps(target_name + "_cros_deps__helper") { + is_tast = is_tast + deploy_chrome = deploy_chrome } } @@ -369,6 +364,27 @@ template("generate_runner_script") { "--test-exe", test_exe, ] + + # This target is not a gtest unit test, but an integration test suite. + # Similar to interactive ui tests, it would start a full browser and + # then do testing. + # See more at //docs/testing/chromeos_integration. + if (test_exe == "chromeos_integration_tests") { + if (is_chromeos_ash) { + # For ash, it need to first stop the existing ash. + executable_args += [ "--stop-ui" ] + } + + # Lacros need to know the wayland socket file created by Ash. + # In this way, Lacros will be connected to the system Ash. + if (is_chromeos_lacros) { + executable_args += [ + "--env-var", + "XDG_RUNTIME_DIR", + "/run/chrome", + ] + } + } if (defined(runtime_deps_file)) { executable_args += [ "--runtime-deps-path", @@ -425,7 +441,7 @@ template("generate_runner_script") { executable_args += [ "--strip-chrome" ] } - if (!skip_generating_board_args) { + if (!skip_generating_board_args || is_skylab) { executable_args += [ "--board", cros_board, @@ -473,25 +489,17 @@ template("generate_runner_script") { "//build/android/pylib/results/", "//build/chromeos/", "//build/util/", - - # Needed for various SDK components used below. - "//build/cros_cache/chrome-sdk/misc/", - "//build/cros_cache/chrome-sdk/symlinks/", - "//chrome/VERSION", - - # The LKGM file controls what version of the VM image to download. Add it - # as data here so that changes to it will trigger analyze. - "//chromeos/CHROMEOS_LKGM", "//third_party/chromite/", ] - data += _sdk_data - if (defined(invoker.data)) { data += invoker.data } data_deps = [ "//testing:test_scripts_shared" ] + if (cros_sdk_version != "") { + data_deps += [ ":" + target_name + "_cros_deps__helper" ] + } if (defined(invoker.data_deps)) { data_deps += invoker.data_deps } @@ -501,10 +509,6 @@ template("generate_runner_script") { template("tast_test") { forward_variables_from(invoker, "*") - if (!defined(deploy_lacros_chrome)) { - deploy_lacros_chrome = false - } - # Default the expression to match any chrome-related test. if (!defined(tast_attr_expr) && !defined(tast_tests)) { # The following expression filters out all non-critical tests. See the link @@ -526,47 +530,72 @@ template("tast_test") { "Specify one of tast_tests or tast_attr_expr.") } - # Append any disabled tests to the expression. - if (defined(tast_disabled_tests)) { - assert(defined(tast_attr_expr), - "tast_attr_expr must be used when specifying tast_disabled_tests.") - foreach(_test, tast_disabled_tests) { - _excluded_test_name_and_board = [] - _excluded_test_name_and_board = string_split(_test, "@") + [ "" ] - _excluded_test_name = _excluded_test_name_and_board[0] - _excluded_board = _excluded_test_name_and_board[1] - if (_excluded_board == "" || _excluded_board == cros_board) { - tast_attr_expr += " && !\"name:${_excluded_test_name}\"" + _data_deps = [ + "//:chromiumos_preflight", # Builds the browser. + "//chromeos:cros_chrome_deploy", # Adds additional browser run-time deps. + + # Tools used to symbolize Chrome crash dumps. + # TODO(crbug.com/1156772): Remove these if/when all tests pick them up by + # default. + "//third_party/breakpad:dump_syms", + "//third_party/breakpad:minidump_dump", + "//third_party/breakpad:minidump_stackwalk", + ] + _data = [ "//components/crash/content/tools/generate_breakpad_symbols.py" ] + + if (is_skylab) { + generate_skylab_tast_filter(target_name) { + # chromite.deploy_chrome is needed for sideloading Chrome. + data = _data + [ "//third_party/chromite/" ] + data_deps = _data_deps + + # To disable a test on specific milestones, add it to the appropriate + # collection in the following file + tast_control = "//chromeos/tast_control.gni" + } + } else { + # Append any disabled tests to the expression. + if (defined(tast_disabled_tests)) { + assert(defined(tast_attr_expr), + "tast_attr_expr must be used when specifying tast_disabled_tests.") + foreach(_test, tast_disabled_tests) { + _excluded_test_name_and_board = [] + _excluded_test_name_and_board = string_split(_test, "@") + [ "" ] + _excluded_test_name = _excluded_test_name_and_board[0] + _excluded_board = _excluded_test_name_and_board[1] + if (_excluded_board == "" || _excluded_board == cros_board) { + tast_attr_expr += " && !\"name:${_excluded_test_name}\"" + } } } - } - if (defined(tast_attr_expr)) { - tast_attr_expr = "( " + tast_attr_expr + " )" - } - generate_runner_script(target_name) { - testonly = true - generated_script = "$root_build_dir/bin/run_${target_name}" - runtime_deps_file = "$root_out_dir/${target_name}.runtime_deps" - deploy_chrome = true - deploy_lacros = deploy_lacros_chrome - data_deps = [ - "//:chromiumos_preflight", # Builds the browser. - "//chromeos:cros_chrome_deploy", # Adds additional browser run-time deps. - - # Tools used to symbolize Chrome crash dumps. - # TODO(crbug.com/1156772): Remove these if/when all tests pick them up by - # default. - "//third_party/breakpad:dump_syms", - "//third_party/breakpad:minidump_dump", - "//third_party/breakpad:minidump_stackwalk", - ] + if (defined(tast_attr_expr)) { + tast_attr_expr = "( " + tast_attr_expr + " )" + } + generate_runner_script(target_name) { + testonly = true + generated_script = "$root_build_dir/bin/run_${target_name}" + runtime_deps_file = "$root_out_dir/${target_name}.runtime_deps" + deploy_chrome = true - data = [ "//components/crash/content/tools/generate_breakpad_symbols.py" ] - if (deploy_lacros_chrome) { - data += [ - # A script needed to launch Lacros in Lacros Tast tests. - "//build/lacros/mojo_connection_lacros_launcher.py", - ] + data_deps = _data_deps + if (!defined(deploy_lacros_chrome)) { + deploy_lacros_chrome = false + } + deploy_lacros = deploy_lacros_chrome + data = _data + if (deploy_lacros_chrome) { + data += [ + # A script needed to launch Lacros in Lacros Tast tests. + "//build/lacros/mojo_connection_lacros_launcher.py", + ] + + # By default, tast tests download a lacros-chrome from a gcs location and + # use it for testing. To support running lacros tast tests from Chromium CI, + # a Var is added to support pointing the tast tests to use a specified + # pre-deployed lacros-chrome. The location is decided by: + # https://source.chromium.org/chromium/chromium/src/+/main:third_party/chromite/scripts/deploy_chrome.py;l=80;drc=86f1234a4be8e9574442e076cdc835897f7bea61 + tast_vars = [ "lacros.DeployedBinary=/usr/local/lacros-chrome" ] + } } } } @@ -601,8 +630,8 @@ template("lacros_tast_tests") { ] if (is_skylab) { - generate_skylab_deps(target_name) { - data = _lacros_data + generate_skylab_tast_filter(target_name) { + data = _lacros_data + [ "//third_party/chromite/" ] data_deps = _lacros_data_deps # To disable a test on specific milestones, add it to the appropriate diff --git a/build/config/clang/BUILD.gn b/build/config/clang/BUILD.gn index 8fd6760..fe044e2 100644 --- a/build/config/clang/BUILD.gn +++ b/build/config/clang/BUILD.gn @@ -2,8 +2,13 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. +import("//build/config/rust.gni") import("clang.gni") +if (is_ios) { + import("//build/config/ios/config.gni") # For `target_environment` +} + config("find_bad_constructs") { if (clang_use_chrome_plugins) { cflags = [] @@ -20,6 +25,11 @@ config("find_bad_constructs") { "-plugin-arg-find-bad-constructs", "-Xclang", "raw-ref-template-as-trivial-member", + + "-Xclang", + "-plugin-arg-find-bad-constructs", + "-Xclang", + "check-stack-allocated", ] if (is_linux || is_chromeos || is_android || is_fuchsia) { @@ -30,6 +40,30 @@ config("find_bad_constructs") { "check-ipc", ] } + + if (enable_check_raw_ptr_fields) { + cflags += [ + "-Xclang", + "-plugin-arg-find-bad-constructs", + "-Xclang", + "check-raw-ptr-fields", + + # TODO(mikt): Remove this once crbug.com/1449812 is resolved. + "-Xclang", + "-plugin-arg-find-bad-constructs", + "-Xclang", + "raw-ptr-exclude-path=um/winnt.h", + ] + } + + if (enable_check_raw_ref_fields) { + cflags += [ + "-Xclang", + "-plugin-arg-find-bad-constructs", + "-Xclang", + "check-raw-ref-fields", + ] + } } } @@ -53,3 +87,125 @@ group("llvm-symbolizer_data") { data = [ "$clang_base_path/bin/llvm-symbolizer" ] } } + +template("clang_lib") { + if (!defined(invoker.libname)) { + not_needed(invoker, "*") + config(target_name) { + } + } else { + config(target_name) { + _dir = "" + _libname = invoker.libname + _prefix = "lib" + _suffix = "" + _ext = "a" + if (is_win) { + _dir = "windows" + _prefix = "" + _ext = "lib" + if (current_cpu == "x64") { + _suffix = "-x86_64" + } else if (current_cpu == "x86") { + _suffix = "-i386" + } else if (current_cpu == "arm64") { + _suffix = "-aarch64" + } else { + assert(false) # Unhandled cpu type + } + } else if (is_apple) { + _dir = "darwin" + } else if (is_linux || is_chromeos) { + if (current_cpu == "x64") { + _dir = "x86_64-unknown-linux-gnu" + } else if (current_cpu == "x86") { + _dir = "i386-unknown-linux-gnu" + } else if (current_cpu == "arm") { + _dir = "armv7-unknown-linux-gnueabihf" + } else if (current_cpu == "arm64") { + _dir = "aarch64-unknown-linux-gnu" + } else { + assert(false) # Unhandled cpu type + } + } else if (is_fuchsia) { + if (current_cpu == "x64") { + _dir = "x86_64-unknown-fuchsia" + } else if (current_cpu == "arm64") { + _dir = "aarch64-unknown-fuchsia" + } else { + assert(false) # Unhandled cpu type + } + } else if (is_android) { + _dir = "linux" + if (current_cpu == "x64") { + _suffix = "-x86_64-android" + } else if (current_cpu == "x86") { + _suffix = "-i686-android" + } else if (current_cpu == "arm") { + _suffix = "-arm-android" + } else if (current_cpu == "arm64") { + _suffix = "-aarch64-android" + } else if (current_cpu == "riscv64") { + _suffix = "-riscv64-android" + } else { + assert(false) # Unhandled cpu type + } + } else { + assert(false) # Unhandled target platform + } + + _clang_lib_dir = "$clang_base_path/lib/clang/$clang_version/lib" + _lib_file = "${_prefix}clang_rt.${_libname}${_suffix}.${_ext}" + libs = [ "$_clang_lib_dir/$_dir/$_lib_file" ] + } + } +} + +# Adds a dependency on the Clang runtime library clang_rt.builtins. +clang_lib("compiler_builtins") { + if (!toolchain_has_rust) { + # Since there's no Rust in the toolchain, there's no concern that we'll use + # the Rust stdlib's intrinsics here. + # + # Don't define libname which makes this target do nothing. + } else if (is_mac) { + libname = "osx" + } else if (is_ios) { + if (target_environment == "simulator") { + libname = "iossim" + } else if (target_environment == "catalyst") { + libname = "osx" + } else { + libname = "ios" + } + } else { + libname = "builtins" + } +} + +# Adds a dependency on the Clang runtime library clang_rt.profile. +clang_lib("compiler_profile") { + if (!toolchain_has_rust) { + # This is only used when `toolchain_has_rust` to support Rust linking. + # + # Don't define libname which makes this target do nothing. + } else if (is_mac) { + libname = "profile_osx" + } else if (is_ios) { + if (target_environment == "simulator") { + libname = "profile_iossim" + } else if (target_environment == "catalyst") { + # We don't enable clang coverage on iOS device builds, and the library is + # not part of the Clang package tarball as a result. + # + # Don't define libname which makes this target do nothing. + } else { + # We don't enable clang coverage on iOS device builds, and the library is + # not part of the Clang package tarball as a result. + # + # Don't define libname which makes this target do nothing. + } + } else { + libname = "profile" + } +} diff --git a/build/config/clang/clang.gni b/build/config/clang/clang.gni index ac62a2f..d4351cd 100644 --- a/build/config/clang/clang.gni +++ b/build/config/clang/clang.gni @@ -2,6 +2,7 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. +import("//build/config/chromeos/ui_mode.gni") import("//build/toolchain/toolchain.gni") default_clang_base_path = "//third_party/llvm-build/Release+Asserts" @@ -16,5 +17,23 @@ declare_args() { is_clang && !is_nacl && current_os != "zos" && default_toolchain != "//build/toolchain/cros:target" + enable_check_raw_ptr_fields = + build_with_chromium && !is_official_build && + ((is_linux && !is_castos) || (is_android && !is_cast_android) || is_mac || + is_win || is_chromeos_lacros || is_chromeos_ash) + + # TODO(crbug.com/1446146): Merge with enable_check_raw_ptr_fields once both + # checks are activated on the same set of platforms. + enable_check_raw_ref_fields = + build_with_chromium && !is_official_build && is_linux && !is_castos + clang_base_path = default_clang_base_path + + # Specifies whether or not bitcode should be embedded during compilation. + # This is used for creating a MLGO corpus from Chromium in the non-ThinLTO case. + clang_embed_bitcode = false + + # Set to true to enable output of ThinLTO index and import files used for + # creating a Chromium MLGO corpus in the ThinLTO case. + lld_emit_indexes_and_imports = false } diff --git a/build/config/compiler/BUILD.gn b/build/config/compiler/BUILD.gn index ff6aa0c..38ce559 100644 --- a/build/config/compiler/BUILD.gn +++ b/build/config/compiler/BUILD.gn @@ -17,6 +17,7 @@ import("//build/config/host_byteorder.gni") import("//build/config/rust.gni") import("//build/config/sanitizers/sanitizers.gni") import("//build/config/ui.gni") +import("//build/config/unwind.gni") import("//build/toolchain/cc_wrapper.gni") import("//build/toolchain/goma.gni") import("//build/toolchain/rbe.gni") @@ -154,10 +155,6 @@ declare_args() { # The gold linker by default has text section splitting enabled. use_text_section_splitting = false - # Turn off the --call-graph-profile-sort flag for lld by default. Enable - # selectively for targets where it's beneficial. - enable_call_graph_profile_sort = chrome_pgo_phase == 2 - # Enable DWARF v5. use_dwarf5 = false @@ -182,8 +179,15 @@ declare_args() { # a reproducer file to be saved. save_reproducers_on_lld_crash = false + # Enable ShadowCallStack for compiled binaries. SCS stores a pointer to a + # shadow call stack in register x18. Hence, x18 must not be used by the OS + # or libraries. We assume that to be the case for high end Android + # configurations. For more details see + # https://clang.llvm.org/docs/ShadowCallStack.html + enable_shadow_call_stack = false + + # PATCH(build-gn): Needed for building gn. # Allow projects that wish to stay on C++17 to override Chromium's default. - # TODO(crbug.com/1402249): evaluate removing this end of 2023 use_cxx17 = false } @@ -204,7 +208,7 @@ declare_args() { current_cpu == "x64")))) } -if (is_android || (is_chromeos_ash && is_chromeos_device)) { +if (is_android) { # Set the path to use orderfile for linking Chrome # Note that this is for using only one orderfile for linking # the Chrome binary/library. @@ -215,12 +219,19 @@ if (is_android || (is_chromeos_ash && is_chromeos_device)) { # Allow downstream tools to set orderfile path with # another variable. chrome_orderfile_path = default_chrome_orderfile - } else if (is_chromeos_ash && is_chromeos_device) { - chrome_orderfile_path = "//chromeos/profiles/chromeos.orderfile.txt" } } } +declare_args() { + # Turn off the --call-graph-profile-sort flag for lld by default. Enable + # selectively for targets where it's beneficial. + enable_call_graph_profile_sort = + chrome_pgo_phase == 2 || + (is_chromeos && + (clang_use_default_sample_profile || clang_sample_profile_path != "")) +} + assert(!(llvm_force_head_revision && use_goma), "can't use goma with trunk clang") assert(!(llvm_force_head_revision && use_remoteexec), @@ -268,9 +279,11 @@ config("compiler") { cflags_cc = [] cflags_objc = [] cflags_objcc = [] + rustflags = [] ldflags = [] defines = [] configs = [] + rustflags = [] # System-specific flags. If your compiler flags apply to one of the # categories here, add it to the associated file to keep this shared config @@ -330,28 +343,44 @@ config("compiler") { # -------------------------------- cflags += [ "-fno-strict-aliasing" ] # See http://crbug.com/32204 - # Stack protection. - if (is_apple) { - # The strong variant of the stack protector significantly increases - # binary size, so only enable it in debug mode. - if (is_debug) { - cflags += [ "-fstack-protector-strong" ] - } else { - cflags += [ "-fstack-protector" ] - } - } else if ((is_posix && !is_chromeos && !is_nacl) || is_fuchsia) { - # TODO(phajdan.jr): Use -fstack-protector-strong when our gcc supports it. - # See also https://crbug.com/533294 - if (current_os != "zos") { - cflags += [ "--param=ssp-buffer-size=4" ] - } + # Stack protection. ShadowCallStack and Stack protector address the same + # problems. Therefore, we only enable one or the other. Clang advertises SCS as + # a stronger alternative to StackProtector, so we give SCS precedence over SP. + if (enable_shadow_call_stack) { + # On Aarch64, SCS requires the x18 register to be unused because it will hold + # a pointer to the shadow stack. For Android we know that Clang doesn't use + # x18 by default. On other OSs adding "-ffixed-x18" might be required. + assert(is_android) + + scs_parameters = [ + "-fsanitize=shadow-call-stack", + "-fno-stack-protector", + ] + cflags += scs_parameters + ldflags += scs_parameters + } else { + if (is_apple) { + # The strong variant of the stack protector significantly increases + # binary size, so only enable it in debug mode. + if (is_debug) { + cflags += [ "-fstack-protector-strong" ] + } else { + cflags += [ "-fstack-protector" ] + } + } else if ((is_posix && !is_chromeos && !is_nacl) || is_fuchsia) { + # TODO(phajdan.jr): Use -fstack-protector-strong when our gcc supports it. + # See also https://crbug.com/533294 + if (current_os != "zos") { + cflags += [ "--param=ssp-buffer-size=4" ] + } - # The x86 toolchain currently has problems with stack-protector. - if (is_android && current_cpu == "x86") { - cflags += [ "-fno-stack-protector" ] - } else if (current_os != "aix") { - # Not available on aix. - cflags += [ "-fstack-protector" ] + # The x86 toolchain currently has problems with stack-protector. + if (is_android && current_cpu == "x86") { + cflags += [ "-fno-stack-protector" ] + } else if (current_os != "aix") { + # Not available on aix. + cflags += [ "-fstack-protector" ] + } } } @@ -428,9 +457,11 @@ config("compiler") { "-fno-unwind-tables", "-fno-asynchronous-unwind-tables", ] + rustflags += [ "-Cforce-unwind-tables=no" ] defines += [ "NO_UNWIND_TABLES" ] } else { cflags += [ "-funwind-tables" ] + rustflags += [ "-Cforce-unwind-tables=yes" ] } } } @@ -459,6 +490,7 @@ config("compiler") { asmflags += [ "-fPIC" ] cflags += [ "-fPIC" ] ldflags += [ "-fPIC" ] + rustflags += [ "-Crelocation-model=pic" ] if (!is_clang) { # Use pipes for communicating between sub-processes. Faster. @@ -583,11 +615,6 @@ config("compiler") { } } - # Rust compiler setup (for either clang or rustc). - if (enable_rust) { - defines += [ "RUST_ENABLED" ] - } - # C11/C++11 compiler flags setup. # --------------------------- if (is_linux || is_chromeos || is_android || (is_nacl && is_clang) || @@ -624,7 +651,7 @@ config("compiler") { cflags_cc += [ "-fno-trigraphs" ] } } else if (is_clang) { - if (use_cxx17) { + if (defined(use_cxx17) && use_cxx17) { cflags_cc += [ "-std=${standard_prefix}++17" ] } else { cflags_cc += [ "-std=${standard_prefix}++20" ] @@ -636,7 +663,8 @@ config("compiler") { } } else if (is_win) { cflags_c += [ "/std:c11" ] - if (use_cxx17 || (!is_clang && defined(msvc_use_cxx17) && msvc_use_cxx17)) { + if ((defined(use_cxx17) && use_cxx17) || + (!is_clang && defined(msvc_use_cxx17) && msvc_use_cxx17)) { cflags_cc += [ "/std:c++17" ] } else { cflags_cc += [ "/std:c++20" ] @@ -649,7 +677,7 @@ config("compiler") { # clause, above. cflags_c += [ "-std=c11" ] - if (use_cxx17) { + if (defined(use_cxx17) && use_cxx17) { cflags_cc += [ "-std=c++17" ] } else { cflags_cc += [ "-std=c++20" ] @@ -700,6 +728,7 @@ config("compiler") { "/lldltocache:" + rebase_path("$root_out_dir/thinlto-cache", root_build_dir), "/lldltocachepolicy:$cache_policy", + "-mllvm:-disable-auto-upgrade-debug-info", ] } else { ldflags += [ "-flto=thin" ] @@ -714,14 +743,10 @@ config("compiler") { # of "all" which means number of hardware threads) is faster. ldflags += [ "-Wl,--thinlto-jobs=all" ] if (is_apple) { - _object_path_suffix = "" - if (is_ios) { - _object_path_suffix = ",persist" - } ldflags += [ "-Wl,-cache_path_lto," + rebase_path("$root_out_dir/thinlto-cache", root_build_dir), - "-Wcrl,object_path_lto" + _object_path_suffix, + "-Wcrl,object_path_lto", ] } else { ldflags += @@ -735,9 +760,8 @@ config("compiler") { # ARM was originally set lower than x86 to keep the size # bloat of ThinLTO to <10%, but that's potentially no longer true. # FIXME(inglorion): maybe tune these? - if (target_cpu == "arm" || target_cpu == "arm64") { - import_instr_limit = 20 - } + # TODO(b/271459198): Revert limit on amd64 to 30 when fixed. + import_instr_limit = 20 } else if (is_android) { # TODO(crbug.com/1308318): Investigate if we can get the > 6% perf win # of import_instr_limit 30 with a binary size hit smaller than ~2 MiB. @@ -745,12 +769,29 @@ config("compiler") { } ldflags += [ "-Wl,-mllvm,-import-instr-limit=$import_instr_limit" ] + + if (!is_chromeos) { + # TODO(https://crbug.com/972449): turn on for ChromeOS when that + # toolchain has this flag. + # We only use one version of LLVM within a build so there's no need to + # upgrade debug info, which can be expensive since it runs the verifier. + ldflags += [ "-Wl,-mllvm,-disable-auto-upgrade-debug-info" ] + } } # TODO(https://crbug.com/1211155): investigate why this isn't effective on # arm32. if (!is_android || current_cpu == "arm64") { cflags += [ "-fwhole-program-vtables" ] + + # whole-program-vtables implies -fsplit-lto-unit, and Rust needs to match + # behaviour. Rust needs to know the linker will be doing LTO in this case + # or it rejects the Zsplit-lto-unit flag. + rustflags += [ + "-Zsplit-lto-unit", + "-Clinker-plugin-lto=yes", + ] + if (!is_win) { ldflags += [ "-fwhole-program-vtables" ] } @@ -860,6 +901,24 @@ config("compiler") { } } + if (clang_embed_bitcode) { + assert(!use_thin_lto, + "clang_embed_bitcode is only supported in non-ThinLTO builds") + cflags += [ + "-Xclang", + "-fembed-bitcode=all", + ] + } + + if (lld_emit_indexes_and_imports) { + assert(use_thin_lto, + "lld_emit_indexes_and_imports is only supported with ThinLTO builds") + ldflags += [ + "-Wl,--save-temps=import", + "-Wl,--thinlto-emit-index-files", + ] + } + # Pass the same C/C++ flags to the objective C/C++ compiler. cflags_objc += cflags_c cflags_objcc += cflags_cc @@ -872,9 +931,38 @@ config("compiler") { asmflags += cflags_c } + if (is_chromeos_device && !is_nacl) { + # On ChromeOS devices, we want to ensure we're using Chrome's allocator + # symbols for all C++ new/delete operator overloads. PartitionAlloc + # and other local allocators should always take precedence over system or + # preloaded allocators. These are the mangled symbol names. + # See b/280115910 for details. + ldflags += [ + "-Wl,--export-dynamic-symbol=_ZdaPv,-u,_ZdaPv", + "-Wl,--export-dynamic-symbol=_ZdaPvRKSt9nothrow_t,-u,_ZdaPvRKSt9nothrow_t", + "-Wl,--export-dynamic-symbol=_ZdlPv,-u,_ZdlPv", + "-Wl,--export-dynamic-symbol=_ZdlPvm,-u,_ZdlPvm", + "-Wl,--export-dynamic-symbol=_ZdlPvRKSt9nothrow_t,-u,_ZdlPvRKSt9nothrow_t", + "-Wl,--export-dynamic-symbol=_Znam,-u,_Znam", + "-Wl,--export-dynamic-symbol=_ZnamRKSt9nothrow_t,-u,_ZnamRKSt9nothrow_t", + "-Wl,--export-dynamic-symbol=_Znwm,-u,_Znwm", + "-Wl,--export-dynamic-symbol=_ZnwmRKSt9nothrow_t,-u,_ZnwmRKSt9nothrow_t", + "-Wl,--export-dynamic-symbol=_ZdaPvmSt11align_val_t,-u,_ZdaPvmSt11align_val_t", + "-Wl,--export-dynamic-symbol=_ZdaPvSt11align_val_t,-u,_ZdaPvSt11align_val_t", + "-Wl,--export-dynamic-symbol=_ZdaPvSt11align_val_tRKSt9nothrow_t,-u,_ZdaPvSt11align_val_tRKSt9nothrow_t", + "-Wl,--export-dynamic-symbol=_ZdlPvmSt11align_val_t,-u,_ZdlPvmSt11align_val_t", + "-Wl,--export-dynamic-symbol=_ZdlPvSt11align_val_t,-u,_ZdlPvSt11align_val_t", + "-Wl,--export-dynamic-symbol=_ZdlPvSt11align_val_tRKSt9nothrow_t,-u,_ZdlPvSt11align_val_tRKSt9nothrow_t", + "-Wl,--export-dynamic-symbol=_ZnamSt11align_val_t,-u,_ZnamSt11align_val_t", + "-Wl,--export-dynamic-symbol=_ZnamSt11align_val_tRKSt9nothrow_t,-u,_ZnamSt11align_val_tRKSt9nothrow_t", + "-Wl,--export-dynamic-symbol=_ZnwmSt11align_val_t,-u,_ZnwmSt11align_val_t", + "-Wl,--export-dynamic-symbol=_ZnwmSt11align_val_tRKSt9nothrow_t,-u,_ZnwmSt11align_val_tRKSt9nothrow_t", + ] + } + # Rust compiler flags setup. # --------------------------- - rustflags = [ + rustflags += [ # Overflow checks are optional in Rust, but even if switched # off they do not cause undefined behavior (the overflowing # behavior is defined). Because containers are bounds-checked @@ -893,10 +981,6 @@ config("compiler") { # to compile dylibs on Android, such as for constructing unit test APKs. "-Cdefault-linker-libraries", - # Turn warnings into the "deny" lint level, which produce compiler errors. - # The equivalent of -Werror for clang/gcc. - "-Dwarnings", - # To make Rust .d files compatible with ninja "-Zdep-info-omit-d-target", @@ -908,34 +992,44 @@ config("compiler") { # directory from appearing in build outputs. "-Zremap-cwd-prefix=.", ] + + if (!is_win || force_rustc_color_output) { + # Colorize error output. The analogous flag is passed for clang. This must + # be platform-gated since rustc will unconditionally output ANSI escape + # sequences, ignoring the platform, when stderr is not a terminal. + rustflags += [ "--color=always" ] + } if (rust_abi_target != "") { rustflags += [ "--target=$rust_abi_target" ] } - if (!use_thin_lto || !use_chromium_rust_toolchain) { - # Don't include bitcode if it won't be used, or can't be used. When - # use_thin_lto is true, we will try to apply LTO to any objects that have - # the appropriate bitcode. But we have to use Chromium's toolchain in order - # to use LTO with rust code. Chromium's rustc will have an LLVM backend that - # matches the C++ clang compiler. + if (!use_thin_lto) { + # Don't include bitcode if it won't be used. rustflags += [ "-Cembed-bitcode=no" ] } if (is_official_build) { rustflags += [ "-Ccodegen-units=1" ] } -} + if (!rust_prebuilt_stdlib) { + # When building against the Chromium Rust stdlib (which we compile) always + # abort instead of unwinding when panic occurs. In official builds, panics + # abort immediately (this is configured in the stdlib) to keep binary size + # down. So we unconditionally match behaviour in unofficial too. + rustflags += [ + "-Cpanic=abort", + "-Zpanic_abort_tests", + ] + } -# Defers LTO optimization to the linker, for use when: -# * Having the C++ toolchain do the linking against Rust staticlibs, and it -# will be using LTO. -# * Having Rust toolchain invoke the linker, and you're linking Rust and C++ -# together, so this defers LTO to the linker. -# -# Otherwise, Rust does LTO during compilation. -# -# https://doc.rust-lang.org/rustc/linker-plugin-lto.html -config("rust_defer_lto_to_linker") { - if (!is_debug && use_thin_lto && is_a_target_toolchain) { - rustflags = [ "-Clinker-plugin-lto" ] + # Normally, this would be defined in the `runtime_library` config but NaCl + # saigo libc++ does not use the custom hermetic libc++. Unfortunately, there + # isn't really a better config to add this define for the define to + # consistently apply in both Chromium and non-Chromium code *and* non-NaCl + # and NaCl code. + # + # TODO(https://crbug.com/702997): Move this back to the `runtime_library` + # config when NaCl is removed. + if (use_safe_libcxx) { + defines += [ "_LIBCPP_ENABLE_ASSERTIONS=1" ] } } @@ -951,7 +1045,10 @@ config("thinlto_optimize_default") { ldflags = [ "-Wl,--lto-O" + lto_opt_level ] } - rustflags = [ "-Clto=thin" ] + # We always point Rust to a linker that performs LTO, so we don't want Rust + # to preemptively do so during compilation too or they conflict. But we do + # want Rust to generate LTO metadata in order for the linker to do its job. + rustflags = [ "-Clinker-plugin-lto=yes" ] } } @@ -977,7 +1074,10 @@ config("thinlto_optimize_max") { ldflags = [ "-Wl,--lto-O" + lto_opt_level ] } - rustflags = [ "-Clto=thin" ] + # We always point Rust to a linker that performs LTO, so we don't want Rust + # to preemptively do so during compilation too or they conflict. But we do + # want Rust to generate LTO metadata in order for the linker to do its job. + rustflags = [ "-Clinker-plugin-lto=yes" ] } } @@ -1282,7 +1382,7 @@ config("compiler_cpu_abi") { ldflags += [ "-m64" ] } } else if (current_cpu == "riscv64") { - if (is_clang) { + if (is_clang && !is_android) { cflags += [ "--target=riscv64-linux-gnu" ] ldflags += [ "--target=riscv64-linux-gnu" ] } @@ -1317,7 +1417,7 @@ config("compiler_codegen") { configs += [ "//build/config/nacl:compiler_codegen" ] } - if (current_cpu == "arm64" && !is_win) { + if (current_cpu == "arm64" && !is_win && is_clang) { # Disable outlining everywhere on arm64 except Win. For more information see # crbug.com/931297 for Android and crbug.com/1410297 for iOS. # TODO(crbug.com/1411363): Enable this on Windows if possible. @@ -1504,10 +1604,26 @@ config("runtime_library") { configs += [ "//build/config/c++:runtime_library" ] } + # Rust and C++ both provide intrinsics for LLVM to call for math operations. We + # want to use the C++ intrinsics, not the ones in the Rust compiler_builtins + # library. The Rust symbols are marked as weak, so that they can be replaced by + # the C++ symbols. This config ensures the C++ symbols exist and are strong in + # order to cause that replacement to occur by explicitly linking in clang's + # compiler-rt library. + if (is_clang && toolchain_has_rust) { + configs += [ "//build/config/clang:compiler_builtins" ] + } + # TODO(crbug.com/830987): Come up with a better name for is POSIX + Fuchsia # configuration. if (is_posix || is_fuchsia) { configs += [ "//build/config/posix:runtime_library" ] + + if (use_custom_libunwind) { + # Instead of using an unwind lib from the toolchain, + # buildtools/third_party/libunwind will be built and used directly. + ldflags = [ "--unwindlib=none" ] + } } # System-specific flags. If your compiler flags apply to one of the @@ -1658,6 +1774,16 @@ config("default_warnings") { cflags += [ "-Wno-nonportable-include-path" ] } + if (is_fuchsia && llvm_force_head_revision) { + cflags_cc += [ + # TODO(https://crbug.com/1474032): fix and reenable + "-Wno-deprecated-literal-operator", + + # TODO(https://crbug.com/1474434): fix and reenable + "-Wno-missing-field-initializers", + ] + } + cflags += [ "-Wenum-compare-conditional", @@ -1679,7 +1805,24 @@ config("default_warnings") { ] } } + + # Some builders, such as Cronet, use a different version of Clang than + # Chromium. This can cause minor errors when compiling Chromium changes. We + # want to avoid these errors. + if (use_lenient_compiler_flags) { + cflags += [ + "-Wno-error=unknown-warning-option", + "-Wno-error=unused-command-line-argument", + ] + } } + + # Rust warnings + + # Require `unsafe` blocks even in `unsafe` fns. This is intended to become + # an error by default eventually; see + # https://github.com/rust-lang/rust/issues/71668 + rustflags = [ "-Dunsafe_op_in_unsafe_fn" ] } # prevent_unsafe_narrowing ---------------------------------------------------- @@ -1751,6 +1894,15 @@ config("chromium_code") { cflags += [ "-Wextra" ] } + if (treat_warnings_as_errors) { + # Turn rustc warnings into the "deny" lint level, which produce compiler + # errors. The equivalent of -Werror for clang/gcc. + # + # Note we apply the actual lint flags in config("compiler"). All warnings + # are suppressed in third-party crates. + rustflags = [ "-Dwarnings" ] + } + # In Chromium code, we define __STDC_foo_MACROS in order to get the # C99 macros on Mac and Linux. defines = [ @@ -1765,17 +1917,24 @@ config("chromium_code") { # Non-chromium code is not guaranteed to compile cleanly with # _FORTIFY_SOURCE. Also, fortified build may fail when optimizations are # disabled, so only do that for Release build. - defines += [ "_FORTIFY_SOURCE=2" ] - } + fortify_level = "2" - if (is_mac) { - cflags_objc = [ "-Wobjc-missing-property-synthesis" ] - cflags_objcc = [ "-Wobjc-missing-property-synthesis" ] + # ChromeOS supports a high-quality _FORTIFY_SOURCE=3 implementation + # with a few custom glibc patches. Use that if it's available. + if (is_chromeos_ash) { + fortify_level = "3" + } + defines += [ "_FORTIFY_SOURCE=" + fortify_level ] } - if (is_ios) { + if (is_apple) { cflags_objc = [ "-Wimplicit-retain-self" ] - cflags_objcc = cflags_objc + cflags_objcc = [ "-Wimplicit-retain-self" ] + } + + if (is_mac) { + cflags_objc += [ "-Wobjc-missing-property-synthesis" ] + cflags_objcc += [ "-Wobjc-missing-property-synthesis" ] } } @@ -1788,13 +1947,11 @@ config("chromium_code") { # Warn on unnecessary extra semicolons outside of function definitions. "-Wextra-semi", - ] - # TODO(thakis): Enable this more often, https://crbug.com/346399 - # use_libfuzzer: https://crbug.com/1063180 - if ((!is_nacl || is_nacl_saigo) && !use_libfuzzer) { - cflags += [ "-Wunreachable-code-aggressive" ] - } + # Warn on unreachable code, including unreachable breaks and returns. + # See https://crbug.com/346399#c148 for suppression strategies. + "-Wunreachable-code-aggressive", + ] # Thread safety analysis is broken under nacl: https://crbug.com/982423. if (!is_nacl || is_nacl_saigo) { @@ -2334,10 +2491,12 @@ if (is_clang && is_a_target_toolchain) { if (is_android || is_castos) { _clang_sample_profile = "//chrome/android/profiles/afdo.prof" } else { - assert(chromeos_afdo_platform == "atom" || - chromeos_afdo_platform == "bigcore" || - chromeos_afdo_platform == "arm", - "Only atom, bigcore and arm are valid Chrome OS profiles.") + assert( + chromeos_afdo_platform == "atom" || + chromeos_afdo_platform == "bigcore" || + chromeos_afdo_platform == "arm" || + chromeos_afdo_platform == "arm-exp", + "Only 'atom', 'bigcore', 'arm' and 'arm-exp' are valid ChromeOS profiles.") _clang_sample_profile = "//chromeos/profiles/${chromeos_afdo_platform}.afdo.prof" } @@ -2375,6 +2534,14 @@ config("afdo") { if (use_profi) { cflags += [ "-fsample-profile-use-profi" ] } + + # crbug.com/1459429: ARM builds see failures due to -Wbackend-plugin. + # These seem to be false positives - the complaints are about functions + # marked with `__nodebug__` not having associated debuginfo. In the case + # where this was observed, the `__nodebug__` function was also marked + # `__always_inline__` and had no branches, so AFDO info is likely useless + # there. + cflags += [ "-Wno-backend-plugin" ] inputs = [ _clang_sample_profile ] } } else if (auto_profile_path != "" && is_a_target_toolchain) { @@ -2416,6 +2583,7 @@ config("win_pdbaltpath") { # Full symbols. config("symbols") { + rustflags = [] if (is_win) { if (is_clang) { cflags = [ @@ -2454,11 +2622,19 @@ config("symbols") { if (!is_nacl && current_os != "aix") { if (use_dwarf5) { cflags += [ "-gdwarf-5" ] - } else if (!is_apple) { + rustflags += [ "-Zdwarf-version=5" ] + } else { # Recent clang versions default to DWARF5 on Linux, and Android is about - # to switch. TODO: Adopt that in controlled way. - # Apple platforms still default to 4, so the flag is not needed there. - cflags += [ "-gdwarf-4" ] + # to switch. TODO: Adopt that in controlled way. For now, keep DWARF4. + # Apple platforms still default to 4 in clang, so they don't need the + # cflags. + if (!is_apple) { + cflags += [ "-gdwarf-4" ] + } + + # On Apple, rustc defaults to DWARF2 so it needs to be told how to + # match clang. + rustflags += [ "-Zdwarf-version=4" ] } } @@ -2550,17 +2726,25 @@ config("symbols") { ] } } - rustflags = [ "-g" ] + rustflags += [ "-g" ] } # Minimal symbols. # This config guarantees to hold symbol for stack trace which are shown to user # when crash happens in unittests running on buildbot. config("minimal_symbols") { + rustflags = [] if (is_win) { # Functions, files, and line tables only. cflags = [] + if (is_clang) { + cflags += [ + # Disable putting the compiler command line into the debug info to + # prevent some types of non-determinism. + "-gno-codeview-command-line", + ] + } if (is_clang && use_lld && use_ghash) { cflags += [ "-gcodeview-ghash" ] ldflags = [ "/DEBUG:GHASH" ] @@ -2584,15 +2768,18 @@ config("minimal_symbols") { # at least 10.11. # TODO(thakis): Remove this once mac_deployment_target is 10.11. cflags += [ "-gdwarf-4" ] + rustflags += [ "-Zdwarf-version=4" ] } else if (!use_dwarf5 && !is_nacl && current_os != "aix") { # On aix -gdwarf causes linker failures due to thread_local variables. # Recent clang versions default to DWARF5 on Linux, and Android is about # to switch. TODO: Adopt that in controlled way. cflags += [ "-gdwarf-4" ] + rustflags += [ "-Zdwarf-version=4" ] } if (use_dwarf5 && !is_nacl) { cflags += [ "-gdwarf-5" ] + rustflags += [ "-Zdwarf-version=5" ] } # The gcc-based nacl compilers don't support -fdebug-compilation-dir (see @@ -2624,7 +2811,7 @@ config("minimal_symbols") { asmflags = cflags } - rustflags = [ "-Cdebuginfo=1" ] + rustflags += [ "-Cdebuginfo=1" ] } # This configuration contains function names only. That is, the compiler is @@ -2668,33 +2855,35 @@ config("strip_debug") { } if (is_apple) { - # On Mac and iOS, this enables support for ARC (automatic ref-counting). - # See http://clang.llvm.org/docs/AutomaticReferenceCounting.html. + # On macOS and iOS, this enables support for ARC (automatic reference + # counting). See http://clang.llvm.org/docs/AutomaticReferenceCounting.html. + # + # -fobjc-arc enables ARC overall. + # + # ARC does not add exception handlers to pure Objective-C code, but does add + # them to Objective-C++ code with the rationale that C++ pervasively adds them + # in for exception safety. However, exceptions are banned in Chromium code for + # C++ and exceptions in Objective-C code are intended to be fatal, so + # -fno-objc-arc-exceptions is specified to disable these unwanted exception + # handlers. config("enable_arc") { - common_flags = [ "-fobjc-arc" ] + common_flags = [ + "-fobjc-arc", + "-fno-objc-arc-exceptions", + ] cflags_objc = common_flags cflags_objcc = common_flags } } -if (is_chromeos_ash && is_chromeos_device) { - # This config is intended to be a temporary to facilitate - # the transition to use orderfile in Chrome OS. Once orderfile - # use becomes a default in Chrome OS, this config should not - # be needed. - config("use_orderfile_for_hugepage") { - if (chrome_orderfile_path != "") { - defines = [ "CHROMEOS_ORDERFILE_USE" ] - } - } -} - -if (is_android || (is_chromeos_ash && is_chromeos_device)) { - # Use orderfile for linking Chrome on Android and Chrome OS. +if (is_android) { + # Use orderfile for linking Chrome on Android. # This config enables using an orderfile for linking in LLD. - # TODO: Consider using call graph sort instead, at least on Android. config("chrome_orderfile_config") { - if (chrome_orderfile_path != "" && !enable_call_graph_profile_sort) { + # Don't try to use an orderfile with call graph sorting, except on Android, + # where we care about memory used by code, so we still want to mandate + # ordering. + if (chrome_orderfile_path != "") { assert(use_lld) _rebased_orderfile = rebase_path(chrome_orderfile_path, root_build_dir) ldflags = [ diff --git a/build/config/compiler/compiler.gni b/build/config/compiler/compiler.gni index 25f7310..23fb1d3 100644 --- a/build/config/compiler/compiler.gni +++ b/build/config/compiler/compiler.gni @@ -246,7 +246,8 @@ declare_args() { current_cpu == "arm" || current_cpu == "arm64" || current_cpu == "mipsel" || current_cpu == "mips64el")) || (is_android && (current_cpu == "x86" || current_cpu == "x64" || - current_cpu == "arm" || current_cpu == "arm64"))) + current_cpu == "arm" || current_cpu == "arm64" || + current_cpu == "riscv64"))) } # Use relative paths for debug info. This is important to make the build diff --git a/build/config/compiler/pgo/BUILD.gn b/build/config/compiler/pgo/BUILD.gn index 900ae06..a78d37d 100644 --- a/build/config/compiler/pgo/BUILD.gn +++ b/build/config/compiler/pgo/BUILD.gn @@ -6,6 +6,7 @@ import("//build/config/chromeos/ui_mode.gni") import("//build/config/clang/clang.gni") import("//build/config/compiler/compiler.gni") import("//build/config/compiler/pgo/pgo.gni") +import("//build/config/features.gni") import("//build/toolchain/toolchain.gni") # Configuration that enables PGO instrumentation. @@ -40,7 +41,9 @@ config("pgo_optimization_flags") { inputs = [] if (is_win) { - if (target_cpu == "x64") { + if (target_cpu == "arm64") { + _pgo_target = "win-arm64" + } else if (target_cpu == "x64") { _pgo_target = "win64" } else { _pgo_target = "win32" @@ -51,11 +54,26 @@ config("pgo_optimization_flags") { } else { _pgo_target = "mac" } - } else if (is_linux || is_chromeos_lacros) { + } else if (is_linux) { _pgo_target = "linux" + } else if (is_chromeos_lacros) { + if (target_cpu == "arm") { + _pgo_target = "lacros-arm" + } else if (target_cpu == "arm64") { + _pgo_target = "lacros-arm64" + } else { + _pgo_target = "lacros64" + } } else if (is_android) { - # Temporarily use mac-arm profile until Android native PGO support works. - # TODO(crbug.com/1308749): fix this. + # Use |current_cpu| and not |target_cpu|; for Android we may built both. + if (current_cpu == "arm64") { + _pgo_target = "android-arm64" + } else { + _pgo_target = "android-arm32" + } + + # Continue to use mac-arm profile until Android native PGO autoroll works. + # TODO(crbug.com/1308749): Remove the following. _pgo_target = "mac-arm" } else if (is_fuchsia) { if (target_cpu == "arm64") { @@ -63,9 +81,17 @@ config("pgo_optimization_flags") { } else { _pgo_target = "mac" } + } else if (is_ios && use_blink) { + if (target_cpu == "arm64") { + _pgo_target = "mac-arm" + } else { + _pgo_target = "mac" + } } - if (_pgo_target == "win64") { + if (_pgo_target == "win-arm64") { + inputs = [ "//chrome/build/win-arm64.pgo.txt" ] + } else if (_pgo_target == "win64") { inputs = [ "//chrome/build/win64.pgo.txt" ] } else if (_pgo_target == "win32") { inputs = [ "//chrome/build/win32.pgo.txt" ] @@ -75,6 +101,16 @@ config("pgo_optimization_flags") { inputs = [ "//chrome/build/mac.pgo.txt" ] } else if (_pgo_target == "linux") { inputs = [ "//chrome/build/linux.pgo.txt" ] + } else if (_pgo_target == "lacros64") { + inputs = [ "//chrome/build/lacros64.pgo.txt" ] + } else if (_pgo_target == "lacros-arm") { + inputs = [ "//chrome/build/lacros-arm.pgo.txt" ] + } else if (_pgo_target == "lacros-arm64") { + inputs = [ "//chrome/build/lacros-arm64.pgo.txt" ] + } else if (_pgo_target == "android-arm32") { + inputs = [ "//chrome/build/android-arm32.pgo.txt" ] + } else if (_pgo_target == "android-arm64") { + inputs = [ "//chrome/build/android-arm64.pgo.txt" ] } if (_pgo_target != "" && pgo_data_path == "") { @@ -104,6 +140,21 @@ config("pgo_optimization_flags") { # See https://crbug.com/978401 "-Wno-backend-plugin", ] + + # Enable basic block layout based on the extended TSP problem. This aims to + # improve icache utilization and reduce the binary size. + if (use_thin_lto) { + if (is_win) { + ldflags = [ "-mllvm:-enable-ext-tsp-block-placement=1" ] + } else { + ldflags = [ "-Wl,-mllvm,-enable-ext-tsp-block-placement=1" ] + } + } else { + cflags += [ + "-mllvm", + "-enable-ext-tsp-block-placement=1", + ] + } } } diff --git a/build/config/compiler/pgo/pgo.gni b/build/config/compiler/pgo/pgo.gni index ce27137..a53d195 100644 --- a/build/config/compiler/pgo/pgo.gni +++ b/build/config/compiler/pgo/pgo.gni @@ -6,6 +6,8 @@ import("//build/config/chrome_build.gni") import("//build/config/chromecast_build.gni") import("//build/config/chromeos/ui_mode.gni") import("//build/config/dcheck_always_on.gni") +import("//build/config/features.gni") +import("//build/config/ios/config.gni") declare_args() { # Specify the current PGO phase. @@ -19,13 +21,13 @@ declare_args() { # bad compile times. chrome_pgo_phase = 0 if (!dcheck_always_on && is_official_build && - # TODO(crbug.com/1052397): Remove chromeos_is_browser_only once - # target_os switch for lacros-chrome is completed. # TODO(crbug.com/1336055): Update this now-outdated condition with regard # to chromecast and determine whether chromeos_is_browser_only is # obsolete. (is_high_end_android || is_win || is_mac || is_fuchsia || - (is_linux && !is_castos && !chromeos_is_browser_only))) { + (is_linux && !is_castos) || + (is_ios && use_blink && target_environment == "device") || + (is_chromeos_lacros && is_chromeos_device))) { chrome_pgo_phase = 2 } # PATCH(build-gn): No PGO. diff --git a/build/config/coverage/BUILD.gn b/build/config/coverage/BUILD.gn index 59941c3..6c3fca9 100644 --- a/build/config/coverage/BUILD.gn +++ b/build/config/coverage/BUILD.gn @@ -2,17 +2,28 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. +import("//build/buildflag_header.gni") import("//build/config/coverage/coverage.gni") import("//build/config/rust.gni") config("default_coverage") { if (use_clang_coverage) { + configs = [] ldflags = [] + rustflags = [] if (!is_win) { + ldflags += [ "-fprofile-instr-generate" ] + } else { # Windows directly calls link.exe instead of the compiler driver when # linking, and embeds the path to the profile runtime library as # dependent library into each object file. - ldflags += [ "-fprofile-instr-generate" ] + # + # However... some build targets have no C++ object file (they have Rust + # instead), and thus the linker ends up not pulling in the profile + # library. So we add an edge to it directly. + if (toolchain_has_rust) { + configs += [ "//build/config/clang:compiler_profile" ] + } } cflags = [ @@ -32,7 +43,7 @@ config("default_coverage") { # tools that will be used to process the coverage output. This is because # the coverage file format is not stable. if (use_chromium_rust_toolchain) { - rustflags = [ "-Cinstrument-coverage" ] + rustflags += [ "-Cinstrument-coverage" ] } if (is_linux || is_chromeos) { @@ -41,3 +52,8 @@ config("default_coverage") { } } } + +buildflag_header("buildflags") { + header = "buildflags.h" + flags = [ "USE_JAVASCRIPT_COVERAGE=$use_javascript_coverage" ] +} diff --git a/build/config/coverage/coverage.gni b/build/config/coverage/coverage.gni index 2e5b7ab..cd4466c 100644 --- a/build/config/coverage/coverage.gni +++ b/build/config/coverage/coverage.gni @@ -34,6 +34,9 @@ declare_args() { # # NOTE that this arg will be non-op if use_clang_coverage is false. coverage_instrumentation_input_file = "" + + # Enables TypeScript/JavaScript code coverage. + use_javascript_coverage = false } assert(!use_clang_coverage || is_clang, diff --git a/build/config/cronet/config.gni b/build/config/cronet/config.gni index 1468ec1..0687f49 100644 --- a/build/config/cronet/config.gni +++ b/build/config/cronet/config.gni @@ -7,4 +7,11 @@ declare_args() { # components/cronet/tools/cr_cronet.py as cronet requires specific # gn args to build correctly). is_cronet_build = false + + # Control whether lenient compiler flags should be used. To ensure that minor + # failures in the AOSP Cronet builders do not block Chromium CLs, we will make + # these builders as lenient as possible by not treating some warnings as + # errors. Please refer to go/cronet-builders-with-mainline-clang-design for + # more information. + use_lenient_compiler_flags = false } diff --git a/build/config/fuchsia/BUILD.gn b/build/config/fuchsia/BUILD.gn index 1becaa4..90f23de 100644 --- a/build/config/fuchsia/BUILD.gn +++ b/build/config/fuchsia/BUILD.gn @@ -5,10 +5,10 @@ import("//build/config/chromecast_build.gni") import("//build/config/clang/clang.gni") import("//build/config/fuchsia/generate_runner_scripts.gni") -import("//third_party/fuchsia-sdk/sdk/build/config/config.gni") +import("//build/config/fuchsia/gn_configs.gni") assert(is_fuchsia) -assert(!is_posix) +assert(!is_posix, "Fuchsia is not POSIX.") config("compiler") { configs = [ "//third_party/fuchsia-sdk/sdk/build/config:compiler" ] @@ -30,8 +30,6 @@ group("deployment_resources") { "//build/fuchsia/", "//build/util/lib/", "//third_party/fuchsia-sdk/sdk/.build-id/", - "//third_party/fuchsia-sdk/sdk/bin/fpave.sh", - "//third_party/fuchsia-sdk/sdk/bin/fuchsia-common.sh", "//third_party/fuchsia-sdk/sdk/meta/manifest.json", "//third_party/fuchsia-sdk/sdk/tools/${test_host_cpu}/ffx", "//third_party/fuchsia-sdk/sdk/tools/${test_host_cpu}/ffx-meta.json", @@ -56,10 +54,6 @@ group("deployment_resources") { } if (test_isolate_uses_emulator) { - data += [ - "//third_party/fuchsia-sdk/sdk/bin/device_launcher.version", - "//third_party/fuchsia-sdk/sdk/tools/${test_host_cpu}/fvdl", - ] if (test_host_cpu == "x64") { data += [ "//third_party/fuchsia-sdk/sdk/tools/${test_host_cpu}/aemu_internal", @@ -99,3 +93,10 @@ group("asan_runtime_library") { ":sysroot_asan_runtime_libs", ] } + +# rustc gives the linker (clang++) "-pie" directives. clang++ complains on +# Fuchsia that these don't make any sense. On Fuchsia alone, for Rust-linked +# targets only, disable these warnings. +config("rustc_no_pie_warning") { + ldflags = [ "-Wno-unused-command-line-argument" ] +} diff --git a/build/config/fuchsia/OWNERS b/build/config/fuchsia/OWNERS index afdc62e..12f80c5 100644 --- a/build/config/fuchsia/OWNERS +++ b/build/config/fuchsia/OWNERS @@ -1,4 +1,4 @@ file://build/fuchsia/OWNERS -per-file *.cmx=set noparent -per-file *.cmx=file://build/fuchsia/SECURITY_OWNERS +chonggu@google.com +zijiehe@google.com diff --git a/build/config/fuchsia/build_cmx_from_fragment.py b/build/config/fuchsia/build_cmx_from_fragment.py deleted file mode 100644 index 190a260..0000000 --- a/build/config/fuchsia/build_cmx_from_fragment.py +++ /dev/null @@ -1,49 +0,0 @@ -# Copyright 2020 The Chromium Authors -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. -"""Creates a complete CMX (v1) component manifest, from a program name and - manifest fragment file.""" - -import argparse -import json -import sys - - -def BuildCmxFromFragment(output_file, fragment_file, program_binary): - """Reads a CMX fragment specifying e.g. features & sandbox, and a program - binary's filename, and writes out the full CMX. - - output_file: Build-relative filename at which to write the full CMX. - fragment_file: Build-relative filename of the CMX fragment to read from. - program_binary: Package-relative filename of the program binary. - """ - - with open(output_file, 'w') as component_manifest_file: - component_manifest = json.load(open(fragment_file, 'r')) - component_manifest.update({ - 'program': { - 'binary': program_binary - }, - }) - json.dump(component_manifest, component_manifest_file) - - -def main(): - parser = argparse.ArgumentParser() - parser.add_argument( - '--cmx-fragment', - required=True, - help='Path to the CMX fragment to read from') - parser.add_argument( - '--cmx', required=True, help='Path to write the complete CMX file to') - parser.add_argument( - '--program', - required=True, - help='Package-relative path to the program binary') - args = parser.parse_args() - - return BuildCmxFromFragment(args.cmx, args.cmx_fragment, args.program) - - -if __name__ == '__main__': - sys.exit(main()) diff --git a/build/config/fuchsia/generate_runner_scripts.gni b/build/config/fuchsia/generate_runner_scripts.gni index 66974f5..747fb67 100644 --- a/build/config/fuchsia/generate_runner_scripts.gni +++ b/build/config/fuchsia/generate_runner_scripts.gni @@ -2,8 +2,6 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. -assert(is_fuchsia) - import("//build/config/chromecast_build.gni") import("//build/config/fuchsia/config.gni") import("//build/config/fuchsia/fuchsia_package_metadata.gni") @@ -11,11 +9,13 @@ import("//build/config/gclient_args.gni") import("//build/config/sysroot.gni") import("//build/util/generate_wrapper.gni") +assert(is_fuchsia) + declare_args() { # Sets the Fuchsia Amber repository which will be used by default by the # generated installation scripts. If not specified, then no default directory # will be used. - default_fuchsia_build_dir_for_installation = "" + default_fuchsia_out_dir = "" # Sets the Fuchsia device node name which will be used by default by the # generated runner scripts. If not specficed, then no default node name will @@ -34,12 +34,6 @@ declare_args() { # This variable controls the browser included in the Telemetry based test # targets. fuchsia_browser_type = "web_engine_shell" - - # This variable controls which default version of the testing scripts to use. - # Individual tests can override this via setting |legacy_script_required| to - # true. - # TODO(crbug/1280705): remove when all tests are migrated to CFv2. - use_v2_script_default = true } # Generates a wrapper script under root_build_dir/bin that performs an @@ -68,10 +62,8 @@ declare_args() { # --package - the path to a .FAR package to install. # --package_name - the name of the package to use as an # entry point. -# include_fuchsia_build_dir: If true, adds -# |default_fuchsia_build_dir_for_installation| -# to executable_args (when set in GN args). -# use_v2_script: Whether to use the the ssh based v1 or ffx based v2 scripts. +# include_fuchsia_out_dir: If true, adds |default_fuchsia_out_dir| +# to executable_args (when set in GN args). template("fuchsia_run_script_with_packages") { if (defined(invoker.package_name)) { _pkg_shortname = invoker.package_name @@ -89,7 +81,7 @@ template("fuchsia_run_script_with_packages") { "executable", "executable_args", "data", - "include_fuchsia_build_dir", + "include_fuchsia_out_dir", "target", ]) @@ -121,25 +113,11 @@ template("fuchsia_run_script_with_packages") { } # Compute the list of full paths to package files, including dependencies. - if (!invoker.use_v2_script) { - _pkg_dir = "$root_out_dir/gen/" + get_label_info(invoker.package, "dir") + - "/" + _pkg_shortname - package_paths = - [ rebase_path("$_pkg_dir/${_pkg_shortname}.far", root_build_dir) ] - } if (defined(invoker.package_deps)) { foreach(package_dep, invoker.package_deps) { package_dep_target = package_dep[0] deps += [ package_dep_target ] data_deps += [ package_dep_target ] - if (!invoker.use_v2_script) { - package_dep_name = package_dep[1] - package_dep_path = rebase_path( - get_label_info(package_dep_target, "target_gen_dir") + "/" + - package_dep_name + "/" + package_dep_name + ".far", - root_build_dir) - package_paths += [ package_dep_path ] - } } } @@ -148,22 +126,11 @@ template("fuchsia_run_script_with_packages") { executable_args = [] } - if (!invoker.use_v2_script) { - foreach(package_path, package_paths) { - executable_args += [ - "--package", - "@WrappedPath(${package_path})", - "--package-name", - _pkg_shortname, - ] - } - } - - if (defined(include_fuchsia_build_dir) && include_fuchsia_build_dir && - default_fuchsia_build_dir_for_installation != "") { + if (defined(include_fuchsia_out_dir) && include_fuchsia_out_dir && + default_fuchsia_out_dir != "") { executable_args += [ "--fuchsia-out-dir", - default_fuchsia_build_dir_for_installation, + default_fuchsia_out_dir, ] } } @@ -175,7 +142,10 @@ template("fuchsia_run_script_with_packages") { forward_variables_from(invoker, TESTONLY_AND_VISIBILITY) executable = _generated_script_path wrapper_script = "$root_build_dir/${invoker.executable_wrapper}" - deps = [ ":${invoker._run_target}" ] + deps = [ + ":${invoker._install_target}", + ":${invoker._run_target}", + ] } } } @@ -188,11 +158,6 @@ template("fuchsia_package_installer") { } else { pkg_shortname = get_label_info(invoker.package, "name") } - if (!defined(invoker.use_v2_script)) { - use_v2_script = use_v2_script_default - } else { - use_v2_script = invoker.use_v2_script - } fuchsia_package_metadata(pkg_shortname) { forward_variables_from(invoker, TESTONLY_AND_VISIBILITY + [ @@ -205,18 +170,14 @@ template("fuchsia_package_installer") { "*", TESTONLY_AND_VISIBILITY + [ "executable_args" ]) forward_variables_from(invoker, TESTONLY_AND_VISIBILITY) - if (use_v2_script) { - executable = rebase_path("//build/fuchsia/test/deploy_to_fuchsia.py") - executable_args = [ - "--out-dir", - "@WrappedPath(.)", - pkg_shortname, - ] - } else { - executable = rebase_path("//build/fuchsia/deploy_to_pkg_repo.py") - } + executable = rebase_path("//build/fuchsia/test/deploy_to_fuchsia.py") + executable_args = [ + "--out-dir", + "@WrappedPath(.)", + pkg_shortname, + ] output_name_format = "deploy_%package%" - include_fuchsia_build_dir = true + include_fuchsia_out_dir = true } } @@ -226,12 +187,6 @@ template("fuchsia_test_runner") { _run_target = "${target_name}__runner" _install_target = "${target_name}__installer" - if (!defined(invoker.use_v2_script)) { - use_v2_script = use_v2_script_default - } else { - use_v2_script = invoker.use_v2_script - } - fuchsia_run_script_with_packages(_run_target) { forward_variables_from(invoker, TESTONLY_AND_VISIBILITY + [ @@ -242,11 +197,7 @@ template("fuchsia_test_runner") { "package_deps", ]) - if (use_v2_script) { - _test_runner_py = "//build/fuchsia/test/run_test.py" - } else { - _test_runner_py = "//build/fuchsia/test_runner.py" - } + _test_runner_py = "//build/fuchsia/test/run_test.py" executable = rebase_path(_test_runner_py) @@ -262,31 +213,17 @@ template("fuchsia_test_runner") { "@WrappedPath(.)", ] - if (use_v2_script) { - executable_args += [ package_name ] - } else { - executable_args += [ - "--target-cpu", - target_cpu, - ] - } + executable_args += [ package_name ] if (defined(invoker.use_test_server) && invoker.use_test_server) { executable_args += [ "--enable-test-server" ] } if (default_fuchsia_device_node_name != "") { - if (use_v2_script) { - executable_args += [ - "--target-id", - default_fuchsia_device_node_name, - ] - } else { - executable_args += [ - "--node-name", - default_fuchsia_device_node_name, - ] - } + executable_args += [ + "--target-id", + default_fuchsia_device_node_name, + ] } # Declare the files that are needed for test execution on LUCI swarming @@ -294,11 +231,10 @@ template("fuchsia_test_runner") { if (!defined(data)) { data = [] } - data += [ _test_runner_py ] - - if (use_v2_script) { - data += [ "$root_gen_dir/package_metadata/${invoker.package_name}.meta" ] - } + data += [ + _test_runner_py, + "$root_gen_dir/package_metadata/${invoker.package_name}.meta", + ] # TODO(crbug.com/1256870): Remove this once all out-of-tree references # to "package_name_override" are migrated to "package_name". diff --git a/build/config/fuchsia/gn_configs.gni b/build/config/fuchsia/gn_configs.gni new file mode 100644 index 0000000..ca9e2c6 --- /dev/null +++ b/build/config/fuchsia/gn_configs.gni @@ -0,0 +1,57 @@ +# Copyright 2023 The Chromium Authors +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +assert(is_fuchsia) + +declare_args() { + # The target API level for this repository. Embedders should override this + # value to specify the API level the packages produced from this repository + # should be targeting, e.g. in their top-level //.gn file. A value of -1 + # means that no API level will be passed to the tools that consumes it. + fuchsia_target_api_level = 12 + + # Path to the fuchsia SDK. This is intended for use in other templates & + # rules to reference the contents of the fuchsia SDK. + fuchsia_sdk = "//third_party/fuchsia-sdk/sdk" + + # ID uniquely identifying the Fuchsia IDK build. This is exposed as a + # property so it can be used to locate images and packages on GCS and + # as a marker to indicate the "version" of the IDK. + # Defaults to the id found in the manifest.json file of the SDK. + fuchsia_sdk_id = "" +} + +declare_args() { + # The SDK manifest file. This is useful to include as a dependency + # for some targets in order to cause a rebuild when the version of the + # SDK is changed. + fuchsia_sdk_manifest_file = "$fuchsia_sdk/meta/manifest.json" + + # fuchsia_tool_dir is used to specify the directory in the SDK to locate + # tools for the host cpu architecture. If the host_cpu is not recognized, + # then tool dir defaults to x64. + fuchsia_tool_dir = "${fuchsia_sdk}/tools/x64" + if (host_cpu == "arm64") { + fuchsia_tool_dir = "${fuchsia_sdk}/tools/arm64" + } +} + +if (fuchsia_sdk_id == "") { + # Note: If we need to expose more than just the id in the future, + # we should consider exposing the entire json object for the metadata vs. + # adding a bunch of variables. + _meta = read_file(fuchsia_sdk_manifest_file, "json") + fuchsia_sdk_id = _meta.id +} + +declare_args() { + # Specify a readelf_exec path to use. If not specified, the host's system + # executable will be used. Passed to populate_build_id_dir.py and + # prepare_package_inputs.py via the --readelf-exec flag. + # Must be a GN path (not an absolute path) since it is adjusted with + # rebase_path(). + if (!defined(fuchsia_sdk_readelf_exec)) { + fuchsia_sdk_readelf_exec = "" + } +} diff --git a/build/config/fuchsia/packaged_content_embedder_excluded_dirs.gni b/build/config/fuchsia/packaged_content_embedder_excluded_dirs.gni index a08ed45..f179a66 100644 --- a/build/config/fuchsia/packaged_content_embedder_excluded_dirs.gni +++ b/build/config/fuchsia/packaged_content_embedder_excluded_dirs.gni @@ -4,6 +4,8 @@ import("//build/config/devtools.gni") +assert(is_fuchsia) + # List of transitively included directories that should be stripped from # released packages for size reasons. For use with the |excluded_dirs| variable # of fuchsia_package(). diff --git a/build/config/fuchsia/size_optimized_cast_receiver_args.gn b/build/config/fuchsia/size_optimized_cast_receiver_args.gn index b65d05d..3f92d8d 100644 --- a/build/config/fuchsia/size_optimized_cast_receiver_args.gn +++ b/build/config/fuchsia/size_optimized_cast_receiver_args.gn @@ -20,7 +20,9 @@ enable_printing = false enable_cast_receiver = true +cast_streaming_enable_remoting = true enable_dav1d_decoder = false +produce_v8_compile_hints = false # //chrome makes many assumptions that Extensions are enabled. # TODO(crbug.com/1363742): Fix theses assumptions or avoid building it. diff --git a/build/config/fuchsia/sizes.gni b/build/config/fuchsia/sizes.gni index 87e4fff..fc97676 100644 --- a/build/config/fuchsia/sizes.gni +++ b/build/config/fuchsia/sizes.gni @@ -2,6 +2,8 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. +assert(is_fuchsia) + import("//build/util/generate_wrapper.gni") template("compute_fuchsia_package_sizes") { diff --git a/build/config/fuchsia/test/OWNERS b/build/config/fuchsia/test/OWNERS index 50a4d58..ac711c0 100644 --- a/build/config/fuchsia/test/OWNERS +++ b/build/config/fuchsia/test/OWNERS @@ -1,11 +1,7 @@ file://build/fuchsia/OWNERS -per-file *.test-cmx=set noparent -per-file *.test-cmx=ddorwin@chromium.org -per-file *.test-cmx=wez@chromium.org per-file *.test-cml=set noparent per-file *.test-cml=ddorwin@chromium.org per-file *.test-cml=wez@chromium.org # Please prefer the above when possible. -per-file *.test-cmx=file://build/fuchsia/SECURITY_OWNERS per-file *.test-cml=file://build/fuchsia/SECURITY_OWNERS diff --git a/build/config/fuchsia/test/README.md b/build/config/fuchsia/test/README.md index f2084d9..5a81a5f 100644 --- a/build/config/fuchsia/test/README.md +++ b/build/config/fuchsia/test/README.md @@ -9,36 +9,76 @@ below: ### General Purpose Fragments #### archivist.shard.test-cml -Runs an `archivist-without-attribution` with custom protocol routing for tests +Runs an `archivist-for-embedding` with custom protocol routing for tests that want to intercept events written to a `LogSink` by a component. #### chromium_test_facet.shard.test-cml -Runs CFv2 tests in the "chromium" test realm. This is generally required for all -Chromium tests that must interact with true system services. +Runs tests in the `chromium` test realm, which is mostly hermetic but has +access to specific system services that cannot (currently) be faked. For more +information, see https://fxbug.dev/91934. This is generally required for all +Chromium tests not using the +[`chromium_system_test_facet`](#chromium_system_test_facetshardtest-cml). #### fonts.shard.test-cml -For tests that test fonts by providing `fuchsia.fonts.Provider`. This shard -runs an isolated font provider, but serves the fonts present on the system. +For tests that need `fuchsia.fonts.Provider` to provide a basic set of fonts. +This shard runs an isolated font provider with fonts bundled into the fonts +package. #### test_fonts.shard.test-cml -For tests that use the fonts in `//third_party/test_fonts` by way of -`//skia:test_fonts_cfv2`. +For tests that need `fuchsia.fonts.Provider` to provide a specific set of fonts +(beyond that provided by `fonts.shard.test-cml`). This shard requires fonts to +be provided as a directory. The directory must be named `config-data`, must +contain the file named `all_font_manifest.json`, and all the font files named +in it. For details see the [font manifest][fm] in Fuchsia documentation. + +[fm]: https://fuchsia.dev/fuchsia-src/development/internationalization/fonts/build?hl=en#:font_collection-outputs + +The user of this shard must provide a directory `/pkg/test_fonts`, which must +contain all the files described above. + +Within Chromium, these fonts are usually provided via the target +`//skia:test_fonts`. #### mark_vmo_executable.shard.test-cml Required by tests that execute JavaScript. Should only be required in a small number of tests. #### minimum.shard.test-cml -Capabilities required by anything that uses `//base/test`, used as the base -fragment for all test suites. +Capabilities required by anything that uses `//base/test` when running in the +(default) `chromium` test realm. It is the default base fragment for most +`test()` Components. -`config-data` is included in the features list so that the platform can offer -ICU timezone data to these tests when they are being run. A more general -approach is discussed in https://fxbug.dev/85845. +The system-wide `config-data` directory capability is routed to tests running in +the realm so that individual tests may route subdirectories as needed. +TODO(crbug.com/1360077): Remove this after migrating to the new mechanism. #### logger.shard.test-cml For tests that test logging functionality by providing `fuchsia.logger.Log`. +#### sysmem.shard.test-cml +For tests that depend on the sysmem service (e.g. to allocate image buffers to +share with Vulkan and Scenic). + +#### system_test_minimum.shard.test-cml +Capabilities required by anything that uses `//base/test` when running as a +system test in the `chromium-system` test realm. It is the base fragment for +`test()` Components that use the +[`chromium_system_test_facet`](#chromium_system_test_facetshardtest-cml). + +Most tests use the [`minimum`](#minimumshardtest-cml) shard. + +#### chromium_system_test_facet.shard.test-cml +Runs tests in the `chromium-system` test realm. This is required for Chromium +tests that are intended to run against the actual system and its real system +services. This is required for, for example, performance tests intended to +measure system performance. Another overlapping use case is tests that need to +be run in environments without access to the packages containing fake +implementations of required protocols that other tests use. +(https://crbug.com/1408597 should make that use case obsolete.) + +Most tests should use the +[`chromium_test_facet`](#chromium_test_facetshardtest-cml). + #### test_ui_stack.shard.test-cml For tests that need an isolated UI subsystem, that supports the Flatland API set. This allows tests to e.g. run with view-focus unaffected by any @@ -82,6 +122,3 @@ Most services are required per the FIDL documentation. Contains services that need to be present when creating a `fuchsia.web.Context`. Note that the `fuchsia.scheduler.ProfileProvider` service is only used in tests that encounter memory pressure code. - -#### web_instance_host.shard.test-cml -Contains services that need to be present to use `WebInstanceHost`. diff --git a/build/config/fuchsia/test/archivist.shard.test-cml b/build/config/fuchsia/test/archivist.shard.test-cml index b85162f..1e014a0 100644 --- a/build/config/fuchsia/test/archivist.shard.test-cml +++ b/build/config/fuchsia/test/archivist.shard.test-cml @@ -5,7 +5,7 @@ children: [ { name: "isolated_archivist", - url: "fuchsia-pkg://fuchsia.com/archivist-without-attribution#meta/archivist-without-attribution.cm", + url: "fuchsia-pkg://fuchsia.com/archivist-for-embedding#meta/archivist-for-embedding.cm", }, ], use: [ @@ -20,9 +20,24 @@ from: "#isolated_archivist", }, ], + offer: [ + { + event_stream: [ + "capability_requested", + "directory_ready", + ], + from: "parent", + to: "#isolated_archivist", + }, + { + protocol: "fuchsia.logger.LogSink", + from: "parent", + to: "#isolated_archivist", + }, + ], facets: { "fuchsia.test": { - "deprecated-allowed-packages": [ "archivist-without-attribution" ], + "deprecated-allowed-packages": [ "archivist-for-embedding" ], }, }, } diff --git a/build/config/fuchsia/test/asan_options.shard.test-cml b/build/config/fuchsia/test/asan_options.shard.test-cml new file mode 100644 index 0000000..5866d79 --- /dev/null +++ b/build/config/fuchsia/test/asan_options.shard.test-cml @@ -0,0 +1,12 @@ +// Copyright 2023 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. +{ + program: { + // TODO(crbug.com/1465997): Remove the use of ASAN_OPTIONS once media does + // not load the shared rust library separately. + environ: [ + "ASAN_OPTIONS=detect_odr_violation=0", + ] + } +} diff --git a/build/config/fuchsia/test/chromium_system_test_facet.shard.test-cml b/build/config/fuchsia/test/chromium_system_test_facet.shard.test-cml new file mode 100644 index 0000000..cdf9ca7 --- /dev/null +++ b/build/config/fuchsia/test/chromium_system_test_facet.shard.test-cml @@ -0,0 +1,8 @@ +// Copyright 2023 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. +{ + facets: { + "fuchsia.test": { type: "chromium-system" }, + }, +} diff --git a/build/config/fuchsia/test/context_provider.shard.test-cml b/build/config/fuchsia/test/context_provider.shard.test-cml index ddd96e2..e5db2f1 100644 --- a/build/config/fuchsia/test/context_provider.shard.test-cml +++ b/build/config/fuchsia/test/context_provider.shard.test-cml @@ -22,8 +22,6 @@ protocol: [ "fuchsia.feedback.ComponentDataRegister", "fuchsia.feedback.CrashReportingProductRegister", - "fuchsia.sys.Environment", - "fuchsia.sys.Loader", ], from: "parent", to: "#context_provider", diff --git a/build/config/fuchsia/test/fonts.shard.test-cml b/build/config/fuchsia/test/fonts.shard.test-cml index 0ae7800..5eebf89 100644 --- a/build/config/fuchsia/test/fonts.shard.test-cml +++ b/build/config/fuchsia/test/fonts.shard.test-cml @@ -5,31 +5,30 @@ children: [ { name: "isolated_font_provider", - url: "fuchsia-pkg://fuchsia.com/fonts#meta/fonts.cm", + url: "fuchsia-pkg://fuchsia.com/fonts_hermetic_for_test#meta/font_provider_hermetic_for_test.cm", }, ], - offer: [ + use: [ { - directory: "config-data", - subdir: "fonts", - from: "parent", - to: "#isolated_font_provider", + protocol: "fuchsia.fonts.Provider", + from: "#isolated_font_provider", }, + ], + offer: [ { - protocol: "fuchsia.logger.LogSink", + protocol: [ + "fuchsia.logger.LogSink", + "fuchsia.tracing.provider.Registry", + ], from: "parent", to: "#isolated_font_provider", }, ], - use: [ - { - protocol: "fuchsia.fonts.Provider", - from: "#isolated_font_provider", - }, - ], facets: { "fuchsia.test": { - "deprecated-allowed-packages": [ "fonts" ], + // TODO(crbug.com/1408597): Remove when the isolated font provider + // component is subpackaged. + "deprecated-allowed-packages": [ "fonts_hermetic_for_test" ], }, }, } diff --git a/build/config/fuchsia/test/gfx_test_ui_stack.shard.test-cml b/build/config/fuchsia/test/gfx_test_ui_stack.shard.test-cml index 5b0d712..2e51f03 100644 --- a/build/config/fuchsia/test/gfx_test_ui_stack.shard.test-cml +++ b/build/config/fuchsia/test/gfx_test_ui_stack.shard.test-cml @@ -3,9 +3,12 @@ // found in the LICENSE file. // Used in tests which are hard-coded for the Scenic/GFX API-set. -// Use test_ui_stack.shard.test-cml when tetsing for Flatland, or when the +// Use test_ui_stack.shard.test-cml when testing for Flatland, or when the // choice of API-set is not important. { + include: [ + "//build/config/fuchsia/test/sysmem.shard.test-cml", + ], children: [ { name: "test_ui_stack", diff --git a/build/config/fuchsia/test/minimum.shard.test-cml b/build/config/fuchsia/test/minimum.shard.test-cml index e0e36d7..17b4927 100644 --- a/build/config/fuchsia/test/minimum.shard.test-cml +++ b/build/config/fuchsia/test/minimum.shard.test-cml @@ -9,7 +9,7 @@ children: [ { name: "build-info-service", - url: "fuchsia-pkg://fuchsia.com/build-info-service#meta/build-info.cm", + url: "fuchsia-pkg://fuchsia.com/fake-build-info#meta/fake_build_info.cm", }, { name: "intl_property_manager", @@ -17,15 +17,10 @@ }, ], offer: [ - { - directory: "build-info", - from: "parent", - to: "#build-info-service", - }, { protocol: "fuchsia.logger.LogSink", from: "parent", - to: [ "#build-info-service", "#intl_property_manager" ], + to: [ "#intl_property_manager" ], } ], use: [ @@ -40,7 +35,6 @@ }, { storage: "custom_artifacts", - rights: [ "rw*" ], path: "/custom_artifacts", }, { @@ -64,7 +58,6 @@ "fuchsia.hwinfo.Product", "fuchsia.media.ProfileProvider", "fuchsia.process.Launcher", - "fuchsia.sys.Loader", ], }, { @@ -77,7 +70,7 @@ facets: { "fuchsia.test": { "deprecated-allowed-packages": [ - "build-info-service", + "fake-build-info", "intl_property_manager", ], }, diff --git a/build/config/fuchsia/test/platform_video_codecs.shard.test-cml b/build/config/fuchsia/test/platform_video_codecs.shard.test-cml index 4820ecf..13b5a1b 100644 --- a/build/config/fuchsia/test/platform_video_codecs.shard.test-cml +++ b/build/config/fuchsia/test/platform_video_codecs.shard.test-cml @@ -2,6 +2,9 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. { + include: [ + "//build/config/fuchsia/test/sysmem.shard.test-cml", + ], children: [ { // Run an isolated instance of codec_factory so that tests can run on diff --git a/build/config/fuchsia/test/cfv1_launcher.shard.test-cml b/build/config/fuchsia/test/sysmem.shard.test-cml similarity index 79% rename from build/config/fuchsia/test/cfv1_launcher.shard.test-cml rename to build/config/fuchsia/test/sysmem.shard.test-cml index 1944730..8bebd99 100644 --- a/build/config/fuchsia/test/cfv1_launcher.shard.test-cml +++ b/build/config/fuchsia/test/sysmem.shard.test-cml @@ -4,7 +4,7 @@ { use: [ { - protocol: "fuchsia.sys.Launcher", + protocol: "fuchsia.sysmem.Allocator", }, ], } diff --git a/build/config/fuchsia/test/system_test_minimum.shard.test-cml b/build/config/fuchsia/test/system_test_minimum.shard.test-cml new file mode 100644 index 0000000..6efde20 --- /dev/null +++ b/build/config/fuchsia/test/system_test_minimum.shard.test-cml @@ -0,0 +1,46 @@ +// Copyright 2022 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. +{ + include: [ + "syslog/client.shard.cml", + ], + use: [ + { + directory: "config-data", + rights: [ "r*" ], + path: "/config/data", + }, + { + storage: "cache", + path: "/cache", + }, + { + storage: "custom_artifacts", + path: "/custom_artifacts", + }, + { + storage: "data", + path: "/data", + }, + { + storage: "tmp", + path: "/tmp", + }, + { + protocol: [ + "fuchsia.buildinfo.Provider", + "fuchsia.hwinfo.Product", + "fuchsia.intl.PropertyProvider", + "fuchsia.media.ProfileProvider", + "fuchsia.process.Launcher", + ], + }, + { + protocol: [ + "fuchsia.tracing.perfetto.ProducerConnector", + ], + availability: "optional", + }, + ], +} diff --git a/build/config/fuchsia/test/test_fonts.shard.test-cml b/build/config/fuchsia/test/test_fonts.shard.test-cml index 6610e31..5d26574 100644 --- a/build/config/fuchsia/test/test_fonts.shard.test-cml +++ b/build/config/fuchsia/test/test_fonts.shard.test-cml @@ -5,7 +5,7 @@ children: [ { name: "test_fonts", - url: "fuchsia-pkg://fuchsia.com/fonts#meta/fonts.cm", + url: "fuchsia-pkg://fuchsia.com/fonts_configurable_for_test#meta/fonts_configurable_for_test.cm", }, ], offer: [ @@ -31,7 +31,9 @@ ], facets: { "fuchsia.test": { - "deprecated-allowed-packages": [ "fonts" ], + // TODO(crbug.com/1408597): Remove when the isolated font provider + // component is subpackaged. + "deprecated-allowed-packages": [ "fonts_configurable_for_test" ], }, }, } diff --git a/build/config/fuchsia/test/test_ui_stack.shard.test-cml b/build/config/fuchsia/test/test_ui_stack.shard.test-cml index 270e711..102867c 100644 --- a/build/config/fuchsia/test/test_ui_stack.shard.test-cml +++ b/build/config/fuchsia/test/test_ui_stack.shard.test-cml @@ -2,25 +2,13 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. { + include: [ "//build/config/fuchsia/test/sysmem.shard.test-cml" ], children: [ { name: "test_ui_stack", url: "fuchsia-pkg://fuchsia.com/flatland-scene-manager-test-ui-stack#meta/test-ui-stack.cm", }, ], - offer: [ - { - protocol: [ - "fuchsia.logger.LogSink", - "fuchsia.scheduler.ProfileProvider", - "fuchsia.sysmem.Allocator", - "fuchsia.tracing.provider.Registry", - "fuchsia.vulkan.loader.Loader", - ], - from: "parent", - to: "#test_ui_stack", - }, - ], use: [ { protocol: [ @@ -33,15 +21,28 @@ ], from: "#test_ui_stack", }, + ], + offer: [ + { + storage: "tmp", + from: "parent", + to: "#test_ui_stack", + }, { protocol: [ + "fuchsia.logger.LogSink", + "fuchsia.scheduler.ProfileProvider", "fuchsia.sysmem.Allocator", + "fuchsia.tracing.provider.Registry", + "fuchsia.vulkan.loader.Loader", ], + from: "parent", + to: "#test_ui_stack", }, ], facets: { "fuchsia.test": { - "deprecated-allowed-packages": [ "flatland-scene-manager-test-ui-stack" ], + "deprecated-allowed-packages": [ "flatland-scene-manager-test-ui-stack" ], }, }, } diff --git a/build/config/fuchsia/test/web_instance_host.shard.test-cml b/build/config/fuchsia/test/web_instance_host.shard.test-cml deleted file mode 100644 index a46a956..0000000 --- a/build/config/fuchsia/test/web_instance_host.shard.test-cml +++ /dev/null @@ -1,12 +0,0 @@ -// Copyright 2022 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. -{ - use: [ - { - protocol: [ - "fuchsia.sys.Environment", - ], - }, - ], -} diff --git a/build/config/gclient_args.gni b/build/config/gclient_args.gni index 61717c6..410955b 100644 --- a/build/config/gclient_args.gni +++ b/build/config/gclient_args.gni @@ -4,7 +4,7 @@ build_with_chromium = false checkout_android = false checkout_android_prebuilts_build_tools = false checkout_android_native_support = false -checkout_google_benchmark = false +checkout_clang_coverage_tools = false checkout_ios_webkit = false checkout_nacl = false checkout_openxr = false diff --git a/build/config/ios/BUILD.gn b/build/config/ios/BUILD.gn index f0b85cc..8881312 100644 --- a/build/config/ios/BUILD.gn +++ b/build/config/ios/BUILD.gn @@ -80,6 +80,18 @@ config("compiler") { ] ldflags = common_flags + + # This is on by default in ld64 for our deployment target, but not yet + # in ld64.lld. Force it on. + if (ios_deployment_target != "11.0" && ios_deployment_target != "12.0" && + ios_deployment_target != "13.0" && ios_deployment_target != "13.4" && + ios_deployment_target != "14.0") { + ldflags += [ "-Wl,-fixup_chains" ] + } + + if (ios_is_app_extension) { + ldflags += [ "-fapplication-extension" ] + } } # This is included by reference in the //build/config/compiler:runtime_library @@ -144,7 +156,6 @@ config("ios_extension_executable_flags") { ldflags = [ "-e", "_NSExtensionMain", - "-fapplication-extension", ] # On "catalyst", the bundle structure is different (uses the same structure @@ -208,11 +219,6 @@ config("ios_shared_library_flags") { ] } -config("disable_implicit_retain_self_warning") { - cflags_objc = [ "-Wno-implicit-retain-self" ] - cflags_objcc = cflags_objc -} - config("xctest_config") { # Add some directories to the system framework search path to make # them available to the compiler while silencing warnings in the @@ -236,6 +242,8 @@ config("xctest_config") { ] } +# TODO(crbug.com/1444308): any target that uses this config will miscompile. +# This needs to be fixed if we want to use Swift - C++ interop. config("enable_swift_cxx_interop") { swiftflags = [ "-enable-experimental-cxx-interop" ] } diff --git a/build/config/ios/asset_catalog.gni b/build/config/ios/asset_catalog.gni index 79ffdb7..8695bf7 100644 --- a/build/config/ios/asset_catalog.gni +++ b/build/config/ios/asset_catalog.gni @@ -48,69 +48,63 @@ template("asset_catalog") { assert(defined(invoker.asset_type) && invoker.asset_type != "", "asset_type must be defined and not empty for $target_name") - if (is_fat_secondary_toolchain) { - group(target_name) { - public_deps = [ ":$target_name($primary_fat_toolchain_name)" ] - } - } else { - _copy_target_name = target_name + "__copy" - _data_target_name = target_name + _copy_target_name = target_name + "__copy" + _data_target_name = target_name - _sources = invoker.sources - _outputs = [] + _sources = invoker.sources + _outputs = [] - # The compilation of resources into Assets.car is enabled automatically - # by the "create_bundle" target if any of the "bundle_data" sources's - # path is in a .xcassets directory and matches one of the know asset - # catalog type. - _xcassets_dir = "$target_gen_dir/${target_name}.xcassets" - _output_dir = "$_xcassets_dir/" + - get_path_info(get_path_info(_sources[0], "dir"), "file") + # The compilation of resources into Assets.car is enabled automatically + # by the "create_bundle" target if any of the "bundle_data" sources's + # path is in a .xcassets directory and matches one of the know asset + # catalog type. + _xcassets_dir = "$target_gen_dir/${target_name}.xcassets" + _output_dir = "$_xcassets_dir/" + + get_path_info(get_path_info(_sources[0], "dir"), "file") - foreach(_source, invoker.sources) { - _dir = get_path_info(_source, "dir") - _outputs += [ "$_output_dir/" + get_path_info(_source, "file") ] + foreach(_source, invoker.sources) { + _dir = get_path_info(_source, "dir") + _outputs += [ "$_output_dir/" + get_path_info(_source, "file") ] - assert(get_path_info(_dir, "extension") == invoker.asset_type, - "$_source dirname must have .${invoker.asset_type} extension") - } + assert(get_path_info(_dir, "extension") == invoker.asset_type, + "$_source dirname must have .${invoker.asset_type} extension") + } - action(_copy_target_name) { - # Forward "deps", "public_deps" and "testonly" in case some of the - # source files are generated. - forward_variables_from(invoker, - [ - "deps", - "public_deps", - "testonly", - ]) + action(_copy_target_name) { + # Forward "deps", "public_deps" and "testonly" in case some of the + # source files are generated. + forward_variables_from(invoker, + [ + "deps", + "public_deps", + "testonly", + ]) - script = "//build/config/ios/hardlink.py" + script = "//build/config/ios/hardlink.py" - visibility = [ ":$_data_target_name" ] - sources = _sources - outputs = _outputs + [ _xcassets_dir ] + visibility = [ ":$_data_target_name" ] + sources = _sources + outputs = _outputs + [ _xcassets_dir ] - args = [ - rebase_path(get_path_info(_sources[0], "dir"), root_build_dir), - rebase_path(_output_dir, root_build_dir), - ] - } + args = [ + rebase_path(get_path_info(_sources[0], "dir"), root_build_dir), + rebase_path(_output_dir, root_build_dir), + ] + } - bundle_data(_data_target_name) { - forward_variables_from(invoker, - "*", - [ - "deps", - "outputs", - "public_deps", - "sources", - ]) + bundle_data(_data_target_name) { + forward_variables_from(invoker, + "*", + [ + "deps", + "outputs", + "public_deps", + "sources", + ]) - sources = _outputs - outputs = [ "{{bundle_resources_dir}}/{{source_file_part}}" ] - public_deps = [ ":$_copy_target_name" ] - } + sources = _outputs + outputs = [ "{{bundle_resources_dir}}/{{source_file_part}}" ] + public_deps = [ ":$_copy_target_name" ] } } diff --git a/build/config/ios/ios_sdk.gni b/build/config/ios/ios_sdk.gni index af498ce..65aee82 100644 --- a/build/config/ios/ios_sdk.gni +++ b/build/config/ios/ios_sdk.gni @@ -52,38 +52,13 @@ declare_args() { # identity description and app bundle id prefix. ios_mobileprovision_files = [] - # If non-empty, this list must contain valid cpu architecture, and the final - # build will be a multi-architecture build (aka fat build) supporting the - # main $target_cpu architecture and all of $additional_target_cpus. - # - # For example to build an application that will run on both arm64 and armv7 - # devices, you would use the following in args.gn file when running "gn args": - # - # target_os = "ios" - # target_cpu = "arm64" - # additional_target_cpus = [ "arm" ] - # - # You can also pass the value via "--args" parameter for "gn gen" command by - # using the syntax --args='additional_target_cpus=["arm"] target_cpu="arm64"'. - additional_target_cpus = [] - # Set to true if all test apps should use the same bundle id. ios_use_shared_bundle_id_for_test_apps = true -} -declare_args() { - # This variable is set by the toolchain. It is set to true if the toolchain - # is a secondary toolchain as part of a "fat" build. - is_fat_secondary_toolchain = false - - # This variable is set by the toolchain. It is the name of the primary - # toolchain for the fat build (could be current_toolchain). - primary_fat_toolchain_name = "" + # Set to true if building an app extension. + ios_is_app_extension = false } -assert(custom_toolchain == "" || additional_target_cpus == [], - "cannot define both custom_toolchain and additional_target_cpus") - # If codesigning is enabled, use must configure either a codesigning identity # or a filter to automatically select the codesigning identity. if (target_environment == "device" && ios_enable_code_signing) { @@ -96,25 +71,6 @@ if (target_environment == "device" && ios_enable_code_signing) { "pattern to match the identity to use).") } -# Initialize additional_toolchains from additional_target_cpus. Assert here -# that the list does not contains $target_cpu nor duplicates as this would -# cause weird errors during the build. -additional_toolchains = [] -if (additional_target_cpus != [] && !is_fat_secondary_toolchain) { - foreach(_additional_target_cpu, additional_target_cpus) { - assert(_additional_target_cpu != target_cpu, - "target_cpu must not be listed in additional_target_cpus") - - _toolchain = "${current_toolchain}_fat_${_additional_target_cpu}" - foreach(_additional_toolchain, additional_toolchains) { - assert(_toolchain != _additional_toolchain, - "additional_target_cpus must not contains duplicate values") - } - - additional_toolchains += [ _toolchain ] - } -} - if (ios_sdk_path == "") { # Compute default target. if (target_environment == "simulator") { diff --git a/build/config/ios/ios_sdk_overrides.gni b/build/config/ios/ios_sdk_overrides.gni index 03178ee..a2373c6 100644 --- a/build/config/ios/ios_sdk_overrides.gni +++ b/build/config/ios/ios_sdk_overrides.gni @@ -7,11 +7,11 @@ declare_args() { # Version of iOS that we're targeting. - ios_deployment_target = "14.0" + ios_deployment_target = "15.0" } # Always assert that ios_deployment_target is used on non-iOS platforms to # prevent unused args warnings. if (!is_ios) { - assert(ios_deployment_target == "14.0" || true) + assert(ios_deployment_target == "15.0" || true) } diff --git a/build/config/ios/ios_test_runner_wrapper.gni b/build/config/ios/ios_test_runner_wrapper.gni index 25108c5..378323c 100644 --- a/build/config/ios/ios_test_runner_wrapper.gni +++ b/build/config/ios/ios_test_runner_wrapper.gni @@ -131,11 +131,7 @@ template("ios_test_runner_wrapper") { _wrapper_output_name = wrapper_output_name } - # Test targets may attempt to generate multiple wrappers for a suite with - # multiple different toolchains when running with additional_target_cpus. - # Generate the wrapper script into root_out_dir rather than root_build_dir - # to ensure those wrappers are distinct. - wrapper_script = "${root_out_dir}/bin/${_wrapper_output_name}" + wrapper_script = "${root_build_dir}/bin/${_wrapper_output_name}" data = [] if (defined(invoker.data)) { diff --git a/build/config/ios/rules.gni b/build/config/ios/rules.gni index c418507..9cb3002 100644 --- a/build/config/ios/rules.gni +++ b/build/config/ios/rules.gni @@ -18,116 +18,6 @@ _ios_xcode_appex_bundle_id = "com.apple.product-type.app-extension" _ios_xcode_xctest_bundle_id = "com.apple.product-type.bundle.unit-test" _ios_xcode_xcuitest_bundle_id = "com.apple.product-type.bundle.ui-testing" -# Invokes lipo on multiple arch-specific binaries to create a fat binary. -# -# Arguments -# -# arch_binary_target -# name of the target generating the arch-specific binaries, they must -# be named $target_out_dir/$toolchain_cpu/$arch_binary_output. -# -# arch_binary_output -# (optional, defaults to the name of $arch_binary_target) base name of -# the arch-specific binary generated by arch_binary_target. -# -# output_name -# (optional, defaults to $target_name) base name of the target output, -# the full path will be $target_out_dir/$output_name. -# -# configs -# (optional) a list of configurations, this is used to check whether -# the binary should be stripped, when "enable_stripping" is true. -# -template("lipo_binary") { - assert(defined(invoker.arch_binary_target), - "arch_binary_target must be defined for $target_name") - - assert(!is_fat_secondary_toolchain, - "lipo_binary can only be used in the primary toolchain of a fat build") - - _target_name = target_name - _output_name = target_name - if (defined(invoker.output_name)) { - _output_name = invoker.output_name - } - - _all_target_cpu = [ current_cpu ] + additional_target_cpus - _all_toolchains = [ current_toolchain ] + additional_toolchains - - _arch_binary_target = invoker.arch_binary_target - _arch_binary_output = get_label_info(_arch_binary_target, "name") - if (defined(invoker.arch_binary_output)) { - _arch_binary_output = invoker.arch_binary_output - } - - action(_target_name) { - forward_variables_from(invoker, - "*", - [ - "arch_binary_output", - "arch_binary_target", - "configs", - "output_name", - ]) - - script = "//build/toolchain/apple/linker_driver.py" - - # http://crbug.com/762840. Fix for bots running out of memory. - pool = "//build/toolchain:link_pool($default_toolchain)" - - outputs = [ "$target_out_dir/$_output_name" ] - - deps = [] - _index = 0 - inputs = [] - foreach(_cpu, _all_target_cpu) { - _toolchain = _all_toolchains[_index] - _index = _index + 1 - - inputs += - [ get_label_info("$_arch_binary_target($_toolchain)", - "target_out_dir") + "/$_cpu/$_arch_binary_output" ] - - deps += [ "$_arch_binary_target($_toolchain)" ] - } - - args = [ - "xcrun", - "lipo", - "-create", - "-output", - rebase_path("$target_out_dir/$_output_name", root_build_dir), - ] + rebase_path(inputs, root_build_dir) - - if (enable_dsyms) { - _dsyms_output_dir = "$root_out_dir/$_output_name.dSYM" - outputs += [ - "$_dsyms_output_dir/", - "$_dsyms_output_dir/Contents/Info.plist", - "$_dsyms_output_dir/Contents/Resources/DWARF/$_output_name", - ] - args += [ - "-Wcrl,dsym," + rebase_path("$root_out_dir/.", root_build_dir), - "-Wcrl,dsymutilpath," + - rebase_path("//tools/clang/dsymutil/bin/dsymutil", root_build_dir), - ] - } - - if (enable_stripping) { - args += [ "-Wcrl,strip,-x,-S" ] - if (save_unstripped_output) { - outputs += [ "$root_out_dir/$_output_name.unstripped" ] - args += [ "-Wcrl,unstripped," + - rebase_path("$root_out_dir/.", root_build_dir) ] - } - } - if (!is_debug && use_thin_lto && is_a_target_toolchain) { - args += [ "-Wcrl,clean_objects," + - string_join(",", rebase_path(inputs, root_build_dir)) ] - } - } -} - # Wrapper around create_bundle taking care of code signature settings. # # Arguments @@ -216,6 +106,13 @@ template("lipo_binary") { # (optional) path to the partial Info.plist generated by the asset # catalog compiler; if defined $primary_info_plist must also be defined. # +# transparent +# (optional) boolean, whether the bundle is "transparent"; defaults to +# "false" if ommitted; a bundle is considered "transparent" if it does +# not package the "bundle_data" deps but forward them to all targets +# the depend on it (unless the "bundle_data" target sets "product_type" +# to the same value as the "create_signed_bundle" target). +# template("create_signed_bundle") { assert(defined(invoker.product_type), "product_type must be defined for $target_name") @@ -310,6 +207,7 @@ template("create_signed_bundle") { "public_configs", "public_deps", "testonly", + "transparent", "visibility", "xcode_test_application_name", ]) @@ -477,7 +375,7 @@ template("create_signed_bundle") { } } -# Generates Info.plist files for Mac apps and frameworks. +# Generates Info.plist files for iOS apps and frameworks. # # Arguments # @@ -611,11 +509,6 @@ template("ios_app_bundle") { _output_name = invoker.output_name } - _primary_toolchain = current_toolchain - if (is_fat_secondary_toolchain) { - _primary_toolchain = primary_fat_toolchain_name - } - assert( !defined(invoker.bundle_extension), "bundle_extension must not be set for ios_app_bundle template for $target_name") @@ -631,10 +524,6 @@ template("ios_app_bundle") { "$ios_app_bundle_id_prefix." + string_replace(_output_name, "_", "-") } - _arch_executable_source = _target_name + "_arch_executable_sources" - _arch_executable_target = _target_name + "_arch_executable" - _lipo_executable_target = _target_name + "_executable" - if (defined(invoker.variants) && invoker.variants != []) { _variants = [] @@ -671,35 +560,11 @@ template("ios_app_bundle") { _default_variant = _variants[0] - source_set(_arch_executable_source) { - forward_variables_from(invoker, - "*", - [ - "bundle_deps", - "bundle_deps_filter", - "bundle_extension", - "enable_code_signing", - "entitlements_path", - "entitlements_target", - "extra_substitutions", - "extra_system_frameworks", - "info_plist", - "info_plist_target", - "output_name", - "product_type", - "visibility", - "xcode_extra_attributes", - ]) - - visibility = [ ":$_arch_executable_target" ] - } - - if (!is_fat_secondary_toolchain || target_environment == "simulator") { - _generate_entitlements_target = _target_name + "_gen_entitlements" - _generate_entitlements_output = - get_label_info(":$_generate_entitlements_target($_primary_toolchain)", - "target_out_dir") + "/$_output_name.xcent" - } + _executable_target = _target_name + "_executable" + _generate_entitlements_target = _target_name + "_gen_entitlements" + _generate_entitlements_output = + get_label_info(":$_generate_entitlements_target", "target_out_dir") + + "/$_output_name.xcent" _product_type = _ios_xcode_app_bundle_id if (defined(invoker.product_type)) { @@ -716,7 +581,7 @@ template("ios_app_bundle") { _is_app_bundle = _product_type == _ios_xcode_app_bundle_id - executable(_arch_executable_target) { + executable(_executable_target) { forward_variables_from(invoker, "*", [ @@ -732,28 +597,20 @@ template("ios_app_bundle") { "info_plist_target", "output_name", "product_type", - "sources", "visibility", "xcode_extra_attributes", ]) - visibility = [ ":$_lipo_executable_target($_primary_toolchain)" ] - if (is_fat_secondary_toolchain) { - visibility += [ ":$_target_name" ] - } - - if (!defined(deps)) { - deps = [] - } - deps += [ ":$_arch_executable_source" ] - - if (!defined(frameworks)) { - frameworks = [] + visibility = [] + foreach(_variant, _variants) { + visibility += [ ":${_variant.target_name}" ] } - frameworks += [ "UIKit.framework" ] if (target_environment == "simulator") { - deps += [ ":$_generate_entitlements_target($_primary_toolchain)" ] + if (!defined(deps)) { + deps = [] + } + deps += [ ":$_generate_entitlements_target" ] if (!defined(inputs)) { inputs = [] @@ -769,207 +626,171 @@ template("ios_app_bundle") { output_name = _output_name output_prefix_override = true - output_dir = "$target_out_dir/$current_cpu" + output_dir = target_out_dir } - if (is_fat_secondary_toolchain) { - # For fat builds, only the default toolchain will generate an application - # bundle. For the other toolchains, the template is only used for building - # the arch-specific binary, thus the default target is just a group(). + _generate_info_plist = target_name + "_generate_info_plist" + ios_info_plist(_generate_info_plist) { + forward_variables_from(invoker, + [ + "info_plist", + "info_plist_target", + ]) - group(_target_name) { - forward_variables_from(invoker, - [ - "visibility", - "testonly", - ]) - public_deps = [ ":$_arch_executable_target" ] + executable_name = _output_name + + extra_substitutions = [ "BUNDLE_IDENTIFIER=$_bundle_identifier" ] + if (defined(invoker.extra_substitutions)) { + extra_substitutions += invoker.extra_substitutions + } + } + + if (!defined(invoker.entitlements_target)) { + _entitlements_path = "//build/config/ios/entitlements.plist" + if (defined(invoker.entitlements_path)) { + _entitlements_path = invoker.entitlements_path } } else { - lipo_binary(_lipo_executable_target) { - forward_variables_from(invoker, - [ - "configs", - "testonly", - ]) + assert(!defined(invoker.entitlements_path), + "Cannot define both entitlements_path and entitlements_target" + + "for $_target_name") - visibility = [] - foreach(_variant, _variants) { - visibility += [ ":${_variant.target_name}" ] - } + _entitlements_target_outputs = + get_target_outputs(invoker.entitlements_target) + _entitlements_path = _entitlements_target_outputs[0] + } - output_name = _output_name - arch_binary_target = ":$_arch_executable_target" - arch_binary_output = _output_name - } + action(_generate_entitlements_target) { + _gen_info_plist_outputs = get_target_outputs(":$_generate_info_plist") + _info_plist_path = _gen_info_plist_outputs[0] - _generate_info_plist = target_name + "_generate_info_plist" - ios_info_plist(_generate_info_plist) { - forward_variables_from(invoker, - [ - "info_plist", - "info_plist_target", - ]) + script = "//build/config/ios/codesign.py" + deps = [ ":$_generate_info_plist" ] + if (defined(invoker.entitlements_target)) { + deps += [ invoker.entitlements_target ] + } + sources = [ + _entitlements_path, + _info_plist_path, + ] + sources += ios_mobileprovision_files - executable_name = _output_name + outputs = [ _generate_entitlements_output ] - extra_substitutions = [ "BUNDLE_IDENTIFIER=$_bundle_identifier" ] - if (defined(invoker.extra_substitutions)) { - extra_substitutions += invoker.extra_substitutions - } + args = [ + "generate-entitlements", + "-e=" + rebase_path(_entitlements_path, root_build_dir), + "-p=" + rebase_path(_info_plist_path, root_build_dir), + ] + foreach(mobileprovision, ios_mobileprovision_files) { + args += [ "-m=" + rebase_path(mobileprovision, root_build_dir) ] } + args += rebase_path(outputs, root_build_dir) + } - if (!is_fat_secondary_toolchain) { - if (!defined(invoker.entitlements_target)) { - _entitlements_path = "//build/config/ios/entitlements.plist" - if (defined(invoker.entitlements_path)) { - _entitlements_path = invoker.entitlements_path - } - } else { - assert(!defined(invoker.entitlements_path), - "Cannot define both entitlements_path and entitlements_target" + - "for $_target_name") + # Only write PkgInfo for real application, not application extension. + if (_is_app_bundle) { + _create_pkg_info = target_name + "_pkg_info" + action(_create_pkg_info) { + forward_variables_from(invoker, [ "testonly" ]) + script = "//build/apple/write_pkg_info.py" + inputs = [ "//build/apple/plist_util.py" ] + sources = get_target_outputs(":$_generate_info_plist") + outputs = [ + # Cannot name the output PkgInfo as the name will not be unique if + # multiple ios_app_bundle are defined in the same BUILD.gn file. The + # file is renamed in the bundle_data outputs to the correct name. + "$target_gen_dir/$target_name", + ] + args = [ "--plist" ] + rebase_path(sources, root_build_dir) + + [ "--output" ] + rebase_path(outputs, root_build_dir) + deps = [ ":$_generate_info_plist" ] + } - _entitlements_target_outputs = - get_target_outputs(invoker.entitlements_target) - _entitlements_path = _entitlements_target_outputs[0] - } + _bundle_data_pkg_info = target_name + "_bundle_data_pkg_info" + bundle_data(_bundle_data_pkg_info) { + forward_variables_from(invoker, [ "testonly" ]) + sources = get_target_outputs(":$_create_pkg_info") + outputs = [ "{{bundle_resources_dir}}/PkgInfo" ] + public_deps = [ ":$_create_pkg_info" ] + } + } - action(_generate_entitlements_target) { - _gen_info_plist_outputs = get_target_outputs(":$_generate_info_plist") - _info_plist_path = _gen_info_plist_outputs[0] + foreach(_variant, _variants) { + create_signed_bundle(_variant.target_name) { + forward_variables_from(invoker, + [ + "bundle_deps", + "bundle_deps_filter", + "data_deps", + "deps", + "enable_code_signing", + "entitlements_path", + "entitlements_target", + "extra_system_frameworks", + "public_configs", + "public_deps", + "testonly", + "visibility", + "xcode_extra_attributes", + ]) - script = "//build/config/ios/codesign.py" - deps = [ ":$_generate_info_plist" ] - if (defined(invoker.entitlements_target)) { - deps += [ invoker.entitlements_target ] - } - sources = [ - _entitlements_path, - _info_plist_path, - ] - sources += ios_mobileprovision_files + output_name = _output_name + bundle_gen_dir = _variant.bundle_gen_dir + bundle_binary_target = ":$_executable_target" + bundle_binary_output = _output_name + bundle_extension = _bundle_extension + product_type = _product_type + xcode_product_bundle_id = _bundle_identifier - outputs = [ _generate_entitlements_output ] + _generate_info_plist_outputs = + get_target_outputs(":$_generate_info_plist") + primary_info_plist = _generate_info_plist_outputs[0] + partial_info_plist = + "$target_gen_dir/${_variant.target_name}_partial_info.plist" - args = [ - "generate-entitlements", - "-e=" + rebase_path(_entitlements_path, root_build_dir), - "-p=" + rebase_path(_info_plist_path, root_build_dir), - ] - foreach(mobileprovision, ios_mobileprovision_files) { - args += [ "-m=" + rebase_path(mobileprovision, root_build_dir) ] - } - args += rebase_path(outputs, root_build_dir) + if (!defined(deps)) { + deps = [] } - } + deps += [ ":$_generate_info_plist" ] - # Only write PkgInfo for real application, not application extension. - if (_is_app_bundle) { - _create_pkg_info = target_name + "_pkg_info" - action(_create_pkg_info) { - forward_variables_from(invoker, [ "testonly" ]) - script = "//build/apple/write_pkg_info.py" - inputs = [ "//build/apple/plist_util.py" ] - sources = get_target_outputs(":$_generate_info_plist") - outputs = [ - # Cannot name the output PkgInfo as the name will not be unique if - # multiple ios_app_bundle are defined in the same BUILD.gn file. The - # file is renamed in the bundle_data outputs to the correct name. - "$target_gen_dir/$target_name", - ] - args = [ "--plist" ] + rebase_path(sources, root_build_dir) + - [ "--output" ] + rebase_path(outputs, root_build_dir) - deps = [ ":$_generate_info_plist" ] + if (!defined(bundle_deps)) { + bundle_deps = [] } - - _bundle_data_pkg_info = target_name + "_bundle_data_pkg_info" - bundle_data(_bundle_data_pkg_info) { - forward_variables_from(invoker, [ "testonly" ]) - sources = get_target_outputs(":$_create_pkg_info") - outputs = [ "{{bundle_resources_dir}}/PkgInfo" ] - public_deps = [ ":$_create_pkg_info" ] + if (_is_app_bundle) { + bundle_deps += [ ":$_bundle_data_pkg_info" ] } - } - - foreach(_variant, _variants) { - create_signed_bundle(_variant.target_name) { - forward_variables_from(invoker, - [ - "bundle_deps", - "bundle_deps_filter", - "data_deps", - "deps", - "enable_code_signing", - "entitlements_path", - "entitlements_target", - "extra_system_frameworks", - "public_configs", - "public_deps", - "testonly", - "visibility", - "xcode_extra_attributes", - ]) - - output_name = _output_name - bundle_gen_dir = _variant.bundle_gen_dir - bundle_binary_target = ":$_lipo_executable_target" - bundle_binary_output = _output_name - bundle_extension = _bundle_extension - product_type = _product_type - xcode_product_bundle_id = _bundle_identifier - - _generate_info_plist_outputs = - get_target_outputs(":$_generate_info_plist") - primary_info_plist = _generate_info_plist_outputs[0] - partial_info_plist = - "$target_gen_dir/${_variant.target_name}_partial_info.plist" - - if (!defined(deps)) { - deps = [] - } - deps += [ ":$_generate_info_plist" ] + bundle_deps += _variant.bundle_deps - if (!defined(bundle_deps)) { - bundle_deps = [] + if (target_environment == "simulator") { + if (!defined(data_deps)) { + data_deps = [] } - if (_is_app_bundle) { - bundle_deps += [ ":$_bundle_data_pkg_info" ] - } - bundle_deps += _variant.bundle_deps - - if (target_environment == "simulator") { - if (!defined(data_deps)) { - data_deps = [] - } + if (build_with_chromium) { data_deps += [ "//testing/iossim" ] } } } + } - if (_default_variant.name != "") { - _bundle_short_name = "$_output_name$_bundle_extension" - action(_target_name) { - forward_variables_from(invoker, [ "testonly" ]) + if (_default_variant.name != "") { + _bundle_short_name = "$_output_name$_bundle_extension" + action(_target_name) { + forward_variables_from(invoker, [ "testonly" ]) - script = "//build/config/ios/hardlink.py" - public_deps = [] - foreach(_variant, _variants) { - public_deps += [ ":${_variant.target_name}" ] - } + script = "//build/config/ios/hardlink.py" + public_deps = [] + foreach(_variant, _variants) { + public_deps += [ ":${_variant.target_name}" ] + } - sources = [ "${_default_variant.bundle_gen_dir}/$_bundle_short_name" ] - outputs = [ "$root_out_dir/$_bundle_short_name" ] + sources = [ "${_default_variant.bundle_gen_dir}/$_bundle_short_name" ] + outputs = [ "$root_out_dir/$_bundle_short_name" ] - args = rebase_path(sources, root_build_dir) + - rebase_path(outputs, root_build_dir) - } + args = rebase_path(sources, root_build_dir) + + rebase_path(outputs, root_build_dir) } } - - if (is_fat_secondary_toolchain) { - not_needed("*") - } } set_defaults("ios_app_bundle") { @@ -1005,6 +826,8 @@ set_defaults("ios_app_bundle") { # # For more information, see "gn help executable". template("ios_appex_bundle") { + assert(ios_is_app_extension, + "$target_name needs to be defined in app extension toolchain context") ios_app_bundle(target_name) { forward_variables_from(invoker, "*", @@ -1196,6 +1019,13 @@ template("bundle_data_strings") { # (optional) boolean, control whether code signing is enabled or not, # default to ios_enable_code_signing if not defined. # +# transparent +# (optional) boolean, whether the bundle is "transparent"; defaults to +# "false" if ommitted; a bundle is considered "transparent" if it does +# not package the "bundle_data" deps but forward them to all targets +# the depend on it (unless the "bundle_data" target sets "product_type" +# to "com.apple.product-type.framework"). +# # This template provides two targets for the resulting framework bundle. The # link-time behavior varies depending on which of the two targets below is # added as a dependency: @@ -1269,30 +1099,16 @@ template("ios_framework_bundle") { _output_name = invoker.output_name } + _product_type = "com.apple.product-type.framework" _has_public_headers = defined(invoker.public_headers) && invoker.public_headers != [] - _primary_toolchain = current_toolchain - if (is_fat_secondary_toolchain) { - _primary_toolchain = primary_fat_toolchain_name - } - - # Public configs are not propagated across toolchain (see crbug.com/675224) - # so some configs have to be defined for both default_toolchain and all others - # toolchains when performing a fat build. Use "get_label_info" to construct - # the path since they need to be relative to the default_toolchain. - - _default_toolchain_root_out_dir = - get_label_info("$_target_name($_primary_toolchain)", "root_out_dir") - - _arch_shared_library_source = _target_name + "_arch_shared_library_sources" - _arch_shared_library_target = _target_name + "_arch_shared_library" - _lipo_shared_library_target = _target_name + "_shared_library" + _shared_library_target = _target_name + "_shared_library" _link_target_name = _target_name + "+link" if (_has_public_headers) { _default_toolchain_target_gen_dir = - get_label_info("$_target_name($_primary_toolchain)", "target_gen_dir") + get_label_info("$_target_name", "target_gen_dir") _framework_headers_target = _target_name + "_framework_headers" @@ -1301,7 +1117,7 @@ template("ios_framework_bundle") { "$_default_toolchain_target_gen_dir/$_output_name.headers.hmap" config(_headers_map_config) { visibility = [ - ":${_arch_shared_library_source}", + ":${_shared_library_target}", ":${_target_name}_signed_bundle", ] include_dirs = [ _header_map_filename ] @@ -1310,7 +1126,7 @@ template("ios_framework_bundle") { _framework_headers_config = _target_name + "_framework_headers_config" config(_framework_headers_config) { - framework_dirs = [ _default_toolchain_root_out_dir ] + framework_dirs = [ root_out_dir ] } _framework_public_config = _target_name + "_public_config" @@ -1319,7 +1135,7 @@ template("ios_framework_bundle") { frameworks = [ "$_output_name.framework" ] } - source_set(_arch_shared_library_source) { + shared_library(_shared_library_target) { forward_variables_from(invoker, "*", [ @@ -1332,10 +1148,17 @@ template("ios_framework_bundle") { "info_plist_target", "output_name", "public_configs", + "transparent", "visibility", ]) - visibility = [ ":$_arch_shared_library_target" ] + visibility = [ ":${_target_name}_signed_bundle" ] + + if (!defined(ldflags)) { + ldflags = [] + } + ldflags += + [ "-Wl,-install_name,@rpath/$_output_name.framework/$_output_name" ] if (_has_public_headers) { configs += [ ":$_headers_map_config" ] @@ -1343,309 +1166,216 @@ template("ios_framework_bundle") { if (!defined(deps)) { deps = [] } - deps += [ ":$_framework_headers_target($_primary_toolchain)" ] - } - } - - shared_library(_arch_shared_library_target) { - forward_variables_from(invoker, - "*", - [ - "bundle_deps", - "bundle_deps_filter", - "data_deps", - "enable_code_signing", - "extra_substitutions", - "info_plist", - "info_plist_target", - "output_name", - "sources", - "public_configs", - "visibility", - ]) - - visibility = [ ":$_lipo_shared_library_target($_primary_toolchain)" ] - if (is_fat_secondary_toolchain) { - visibility += [ - ":${_target_name}", - ":${_target_name}_signed_bundle", - ] + deps += [ ":$_framework_headers_target" ] } - if (!defined(deps)) { - deps = [] - } - deps += [ ":$_arch_shared_library_source" ] - if (_has_public_headers) { - deps += [ ":$_framework_headers_target($_primary_toolchain)" ] - } - if (!defined(ldflags)) { - ldflags = [] - } - ldflags += - [ "-Wl,-install_name,@rpath/$_output_name.framework/$_output_name" ] - output_extension = "" output_name = _output_name output_prefix_override = true - output_dir = "$target_out_dir/$current_cpu" + output_dir = target_out_dir } - if (is_fat_secondary_toolchain) { - # For fat builds, only the default toolchain will generate a framework - # bundle. For the other toolchains, the template is only used for building - # the arch-specific binary, thus the default target is just a group(). + if (_has_public_headers) { + _public_headers = invoker.public_headers - group(_target_name) { - forward_variables_from(invoker, - [ - "visibility", - "testonly", - ]) - public_deps = [ ":$_arch_shared_library_target" ] + _framework_root_dir = "$root_out_dir/$_output_name.framework" + if (target_environment == "simulator" || target_environment == "device") { + _framework_contents_dir = _framework_root_dir + } else if (target_environment == "catalyst") { + _framework_contents_dir = "$_framework_root_dir/Versions/A" } - group(_link_target_name) { + _compile_headers_map_target = _target_name + "_compile_headers_map" + action(_compile_headers_map_target) { + visibility = [ ":$_framework_headers_target" ] forward_variables_from(invoker, [ - "public_configs", - "visibility", + "deps", + "public_deps", "testonly", ]) - public_deps = [ ":$_link_target_name($_primary_toolchain)" ] - - if (_has_public_headers) { - if (!defined(public_configs)) { - public_configs = [] + script = "//build/config/ios/write_framework_hmap.py" + outputs = [ _header_map_filename ] + + # The header map generation only wants the list of headers, not all of + # sources, so filter any non-header source files from "sources". It is + # less error prone that having the developer duplicate the list of all + # headers in addition to "sources". + sources = [] + foreach(_source, invoker.sources) { + if (get_path_info(_source, "extension") == "h") { + sources += [ _source ] } - public_configs += [ ":$_framework_headers_config" ] - } - if (!defined(all_dependent_configs)) { - all_dependent_configs = [] } - all_dependent_configs += [ ":$_framework_public_config" ] - } - group("$_target_name+bundle") { - forward_variables_from(invoker, [ "testonly" ]) - public_deps = [ ":$_target_name+bundle($_primary_toolchain)" ] + args = [ + rebase_path(_header_map_filename, root_build_dir), + rebase_path(_framework_root_dir, root_build_dir), + ] + rebase_path(sources, root_build_dir) } - not_needed(invoker, "*") - } else { - if (_has_public_headers) { - _public_headers = invoker.public_headers - - _framework_root_dir = "$root_out_dir/$_output_name.framework" - if (target_environment == "simulator" || target_environment == "device") { - _framework_contents_dir = _framework_root_dir - } else if (target_environment == "catalyst") { - _framework_contents_dir = "$_framework_root_dir/Versions/A" - } - - _compile_headers_map_target = _target_name + "_compile_headers_map" - action(_compile_headers_map_target) { - visibility = [ ":$_framework_headers_target" ] - forward_variables_from(invoker, - [ - "deps", - "public_deps", - "testonly", - ]) - script = "//build/config/ios/write_framework_hmap.py" - outputs = [ _header_map_filename ] - - # The header map generation only wants the list of headers, not all of - # sources, so filter any non-header source files from "sources". It is - # less error prone that having the developer duplicate the list of all - # headers in addition to "sources". - sources = [] - foreach(_source, invoker.sources) { - if (get_path_info(_source, "extension") == "h") { - sources += [ _source ] - } - } - - args = [ - rebase_path(_header_map_filename, root_build_dir), - rebase_path(_framework_root_dir, root_build_dir), - ] + rebase_path(sources, root_build_dir) - } - - _create_module_map_target = _target_name + "_module_map" - action(_create_module_map_target) { - visibility = [ ":$_framework_headers_target" ] - script = "//build/config/ios/write_framework_modulemap.py" - outputs = [ "$_framework_contents_dir/Modules/module.modulemap" ] - args = [ - _output_name, - rebase_path("$_framework_contents_dir/Modules", root_build_dir), - ] - } - - _copy_public_headers_target = _target_name + "_copy_public_headers" - copy(_copy_public_headers_target) { - forward_variables_from(invoker, - [ - "testonly", - "deps", - ]) - visibility = [ ":$_framework_headers_target" ] - sources = _public_headers - outputs = [ "$_framework_contents_dir/Headers/{{source_file_part}}" ] - - # Do not use forward_variables_from for "public_deps" as - # we do not want to forward those dependencies. - if (defined(invoker.public_deps)) { - if (!defined(deps)) { - deps = [] - } - deps += invoker.public_deps - } - } - - group(_framework_headers_target) { - forward_variables_from(invoker, [ "testonly" ]) - deps = [ - ":$_compile_headers_map_target", - ":$_create_module_map_target", - ] - public_deps = [ ":$_copy_public_headers_target" ] - } + _create_module_map_target = _target_name + "_module_map" + action(_create_module_map_target) { + visibility = [ ":$_framework_headers_target" ] + script = "//build/config/ios/write_framework_modulemap.py" + outputs = [ "$_framework_contents_dir/Modules/module.modulemap" ] + args = [ + _output_name, + rebase_path("$_framework_contents_dir/Modules", root_build_dir), + ] } - lipo_binary(_lipo_shared_library_target) { + _copy_public_headers_target = _target_name + "_copy_public_headers" + copy(_copy_public_headers_target) { forward_variables_from(invoker, [ - "configs", "testonly", + "deps", ]) + visibility = [ ":$_framework_headers_target" ] + sources = _public_headers + outputs = [ "$_framework_contents_dir/Headers/{{source_file_part}}" ] - visibility = [ ":${_target_name}_signed_bundle" ] - output_name = _output_name - arch_binary_target = ":$_arch_shared_library_target" - arch_binary_output = _output_name + # Do not use forward_variables_from for "public_deps" as + # we do not want to forward those dependencies. + if (defined(invoker.public_deps)) { + if (!defined(deps)) { + deps = [] + } + deps += invoker.public_deps + } } - # Bundle identifier should respect rfc1034, so replace "_" with "-". - _bundle_identifier = - "$ios_app_bundle_id_prefix." + string_replace(_output_name, "_", "-") + group(_framework_headers_target) { + forward_variables_from(invoker, [ "testonly" ]) + deps = [ + ":$_compile_headers_map_target", + ":$_create_module_map_target", + ] + public_deps = [ ":$_copy_public_headers_target" ] + } + } - _info_plist_target = _target_name + "_info_plist" - _info_plist_bundle = _target_name + "_info_plist_bundle" - ios_info_plist(_info_plist_target) { - visibility = [ ":$_info_plist_bundle" ] - executable_name = _output_name - forward_variables_from(invoker, - [ - "info_plist", - "info_plist_target", - ]) + # Bundle identifier should respect rfc1034, so replace "_" with "-". + _bundle_identifier = + "$ios_app_bundle_id_prefix." + string_replace(_output_name, "_", "-") - extra_substitutions = [ "BUNDLE_IDENTIFIER=$_bundle_identifier" ] - if (defined(invoker.extra_substitutions)) { - extra_substitutions += invoker.extra_substitutions - } + _info_plist_target = _target_name + "_info_plist" + _info_plist_bundle = _target_name + "_info_plist_bundle" + ios_info_plist(_info_plist_target) { + visibility = [ ":$_info_plist_bundle" ] + executable_name = _output_name + forward_variables_from(invoker, + [ + "info_plist", + "info_plist_target", + ]) + + extra_substitutions = [ "BUNDLE_IDENTIFIER=$_bundle_identifier" ] + if (defined(invoker.extra_substitutions)) { + extra_substitutions += invoker.extra_substitutions } + } - bundle_data(_info_plist_bundle) { - visibility = [ ":${_target_name}_signed_bundle" ] - forward_variables_from(invoker, [ "testonly" ]) - sources = get_target_outputs(":$_info_plist_target") - public_deps = [ ":$_info_plist_target" ] + bundle_data(_info_plist_bundle) { + visibility = [ ":${_target_name}_signed_bundle" ] + forward_variables_from(invoker, [ "testonly" ]) + sources = get_target_outputs(":$_info_plist_target") + public_deps = [ ":$_info_plist_target" ] + product_type = _product_type - if (target_environment != "catalyst") { - outputs = [ "{{bundle_contents_dir}}/Info.plist" ] - } else { - outputs = [ "{{bundle_resources_dir}}/Info.plist" ] - } + if (target_environment != "catalyst") { + outputs = [ "{{bundle_contents_dir}}/Info.plist" ] + } else { + outputs = [ "{{bundle_resources_dir}}/Info.plist" ] } + } - create_signed_bundle(_target_name + "_signed_bundle") { - forward_variables_from(invoker, - [ - "bundle_deps", - "bundle_deps_filter", - "data_deps", - "deps", - "enable_code_signing", - "public_configs", - "public_deps", - "testonly", - "visibility", - ]) + create_signed_bundle(_target_name + "_signed_bundle") { + forward_variables_from(invoker, + [ + "bundle_deps", + "bundle_deps_filter", + "data_deps", + "deps", + "enable_code_signing", + "public_configs", + "public_deps", + "testonly", + "transparent", + "visibility", + ]) - product_type = "com.apple.product-type.framework" - bundle_extension = ".framework" + product_type = _product_type + bundle_extension = ".framework" - output_name = _output_name - bundle_binary_target = ":$_lipo_shared_library_target" - bundle_binary_output = _output_name + output_name = _output_name + bundle_binary_target = ":$_shared_library_target" + bundle_binary_output = _output_name - has_public_headers = _has_public_headers + has_public_headers = _has_public_headers - # Framework do not have entitlements nor mobileprovision because they use - # the one from the bundle using them (.app or .appex) as they are just - # dynamic library with shared code. - disable_entitlements = true - disable_embedded_mobileprovision = true + # Framework do not have entitlements nor mobileprovision because they use + # the one from the bundle using them (.app or .appex) as they are just + # dynamic library with shared code. + disable_entitlements = true + disable_embedded_mobileprovision = true - if (!defined(deps)) { - deps = [] - } - deps += [ ":$_info_plist_bundle" ] + if (!defined(deps)) { + deps = [] } + deps += [ ":$_info_plist_bundle" ] + } - group(_target_name) { - forward_variables_from(invoker, - [ - "public_configs", - "public_deps", - "testonly", - "visibility", - ]) - if (!defined(public_deps)) { - public_deps = [] - } - public_deps += [ ":${_target_name}_signed_bundle" ] - - if (_has_public_headers) { - if (!defined(public_configs)) { - public_configs = [] - } - public_configs += [ ":$_framework_headers_config" ] - } + group(_target_name) { + forward_variables_from(invoker, + [ + "public_configs", + "public_deps", + "testonly", + "visibility", + ]) + if (!defined(public_deps)) { + public_deps = [] } + public_deps += [ ":${_target_name}_signed_bundle" ] - group(_link_target_name) { - forward_variables_from(invoker, - [ - "public_configs", - "public_deps", - "testonly", - "visibility", - ]) - if (!defined(public_deps)) { - public_deps = [] + if (_has_public_headers) { + if (!defined(public_configs)) { + public_configs = [] } - public_deps += [ ":$_target_name" ] + public_configs += [ ":$_framework_headers_config" ] + } + } - if (!defined(all_dependent_configs)) { - all_dependent_configs = [] - } - all_dependent_configs += [ ":$_framework_public_config" ] + group(_link_target_name) { + forward_variables_from(invoker, + [ + "public_configs", + "public_deps", + "testonly", + "visibility", + ]) + if (!defined(public_deps)) { + public_deps = [] } + public_deps += [ ":$_target_name" ] - bundle_data(_target_name + "+bundle") { - forward_variables_from(invoker, - [ - "testonly", - "visibility", - ]) - public_deps = [ ":$_target_name" ] - sources = [ "$root_out_dir/$_output_name.framework" ] - outputs = [ "{{bundle_contents_dir}}/Frameworks/$_output_name.framework" ] + if (!defined(all_dependent_configs)) { + all_dependent_configs = [] } + all_dependent_configs += [ ":$_framework_public_config" ] + } + + bundle_data(_target_name + "+bundle") { + forward_variables_from(invoker, + [ + "testonly", + "visibility", + ]) + public_deps = [ ":$_target_name" ] + sources = [ "$root_out_dir/$_output_name.framework" ] + outputs = [ "{{bundle_contents_dir}}/Frameworks/$_output_name.framework" ] } } @@ -1693,13 +1423,6 @@ template("ios_xctest_bundle") { assert(defined(invoker.xcode_test_application_name), "xcode_test_application_name must be defined for $target_name") - # Silence "assignment had no effect" error for non-default toolchains as - # following variables are only used in the expansion of the template for the - # default toolchain. - if (is_fat_secondary_toolchain) { - not_needed(invoker, "*") - } - _target_name = target_name _output_name = target_name @@ -1707,159 +1430,136 @@ template("ios_xctest_bundle") { _output_name = invoker.output_name } - _arch_loadable_module_source = _target_name + "_arch_loadable_module_source" - _arch_loadable_module_target = _target_name + "_arch_loadable_module" - _lipo_loadable_module_target = _target_name + "_loadable_module" - - _primary_toolchain = current_toolchain - if (is_fat_secondary_toolchain) { - _primary_toolchain = primary_fat_toolchain_name - } - - source_set(_arch_loadable_module_source) { - forward_variables_from(invoker, [ "deps" ]) + _loadable_module_target = _target_name + "_loadable_module" - testonly = true - visibility = [ ":$_arch_loadable_module_target" ] - } + loadable_module(_loadable_module_target) { + forward_variables_from(invoker, + "*", + [ + "bundle_deps", + "bundle_deps_filter", + "host_target", + "output_dir", + "output_extension", + "output_name", + "output_prefix_override", + "product_type", + "testonly", + "visibility", + "xcode_test_application_name", + "xcode_test_application_output_name", + "xctest_bundle_principal_class", + ]) - loadable_module(_arch_loadable_module_target) { testonly = true - visibility = [ ":$_lipo_loadable_module_target($_primary_toolchain)" ] - if (is_fat_secondary_toolchain) { - visibility += [ ":$_target_name" ] - } + visibility = [ ":$_target_name" ] - deps = [ ":$_arch_loadable_module_source" ] configs += [ "//build/config/ios:xctest_config" ] - output_dir = "$target_out_dir/$current_cpu" + output_dir = target_out_dir output_name = _output_name output_prefix_override = true output_extension = "" } - if (is_fat_secondary_toolchain) { - # For fat builds, only the default toolchain will generate a test bundle. - # For the other toolchains, the template is only used for building the - # arch-specific binary, thus the default target is just a group(). - group(_target_name) { - forward_variables_from(invoker, [ "visibility" ]) - testonly = true - - public_deps = [ ":$_arch_loadable_module_target" ] - } - - not_needed(invoker, "*") - } else { - _info_plist_target = _target_name + "_info_plist" - _info_plist_bundle = _target_name + "_info_plist_bundle" + _info_plist_target = _target_name + "_info_plist" + _info_plist_bundle = _target_name + "_info_plist_bundle" - # Bundle identifier should respect rfc1034, so replace "_" with "-". - _bundle_identifier = "$ios_app_bundle_id_prefix.chrome." + - string_replace(_output_name, "_", "-") + # Bundle identifier should respect rfc1034, so replace "_" with "-". + _bundle_identifier = "$ios_app_bundle_id_prefix.chrome." + + string_replace(_output_name, "_", "-") - ios_info_plist(_info_plist_target) { - testonly = true - visibility = [ ":$_info_plist_bundle" ] + ios_info_plist(_info_plist_target) { + testonly = true + visibility = [ ":$_info_plist_bundle" ] - info_plist = "//build/config/ios/Module-Info.plist" - executable_name = _output_name + info_plist = "//build/config/ios/Module-Info.plist" + executable_name = _output_name - if (defined(invoker.xctest_bundle_principal_class)) { - _principal_class = invoker.xctest_bundle_principal_class - } else { - # Fall back to a reasonable default value. - _principal_class = "NSObject" - } - extra_substitutions = [ - "XCTEST_BUNDLE_PRINCIPAL_CLASS=${_principal_class}", - "BUNDLE_IDENTIFIER=$_bundle_identifier", - ] + if (defined(invoker.xctest_bundle_principal_class)) { + _principal_class = invoker.xctest_bundle_principal_class + } else { + # Fall back to a reasonable default value. + _principal_class = "NSObject" } + extra_substitutions = [ + "XCTEST_BUNDLE_PRINCIPAL_CLASS=${_principal_class}", + "BUNDLE_IDENTIFIER=$_bundle_identifier", + ] + } - bundle_data(_info_plist_bundle) { - testonly = true - visibility = [ ":$_target_name" ] - - public_deps = [ ":$_info_plist_target" ] + bundle_data(_info_plist_bundle) { + testonly = true + visibility = [ ":$_target_name" ] - sources = get_target_outputs(":$_info_plist_target") - outputs = [ "{{bundle_contents_dir}}/Info.plist" ] - } + public_deps = [ ":$_info_plist_target" ] - lipo_binary(_lipo_loadable_module_target) { - forward_variables_from(invoker, [ "configs" ]) + sources = get_target_outputs(":$_info_plist_target") + outputs = [ "{{bundle_contents_dir}}/Info.plist" ] + } - testonly = true - visibility = [ ":$_target_name" ] + _xctest_bundle = _target_name + "_bundle" + create_signed_bundle(_target_name) { + forward_variables_from(invoker, + [ + "bundle_deps", + "bundle_deps_filter", + "bundle_id", + "data_deps", + "enable_code_signing", + "product_type", + "xcode_test_application_name", + ]) - output_name = _output_name - arch_binary_target = ":$_arch_loadable_module_target" - arch_binary_output = _output_name - } + testonly = true + visibility = [ ":$_xctest_bundle" ] - _xctest_bundle = _target_name + "_bundle" - create_signed_bundle(_target_name) { - forward_variables_from(invoker, - [ - "bundle_id", - "data_deps", - "enable_code_signing", - "product_type", - "xcode_test_application_name", - ]) + bundle_extension = ".xctest" - testonly = true - visibility = [ ":$_xctest_bundle" ] + output_name = _output_name + bundle_binary_target = ":$_loadable_module_target" + bundle_binary_output = _output_name - bundle_extension = ".xctest" + xcode_extra_attributes = { + IPHONEOS_DEPLOYMENT_TARGET = ios_deployment_target + PRODUCT_BUNDLE_IDENTIFIER = _bundle_identifier + CODE_SIGNING_REQUIRED = "NO" + CODE_SIGNING_ALLOWED = "NO" + CODE_SIGN_IDENTITY = "" + DONT_GENERATE_INFOPLIST_FILE = "YES" - output_name = _output_name - bundle_binary_target = ":$_lipo_loadable_module_target" - bundle_binary_output = _output_name + # For XCUITest, Xcode requires specifying the host application name + # via the TEST_TARGET_NAME attribute. + if (invoker.product_type == _ios_xcode_xcuitest_bundle_id) { + TEST_TARGET_NAME = invoker.xcode_test_application_name + } - xcode_extra_attributes = { - IPHONEOS_DEPLOYMENT_TARGET = ios_deployment_target - PRODUCT_BUNDLE_IDENTIFIER = _bundle_identifier - CODE_SIGNING_REQUIRED = "NO" - CODE_SIGNING_ALLOWED = "NO" - CODE_SIGN_IDENTITY = "" - DONT_GENERATE_INFOPLIST_FILE = "YES" - - # For XCUITest, Xcode requires specifying the host application name - # via the TEST_TARGET_NAME attribute. - if (invoker.product_type == _ios_xcode_xcuitest_bundle_id) { - TEST_TARGET_NAME = invoker.xcode_test_application_name + # For XCTest, Xcode requires specifying the host application path via + # both BUNDLE_LOADER and TEST_HOST attributes. + if (invoker.product_type == _ios_xcode_xctest_bundle_id) { + _xcode_app_name = invoker.xcode_test_application_name + if (defined(invoker.xcode_test_application_output_name)) { + _xcode_app_name = invoker.xcode_test_application_output_name } - # For XCTest, Xcode requires specifying the host application path via - # both BUNDLE_LOADER and TEST_HOST attributes. - if (invoker.product_type == _ios_xcode_xctest_bundle_id) { - _xcode_app_name = invoker.xcode_test_application_name - if (defined(invoker.xcode_test_application_output_name)) { - _xcode_app_name = invoker.xcode_test_application_output_name - } - - BUNDLE_LOADER = "\$(TEST_HOST)" - TEST_HOST = "\$(BUILT_PRODUCTS_DIR)/" + - "${_xcode_app_name}.app/${_xcode_app_name}" - } + BUNDLE_LOADER = "\$(TEST_HOST)" + TEST_HOST = "\$(BUILT_PRODUCTS_DIR)/" + + "${_xcode_app_name}.app/${_xcode_app_name}" } - - deps = [ ":$_info_plist_bundle" ] } - bundle_data(_xctest_bundle) { - forward_variables_from(invoker, [ "host_target" ]) + deps = [ ":$_info_plist_bundle" ] + } - testonly = true - visibility = [ ":$host_target" ] + bundle_data(_xctest_bundle) { + forward_variables_from(invoker, [ "host_target" ]) - public_deps = [ ":$_target_name" ] - sources = [ "$root_out_dir/$_output_name.xctest" ] - outputs = [ "{{bundle_contents_dir}}/PlugIns/$_output_name.xctest" ] - } + testonly = true + visibility = [ ":$host_target" ] + + public_deps = [ ":$_target_name" ] + sources = [ "$root_out_dir/$_output_name.xctest" ] + outputs = [ "{{bundle_contents_dir}}/PlugIns/$_output_name.xctest" ] } } @@ -1945,13 +1645,16 @@ template("ios_xctest_test") { ] } + # XCTestSupport framework is required as of Xcode 14.3 or later. + if (xcode_version_int >= 1430) { + extra_system_frameworks += [ "$ios_sdk_platform_path/Developer/Library/PrivateFrameworks/XCTestSupport.framework" ] + } + _xctest_bundle = _xctest_target + "_bundle" - if (!is_fat_secondary_toolchain) { - if (!defined(bundle_deps)) { - bundle_deps = [] - } - bundle_deps += [ ":$_xctest_bundle" ] + if (!defined(bundle_deps)) { + bundle_deps = [] } + bundle_deps += [ ":$_xctest_bundle" ] } } @@ -2087,6 +1790,11 @@ template("ios_xcuitest_test_runner_bundle") { ] } + # XCTestSupport framework is required as of Xcode 14.3 or later. + if (xcode_version_int >= 1430) { + extra_system_frameworks += [ "$ios_sdk_platform_path/Developer/Library/PrivateFrameworks/XCTestSupport.framework" ] + } + bundle_deps = [] if (defined(invoker.bundle_deps)) { bundle_deps += invoker.bundle_deps @@ -2111,6 +1819,12 @@ template("ios_xcuitest_test_runner_bundle") { # xcode_test_application_name: # string, name of the test application for the ui test target. # +# runner_only_bundle_deps: +# list of labels of bundle target to include in the runner and +# exclude from the test module (the use case is a framework bundle +# that is used by the test module and thus needs to be packaged in +# the runner application bundle) +# # This template defines two targets, one named "${target_name}_module" is the # xctest dynamic library, and the other named "${target_name}_runner" is the # test runner application bundle. @@ -2138,23 +1852,33 @@ template("ios_xcuitest_test") { ios_xctest_bundle(_xcuitest_module_target) { forward_variables_from(invoker, [ + "bundle_deps", + "data_deps", + "deps", "xcode_test_application_name", "xctest_bundle_principal_class", - "data_deps", ]) product_type = _ios_xcode_xcuitest_bundle_id host_target = _xcuitest_runner_target output_name = _xcuitest_module_output - deps = invoker.deps + if (defined(invoker.runner_only_bundle_deps)) { + bundle_deps_filter = invoker.runner_only_bundle_deps + } } _xcuitest_runner_output = _xcuitest_target + "-Runner" ios_xcuitest_test_runner_bundle(_xcuitest_runner_target) { output_name = _xcuitest_runner_output xctest_bundle = _xcuitest_module_target + "_bundle" - forward_variables_from(invoker, [ "bundle_deps" ]) + + if (defined(invoker.runner_only_bundle_deps)) { + if (!defined(bundle_deps)) { + bundle_deps = [] + } + bundle_deps += invoker.runner_only_bundle_deps + } } } diff --git a/build/config/linux/pkg_config.gni b/build/config/linux/pkg_config.gni index cb9b460..0d87390 100644 --- a/build/config/linux/pkg_config.gni +++ b/build/config/linux/pkg_config.gni @@ -101,7 +101,7 @@ template("pkg_config") { args += invoker.extra_args } - pkgresult = exec_script(pkg_config_script, args, "value") + pkgresult = exec_script(pkg_config_script, args, "json") cflags = pkgresult[1] foreach(include, pkgresult[0]) { diff --git a/build/config/loongarch64.gni b/build/config/loongarch64.gni new file mode 100644 index 0000000..32aedbc --- /dev/null +++ b/build/config/loongarch64.gni @@ -0,0 +1,13 @@ +# Copyright 2023 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +import("//build/config/v8_target_cpu.gni") + +if (current_cpu == "loong64") { + declare_args() { + # LOONGARCH64 SIMD Arch compilation flag. + loongarch64_use_lsx = false + loongarch64_use_lasx = false + } +} diff --git a/build/config/mac/BUILD.gn b/build/config/mac/BUILD.gn index 8cfb277..7af3124 100644 --- a/build/config/mac/BUILD.gn +++ b/build/config/mac/BUILD.gn @@ -98,18 +98,6 @@ config("mac_dynamic_flags") { } } -# The ldflags referenced below are handled by -# //build/toolchain/apple/linker_driver.py. -# Remove this config if a target wishes to change the arguments passed to the -# strip command during linking. This config by default strips all symbols -# from a binary, but some targets may wish to specify an exports file to -# preserve specific symbols. -config("strip_all") { - if (enable_stripping) { - ldflags = [ "-Wcrl,strip,-x,-S" ] - } -} - # When building with Goma, all inputs must be relative to the build directory. # If using the system Xcode, which typically resides outside the build root, a # symlink to the SDK is created in the build directory, and the path to that diff --git a/build/config/mac/mac_sdk.gni b/build/config/mac/mac_sdk.gni index 5e1a523..546a27e 100644 --- a/build/config/mac/mac_sdk.gni +++ b/build/config/mac/mac_sdk.gni @@ -9,23 +9,32 @@ import("//build/toolchain/goma.gni") import("//build/toolchain/rbe.gni") import("//build/toolchain/toolchain.gni") -assert(current_os == "mac" || current_toolchain == default_toolchain) +assert( + current_os == "mac" || current_toolchain == default_toolchain || + (current_os == "ios" && current_toolchain == "${default_toolchain}_blink")) declare_args() { - # The `MACOSX_DEPLOYMENT_TARGET` variable used when compiling. This partially - # controls the minimum supported version of macOS for Chromium by - # affecting the symbol availability rules. This may differ from - # `mac_min_system_version` when dropping support for older macOSes but where - # additional code changes are required to be compliant with the availability - # rules. - mac_deployment_target = "10.13" - - # The value of the `LSMinimumSystemVersion` in `Info.plist` files. This - # partially controls the minimum supported version of macOS for Chromium by - # affecting the `Info.plist`. This may differ from `mac_deployment_target` - # when dropping support for older macOSes. This must be greater than or equal - # to the `mac_deployment_target` version. - mac_min_system_version = "10.13" + # The following two variables control the minimum supported version for + # macOS: + # + # This variable affects how Chromium is compiled and corresponds to the + # `MACOSX_DEPLOYMENT_TARGET` define. Changing this controls which symbols + # the macOS SDK marks as available (via `__builtin_available` and + # `@available`) and deprecated (producing a warning if called). Modifying + # this variable often requires additional code changes to handle differences + # in availability and deprecation, which is why it is often changed + # separately from `mac_min_system_version` when dropping support for older + # macOSes. + mac_deployment_target = "10.15" + + # The value of the `LSMinimumSystemVersion` in `Info.plist` files. This value + # controls the minimum OS version that may launch the application, and OS + # releases older than this will refuse to launch the application. When + # dropping support for older macOSes, this variable is often changed before + # `mac_deployment_target` to increase the system requirement without changing + # how Chromium is compiled. This must be greater than or equal to the + # `mac_deployment_target` version. + mac_min_system_version = "10.15" # Path to a specific version of the Mac SDK, not including a slash at the end. # If empty, the path to the lowest version greater than or equal to @@ -38,7 +47,7 @@ declare_args() { # The SDK version used when making official builds. This is a single exact # version, not a minimum. If this version isn't available official builds # will fail. - mac_sdk_official_version = "13.0" + mac_sdk_official_version = "13.3" # The SDK build version used when making official builds. This is a single # exact version found at "System/Library/CoreServices/SystemVersion.plist" diff --git a/build/config/mac/rules.gni b/build/config/mac/rules.gni index f613a04..b69b7b7 100644 --- a/build/config/mac/rules.gni +++ b/build/config/mac/rules.gni @@ -407,13 +407,6 @@ set_defaults("mac_framework_bundle") { # (optional) string, name of the generated app without the # .app suffix. If omitted, defaults to target_name. # -# extra_configs: -# (optional) list of label, additional configs to apply to the -# executable target. -# -# remove_configs: -# (optional) list of label, default configs to remove from the target. -# # extra_substitutions: # (optional) string array, 'key=value' pairs for extra fields which are # specified in a source Info.plist template. @@ -487,12 +480,6 @@ template("mac_app_bundle") { "output_name", "visibility", ]) - if (defined(extra_configs)) { - configs += extra_configs - } - if (defined(remove_configs)) { - configs -= remove_configs - } output_name = _output_name output_dir = "$target_out_dir/$_executable_target" } @@ -561,6 +548,10 @@ template("mac_app_bundle") { } } +set_defaults("mac_app_bundle") { + configs = default_executable_configs +} + # Template to package a loadable_module into a .plugin bundle. # # This takes no extra arguments that differ from a loadable_module. diff --git a/build/config/ozone.gni b/build/config/ozone.gni index 9eee45d..8bb512a 100644 --- a/build/config/ozone.gni +++ b/build/config/ozone.gni @@ -92,7 +92,7 @@ declare_args() { ozone_platform_wayland = true ozone_platform_x11 = true } else if (is_fuchsia) { - ozone_platform = "scenic" + ozone_platform = "flatland" ozone_platform_scenic = true ozone_platform_flatland = true } diff --git a/build/config/pch.gni b/build/config/pch.gni index 7d5b4bb..ee39ada 100644 --- a/build/config/pch.gni +++ b/build/config/pch.gni @@ -4,11 +4,12 @@ import("//build/toolchain/goma.gni") import("//build/toolchain/rbe.gni") +import("//build/toolchain/siso.gni") declare_args() { # Precompiled header file support is by default available, - # but for distributed build system uses (like goma or rbe) or when - # doing official builds. + # but for distributed build system uses (like goma, rbe, or siso) or when + # doing official builds it is off by default. # On Linux it slows down the build, so don't enable it by default. # PATCH(build-gn): pch is not supported yet. enable_precompiled_headers = false diff --git a/build/config/posix/BUILD.gn b/build/config/posix/BUILD.gn index c36a6c0..49bc72c 100644 --- a/build/config/posix/BUILD.gn +++ b/build/config/posix/BUILD.gn @@ -34,12 +34,12 @@ config("runtime_library") { # line, and build system rebuilds things when their commandline # changes). Nothing should ever read this define. # PATCH(build-gn): This breaks with custom sysroot scripts. - # sysroot_hash = + # sysroot_key = # exec_script("//build/linux/sysroot_scripts/install-sysroot.py", - # [ "--print-hash=$current_cpu" ], + # [ "--print-key=$current_cpu" ], # "trim string", # [ "//build/linux/sysroot_scripts/sysroots.json" ]) - # defines += [ "CR_SYSROOT_HASH=$sysroot_hash" ] + # defines += [ "CR_SYSROOT_KEY=$sysroot_key" ] } asmflags += sysroot_flags ldflags += sysroot_flags diff --git a/build/config/riscv.gni b/build/config/riscv.gni index b9597a0..5f93266 100644 --- a/build/config/riscv.gni +++ b/build/config/riscv.gni @@ -4,7 +4,8 @@ import("//build/config/v8_target_cpu.gni") -if (current_cpu == "riscv64" || v8_current_cpu == "riscv64") { +if (current_cpu == "riscv64" || v8_current_cpu == "riscv64" || + current_cpu == "riscv32" || v8_current_cpu == "riscv32") { declare_args() { # RISCV Vector extension compilation flag. riscv_use_rvv = false diff --git a/build/config/rust.gni b/build/config/rust.gni index b3e5011..d74ff44 100644 --- a/build/config/rust.gni +++ b/build/config/rust.gni @@ -11,56 +11,52 @@ if (is_android) { import("//build/config/android/config.gni") } -declare_args() { - # Whether to allow Rust code to be part of the Chromium *build process*. - # This can be used to create Rust test binaries, even if the flag below - # is false. - enable_rust = false +if (is_ios) { + import("//build/config/ios/config.gni") # For `target_environment` + import("//build/config/ios/ios_sdk.gni") # For `xcode_version_int` +} - # Individual Rust components. +declare_args() { + # Rust is available in the Chromium build but 3p repos that use //build may + # not use Rust and thus won't want to depend on having the Rust toolchain + # present, so this defaults to off in those cases. # - # The base::JSONReader implementation. - enable_rust_json = true + # Chromium-based projects that are built for for architectures Chrome does not + # support may need to disable this as well, though they may need to replace + # code with C/C++ to get a functional product. + # PATCH(build-gn): Do not have time to support rust yet. + enable_rust = false - # Support for chrome://crash-rust to check crash dump collection works. - enable_rust_crash = true + # As we incrementally enable Rust on mainstream builders, we want to enable + # the toolchain (by switching 'enable_rust' to true) while still disabling + # almost all Rust features). Yet we still want to have some builders with + # all Rust features enabled. + enable_all_rust_features = false - # Use experimental Rust toolchain built in-tree. See //tools/rust. For now, - # only use it for linux targets. The package only has prebuilt libs for linux. - # More targets will be added later. - # - # Ideally this should check `current_os` so that e.g. Android builds will use - # the Android toolchain for target artifacts and the Chromium Rust toolchain - # for host artifacts. Currently there is an std mixup in //build/rust/std that - # prevents this. + # Chromium provides a Rust toolchain in //third_party/rust-toolchain when + # checkout_rust is True (which is being rolled out by default over time). # - # TODO(https://crbug.com/1245714): fix std handling and check `current_os`. - use_chromium_rust_toolchain = target_os == "linux" && host_os == "linux" - - # Build libstd locally with GN and use that instead of the prebuilts, where - # applicable. If this is false the prebuilt libstd will always be used. If - # true, the local build is only used with the Chromium Rust toolchain and only - # on supported platforms and GN targets. - enable_local_libstd = true - - # Chromium currently has a Rust toolchain for Android and Linux, but - # if you wish to experiment on more platforms you can use this - # argument to specify an alternative toolchain. - # This should be an absolute path to a directory - # containing a 'bin' directory and others. Commonly + # To use a custom toolchain instead, specify an absolute path to the root of + # a Rust sysroot, which will have a 'bin' directory and others. Commonly # /.rustup/toolchains/nightly-- rust_sysroot_absolute = "" + # If you're using a Rust toolchain as specified by rust_sysroot_absolute, + # set this to the output of `rustc -V`. Changing this string will cause all + # Rust targets to be rebuilt, which allows you to update your toolchain and + # not break incremental builds. + rustc_version = "" + # If you're using a Rust toolchain as specified by rust_sysroot_absolute, # you can specify whether it supports nacl here. rust_toolchain_supports_nacl = false # Any extra std rlibs in your Rust toolchain, relative to the standard - # Rust toolchain. Typically used with 'use_unverified_rust_toolchain' = true + # Rust toolchain. Typically used with 'rust_sysroot_absolute' added_rust_stdlib_libs = [] # Any removed std rlibs in your Rust toolchain, relative to the standard - # Rust toolchain. Typically used with 'use_unverified_rust_toolchain' = true + # Rust toolchain. Typically used with 'rust_sysroot_absolute' removed_rust_stdlib_libs = [] # Non-rlib libs provided in the toolchain sysroot. Usually this is empty, but @@ -72,41 +68,81 @@ declare_args() { # more work is done. use_goma_rust = false - # The host toolchain to use when you don't want sanitizers enabled. By default - # it is the regular toolchain, but when that toolchain has sanitizers, then - # this variable is changed to avoid them. - host_toolchain_no_sanitizers = host_toolchain + # Force-enable `--color=always` for rustc, even when it would be disabled for + # a platform. Mostly applicable to Windows, where new versions can handle ANSI + # escape sequences but it's not reliable in general. + force_rustc_color_output = false } -# Platform support for "official" toolchains (Android or Chromium) -android_toolchain_supports_platform = - (!is_nacl && - (is_android && (current_cpu == "arm" || current_cpu == "arm64" || - current_cpu == "x64" || current_cpu == "x86"))) || - (is_linux && current_cpu == "x64") -chromium_toolchain_supports_platform = - !is_nacl && is_linux && current_cpu == "x64" +# Use a separate declare_args so these variables' defaults can depend on the +# ones above. +declare_args() { + # Individual Rust components. + + # Conversions between Rust types and C++ types. + # + # TODO(crbug.com/1463749): Enable on ChromeOS. + enable_rust_base_conversions = + enable_rust && (!(is_chromeos || is_ios) || enable_all_rust_features) + + # The base::JSONReader implementation. Requires base conversions. + enable_rust_json = enable_rust && enable_all_rust_features + + # Support for chrome://crash-rust to check crash dump collection works. + enable_rust_crash = enable_rust + + # Support for QR code generation - see https://crbug.com/1431991. + # + # Per go/rusty-qr-code-generator the feature is not actually used on iOS, but + # `is_ios` below is checked for parity with `enable_rust_base_conversions` + # (which is a dependency of `enable_rust_qr`). + # + # TODO(crbug.com/1463749): Enable on ChromeOS. + enable_rust_qr = + enable_rust && (!(is_chromeos || is_ios) || enable_all_rust_features) + + # Support for Rust mojo bindings. + enable_rust_mojo = enable_rust && enable_all_rust_features + + # Rust gtest interop. + enable_rust_gtest_interop = enable_rust + + # Enable Boringssl Rust bindings generation + enable_rust_boringssl = enable_rust && enable_all_rust_features +} + +# Use the Rust toolchain built in-tree. When false, we use the prebuilt Rust +# stdlibs that come with the specified custom toolchain. +use_chromium_rust_toolchain = rust_sysroot_absolute == "" + +# Platform support for the Rust toolchain. +chromium_toolchain_supports_platform = !is_nacl custom_toolchain_supports_platform = !is_nacl || rust_toolchain_supports_nacl -toolchain_has_rust = - enable_rust && - ((use_chromium_rust_toolchain && chromium_toolchain_supports_platform) || - (!use_chromium_rust_toolchain && android_toolchain_supports_platform) || - (rust_sysroot_absolute != "" && custom_toolchain_supports_platform)) +# Not all target triples (GN toolchains) are supported by the Rust compiler. +# Define if we support the current GN toolchain. +toolchain_has_rust = false # The rustc_revision is used to introduce a dependency on the toolchain version # (so e.g. rust targets are rebuilt, and the standard library is re-copied when # the toolchain changes). It is left empty for custom toolchains. rustc_revision = "" -if (toolchain_has_rust && rust_sysroot_absolute == "") { + +if (enable_rust) { if (use_chromium_rust_toolchain) { - update_rust_args = [ "--print-package-version" ] - rustc_revision = exec_script("//tools/rust/update_rust.py", - update_rust_args, - "trim string") + toolchain_has_rust = chromium_toolchain_supports_platform + if (toolchain_has_rust) { + update_rust_args = [ "--print-package-version" ] + rustc_revision = exec_script("//tools/rust/update_rust.py", + update_rust_args, + "trim string") + } + + # The same as written in `config.toml.template`. + rust_channel = "dev" } else { - # Android toolchain version. - rustc_revision = "rustc 1.64.0-dev (Android Rust Toolchain version 9099361)" + toolchain_has_rust = custom_toolchain_supports_platform + rustc_revision = rustc_version } } @@ -115,35 +151,20 @@ if (toolchain_has_rust && rust_sysroot_absolute == "") { # for gtests from the `//testing/test:test` template. can_build_rust_unit_tests = toolchain_has_rust && !is_android -# Whether to build chrome://crash/rust support. -build_rust_crash = toolchain_has_rust && enable_rust_crash - # We want to store rust_sysroot as a source-relative variable for ninja # portability. In practice if an external toolchain was specified, it might # be an absolute path, but we'll do our best. if (enable_rust) { - if (rust_sysroot_absolute != "") { - rust_sysroot = get_path_info(rust_sysroot_absolute, "abspath") - use_unverified_rust_toolchain = true - } else if (use_chromium_rust_toolchain) { - if (host_os != "linux") { - assert( - false, - "Attempt to use Chromium Rust toolchain on an unsupported platform") - } - + if (use_chromium_rust_toolchain) { rust_sysroot = "//third_party/rust-toolchain" - use_unverified_rust_toolchain = false } else { - if (host_os != "linux") { - assert(false, - "Attempt to use Android Rust toolchain on an unsupported platform") - } - - rust_sysroot = "//third_party/android_rust_toolchain/toolchain" - use_unverified_rust_toolchain = false - extra_sysroot_libs += [ "libunwind.a" ] + rust_sysroot = get_path_info(rust_sysroot_absolute, "abspath") } + + # Prebuilt toolchains won't come with bindgen, so we unconditionally use the + # bindgen we ship with the Rust toolchain. This could be made configurable + # if folks want to supply a bindgen with their toolchain. + rust_bindgen_root = "//third_party/rust-toolchain" } # Figure out the Rust target triple (aka 'rust_abi_target') @@ -158,14 +179,29 @@ if (enable_rust) { # (see '*_toolchain_supports_platform above') to enable experimentation with # other toolchains. rust_abi_target = "" -if (is_linux) { - cpu = current_cpu - if (cpu == "arm64") { - cpu = "aarch64" - } else if (cpu == "x64") { - cpu = "x86_64" +if (is_linux || is_chromeos) { + if (current_cpu == "arm64") { + rust_abi_target = "aarch64-unknown-linux-gnu" + } else if (current_cpu == "x86") { + rust_abi_target = "i686-unknown-linux-gnu" + } else if (current_cpu == "x64") { + rust_abi_target = "x86_64-unknown-linux-gnu" + } else if (current_cpu == "arm") { + if (arm_float_abi == "hard") { + float_suffix = "hf" + } else { + float_suffix = "" + } + if (arm_arch == "armv7-a" || arm_arch == "armv7") { + # No way to inform Rust about the -a suffix. + rust_abi_target = "armv7-unknown-linux-gnueabi" + float_suffix + } else { + rust_abi_target = "arm-unknown-linux-gnueabi" + float_suffix + } + } else { + # Best guess for other future platforms. + rust_abi_target = current_cpu + "-unknown-linux-gnu" } - rust_abi_target = cpu + "-unknown-linux-gnu" } else if (is_android) { import("//build/config/android/abi.gni") rust_abi_target = android_abi_target @@ -184,7 +220,13 @@ if (is_linux) { } } else if (is_ios) { if (current_cpu == "arm64") { - rust_abi_target = "aarch64-apple-ios" + if (target_environment == "simulator") { + rust_abi_target = "aarch64-apple-ios-sim" + } else if (target_environment == "catalyst") { + rust_abi_target = "aarch64-apple-ios-macabi" + } else { + rust_abi_target = "aarch64-apple-ios" + } } else if (current_cpu == "arm") { # There's also an armv7s-apple-ios, which targets a more recent ARMv7 # generation CPU found in later iPhones. We'll go with the older one for @@ -192,14 +234,34 @@ if (is_linux) { # with Rust, we might want to be more precise here. rust_abi_target = "armv7-apple-ios" } else if (current_cpu == "x64") { - rust_abi_target = "x86_64-apple-ios" + if (target_environment == "catalyst") { + rust_abi_target = "x86_64-apple-ios-macabi" + } else { + rust_abi_target = "x86_64-apple-ios" + } } else if (current_cpu == "x86") { rust_abi_target = "i386-apple-ios" } else { assert(false, "Architecture not supported") } +} else if (is_mac) { + if (current_cpu == "arm64") { + rust_abi_target = "aarch64-apple-darwin" + } else if (current_cpu == "x64") { + rust_abi_target = "x86_64-apple-darwin" + } else { + assert(false, "Architecture not supported") + } } else if (is_win) { - rust_abi_target = "x86_64-pc-windows-msvc" + if (current_cpu == "arm64") { + rust_abi_target = "aarch64-pc-windows-msvc" + } else if (current_cpu == "x64") { + rust_abi_target = "x86_64-pc-windows-msvc" + } else if (current_cpu == "x86") { + rust_abi_target = "i686-pc-windows-msvc" + } else { + assert(false, "Architecture not supported") + } } assert(!toolchain_has_rust || rust_abi_target != "") @@ -228,9 +290,6 @@ if (current_cpu == "x86") { assert(!toolchain_has_rust || rust_target_arch != "") -# Determine whether the local libstd can and should be built. -local_libstd_supported = enable_local_libstd && use_chromium_rust_toolchain - # Arguments for Rust invocation. # This is common between gcc/clang, Mac and Windows toolchains so specify once, # here. This is not the complete command-line: toolchains should add -o @@ -238,13 +297,20 @@ local_libstd_supported = enable_local_libstd && use_chromium_rust_toolchain rustc_common_args = "--crate-name {{crate_name}} {{source}} --crate-type {{crate_type}} {{rustflags}}" # Rust procedural macros are shared objects loaded into a prebuilt host rustc -# binary. To build them, we obviously need to build for the host. Not only that, -# but because the host rustc is prebuilt, it lacks the machinery to be able to -# load shared objects built using sanitizers (ASAN etc.) For that reason, we need -# to use a host toolchain that lacks sanitizers. This is only strictly necessary -# for procedural macros, but we may also choose to build standalone Rust host -# executable tools using the same toolchain, as they're likely to depend upon -# similar dependencies (syn, quote etc.) and it saves a little build time. -if (using_sanitizer || toolchain_disables_sanitizers) { - host_toolchain_no_sanitizers = "${host_toolchain}_no_sanitizers" +# binary. To build them, we obviously need to build for the host. Not only +# that, but because the host rustc is prebuilt, it lacks the machinery to be +# able to load shared objects built using sanitizers (ASAN etc.). For that +# reason, we need to use a host toolchain that lacks sanitizers. Additionally, +# proc macros should use panic=unwind, which means they need a stdlib that is +# compiled the same way, as is the stdlib that we ship with the compiler. +if (toolchain_for_rust_host_build_tools) { + rust_macro_toolchain = current_toolchain +} else { + rust_macro_toolchain = "${host_toolchain}_for_rust_host_build_tools" } + +# When this is true, a prebuilt Rust stdlib will be used. This has implications +# such as that the panic strategy (unwind, abort) must match how the stdlib is +# compiled, which is typically as unwind. +rust_prebuilt_stdlib = + !use_chromium_rust_toolchain || toolchain_for_rust_host_build_tools diff --git a/build/config/sanitizers/BUILD.gn b/build/config/sanitizers/BUILD.gn index b80e2e2..a3426ea 100644 --- a/build/config/sanitizers/BUILD.gn +++ b/build/config/sanitizers/BUILD.gn @@ -45,6 +45,9 @@ group("deps") { deps += [ "//third_party/instrumented_libraries:deps" ] } } + if (fail_on_san_warnings) { + data += [ "//tools/memory/sanitizer/escalate_sanitizer_warnings.py" ] + } if (is_asan) { if (is_win || is_apple) { data_deps = [ ":copy_asan_runtime" ] @@ -53,6 +56,12 @@ group("deps") { public_deps = [ ":asan_runtime_bundle_data" ] } } + if (use_centipede) { + # For executables which aren't actual fuzzers, we need stubs for + # the sanitizer coverage symbols, because we'll still be generating + # .o files which depend on them. + deps += [ "//third_party/fuzztest:centipede_weak_sancov_stubs" ] + } } assert(!(is_win && is_asan && current_cpu == "x86"), @@ -113,7 +122,7 @@ static_library("options_sources") { # unconditionally linked into targets. visibility = [ ":deps", - "//:gn_visibility", + "//:gn_all", ] sources = [ "//build/sanitizers/sanitizer_options.cc" ] @@ -156,7 +165,9 @@ config("default_sanitizer_ldflags") { ] if (is_posix || is_fuchsia) { - sanitizers = [] + sanitizers = [] # sanitizers applicable to both clang and rustc + ldflags = [] + rustflags = [] if (is_asan) { sanitizers += [ "address" ] } @@ -164,7 +175,10 @@ config("default_sanitizer_ldflags") { sanitizers += [ "hwaddress" ] } if (is_lsan) { - sanitizers += [ "leak" ] + # In Chromium, is_lsan always implies is_asan. ASAN includes LSAN. + # It seems harmless to pass both options to clang, but it doesn't + # work on rustc, so apply this option to clang only. + ldflags += [ "-fsanitize=leak" ] } if (is_tsan) { sanitizers += [ "thread" ] @@ -173,13 +187,11 @@ config("default_sanitizer_ldflags") { sanitizers += [ "memory" ] } if (is_ubsan || is_ubsan_security) { - sanitizers += [ "undefined" ] + ldflags += [ "-fsanitize=undefined" ] } if (is_ubsan_vptr) { - sanitizers += [ "vptr" ] + ldflags += [ "-fsanitize=vptr" ] } - ldflags = [] - rustflags = [] foreach(sanitizer, sanitizers) { ldflags += [ "-fsanitize=$sanitizer" ] rustflags += [ "-Zsanitizer=$sanitizer" ] @@ -268,6 +280,13 @@ config("asan_flags") { cflags = [] if (is_asan) { cflags += [ "-fsanitize=address" ] + if (!is_win && !is_apple && !is_fuchsia) { + # TODO(crbug.com/1459233, crbug.com/1462248): This causes asan + # odr-violation errors in rust code, and link failures for cros/asan. + # Clang recently turned it on by default for all ELF targets (it was + # already on for Fuchsia). Pass the flag to turn it back off. + cflags += ["-fno-sanitize-address-globals-dead-stripping"] + } if (is_win) { if (!defined(asan_win_blocklist_path)) { asan_win_blocklist_path = @@ -294,6 +313,7 @@ config("link_shared_library") { config("cfi_flags") { cflags = [] + rustflags = [] if (is_cfi && current_toolchain == default_toolchain) { if (!defined(cfi_ignorelist_path)) { cfi_ignorelist_path = @@ -304,6 +324,15 @@ config("cfi_flags") { "-fsanitize-ignorelist=$cfi_ignorelist_path", ] + # sanitize=cfi implies -fsplit-lto-unit, and Rust needs to match + # behaviour. Rust needs to know the linker will be doing LTO in this case + # or it rejects the Zsplit-lto-unit flag. + # TODO(crbug.com/1442331): Add -Zsanitize=cfi instead. + rustflags += [ + "-Zsplit-lto-unit", + "-Clinker-plugin-lto=yes", + ] + if (use_cfi_cast) { cflags += [ "-fsanitize=cfi-derived-cast", @@ -313,6 +342,10 @@ config("cfi_flags") { if (use_cfi_icall) { cflags += [ "-fsanitize=cfi-icall" ] + # TODO(crbug.com/1442331): Add cflags += [ + # "-fsanitize-cfi-icall-experimental-normalize-integers" ] + # TODO(crbug.com/1442331): Add rustflags += [ + # "-Zsanitizer-cfi-normalize-integers" ]. } if (use_cfi_diag) { diff --git a/build/config/sanitizers/sanitizers.gni b/build/config/sanitizers/sanitizers.gni index 7bfbe6f..1123559 100644 --- a/build/config/sanitizers/sanitizers.gni +++ b/build/config/sanitizers/sanitizers.gni @@ -67,6 +67,10 @@ declare_args() { # See http://www.chromium.org/developers/testing/libfuzzer use_libfuzzer = false + # Compile for fuzzing with centipede. + # See https://github.com/google/centipede + use_centipede = false + # Compile for fuzzing with AFL. use_afl = false @@ -102,6 +106,9 @@ declare_args() { # When true, seed corpora archives are built. archive_seed_corpus = true + + # When true, sanitizer warnings will cause test case failures. + fail_on_san_warnings = false } declare_args() { @@ -117,8 +124,9 @@ declare_args() { assert(!is_hwasan || (target_os == "android" && target_cpu == "arm64"), "HWASan only supported on Android ARM64 builds.") -# Disable sanitizers for non-target toolchains. -if (!is_a_target_toolchain || toolchain_disables_sanitizers) { +# Disable sanitizers for non-target toolchains, and for the toolchain using +# the prebuilt Rust stdlib which has no sanitizer support with it. +if (!is_a_target_toolchain || toolchain_for_rust_host_build_tools) { is_asan = false is_cfi = false is_hwasan = false @@ -129,9 +137,11 @@ if (!is_a_target_toolchain || toolchain_disables_sanitizers) { is_ubsan_no_recover = false is_ubsan_security = false is_ubsan_vptr = false + fail_on_san_warnings = false msan_track_origins = 0 sanitizer_coverage_flags = "" use_afl = false + use_centipede = false use_cfi_diag = false use_cfi_recover = false use_libfuzzer = false @@ -149,8 +159,18 @@ use_prebuilt_instrumented_libraries = is_msan # Whether we are doing a fuzzer build. Normally this should be checked instead # of checking "use_libfuzzer || use_afl" because often developers forget to -# check for "use_afl". -use_fuzzing_engine = use_libfuzzer || use_afl || use_external_fuzzing_engine +# check for "use_afl", and "use_centipede" is new. +use_fuzzing_engine = + use_libfuzzer || use_afl || use_centipede || use_external_fuzzing_engine + +# Whether the current fuzzing engine supports libprotobuf_mutator. Right now +# this is just libfuzzer, but others are likely to support this in future, +# so it's preferable to check this. +use_fuzzing_engine_with_lpm = use_libfuzzer || use_centipede + +# Whether the fuzzing engine supports fuzzers which supply their own +# "main" function. +fuzzing_engine_supports_custom_main = use_libfuzzer || use_centipede # Args that are in turn dependent on other args must be in a separate # declare_args block. User overrides are only applied at the end of a @@ -177,6 +197,16 @@ declare_args() { if (use_fuzzing_engine && sanitizer_coverage_flags == "") { sanitizer_coverage_flags = "trace-pc-guard" + if (use_centipede) { + # Centipede's minimal flags are listed in //third_party/centipede/src/clang-flags.txt. + # But, for users like Chromium using an up-to-date clang, we can also + # enable extra optional types of coverage which may make Centipede more + # effective. This list is not currently documented and has been derived + # from discussion with centipede creators (though one is warned about at + # https://github.com/google/centipede/blob/main/centipede_callbacks.cc#L68) + sanitizer_coverage_flags = sanitizer_coverage_flags + + ",pc-table,trace-cmp,control-flow,trace-loads" + } } else if (use_sanitizer_coverage && sanitizer_coverage_flags == "") { sanitizer_coverage_flags = "trace-pc-guard,indirect-calls" } @@ -283,3 +313,22 @@ if (use_fuzzing_engine) { } } } + +# Options common to different fuzzer engines. +# Engine should be compiled without coverage (infinite loop in trace_cmp). +fuzzing_engine_remove_configs = [ + "//build/config/coverage:default_coverage", + "//build/config/sanitizers:default_sanitizer_flags", +] + +# Add any sanitizer flags back. In MSAN builds, instrumenting libfuzzer with +# MSAN is necessary since all parts of the binary need to be instrumented for it +# to work. ASAN builds are more subtle: libfuzzer depends on features from the +# C++ STL. If it were not instrumented, templates would be insantiated without +# ASAN from libfuzzer and with ASAN in other TUs. The linker might merge +# instrumented template instantiations with non-instrumented ones (which could +# have a different ABI) in the final binary, which is problematic for TUs +# expecting one particular ABI (https://crbug.com/915422). The other sanitizers +# are added back for the same reason. +fuzzing_engine_add_configs = + [ "//build/config/sanitizers:default_sanitizer_flags_but_coverage" ] diff --git a/build/config/siso/.gitignore b/build/config/siso/.gitignore new file mode 100644 index 0000000..522449b --- /dev/null +++ b/build/config/siso/.gitignore @@ -0,0 +1 @@ +/.sisoenv diff --git a/build/config/siso/OWNERS b/build/config/siso/OWNERS new file mode 100644 index 0000000..03122b7 --- /dev/null +++ b/build/config/siso/OWNERS @@ -0,0 +1,6 @@ +# All current members of the Chrome Build Team. +jwata@google.com +philwo@google.com +richardwa@google.com +tikuta@chromium.org +ukai@google.com diff --git a/build/config/siso/PRESUBMIT.py b/build/config/siso/PRESUBMIT.py new file mode 100644 index 0000000..a7d12d3 --- /dev/null +++ b/build/config/siso/PRESUBMIT.py @@ -0,0 +1,29 @@ +# Copyright 2023 The Chromium Authors +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +PRESUBMIT_VERSION = '2.0.0' + + +def CheckTryjobFooters(input_api, output_api): + """Check if footers include Cq-Include-Trybots to trigger Siso tryjobs.""" + footerTryjobs = input_api.change.GitFootersFromDescription().get( + 'Cq-Include-Trybots', []) + if footerTryjobs: + return [] + + message = ( + "Missing 'Cq-Include-Trybots:' field required for Siso config changes" + "\nPlease add the following fields to run Siso tryjobs.\n\n" + "Cq-Include-Trybots: luci.chromium.try:android-12-x64-siso-rel\n" + "Cq-Include-Trybots: luci.chromium.try:android-arm64-siso-rel\n" + "Cq-Include-Trybots: luci.chromium.try:android-nougat-x86-siso-rel\n" + "Cq-Include-Trybots: luci.chromium.try:fuchsia-x64-cast-receiver-siso-rel\n" + "Cq-Include-Trybots: luci.chromium.try:linux-chromeos-siso-rel\n" + "Cq-Include-Trybots: luci.chromium.try:linux-lacros-siso-rel\n" + "Cq-Include-Trybots: luci.chromium.try:linux-siso-rel\n" + "Cq-Include-Trybots: luci.chromium.try:linux-wayland-siso-rel\n" + "Cq-Include-Trybots: luci.chromium.try:linux-wayland-siso-rel\n" + "Cq-Include-Trybots: luci.chromium.try:linux_chromium_asan_siso_rel_ng\n" + "Cq-Include-Trybots: luci.chromium.try:win-siso-rel\n") + return [output_api.PresubmitPromptWarning(message)] diff --git a/build/config/siso/README.md b/build/config/siso/README.md new file mode 100644 index 0000000..ff38eba --- /dev/null +++ b/build/config/siso/README.md @@ -0,0 +1,8 @@ +# Build config for Siso + +This directory contains configurations for +[siso](https://chromium.googlesource.com/infra/infra/+/refs/heads/main/go/src/infra/build/siso/) +build tool. + +Please refer to [the config specifications](https://chromium.googlesource.com/infra/infra/+/refs/heads/main/go/src/infra/build/siso/docs/starlark_config.md) in the Siso repo. + diff --git a/build/config/siso/android.star b/build/config/siso/android.star new file mode 100644 index 0000000..c2c108d --- /dev/null +++ b/build/config/siso/android.star @@ -0,0 +1,410 @@ +# -*- bazel-starlark -*- +# Copyright 2023 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. +"""Siso configuration for Android builds.""" + +load("@builtin//encoding.star", "json") +load("@builtin//lib/gn.star", "gn") +load("@builtin//struct.star", "module") +load("./config.star", "config") + +def __enabled(ctx): + if "args.gn" in ctx.metadata: + gn_args = gn.parse_args(ctx.metadata["args.gn"]) + if gn_args.get("target_os") == '"android"': + return True + return False + +def __step_config(ctx, step_config): + __input_deps(ctx, step_config["input_deps"]) + + remote_run = True # Turn this to False when you do file access trace. + step_config["rules"].extend([ + # See also https://chromium.googlesource.com/chromium/src/build/+/HEAD/android/docs/java_toolchain.md + { + "name": "android/write_build_config", + "command_prefix": "python3 ../../build/android/gyp/write_build_config.py", + "handler": "android_write_build_config", + "remote": remote_run, + "canonicalize_dir": True, + "timeout": "2m", + }, + { + "name": "android/ijar", + "command_prefix": "python3 ../../build/android/gyp/ijar.py", + "remote": remote_run, + "canonicalize_dir": True, + "timeout": "2m", + }, + { + "name": "android/turbine", + "command_prefix": "python3 ../../build/android/gyp/turbine.py", + "handler": "android_turbine", + # TODO(crrev.com/c/4596899): Add Java inputs in GN config. + "inputs": [ + "third_party/jdk/current/bin/java", + "third_party/android_sdk/public/platforms/android-34/android.jar", + "third_party/android_sdk/public/platforms/android-34/optional/android.test.base.jar", + "third_party/android_sdk/public/platforms/android-34/optional/org.apache.http.legacy.jar", + ], + "outputs_map": { + # Slow actions that exceed deadline on the default worker pool. + "./obj/chrome/android/chrome_test_java.turbine.jar": {"platform_ref": "large"}, + }, + # TODO(b/284252142): Run turbine actions locally by default because it slows down developer builds. + "remote": config.get(ctx, "remote_all"), + "platform_ref": "large", + "canonicalize_dir": True, + "timeout": "2m", + }, + { + "name": "android/compile_resources", + "command_prefix": "python3 ../../build/android/gyp/compile_resources.py", + "handler": "android_compile_resources", + "inputs": [ + "third_party/protobuf/python/google:pyprotolib", + ], + "exclude_input_patterns": [ + "*.h", + "*.o", + "*.cc", + "*.a", + "*.info", + "*.pak", + "*.inc", + ], + "remote": remote_run, + "canonicalize_dir": True, + "timeout": "5m", + }, + { + "name": "android/compile_java", + "command_prefix": "python3 ../../build/android/gyp/compile_java.py", + "handler": "android_compile_java", + # TODO(crrev.com/c/4596899): Add Java inputs in GN config. + "inputs": [ + "third_party/jdk/current/bin/javac", + "third_party/android_sdk/public/platforms/android-34/optional/android.test.base.jar", + "third_party/android_sdk/public/platforms/android-34/optional/org.apache.http.legacy.jar", + ], + # Don't include files under --generated-dir. + # This is probably optimization for local incrmental builds. + # However, this is harmful for remote build cache hits. + "ignore_extra_input_pattern": ".*srcjars.*\\.java", + "ignore_extra_output_pattern": ".*srcjars.*\\.java", + "remote": remote_run, + "platform_ref": "large", + "canonicalize_dir": True, + "timeout": "2m", + }, + { + "name": "android/dex", + "command_prefix": "python3 ../../build/android/gyp/dex.py", + "handler": "android_dex", + # TODO(crrev.com/c/4596899): Add Java inputs in GN config. + "inputs": [ + "third_party/jdk/current/bin/java", + "third_party/android_sdk/public/platforms/android-34/android.jar", + "third_party/android_sdk/public/platforms/android-34/optional/android.test.base.jar", + "third_party/android_sdk/public/platforms/android-34/optional/org.apache.http.legacy.jar", + ], + # TODO(crbug.com/1452038): include only required jar, dex files in GN config. + "indirect_inputs": { + "includes": ["*.dex", "*.ijar.jar", "*.turbine.jar"], + }, + # *.dex files are intermediate files used in incremental builds. + # Fo remote actions, let's ignore them, assuming remote cache hits compensate. + "ignore_extra_input_pattern": ".*\\.dex", + "ignore_extra_output_pattern": ".*\\.dex", + # TODO(b/284252142): Run dex actions locally by default because it slows down developer builds. + "remote": config.get(ctx, "remote_all"), + "platform_ref": "large", + "canonicalize_dir": True, + "timeout": "2m", + }, + { + "name": "android/filter_zip", + "command_prefix": "python3 ../../build/android/gyp/filter_zip.py", + "remote": remote_run, + "canonicalize_dir": True, + "timeout": "2m", + }, + ]) + return step_config + +def __filearg(ctx, arg): + fn = "" + if arg.startswith("@FileArg("): + f = arg.removeprefix("@FileArg(").removesuffix(")").split(":") + fn = f[0].removesuffix("[]") # [] suffix controls expand list? + v = json.decode(str(ctx.fs.read(ctx.fs.canonpath(fn)))) + for k in f[1:]: + v = v[k] + arg = v + if type(arg) == "string": + if arg.startswith("["): + return fn, json.decode(arg) + return fn, [arg] + return fn, arg + +def __android_compile_resources_handler(ctx, cmd): + # Script: + # https://crsrc.org/c/build/android/gyp/compile_resources.py + # GN Config: + # https://crsrc.org/c/build/config/android/internal_rules.gni;l=2163;drc=1b15af251f8a255e44f2e3e3e7990e67e87dcc3b + # https://crsrc.org/c/build/config/android/system_image.gni;l=58;drc=39debde76e509774287a655285d8556a9b8dc634 + # Sample args: + # --aapt2-path ../../third_party/android_build_tools/aapt2/aapt2 + # --android-manifest gen/chrome/android/trichrome_library_system_stub_apk__manifest.xml + # --arsc-package-name=org.chromium.trichromelibrary + # --arsc-path obj/chrome/android/trichrome_library_system_stub_apk.ap_ + # --debuggable + # --dependencies-res-zip-overlays=@FileArg\(gen/chrome/android/webapk/shell_apk/maps_go_webapk.build_config.json:deps_info:dependency_zip_overlays\) + # --dependencies-res-zips=@FileArg\(gen/chrome/android/webapk/shell_apk/maps_go_webapk.build_config.json:deps_info:dependency_zips\) + # --depfile gen/chrome/android/webapk/shell_apk/maps_go_webapk__compile_resources.d + # --emit-ids-out=gen/chrome/android/webapk/shell_apk/maps_go_webapk__compile_resources.resource_ids + # --extra-res-packages=@FileArg\(gen/chrome/android/webapk/shell_apk/maps_go_webapk.build_config.json:deps_info:extra_package_names\) + # --include-resources(=)../../third_party/android_sdk/public/platforms/android-34/android.jar + # --info-path obj/chrome/android/webapk/shell_apk/maps_go_webapk.ap_.info + # --min-sdk-version=24 + # --proguard-file obj/chrome/android/webapk/shell_apk/maps_go_webapk/maps_go_webapk.resources.proguard.txt + # --r-text-out gen/chrome/android/webapk/shell_apk/maps_go_webapk__compile_resources_R.txt + # --rename-manifest-package=org.chromium.trichromelibrary + # --srcjar-out gen/chrome/android/webapk/shell_apk/maps_go_webapk__compile_resources.srcjar + # --target-sdk-version=33 + # --version-code 1 + # --version-name Developer\ Build + # --webp-cache-dir=obj/android-webp-cache + inputs = [] + for i, arg in enumerate(cmd.args): + if arg in ["--aapt2-path", "--include-resources"]: + inputs.append(ctx.fs.canonpath(cmd.args[i + 1])) + if arg.startswith("--include-resources="): + inputs.append(ctx.fs.canonpath(arg.removeprefix("--include-resources="))) + for k in ["--dependencies-res-zips=", "--dependencies-res-zip-overlays=", "--extra-res-packages="]: + if arg.startswith(k): + arg = arg.removeprefix(k) + fn, v = __filearg(ctx, arg) + if fn: + inputs.append(ctx.fs.canonpath(fn)) + for f in v: + f = ctx.fs.canonpath(f) + inputs.append(f) + if k == "--dependencies-res-zips=" and ctx.fs.exists(f + ".info"): + inputs.append(f + ".info") + + ctx.actions.fix( + inputs = cmd.inputs + inputs, + ) + +def __android_compile_java_handler(ctx, cmd): + # Script: + # https://crsrc.org/c/build/android/gyp/compile_java.py + # GN Config: + # https://crsrc.org/c/build/config/android/internal_rules.gni;l=2995;drc=775b3a9ebccd468c79592dad43ef46632d3a411f + # Sample args: + # --depfile=gen/chrome/android/chrome_test_java__compile_java.d + # --generated-dir=gen/chrome/android/chrome_test_java/generated_java + # --jar-path=obj/chrome/android/chrome_test_java.javac.jar + # --java-srcjars=\[\"gen/chrome/browser/tos_dialog_behavior_generated_enum.srcjar\",\ \"gen/chrome/android/chrome_test_java__assetres.srcjar\",\ \"gen/chrome/android/chrome_test_java.generated.srcjar\"\] + # --target-name //chrome/android:chrome_test_java__compile_java + # --classpath=@FileArg\(gen/chrome/android/chrome_test_java.build_config.json:android:sdk_interface_jars\) + # --header-jar obj/chrome/android/chrome_test_java.turbine.jar + # --classpath=\[\"obj/chrome/android/chrome_test_java.turbine.jar\"\] + # --classpath=@FileArg\(gen/chrome/android/chrome_test_java.build_config.json:deps_info:javac_full_interface_classpath\) + # --kotlin-jar-path=obj/chrome/browser/tabmodel/internal/java.kotlinc.jar + # --chromium-code=1 + # --warnings-as-errors + # --jar-info-exclude-globs=\[\"\*/R.class\",\ \"\*/R\\\$\*.class\",\ \"\*/Manifest.class\",\ \"\*/Manifest\\\$\*.class\",\ \"\*/\*GEN_JNI.class\"\] + # @gen/chrome/android/chrome_test_java.sources + + out = cmd.outputs[0] + outputs = [ + out + ".md5.stamp", + ] + + inputs = [] + for i, arg in enumerate(cmd.args): + # read .sources file. + if arg.startswith("@"): + sources = str(ctx.fs.read(ctx.fs.canonpath(arg.removeprefix("@")))).splitlines() + inputs += sources + for k in ["--java-srcjars=", "--classpath=", "--bootclasspath=", "--processorpath=", "--kotlin-jar-path="]: + if arg.startswith(k): + arg = arg.removeprefix(k) + fn, v = __filearg(ctx, arg) + if fn: + inputs.append(ctx.fs.canonpath(fn)) + for f in v: + f, _, _ = f.partition(":") + inputs.append(ctx.fs.canonpath(f)) + + ctx.actions.fix( + inputs = cmd.inputs + inputs, + outputs = cmd.outputs + outputs, + ) + +def __android_dex_handler(ctx, cmd): + out = cmd.outputs[0] + inputs = [ + out.replace("obj/", "gen/").replace(".dex.jar", ".build_config.json"), + ] + + # Add __dex.desugardeps to the outputs. + outputs = [ + out + ".md5.stamp", + ] + for i, arg in enumerate(cmd.args): + if arg == "--desugar-dependencies": + outputs.append(ctx.fs.canonpath(cmd.args[i + 1])) + for k in ["--class-inputs=", "--bootclasspath=", "--classpath=", "--class-inputs-filearg=", "--dex-inputs=", "--dex-inputs-filearg="]: + if arg.startswith(k): + arg = arg.removeprefix(k) + fn, v = __filearg(ctx, arg) + if fn: + inputs.append(ctx.fs.canonpath(fn)) + for f in v: + f, _, _ = f.partition(":") + f = ctx.fs.canonpath(f) + inputs.append(f) + + # TODO: dex.py takes --incremental-dir to reuse the .dex produced in a previous build. + # Should remote dex action also take this? + ctx.actions.fix( + inputs = cmd.inputs + inputs, + outputs = cmd.outputs + outputs, + ) + +def __android_turbine_handler(ctx, cmd): + inputs = [] + outputs = [] + out_fileslist = False + if cmd.args[len(cmd.args) - 1].startswith("@"): + out_fileslist = True + for i, arg in enumerate(cmd.args): + if arg.startswith("--jar-path="): + jar_path = ctx.fs.canonpath(arg.removeprefix("--jar-path=")) + if out_fileslist: + outputs.append(jar_path + ".java_files_list.txt") + for k in ["--classpath=", "--processorpath="]: + if arg.startswith(k): + arg = arg.removeprefix(k) + fn, v = __filearg(ctx, arg) + if fn: + inputs.append(ctx.fs.canonpath(fn)) + for f in v: + f, _, _ = f.partition(":") + inputs.append(ctx.fs.canonpath(f)) + + ctx.actions.fix( + inputs = cmd.inputs + inputs, + outputs = cmd.outputs + outputs, + ) + +def __deps_configs(ctx, f, seen, inputs): + if f in seen: + return + seen[f] = True + inputs.append(f) + v = json.decode(str(ctx.fs.read(f))) + for f in v["deps_info"]["deps_configs"]: + f = ctx.fs.canonpath(f) + __deps_configs(ctx, f, seen, inputs) + if "public_deps_configs" in v["deps_info"]: + for f in v["deps_info"]["public_deps_configs"]: + f = ctx.fs.canonpath(f) + __deps_configs(ctx, f, seen, inputs) + +def __android_write_build_config_handler(ctx, cmd): + # Script: + # https://crsrc.org/c/build/android/gyp/write_build_config.py + # GN Config: + # https://crsrc.org/c/build/config/android/internal_rules.gni;l=122;drc=99e4f79301e108ea3d27ec84320f430490382587 + # Sample args: + # --type=java_library + # --depfile gen/third_party/android_deps/org_jetbrains_kotlinx_kotlinx_metadata_jvm_java__build_config_crbug_908819.d + # --deps-configs=\[\"gen/third_party/kotlin_stdlib/kotlin_stdlib_java.build_config.json\"\] + # --public-deps-configs=\[\] + # --build-config gen/third_party/android_deps/org_jetbrains_kotlinx_kotlinx_metadata_jvm_java.build_config.json + # --gn-target //third_party/android_deps:org_jetbrains_kotlinx_kotlinx_metadata_jvm_java + # --non-chromium-code + # --host-jar-path lib.java/third_party/android_deps/org_jetbrains_kotlinx_kotlinx_metadata_jvm.jar + # --unprocessed-jar-path ../../third_party/android_deps/libs/org_jetbrains_kotlinx_kotlinx_metadata_jvm/kotlinx-metadata-jvm-0.1.0.jar + # --interface-jar-path obj/third_party/android_deps/org_jetbrains_kotlinx_kotlinx_metadata_jvm.ijar.jar + # --is-prebuilt + # --bundled-srcjars=\[\] + inputs = [] + seen = {} + for i, arg in enumerate(cmd.args): + if arg in ["--shared-libraries-runtime-deps", "--secondary-abi-shared-libraries-runtime-deps"]: + inputs.append(ctx.fs.canonpath(cmd.args[i + 1])) + continue + if arg == "--tested-apk-config": + f = ctx.fs.canonpath(cmd.args[i + 1]) + __deps_configs(ctx, f, seen, inputs) + continue + for k in ["--deps-configs=", "--public-deps-configs=", "--annotation-processor-configs="]: + if arg.startswith(k): + arg = arg.removeprefix(k) + v = json.decode(arg) + for f in v: + f = ctx.fs.canonpath(f) + __deps_configs(ctx, f, seen, inputs) + + ctx.actions.fix(inputs = cmd.inputs + inputs) + +__handlers = { + "android_compile_resources": __android_compile_resources_handler, + "android_compile_java": __android_compile_java_handler, + "android_dex": __android_dex_handler, + "android_turbine": __android_turbine_handler, + "android_write_build_config": __android_write_build_config_handler, +} + +def __input_deps(ctx, input_deps): + # TODO(crrev.com/c/4596899): Add Java inputs in GN config. + input_deps["third_party/jdk/current:current"] = [ + "third_party/jdk/current/bin/java", + "third_party/jdk/current/bin/java.chromium", + "third_party/jdk/current/conf/logging.properties", + "third_party/jdk/current/conf/security/java.security", + "third_party/jdk/current/lib/ct.sym", + "third_party/jdk/current/lib/jrt-fs.jar", + "third_party/jdk/current/lib/jvm.cfg", + "third_party/jdk/current/lib/libawt.so", + "third_party/jdk/current/lib/libawt_headless.so", + "third_party/jdk/current/lib/libawt_xawt.so", + "third_party/jdk/current/lib/libjava.so", + "third_party/jdk/current/lib/libjimage.so", + "third_party/jdk/current/lib/libjli.so", + "third_party/jdk/current/lib/libjsvml.so", + "third_party/jdk/current/lib/libmanagement.so", + "third_party/jdk/current/lib/libmanagement_ext.so", + "third_party/jdk/current/lib/libnet.so", + "third_party/jdk/current/lib/libnio.so", + "third_party/jdk/current/lib/libverify.so", + "third_party/jdk/current/lib/libzip.so", + "third_party/jdk/current/lib/modules", + "third_party/jdk/current/lib/server/classes.jsa", + "third_party/jdk/current/lib/server/libjvm.so", + "third_party/jdk/current/lib/tzdb.dat", + ] + input_deps["third_party/jdk/current/bin/java"] = [ + "third_party/jdk/current:current", + ] + input_deps["third_party/jdk/current/bin/javac"] = [ + "third_party/jdk/current:current", + ] + input_deps["third_party/protobuf/python/google/protobuf/__init__.py"] = [ + "third_party/protobuf/python/google:google", + ] + +android = module( + "android", + enabled = __enabled, + step_config = __step_config, + filegroups = {}, + handlers = __handlers, + input_deps = __input_deps, +) diff --git a/build/config/siso/blink_all.star b/build/config/siso/blink_all.star new file mode 100644 index 0000000..46b5034 --- /dev/null +++ b/build/config/siso/blink_all.star @@ -0,0 +1,39 @@ +# -*- bazel-starlark -*- +# Copyright 2023 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. +"""Siso configuration for blink scripts.""" + +load("@builtin//struct.star", "module") + +__filegroups = { +} + +__handlers = { +} + +__input_deps = { +} + +def __step_config(ctx, step_config): + step_config["rules"].extend([ + { + "name": "blink/generate_bindings", + "command_prefix": "python3 ../../third_party/blink/renderer/bindings/scripts/generate_bindings.py", + "inputs": [ + # build/print_python_deps.py couldn't detect this? + # TODO(crbug.com/1475569): fix build/print_python_deps.py + "third_party/mako/mako/mako/ext/pygmentplugin.py", + ], + "remote": True, + "platform_ref": "large", + }, + ]) + return step_config + +blink_all = module( + "blink_all", + filegroups = __filegroups, + handlers = __handlers, + step_config = __step_config, +) diff --git a/build/config/siso/clang_all.star b/build/config/siso/clang_all.star new file mode 100644 index 0000000..48cb9a1 --- /dev/null +++ b/build/config/siso/clang_all.star @@ -0,0 +1,47 @@ +# -*- bazel-starlark -*- +# Copyright 2023 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. +"""Siso configuration for clang.""" + +load("@builtin//struct.star", "module") + +__filegroups = { + "third_party/libc++/src/include:headers": { + "type": "glob", + "includes": ["*"], + # can't use "*.h", because c++ headers have no extension. + }, + "third_party/libc++abi/src/include:headers": { + "type": "glob", + "includes": ["*.h"], + }, + + # toolchain root + # :headers for compiling + "third_party/llvm-build/Release+Asserts:headers": { + "type": "glob", + "includes": [ + "*.h", + "bin/clang", + "bin/clang++", + "bin/clang-cl.exe", + ], + }, +} + +__input_deps = { + # need this because we use + # third_party/libc++/src/include:headers, + # but scandeps doesn't scan `__config` file, which uses + # `#include <__config_site>` + "third_party/libc++/src/include": [ + "buildtools/third_party/libc++/__config_site", + ], +} + +clang_all = module( + "clang_all", + filegroups = __filegroups, + input_deps = __input_deps, +) diff --git a/build/config/siso/clang_code_coverage_wrapper.star b/build/config/siso/clang_code_coverage_wrapper.star new file mode 100644 index 0000000..3994c65 --- /dev/null +++ b/build/config/siso/clang_code_coverage_wrapper.star @@ -0,0 +1,223 @@ +# -*- bazel-starlark -*- +# Copyright 2023 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. +"""Siso config version of clang_code_coverage_wrapper.py""" +# LINT.IfChange + +load("@builtin//struct.star", "module") + +# Logics are copied from build/toolchain/clang_code_coverage_wrapper.py +# in ordre to strip coverage flags without process invocation. +# This is neceesary for Siso to send clang command to RBE without the wrapper and instrument file. + +# Flags used to enable coverage instrumentation. +# Flags should be listed in the same order that they are added in +# build/config/coverage/BUILD.gn +_COVERAGE_FLAGS = [ + "-fprofile-instr-generate", + "-fcoverage-mapping", + # Following experimental flags remove unused header functions from the + # coverage mapping data embedded in the test binaries, and the reduction + # of binary size enables building Chrome's large unit test targets on + # MacOS. Please refer to crbug.com/796290 for more details. + "-mllvm", + "-limited-coverage-experimental=true", +] + +# Files that should not be built with coverage flags by default. +_DEFAULT_COVERAGE_EXCLUSION_LIST = [] + +# Map of exclusion lists indexed by target OS. +# If no target OS is defined, or one is defined that doesn't have a specific +# entry, use _DEFAULT_COVERAGE_EXCLUSION_LIST. +_COVERAGE_EXCLUSION_LIST_MAP = { + "android": [ + # This file caused webview native library failed on arm64. + "../../device/gamepad/dualshock4_controller.cc", + ], + "fuchsia": [ + # TODO(crbug.com/1174725): These files caused clang to crash while + # compiling them. + "../../base/allocator/partition_allocator/pcscan.cc", + "../../third_party/skia/src/core/SkOpts.cpp", + "../../third_party/skia/src/opts/SkOpts_hsw.cpp", + "../../third_party/skia/third_party/skcms/skcms.cc", + ], + "linux": [ + # These files caused a static initializer to be generated, which + # shouldn't. + # TODO(crbug.com/990948): Remove when the bug is fixed. + "../../chrome/browser/media/router/providers/cast/cast_internal_message_util.cc", #pylint: disable=line-too-long + "../../components/media_router/common/providers/cast/channel/cast_channel_enum.cc", #pylint: disable=line-too-long + "../../components/media_router/common/providers/cast/channel/cast_message_util.cc", #pylint: disable=line-too-long + "../../components/media_router/common/providers/cast/cast_media_source.cc", #pylint: disable=line-too-long + "../../ui/events/keycodes/dom/keycode_converter.cc", + ], + "chromeos": [ + # These files caused clang to crash while compiling them. They are + # excluded pending an investigation into the underlying compiler bug. + "../../third_party/webrtc/p2p/base/p2p_transport_channel.cc", + "../../third_party/icu/source/common/uts46.cpp", + "../../third_party/icu/source/common/ucnvmbcs.cpp", + "../../base/android/android_image_reader_compat.cc", + ], +} + +# Map of force lists indexed by target OS. +_COVERAGE_FORCE_LIST_MAP = { + # clang_profiling.cc refers to the symbol `__llvm_profile_dump` from the + # profiling runtime. In a partial coverage build, it is possible for a + # binary to include clang_profiling.cc but have no instrumented files, thus + # causing an unresolved symbol error because the profiling runtime will not + # be linked in. Therefore we force coverage for this file to ensure that + # any target that includes it will also get the profiling runtime. + "win": [r"..\..\base\test\clang_profiling.cc"], + # TODO(crbug.com/1141727) We're seeing runtime LLVM errors in mac-rel when + # no files are changed, so we suspect that this is similar to the other + # problem with clang_profiling.cc on Windows. The TODO here is to force + # coverage for this specific file on ALL platforms, if it turns out to fix + # this issue on Mac as well. It's the only file that directly calls + # `__llvm_profile_dump` so it warrants some special treatment. + "mac": ["../../base/test/clang_profiling.cc"], +} + +def _remove_flags_from_command(command): + # We need to remove the coverage flags for this file, but we only want to + # remove them if we see the exact sequence defined in _COVERAGE_FLAGS. + # That ensures that we only remove the flags added by GN when + # "use_clang_coverage" is true. Otherwise, we would remove flags set by + # other parts of the build system. + start_flag = _COVERAGE_FLAGS[0] + num_flags = len(_COVERAGE_FLAGS) + start_idx = 0 + + def _start_flag_idx(cmd, start_idx): + for i in range(start_idx, len(cmd)): + if cmd[i] == start_flag: + return i + + # Workaround to emulate while loop in Starlark. + for _ in range(0, len(command)): + idx = _start_flag_idx(command, start_idx) + if not idx: + # Coverage flags are not included anymore. + return command + if command[idx:idx + num_flags] == _COVERAGE_FLAGS: + # Starlark doesn't have `del`. + command = command[:idx] + command[idx + num_flags:] + + # There can be multiple sets of _COVERAGE_FLAGS. All of these need to be + # removed. + start_idx = idx + else: + start_idx = idx + 1 + return command + +def __run(ctx, args): + """Runs the main logic of clang_code_coverage_wrapper. + + This is slightly different from the main function of clang_code_coverage_wrapper.py + because starlark can't use Python's standard libraries. + """ + # We need to remove the coverage flags for this file, but we only want to + # remove them if we see the exact sequence defined in _COVERAGE_FLAGS. + # That ensures that we only remove the flags added by GN when + # "use_clang_coverage" is true. Otherwise, we would remove flags set by + # other parts of the build system. + + if len(args) == 0: + return args + if not args[0].endswith("python3") and not args[0].endswith("python3.exe"): + return args + + has_coveage_wrapper = False + instrument_file = None + compile_command_pos = None + target_os = None + source_flag = "-c" + source_flag_index = None + for i, arg in enumerate(args): + if i == 0: + continue + if arg == "../../build/toolchain/clang_code_coverage_wrapper.py": + has_coveage_wrapper = True + continue + if arg.startswith("--files-to-instrument="): + instrument_file = arg.removeprefix("--files-to-instrument=") + continue + if arg.startswith("--target-os="): + target_os = arg.removeprefix("--target-os=") + if target_os == "win": + source_flag = "/c" + continue + if not compile_command_pos and not args[i].startswith("-") and "clang" in args[i]: + compile_command_pos = i + continue + if args[i] == source_flag: + # The command is assumed to use Clang as the compiler, and the path to the + # source file is behind the -c argument, and the path to the source path is + # relative to the root build directory. For example: + # clang++ -fvisibility=hidden -c ../../base/files/file_path.cc -o \ + # obj/base/base/file_path.o + # On Windows, clang-cl.exe uses /c instead of -c. + source_flag_index = i + continue + + if not has_coveage_wrapper or not compile_command_pos: + print("this is not clang coverage command. %s" % str(args)) + return args + + compile_command = args[compile_command_pos:] + + if not source_flag_index: + fail("%s argument is not found in the compile command. %s" % (source_flag, str(args))) + + if source_flag_index + 1 >= len(args): + fail("Source file to be compiled is missing from the command.") + + # On Windows, filesystem paths should use '\', but GN creates build commands + # that use '/'. + # The original logic in clang_code_coverage_wrapper.py uses + # os.path.normpath() to ensure to ensure that the path uses the correct + # separator for the current platform. i.e. '\' on Windows and '/' otherwise + # Siso's ctx.fs.canonpath() ensures '/' on all platforms, instead. + # TODO: Consdier coverting the paths in instrument file and hardcoded lists + # only once at initialization if it improves performance. + + compile_source_file = ctx.fs.canonpath(args[source_flag_index + 1]) + + extension = compile_source_file.rsplit(".", 1)[1] + if not extension in ["c", "cc", "cpp", "cxx", "m", "mm", "S"]: + fail("Invalid source file %s found. extension=%s" % (compile_source_file, extension)) + + exclusion_list = _COVERAGE_EXCLUSION_LIST_MAP.get( + target_os, + _DEFAULT_COVERAGE_EXCLUSION_LIST, + ) + exclusion_list = [ctx.fs.canonpath(f) for f in exclusion_list] + force_list = _COVERAGE_FORCE_LIST_MAP.get(target_os, []) + force_list = [ctx.fs.canonpath(f) for f in force_list] + + files_to_instrument = [] + if instrument_file: + files_to_instrument = str(ctx.fs.read(ctx.fs.canonpath(instrument_file))).splitlines() + files_to_instrument = [ctx.fs.canonpath(f) for f in files_to_instrument] + + should_remove_flags = False + if compile_source_file not in force_list: + if compile_source_file in exclusion_list: + should_remove_flags = True + elif instrument_file and compile_source_file not in files_to_instrument: + should_remove_flags = True + + if should_remove_flags: + return _remove_flags_from_command(compile_command) + return compile_command + +clang_code_coverage_wrapper = module( + "clang_code_coverage_wrapper", + run = __run, +) + +# LINT.ThenChange(/build/toolchain/clang_code_coverage_wrapper.py) diff --git a/build/config/siso/clang_linux.star b/build/config/siso/clang_linux.star new file mode 100644 index 0000000..6985fcb --- /dev/null +++ b/build/config/siso/clang_linux.star @@ -0,0 +1,124 @@ +# -*- bazel-starlark -*- +# Copyright 2023 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. +"""Siso configuration for clang/linux.""" + +load("@builtin//path.star", "path") +load("@builtin//struct.star", "module") +load("./clang_all.star", "clang_all") +load("./clang_code_coverage_wrapper.star", "clang_code_coverage_wrapper") + +__filegroups = { + # for precomputed subtrees + "build/linux/debian_bullseye_amd64-sysroot/usr/include:include": { + "type": "glob", + "includes": ["*"], + # need bits/stab.def, c++/* + }, + "build/linux/debian_bullseye_amd64-sysroot/usr/lib:headers": { + "type": "glob", + "includes": ["*.h", "crtbegin.o"], + }, + "build/linux/debian_bullseye_i386-sysroot/usr/include:include": { + "type": "glob", + "includes": ["*"], + # need bits/stab.def, c++/* + }, + "build/linux/debian_bullseye_i386-sysroot/usr/lib:headers": { + "type": "glob", + "includes": ["*.h", "crtbegin.o"], + }, + "third_party/android_toolchain/ndk/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include:include": { + "type": "glob", + "includes": ["*"], + # can't use "*.h", because c++ headers have no extension. + }, + "third_party/android_toolchain/ndk/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/local/include:include": { + "type": "glob", + "includes": ["*"], + }, +} +__filegroups.update(clang_all.filegroups) + +def __clang_compile_coverage(ctx, cmd): + clang_command = clang_code_coverage_wrapper.run(ctx, list(cmd.args)) + ctx.actions.fix(args = clang_command) + +__handlers = { + "clang_compile_coverage": __clang_compile_coverage, +} + +def __step_config(ctx, step_config): + step_config["input_deps"].update({ + # sysroot headers for precomputed subtrees + "build/linux/debian_bullseye_amd64-sysroot:headers": [ + "build/linux/debian_bullseye_amd64-sysroot/usr/include:include", + "build/linux/debian_bullseye_amd64-sysroot/usr/lib:headers", + ], + "build/linux/debian_bullseye_i386-sysroot:headers": [ + "build/linux/debian_bullseye_i386-sysroot/usr/include:include", + "build/linux/debian_bullseye_i386-sysroot/usr/lib:headers", + ], + "third_party/android_toolchain/ndk/toolchains/llvm/prebuilt/linux-x86_64/sysroot:headers": [ + "third_party/android_toolchain/ndk/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include:include", + "third_party/android_toolchain/ndk/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/local/include:include", + ], + }) + step_config["input_deps"].update(clang_all.input_deps) + step_config["rules"].extend([ + { + "name": "clang/cxx", + "action": "(.*_)?cxx", + "command_prefix": "../../third_party/llvm-build/Release+Asserts/bin/clang++ ", + "inputs": [ + "third_party/llvm-build/Release+Asserts/bin/clang++", + ], + "remote": True, + "canonicalize_dir": True, + "timeout": "2m", + }, + { + "name": "clang/cc", + "action": "(.*_)?cc", + "command_prefix": "../../third_party/llvm-build/Release+Asserts/bin/clang ", + "inputs": [ + "third_party/llvm-build/Release+Asserts/bin/clang", + ], + "remote": True, + "canonicalize_dir": True, + "timeout": "2m", + }, + { + "name": "clang-coverage/cxx", + "action": "(.*_)?cxx", + "command_prefix": "\"python3\" ../../build/toolchain/clang_code_coverage_wrapper.py", + "inputs": [ + "third_party/llvm-build/Release+Asserts/bin/clang++", + ], + "handler": "clang_compile_coverage", + "remote": True, + "canonicalize_dir": True, + "timeout": "2m", + }, + { + "name": "clang-coverage/cc", + "action": "(.*_)?cc", + "command_prefix": "\"python3\" ../../build/toolchain/clang_code_coverage_wrapper.py", + "inputs": [ + "third_party/llvm-build/Release+Asserts/bin/clang", + ], + "handler": "clang_compile_coverage", + "remote": True, + "canonicalize_dir": True, + "timeout": "2m", + }, + ]) + return step_config + +clang = module( + "clang", + step_config = __step_config, + filegroups = __filegroups, + handlers = __handlers, +) diff --git a/build/config/siso/clang_mac.star b/build/config/siso/clang_mac.star new file mode 100644 index 0000000..a25f08c --- /dev/null +++ b/build/config/siso/clang_mac.star @@ -0,0 +1,126 @@ +# -*- bazel-starlark -*- +# Copyright 2023 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. +"""Siso configuration for clang/mac.""" + +load("@builtin//path.star", "path") +load("@builtin//struct.star", "module") +load("./clang_all.star", "clang_all") +load("./clang_code_coverage_wrapper.star", "clang_code_coverage_wrapper") +load("./rewrapper_cfg.star", "rewrapper_cfg") + +__filegroups = { + "build/mac_files/xcode_binaries/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk:headers": { + "type": "glob", + "includes": ["*"], + }, +} +__filegroups.update(clang_all.filegroups) + +def __clang_compile_coverage(ctx, cmd): + clang_command = clang_code_coverage_wrapper.run(ctx, list(cmd.args)) + ctx.actions.fix(args = clang_command) + +__handlers = { + "clang_compile_coverage": __clang_compile_coverage, +} + +def __step_config(ctx, step_config): + cfg = "buildtools/reclient_cfgs/chromium-browser-clang/rewrapper_mac.cfg" + if ctx.fs.exists(cfg): + reproxy_config = rewrapper_cfg.parse(ctx, cfg) + step_config["platforms"].update({ + "clang": reproxy_config["platform"], + }) + step_config["input_deps"].update(clang_all.input_deps) + step_config["rules"].extend([ + { + "name": "clang/cxx", + "action": "(.*_)?cxx", + "command_prefix": "../../third_party/llvm-build/Release+Asserts/bin/clang++", + "platform_ref": "clang", + "remote": True, + "remote_wrapper": reproxy_config["remote_wrapper"], + }, + { + "name": "clang/cc", + "action": "(.*_)?cc", + "command_prefix": "../../third_party/llvm-build/Release+Asserts/bin/clang", + "platform_ref": "clang", + "remote": True, + "remote_wrapper": reproxy_config["remote_wrapper"], + }, + { + "name": "clang/objcxx", + "action": "(.*_)?objcxx", + "command_prefix": "../../third_party/llvm-build/Release+Asserts/bin/clang++", + "platform_ref": "clang", + "remote": True, + "remote_wrapper": reproxy_config["remote_wrapper"], + }, + { + "name": "clang/objc", + "action": "(.*_)?objc", + "command_prefix": "../../third_party/llvm-build/Release+Asserts/bin/clang", + "platform_ref": "clang", + "remote": True, + "remote_wrapper": reproxy_config["remote_wrapper"], + }, + { + "name": "clang-coverage/cxx", + "action": "(.*_)?cxx", + "command_prefix": "python3 ../../build/toolchain/clang_code_coverage_wrapper.py", + "inputs": [ + "third_party/llvm-build/Release+Asserts/bin/clang++", + ], + "handler": "clang_compile_coverage", + "platform_ref": "clang", + "remote": True, + "remote_wrapper": reproxy_config["remote_wrapper"], + }, + { + "name": "clang-coverage/cc", + "action": "(.*_)?cc", + "command_prefix": "python3 ../../build/toolchain/clang_code_coverage_wrapper.py", + "inputs": [ + "third_party/llvm-build/Release+Asserts/bin/clang", + ], + "handler": "clang_compile_coverage", + "platform_ref": "clang", + "remote": True, + "remote_wrapper": reproxy_config["remote_wrapper"], + }, + { + "name": "clang-coverage/objcxx", + "action": "(.*_)?objcxx", + "command_prefix": "python3 ../../build/toolchain/clang_code_coverage_wrapper.py", + "inputs": [ + "third_party/llvm-build/Release+Asserts/bin/clang++", + ], + "handler": "clang_compile_coverage", + "platform_ref": "clang", + "remote": True, + "remote_wrapper": reproxy_config["remote_wrapper"], + }, + { + "name": "clang-coverage/objc", + "action": "(.*_)?objc", + "command_prefix": "python3 ../../build/toolchain/clang_code_coverage_wrapper.py", + "inputs": [ + "third_party/llvm-build/Release+Asserts/bin/clang", + ], + "handler": "clang_compile_coverage", + "platform_ref": "clang", + "remote": True, + "remote_wrapper": reproxy_config["remote_wrapper"], + }, + ]) + return step_config + +clang = module( + "clang", + step_config = __step_config, + filegroups = __filegroups, + handlers = __handlers, +) diff --git a/build/config/siso/clang_windows.star b/build/config/siso/clang_windows.star new file mode 100644 index 0000000..7b04aea --- /dev/null +++ b/build/config/siso/clang_windows.star @@ -0,0 +1,251 @@ +# -*- bazel-starlark -*- +# Copyright 2023 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. +"""Siso configuration for clang-cl/windows.""" + +load("@builtin//path.star", "path") +load("@builtin//struct.star", "module") +load("./clang_all.star", "clang_all") +load("./clang_code_coverage_wrapper.star", "clang_code_coverage_wrapper") +load("./rewrapper_cfg.star", "rewrapper_cfg") + +__filegroups = { + # for precomputed subtree + "third_party/depot_tools/win_toolchain/vs_files/27370823e7:headers-ci": { + "type": "glob", + "includes": [ + "*.h", + "*.inl", + "*.H", + "*.Hxx", + "*.hxx", + "*.hpp", + "VC/Tools/MSVC/*/include/*", + "VC/Tools/MSVC/*/include/*/*", + ], + }, +} + +__filegroups.update(clang_all.filegroups) + +def __clang_compile_coverage(ctx, cmd): + clang_command = clang_code_coverage_wrapper.run(ctx, list(cmd.args)) + ctx.actions.fix(args = clang_command) + +__handlers = { + "clang_compile_coverage": __clang_compile_coverage, +} + +def __step_config(ctx, step_config): + cfg = "buildtools/reclient_cfgs/chromium-browser-clang/rewrapper_windows.cfg" + if ctx.fs.exists(cfg): + reproxy_config = rewrapper_cfg.parse(ctx, cfg) + step_config["platforms"].update({ + "clang-cl": reproxy_config["platform"], + }) + step_config["input_deps"].update(clang_all.input_deps) + if reproxy_config["platform"]["OSFamily"] == "Windows": + step_config["input_deps"].update({ + "third_party/depot_tools/win_toolchain/vs_files/27370823e7:headers": [ + "third_party/depot_tools/win_toolchain/vs_files/27370823e7:headers-ci", + ], + }) + else: + step_config["input_deps"].update({ + "third_party/depot_tools/win_toolchain/vs_files/27370823e7:headers": [ + "third_party/depot_tools/win_toolchain/vs_files/27370823e7:headers-ci", + # third_party/libc++ includes "DeplayIMP.h" + "third_party/depot_tools/win_toolchain/vs_files/27370823e7/VC/Tools/MSVC/14.34.31933/include/DelayIMP.h", + # third_party/abseil-cpp includes "dbghelp.h" + "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/dbghelp.h", + # third_party/abseil-cpp includes "aclapi.h" + "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/aclapi.h", + # base/debug includes "psapi.h" + "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/psapi.h", + # base/process includes "tlhelp32.h" + "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/tlhelp32.h", + # base/process includes "userenv.h" + "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/userenv.h", + # base includes "shlobj.h" + "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/shlobj.h", + # base/win includes "lm.h" + "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/lm.h", + # base/win includes "mdmregistration.h" + "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/mdmregistration.h", + # base/win includes "shellscalingapi.h" + "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/shellscalingapi.h", + # base/win includes "uiviewsettingsinterop.h" + "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/uiviewsettingsinterop.h", + # native_client/src/shared/platform/win includes "WinError.h" + "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/shared/WinError.h", + # third_party/webrtc/rtc_base/win includes "windows.graphics.directX.direct3d11.h" + "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/cppwinrt/winrt/windows.graphics.directX.direct3d11.h", + "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/winrt/windows.graphics.directX.direct3d11.h", + # third_party/webrtc/rtc_base/win includes "windows.graphics.directX.direct3d11.interop.h" + "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/windows.graphics.directX.direct3d11.interop.h", + # third_party/crashpad/crashpad/handler/win includes "werapi.h" + "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/werapi.h", + # chrome/install_static/ includes "wtsapi32.h" + "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/wtsapi32.h", + # third_party/dawn/include/dawn/native includes "DXGI1_4.h" + "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/shared/DXGI1_4.h", + # v8/src/diagnostics includes "versionhelpers.h" + "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/versionhelpers.h", + # ui/gfx/ includes "DXGIType.h" + "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/shared/DXGIType.h", + # third_party/unrar includes "PowrProf.h" + "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/PowrProf.h", + # device/base/ includes "dbt.h" + "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/dbt.h", + # third_party/skia/ includes "ObjBase.h" + "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/ObjBase.h", + # third_party/webrtc/rtc_base includes "ws2spi.h" + "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/ws2spi.h", + # third_party/skia/ includes "T2EmbApi.h" + "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/T2EmbApi.h", + # device/vr/windows/ includes "D3D11_1.h" + "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/D3D11_1.h", + # rlz/win/ includes "Sddl.h" + "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/shared/Sddl.h", + # chrome/common/safe_browsing/ includes "softpub.h" + "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/softpub.h", + # services/device/generic_sensor/ includes "Sensors.h" + "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/Sensors.h", + # third_party/webrtc/modules/desktop_capture/win includes "windows.graphics.capture.interop.h" + "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/windows.graphics.capture.interop.h", + # third_party/skia/ includes "FontSub.h" + "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/FontSub.h", + # chrome/updater/ includes "regstr.h" + "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/regstr.h", + # services/device/compute_pressure includes "pdh.h" + "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/pdh.h", + # chrome/installer/ includes "mshtmhst.h" + "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/mshtmhst.h", + # net/ssl/ includes "NCrypt.h" + "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/NCrypt.h", + # device/fido/win/ includes "Combaseapi.h" + "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/Combaseapi.h", + # components/device_signals/core/system_signals/win includes "wscapi.h" + "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/wscapi.h", + # net/proxy_resolution/win/ includes "dhcpcsdk.h" + "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/dhcpcsdk.h", + # third_party/dawn/third_party/glfw includes "xinput.h" + "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/xinput.h", + # v8/tools/v8windbg includes "pathcch.h" + "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/pathcch.h", + # remoting/host includes "rpcproxy.h" + "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/rpcproxy.h", + # sandbox/win includes "Aclapi.h" + "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/Aclapi.h", + # ui/accessibility/platform includes "uiautomation.h" + "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/uiautomation.h", + # chrome/credential_provider/gaiacp includes "ntsecapi.h" + "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/ntsecapi.h", + # net/dns includes "Winsock2.h" + "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/Winsock2.h", + # media/cdm/win includes "mferror.h" + "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/mferror.h", + # chrome/credentialProvider/gaiacp includes "Winternl.h" + "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/Winternl.h", + # media/audio/win includes "audioclient.h" + "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/audioclient.h", + # media/audio/win includes "MMDeviceAPI.h" + "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/MMDeviceAPI.h", + # net/proxy_resolution/win includes "dhcpv6csdk.h" + "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/dhcpv6csdk.h", + # components/system_media_controls/win includes "systemmediatransportcontrolsinterop.h" + "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/systemmediatransportcontrolsinterop.h", + # ui/native_theme includes "Windows.Media.ClosedCaptioning.h" + "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/cppwinrt/winrt/Windows.Media.ClosedCaptioning.h", + "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/winrt/Windows.Media.ClosedCaptioning.h", + # media/audio/win includes "Functiondiscoverykeys_devpkey.h" + "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/Functiondiscoverykeys_devpkey.h", + # device/fido includes "Winuser.h" + "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/Winuser.h", + # chrome/updater/win includes "msxml2.h" + "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/msxml2.h", + # remoting/host includes "ime.h" + "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/ime.h", + # remoting/host/win includes "D3DCommon.h" + "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/D3DCommon.h", + # ui/views/controls/menu includes "Vssym32.h" + "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/Vssym32.h", + # third_party/wtl includes "richedit.h" + "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/richedit.h", + # chrome/updater/net includes "Urlmon.h" + "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/Urlmon.h", + # device/gamepad includes "XInput.h" + "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/XInput.h", + # chrome/credential_provider/gaiacp includes "Shlobj.h" + "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/Shlobj.h", + # content/renderer includes "mlang.h" + "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/mlang.h", + # components/storage_monitor includes "portabledevice.h" + "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/portabledevice.h", + # third_party/wtl includes "richole.h" + "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/richole.h", + # chrome/utility/importer includes "intshcut.h" + "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/intshcut.h", + # chrome/browser/net includes "Ws2spi.h" + "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/Ws2spi.h", + # chrome/browser/enterprise/platform_auth includes "proofofpossessioncookieinfo.h" + "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/proofofpossessioncookieinfo.h", + # chrome/utility/importer includes "urlhist.h" + "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/urlhist.h", + # chrome/updater/win/installer includes "msiquery.h" + "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/um/msiquery.h", + # third_party/win_virtual_display/controller includes "Devpropdef.h" + "third_party/depot_tools/win_toolchain/vs_files/27370823e7/Windows Kits/10/Include/10.0.22621.0/shared/Devpropdef.h", + ], + }) + step_config["rules"].extend([ + { + "name": "clang-cl/cxx", + "action": "(.*_)?cxx", + "command_prefix": "..\\..\\third_party\\llvm-build\\Release+Asserts\\bin\\clang-cl.exe", + "platform_ref": "clang-cl", + "remote": True, + "remote_wrapper": reproxy_config["remote_wrapper"], + }, + { + "name": "clang-cl/cc", + "action": "(.*_)?cc", + "command_prefix": "..\\..\\third_party\\llvm-build\\Release+Asserts\\bin\\clang-cl.exe", + "platform_ref": "clang-cl", + "remote": True, + "remote_wrapper": reproxy_config["remote_wrapper"], + }, + { + "name": "clang-coverage/cxx", + "action": "(.*_)?cxx", + "command_prefix": "python3.exe ../../build/toolchain/clang_code_coverage_wrapper.py", + "inputs": [ + "third_party/llvm-build/Release+Asserts/bin/clang++", + ], + "handler": "clang_compile_coverage", + "platform_ref": "clang-cl", + "remote": True, + "remote_wrapper": reproxy_config["remote_wrapper"], + }, + { + "name": "clang-coverage/cc", + "action": "(.*_)?cc", + "command_prefix": "python3.exe ../../build/toolchain/clang_code_coverage_wrapper.py", + "inputs": [ + "third_party/llvm-build/Release+Asserts/bin/clang", + ], + "handler": "clang_compile_coverage", + "platform_ref": "clang-cl", + "remote": True, + "remote_wrapper": reproxy_config["remote_wrapper"], + }, + ]) + return step_config + +clang = module( + "clang", + step_config = __step_config, + filegroups = __filegroups, + handlers = __handlers, +) diff --git a/build/config/siso/config.star b/build/config/siso/config.star new file mode 100644 index 0000000..f1bd52c --- /dev/null +++ b/build/config/siso/config.star @@ -0,0 +1,30 @@ +# -*- bazel-starlark -*- +# Copyright 2023 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. +"""Config module for checking siso -config flags.""" + +load("@builtin//struct.star", "module") + +__KNOWN_CONFIG_OPTIONS = [ + "remote_all", +] + +def __check(ctx): + if "config" in ctx.flags: + for cfg in ctx.flags["config"].split(","): + if cfg not in __KNOWN_CONFIG_OPTIONS: + print("unknown config: %s" % cfg) + +def __get(ctx, key): + if "config" in ctx.flags: + for cfg in ctx.flags["config"].split(","): + if cfg == key: + return True + return False + +config = module( + "config", + check = __check, + get = __get, +) diff --git a/build/config/siso/configure_siso.py b/build/config/siso/configure_siso.py new file mode 100755 index 0000000..bcf79ca --- /dev/null +++ b/build/config/siso/configure_siso.py @@ -0,0 +1,37 @@ +#!/usr/bin/env python3 +# Copyright 2023 The Chromium Authors +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. +"""This script is used to configure siso.""" + +import argparse +import os +import sys + +THIS_DIR = os.path.abspath(os.path.dirname(__file__)) + + +def main(): + parser = argparse.ArgumentParser(description="configure siso") + parser.add_argument("--rbe_instance", help="RBE instance to use for Siso") + args = parser.parse_args() + + project = None + rbe_instance = args.rbe_instance + if rbe_instance: + elems = rbe_instance.split("/") + if len(elems) == 4 and elems[0] == "projects": + project = elems[1] + rbe_instance = elems[-1] + + siso_env_path = os.path.join(THIS_DIR, ".sisoenv") + with open(siso_env_path, "w") as f: + if project: + f.write("SISO_PROJECT=%s\n" % project) + if rbe_instance: + f.write("SISO_REAPI_INSTANCE=%s\n" % rbe_instance) + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/build/config/siso/linux.star b/build/config/siso/linux.star new file mode 100644 index 0000000..f3c99cd --- /dev/null +++ b/build/config/siso/linux.star @@ -0,0 +1,124 @@ +# -*- bazel-starlark -*- +# Copyright 2023 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. +"""Siso configuration for linux.""" + +load("@builtin//struct.star", "module") +load("./clang_linux.star", "clang") +load("./config.star", "config") +load("./mojo.star", "mojo") +load("./nacl_linux.star", "nacl") +load("./nasm_linux.star", "nasm") +load("./proto_linux.star", "proto") +load("./reproxy.star", "reproxy") +load("./android.star", "android") + +__filegroups = {} +__filegroups.update(android.filegroups) +__filegroups.update(clang.filegroups) +__filegroups.update(mojo.filegroups) +__filegroups.update(nacl.filegroups) +__filegroups.update(nasm.filegroups) +__filegroups.update(proto.filegroups) + +__handlers = {} +__handlers.update(android.handlers) +__handlers.update(clang.handlers) +__handlers.update(mojo.handlers) +__handlers.update(nacl.handlers) +__handlers.update(nasm.handlers) +__handlers.update(proto.handlers) +__handlers.update(reproxy.handlers) + +def __disable_remote_b281663988(step_config): + step_config["rules"].insert(0, { + # TODO(b/281663988): missing headers. + "name": "b281663988/missing-headers", + "action_outs": [ + "./obj/ui/qt/qt5_shim/qt_shim.o", + "./obj/ui/qt/qt6_shim/qt_shim.o", + "./obj/ui/qt/qt5_shim/qt5_shim_moc.o", + "./obj/ui/qt/qt6_shim/qt6_shim_moc.o", + "./obj/ui/qt/qt_interface/qt_interface.o", + ], + "remote": False, + # This rule is used only with use_remoteexec. + # TODO(b/292838933): Move this rule into reproxy.star? + "handler": "strip_rewrapper", + }) + return step_config + +def __disable_remote_b289968566(ctx, step_config): + rule = { + # TODO(b/289968566): they often faile with exit=137 (OOM?). + # We should migrate default machine type to n2-standard-2. + "name": "b289968566/exit-137", + "action_outs": [ + "./android_clang_arm/obj/third_party/distributed_point_functions/distributed_point_functions/evaluate_prg_hwy.o", + "./clang_x64_v8_arm64/obj/v8/torque_generated_initializers/js-to-wasm-tq-csa.o", + "./clang_x64_v8_arm64/obj/v8/torque_generated_initializers/wasm-to-js-tq-csa.o", + "./clang_x86_v8_arm/obj/v8/torque_generated_initializers/js-to-wasm-tq-csa.o", + "./clang_x86_v8_arm/obj/v8/torque_generated_initializers/wasm-to-js-tq-csa.o", + "./obj/chrome/browser/ash/ash/autotest_private_api.o", + "./obj/chrome/browser/ash/ash/chrome_browser_main_parts_ash.o", + "./obj/chrome/browser/browser/browser_prefs.o", + "./obj/chrome/browser/browser/chrome_browser_interface_binders.o", + "./obj/chrome/browser/ui/ash/holding_space/browser_tests/holding_space_ui_browsertest.o", + "./obj/chrome/test/browser_tests/browser_non_client_frame_view_chromeos_browsertest.o", + "./obj/chrome/test/browser_tests/chrome_shelf_controller_browsertest.o", + "./obj/chrome/test/browser_tests/device_local_account_browsertest.o", + "./obj/chrome/test/browser_tests/file_manager_browsertest_base.o", + "./obj/chrome/test/browser_tests/remote_apps_manager_browsertest.o", + "./obj/v8/torque_generated_initializers/js-to-wasm-tq-csa.o", + "./obj/v8/torque_generated_initializers/wasm-to-js-tq-csa.o", + ], + "remote": False, + } + if reproxy.enabled(ctx): + rule["handler"] = "strip_rewrapper" + step_config["rules"].insert(0, rule) + return step_config + +def __step_config(ctx, step_config): + config.check(ctx) + step_config["platforms"] = { + "default": { + "OSFamily": "Linux", + "container-image": "docker://gcr.io/chops-public-images-prod/rbe/siso-chromium/linux@sha256:912808c295e578ccde53b0685bcd0d56c15d7a03e819dcce70694bfe3fdab35e", + "label:action_default": "1", + }, + "large": { + "OSFamily": "Linux", + "container-image": "docker://gcr.io/chops-public-images-prod/rbe/siso-chromium/linux@sha256:912808c295e578ccde53b0685bcd0d56c15d7a03e819dcce70694bfe3fdab35e", + # As of Jul 2023, the action_large pool uses n2-highmem-8 with 200GB of pd-ssd. + # The pool is intended for the following actions. + # - slow actions that can benefit from multi-cores and/or faster disk I/O. e.g. link, mojo, generate bindings etc. + # - actions that fail for OOM. + "label:action_large": "1", + }, + } + + step_config = __disable_remote_b289968566(ctx, step_config) + + if android.enabled(ctx): + step_config = android.step_config(ctx, step_config) + + step_config = nacl.step_config(ctx, step_config) + step_config = nasm.step_config(ctx, step_config) + step_config = proto.step_config(ctx, step_config) + step_config = mojo.step_config(ctx, step_config) + step_config = clang.step_config(ctx, step_config) + + if reproxy.enabled(ctx): + step_config = __disable_remote_b281663988(step_config) + step_config = reproxy.step_config(ctx, step_config) + + return step_config + +chromium = module( + "chromium", + step_config = __step_config, + filegroups = __filegroups, + handlers = __handlers, +) diff --git a/build/config/siso/mac.star b/build/config/siso/mac.star new file mode 100644 index 0000000..d03440e --- /dev/null +++ b/build/config/siso/mac.star @@ -0,0 +1,32 @@ +# -*- bazel-starlark -*- +# Copyright 2023 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. +"""Siso configuration for macOS.""" + +load("@builtin//struct.star", "module") +load("./clang_mac.star", "clang") +load("./config.star", "config") +load("./reproxy.star", "reproxy") + +__filegroups = {} +__filegroups.update(clang.filegroups) +__handlers = {} +__handlers.update(clang.handlers) +__handlers.update(reproxy.handlers) + +def __step_config(ctx, step_config): + config.check(ctx) + step_config["platforms"] = {} + + step_config = clang.step_config(ctx, step_config) + if reproxy.enabled(ctx): + step_config = reproxy.step_config(ctx, step_config) + return step_config + +chromium = module( + "chromium", + step_config = __step_config, + filegroups = __filegroups, + handlers = __handlers, +) diff --git a/build/config/siso/main.star b/build/config/siso/main.star new file mode 100644 index 0000000..3928f3c --- /dev/null +++ b/build/config/siso/main.star @@ -0,0 +1,63 @@ +# -*- bazel-starlark -*- +# Copyright 2023 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. +"""Siso configuration main entry.""" + +load("@builtin//encoding.star", "json") +load("@builtin//runtime.star", "runtime") +load("@builtin//struct.star", "module") +load("./blink_all.star", "blink_all") +load("./linux.star", chromium_linux = "chromium") +load("./mac.star", chromium_mac = "chromium") +load("./simple.star", "simple") +load("./windows.star", chromium_windows = "chromium") + +def init(ctx): + print("runtime: os:%s arch:%s run:%d" % ( + runtime.os, + runtime.arch, + runtime.num_cpu, + )) + host = { + "linux": chromium_linux, + "darwin": chromium_mac, + "windows": chromium_windows, + }[runtime.os] + step_config = { + "platforms": {}, + "input_deps": {}, + "rules": [], + } + step_config = host.step_config(ctx, step_config) + step_config = simple.step_config(ctx, step_config) + step_config = blink_all.step_config(ctx, step_config) + + # Python actions may use an absolute path at the first argument. + # e.g. C:/src/depot_tools/bootstrap-2@3_8_10_chromium_26_bin/python3/bin/python3.exe + # It needs to set `pyhton3` or `python3.exe` be replaced with `python3.exe` for remote execution. + for rule in step_config["rules"]: + if rule["name"].startswith("clang-coverage"): + # clang_code_coverage_wrapper.run() strips the python wrapper. + # So it shouldn't set `remote_command: python3`. + continue + arg0 = rule.get("command_prefix", "").split(" ")[0].strip("\"") + if arg0 in ["python3", "python3.exe"]: + rule["remote_command"] = arg0 + + filegroups = {} + filegroups.update(blink_all.filegroups) + filegroups.update(host.filegroups) + filegroups.update(simple.filegroups) + + handlers = {} + handlers.update(blink_all.handlers) + handlers.update(host.handlers) + handlers.update(simple.handlers) + + return module( + "config", + step_config = json.encode(step_config), + filegroups = filegroups, + handlers = handlers, + ) diff --git a/build/config/siso/mojo.star b/build/config/siso/mojo.star new file mode 100644 index 0000000..de8150f --- /dev/null +++ b/build/config/siso/mojo.star @@ -0,0 +1,170 @@ +# -*- bazel-starlark -*- +# Copyright 2023 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. +"""Siso configuration for mojo.""" + +load("@builtin//struct.star", "module") + +__filegroups = {} + +__handlers = {} + +def __step_config(ctx, step_config): + # mojom_bindings_generator.py will run faster on n2-highmem-8 than + # n2-custom-2-3840 + # e.g. + # n2-highmem-8: exec: 880.202978ms + # n2-custom-2-3840: exec: 2.42808488s + platform_ref = "large" + step_config["rules"].extend([ + { + "name": "mojo/mojom_bindings_generator", + "command_prefix": "python3 ../../mojo/public/tools/bindings/mojom_bindings_generator.py", + "inputs": [ + "mojo/public/tools/bindings/mojom_bindings_generator.py", + ], + "indirect_inputs": { + "includes": [ + "*.js", + "*.mojom", + "*.mojom-module", + "*.test-mojom", + "*.test-mojom-module", + "*.zip", + ], + }, + "exclude_input_patterns": [ + "*.stamp", + ], + # TODO(crbug.com/1437820): unspecified outputs of mojom_bindings_generator.py + "outputs_map": { + "./gen/components/aggregation_service/aggregation_service.mojom.js": { + "outputs": [ + "./gen/mojom-webui/components/aggregation_service/aggregation_service.mojom-webui.js", + ], + }, + "./gen/components/attribution_reporting/eligibility_error.mojom.js": { + "outputs": [ + "./gen/mojom-webui/components/attribution_reporting/eligibility_error.mojom-webui.js", + "./gen/mojom-webui/components/attribution_reporting/registration_eligibility.mojom-webui.js", + "./gen/mojom-webui/components/attribution_reporting/source_registration_error.mojom-webui.js", + "./gen/mojom-webui/components/attribution_reporting/trigger_registration_error.mojom-webui.js", + ], + }, + "./gen/components/attribution_reporting/registration.mojom.js": { + "outputs": [ + "./gen/mojom-webui/components/attribution_reporting/registration.mojom-webui.js", + ], + }, + "./gen/media/capture/mojom/image_capture.mojom.js": { + "outputs": [ + "./gen/mojom-webui/media/capture/mojom/image_capture.mojom-webui.js", + ], + }, + "./gen/services/device/public/mojom/usb_device.mojom.js": { + "outputs": [ + "./gen/mojom-webui/services/device/public/mojom/usb_device.mojom-webui.js", + "./gen/mojom-webui/services/device/public/mojom/usb_enumeration_options.mojom-webui.js", + "./gen/mojom-webui/services/device/public/mojom/usb_manager.mojom-webui.js", + "./gen/mojom-webui/services/device/public/mojom/usb_manager_client.mojom-webui.js", + ], + }, + "./gen/services/media_session/public/mojom/audio_focus.mojom.js": { + "outputs": [ + "./gen/mojom-webui/services/media_session/public/mojom/audio_focus.mojom-webui.js", + "./gen/mojom-webui/services/media_session/public/mojom/constants.mojom-webui.js", + "./gen/mojom-webui/services/media_session/public/mojom/media_controller.mojom-webui.js", + "./gen/mojom-webui/services/media_session/public/mojom/media_session.mojom-webui.js", + ], + }, + "./gen/services/network/public/mojom/attribution.mojom.js": { + "outputs": [ + "./gen/mojom-webui/services/network/public/mojom/attribution.mojom-webui.js", + ], + }, + "./gen/services/network/public/mojom/schemeful_site.mojom.js": { + "outputs": [ + "./gen/mojom-webui/services/network/public/mojom/schemeful_site.mojom-webui.js", + ], + }, + "./gen/third_party/blink/public/mojom/quota/quota_manager_host.mojom.js": { + "outputs": [ + "./gen/mojom-webui/third_party/blink/public/mojom/quota/quota_manager_host.mojom-webui.js", + "./gen/mojom-webui/third_party/blink/public/mojom/quota/quota_types.mojom-webui.js", + ], + }, + "./gen/third_party/blink/public/mojom/storage_key/ancestor_chain_bit.mojom.js": { + "outputs": [ + "./gen/mojom-webui/third_party/blink/public/mojom/storage_key/ancestor_chain_bit.mojom-webui.js", + "./gen/mojom-webui/third_party/blink/public/mojom/storage_key/storage_key.mojom-webui.js", + ], + }, + "./gen/ui/base/mojom/ui_base_types.mojom.js": { + "outputs": [ + "./gen/mojom-webui/ui/base/mojom/ui_base_types.mojom-webui.js", + "./gen/mojom-webui/ui/base/mojom/window_open_disposition.mojom-webui.js", + ], + }, + "./gen/ui/gfx/image/mojom/image.mojom.js": { + "outputs": [ + "./gen/mojom-webui/ui/gfx/image/mojom/image.mojom-webui.js", + ], + }, + }, + "restat": True, + "remote": True, + "timeout": "2m", + "output_local": True, + "platform_ref": platform_ref, + }, + { + "name": "mojo/mojom_parser", + "command_prefix": "python3 ../../mojo/public/tools/mojom/mojom_parser.py", + "indirect_inputs": { + "includes": [ + "*.build_metadata", + "*.mojom", + "*.mojom-module", + "*.test-mojom", + "*.test-mojom-module", + ], + }, + "exclude_input_patterns": [ + "*.stamp", + ], + # TODO(b/288523418): missing inputs for mojom_parser? + "outputs_map": { + "./gen/mojo/public/interfaces/bindings/tests/sample_import2.mojom-module": { + "inputs": [ + "./gen/mojo/public/interfaces/bindings/tests/test_mojom_import_wrapper.build_metadata", + "./gen/mojo/public/interfaces/bindings/tests/test_mojom_import_wrapper_wrapper.build_metadata", + ], + }, + "./gen/mojo/public/interfaces/bindings/tests/math_calculator.mojom-module": { + "inputs": [ + "./gen/mojo/public/interfaces/bindings/tests/test_mojom_import_wrapper.build_metadata", + "./gen/mojo/public/interfaces/bindings/tests/test_mojom_import_wrapper_wrapper.build_metadata", + ], + }, + "./gen/mojo/public/interfaces/bindings/tests/test_associated_interfaces.mojom-module": { + "inputs": [ + "./gen/mojo/public/interfaces/bindings/tests/test_mojom_import_wrapper.build_metadata", + "./gen/mojo/public/interfaces/bindings/tests/test_mojom_import_wrapper_wrapper.build_metadata", + ], + }, + }, + "remote": True, + "input_root_absolute_path": True, + "output_local": True, + "platform_ref": platform_ref, + }, + ]) + return step_config + +mojo = module( + "mojo", + step_config = __step_config, + filegroups = __filegroups, + handlers = __handlers, +) diff --git a/build/config/siso/nacl_linux.star b/build/config/siso/nacl_linux.star new file mode 100644 index 0000000..12a56eb --- /dev/null +++ b/build/config/siso/nacl_linux.star @@ -0,0 +1,215 @@ +# -*- bazel-starlark -*- +# Copyright 2023 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. +"""Siso configuration for nacl/linux.""" + +load("@builtin//struct.star", "module") + +__filegroups = { + "native_client/toolchain/linux_x86/pnacl_newlib/bin/pydir:pydir": { + "type": "glob", + "includes": ["*.py"], + }, + "native_client/toolchain/linux_x86/pnacl_newlib/lib:libllvm": { + "type": "glob", + "includes": ["libLLVM*.so"], + }, + "native_client/toolchain/linux_x86/saigo_newlib/bin:clang": { + "type": "glob", + "includes": ["clang-*"], + }, + "native_client/toolchain/linux_x86/saigo_newlib/lib:libso": { + "type": "glob", + "includes": ["*.so*"], + }, + "native_client/toolchain/linux_x86/nacl_x86_glibc/lib/gcc/x86_64-nacl:crtbegin": { + "type": "glob", + "includes": ["crtbegin.o"], + }, + "native_client/toolchain/linux_x86/nacl_x86_glibc/libexec/gcc/x86_64-nacl:ccbackend": { + "type": "glob", + "includes": ["cc1", "cc1plus", "collect2"], + }, + # for precomputed subtrees + "native_client/toolchain/linux_x86/nacl_x86_glibc:header-files": { + "type": "glob", + "includes": ["*.h", "*/include/c++/*/*", "*/include/c++/*/*/*"], + }, + "native_client/toolchain/linux_x86/pnacl_newlib:header-files": { + "type": "glob", + "includes": ["*.h", "*/include/c++/*/*", "*/include/c++/*/*/*"], + }, + "native_client/toolchain/linux_x86/saigo_newlib:header-files": { + "type": "glob", + "includes": ["*.h", "*/include/c++/*/*", "*/include/c++/*/*/*"], + }, +} + +__handlers = {} + +def __step_config(ctx, step_config): + step_config["rules"].extend([ + { + "name": "nacl_linux/pnacl-clang++", + "action": "newlib_pnacl.*_cxx", + "command_prefix": "../../native_client/toolchain/linux_x86/pnacl_newlib/bin/pnacl-clang++", + "inputs": [ + "native_client/toolchain/linux_x86/pnacl_newlib/bin/pnacl-clang++", + ], + "remote": True, + "input_root_absolute_path": True, + "timeout": "2m", + }, + { + "name": "nacl_linux/pnacl-clang", + "action": "newlib_pnacl.*_cc", + "command_prefix": "../../native_client/toolchain/linux_x86/pnacl_newlib/bin/pnacl-clang", + "inputs": [ + "native_client/toolchain/linux_x86/pnacl_newlib/bin/pnacl-clang", + ], + "remote": True, + "input_root_absolute_path": True, + "timeout": "2m", + }, + { + "name": "nacl_linux/glibc/x86_64-nacl-gcc", + "action": "glibc_x64_cc", + "inputs": [ + "native_client/toolchain/linux_x86/nacl_x86_glibc/bin/x86_64-nacl-gcc", + ], + # ELF-32 doesn't work on gVisor, + # so will local-fallback if gVisor is used. + # TODO(b/278485912): remote=True for trusted instance. + "remote": False, + "input_root_absolute_path": True, + }, + { + "name": "nacl_linux/glibc/x86_64-nacl-g++", + "action": "glibc_x64_cxx", + "inputs": [ + "native_client/toolchain/linux_x86/nacl_x86_glibc/bin/x86_64-nacl-g++", + ], + # ELF-32 doesn't work on gVisor, + # so will local-fallback if gVisor is used. + # TODO(b/278485912): remote=True for trusted instance. + "remote": False, + "input_root_absolute_path": True, + }, + { + "name": "nacl_linux/pnacl_newlib/x86_64-nacl-clang++", + "action": "clang_newlib_x64_cxx", + "inputs": [ + "native_client/toolchain/linux_x86/pnacl_newlib/bin/x86_64-nacl-clang++", + "native_client/toolchain/linux_x86/pnacl_newlib/x86_64-nacl/bin/ld", + ], + "remote": True, + "input_root_absolute_path": True, + "timeout": "2m", + }, + { + "name": "nacl_linux/pnacl_newlib/x86_64-nacl-clang", + "action": "clang_newlib_x64_cc", + "inputs": [ + "native_client/toolchain/linux_x86/pnacl_newlib/bin/x86_64-nacl-clang", + "native_client/toolchain/linux_x86/pnacl_newlib/x86_64-nacl/bin/ld", + ], + "remote": True, + "input_root_absolute_path": True, + "timeout": "2m", + }, + { + "name": "nacl_linux/saigo_newlib/x86_64-nacl-clang++", + "action": "irt_x64_cxx", + "command_prefix": "../../native_client/toolchain/linux_x86/saigo_newlib/bin/x86_64-nacl-clang++", + "inputs": [ + "native_client/toolchain/linux_x86/saigo_newlib/bin/x86_64-nacl-clang++", + ], + "remote": True, + "input_root_absolute_path": True, + "timeout": "2m", + }, + { + "name": "nacl_linux/saigo_newlib/x86_64-nacl-clang", + "action": "irt_x64_cc", + "command_prefix": "../../native_client/toolchain/linux_x86/saigo_newlib/bin/x86_64-nacl-clang", + "inputs": [ + "native_client/toolchain/linux_x86/saigo_newlib/bin/x86_64-nacl-clang", + ], + "remote": True, + "input_root_absolute_path": True, + "timeout": "2m", + }, + ]) + + step_config["input_deps"].update({ + "native_client/toolchain/linux_x86/nacl_x86_glibc:headers": [ + "native_client/toolchain/linux_x86/nacl_x86_glibc/bin/x86_64-nacl-gcc", + "native_client/toolchain/linux_x86/nacl_x86_glibc/bin/x86_64-nacl-g++", + "native_client/toolchain/linux_x86/nacl_x86_glibc:header-files", + ], + "native_client/toolchain/linux_x86/pnacl_newlib:headers": [ + "native_client/toolchain/linux_x86/pnacl_newlib/bin/pnacl-clang", + "native_client/toolchain/linux_x86/pnacl_newlib/bin/pnacl-clang++", + "native_client/toolchain/linux_x86/pnacl_newlib/bin/x86_64-nacl-clang", + "native_client/toolchain/linux_x86/pnacl_newlib/bin/x86_64-nacl-clang++", + "native_client/toolchain/linux_x86/pnacl_newlib:header-files", + ], + "native_client/toolchain/linux_x86/saigo_newlib:headers": [ + "native_client/toolchain/linux_x86/saigo_newlib/bin/x86_64-nacl-clang", + "native_client/toolchain/linux_x86/saigo_newlib/bin/x86_64-nacl-clang++", + "native_client/toolchain/linux_x86/saigo_newlib:header-files", + ], + "native_client/toolchain/linux_x86/pnacl_newlib/bin/pnacl-clang": [ + "native_client/toolchain/linux_x86/pnacl_newlib/bin/clang", + "native_client/toolchain/linux_x86/pnacl_newlib/bin/driver.conf", + "native_client/toolchain/linux_x86/pnacl_newlib/bin/pnacl-llc", + "native_client/toolchain/linux_x86/pnacl_newlib/bin/pydir:pydir", + "native_client/toolchain/linux_x86/pnacl_newlib/lib:libllvm", + "native_client/toolchain/linux_x86/pnacl_newlib/x86_64-nacl/bin/ld", + ], + "native_client/toolchain/linux_x86/pnacl_newlib/bin/pnacl-clang++": [ + "native_client/toolchain/linux_x86/pnacl_newlib/bin/clang", + "native_client/toolchain/linux_x86/pnacl_newlib/bin/driver.conf", + "native_client/toolchain/linux_x86/pnacl_newlib/bin/pnacl-llc", + "native_client/toolchain/linux_x86/pnacl_newlib/bin/pydir:pydir", + "native_client/toolchain/linux_x86/pnacl_newlib/lib:libllvm", + "native_client/toolchain/linux_x86/pnacl_newlib/x86_64-nacl/bin/ld", + ], + "native_client/toolchain/linux_x86/pnacl_newlib/bin/x86_64-nacl-clang": [ + "native_client/toolchain/linux_x86/pnacl_newlib/lib:libllvm", + ], + "native_client/toolchain/linux_x86/pnacl_newlib/bin/x86_64-nacl-clang++": [ + "native_client/toolchain/linux_x86/pnacl_newlib/lib:libllvm", + ], + "native_client/toolchain/linux_x86/saigo_newlib/bin/x86_64-nacl-clang": [ + "native_client/toolchain/linux_x86/saigo_newlib/bin:clang", + "native_client/toolchain/linux_x86/saigo_newlib/lib:libso", + "native_client/toolchain/linux_x86/saigo_newlib/x86_64-nacl/bin/ld", + ], + "native_client/toolchain/linux_x86/saigo_newlib/bin/x86_64-nacl-clang++": [ + "native_client/toolchain/linux_x86/saigo_newlib/bin:clang", + "native_client/toolchain/linux_x86/saigo_newlib/lib:libso", + "native_client/toolchain/linux_x86/saigo_newlib/x86_64-nacl/bin/ld", + ], + "native_client/toolchain/linux_x86/nacl_x86_glibc/bin/x86_64-nacl-gcc": [ + "native_client/toolchain/linux_x86/nacl_x86_glibc/bin/x86_64-nacl-as", + "native_client/toolchain/linux_x86/nacl_x86_glibc/lib/gcc/x86_64-nacl:crtbegin", + "native_client/toolchain/linux_x86/nacl_x86_glibc/libexec/gcc/x86_64-nacl:ccbackend", + "native_client/toolchain/linux_x86/nacl_x86_glibc/x86_64-nacl/bin/as", + ], + "native_client/toolchain/linux_x86/nacl_x86_glibc/bin/x86_64-nacl-g++": [ + "native_client/toolchain/linux_x86/nacl_x86_glibc/bin/x86_64-nacl-as", + "native_client/toolchain/linux_x86/nacl_x86_glibc/lib/gcc/x86_64-nacl:crtbegin", + "native_client/toolchain/linux_x86/nacl_x86_glibc/libexec/gcc/x86_64-nacl:ccbackend", + "native_client/toolchain/linux_x86/nacl_x86_glibc/x86_64-nacl/bin/as", + ], + }) + return step_config + +nacl = module( + "nacl", + step_config = __step_config, + filegroups = __filegroups, + handlers = __handlers, +) diff --git a/build/config/siso/nasm_linux.star b/build/config/siso/nasm_linux.star new file mode 100644 index 0000000..55f2778 --- /dev/null +++ b/build/config/siso/nasm_linux.star @@ -0,0 +1,55 @@ +# -*- bazel-starlark -*- +# Copyright 2023 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. +"""Siso configuration for nasm/linux.""" + +load("@builtin//path.star", "path") +load("@builtin//struct.star", "module") +load("./config.star", "config") +load("./nasm_scandeps.star", "nasm_scandeps") + +__filegroups = { +} + +def __nasm(ctx, cmd): + inputs = nasm_scandeps.scandeps(ctx, cmd) + ctx.actions.fix(inputs = cmd.inputs + inputs) + +__handlers = { + "nasm": __nasm, +} + +def __step_config(ctx, step_config): + remote_run = True # Turn this to False when you do file access trace. + rules = [] + for toolchain in ["", "clang_x64"]: + nasm_path = path.join(toolchain, "nasm") + rules.append({ + "name": path.join("nasm", toolchain), + "command_prefix": "python3 ../../build/gn_run_binary.py " + nasm_path, + "inputs": [ + "build/gn_run_binary.py", + ctx.fs.canonpath("./" + nasm_path), + ], + "indirect_inputs": { + "includes": ["*.asm"], + }, + "exclude_input_patterns": [ + "*.stamp", + ], + "handler": "nasm", + "remote": remote_run, + # chromeos generates default.profraw? + "ignore_extra_output_pattern": ".*default.profraw", + "timeout": "2m", + }) + step_config["rules"].extend(rules) + return step_config + +nasm = module( + "nasm", + step_config = __step_config, + filegroups = __filegroups, + handlers = __handlers, +) diff --git a/build/config/siso/nasm_scandeps.star b/build/config/siso/nasm_scandeps.star new file mode 100644 index 0000000..e783a42 --- /dev/null +++ b/build/config/siso/nasm_scandeps.star @@ -0,0 +1,88 @@ +# -*- bazel-starlark -*- +# Copyright 2023 The Chromium Authors +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. +"""Siso configuration for nasm scandeps. + +- https://chromium.googlesource.com/chromium/deps/nasm + +gn +- https://chromium.googlesource.com/chromium/deps/nasm/+/refs/heads/main/nasm_assemble.gni + +sample command line: + command = python3 ../../build/gn_run_binary.py nasm -DPIC -felf64 -P ../../third_party/dav1d/config/linux/x64/config.asm -I../../third_party/dav1d/libdav1d/src// -I../../third_party/dav1d/config/linux/x64/ -I./ -I../../ -Igen/ -DSTACK_ALIGNMENT=16 -MD obj/third_party/dav1d/dav1d_asm/${source_name_part}.o.d -o obj/third_party/dav1d/dav1d_asm/${source_name_part}.o ${in} + +""" + +load("@builtin//struct.star", "module") +load("@builtin//path.star", "path") + +def __scan_input(ctx, src, inc_dirs): + inputs = [src] + curdir = path.dir(src) + include_directive_len = len("%include \"") + for line in str(ctx.fs.read(src)).split("\n"): + if not line.startswith("%include \""): + continue + fname = line[include_directive_len:] + i = fname.index("\"") + fname = fname[:i] + for d in [curdir] + inc_dirs: + pathname = path.join(d, fname) + if ctx.fs.exists(pathname): + inputs.extend(__scan_input(ctx, pathname, inc_dirs)) + break + return inputs + +def __scandeps(ctx, cmd): + nasm_args = [] + for i, arg in enumerate(cmd.args): + if path.base(arg) == "nasm": + nasm_args = cmd.args[i + 1:] + break + inc_dirs = [] + skip = False + flag = "" + sources = [] + for i, arg in enumerate(nasm_args): + if flag == "-I": + inc_dirs.append(ctx.fs.canonpath(arg)) + flag = "" + continue + elif flag == "-P": + sources.append(ctx.fs.canonpath(arg)) + flag = "" + continue + elif skip: + skip = False + continue + elif arg == "-o": + skip = True + continue + elif arg == "-MD": + skip = True + continue + elif arg == "-I": + flag = arg + continue + elif arg == "-P": + flag = arg + continue + elif arg.startswith("-I"): + inc_dirs.append(ctx.fs.canonpath(arg[2:])) + continue + elif arg.startswith("-P"): + sources.append(ctx.fs.canonpath(arg[2:])) + continue + elif arg.startswith("-"): + continue + sources.append(ctx.fs.canonpath(arg)) + inputs = [] + for src in sources: + inputs.extend(__scan_input(ctx, src, inc_dirs)) + return inputs + +nasm_scandeps = module( + "nasm_scandeps", + scandeps = __scandeps, +) diff --git a/build/config/siso/proto_linux.star b/build/config/siso/proto_linux.star new file mode 100644 index 0000000..67bc809 --- /dev/null +++ b/build/config/siso/proto_linux.star @@ -0,0 +1,63 @@ +# -*- bazel-starlark -*- +# Copyright 2023 The Chromium Authors +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. +"""Siso configuration for proto/linux.""" + +load("@builtin//path.star", "path") +load("@builtin//struct.star", "module") +load("./config.star", "config") +load("./protoc_wrapper.star", "protoc_wrapper") + +__filegroups = { + "third_party/protobuf/python/google:pyprotolib": { + "type": "glob", + "includes": ["*.py"], + }, +} + +def __protoc_wrapper(ctx, cmd): + inputs = protoc_wrapper.scandeps(ctx, cmd.args) + ctx.actions.fix(inputs = cmd.expanded_inputs() + inputs) + +__handlers = { + "protoc_wrapper": __protoc_wrapper, +} + +def __step_config(ctx, step_config): + remote_run = True # Turn this to False when you do file access trace. + step_config["input_deps"].update({ + "third_party/dom_distiller_js/protoc_plugins/util/plugin_protos.py": [ + "third_party/protobuf/python/google:pyprotolib", + ], + }) + step_config["rules"].extend([ + { + "name": "proto_linux/protoc_wrapper", + "command_prefix": "python3 ../../tools/protoc_wrapper/protoc_wrapper.py", + "indirect_inputs": { + "includes": ["*.proto"], + }, + "exclude_input_patterns": [ + "*.o", + "*.a", + "*.h", + "*.cc", + # "*_pb2.py", + ], + "handler": "protoc_wrapper", + "remote": remote_run, + # chromeos generates default.profraw? + "ignore_extra_output_pattern": ".*default.profraw", + # "deps": "depfile", + "output_local": True, + }, + ]) + return step_config + +proto = module( + "proto", + step_config = __step_config, + filegroups = __filegroups, + handlers = __handlers, +) diff --git a/build/config/siso/protoc_wrapper.star b/build/config/siso/protoc_wrapper.star new file mode 100644 index 0000000..ac13220 --- /dev/null +++ b/build/config/siso/protoc_wrapper.star @@ -0,0 +1,112 @@ +# -*- bazel-starlark -*- +# Copyright 2023 The Chromium Authors +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. +"""Siso configuration for protoc_wrapper and protoc_java. + +scripts: +- https://chromium.googlesource.com/chromium/src/+/refs/heads/main/tools/protoc_wrapper/protoc_wrapper.py +- https://chromium.googlesource.com/chromium/src/+/refs/heads/main/build/protoc_java.py + +gn: +- https://chromium.googlesource.com/chromium/src/+/refs/heads/main/third_party/protobuf/proto_library.gni +- https://chromium.googlesource.com/chromium/src/+/refs/heads/main/build/config/android/rules.gni + +sample command line: + command = python3 ../../tools/protoc_wrapper/protoc_wrapper.py test.proto --protoc ./protoc --proto-in-dir ../../base/test --descriptor-set-out gen/base/test/test_proto.descriptor --descriptor-set-dependency-file gen/base/test/test_proto.descriptor.d + + command = python3 ../../build/protoc_java.py --depfile gen/android_webview/proto/aw_variations_seed_proto_java__protoc_java.d --protoc ../../third_party/android_protoc/protoc --proto-path ../../android_webview/proto --srcjar gen/android_webview/proto/aw_variations_seed_proto_java__protoc_java.srcjar ../../android_webview/proto/aw_variations_seed.proto +""" + +load("@builtin//struct.star", "module") +load("@builtin//path.star", "path") + +def __protoc_scandeps(ctx, proto, proto_paths = []): + inputs = [proto] + for line in str(ctx.fs.read(proto)).split("\n"): + if line.startswith("import "): + line = line.removeprefix("import ").strip() + line = line.removeprefix("public ").strip() + line = line.removeprefix("\"") + i = line.find("\"") + name = line[:i] + for d in proto_paths: + fname = path.join(d, name) + if ctx.fs.exists(fname): + inputs.extend(__protoc_scandeps(ctx, fname, proto_paths)) + break + return inputs + +def __scandeps(ctx, args): + protoc_wrapper_args = [] + for i, arg in enumerate(args): + if path.base(arg) in ["protoc_wrapper.py", "protoc_java.py"]: + protoc_wrapper_args = args[i + 1:] + break + inputs = [] + protos = [] + proto_in_dir = ctx.fs.canonpath(".") + inc_dirs = [] + flag = "" + flags = ( + "--proto-in-dir", + "--import-dir", + "--protoc", + "--cc-out-dir", + "--py-out-dir", + "--js-out-dir", + "--plugin-out-dir", + "--plugin", + "--plugin-options", + "--cc-options", + "--include", + "--descriptor-set-out", + "--descriptor-set-dependency-file", + "--depfile", # protoc_java + "--protoc", # protoc_java + "--proto-path", # protoc_java + "--srcjar", # protoc_java + ) + for i, arg in enumerate(protoc_wrapper_args): + if flag == "--proto-in-dir": + proto_in_dir = ctx.fs.canonpath(arg) + flag = "" + continue + elif flag == "--import-dir": + inc_dirs.append(ctx.fs.canonpath(arg)) + flag = "" + continue + elif flag == "--plugin": + inputs.append(ctx.fs.canonpath(arg)) + flag = "" + continue + elif flag == "--protoc": + inputs.append(ctx.fs.canonpath(arg)) + flag = "" + continue + elif flag == "--proto-path": + inc_dirs = [ctx.fs.canonpath(arg)] + inc_dirs + flag = "" + continue + elif flag != "": + flag = "" + continue + elif arg in flags: + flag = arg + continue + elif arg.startswith("--import-dir="): + inc_dirs.append(ctx.fs.canonpath(arg.removeprefix("--import-dir="))) + continue + elif arg.startswith("-"): + continue + protos.append(arg) + proto_paths = [proto_in_dir] + inc_dirs + protos = [path.join(proto_in_dir, name) for name in protos] + for proto in protos: + inputs.extend(__protoc_scandeps(ctx, proto, proto_paths = proto_paths)) + return inputs + +protoc_wrapper = module( + "protoc_wrapper", + scandeps = __scandeps, +) diff --git a/build/config/siso/reproxy.star b/build/config/siso/reproxy.star new file mode 100644 index 0000000..8a351f7 --- /dev/null +++ b/build/config/siso/reproxy.star @@ -0,0 +1,264 @@ +# -*- bazel-starlark -*- +# Copyright 2023 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. +"""Siso configuration for rewriting remote calls into reproxy config.""" + +load("@builtin//encoding.star", "json") +load("@builtin//lib/gn.star", "gn") +load("@builtin//struct.star", "module") +load("./rewrapper_cfg.star", "rewrapper_cfg") +load("./clang_code_coverage_wrapper.star", "clang_code_coverage_wrapper") + +__filegroups = {} + +def __parse_rewrapper_cmdline(ctx, cmd): + if not "rewrapper" in cmd.args[0]: + return [], "", False + + # Example command: + # ../../buildtools/reclient/rewrapper + # -cfg=../../buildtools/reclient_cfgs/chromium-browser-clang/rewrapper_linux.cfg + # -exec_root=/path/to/your/chromium/src/ + # ../../third_party/llvm-build/Release+Asserts/bin/clang++ + # [rest of clang args] + # We don't need to care about: + # -exec_root: Siso already knows this. + wrapped_command_pos = -1 + cfg_file = None + for i, arg in enumerate(cmd.args): + if i == 0: + continue + if arg.startswith("-cfg="): + cfg_file = ctx.fs.canonpath(arg.removeprefix("-cfg=")) + continue + if not arg.startswith("-"): + wrapped_command_pos = i + break + if wrapped_command_pos < 1: + fail("couldn't find first non-arg passed to rewrapper for %s" % str(cmd.args)) + return cmd.args[wrapped_command_pos:], cfg_file, True + +def __rewrite_rewrapper(ctx, cmd): + args, cfg_file, wrapped = __parse_rewrapper_cmdline(ctx, cmd) + if not wrapped: + return + if not cfg_file: + fail("couldn't find rewrapper cfg file in %s" % str(cmd.args)) + ctx.actions.fix( + args = args, + reproxy_config = json.encode(rewrapper_cfg.parse(ctx, cfg_file)), + ) + +def __strip_rewrapper(ctx, cmd): + args, _, wrapped = __parse_rewrapper_cmdline(ctx, cmd) + if not wrapped: + return + ctx.actions.fix(args = args) + +# TODO(b/278225415): change gn so this wrapper (and by extension this handler) becomes unnecessary. +def __rewrite_clang_code_coverage_wrapper(ctx, cmd): + # Example command: + # python3 + # ../../build/toolchain/clang_code_coverage_wrapper.py + # --target-os=... + # --files_to_instrument=... + # ../../buildtools/reclient/rewrapper + # -cfg=../../buildtools/reclient_cfgs/chromium-browser-clang/rewrapper_linux.cfg + # -exec_root=/path/to/your/chromium/src/ + # ../../third_party/llvm-build/Release+Asserts/bin/clang++ + # [rest of clang args] + # We don't need to care about: + # most args to clang_code_coverage_wrapper (need --files_to_instrument as tool_input) + # -exec_root: Siso already knows this. + rewrapper_pos = -1 + wrapped_command_pos = -1 + cfg_file = None + for i, arg in enumerate(cmd.args): + if i < 2: + continue + if rewrapper_pos == -1 and not arg.startswith("-"): + rewrapper_pos = i + continue + if rewrapper_pos > 0 and arg.startswith("-cfg="): + cfg_file = ctx.fs.canonpath(arg.removeprefix("-cfg=")) + continue + if rewrapper_pos > 0 and not arg.startswith("-"): + wrapped_command_pos = i + break + if rewrapper_pos < 1: + fail("couldn't find rewrapper in %s" % str(cmd.args)) + if wrapped_command_pos < 1: + fail("couldn't find first non-arg passed to rewrapper for %s" % str(cmd.args)) + if not cfg_file: + fail("couldn't find rewrapper cfg file in %s" % str(cmd.args)) + coverage_wrapper_command = cmd.args[:rewrapper_pos] + cmd.args[wrapped_command_pos:] + clang_command = clang_code_coverage_wrapper.run(ctx, list(coverage_wrapper_command)) + + ctx.actions.fix( + args = clang_command, + reproxy_config = json.encode(rewrapper_cfg.parse(ctx, cfg_file)), + ) + +def __rewrite_action_remote_py(ctx, cmd): + # Example command: + # python3 + # ../../build/util/action_remote.py + # ../../buildtools/reclient/rewrapper + # --custom_processor=mojom_parser + # --cfg=../../buildtools/reclient_cfgs/python/rewrapper_linux.cfg + # --exec_root=/path/to/your/chromium/src/ + # --input_list_paths=gen/gpu/ipc/common/surface_handle__parser__remote_inputs.rsp + # --output_list_paths=gen/gpu/ipc/common/surface_handle__parser__remote_outputs.rsp + # python3 + # ../../mojo/public/tools/mojom/mojom_parser.py + # [rest of mojo args] + # We don't need to care about: + # --exec_root: Siso already knows this. + # --custom_processor: Used by action_remote.py to apply mojo handling. + # --[input,output]_list_paths: We should always use mojo.star for Siso. + wrapped_command_pos = -1 + cfg_file = None + for i, arg in enumerate(cmd.args): + if i < 3: + continue + if arg.startswith("--cfg="): + cfg_file = ctx.fs.canonpath(arg.removeprefix("--cfg=")) + continue + if not arg.startswith("-"): + wrapped_command_pos = i + break + if wrapped_command_pos < 1: + fail("couldn't find action command in %s" % str(cmd.args)) + ctx.actions.fix( + args = cmd.args[wrapped_command_pos:], + reproxy_config = json.encode(rewrapper_cfg.parse(ctx, cfg_file)), + ) + +__handlers = { + "rewrite_rewrapper": __rewrite_rewrapper, + "strip_rewrapper": __strip_rewrapper, + "rewrite_clang_code_coverage_wrapper": __rewrite_clang_code_coverage_wrapper, + "rewrite_action_remote_py": __rewrite_action_remote_py, +} + +def __use_remoteexec(ctx): + if "args.gn" in ctx.metadata: + gn_args = gn.parse_args(ctx.metadata["args.gn"]) + if gn_args.get("use_remoteexec") == "true": + return True + return False + +def __step_config(ctx, step_config): + # New rules to convert commands calling rewrapper to use reproxy instead. + new_rules = [ + # mojo/mojom_bindings_generator will not always have rewrapper args. + # First add this rule for commands with rewrapper args. The native remote rule for non-rewrapper invocations is converted automatically below. + { + "name": "mojo/mojom_bindings_generator_rewrapper", + "action": "mojom_(.*_)?__generator", + "command_prefix": "python3 ../../build/util/action_remote.py ../../buildtools/reclient/rewrapper --cfg=", + "handler": "rewrite_action_remote_py", + }, + # Handle generic action_remote calls. + { + "name": "action_remote", + "command_prefix": "python3 ../../build/util/action_remote.py ../../buildtools/reclient/rewrapper", + "handler": "rewrite_action_remote_py", + }, + ] + + for rule in step_config["rules"]: + # mojo/mojom_parser will always have rewrapper config when use_remoteexec=true. + # Mutate the original step rule to rewrite rewrapper and convert its rewrapper config to reproxy config. + # Stop handling the rule so that it's not modified below. + # TODO(b/292838933): Implement mojom_parser processor in Starlark? + if rule["name"] == "mojo/mojom_parser": + rule.update({ + "command_prefix": "python3 ../../build/util/action_remote.py ../../buildtools/reclient/rewrapper --custom_processor=mojom_parser", + "handler": "rewrite_action_remote_py", + }) + new_rules.insert(0, rule) + continue + + # Replace nacl-clang/clang++ rules without command_prefix, because they will incorrectly match rewrapper. + # Replace the original step rule with one that only rewrites rewrapper and convert its rewrapper config to reproxy config. + if rule["name"].find("nacl-clang") >= 0 and not rule.get("command_prefix"): + new_rule = { + "name": rule["name"], + "action": rule["action"], + "handler": "rewrite_rewrapper", + } + new_rules.append(new_rule) + continue + + # clang will always have rewrapper config when use_remoteexec=true. + # Remove the native siso handling and replace with custom rewrapper-specific handling. + # All other rule values are not reused, instead use rewrapper config via handler. + if rule["name"].startswith("clang/") or rule["name"].startswith("clang-cl/"): + if not rule.get("action"): + fail("clang rule %s found without action" % rule["name"]) + new_rule = { + "name": rule["name"], + "action": rule["action"], + "handler": "rewrite_rewrapper", + } + new_rules.append(new_rule) + continue + + # clang-coverage will always have rewrapper config when use_remoteexec=true. + # Remove the native siso handling and replace with custom rewrapper-specific handling. + # All other rule values are not reused, instead use rewrapper config via handler. + # TODO(b/278225415): change gn so this wrapper (and by extension these rules) become unnecessary. + if rule["name"].startswith("clang-coverage"): + if rule["command_prefix"].find("../../build/toolchain/clang_code_coverage_wrapper.py") < 0: + fail("clang-coverage rule %s found without clang_code_coverage_wrapper.py in command_prefix" % rule["name"]) + new_rule = { + "name": rule["name"], + "command_prefix": rule["command_prefix"], + "handler": "rewrite_clang_code_coverage_wrapper", + } + + # Insert clang-coverage/ rules at the top. + # They are more specific than reproxy clang/ rules, therefore should not be placed after. + new_rules.insert(0, new_rule) + continue + + # Add non-remote rules as-is. + if not rule.get("remote"): + new_rules.append(rule) + continue + + # Finally handle remaining remote rules. It's assumed it is enough to only convert native remote config to reproxy config. + platform_ref = rule.get("platform_ref") + if platform_ref: + platform = step_config["platforms"].get(platform_ref) + if not platform: + fail("Rule %s uses undefined platform '%s'" % (rule["name"], platform_ref)) + else: + platform = step_config.get("platforms", {}).get("default") + if not platform: + fail("Rule %s did not set platform_ref but no default platform exists" % rule["name"]) + rule["reproxy_config"] = { + "platform": platform, + "labels": { + "type": "tool", + }, + "inputs": rule.get("inputs", []), + "canonicalize_working_dir": rule.get("canonicalize_dir", False), + "exec_strategy": "remote", + "exec_timeout": rule.get("timeout", "10m"), + "download_outputs": True, + } + new_rules.append(rule) + + step_config["rules"] = new_rules + return step_config + +reproxy = module( + "reproxy", + enabled = __use_remoteexec, + step_config = __step_config, + filegroups = __filegroups, + handlers = __handlers, +) diff --git a/build/config/siso/rewrapper_cfg.star b/build/config/siso/rewrapper_cfg.star new file mode 100644 index 0000000..741c669 --- /dev/null +++ b/build/config/siso/rewrapper_cfg.star @@ -0,0 +1,61 @@ +# -*- bazel-starlark -*- +# Copyright 2023 The Chromium Authors +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. +"""Siso configuration for parsing rewrapper cfg file.""" + +load("@builtin//struct.star", "module") + +def __parse(ctx, cfg_file): + if not cfg_file: + fail("cfg file expected but none found") + if not ctx.fs.exists(cfg_file): + fail("looked for rewrapper cfg %s but not found, is download_remoteexec_cfg set in gclient custom_vars?" % cfg_file) + + reproxy_config = {} + for line in str(ctx.fs.read(cfg_file)).splitlines(): + if line.startswith("canonicalize_working_dir="): + reproxy_config["canonicalize_working_dir"] = line.removeprefix("canonicalize_working_dir=").lower() == "true" + + reproxy_config["download_outputs"] = True + if line.startswith("download_outputs="): + reproxy_config["download_outputs"] = line.removeprefix("download_outputs=").lower() == "true" + + if line.startswith("exec_strategy="): + reproxy_config["exec_strategy"] = line.removeprefix("exec_strategy=") + + if line.startswith("exec_timeout="): + reproxy_config["exec_timeout"] = line.removeprefix("exec_timeout=") + + if line.startswith("inputs="): + reproxy_config["inputs"] = line.removeprefix("inputs=").split(",") + + if line.startswith("labels="): + if "labels" not in reproxy_config: + reproxy_config["labels"] = dict() + for label in line.removeprefix("labels=").split(","): + label_parts = label.split("=") + if len(label_parts) != 2: + fail("not k,v %s" % label) + reproxy_config["labels"][label_parts[0]] = label_parts[1] + + if line.startswith("platform="): + if "platform" not in reproxy_config: + reproxy_config["platform"] = dict() + for label in line.removeprefix("platform=").split(","): + label_parts = label.split("=") + if len(label_parts) != 2: + fail("not k,v %s" % label) + reproxy_config["platform"][label_parts[0]] = label_parts[1] + + if line.startswith("remote_wrapper="): + reproxy_config["remote_wrapper"] = line.removeprefix("remote_wrapper=") + + if line.startswith("server_address="): + reproxy_config["server_address"] = line.removeprefix("server_address=") + return reproxy_config + +rewrapper_cfg = module( + "rewrapper_cfg", + parse = __parse, +) diff --git a/build/config/siso/simple.star b/build/config/siso/simple.star new file mode 100644 index 0000000..71b18d0 --- /dev/null +++ b/build/config/siso/simple.star @@ -0,0 +1,46 @@ +# -*- bazel-starlark -*- +# Copyright 2023 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. +"""Siso configuration for simple steps.""" + +load("@builtin//struct.star", "module") + +def __copy(ctx, cmd): + input = cmd.inputs[0] + out = cmd.outputs[0] + ctx.actions.copy(input, out, recursive = ctx.fs.is_dir(input)) + ctx.actions.exit(exit_status = 0) + +def __stamp(ctx, cmd): + out = cmd.outputs[0] + ctx.actions.write(out) + ctx.actions.exit(exit_status = 0) + +__handlers = { + "copy": __copy, + "stamp": __stamp, +} + +def __step_config(ctx, step_config): + step_config["rules"].extend([ + { + "name": "simple/copy", + "action": "(.*_)?copy", + "handler": "copy", + }, + { + "name": "simple/stamp", + "action": "(.*_)?stamp", + "handler": "stamp", + "replace": True, + }, + ]) + return step_config + +simple = module( + "simple", + step_config = __step_config, + filegroups = {}, + handlers = __handlers, +) diff --git a/build/config/siso/windows.star b/build/config/siso/windows.star new file mode 100644 index 0000000..a6b1296 --- /dev/null +++ b/build/config/siso/windows.star @@ -0,0 +1,32 @@ +# -*- bazel-starlark -*- +# Copyright 2023 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. +"""Siso configuration for Windows.""" + +load("@builtin//struct.star", "module") +load("./clang_windows.star", "clang") +load("./config.star", "config") +load("./reproxy.star", "reproxy") + +__filegroups = {} +__filegroups.update(clang.filegroups) +__handlers = {} +__handlers.update(clang.handlers) +__handlers.update(reproxy.handlers) + +def __step_config(ctx, step_config): + config.check(ctx) + step_config["platforms"] = {} + + step_config = clang.step_config(ctx, step_config) + if reproxy.enabled(ctx): + step_config = reproxy.step_config(ctx, step_config) + return step_config + +chromium = module( + "chromium", + step_config = __step_config, + filegroups = __filegroups, + handlers = __handlers, +) diff --git a/build/config/unwind.gni b/build/config/unwind.gni new file mode 100644 index 0000000..fd2b597 --- /dev/null +++ b/build/config/unwind.gni @@ -0,0 +1,7 @@ +import("//build_overrides/build.gni") + +declare_args() { + # Use in-tree libunwind (buildtools/third_party/libunwind) instead of whatever + # system library provides unwind symbols (e.g. libgcc). + use_custom_libunwind = is_fuchsia || is_android +} diff --git a/build/config/win/BUILD.gn b/build/config/win/BUILD.gn index c323d07..fc1e312 100644 --- a/build/config/win/BUILD.gn +++ b/build/config/win/BUILD.gn @@ -6,11 +6,13 @@ import("//build/config/c++/c++.gni") import("//build/config/chrome_build.gni") import("//build/config/clang/clang.gni") import("//build/config/compiler/compiler.gni") +import("//build/config/rust.gni") import("//build/config/sanitizers/sanitizers.gni") import("//build/config/win/control_flow_guard.gni") import("//build/config/win/visual_studio_version.gni") import("//build/timestamp.gni") import("//build/toolchain/goma.gni") +import("//build/toolchain/rbe.gni") import("//build/toolchain/toolchain.gni") assert(is_win) @@ -41,9 +43,6 @@ declare_args() { # and with this switch, clang emits it like this: # foo/bar.cc:12:34: error: something went wrong use_clang_diagnostics_format = false - - # Indicates whether to use /pdbpagesize:8192 to allow PDBs larger than 4 GiB. - use_large_pdbs = true } # This is included by reference in the //build/config/compiler config that @@ -96,7 +95,7 @@ config("compiler") { cflags += [ "/D__WRL_ENABLE_FUNCTION_STATICS__" ] # Tell clang which version of MSVC to emulate. - cflags += [ "-fmsc-version=1916" ] + cflags += [ "-fmsc-version=1934" ] if (is_component_build) { cflags += [ @@ -119,7 +118,7 @@ config("compiler") { cflags += [ "--target=x86_64-windows" ] } } else if (current_cpu == "arm64") { - cflags += [ "--target=arm64-windows" ] + cflags += [ "--target=aarch64-pc-windows" ] } else { assert(false, "unknown current_cpu " + current_cpu) } @@ -131,13 +130,13 @@ config("compiler") { cflags += [ "-msse3" ] } - if (exec_script("//build/win/use_ansi_codes.py", [], "trim string") == + # Enable ANSI escape codes if something emulating them is around (cmd.exe + # doesn't understand ANSI escape codes by default). Make sure to not enable + # this if goma/remoteexec is in use, because this will lower cache hits. + if (!use_goma && !use_remoteexec && + exec_script("//build/win/use_ansi_codes.py", [], "trim string") == "True") { - cflags += [ - # cmd.exe doesn't understand ANSI escape codes by default, - # so only enable them if something emulating them is around. - "-fansi-escape-codes", - ] + cflags += [ "-fansi-escape-codes" ] } if (use_clang_diagnostics_format) { @@ -171,14 +170,14 @@ config("compiler") { ldflags += [ "/lldignoreenv" ] } - if (use_large_pdbs) { - # This allows PDBs up to 8 GiB in size. This requires lld-link.exe or - # link.exe from VS 2022 or later. - if (!defined(configs)) { - configs = [] - } - configs += [ ":pdb_larger_than_4gb" ] - } + # Some binaries create PDBs larger than 4 GiB. Increasing the PDB page size + # to 8 KiB allows 8 GiB PDBs. The larger page size also allows larger block maps + # which is a PDB limit that was hit in https://crbug.com/1406510. The page size + # can easily be increased in the future to allow even larger PDBs or larger + # block maps. + # This flag requires lld-link.exe or link.exe from VS 2022 or later to create + # the PDBs, and tools from circa 22H2 or later to consume the PDBs. + ldflags += [ "/pdbpagesize:8192" ] if (!is_debug && !is_component_build) { # Enable standard linker optimizations like GC (/OPT:REF) and ICF in static @@ -286,10 +285,7 @@ config("runtime_library") { } } -# Chromium supports running on Windows 7, but if these constants are set to -# Windows 7, then newer APIs aren't made available by the Windows SDK. -# So we set this to Windows 10 and then are careful to check at runtime -# to only call newer APIs when they're available. +# Chromium only supports Windowes 10+. # Some third-party libraries assume that these defines set what version of # Windows is available at runtime. Targets using these libraries need to # manually override this config for their compiles. @@ -340,12 +336,16 @@ config("default_cfg_compiler") { # This is needed to allow functions to be called by code that is built # with CFG enabled, such as system libraries. # The CFG guards are only emitted if |win_enable_cfg_guards| is enabled. - if (is_clang) { - if (win_enable_cfg_guards) { + if (win_enable_cfg_guards) { + if (is_clang) { cflags = [ "/guard:cf" ] - } else { + } + rustflags = [ "-Ccontrol-flow-guard" ] + } else { + if (is_clang) { cflags = [ "/guard:cf,nochecks" ] } + rustflags = [ "-Ccontrol-flow-guard=nochecks" ] } } @@ -358,6 +358,7 @@ config("disable_guards_cfg_compiler") { if (is_clang) { cflags = [ "/guard:cf,nochecks" ] } + rustflags = [ "-Ccontrol-flow-guard=nochecks" ] } config("cfi_linker") { @@ -375,18 +376,32 @@ config("cfi_linker") { } # This is a superset of all the delayloads needed for chrome.exe, chrome.dll, -# chrome_child.dll, and chrome_elf.dll. The linker will automatically ignore -# anything which is not linked to the binary at all. -# Most of the dlls are simply not required at startup (or at all, depending -# on how the browser is used). The following dlls are interconnected and need to -# be delayloaded together to ensure user32 does not load too early or at all, -# depending on the process type: user32, gdi32, comctl32, comdlg32, cryptui, -# d3d9, dwmapi, imm32, msi, ole32, oleacc, rstrtmgr, shell32, shlwapi, and -# uxtheme. -# There are some exceptions to this list which need to be declared separately. -# Some dlls cannot be delayloaded by chrome_child.dll due to the sandbox -# restrictions that prevent them from being loaded properly. Those dlls are -# specified in the separate config below. +# and chrome_elf.dll. The linker will automatically ignore anything which is not +# linked to the binary at all (it is harmless to have an unmatched /delayload). +# +# We delayload most libraries as the dlls are simply not required at startup (or +# at all, depending on the process type). In unsandboxed process they will load +# when first needed. +# +# Some dlls open handles when they are loaded, and we may not want them to be +# loaded in renderers or other sandboxed processes. Conversely, some dlls must +# be loaded before sandbox lockdown. +# +# Some dlls themselves load others - in particular, to avoid unconditionally +# loading user32.dll - we require that the following dlls are all delayloaded: +# user32, gdi32, comctl32, comdlg32, cryptui, d3d9, dwmapi, imm32, msi, ole32, +# oleacc, rstrtmgr, shell32, shlwapi, and uxtheme. +# +# Advapi32.dll is unconditionally loaded at process startup on Windows 10, but +# on Windows 11 it is not, which makes it worthwhile to delay load it. +# Additionally, advapi32.dll exports several functions that are forwarded to +# other DLLs such as cryptbase.dll. If calls to those functions are present but +# there are some processes where the functions are never called then delay +# loading of advapi32.dll avoids pulling in those DLLs (such as cryptbase.dll) +# unnecessarily, even if advapi32.dll itself is loaded. +# +# This config applies to chrome.exe, chrome.dll, chrome_elf.dll (& others). +# # This config should also be used for any test binary whose goal is to run # tests with the full browser. config("delayloads") { @@ -394,6 +409,7 @@ config("delayloads") { "/DELAYLOAD:api-ms-win-core-winrt-error-l1-1-0.dll", "/DELAYLOAD:api-ms-win-core-winrt-l1-1-0.dll", "/DELAYLOAD:api-ms-win-core-winrt-string-l1-1-0.dll", + "/DELAYLOAD:advapi32.dll", "/DELAYLOAD:comctl32.dll", "/DELAYLOAD:comdlg32.dll", "/DELAYLOAD:credui.dll", @@ -420,6 +436,7 @@ config("delayloads") { "/DELAYLOAD:setupapi.dll", "/DELAYLOAD:shell32.dll", "/DELAYLOAD:shlwapi.dll", + "/DELAYLOAD:uiautomationcore.dll", "/DELAYLOAD:urlmon.dll", "/DELAYLOAD:user32.dll", "/DELAYLOAD:usp10.dll", @@ -433,9 +450,10 @@ config("delayloads") { ] } +# This config (along with `:delayloads`) applies to chrome.exe & chrome_elf.dll. +# Entries should not appear in both configs. config("delayloads_not_for_child_dll") { ldflags = [ - "/DELAYLOAD:advapi32.dll", "/DELAYLOAD:crypt32.dll", "/DELAYLOAD:dbghelp.dll", "/DELAYLOAD:dhcpcsvc.dll", @@ -443,7 +461,6 @@ config("delayloads_not_for_child_dll") { "/DELAYLOAD:iphlpapi.dll", "/DELAYLOAD:oleaut32.dll", "/DELAYLOAD:secur32.dll", - "/DELAYLOAD:uiautomationcore.dll", "/DELAYLOAD:userenv.dll", "/DELAYLOAD:winhttp.dll", "/DELAYLOAD:winmm.dll", @@ -485,6 +502,16 @@ config("release_crt") { if (is_component_build) { cflags = [ "/MD" ] + if (rust_prebuilt_stdlib) { + rustflags = [ "-Ctarget-feature=-crt-static" ] + } else { + # /MD specifies msvcrt.lib as the CRT library. Rust needs to agree, so + # we specify it explicitly. Once + # https://github.com/rust-lang/rust/issues/39016 is resolved we should + # instead tell rustc which CRT to use (static/dynamic + release/debug). + rustflags = [ "-Clink-arg=msvcrt.lib" ] + } + if (use_custom_libcxx) { # On Windows, including libcpmt[d]/msvcprt[d] explicitly links the C++ # standard library, which libc++ needs for exception_ptr internals. @@ -492,6 +519,17 @@ config("release_crt") { } } else { cflags = [ "/MT" ] + + if (rust_prebuilt_stdlib) { + rustflags = [ "-Ctarget-feature=+crt-static" ] + } else { + # /MT specifies libcmt.lib as the CRT library. Rust needs to agree, so + # we specify it explicitly. Once + # https://github.com/rust-lang/rust/issues/39016 is resolved we should + # instead tell rustc which CRT to use (static/dynamic + release/debug). + rustflags = [ "-Clink-arg=libcmt.lib" ] + } + if (use_custom_libcxx) { ldflags = [ "/DEFAULTLIB:libcpmt.lib" ] } @@ -502,11 +540,31 @@ config("dynamic_crt") { if (is_debug) { # This pulls in the DLL debug CRT and defines _DEBUG cflags = [ "/MDd" ] + + # /MDd specifies msvcrtd.lib as the CRT library. Rust needs to agree, so + # we specify it explicitly. + # Once https://github.com/rust-lang/rust/issues/39016 is resolved we should + # instead tell rustc which CRT to use (static/dynamic + release/debug). We + # can't support prebuilt stdlib in this path until then. + rustflags = [ "-Clink-arg=msvcrtd.lib" ] + if (use_custom_libcxx) { ldflags = [ "/DEFAULTLIB:msvcprtd.lib" ] } } else { cflags = [ "/MD" ] + + if (rust_prebuilt_stdlib) { + rustflags = [ "-Ctarget-feature=-crt-static" ] + } else { + # /MD specifies msvcrt.lib as the CRT library. Rust needs to agree, so + # we specify it explicitly. + # Once https://github.com/rust-lang/rust/issues/39016 is resolved we + # should instead tell rustc which CRT to use (static/dynamic + + # release/debug). + rustflags = [ "-Clink-arg=msvcrt.lib" ] + } + if (use_custom_libcxx) { ldflags = [ "/DEFAULTLIB:msvcprt.lib" ] } @@ -517,11 +575,31 @@ config("static_crt") { if (is_debug) { # This pulls in the static debug CRT and defines _DEBUG cflags = [ "/MTd" ] + + # /MTd specifies libcmtd.lib as the CRT library. Rust needs to agree, so + # we specify it explicitly. + # Once https://github.com/rust-lang/rust/issues/39016 is resolved we should + # instead tell rustc which CRT to use (static/dynamic + release/debug). We + # can't support prebuilt stdlib in this path until then. + rustflags = [ "-Clink-arg=libcmtd.lib" ] + if (use_custom_libcxx) { ldflags = [ "/DEFAULTLIB:libcpmtd.lib" ] } } else { cflags = [ "/MT" ] + + if (rust_prebuilt_stdlib) { + rustflags = [ "-Ctarget-feature=+crt-static" ] + } else { + # /MT specifies libcmt.lib as the CRT library. Rust needs to agree, so + # we specify it explicitly. + # Once https://github.com/rust-lang/rust/issues/39016 is resolved we + # should instead tell rustc which CRT to use (static/dynamic + + # release/debug). + rustflags = [ "-Clink-arg=libcmt.lib" ] + } + if (use_custom_libcxx) { ldflags = [ "/DEFAULTLIB:libcpmt.lib" ] } @@ -567,6 +645,10 @@ config("default_incremental_linking") { # TODO(thakis): /INCREMENTAL is on by default in link.exe, but not in # lld. ldflags += [ "/OPT:NOREF" ] + + # TODO(crbug.com/1444129): Mixing incrememntal and icf produces an error + # in lld-link. + ldflags += [ "/OPT:NOICF" ] } } else { ldflags = [ "/INCREMENTAL:NO" ] @@ -601,15 +683,3 @@ config("lean_and_mean") { config("nominmax") { defines = [ "NOMINMAX" ] } - -# Some binaries create PDBs larger than 4 GiB. Increasing the PDB page size -# to 8 KiB allows 8 GiB PDBs. The larger page size also allows larger block maps -# which is a PDB limit that was hit in https://crbug.com/1406510. The page size -# can easily be increased in the future to allow even larger PDBs or larger -# block maps. -config("pdb_larger_than_4gb") { - if (!defined(ldflags)) { - ldflags = [] - } - ldflags += [ "/pdbpagesize:8192" ] -} diff --git a/build/config/win/visual_studio_version.gni b/build/config/win/visual_studio_version.gni index 2314ab5..1da479d 100644 --- a/build/config/win/visual_studio_version.gni +++ b/build/config/win/visual_studio_version.gni @@ -5,11 +5,10 @@ declare_args() { # Path to Visual Studio. If empty, the default is used which is to use the # automatic toolchain in depot_tools. If set, you must also set the - # visual_studio_version and wdk_path. + # visual_studio_version, wdk_path and windows_sdk_version. visual_studio_path = "" # Version of Visual Studio pointed to by the visual_studio_path. - # Currently always "2015". visual_studio_version = "" # Directory of the Windows driver kit. If visual_studio_path is empty, this @@ -20,6 +19,9 @@ declare_args() { # This value is the default location, override if you have a different # installation location. windows_sdk_path = "C:\Program Files (x86)\Windows Kits\10" + + # Version of the Windows SDK pointed to by the windows_sdk_path. + windows_sdk_version = "" } if (visual_studio_path == "") { @@ -34,6 +36,8 @@ if (visual_studio_path == "") { } else { assert(visual_studio_version != "", "You must set the visual_studio_version if you set the path") + assert(windows_sdk_version != "", + "You must set the windows_sdk_version if you set the path") assert(wdk_path != "", "You must set the wdk_path if you set the visual studio path") visual_studio_runtime_dirs = [] diff --git a/build/docs/debugging_slow_builds.md b/build/docs/debugging_slow_builds.md index 9bba553..863432a 100644 --- a/build/docs/debugging_slow_builds.md +++ b/build/docs/debugging_slow_builds.md @@ -10,8 +10,19 @@ cd out/Default post_build_ninja_summary.py ``` +Because the build is highly parallelized the `elapsed time` values are usually +not meaningful so the `weighted time` numbers are calculated to approximate +the impact of build steps on wall-clock time. + You can also set `NINJA_SUMMARIZE_BUILD=1` to have this command run -after each `autoninja` invocation (also runs ninja with `-d stats`). +after each `autoninja` invocation. Setting this environment variable also runs +ninja with `-d stats` which causes it to print out internal information such +as StartEdge times, which measures the times to create processes, and it +modifies the `NINJA_STATUS` environment variable to add information such as how +many processes are running at any given time - both are useful for detecting +slow process creation. You can get this last benefit on its own by setting +`NINJA_STATUS=[%r processes, %f/%t @ %o/s : %es ] ` (trailing space is +intentional). To generate a Chrome trace of your most recent build: @@ -21,11 +32,14 @@ ninjatracing/ninjatracing out/Default/.ninja_log > trace.json # Then open in https://ui.perfetto.dev/ ``` +If your build is stuck on a long-running build step you can see what it is by +running `tools/buildstate.py`. + ## Slow Bot Builds Our bots run `ninjatracing` and `post_build_ninja_summary.py` as well. -Find the trace at: `postprocess_for_goma > upload_log > ninja_log`: +Find the trace at: `postprocess for reclient > gsutil upload ninja_log > ninja_log`: * _".ninja_log in table format (full)"_ is for `post_build_ninja_summary.py`. * _"trace viewer (sort_by_end)"_ is for `ninjatracing`. diff --git a/build/docs/writing_gn_templates.md b/build/docs/writing_gn_templates.md index e6eb1fb..9171265 100644 --- a/build/docs/writing_gn_templates.md +++ b/build/docs/writing_gn_templates.md @@ -40,6 +40,9 @@ won't exist for the initial build. depfiles. * Stale paths in depfiles can cause ninja to complain of circular dependencies [in some cases](https://bugs.chromium.org/p/chromium/issues/detail?id=639042). + * Use [`action_helpers.write_depfile()`] to write these. + +[`action_helpers.write_depfile()`]: https://source.chromium.org/chromium/chromium/src/+/main:build/action_helpers.py?q=symbol:%5Cbwrite_depfile ### Ensuring "gn analyze" Knows About your Inputs "gn analyze" is used by bots to run only affected tests and build only affected @@ -136,15 +139,19 @@ Outputs should be atomic and take advantage of `restat=1`. short-circuits a build when output timestamps do not change. This feature is the reason that the total number of build steps sometimes decreases when building.. -* Use [`build_utils.AtomicOutput()`](https://cs.chromium.org/chromium/src/build/android/gyp/util/build_utils.py?rcl=7d6ba28e92bec865a7b7876c35b4621d56fb37d8&l=128) - to perform both of these techniques. +* Use [`action_helpers.atomic_output()`] to perform both of these techniques. + +[`action_helpers.atomic_output()`]: https://source.chromium.org/chromium/chromium/src/+/main:build/action_helpers.py?q=symbol:%5Cbatomic_output Actions should be deterministic in order to avoid hard-to-reproduce bugs. Given identical inputs, they should produce byte-for-byte identical outputs. * Some common mistakes: * Depending on filesystem iteration order. - * Writing timestamps in files (or in zip entries). * Writing absolute paths in outputs. + * Writing timestamps in files (or in zip entries). + * Tip: Use [`zip_helpers.py`] when writing `.zip` files. + +[`zip_helpers.py`]: https://source.chromium.org/chromium/chromium/src/+/main:build/zip_helpers.py ## Style Guide Chromium GN files follow diff --git a/build/dotfile_settings.gni b/build/dotfile_settings.gni index 94b4fb0..50c04a8 100644 --- a/build/dotfile_settings.gni +++ b/build/dotfile_settings.gni @@ -36,7 +36,7 @@ build_dotfile_settings = { "//build/toolchain/nacl/BUILD.gn", "//build/toolchain/toolchain.gni", "//build/toolchain/win/BUILD.gn", - "//build/toolchain/win/toolchain.gni", + "//build/toolchain/win/win_toolchain_data.gni", "//build/toolchain/zos/BUILD.gn", "//build/util/branding.gni", ] diff --git a/build/env_dump.py b/build/env_dump.py index 1eaf8dc..17d30a7 100755 --- a/build/env_dump.py +++ b/build/env_dump.py @@ -9,7 +9,7 @@ import json import optparse import os -import pipes +import shlex import subprocess import sys @@ -32,7 +32,7 @@ def main(): if not options.output_json: parser.error('Requires --output-json option.') - envsetup_cmd = ' '.join(map(pipes.quote, args)) + envsetup_cmd = ' '.join(map(shlex.quote, args)) full_cmd = [ 'bash', '-c', '. %s > /dev/null; %s -d' % (envsetup_cmd, os.path.abspath(__file__)) diff --git a/build/gn_helpers.py b/build/gn_helpers.py index 34a282e..94c1a84 100644 --- a/build/gn_helpers.py +++ b/build/gn_helpers.py @@ -23,10 +23,13 @@ import json import os import re +import shlex +import shutil import sys -_CHROMIUM_ROOT = os.path.join(os.path.dirname(__file__), os.pardir) +_CHROMIUM_ROOT = os.path.abspath( + os.path.join(os.path.dirname(__file__), os.pardir)) BUILD_VARS_FILENAME = 'build_vars.json' IMPORT_RE = re.compile(r'^import\("//(\S+)"\)') @@ -540,3 +543,34 @@ def ReadBuildVars(output_directory): """Parses $output_directory/build_vars.json into a dict.""" with open(os.path.join(output_directory, BUILD_VARS_FILENAME)) as f: return json.load(f) + + +def CreateBuildCommand(output_directory): + """Returns [cmd, -C, output_directory], where |cmd| is auto{siso,ninja}.""" + suffix = '.bat' if sys.platform.startswith('win32') else '' + # Prefer the version on PATH, but fallback to known version if PATH doesn't + # have one (e.g. on bots). + if not shutil.which(f'autoninja{suffix}'): + third_party_prefix = os.path.join(_CHROMIUM_ROOT, 'third_party') + ninja_prefix = os.path.join(third_party_prefix, 'ninja', '') + siso_prefix = os.path.join(third_party_prefix, 'siso', '') + # Also - bots configure reclient manually, and so do not use the "auto" + # wrappers. + ninja_cmd = [f'{ninja_prefix}ninja{suffix}'] + siso_cmd = [f'{siso_prefix}siso{suffix}', 'ninja'] + else: + ninja_cmd = [f'autoninja{suffix}'] + siso_cmd = [f'autosiso{suffix}'] + + if output_directory and os.path.relpath(output_directory) != '.': + ninja_cmd += ['-C', output_directory] + siso_cmd += ['-C', output_directory] + siso_deps = os.path.exists(os.path.join(output_directory, '.siso_deps')) + ninja_deps = os.path.exists(os.path.join(output_directory, '.ninja_deps')) + if siso_deps and ninja_deps: + raise Exception('Found both .siso_deps and .ninja_deps in ' + f'{output_directory}. Not sure which build tool to use. ' + 'Please delete one, or better, run "gn clean".') + if siso_deps: + return siso_cmd + return ninja_cmd diff --git a/build/install-build-deps.py b/build/install-build-deps.py new file mode 100755 index 0000000..ae0614e --- /dev/null +++ b/build/install-build-deps.py @@ -0,0 +1,914 @@ +#!/usr/bin/env python3 + +# Copyright 2023 The Chromium Authors +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +# Script to install everything needed to build chromium +# including items requiring sudo privileges. +# See https://chromium.googlesource.com/chromium/src/+/main/docs/linux/build_instructions.md + +import argparse +import functools +import os +import re +import shutil +import subprocess +import sys + + +@functools.lru_cache(maxsize=1) +def build_apt_package_list(): + print("Building apt package list.", file=sys.stderr) + output = subprocess.check_output(["apt-cache", "dumpavail"]).decode() + arch_map = {"i386": ":i386"} + package_regex = re.compile(r"^Package: (.+?)$.+?^Architecture: (.+?)$", + re.M | re.S) + return set(package + arch_map.get(arch, "") + for package, arch in re.findall(package_regex, output)) + + +def package_exists(package_name: str) -> bool: + return package_name in build_apt_package_list() + + +def parse_args(argv): + parser = argparse.ArgumentParser( + description="Install Chromium build dependencies.") + parser.add_argument("--syms", + action="store_true", + help="Enable installation of debugging symbols") + parser.add_argument( + "--no-syms", + action="store_false", + dest="syms", + help="Disable installation of debugging symbols", + ) + parser.add_argument( + "--lib32", + action="store_true", + help="Enable installation of 32-bit libraries, e.g. for V8 snapshot", + ) + parser.add_argument( + "--android", + action="store_true", + help="Enable installation of android dependencies", + ) + parser.add_argument( + "--no-android", + action="store_false", + dest="android", + help="Disable installation of android dependencies", + ) + parser.add_argument("--arm", + action="store_true", + help="Enable installation of arm cross toolchain") + parser.add_argument( + "--no-arm", + action="store_false", + dest="arm", + help="Disable installation of arm cross toolchain", + ) + parser.add_argument( + "--chromeos-fonts", + action="store_true", + help="Enable installation of Chrome OS fonts", + ) + parser.add_argument( + "--no-chromeos-fonts", + action="store_false", + dest="chromeos_fonts", + help="Disable installation of Chrome OS fonts", + ) + parser.add_argument( + "--nacl", + action="store_true", + help="Enable installation of prerequisites for building NaCl", + ) + parser.add_argument( + "--no-nacl", + action="store_false", + dest="nacl", + help="Disable installation of prerequisites for building NaCl", + ) + parser.add_argument( + "--backwards-compatible", + action="store_true", + help= + "Enable installation of packages that are no longer currently needed and" + + "have been removed from this script. Useful for bisection.", + ) + parser.add_argument( + "--no-backwards-compatible", + action="store_false", + dest="backwards_compatible", + help= + "Disable installation of packages that are no longer currently needed and" + + "have been removed from this script.", + ) + parser.add_argument("--no-prompt", + action="store_true", + help="Automatic yes to prompts") + parser.add_argument( + "--quick-check", + action="store_true", + help="Quickly try to determine if dependencies are installed", + ) + parser.add_argument( + "--unsupported", + action="store_true", + help="Attempt installation even on unsupported systems", + ) + + options = parser.parse_args(argv) + + if options.arm or options.android: + options.lib32 = True + + return options + + +def check_lsb_release(): + if not shutil.which("lsb_release"): + print("ERROR: lsb_release not found in $PATH", file=sys.stderr) + print("try: sudo apt-get install lsb-release", file=sys.stderr) + sys.exit(1) + + +@functools.lru_cache(maxsize=1) +def distro_codename(): + return subprocess.check_output(["lsb_release", "--codename", + "--short"]).decode().strip() + + +def check_distro(options): + if options.unsupported or options.quick_check: + return + + distro_id = subprocess.check_output(["lsb_release", "--id", + "--short"]).decode().strip() + + supported_codenames = ["bionic", "focal", "jammy"] + supported_ids = ["Debian"] + + if (distro_codename() not in supported_codenames + and distro_id not in supported_ids): + print( + "WARNING: The following distributions are supported,", + "but distributions not in the list below can also try to install", + "dependencies by passing the `--unsupported` parameter", + "\tUbuntu 18.04 LTS (bionic with EoL April 2028)", + "\tUbuntu 20.04 LTS (focal with EoL April 2030)", + "\tUbuntu 22.04 LTS (jammy with EoL April 2032)", + "\tDebian 10 (buster) or later", + sep="\n", + file=sys.stderr, + ) + sys.exit(1) + + +def check_architecture(): + architecture = subprocess.check_output(["uname", "-m"]).decode().strip() + if architecture not in ["i686", "x86_64"]: + print("Only x86 architectures are currently supported", file=sys.stderr) + sys.exit(1) + + +def check_root(): + if os.geteuid() != 0: + print("Running as non-root user.", file=sys.stderr) + print("You might have to enter your password one or more times for 'sudo'.", + file=sys.stderr) + print(file=sys.stderr) + + +def apt_update(options): + if options.lib32 or options.nacl: + subprocess.check_call(["sudo", "dpkg", "--add-architecture", "i386"]) + subprocess.check_call(["sudo", "apt-get", "update"]) + + +# Packages needed for development +def dev_list(): + packages = [ + "binutils", + "bison", + "bzip2", + "cdbs", + "curl", + "dbus-x11", + "devscripts", + "dpkg-dev", + "elfutils", + "fakeroot", + "flex", + "git-core", + "gperf", + "libasound2-dev", + "libatspi2.0-dev", + "libbrlapi-dev", + "libbz2-dev", + "libc6-dev", + "libcairo2-dev", + "libcap-dev", + "libcups2-dev", + "libcurl4-gnutls-dev", + "libdrm-dev", + "libelf-dev", + "libevdev-dev", + "libffi-dev", + "libfuse2", + "libgbm-dev", + "libglib2.0-dev", + "libglu1-mesa-dev", + "libgtk-3-dev", + "libkrb5-dev", + "libnspr4-dev", + "libnss3-dev", + "libpam0g-dev", + "libpci-dev", + "libpulse-dev", + "libsctp-dev", + "libspeechd-dev", + "libsqlite3-dev", + "libssl-dev", + "libsystemd-dev", + "libudev-dev", + "libva-dev", + "libwww-perl", + "libxshmfence-dev", + "libxslt1-dev", + "libxss-dev", + "libxt-dev", + "libxtst-dev", + "lighttpd", + "locales", + "openbox", + "p7zip", + "patch", + "perl", + "pkg-config", + "rpm", + "ruby", + "subversion", + "uuid-dev", + "wdiff", + "x11-utils", + "xcompmgr", + "xz-utils", + "zip", + ] + + # Packages needed for chromeos only + packages += [ + "libbluetooth-dev", + "libxkbcommon-dev", + "mesa-common-dev", + "zstd", + ] + + if package_exists("realpath"): + packages.append("realpath") + + if package_exists("libjpeg-dev"): + packages.append("libjpeg-dev") + else: + packages.append("libjpeg62-dev") + + if package_exists("libudev1"): + packages.append("libudev1") + else: + packages.append("libudev0") + + if package_exists("libbrlapi0.8"): + packages.append("libbrlapi0.8") + elif package_exists("libbrlapi0.7"): + packages.append("libbrlapi0.7") + elif package_exists("libbrlapi0.6"): + packages.append("libbrlapi0.6") + else: + packages.append("libbrlapi0.5") + + if package_exists("libav-tools"): + packages.append("libav-tools") + + if package_exists("libvulkan-dev"): + packages.append("libvulkan-dev") + + if package_exists("libinput-dev"): + packages.append("libinput-dev") + + # Cross-toolchain strip is needed for building the sysroots. + if package_exists("binutils-arm-linux-gnueabihf"): + packages.append("binutils-arm-linux-gnueabihf") + if package_exists("binutils-aarch64-linux-gnu"): + packages.append("binutils-aarch64-linux-gnu") + if package_exists("binutils-mipsel-linux-gnu"): + packages.append("binutils-mipsel-linux-gnu") + if package_exists("binutils-mips64el-linux-gnuabi64"): + packages.append("binutils-mips64el-linux-gnuabi64") + + # 64-bit systems need a minimum set of 32-bit compat packages for the + # pre-built NaCl binaries. + if "ELF 64-bit" in subprocess.check_output(["file", "-L", + "/sbin/init"]).decode(): + packages.extend(["libc6-i386", "lib32stdc++6"]) + + # lib32gcc-s1 used to be called lib32gcc1 in older distros. + if package_exists("lib32gcc-s1"): + packages.append("lib32gcc-s1") + elif package_exists("lib32gcc1"): + packages.append("lib32gcc1") + + return packages + + +# List of required run-time libraries +def lib_list(): + packages = [ + "lib32z1", + "libasound2", + "libatk1.0-0", + "libatspi2.0-0", + "libc6", + "libcairo2", + "libcap2", + "libcgi-session-perl", + "libcups2", + "libdrm2", + "libegl1", + "libevdev2", + "libexpat1", + "libfontconfig1", + "libfreetype6", + "libgbm1", + "libglib2.0-0", + "libgl1", + "libgtk-3-0", + "libncurses5", + "libpam0g", + "libpango-1.0-0", + "libpangocairo-1.0-0", + "libpci3", + "libpcre3", + "libpixman-1-0", + "libspeechd2", + "libstdc++6", + "libsqlite3-0", + "libuuid1", + "libwayland-egl1", + "libwayland-egl1-mesa", + "libx11-6", + "libx11-xcb1", + "libxau6", + "libxcb1", + "libxcomposite1", + "libxcursor1", + "libxdamage1", + "libxdmcp6", + "libxext6", + "libxfixes3", + "libxi6", + "libxinerama1", + "libxrandr2", + "libxrender1", + "libxtst6", + "x11-utils", + "xvfb", + "zlib1g", + ] + + # Run-time libraries required by chromeos only + packages += [ + "libpulse0", + "libbz2-1.0", + ] + + if package_exists("libffi8"): + packages.append("libffi8") + elif package_exists("libffi7"): + packages.append("libffi7") + elif package_exists("libffi6"): + packages.append("libffi6") + + if package_exists("libpng16-16"): + packages.append("libpng16-16") + else: + packages.append("libpng12-0") + + if package_exists("libnspr4"): + packages.extend(["libnspr4", "libnss3"]) + else: + packages.extend(["libnspr4-0d", "libnss3-1d"]) + + if package_exists("appmenu-gtk"): + packages.append("appmenu-gtk") + if package_exists("libgnome-keyring0"): + packages.append("libgnome-keyring0") + if package_exists("libgnome-keyring-dev"): + packages.append("libgnome-keyring-dev") + if package_exists("libvulkan1"): + packages.append("libvulkan1") + if package_exists("libinput10"): + packages.append("libinput10") + + return packages + + +def lib32_list(options): + if not options.lib32: + print("Skipping 32-bit libraries.", file=sys.stderr) + return [] + print("Including 32-bit libraries.", file=sys.stderr) + + packages = [ + # 32-bit libraries needed for a 32-bit build + # includes some 32-bit libraries required by the Android SDK + # See https://developer.android.com/sdk/installing/index.html?pkg=tools + "libasound2:i386", + "libatk-bridge2.0-0:i386", + "libatk1.0-0:i386", + "libatspi2.0-0:i386", + "libdbus-1-3:i386", + "libegl1:i386", + "libgl1:i386", + "libglib2.0-0:i386", + "libncurses5:i386", + "libnss3:i386", + "libpango-1.0-0:i386", + "libpangocairo-1.0-0:i386", + "libstdc++6:i386", + "libwayland-egl1:i386", + "libx11-xcb1:i386", + "libxcomposite1:i386", + "libxdamage1:i386", + "libxkbcommon0:i386", + "libxrandr2:i386", + "libxtst6:i386", + "zlib1g:i386", + # 32-bit libraries needed e.g. to compile V8 snapshot for Android or armhf + "linux-libc-dev:i386", + "libpci3:i386", + ] + + # When cross building for arm/Android on 64-bit systems the host binaries + # that are part of v8 need to be compiled with -m32 which means + # that basic multilib support is needed. + if "ELF 64-bit" in subprocess.check_output(["file", "-L", + "/sbin/init"]).decode(): + # gcc-multilib conflicts with the arm cross compiler but + # g++-X.Y-multilib gives us the 32-bit support that we need. Find out the + # appropriate value of X and Y by seeing what version the current + # distribution's g++-multilib package depends on. + lines = subprocess.check_output( + ["apt-cache", "depends", "g++-multilib", "--important"]).decode() + pattern = re.compile(r"g\+\+-[0-9.]+-multilib") + packages += re.findall(pattern, lines) + + return packages + + +# Packages that have been removed from this script. Regardless of configuration +# or options passed to this script, whenever a package is removed, it should be +# added here. +def backwards_compatible_list(options): + if not options.backwards_compatible: + print("Skipping backwards compatible packages.", file=sys.stderr) + return [] + print("Including backwards compatible packages.", file=sys.stderr) + + packages = [ + "7za", + "fonts-indic", + "fonts-ipafont", + "fonts-stix", + "fonts-thai-tlwg", + "fonts-tlwg-garuda", + "g++", + "g++-4.8-multilib-arm-linux-gnueabihf", + "gcc-4.8-multilib-arm-linux-gnueabihf", + "g++-9-multilib-arm-linux-gnueabihf", + "gcc-9-multilib-arm-linux-gnueabihf", + "gcc-arm-linux-gnueabihf", + "g++-10-multilib-arm-linux-gnueabihf", + "gcc-10-multilib-arm-linux-gnueabihf", + "g++-10-arm-linux-gnueabihf", + "gcc-10-arm-linux-gnueabihf", + "git-svn", + "language-pack-da", + "language-pack-fr", + "language-pack-he", + "language-pack-zh-hant", + "libappindicator-dev", + "libappindicator1", + "libappindicator3-1", + "libappindicator3-dev", + "libdconf-dev", + "libdconf1", + "libdconf1:i386", + "libexif-dev", + "libexif12", + "libexif12:i386", + "libgbm-dev", + "libgbm-dev-lts-trusty", + "libgbm-dev-lts-xenial", + "libgconf-2-4:i386", + "libgconf2-dev", + "libgl1-mesa-dev", + "libgl1-mesa-dev-lts-trusty", + "libgl1-mesa-dev-lts-xenial", + "libgl1-mesa-glx:i386", + "libgl1-mesa-glx-lts-trusty:i386", + "libgl1-mesa-glx-lts-xenial:i386", + "libgles2-mesa-dev", + "libgles2-mesa-dev-lts-trusty", + "libgles2-mesa-dev-lts-xenial", + "libgtk-3-0:i386", + "libgtk2.0-0", + "libgtk2.0-0:i386", + "libgtk2.0-dev", + "mesa-common-dev", + "mesa-common-dev-lts-trusty", + "mesa-common-dev-lts-xenial", + "msttcorefonts", + "python-dev", + "python-setuptools", + "snapcraft", + "ttf-dejavu-core", + "ttf-indic-fonts", + "ttf-kochi-gothic", + "ttf-kochi-mincho", + "ttf-mscorefonts-installer", + "xfonts-mathml", + ] + + if package_exists("python-is-python2"): + packages.extend(["python-is-python2", "python2-dev"]) + else: + packages.append("python") + + if package_exists("python-crypto"): + packages.append("python-crypto") + + if package_exists("python-numpy"): + packages.append("python-numpy") + + if package_exists("python-openssl"): + packages.append("python-openssl") + + if package_exists("python-psutil"): + packages.append("python-psutil") + + if package_exists("python-yaml"): + packages.append("python-yaml") + + if package_exists("apache2.2-bin"): + packages.append("apache2.2-bin") + else: + packages.append("apache2-bin") + + php_versions = [ + ("php8.1-cgi", "libapache2-mod-php8.1"), + ("php8.0-cgi", "libapache2-mod-php8.0"), + ("php7.4-cgi", "libapache2-mod-php7.4"), + ("php7.3-cgi", "libapache2-mod-php7.3"), + ("php7.2-cgi", "libapache2-mod-php7.2"), + ("php7.1-cgi", "libapache2-mod-php7.1"), + ("php7.0-cgi", "libapache2-mod-php7.0"), + ("php5-cgi", "libapache2-mod-php5"), + ] + + for php_cgi, mod_php in php_versions: + if package_exists(php_cgi): + packages.extend([php_cgi, mod_php]) + break + + return [package for package in packages if package_exists(package)] + + +def arm_list(options): + if not options.arm: + print("Skipping ARM cross toolchain.", file=sys.stderr) + return [] + print("Including ARM cross toolchain.", file=sys.stderr) + + # arm cross toolchain packages needed to build chrome on armhf + packages = [ + "libc6-dev-armhf-cross", + "linux-libc-dev-armhf-cross", + "g++-arm-linux-gnueabihf", + ] + + # Work around for dependency issue Ubuntu: http://crbug.com/435056 + if distro_codename() == "bionic": + packages.extend([ + "g++-5-multilib-arm-linux-gnueabihf", + "gcc-5-multilib-arm-linux-gnueabihf", + "gcc-arm-linux-gnueabihf", + ]) + elif distro_codename() == "focal": + packages.extend([ + "g++-10-multilib-arm-linux-gnueabihf", + "gcc-10-multilib-arm-linux-gnueabihf", + "gcc-arm-linux-gnueabihf", + ]) + elif distro_codename() == "jammy": + packages.extend([ + "gcc-arm-linux-gnueabihf", + "g++-11-arm-linux-gnueabihf", + "gcc-11-arm-linux-gnueabihf", + ]) + + return packages + + +def nacl_list(options): + if not options.nacl: + print("Skipping NaCl, NaCl toolchain, NaCl ports dependencies.", + file=sys.stderr) + return [] + print("Including NaCl, NaCl toolchain, NaCl ports dependencies.", + file=sys.stderr) + + packages = [ + "g++-mingw-w64-i686", + "lib32z1-dev", + "libasound2:i386", + "libcap2:i386", + "libelf-dev:i386", + "libfontconfig1:i386", + "libglib2.0-0:i386", + "libgpm2:i386", + "libncurses5:i386", + "lib32ncurses5-dev", + "libnss3:i386", + "libpango-1.0-0:i386", + "libssl-dev:i386", + "libtinfo-dev", + "libtinfo-dev:i386", + "libtool", + "libuuid1:i386", + "libxcomposite1:i386", + "libxcursor1:i386", + "libxdamage1:i386", + "libxi6:i386", + "libxrandr2:i386", + "libxss1:i386", + "libxtst6:i386", + "texinfo", + "xvfb", + # Packages to build NaCl, its toolchains, and its ports. + "ant", + "autoconf", + "bison", + "cmake", + "gawk", + "intltool", + "xutils-dev", + "xsltproc", + ] + + # Some package names have changed over time + if package_exists("libssl-dev"): + packages.append("libssl-dev:i386") + elif package_exists("libssl1.1"): + packages.append("libssl1.1:i386") + elif package_exists("libssl1.0.2"): + packages.append("libssl1.0.2:i386") + else: + packages.append("libssl1.0.0:i386") + + if package_exists("libtinfo5"): + packages.append("libtinfo5") + + if package_exists("libudev1"): + packages.append("libudev1:i386") + else: + packages.append("libudev0:i386") + + return packages + + +# Debian is in the process of transitioning to automatic debug packages, which +# have the -dbgsym suffix (https://wiki.debian.org/AutomaticDebugPackages). +# Untransitioned packages have the -dbg suffix. And on some systems, neither +# will be available, so exclude the ones that are missing. +def dbg_package_name(package): + if package_exists(package + "-dbgsym"): + return [package + "-dbgsym"] + if package_exists(package + "-dbg"): + return [package + "-dbg"] + return [] + + +def dbg_list(options): + if not options.syms: + print("Skipping debugging symbols.", file=sys.stderr) + return [] + print("Including debugging symbols.", file=sys.stderr) + + packages = [ + dbg_package for package in lib_list() + for dbg_package in dbg_package_name(package) + ] + + # Debugging symbols packages not following common naming scheme + if not dbg_package_name("libstdc++6"): + for version in ["8", "7", "6", "5", "4.9", "4.8", "4.7", "4.6"]: + if package_exists("libstdc++6-%s-dbg" % version): + packages.append("libstdc++6-%s-dbg" % version) + break + + if not dbg_package_name("libatk1.0-0"): + packages.extend(dbg_package_name("libatk1.0")) + + if not dbg_package_name("libpango-1.0-0"): + packages.extend(dbg_package_name("libpango1.0-dev")) + + return packages + + +def package_list(options): + packages = (dev_list() + lib_list() + dbg_list(options) + + lib32_list(options) + arm_list(options) + nacl_list(options) + + backwards_compatible_list(options)) + + # Sort all the :i386 packages to the front, to avoid confusing dpkg-query + # (https://crbug.com/446172). + return sorted(set(packages), key=lambda x: (not x.endswith(":i386"), x)) + + +def missing_packages(packages): + try: + subprocess.run( + ["dpkg-query", "-W", "-f", " "] + packages, + check=True, + capture_output=True, + ) + return [] + except subprocess.CalledProcessError as e: + return [ + line.split(" ")[-1] for line in e.stderr.decode().strip().splitlines() + ] + + +def package_is_installable(package): + result = subprocess.run(["apt-cache", "show", package], capture_output=True) + return result.returncode == 0 + + +def quick_check(options): + if not options.quick_check: + return + + missing = missing_packages(package_list(options)) + if not missing: + sys.exit(0) + + not_installed = [] + unknown = [] + for p in missing: + if package_is_installable(p): + not_installed.append(p) + else: + unknown.append(p) + + if not_installed: + print("WARNING: The following packages are not installed:", file=sys.stderr) + print(" ".join(not_installed), file=sys.stderr) + + if unknown: + print("WARNING: The following packages are unknown to your system", + file=sys.stderr) + print("(maybe missing a repo or need to 'sudo apt-get update'):", + file=sys.stderr) + print(" ".join(unknown), file=sys.stderr) + + sys.exit(1) + + +def find_missing_packages(options): + print("Finding missing packages...", file=sys.stderr) + + packages = package_list(options) + packages_str = " ".join(packages) + print("Packages required: " + packages_str, file=sys.stderr) + + query_cmd = ["apt-get", "--just-print", "install"] + packages + env = os.environ.copy() + env["LANGUAGE"] = "en" + env["LANG"] = "C" + cmd_output = subprocess.check_output(query_cmd, env=env).decode() + lines = cmd_output.splitlines() + + install = [] + for pattern in ( + "The following NEW packages will be installed:", + "The following packages will be upgraded:", + ): + if pattern in lines: + for line in lines[lines.index(pattern) + 1:]: + if not line.startswith(" "): + break + install += line.strip().split(" ") + return install + + +def install_packages(options): + try: + packages = find_missing_packages(options) + if packages: + quiet = ["-qq", "--assume-yes"] if options.no_prompt else [] + subprocess.check_call(["sudo", "apt-get", "install"] + quiet + packages) + print(file=sys.stderr) + else: + print("No missing packages, and the packages are up to date.", + file=sys.stderr) + + except subprocess.CalledProcessError as e: + # An apt-get exit status of 100 indicates that a real error has occurred. + print("`apt-get --just-print install ...` failed", file=sys.stderr) + print("It produced the following output:", file=sys.stderr) + print(e.output.decode(), file=sys.stderr) + print(file=sys.stderr) + print("You will have to install the above packages yourself.", + file=sys.stderr) + print(file=sys.stderr) + sys.exit(100) + + +# Install the Chrome OS default fonts. This must go after running +# apt-get, since install-chromeos-fonts depends on curl. +def install_chromeos_fonts(options): + if not options.chromeos_fonts: + print("Skipping installation of Chrome OS fonts.", file=sys.stderr) + return + print("Installing Chrome OS fonts.", file=sys.stderr) + + dir = os.path.abspath(os.path.dirname(__file__)) + + try: + subprocess.check_call( + ["sudo", + os.path.join(dir, "linux", "install-chromeos-fonts.py")]) + except subprocess.CalledProcessError: + print("ERROR: The installation of the Chrome OS default fonts failed.", + file=sys.stderr) + if (subprocess.check_output( + ["stat", "-f", "-c", "%T", dir], ).decode().startswith("nfs")): + print( + "The reason is that your repo is installed on a remote file system.", + file=sys.stderr) + else: + print( + "This is expected if your repo is installed on a remote file system.", + file=sys.stderr) + + print("It is recommended to install your repo on a local file system.", + file=sys.stderr) + print("You can skip the installation of the Chrome OS default fonts with", + file=sys.stderr) + print("the command line option: --no-chromeos-fonts.", file=sys.stderr) + sys.exit(1) + + +def install_locales(): + print("Installing locales.", file=sys.stderr) + CHROMIUM_LOCALES = [ + "da_DK.UTF-8", "fr_FR.UTF-8", "he_IL.UTF-8", "zh_TW.UTF-8" + ] + LOCALE_GEN = "/etc/locale.gen" + if os.path.exists(LOCALE_GEN): + old_locale_gen = open(LOCALE_GEN).read() + for locale in CHROMIUM_LOCALES: + subprocess.check_call( + ["sudo", "sed", "-i", + "s/^# %s/%s/" % (locale, locale), LOCALE_GEN]) + + # Regenerating locales can take a while, so only do it if we need to. + locale_gen = open(LOCALE_GEN).read() + if locale_gen != old_locale_gen: + subprocess.check_call(["sudo", "locale-gen"]) + else: + print("Locales already up-to-date.", file=sys.stderr) + else: + for locale in CHROMIUM_LOCALES: + subprocess.check_call(["sudo", "locale-gen", locale]) + + +def main(): + options = parse_args(sys.argv[1:]) + check_lsb_release() + check_distro(options) + check_architecture() + quick_check(options) + check_root() + apt_update(options) + install_packages(options) + install_chromeos_fonts(options) + install_locales() + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/build/install-build-deps.sh b/build/install-build-deps.sh index e21a244..7ad84c6 100755 --- a/build/install-build-deps.sh +++ b/build/install-build-deps.sh @@ -4,805 +4,4 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. -# Script to install everything needed to build chromium (well, ideally, anyway) -# including items requiring sudo privileges. -# See https://chromium.googlesource.com/chromium/src/+/main/docs/linux/build_instructions.md -# and https://chromium.googlesource.com/chromium/src/+/HEAD/docs/android_build_instructions.md - -usage() { - echo "Usage: $0 [--options]" - echo "Options:" - echo "--[no-]syms: enable or disable installation of debugging symbols" - echo "--lib32: enable installation of 32-bit libraries, e.g. for V8 snapshot" - echo "--[no-]android: enable or disable installation of android dependencies" - echo "--[no-]arm: enable or disable installation of arm cross toolchain" - echo "--[no-]chromeos-fonts: enable or disable installation of Chrome OS"\ - "fonts" - echo "--[no-]nacl: enable or disable installation of prerequisites for"\ - "building standalone NaCl and all its toolchains" - echo "--[no-]backwards-compatible: enable or disable installation of packages - that are no longer currently needed and have been removed from this - script. Useful for bisection." - echo "--no-prompt: silently select standard options/defaults" - echo "--quick-check: quickly try to determine if dependencies are installed" - echo " (this avoids interactive prompts and sudo commands," - echo " so might not be 100% accurate)" - echo "--unsupported: attempt installation even on unsupported systems" - echo "Script will prompt interactively if options not given." - exit 1 -} - -# Build list of apt packages in dpkg --get-selections format. -build_apt_package_list() { - echo "Building apt package list." >&2 - apt-cache dumpavail | \ - python3 -c 'import re,sys; \ -o = sys.stdin.read(); \ -p = {"i386": ":i386"}; \ -f = re.M | re.S; \ -r = re.compile(r"^Package: (.+?)$.+?^Architecture: (.+?)$", f); \ -m = ["%s%s" % (x, p.get(y, "")) for x, y in re.findall(r, o)]; \ -print("\n".join(m))' -} - -# Checks whether a particular package is available in the repos. -# Uses pre-formatted ${apt_package_list}. -# USAGE: $ package_exists -package_exists() { - if [ -z "${apt_package_list}" ]; then - echo "Call build_apt_package_list() prior to calling package_exists()" >&2 - apt_package_list=$(build_apt_package_list) - fi - # `grep` takes a regex string, so the +'s in package names, e.g. "libstdc++", - # need to be escaped. - local escaped="$(echo $1 | sed 's/[\~\+\.\:-]/\\&/g')" - [ ! -z "$(grep "^${escaped}$" <<< "${apt_package_list}")" ] -} - -do_inst_arm=0 -do_inst_nacl=0 -do_inst_android=0 - -while [ "$1" != "" ] -do - case "$1" in - --syms) do_inst_syms=1;; - --no-syms) do_inst_syms=0;; - --lib32) do_inst_lib32=1;; - --android) do_inst_android=1;; - --no-android) do_inst_android=0;; - --arm) do_inst_arm=1;; - --no-arm) do_inst_arm=0;; - --chromeos-fonts) do_inst_chromeos_fonts=1;; - --no-chromeos-fonts) do_inst_chromeos_fonts=0;; - --nacl) do_inst_nacl=1;; - --no-nacl) do_inst_nacl=0;; - --backwards-compatible) do_inst_backwards_compatible=1;; - --no-backwards-compatible) do_inst_backwards_compatible=0;; - --add-cross-tool-repo) add_cross_tool_repo=1;; - --no-prompt) do_default=1 - do_quietly="-qq --assume-yes" - ;; - --quick-check) do_quick_check=1;; - --unsupported) do_unsupported=1;; - *) usage;; - esac - shift -done - -if [ "$do_inst_arm" = "1" ]; then - do_inst_lib32=1 -fi - -if [ "$do_inst_android" = "1" ]; then - do_inst_lib32=1 -fi - -# Check for lsb_release command in $PATH -if ! which lsb_release > /dev/null; then - echo "ERROR: lsb_release not found in \$PATH" >&2 - echo "try: sudo apt-get install lsb-release" >&2 - exit 1; -fi - -distro_codename=$(lsb_release --codename --short) -distro_id=$(lsb_release --id --short) -supported_codenames="(bionic|focal|jammy)" -supported_ids="(Debian)" -if [ 0 -eq "${do_unsupported-0}" ] && [ 0 -eq "${do_quick_check-0}" ] ; then - if [[ ! $distro_codename =~ $supported_codenames && - ! $distro_id =~ $supported_ids ]]; then - echo -e "ERROR: The only supported distros are\n" \ - "\tUbuntu 18.04 LTS (bionic with EoL April 2028)\n" \ - "\tUbuntu 20.04 LTS (focal with EoL April 2030)\n" \ - "\tUbuntu 22.04 LTS (jammy with EoL April 2032)\n" \ - "\tDebian 10 (buster) or later" >&2 - exit 1 - fi - -# Check system architecture - if ! uname -m | egrep -q "i686|x86_64"; then - echo "Only x86 architectures are currently supported" >&2 - exit - fi -fi - -if [ "x$(id -u)" != x0 ] && [ 0 -eq "${do_quick_check-0}" ]; then - echo "Running as non-root user." - echo "You might have to enter your password one or more times for 'sudo'." - echo -fi - -if [ 0 -eq "${do_quick_check-0}" ] ; then - if [ "$do_inst_lib32" = "1" ] || [ "$do_inst_nacl" = "1" ]; then - sudo dpkg --add-architecture i386 - fi - sudo apt-get update -fi - -# Populate ${apt_package_list} for package_exists() parsing. -apt_package_list=$(build_apt_package_list) - -# Packages needed for chromeos only -chromeos_dev_list="libbluetooth-dev libxkbcommon-dev mesa-common-dev zstd" - -if package_exists realpath; then - chromeos_dev_list="${chromeos_dev_list} realpath" -fi - -# Packages needed for development -dev_list="\ - binutils - bison - bzip2 - cdbs - curl - dbus-x11 - dpkg-dev - elfutils - devscripts - fakeroot - flex - git-core - gperf - libasound2-dev - libatspi2.0-dev - libbrlapi-dev - libbz2-dev - libcairo2-dev - libcap-dev - libc6-dev - libcups2-dev - libcurl4-gnutls-dev - libdrm-dev - libelf-dev - libevdev-dev - libffi-dev - libgbm-dev - libglib2.0-dev - libglu1-mesa-dev - libgtk-3-dev - libkrb5-dev - libnspr4-dev - libnss3-dev - libpam0g-dev - libpci-dev - libpulse-dev - libsctp-dev - libspeechd-dev - libsqlite3-dev - libssl-dev - libudev-dev - libva-dev - libwww-perl - libxshmfence-dev - libxslt1-dev - libxss-dev - libxt-dev - libxtst-dev - lighttpd - locales - openbox - p7zip - patch - perl - pkg-config - rpm - ruby - subversion - uuid-dev - wdiff - x11-utils - xcompmgr - xz-utils - zip - $chromeos_dev_list -" - -# 64-bit systems need a minimum set of 32-bit compat packages for the pre-built -# NaCl binaries. -if file -L /sbin/init | grep -q 'ELF 64-bit'; then - dev_list="${dev_list} libc6-i386 lib32stdc++6" - - # lib32gcc-s1 used to be called lib32gcc1 in older distros. - if package_exists lib32gcc-s1; then - dev_list="${dev_list} lib32gcc-s1" - elif package_exists lib32gcc1; then - dev_list="${dev_list} lib32gcc1" - fi -fi - -# Run-time libraries required by chromeos only -chromeos_lib_list="libpulse0 libbz2-1.0" - -# List of required run-time libraries -common_lib_list="\ - lib32z1 - libasound2 - libatk1.0-0 - libatspi2.0-0 - libc6 - libcairo2 - libcap2 - libcgi-session-perl - libcups2 - libdrm2 - libegl1 - libevdev2 - libexpat1 - libfontconfig1 - libfreetype6 - libgbm1 - libglib2.0-0 - libgl1 - libgtk-3-0 - libpam0g - libpango-1.0-0 - libpangocairo-1.0-0 - libpci3 - libpcre3 - libpixman-1-0 - libspeechd2 - libstdc++6 - libsqlite3-0 - libuuid1 - libwayland-egl1 - libwayland-egl1-mesa - libx11-6 - libx11-xcb1 - libxau6 - libxcb1 - libxcomposite1 - libxcursor1 - libxdamage1 - libxdmcp6 - libxext6 - libxfixes3 - libxi6 - libxinerama1 - libxrandr2 - libxrender1 - libxtst6 - x11-utils - xvfb - zlib1g -" - -if package_exists libffi8; then - common_lib_list="${common_lib_list} libffi8" -elif package_exists libffi7; then - common_lib_list="${common_lib_list} libffi7" -elif package_exists libffi6; then - common_lib_list="${common_lib_list} libffi6" -fi - -# Full list of required run-time libraries -lib_list="\ - $common_lib_list - $chromeos_lib_list -" - -# 32-bit libraries needed e.g. to compile V8 snapshot for Android or armhf -lib32_list="linux-libc-dev:i386 libpci3:i386" - -# 32-bit libraries needed for a 32-bit build -# includes some 32-bit libraries required by the Android SDK -# See https://developer.android.com/sdk/installing/index.html?pkg=tools -lib32_list="$lib32_list - libasound2:i386 - libatk-bridge2.0-0:i386 - libatk1.0-0:i386 - libatspi2.0-0:i386 - libdbus-1-3:i386 - libegl1:i386 - libgl1:i386 - libglib2.0-0:i386 - libncurses5:i386 - libnss3:i386 - libpango-1.0-0:i386 - libpangocairo-1.0-0:i386 - libstdc++6:i386 - libwayland-egl1:i386 - libx11-xcb1:i386 - libxcomposite1:i386 - libxdamage1:i386 - libxkbcommon0:i386 - libxrandr2:i386 - libxtst6:i386 - zlib1g:i386 -" - -# Packages that have been removed from this script. Regardless of configuration -# or options passed to this script, whenever a package is removed, it should be -# added here. -backwards_compatible_list="\ - 7za - fonts-indic - fonts-ipafont - fonts-stix - fonts-thai-tlwg - fonts-tlwg-garuda - g++ - g++-4.8-multilib-arm-linux-gnueabihf - gcc-4.8-multilib-arm-linux-gnueabihf - g++-9-multilib-arm-linux-gnueabihf - gcc-9-multilib-arm-linux-gnueabihf - gcc-arm-linux-gnueabihf - g++-10-multilib-arm-linux-gnueabihf - gcc-10-multilib-arm-linux-gnueabihf - g++-10-arm-linux-gnueabihf - gcc-10-arm-linux-gnueabihf - git-svn - language-pack-da - language-pack-fr - language-pack-he - language-pack-zh-hant - libappindicator-dev - libappindicator1 - libappindicator3-1 - libappindicator3-dev - libdconf-dev - libdconf1 - libdconf1:i386 - libexif-dev - libexif12 - libexif12:i386 - libgbm-dev - libgbm-dev-lts-trusty - libgbm-dev-lts-xenial - libgconf-2-4:i386 - libgconf2-dev - libgl1-mesa-dev - libgl1-mesa-dev-lts-trusty - libgl1-mesa-dev-lts-xenial - libgl1-mesa-glx:i386 - libgl1-mesa-glx-lts-trusty:i386 - libgl1-mesa-glx-lts-xenial:i386 - libgles2-mesa-dev - libgles2-mesa-dev-lts-trusty - libgles2-mesa-dev-lts-xenial - libgtk-3-0:i386 - libgtk2.0-0 - libgtk2.0-0:i386 - libgtk2.0-dev - mesa-common-dev - mesa-common-dev-lts-trusty - mesa-common-dev-lts-xenial - msttcorefonts - python-dev - python-setuptools - ttf-dejavu-core - ttf-indic-fonts - ttf-kochi-gothic - ttf-kochi-mincho - ttf-mscorefonts-installer - xfonts-mathml -" - -if package_exists python-is-python2; then - backwards_compatible_list="${backwards_compatible_list} python-is-python2 python2-dev" -else - backwards_compatible_list="${backwards_compatible_list} python" -fi - -if package_exists python-crypto; then - backwards_compatible_list="${backwards_compatible_list} python-crypto" -fi - -if package_exists python-numpy; then - backwards_compatible_list="${backwards_compatible_list} python-numpy" -fi - -if package_exists python-openssl; then - backwards_compatible_list="${backwards_compatible_list} python-openssl" -fi - -if package_exists python-psutil; then - backwards_compatible_list="${backwards_compatible_list} python-psutil" -fi - -if package_exists python-yaml; then - backwards_compatible_list="${backwards_compatible_list} python-yaml" -fi -if package_exists apache2.2-bin; then - backwards_compatible_list="${backwards_compatible_list} apache2.2-bin" -else - backwards_compatible_list="${backwards_compatible_list} apache2-bin" -fi -if package_exists php8.1-cgi; then - backwards_compatible_list="${backwards_compatible_list} php8.1-cgi libapache2-mod-php8.1" -elif package_exists php8.0-cgi; then - backwards_compatible_list="${backwards_compatible_list} php8.0-cgi libapache2-mod-php8.0" -elif package_exists php7.4-cgi; then - backwards_compatible_list="${backwards_compatible_list} php7.4-cgi libapache2-mod-php7.4" -elif package_exists php7.3-cgi; then - backwards_compatible_list="${backwards_compatible_list} php7.3-cgi libapache2-mod-php7.3" -elif package_exists php7.2-cgi; then - backwards_compatible_list="${backwards_compatible_list} php7.2-cgi libapache2-mod-php7.2" -elif package_exists php7.1-cgi; then - backwards_compatible_list="${backwards_compatible_list} php7.1-cgi libapache2-mod-php7.1" -elif package_exists php7.0-cgi; then - backwards_compatible_list="${backwards_compatible_list} php7.0-cgi libapache2-mod-php7.0" -elif package_exists php8.0-cgi; then - backwards_compatible_list="${backwards_compatible_list} php8.0-cgi libapache2-mod-php8.0" -else - backwards_compatible_list="${backwards_compatible_list} php5-cgi libapache2-mod-php5" -fi - -# arm cross toolchain packages needed to build chrome on armhf -arm_list="libc6-dev-armhf-cross - linux-libc-dev-armhf-cross - g++-arm-linux-gnueabihf" - -# Work around for dependency issue Ubuntu: http://crbug.com/435056 -case $distro_codename in - bionic) - arm_list+=" g++-5-multilib-arm-linux-gnueabihf - gcc-5-multilib-arm-linux-gnueabihf - gcc-arm-linux-gnueabihf" - ;; - focal) - arm_list+=" g++-10-multilib-arm-linux-gnueabihf - gcc-10-multilib-arm-linux-gnueabihf - gcc-arm-linux-gnueabihf" - ;; - jammy) - arm_list+=" gcc-arm-linux-gnueabihf - g++-11-arm-linux-gnueabihf - gcc-11-arm-linux-gnueabihf" - ;; -esac - -# Packages to build NaCl, its toolchains, and its ports. -naclports_list="ant autoconf bison cmake gawk intltool xutils-dev xsltproc" -nacl_list="\ - g++-mingw-w64-i686 - lib32z1-dev - libasound2:i386 - libcap2:i386 - libelf-dev:i386 - libfontconfig1:i386 - libglib2.0-0:i386 - libgpm2:i386 - libncurses5:i386 - lib32ncurses5-dev - libnss3:i386 - libpango-1.0-0:i386 - libssl-dev:i386 - libtinfo-dev - libtinfo-dev:i386 - libtool - libuuid1:i386 - libxcomposite1:i386 - libxcursor1:i386 - libxdamage1:i386 - libxi6:i386 - libxrandr2:i386 - libxss1:i386 - libxtst6:i386 - texinfo - xvfb - ${naclports_list} -" - -# Some package names have changed over time -if package_exists libssl-dev; then - nacl_list="${nacl_list} libssl-dev:i386" -elif package_exists libssl1.1; then - nacl_list="${nacl_list} libssl1.1:i386" -elif package_exists libssl1.0.2; then - nacl_list="${nacl_list} libssl1.0.2:i386" -else - nacl_list="${nacl_list} libssl1.0.0:i386" -fi -if package_exists libtinfo5; then - nacl_list="${nacl_list} libtinfo5" -fi -if package_exists libpng16-16; then - lib_list="${lib_list} libpng16-16" -else - lib_list="${lib_list} libpng12-0" -fi -if package_exists libnspr4; then - lib_list="${lib_list} libnspr4 libnss3" -else - lib_list="${lib_list} libnspr4-0d libnss3-1d" -fi -if package_exists libjpeg-dev; then - dev_list="${dev_list} libjpeg-dev" -else - dev_list="${dev_list} libjpeg62-dev" -fi -if package_exists libudev1; then - dev_list="${dev_list} libudev1" - nacl_list="${nacl_list} libudev1:i386" -else - dev_list="${dev_list} libudev0" - nacl_list="${nacl_list} libudev0:i386" -fi -if package_exists libbrlapi0.8; then - dev_list="${dev_list} libbrlapi0.8" -elif package_exists libbrlapi0.7; then - dev_list="${dev_list} libbrlapi0.7" -elif package_exists libbrlapi0.6; then - dev_list="${dev_list} libbrlapi0.6" -else - dev_list="${dev_list} libbrlapi0.5" -fi -if package_exists libav-tools; then - dev_list="${dev_list} libav-tools" -fi - -# Some packages are only needed if the distribution actually supports -# installing them. -if package_exists appmenu-gtk; then - lib_list="$lib_list appmenu-gtk" -fi -if package_exists libgnome-keyring0; then - lib_list="${lib_list} libgnome-keyring0" -fi -if package_exists libgnome-keyring-dev; then - lib_list="${lib_list} libgnome-keyring-dev" -fi -if package_exists libvulkan-dev; then - dev_list="${dev_list} libvulkan-dev" -fi -if package_exists libvulkan1; then - lib_list="${lib_list} libvulkan1" -fi -if package_exists libinput10; then - lib_list="${lib_list} libinput10" -fi -if package_exists libinput-dev; then - dev_list="${dev_list} libinput-dev" -fi -if package_exists snapcraft; then - dev_list="${dev_list} snapcraft" -fi - -# Cross-toolchain strip is needed for building the sysroots. -if package_exists binutils-arm-linux-gnueabihf; then - dev_list="${dev_list} binutils-arm-linux-gnueabihf" -fi -if package_exists binutils-aarch64-linux-gnu; then - dev_list="${dev_list} binutils-aarch64-linux-gnu" -fi -if package_exists binutils-mipsel-linux-gnu; then - dev_list="${dev_list} binutils-mipsel-linux-gnu" -fi -if package_exists binutils-mips64el-linux-gnuabi64; then - dev_list="${dev_list} binutils-mips64el-linux-gnuabi64" -fi - -# When cross building for arm/Android on 64-bit systems the host binaries -# that are part of v8 need to be compiled with -m32 which means -# that basic multilib support is needed. -if file -L /sbin/init | grep -q 'ELF 64-bit'; then - # gcc-multilib conflicts with the arm cross compiler but - # g++-X.Y-multilib gives us the 32-bit support that we need. Find out the - # appropriate value of X and Y by seeing what version the current - # distribution's g++-multilib package depends on. - multilib_package=$(apt-cache depends g++-multilib --important | \ - grep -E --color=never --only-matching '\bg\+\+-[0-9.]+-multilib\b') - lib32_list="$lib32_list $multilib_package" -fi - -if [ "$do_inst_syms" = "1" ]; then - echo "Including debugging symbols." - - # Debian is in the process of transitioning to automatic debug packages, which - # have the -dbgsym suffix (https://wiki.debian.org/AutomaticDebugPackages). - # Untransitioned packages have the -dbg suffix. And on some systems, neither - # will be available, so exclude the ones that are missing. - dbg_package_name() { - if package_exists "$1-dbgsym"; then - echo "$1-dbgsym" - elif package_exists "$1-dbg"; then - echo "$1-dbg" - fi - } - - for package in "${common_lib_list}"; do - dbg_list="$dbg_list $(dbg_package_name ${package})" - done - - # Debugging symbols packages not following common naming scheme - if [ "$(dbg_package_name libstdc++6)" == "" ]; then - if package_exists libstdc++6-8-dbg; then - dbg_list="${dbg_list} libstdc++6-8-dbg" - elif package_exists libstdc++6-7-dbg; then - dbg_list="${dbg_list} libstdc++6-7-dbg" - elif package_exists libstdc++6-6-dbg; then - dbg_list="${dbg_list} libstdc++6-6-dbg" - elif package_exists libstdc++6-5-dbg; then - dbg_list="${dbg_list} libstdc++6-5-dbg" - elif package_exists libstdc++6-4.9-dbg; then - dbg_list="${dbg_list} libstdc++6-4.9-dbg" - elif package_exists libstdc++6-4.8-dbg; then - dbg_list="${dbg_list} libstdc++6-4.8-dbg" - elif package_exists libstdc++6-4.7-dbg; then - dbg_list="${dbg_list} libstdc++6-4.7-dbg" - elif package_exists libstdc++6-4.6-dbg; then - dbg_list="${dbg_list} libstdc++6-4.6-dbg" - fi - fi - if [ "$(dbg_package_name libatk1.0-0)" == "" ]; then - dbg_list="$dbg_list $(dbg_package_name libatk1.0)" - fi - if [ "$(dbg_package_name libpango-1.0-0)" == "" ]; then - dbg_list="$dbg_list $(dbg_package_name libpango1.0-dev)" - fi -else - echo "Skipping debugging symbols." - dbg_list= -fi - -if [ "$do_inst_lib32" = "1" ]; then - echo "Including 32-bit libraries." -else - echo "Skipping 32-bit libraries." - lib32_list= -fi - -if [ "$do_inst_android" = "1" ]; then - echo "Including Android dependencies." -else - echo "Skipping Android dependencies." -fi - -if [ "$do_inst_arm" = "1" ]; then - echo "Including ARM cross toolchain." -else - echo "Skipping ARM cross toolchain." - arm_list= -fi - -if [ "$do_inst_nacl" = "1" ]; then - echo "Including NaCl, NaCl toolchain, NaCl ports dependencies." -else - echo "Skipping NaCl, NaCl toolchain, NaCl ports dependencies." - nacl_list= -fi - -filtered_backwards_compatible_list= -if [ "$do_inst_backwards_compatible" = "1" ]; then - echo "Including backwards compatible packages." - for package in ${backwards_compatible_list}; do - if package_exists ${package}; then - filtered_backwards_compatible_list+=" ${package}" - fi - done -fi - -# The `sort -r -s -t: -k2` sorts all the :i386 packages to the front, to avoid -# confusing dpkg-query (crbug.com/446172). -packages="$( - echo "${dev_list} ${lib_list} ${dbg_list} ${lib32_list} ${arm_list}" \ - "${nacl_list}" ${filtered_backwards_compatible_list} | tr " " "\n" | \ - sort -u | sort -r -s -t: -k2 | tr "\n" " " -)" - -if [ 1 -eq "${do_quick_check-0}" ] ; then - if ! missing_packages="$(dpkg-query -W -f ' ' ${packages} 2>&1)"; then - # Distinguish between packages that actually aren't available to the - # system (i.e. not in any repo) and packages that just aren't known to - # dpkg (i.e. managed by apt). - missing_packages="$(echo "${missing_packages}" | awk '{print $NF}')" - not_installed="" - unknown="" - for p in ${missing_packages}; do - if apt-cache show ${p} > /dev/null 2>&1; then - not_installed="${p}\n${not_installed}" - else - unknown="${p}\n${unknown}" - fi - done - if [ -n "${not_installed}" ]; then - echo "WARNING: The following packages are not installed:" - echo -e "${not_installed}" | sed -e "s/^/ /" - fi - if [ -n "${unknown}" ]; then - echo "WARNING: The following packages are unknown to your system" - echo "(maybe missing a repo or need to 'sudo apt-get update'):" - echo -e "${unknown}" | sed -e "s/^/ /" - fi - exit 1 - fi - exit 0 -fi - -echo "Finding missing packages..." -# Intentionally leaving $packages unquoted so it's more readable. -echo "Packages required: " $packages -echo -query_cmd="apt-get --just-print install $(echo $packages)" -if cmd_output="$(LANGUAGE=en LANG=C $query_cmd)"; then - new_list=$(echo "$cmd_output" | - sed -e '1,/The following NEW packages will be installed:/d;s/^ //;t;d' | - sed 's/ *$//') - upgrade_list=$(echo "$cmd_output" | - sed -e '1,/The following packages will be upgraded:/d;s/^ //;t;d' | - sed 's/ *$//') - if [ -z "$new_list" ] && [ -z "$upgrade_list" ]; then - echo "No missing packages, and the packages are up to date." - else - echo "Installing and upgrading packages: $new_list $upgrade_list." - sudo apt-get install ${do_quietly-} ${new_list} ${upgrade_list} - fi - echo -else - # An apt-get exit status of 100 indicates that a real error has occurred. - - # I am intentionally leaving out the '"'s around query_cmd, - # as this makes it easier to cut and paste the output - echo "The following command failed: " ${query_cmd} - echo - echo "It produced the following output:" - echo "$cmd_output" - echo - echo "You will have to install the above packages yourself." - echo - exit 100 -fi - -# Install the Chrome OS default fonts. This must go after running -# apt-get, since install-chromeos-fonts depends on curl. -if [ "$do_inst_chromeos_fonts" != "0" ]; then - echo - echo "Installing Chrome OS fonts." - dir=`echo $0 | sed -r -e 's/\/[^/]+$//'` - if ! sudo $dir/linux/install-chromeos-fonts.py; then - echo "ERROR: The installation of the Chrome OS default fonts failed." - if [ `stat -f -c %T $dir` == "nfs" ]; then - echo "The reason is that your repo is installed on a remote file system." - else - echo "This is expected if your repo is installed on a remote file system." - fi - echo "It is recommended to install your repo on a local file system." - echo "You can skip the installation of the Chrome OS default fonts with" - echo "the command line option: --no-chromeos-fonts." - exit 1 - fi -else - echo "Skipping installation of Chrome OS fonts." -fi - -echo "Installing locales." -CHROMIUM_LOCALES="da_DK.UTF-8 fr_FR.UTF-8 he_IL.UTF-8 zh_TW.UTF-8" -LOCALE_GEN=/etc/locale.gen -if [ -e ${LOCALE_GEN} ]; then - OLD_LOCALE_GEN="$(cat /etc/locale.gen)" - for CHROMIUM_LOCALE in ${CHROMIUM_LOCALES}; do - sudo sed -i "s/^# ${CHROMIUM_LOCALE}/${CHROMIUM_LOCALE}/" ${LOCALE_GEN} - done - # Regenerating locales can take a while, so only do it if we need to. - if (echo "${OLD_LOCALE_GEN}" | cmp -s ${LOCALE_GEN}); then - echo "Locales already up-to-date." - else - sudo locale-gen - fi -else - for CHROMIUM_LOCALE in ${CHROMIUM_LOCALES}; do - sudo locale-gen ${CHROMIUM_LOCALE} - done -fi +exec "$(cd $(dirname $0) && pwd)/install-build-deps.py" "$@" diff --git a/build/ios/PRESUBMIT.py b/build/ios/PRESUBMIT.py index 0c7a355..a83d1a4 100644 --- a/build/ios/PRESUBMIT.py +++ b/build/ios/PRESUBMIT.py @@ -4,7 +4,6 @@ PRESUBMIT_VERSION = '2.0.0' -USE_PYTHON3 = True TEST_PATTERNS = [r'.+_test.py$'] @@ -12,9 +11,4 @@ def CheckUnitTests(input_api, output_api): # Runs all unit tests under the build/ios folder. return input_api.canned_checks.RunUnitTestsInDirectory( - input_api, - output_api, - '.', - files_to_check=TEST_PATTERNS, - run_on_python2=False, - skip_shebang_check=True) + input_api, output_api, '.', files_to_check=TEST_PATTERNS) diff --git a/build/ios/extension_bundle_data.gni b/build/ios/extension_bundle_data.gni index 78006f1..3e824e8 100644 --- a/build/ios/extension_bundle_data.gni +++ b/build/ios/extension_bundle_data.gni @@ -10,14 +10,23 @@ # name of the extension target to package; the extension # bundle name must be derived from the target name # +# extension_name: +# (optional) name of the extension appex file; derived from +# the target name if omitted +# template("extension_bundle_data") { assert(defined(invoker.extension_target), "extension_target must be defined for $target_name") + _extension_name = get_label_info(invoker.extension_target, "name") + ".appex" + if (defined(invoker.extension_name)) { + _extension_name = invoker.extension_name + } + bundle_data(target_name) { public_deps = [ invoker.extension_target ] outputs = [ "{{bundle_contents_dir}}/PlugIns/{{source_file_part}}" ] - sources = [ get_label_info(invoker.extension_target, "root_out_dir") + "/" + - get_label_info(invoker.extension_target, "name") + ".appex" ] + sources = [ get_label_info(invoker.extension_target, "root_out_dir") + + "/$_extension_name" ] } } diff --git a/build/ios/intent_definition.gni b/build/ios/intent_definition.gni index 29f859c..652ff66 100644 --- a/build/ios/intent_definition.gni +++ b/build/ios/intent_definition.gni @@ -111,7 +111,6 @@ template("intent_definition") { } sources = _generate_source_output - configs += [ "//build/config/compiler:enable_arc" ] deps += [ ":$_compile_intent_bundle", ":$_generate_source_target", diff --git a/build/ios/presubmit_support_test.py b/build/ios/presubmit_support_test.py index 7db63e7..6bbc602 100755 --- a/build/ios/presubmit_support_test.py +++ b/build/ios/presubmit_support_test.py @@ -142,6 +142,24 @@ def testExcludeDuplicates(self): 'test_data/duplicates', '.') self.assertEqual([], results) + def testCheckOutsideGloblistDir(self): + """ + Checks that including files outside the globlist directory is an error. + """ + results = presubmit_support.CheckBundleData( + self.mock_input_api, self.mock_output_api, + 'test_data/outside_globlist_dir', '.') + self.assertEqual(1, len(results)) + + def testCheckIgnoreOutsideGloblistDir(self): + """ + Checks that files outside the globlist directory can be ignored. + """ + results = presubmit_support.CheckBundleData( + self.mock_input_api, self.mock_output_api, + 'test_data/ignore_outside_globlist_dir', '.') + self.assertEqual([], results) + if __name__ == '__main__': unittest.main() diff --git a/build/ios/test_data/ignore_outside_globlist_dir.filelist b/build/ios/test_data/ignore_outside_globlist_dir.filelist new file mode 100644 index 0000000..a306b7e --- /dev/null +++ b/build/ios/test_data/ignore_outside_globlist_dir.filelist @@ -0,0 +1,8 @@ +# Copyright 2023 The Chromium Authors +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. +# NOTE: this file is generated by build/ios/update_bundle_filelist.py +# If it requires updating, you should get a presubmit error with +# instructions on how to regenerate. Otherwise, do not edit. +presubmit_support_test.py +test_data/subdirectory/baz.txt diff --git a/build/ios/test_data/ignore_outside_globlist_dir.globlist b/build/ios/test_data/ignore_outside_globlist_dir.globlist new file mode 100644 index 0000000..471a0c4 --- /dev/null +++ b/build/ios/test_data/ignore_outside_globlist_dir.globlist @@ -0,0 +1,8 @@ +# Copyright 2023 The Chromium Authors +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +test_data/subdirectory/* +# push(ignore-relative) +presubmit_support_test.py +# pop(ignore-relative) diff --git a/build/ios/test_data/outside_globlist_dir.filelist b/build/ios/test_data/outside_globlist_dir.filelist new file mode 100644 index 0000000..a81d5ad --- /dev/null +++ b/build/ios/test_data/outside_globlist_dir.filelist @@ -0,0 +1,8 @@ +# Copyright 2023 The Chromium Authors +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. +# NOTE: this file is generated by build/ios/update_bundle_filelist.py +# If it requires updating, you should get a presubmit error with +# instructions on how to regenerate. Otherwise, do not edit. +test_data/subdirectory/baz.txt +presubmit_support_test.py diff --git a/build/ios/test_data/outside_globlist_dir.globlist b/build/ios/test_data/outside_globlist_dir.globlist new file mode 100644 index 0000000..31bb073 --- /dev/null +++ b/build/ios/test_data/outside_globlist_dir.globlist @@ -0,0 +1,6 @@ +# Copyright 2023 The Chromium Authors +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +test_data/subdirectory/* +presubmit_support_test.py diff --git a/build/ios/update_bundle_filelist.py b/build/ios/update_bundle_filelist.py index ee8261f..2e21205 100755 --- a/build/ios/update_bundle_filelist.py +++ b/build/ios/update_bundle_filelist.py @@ -58,6 +58,9 @@ _HEADER_HEIGHT = 6 +_START_IGNORE_EXPANSIONS_OUTSIDE_GLOBLIST_DIR = '# push(ignore-relative)' +_STOP_IGNORE_EXPANSIONS_OUTSIDE_GLOBLIST_DIR = '# pop(ignore-relative)' + def parse_filelist(filelist_name): try: @@ -123,60 +126,76 @@ def combine_potentially_repository_root_relative_paths(a, b): def parse_and_expand_globlist(globlist_name, glob_root): - try: - # The following expects glob_root not to end in a trailing slash. - if glob_root.endswith('/'): - glob_root = glob_root[:-1] + # The following expects glob_root not to end in a trailing slash. + if glob_root.endswith('/'): + glob_root = glob_root[:-1] + + check_expansions_outside_globlist_dir = True + globlist_dir = os.path.dirname(globlist_name) + + with open(globlist_name) as globlist: + # Paths in |files| and |to_check| must use unix separators. Using a set + # ensures no unwanted duplicates. The files in |to_check| must be in the + # globroot or a subdirectory. + files = set() + to_check = set() + for g in globlist: + g = g.strip() + + # Ignore blank lines + if not g: + continue + + # Toggle error checking. + if g == _START_IGNORE_EXPANSIONS_OUTSIDE_GLOBLIST_DIR: + check_expansions_outside_globlist_dir = False + elif g == _STOP_IGNORE_EXPANSIONS_OUTSIDE_GLOBLIST_DIR: + check_expansions_outside_globlist_dir = True + + # Ignore comments. + if not g or g.startswith('#'): + continue + + # Exclusions are prefixed with '-'. + is_exclusion = g.startswith('-') + if is_exclusion: + g = g[1:] - with open(globlist_name) as globlist: - # Paths in |files| must use unix separators. Using a set ensures no - # unwanted duplicates. - files = set() - for g in globlist: - g = g.strip() - - # Ignore blank lines and comments. - if not g or g.startswith('#'): - continue + (combined, + root_relative) = combine_potentially_repository_root_relative_paths( + glob_root, g) - # Exclusions are prefixed with '-'. - is_exclusion = g.startswith('-') - if is_exclusion: - g = g[1:] + prefix_size = len(glob_root) + if not root_relative: + # We need to account for the separator. + prefix_size += 1 - (combined, - root_relative) = combine_potentially_repository_root_relative_paths( - glob_root, g) + expansion = glob.glob(combined, recursive=True) - prefix_size = len(glob_root) - if not root_relative: - # We need to account for the separator. - prefix_size += 1 + # Filter out directories. + expansion = [f for f in expansion if os.path.isfile(f)] - expansion = glob.glob(combined, recursive=True) + if check_expansions_outside_globlist_dir: + for f in expansion: + relative = os.path.relpath(f, globlist_dir) + if relative.startswith('..'): + raise Exception(f'Globlist expansion outside globlist dir: {f}') - # Filter out directories. - expansion = [f for f in expansion if os.path.isfile(f)] + # Make relative to |glob_root|. + expansion = [f[prefix_size:] for f in expansion] - # Make relative to |glob_root|. - expansion = [f[prefix_size:] for f in expansion] + # Handle Windows backslashes + expansion = [f.replace('\\', '/') for f in expansion] - # Handle Windows backslashes - expansion = [f.replace('\\', '/') for f in expansion] + # Since paths in |expansion| only use unix separators, it is safe to + # compare for both the purpose of exclusion and addition. + if is_exclusion: + files = files.difference(expansion) + else: + files = files.union(expansion) - # Since paths in |expansion| only use unix separators, it is safe to - # compare for both the purpose of exclusion and addition. - if is_exclusion: - files = files.difference(expansion) - else: - files = files.union(expansion) - - # Return a sorted list. - return sorted(files) - - except Exception as e: - print_error(f'Could not read glob list: {globlist_name}', f'{type(e)}: {e}') - return [] + # Return a sorted list. + return sorted(files) def compare_lists(a, b): @@ -203,7 +222,14 @@ def write_filelist(filelist_name, files, header): def process_filelist(filelist, globlist, globroot, check=False, verbose=False): - files_from_globlist = parse_and_expand_globlist(globlist, globroot) + files_from_globlist = [] + try: + files_from_globlist = parse_and_expand_globlist(globlist, globroot) + except Exception as e: + if verbose: + print_error(f'Could not read glob list: {globlist}', f'{type(e)}: {e}') + return 1 + (files, header) = parse_filelist(filelist) (additions, removals) = compare_lists(files, files_from_globlist) diff --git a/build/lacros/PRESUBMIT.py b/build/lacros/PRESUBMIT.py index 642ee7e..f8b13b8 100644 --- a/build/lacros/PRESUBMIT.py +++ b/build/lacros/PRESUBMIT.py @@ -3,7 +3,6 @@ # found in the LICENSE file. """Presubmit script for changes affecting //build/lacros""" -USE_PYTHON3 = True def _CommonChecks(input_api, output_api): @@ -11,12 +10,7 @@ def _CommonChecks(input_api, output_api): if input_api.is_windows: return [] tests = input_api.canned_checks.GetUnitTestsInDirectory( - input_api, - output_api, - '.', [r'^.+_test\.py$'], - run_on_python2=False, - run_on_python3=True, - skip_shebang_check=True) + input_api, output_api, '.', [r'^.+_test\.py$']) return input_api.RunTests(tests) diff --git a/build/lacros/README.md b/build/lacros/README.md new file mode 100644 index 0000000..be0a243 --- /dev/null +++ b/build/lacros/README.md @@ -0,0 +1,11 @@ +This folder contains code for running lacros in tests. + +This includes: +* test_runner.py +Run linux-lacros related tests. + +* mojo_connection_lacros_launcher +Script for launching lacros for debugging. + +* lacros_resource_sizes.py +Monitoring lacros binary size script used by builders. diff --git a/build/lacros/lacros_resource_sizes.py b/build/lacros/lacros_resource_sizes.py index 6004ae7..bcb471f 100755 --- a/build/lacros/lacros_resource_sizes.py +++ b/build/lacros/lacros_resource_sizes.py @@ -124,6 +124,8 @@ def __eq__(self, other): title='Group: Other PAKs'), _Group(paths=['snapshot_blob.bin'], title='Group: Misc'), _Group(paths=['locales/'], title='Dir: locales'), + _Group(paths=['resources/accessibility/'], + title='Dir: resources/accessibility'), _Group(paths=['WidevineCdm/'], title='Dir: WidevineCdm'), ] diff --git a/build/lacros/lacros_resource_sizes.pydeps b/build/lacros/lacros_resource_sizes.pydeps index c2437ca..dc6a116 100644 --- a/build/lacros/lacros_resource_sizes.pydeps +++ b/build/lacros/lacros_resource_sizes.pydeps @@ -1,5 +1,6 @@ # Generated by running: # build/print_python_deps.py --root build/lacros --output build/lacros/lacros_resource_sizes.pydeps build/lacros/lacros_resource_sizes.py +../../third_party/catapult/third_party/six/six.py ../../third_party/catapult/third_party/vinn/vinn/__init__.py ../../third_party/catapult/third_party/vinn/vinn/_vinn.py ../../third_party/catapult/tracing/tracing/__init__.py diff --git a/build/lacros/mojo_connection_lacros_launcher.py b/build/lacros/mojo_connection_lacros_launcher.py index a0f2cfc..2fb5812 100755 --- a/build/lacros/mojo_connection_lacros_launcher.py +++ b/build/lacros/mojo_connection_lacros_launcher.py @@ -14,7 +14,7 @@ XDG_RUNTIME_DIR=/tmp/ash_chrome_xdg_runtime ./out/ash/chrome \\ --user-data-dir=/tmp/ash-chrome --enable-wayland-server \\ - --no-startup-window --enable-features=LacrosSupport \\ + --no-startup-window --enable-features=LacrosOnly \\ --lacros-mojo-socket-for-testing=/tmp/lacros.sock Then, run this script with '-s' pointing to the same socket path used to diff --git a/build/lacros/test_runner.py b/build/lacros/test_runner.py index 9b1349a..ba15266 100755 --- a/build/lacros/test_runner.py +++ b/build/lacros/test_runner.py @@ -9,7 +9,7 @@ to setup build directory with the lacros-chrome-on-linux build configuration, and corresponding test targets are built successfully. - * Example usages: +Example usages ./build/lacros/test_runner.py test out/lacros/url_unittests ./build/lacros/test_runner.py test out/lacros/browser_tests @@ -44,6 +44,13 @@ will try to find the ash major version and Lacros major version. If ash is newer(major version larger), the runner will not run any tests and just returns success. + +Interactively debugging tests + + Any of the previous examples accept the switches + --gdb + --lldb + to run the tests in the corresponding debugger. """ import argparse @@ -431,6 +438,66 @@ def _ClearDir(dirpath): os.remove(e.path) +def _LaunchDebugger(args, forward_args, test_env): + """Launches the requested debugger. + + This is used to wrap the test invocation in a debugger. It returns the + created Popen class of the debugger process. + + Args: + args (dict): Args for this script. + forward_args (list): Args to be forwarded to the test command. + test_env (dict): Computed environment variables for the test. + """ + logging.info('Starting debugger.') + + # Redirect fatal signals to "ignore." When running an interactive debugger, + # these signals should go only to the debugger so the user can break back out + # of the debugged test process into the debugger UI without killing this + # parent script. + for sig in (signal.SIGTERM, signal.SIGINT): + signal.signal(sig, signal.SIG_IGN) + + # Force the tests into single-process-test mode for debugging unless manually + # specified. Otherwise the tests will run in a child process that the debugger + # won't be attached to and the debugger won't do anything. + if not ("--single-process" in forward_args + or "--single-process-tests" in forward_args): + forward_args += ["--single-process-tests"] + + # Adding --single-process-tests can cause some tests to fail when they're + # run in the same process. Forcing the user to specify a filter will prevent + # a later error. + if not [i for i in forward_args if i.startswith("--gtest_filter")]: + logging.error("""Interactive debugging requested without --gtest_filter + +This script adds --single-process-tests to support interactive debugging but +some tests will fail in this mode unless run independently. To debug a test +specify a --gtest_filter=Foo.Bar to name the test you want to debug. +""") + sys.exit(1) + + # This code attempts to source the debugger configuration file. Some + # users will have this in their init but sourcing it more than once is + # harmless and helps people that haven't configured it. + if args.gdb: + gdbinit_file = os.path.normpath( + os.path.join(os.path.realpath(__file__), "../../../tools/gdb/gdbinit")) + debugger_command = [ + 'gdb', '--init-eval-command', 'source ' + gdbinit_file, '--args' + ] + else: + lldbinit_dir = os.path.normpath( + os.path.join(os.path.realpath(__file__), "../../../tools/lldb")) + debugger_command = [ + 'lldb', '-O', + "script sys.path[:0] = ['%s']" % lldbinit_dir, '-O', + 'script import lldbinit', '--' + ] + debugger_command += [args.command] + forward_args + return subprocess.Popen(debugger_command, env=test_env) + + def _RunTestWithAshChrome(args, forward_args): """Runs tests with ash-chrome. @@ -483,6 +550,7 @@ def _RunTestWithAshChrome(args, forward_args): # Starts Ash-Chrome. tmp_xdg_dir_name = tempfile.mkdtemp() tmp_ash_data_dir_name = tempfile.mkdtemp() + tmp_unique_ash_dir_name = tempfile.mkdtemp() # Please refer to below file for how mojo connection is set up in testing. # //chrome/browser/ash/crosapi/test_mojo_connection_manager.h @@ -502,6 +570,7 @@ def _RunTestWithAshChrome(args, forward_args): '--user-data-dir=%s' % tmp_ash_data_dir_name, '--enable-wayland-server', '--no-startup-window', + '--disable-input-event-activation-protection', '--disable-lacros-keep-alive', '--disable-login-lacros-opening', '--enable-field-trial-config', @@ -524,6 +593,7 @@ def _RunTestWithAshChrome(args, forward_args): logging.info('Running ash with "ASH_WRAPPER": %s', ash_wrapper) ash_cmd = list(ash_wrapper.split()) + ash_cmd + ash_process = None ash_process_has_started = False total_tries = 3 num_tries = 0 @@ -533,6 +603,8 @@ def _RunTestWithAshChrome(args, forward_args): ash_log = None ash_log_path = None + run_tests_in_debugger = args.gdb or args.lldb + if args.ash_logging_path: ash_log_path = args.ash_logging_path # Put ash logs in a separate file on bots. @@ -543,6 +615,12 @@ def _RunTestWithAshChrome(args, forward_args): if summary_file: ash_log_path = os.path.join(os.path.dirname(summary_file), 'ash_chrome.log') + elif run_tests_in_debugger: + # The debugger is unusable when all Ash logs are getting dumped to the + # same terminal. Redirect to a log file if there isn't one specified. + logging.info("Running in the debugger and --ash-logging-path is not " + + "specified, defaulting to the current directory.") + ash_log_path = 'ash_chrome.log' if ash_log_path: ash_log = open(ash_log_path, 'a') @@ -565,8 +643,15 @@ def _RunTestWithAshChrome(args, forward_args): num_tries += 1 ash_start_time = time.monotonic() logging.info('Starting ash-chrome.') + + # Using preexec_fn=os.setpgrp here will detach the forked process from + # this process group before exec-ing Ash. This prevents interactive + # Control-C from being seen by Ash. Otherwise Control-C in a debugger + # can kill Ash out from under the debugger. In non-debugger cases, this + # script attempts to clean up the spawned processes nicely. ash_process = subprocess.Popen(ash_cmd, env=ash_env, + preexec_fn=os.setpgrp, stdout=ash_stdout, stderr=subprocess.STDOUT) @@ -574,6 +659,7 @@ def _RunTestWithAshChrome(args, forward_args): logging.info('Symbolizing ash logs with asan symbolizer.') ash_symbolize_process = subprocess.Popen([_ASAN_SYMBOLIZER_PATH], stdin=ash_process.stdout, + preexec_fn=os.setpgrp, stdout=ash_symbolize_stdout, stderr=subprocess.STDOUT) # Allow ash_process to receive a SIGPIPE if symbolize process exits. @@ -608,21 +694,28 @@ def _RunTestWithAshChrome(args, forward_args): if enable_mojo_crosapi: forward_args.append(lacros_mojo_socket_arg) + forward_args.append('--ash-chrome-path=' + ash_chrome_file) + forward_args.append('--unique-ash-dir=' + tmp_unique_ash_dir_name) + test_env = os.environ.copy() test_env['WAYLAND_DISPLAY'] = ash_wayland_socket_name test_env['EGL_PLATFORM'] = 'surfaceless' test_env['XDG_RUNTIME_DIR'] = tmp_xdg_dir_name - logging.info('Starting test process.') - test_process = subprocess.Popen([args.command] + forward_args, - env=test_env, - stdout=test_stdout, - stderr=subprocess.STDOUT) - if should_symbolize: - logging.info('Symbolizing test logs with asan symbolizer.') - test_symbolize_process = subprocess.Popen([_ASAN_SYMBOLIZER_PATH], - stdin=test_process.stdout) - # Allow test_process to receive a SIGPIPE if symbolize process exits. - test_process.stdout.close() + + if run_tests_in_debugger: + test_process = _LaunchDebugger(args, forward_args, test_env) + else: + logging.info('Starting test process.') + test_process = subprocess.Popen([args.command] + forward_args, + env=test_env, + stdout=test_stdout, + stderr=subprocess.STDOUT) + if should_symbolize: + logging.info('Symbolizing test logs with asan symbolizer.') + test_symbolize_process = subprocess.Popen([_ASAN_SYMBOLIZER_PATH], + stdin=test_process.stdout) + # Allow test_process to receive a SIGPIPE if symbolize process exits. + test_process.stdout.close() return test_process.wait() finally: @@ -633,6 +726,7 @@ def _RunTestWithAshChrome(args, forward_args): shutil.rmtree(tmp_xdg_dir_name, ignore_errors=True) shutil.rmtree(tmp_ash_data_dir_name, ignore_errors=True) + shutil.rmtree(tmp_unique_ash_dir_name, ignore_errors=True) def _RunTestDirectly(args, forward_args): @@ -738,6 +832,14 @@ def Main(): help='Path to an locally built ash-chrome to use for testing. ' 'In general you should build //chrome/test:test_ash_chrome.') + debugger_group = test_parser.add_mutually_exclusive_group() + debugger_group.add_argument('--gdb', + action='store_true', + help='Run the test in GDB.') + debugger_group.add_argument('--lldb', + action='store_true', + help='Run the test in LLDB.') + # This is for version skew testing. The current CI/CQ builder builds # an ash chrome and pass it using --ash-chrome-path. In order to use the same # builder for version skew testing, we use a new argument to override @@ -762,6 +864,11 @@ def Main(): help='Whether to run subprocess log outputs through the asan symbolizer.') args = arg_parser.parse_known_args() + if not hasattr(args[0], "func"): + # No command specified. + print(__doc__) + sys.exit(1) + return args[0].func(args[0], args[1]) diff --git a/build/lacros/test_runner_test.py b/build/lacros/test_runner_test.py index da79423..0e2d665 100755 --- a/build/lacros/test_runner_test.py +++ b/build/lacros/test_runner_test.py @@ -75,7 +75,7 @@ def test_do_not_require_ash_chrome(self, command, mock_popen, mock_download, return_value=['wayland-exo', 'wayland-exo.lock']) @mock.patch.object(tempfile, 'mkdtemp', - side_effect=['/tmp/xdg', '/tmp/ash-data']) + side_effect=['/tmp/xdg', '/tmp/ash-data', '/tmp/unique']) @mock.patch.object(os.environ, 'copy', side_effect=[{}, {}]) @mock.patch.object(os.path, 'exists', return_value=True) @mock.patch.object(os.path, 'isfile', return_value=True) @@ -103,6 +103,7 @@ def test_require_ash_chrome(self, command, mock_popen, mock_download, *_): '--user-data-dir=/tmp/ash-data', '--enable-wayland-server', '--no-startup-window', + '--disable-input-event-activation-protection', '--disable-lacros-keep-alive', '--disable-login-lacros-opening', '--enable-field-trial-config', @@ -122,9 +123,10 @@ def test_require_ash_chrome(self, command, mock_popen, mock_download, *_): test_args = mock_popen.call_args_list[1][0][0] if command == 'lacros_chrome_browsertests': self.assertListEqual([ - command, - '--test-launcher-filter-file=/a/b/filter', + command, '--test-launcher-filter-file=/a/b/filter', '--lacros-mojo-socket-for-testing=/tmp/ash-data/lacros.sock', + '--ash-chrome-path=' + ash_chrome_args[0], + '--unique-ash-dir=/tmp/unique' ], test_args) else: self.assertListEqual(test_args[:len(command_parts)], command_parts) @@ -223,7 +225,7 @@ def test_command_arguments(self, mock_popen, mock_download, _): return_value=['wayland-exo', 'wayland-exo.lock']) @mock.patch.object(tempfile, 'mkdtemp', - side_effect=['/tmp/xdg', '/tmp/ash-data']) + side_effect=['/tmp/xdg', '/tmp/ash-data', '/tmp/unique']) @mock.patch.object(os.environ, 'copy', side_effect=[{}, {}]) @mock.patch.object(os.path, 'exists', return_value=True) @mock.patch.object(os.path, 'isfile', return_value=True) diff --git a/build/linux/install-chromeos-fonts.py b/build/linux/install-chromeos-fonts.py index 35cd3bc..c0634b5 100755 --- a/build/linux/install-chromeos-fonts.py +++ b/build/linux/install-chromeos-fonts.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -# Copyright 2013 The Chromium Authors. All rights reserved. +# Copyright 2013 The Chromium Authors # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. @@ -7,7 +7,6 @@ # This script can be run manually (as root), but is also run as part # install-build-deps.sh. -from __future__ import print_function import os import shutil @@ -104,7 +103,12 @@ def main(args): true true hintslight - rgb + + none diff --git a/build/linux/strip_binary.py b/build/linux/strip_binary.py index c08b993..82801c7 100755 --- a/build/linux/strip_binary.py +++ b/build/linux/strip_binary.py @@ -1,6 +1,6 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # -# Copyright 2021 The Chromium Authors. All rights reserved. +# Copyright 2021 The Chromium Authors # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. diff --git a/build/linux/sysroot_scripts/build_and_upload.py b/build/linux/sysroot_scripts/build_and_upload.py index 0301130..9e3338a 100755 --- a/build/linux/sysroot_scripts/build_and_upload.py +++ b/build/linux/sysroot_scripts/build_and_upload.py @@ -1,33 +1,29 @@ #!/usr/bin/env python3 -# Copyright 2016 The Chromium Authors. All rights reserved. +# Copyright 2016 The Chromium Authors # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. -"""Automates running BuildPackageLists, BuildSysroot, and -UploadSysroot for each supported arch of each sysroot creator. +"""Automates running sysroot-creator.sh for each supported arch. """ -from __future__ import print_function -import glob import hashlib import json import multiprocessing import os -import re -import string +import shlex import subprocess import sys +ARCHES = ("amd64", "i386", "armhf", "arm64", "armel", "mipsel", "mips64el") -def run_script(args): - fnull = open(os.devnull, 'w') - subprocess.check_call(args, stdout=fnull, stderr=fnull) +DEFAULT_URL_PREFIX = "https://commondatastorage.googleapis.com/" \ + "chrome-linux-sysroot/toolchain" def sha1sumfile(filename): sha1 = hashlib.sha1() - with open(filename, 'rb') as f: + with open(filename, "rb") as f: while True: data = f.read(65536) if not data: @@ -37,52 +33,58 @@ def sha1sumfile(filename): def get_proc_output(args): - return subprocess.check_output(args, encoding='utf-8').strip() + return subprocess.check_output(args, encoding="utf-8").strip() -def build_and_upload(script_path, distro, release, arch, lock): +def build_and_upload(script_path, distro, release, key, arch, lock): script_dir = os.path.dirname(os.path.realpath(__file__)) - run_script([script_path, 'BuildSysroot' + arch]) - run_script([script_path, 'UploadSysroot' + arch]) + subprocess.check_output([script_path, "build", arch]) + subprocess.check_output([script_path, "upload", arch]) - tarball = '%s_%s_%s_sysroot.tar.xz' % (distro, release, arch.lower()) + tarball = "%s_%s_%s_sysroot.tar.xz" % (distro, release, arch.lower()) tarxz_path = os.path.join(script_dir, "..", "..", "..", "out", "sysroot-build", release, tarball) sha1sum = sha1sumfile(tarxz_path) - sysroot_dir = '%s_%s_%s-sysroot' % (distro, release, arch.lower()) + sysroot_dir = "%s_%s_%s-sysroot" % (distro, release, arch.lower()) sysroot_metadata = { - 'Tarball': tarball, - 'Sha1Sum': sha1sum, - 'SysrootDir': sysroot_dir, + "Key": key, + "Sha1Sum": sha1sum, + "SysrootDir": sysroot_dir, + "Tarball": tarball, + "URL": DEFAULT_URL_PREFIX, } with lock: - fname = os.path.join(script_dir, 'sysroots.json') + fname = os.path.join(script_dir, "sysroots.json") sysroots = json.load(open(fname)) - with open(fname, 'w') as f: + with open(fname, "w") as f: sysroots["%s_%s" % (release, arch.lower())] = sysroot_metadata f.write( - json.dumps( - sysroots, sort_keys=True, indent=4, separators=(',', ': '))) - f.write('\n') + json.dumps(sysroots, sort_keys=True, indent=4, + separators=(",", ": "))) + f.write("\n") def main(): script_dir = os.path.dirname(os.path.realpath(__file__)) + script_path = os.path.join(script_dir, "sysroot-creator.sh") + lexer = shlex.shlex(open(script_path).read(), posix=True) + lexer.wordchars += "=" + vars = dict(kv.split("=") for kv in list(lexer) if "=" in kv) + distro = vars["DISTRO"] + release = vars["RELEASE"] + key = "%s-%s" % (vars["ARCHIVE_TIMESTAMP"], vars["SYSROOT_RELEASE"]) + procs = [] lock = multiprocessing.Lock() - for filename in glob.glob(os.path.join(script_dir, 'sysroot-creator-*.sh')): - script_path = os.path.join(script_dir, filename) - distro = get_proc_output([script_path, 'PrintDistro']) - release = get_proc_output([script_path, 'PrintRelease']) - architectures = get_proc_output([script_path, 'PrintArchitectures']) - for arch in architectures.split('\n'): - proc = multiprocessing.Process( - target=build_and_upload, - args=(script_path, distro, release, arch, lock)) - procs.append(("%s %s (%s)" % (distro, release, arch), proc)) - proc.start() + for arch in ARCHES: + proc = multiprocessing.Process( + target=build_and_upload, + args=(script_path, distro, release, key, arch, lock), + ) + procs.append(("%s %s (%s)" % (distro, release, arch), proc)) + proc.start() for _, proc in procs: proc.join() @@ -96,5 +98,5 @@ def main(): return failures -if __name__ == '__main__': +if __name__ == "__main__": sys.exit(main()) diff --git a/build/linux/sysroot_scripts/debian_archive_unstable.gpg b/build/linux/sysroot_scripts/debian_archive_unstable.gpg deleted file mode 100644 index 81e2624c5f3845a1642d9379bf47ed2221a291a4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 94381 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

^@JshjYRDQ8~aK!RNCANDOKnV(a5JM&{>{; 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 P4WwqbAxNZ&`o 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 Fe*lF0>74)o diff --git a/build/linux/sysroot_scripts/generate_debian_archive_unstable_gpg.sh b/build/linux/sysroot_scripts/generate_debian_archive_unstable_gpg.sh deleted file mode 100755 index 326ff21..0000000 --- a/build/linux/sysroot_scripts/generate_debian_archive_unstable_gpg.sh +++ /dev/null @@ -1,41 +0,0 @@ -#!/bin/bash -# Copyright 2019 The Chromium Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -set -o nounset -set -o errexit - -SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" - -KEYS=( - # Debian Archive Automatic Signing Key (11/bullseye) - "73A4F27B8DD47936" - # Debian Security Archive Automatic Signing Key (11/bullseye) - "A48449044AAD5C5D" - # Debian Stable Release Key (11/bullseye) - "605C66F00D6C9793" - # Debian Stable Release Key (10/buster) - "DCC9EFBF77E11517" - # Debian Archive Automatic Signing Key (10/buster) - "DC30D7C23CBBABEE" - # Debian Security Archive Automatic Signing Key (10/buster) - "4DFAB270CAA96DFA" - # Jessie Stable Release Key - "CBF8D6FD518E17E1" - # Debian Archive Automatic Signing Key (7.0/wheezy) - "8B48AD6246925553" - # Debian Archive Automatic Signing Key (8/jessie) - "7638D0442B90D010" - # Debian Security Archive Automatic Signing Key (8/jessie) - "9D6D8F6BC857C906" - # Debian Archive Automatic Signing Key (9/stretch) - "E0B11894F66AEC98" - # Debian Security Archive Automatic Signing Key (9/stretch) - "EDA0D2388AE22BA9" - # Debian Stable Release Key (9/stretch) - "EF0F382A1A7B6500" -) - -gpg --keyserver keyserver.ubuntu.com --recv-keys ${KEYS[@]} -gpg --output "${SCRIPT_DIR}/debian_archive_unstable.gpg" --export ${KEYS[@]} diff --git a/build/linux/sysroot_scripts/generate_keyring.sh b/build/linux/sysroot_scripts/generate_keyring.sh index 7b17730..87cecab 100755 --- a/build/linux/sysroot_scripts/generate_keyring.sh +++ b/build/linux/sysroot_scripts/generate_keyring.sh @@ -9,6 +9,10 @@ set -o errexit SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" KEYS=( + # Debian Archive Automatic Signing Key (12/bookworm) + "6ED0E7B82643E131" + # Debian Stable Release Key (12/bookworm) + "F8D2585B8783D481" # Debian Archive Automatic Signing Key (11/bullseye) "73A4F27B8DD47936" # Debian Security Archive Automatic Signing Key (11/bullseye) @@ -21,20 +25,6 @@ KEYS=( "DC30D7C23CBBABEE" # Debian Security Archive Automatic Signing Key (10/buster) "4DFAB270CAA96DFA" - # Jessie Stable Release Key - "CBF8D6FD518E17E1" - # Debian Archive Automatic Signing Key (7.0/wheezy) - "8B48AD6246925553" - # Debian Archive Automatic Signing Key (8/jessie) - "7638D0442B90D010" - # Debian Security Archive Automatic Signing Key (8/jessie) - "9D6D8F6BC857C906" - # Debian Archive Automatic Signing Key (9/stretch) - "E0B11894F66AEC98" - # Debian Security Archive Automatic Signing Key (9/stretch) - "EDA0D2388AE22BA9" - # Debian Stable Release Key (9/stretch) - "EF0F382A1A7B6500" ) gpg --keyserver keyserver.ubuntu.com --recv-keys ${KEYS[@]} diff --git a/build/linux/sysroot_scripts/generated_package_lists/bullseye.amd64 b/build/linux/sysroot_scripts/generated_package_lists/bullseye.amd64 index 9f7f87a..b782e59 100644 --- a/build/linux/sysroot_scripts/generated_package_lists/bullseye.amd64 +++ b/build/linux/sysroot_scripts/generated_package_lists/bullseye.amd64 @@ -1,391 +1,409 @@ -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/a/alsa-lib/libasound2_1.2.4-1.1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/a/alsa-lib/libasound2-dev_1.2.4-1.1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/a/atk1.0/libatk1.0-0_2.38.0-1~bpo11+1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/a/atk1.0/libatk1.0-dev_2.38.0-1~bpo11+1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/a/at-spi2-atk/libatk-bridge2.0-0_2.38.0-4~bpo11+1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/a/at-spi2-atk/libatk-bridge2.0-dev_2.38.0-4~bpo11+1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/a/at-spi2-core/libatspi2.0-0_2.44.1-1~bpo11+1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/a/at-spi2-core/libatspi2.0-dev_2.44.1-1~bpo11+1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/a/attr/libattr1_2.4.48-6_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/a/audit/libaudit1_3.0-2_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/a/avahi/libavahi-client3_0.8-5+deb11u1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/a/avahi/libavahi-common3_0.8-5+deb11u1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/b/bluez/libbluetooth3_5.55-3.1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/b/bluez/libbluetooth-dev_5.55-3.1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/b/brotli/libbrotli1_1.0.9-2+b2_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/b/brotli/libbrotli-dev_1.0.9-2+b2_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/c/cairo/libcairo2_1.16.0-5_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/c/cairo/libcairo2-dev_1.16.0-5_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/c/cairo/libcairo-gobject2_1.16.0-5_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/c/cairo/libcairo-script-interpreter2_1.16.0-5_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/c/colord/libcolord2_1.4.5-3_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/c/cups/libcups2_2.3.3op2-3+deb11u2_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/c/cups/libcups2-dev_2.3.3op2-3+deb11u2_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/c/cups/libcupsimage2_2.3.3op2-3+deb11u2_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/c/cups/libcupsimage2-dev_2.3.3op2-3+deb11u2_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/c/curl/libcurl3-gnutls_7.85.0-1~bpo11+1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/c/curl/libcurl4-gnutls-dev_7.85.0-1~bpo11+1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/c/cyrus-sasl2/libsasl2-2_2.1.27+dfsg-2.1+deb11u1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/d/db5.3/libdb5.3_5.3.28+dfsg1-0.8_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/d/dbus-glib/libdbus-glib-1-2_0.110-6_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/d/dbus/libdbus-1-3_1.12.20-2_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/d/dbus/libdbus-1-dev_1.12.20-2_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/d/double-conversion/libdouble-conversion3_3.1.5-6.1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/e/e2fsprogs/comerr-dev_2.1-1.46.5-2~bpo11+2_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/e/e2fsprogs/libcom-err2_1.46.5-2~bpo11+2_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/e/elfutils/libelf1_0.187-1~bpo11+1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/e/elfutils/libelf-dev_0.187-1~bpo11+1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/e/expat/libexpat1_2.2.10-2+deb11u3_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/e/expat/libexpat1-dev_2.2.10-2+deb11u3_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/f/flac/libflac8_1.3.3-2+deb11u1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/f/flac/libflac-dev_1.3.3-2+deb11u1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/f/fontconfig/libfontconfig1_2.13.1-4.2_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/f/fontconfig/libfontconfig-dev_2.13.1-4.2_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/f/freetype/libfreetype6_2.10.4+dfsg-1+deb11u1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/f/freetype/libfreetype-dev_2.10.4+dfsg-1+deb11u1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/f/fribidi/libfribidi0_1.0.8-2+deb11u1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/f/fribidi/libfribidi-dev_1.0.8-2+deb11u1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gcc-10/libasan6_10.2.1-6_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gcc-10/libatomic1_10.2.1-6_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gcc-10/libgcc-10-dev_10.2.1-6_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gcc-10/libgcc-s1_10.2.1-6_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gcc-10/libgomp1_10.2.1-6_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gcc-10/libitm1_10.2.1-6_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gcc-10/liblsan0_10.2.1-6_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gcc-10/libquadmath0_10.2.1-6_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gcc-10/libstdc++-10-dev_10.2.1-6_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gcc-10/libstdc++6_10.2.1-6_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gcc-10/libtsan0_10.2.1-6_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gcc-10/libubsan1_10.2.1-6_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gdk-pixbuf/libgdk-pixbuf-2.0-0_2.42.2+dfsg-1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gdk-pixbuf/libgdk-pixbuf-2.0-dev_2.42.2+dfsg-1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/glib2.0/libglib2.0-0_2.66.8-1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/glib2.0/libglib2.0-dev_2.66.8-1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/glibc/libc6_2.31-13+deb11u5_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/glibc/libc6-dev_2.31-13+deb11u5_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gmp/libgmp10_6.2.1+dfsg-1+deb11u1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gnutls28/libgnutls28-dev_3.7.1-5+deb11u2_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gnutls28/libgnutls30_3.7.1-5+deb11u2_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gnutls28/libgnutls-dane0_3.7.1-5+deb11u2_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gnutls28/libgnutls-openssl27_3.7.1-5+deb11u2_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gnutls28/libgnutlsxx28_3.7.1-5+deb11u2_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/graphene/libgraphene-1.0-0_1.10.4+dfsg1-1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/graphene/libgraphene-1.0-dev_1.10.4+dfsg1-1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/graphite2/libgraphite2-3_1.3.14-1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/graphite2/libgraphite2-dev_1.3.14-1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gtk+2.0/libgtk2.0-0_2.24.33-2_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gtk+3.0/libgtk-3-0_3.24.24-4+deb11u2_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gtk+3.0/libgtk-3-dev_3.24.24-4+deb11u2_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gtk4/libgtk-4-1_4.8.1+ds-1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gtk4/libgtk-4-dev_4.8.1+ds-1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/h/harfbuzz/libharfbuzz0b_2.7.4-1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/h/harfbuzz/libharfbuzz-dev_2.7.4-1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/h/harfbuzz/libharfbuzz-gobject0_2.7.4-1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/h/harfbuzz/libharfbuzz-icu0_2.7.4-1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/i/icu-le-hb/libicu-le-hb0_1.0.3+git180724-3+b2_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/i/icu/libicu67_67.1-7_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/j/jbigkit/libjbig0_2.1-3.1+b2_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/j/jbigkit/libjbig-dev_2.1-3.1+b2_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/j/json-glib/libjson-glib-1.0-0_1.6.2-1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/k/keyutils/libkeyutils1_1.6.1-2_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/k/krb5/krb5-multidev_1.18.3-6+deb11u2_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/k/krb5/libgssapi-krb5-2_1.18.3-6+deb11u2_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/k/krb5/libgssrpc4_1.18.3-6+deb11u2_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/k/krb5/libk5crypto3_1.18.3-6+deb11u2_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/k/krb5/libkadm5clnt-mit12_1.18.3-6+deb11u2_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/k/krb5/libkadm5srv-mit12_1.18.3-6+deb11u2_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/k/krb5/libkdb5-10_1.18.3-6+deb11u2_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/k/krb5/libkrb5-3_1.18.3-6+deb11u2_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/k/krb5/libkrb5-dev_1.18.3-6+deb11u2_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/k/krb5/libkrb5support0_1.18.3-6+deb11u2_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/liba/libasyncns/libasyncns0_0.8-6+b2_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libb/libbsd/libbsd0_0.11.3-1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libc/libcap2/libcap2_2.44-1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libc/libcap2/libcap-dev_2.44-1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libc/libcap-ng/libcap-ng0_0.7.9-2.2+b1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libc/libcloudproviders/libcloudproviders0_0.3.0-3_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libd/libdatrie/libdatrie1_0.2.13-1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libd/libdatrie/libdatrie-dev_0.2.13-1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libd/libdbusmenu/libdbusmenu-glib4_18.10.20180917~bzr492+repack1-2_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libd/libdbusmenu/libdbusmenu-glib-dev_18.10.20180917~bzr492+repack1-2_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libd/libdbusmenu/libdbusmenu-gtk3-4_18.10.20180917~bzr492+repack1-2_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libd/libdbusmenu/libdbusmenu-gtk4_18.10.20180917~bzr492+repack1-2_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libd/libdeflate/libdeflate0_1.10-2~bpo11+1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libd/libdeflate/libdeflate-dev_1.10-2~bpo11+1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libd/libdrm/libdrm2_2.4.104-1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libd/libdrm/libdrm-amdgpu1_2.4.104-1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libd/libdrm/libdrm-dev_2.4.104-1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libd/libdrm/libdrm-intel1_2.4.104-1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libd/libdrm/libdrm-nouveau2_2.4.104-1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libd/libdrm/libdrm-radeon1_2.4.104-1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libe/libepoxy/libepoxy0_1.5.8-1~bpo11+1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libe/libepoxy/libepoxy-dev_1.5.8-1~bpo11+1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libe/libevdev/libevdev2_1.11.0+dfsg-1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libe/libevdev/libevdev-dev_1.11.0+dfsg-1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libe/libevent/libevent-2.1-7_2.1.12-stable-1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libf/libffi/libffi7_3.3-6_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libf/libffi/libffi-dev_3.3-6_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libgcrypt20/libgcrypt20_1.8.7-6_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libgcrypt20/libgcrypt20-dev_1.8.7-6_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libglvnd/libegl1_1.3.2-1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libglvnd/libegl-dev_1.3.2-1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libglvnd/libgl1_1.3.2-1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libglvnd/libgl-dev_1.3.2-1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libglvnd/libgles1_1.3.2-1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libglvnd/libgles2_1.3.2-1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libglvnd/libgles-dev_1.3.2-1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libglvnd/libglvnd0_1.3.2-1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libglvnd/libglvnd-dev_1.3.2-1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libglvnd/libglx0_1.3.2-1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libglvnd/libglx-dev_1.3.2-1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libglvnd/libopengl0_1.3.2-1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libgnome-keyring/libgnome-keyring0_3.12.0-1+b2_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libgnome-keyring/libgnome-keyring-dev_3.12.0-1+b2_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libgpg-error/libgpg-error0_1.38-2_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libgpg-error/libgpg-error-dev_1.38-2_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libgudev/libgudev-1.0-0_234-1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libi/libice/libice6_1.0.10-1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libi/libidl/libidl-2-0_0.8.14-4+b12_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libi/libidn2/libidn2-0_2.3.0-5_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libi/libidn/libidn11_1.33-3_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libi/libinput/libinput10_1.16.4-3_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libi/libinput/libinput-dev_1.16.4-3_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libj/libjpeg-turbo/libjpeg62-turbo_2.0.6-4_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libj/libjpeg-turbo/libjpeg62-turbo-dev_2.0.6-4_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libj/libjsoncpp/libjsoncpp24_1.9.4-4_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libj/libjsoncpp/libjsoncpp-dev_1.9.4-4_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libm/libmd/libmd0_1.0.3-3_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libn/libnsl/libnsl2_1.3.0-2_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libn/libnss-db/libnss-db_2.2.3pre1-6+b10_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libo/libogg/libogg0_1.3.4-0.1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libo/libogg/libogg-dev_1.3.4-0.1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libp/libpciaccess/libpciaccess0_0.16-1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libp/libpng1.6/libpng16-16_1.6.37-3_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libp/libpng1.6/libpng-dev_1.6.37-3_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libp/libpsl/libpsl5_0.21.0-1.2_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libp/libpthread-stubs/libpthread-stubs0-dev_0.4-1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libr/librest/librest-0.7-0_0.8.1-1.1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libs/libselinux/libselinux1_3.1-3_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libs/libselinux/libselinux1-dev_3.1-3_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libs/libsepol/libsepol1_3.1-1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libs/libsepol/libsepol1-dev_3.1-1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libs/libsm/libsm6_1.2.3-1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libs/libsndfile/libsndfile1_1.0.31-2_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libs/libsoup2.4/libsoup2.4-1_2.72.0-2_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libs/libsoup2.4/libsoup-gnome2.4-1_2.72.0-2_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libs/libssh2/libssh2-1_1.9.0-2_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libt/libtasn1-6/libtasn1-6_4.16.0-2_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libt/libthai/libthai0_0.1.28-3_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libt/libthai/libthai-dev_0.1.28-3_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libt/libtirpc/libtirpc3_1.3.1-1+deb11u1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libt/libtool/libltdl7_2.4.6-15_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libu/libunistring/libunistring2_0.9.10-4_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libu/libutempter/libutempter0_1.2.1-2_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libu/libutempter/libutempter-dev_1.2.1-2_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libv/libva/libva2_2.14.0-1~bpo11+1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libv/libva/libva-dev_2.14.0-1~bpo11+1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libv/libva/libva-drm2_2.14.0-1~bpo11+1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libv/libva/libva-glx2_2.14.0-1~bpo11+1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libv/libva/libva-wayland2_2.14.0-1~bpo11+1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libv/libva/libva-x11-2_2.14.0-1~bpo11+1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libv/libvorbis/libvorbis0a_1.3.7-1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libv/libvorbis/libvorbisenc2_1.3.7-1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libw/libwacom/libwacom2_1.8-2_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libw/libwebp/libwebp6_0.6.1-2.1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libw/libwebp/libwebpdemux2_0.6.1-2.1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libw/libwebp/libwebp-dev_0.6.1-2.1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libw/libwebp/libwebpmux3_0.6.1-2.1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libx11/libx11-6_1.7.2-1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libx11/libx11-dev_1.7.2-1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libx11/libx11-xcb1_1.7.2-1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libx11/libx11-xcb-dev_1.7.2-1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxau/libxau6_1.0.9-1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxau/libxau-dev_1.0.9-1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb1_1.14-3_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb1-dev_1.14-3_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-dri2-0_1.14-3_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-dri2-0-dev_1.14-3_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-dri3-0_1.14-3_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-dri3-dev_1.14-3_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-glx0_1.14-3_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-glx0-dev_1.14-3_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-present0_1.14-3_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-present-dev_1.14-3_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-randr0_1.14-3_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-randr0-dev_1.14-3_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-render0_1.14-3_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-render0-dev_1.14-3_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-shape0_1.14-3_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-shape0-dev_1.14-3_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-shm0_1.14-3_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-shm0-dev_1.14-3_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-sync1_1.14-3_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-sync-dev_1.14-3_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-xfixes0_1.14-3_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-xfixes0-dev_1.14-3_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-xinerama0_1.14-3_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-xinput0_1.14-3_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-xkb1_1.14-3_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcomposite/libxcomposite1_0.4.5-1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcomposite/libxcomposite-dev_0.4.5-1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcrypt/libcrypt1_4.4.18-4_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcrypt/libcrypt-dev_4.4.18-4_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcursor/libxcursor1_1.2.0-2_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcursor/libxcursor-dev_1.2.0-2_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxdamage/libxdamage1_1.1.5-2_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxdamage/libxdamage-dev_1.1.5-2_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxdmcp/libxdmcp6_1.1.2-3_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxdmcp/libxdmcp-dev_1.1.2-3_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxext/libxext6_1.3.3-1.1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxext/libxext-dev_1.3.3-1.1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxfixes/libxfixes3_5.0.3-2_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxfixes/libxfixes-dev_5.0.3-2_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxi/libxi6_1.7.10-1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxi/libxi-dev_1.7.10-1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxinerama/libxinerama1_1.1.4-2_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxinerama/libxinerama-dev_1.1.4-2_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxkbcommon/libxkbcommon0_1.0.3-2_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxkbcommon/libxkbcommon-dev_1.0.3-2_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxkbcommon/libxkbcommon-x11-0_1.0.3-2_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxml2/libxml2_2.9.10+dfsg-6.7+deb11u2_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxml2/libxml2-dev_2.9.10+dfsg-6.7+deb11u2_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxrandr/libxrandr2_1.5.1-1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxrandr/libxrandr-dev_1.5.1-1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxrender/libxrender1_0.9.10-1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxrender/libxrender-dev_0.9.10-1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxshmfence/libxshmfence1_1.3-1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxshmfence/libxshmfence-dev_1.3-1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxslt/libxslt1.1_1.1.34-4+deb11u1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxslt/libxslt1-dev_1.1.34-4+deb11u1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxss/libxss1_1.2.3-1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxss/libxss-dev_1.2.3-1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxt/libxt6_1.2.0-1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxt/libxt-dev_1.2.0-1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxtst/libxtst6_1.2.3-1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxtst/libxtst-dev_1.2.3-1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxxf86vm/libxxf86vm1_1.1.4-1+b2_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxxf86vm/libxxf86vm-dev_1.1.4-1+b2_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libz/libzstd/libzstd1_1.4.8+dfsg-2.1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/l/lcms2/liblcms2-2_2.12~rc1-2_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/l/linux/linux-libc-dev_6.0.3-1~bpo11+1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/l/lz4/liblz4-1_1.9.3-2_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/l/lzo2/liblzo2-2_2.10-2_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/m/md4c/libmd4c0_0.4.7-2_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/m/mesa/libegl1-mesa_20.3.5-1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/m/mesa/libegl1-mesa-dev_20.3.5-1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/m/mesa/libgbm1_20.3.5-1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/m/mesa/libgbm-dev_20.3.5-1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/m/mesa/libgl1-mesa-dev_20.3.5-1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/m/mesa/libgl1-mesa-glx_20.3.5-1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/m/mesa/libglapi-mesa_20.3.5-1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/m/mesa/libwayland-egl1-mesa_20.3.5-1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/m/mesa/mesa-common-dev_20.3.5-1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/m/minizip/libminizip1_1.1-8+b1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/m/minizip/libminizip-dev_1.1-8+b1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/m/mtdev/libmtdev1_1.1.6-1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/n/ncurses/libncurses6_6.2+20201114-2_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/n/ncurses/libncurses-dev_6.2+20201114-2_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/n/ncurses/libncursesw6_6.2+20201114-2_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/n/ncurses/libtinfo6_6.2+20201114-2_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/n/nettle/libhogweed6_3.7.3-1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/n/nettle/libnettle8_3.7.3-1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/n/nghttp2/libnghttp2-14_1.43.0-1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/n/nspr/libnspr4_4.29-1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/n/nspr/libnspr4-dev_4.29-1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/n/nss/libnss3_3.61-1+deb11u2_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/n/nss/libnss3-dev_3.61-1+deb11u2_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/o/openldap/libldap-2.4-2_2.4.59+dfsg-1~bpo11+1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/o/openssl/libssl1.1_1.1.1n-0+deb11u3_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/o/openssl/libssl-dev_1.1.1n-0+deb11u3_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/o/opus/libopus0_1.3.1-0.1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/o/opus/libopus-dev_1.3.1-0.1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/p11-kit/libp11-kit0_0.23.22-1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pam/libpam0g_1.4.0-9+deb11u1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pam/libpam0g-dev_1.4.0-9+deb11u1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pango1.0/libpango-1.0-0_1.46.2-3_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pango1.0/libpango1.0-dev_1.46.2-3_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pango1.0/libpangocairo-1.0-0_1.46.2-3_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pango1.0/libpangoft2-1.0-0_1.46.2-3_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pango1.0/libpangoxft-1.0-0_1.46.2-3_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pangox-compat/libpangox-1.0-0_0.0.2-5.1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pciutils/libpci3_3.7.0-5_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pciutils/libpci-dev_3.7.0-5_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pcre2/libpcre2-16-0_10.36-2+deb11u1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pcre2/libpcre2-32-0_10.36-2+deb11u1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pcre2/libpcre2-8-0_10.36-2+deb11u1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pcre2/libpcre2-dev_10.36-2+deb11u1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pcre2/libpcre2-posix2_10.36-2+deb11u1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pcre3/libpcre16-3_8.39-13_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pcre3/libpcre32-3_8.39-13_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pcre3/libpcre3_8.39-13_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pcre3/libpcre3-dev_8.39-13_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pcre3/libpcrecpp0v5_8.39-13_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pipewire/libpipewire-0.3-0_0.3.58-2~bpo11+1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pipewire/libpipewire-0.3-dev_0.3.58-2~bpo11+1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pipewire/libspa-0.2-dev_0.3.58-2~bpo11+1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pixman/libpixman-1-0_0.40.0-1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pixman/libpixman-1-dev_0.40.0-1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pulseaudio/libpulse0_14.2-2_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pulseaudio/libpulse-dev_14.2-2_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pulseaudio/libpulse-mainloop-glib0_14.2-2_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/q/qtbase-opensource-src/libqt5concurrent5_5.15.2+dfsg-9_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/q/qtbase-opensource-src/libqt5core5a_5.15.2+dfsg-9_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/q/qtbase-opensource-src/libqt5dbus5_5.15.2+dfsg-9_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/q/qtbase-opensource-src/libqt5gui5_5.15.2+dfsg-9_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/q/qtbase-opensource-src/libqt5network5_5.15.2+dfsg-9_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/q/qtbase-opensource-src/libqt5printsupport5_5.15.2+dfsg-9_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/q/qtbase-opensource-src/libqt5sql5_5.15.2+dfsg-9_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/q/qtbase-opensource-src/libqt5test5_5.15.2+dfsg-9_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/q/qtbase-opensource-src/libqt5widgets5_5.15.2+dfsg-9_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/q/qtbase-opensource-src/libqt5xml5_5.15.2+dfsg-9_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/q/qtbase-opensource-src/qtbase5-dev_5.15.2+dfsg-9_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/q/qtbase-opensource-src/qtbase5-dev-tools_5.15.2+dfsg-9_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/r/re2/libre2-9_20210201+dfsg-1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/r/re2/libre2-dev_20210201+dfsg-1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/r/rtmpdump/librtmp1_2.4+20151223.gitfa8646d.1-2+b2_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/s/shared-mime-info/shared-mime-info_2.0-1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/s/snappy/libsnappy1v5_1.1.8-1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/s/snappy/libsnappy-dev_1.1.8-1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/s/speech-dispatcher/libspeechd2_0.11.4-1~bpo11+1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/s/speech-dispatcher/libspeechd-dev_0.11.4-1~bpo11+1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/s/sqlite3/libsqlite3-0_3.34.1-3_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/s/systemd/libsystemd0_251.3-1~bpo11+1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/s/systemd/libsystemd-dev_251.3-1~bpo11+1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/s/systemd/libudev1_251.3-1~bpo11+1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/s/systemd/libudev-dev_251.3-1~bpo11+1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/t/tcp-wrappers/libwrap0_7.6.q-31_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/t/tiff/libtiff5_4.2.0-1+deb11u1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/t/tiff/libtiff-dev_4.2.0-1+deb11u1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/t/tiff/libtiffxx5_4.2.0-1+deb11u1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/u/unbound/libunbound8_1.13.1-1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/u/util-linux/libblkid1_2.36.1-8+deb11u1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/u/util-linux/libblkid-dev_2.36.1-8+deb11u1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/u/util-linux/libmount1_2.36.1-8+deb11u1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/u/util-linux/libmount-dev_2.36.1-8+deb11u1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/u/util-linux/libuuid1_2.36.1-8+deb11u1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/u/util-linux/uuid-dev_2.36.1-8+deb11u1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/v/valgrind/valgrind_3.16.1-1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/v/vulkan-loader/libvulkan1_1.3.224.0-1~bpo11+1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/v/vulkan-loader/libvulkan-dev_1.3.224.0-1~bpo11+1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/w/wayland/libwayland-bin_1.18.0-2~exp1.1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/w/wayland/libwayland-client0_1.18.0-2~exp1.1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/w/wayland/libwayland-cursor0_1.18.0-2~exp1.1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/w/wayland/libwayland-dev_1.18.0-2~exp1.1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/w/wayland/libwayland-egl1_1.18.0-2~exp1.1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/w/wayland/libwayland-egl-backend-dev_1.18.0-2~exp1.1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/w/wayland/libwayland-server0_1.18.0-2~exp1.1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/w/wayland-protocols/wayland-protocols_1.20-1_all.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/x/xcb-util-image/libxcb-image0_0.4.0-1+b3_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/x/xcb-util-image/libxcb-image0-dev_0.4.0-1+b3_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/x/xcb-util-keysyms/libxcb-keysyms1_0.4.0-1+b2_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/x/xcb-util/libxcb-util1_0.4.0-1+b1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/x/xcb-util/libxcb-util-dev_0.4.0-1+b1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/x/xcb-util-renderutil/libxcb-render-util0_0.3.9-1+b1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/x/xcb-util-renderutil/libxcb-render-util0-dev_0.3.9-1+b1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/x/xcb-util-wm/libxcb-icccm4_0.4.1-1.1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/x/xft/libxft2_2.3.2-2_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/x/xft/libxft-dev_2.3.2-2_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/x/xorgproto/x11proto-dev_2020.1-1_all.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/x/xz-utils/liblzma5_5.2.5-2.1~deb11u1_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/z/zlib/zlib1g_1.2.11.dfsg-2+deb11u2_amd64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/z/zlib/zlib1g-dev_1.2.11.dfsg-2+deb11u2_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/alsa-lib/libasound2_1.2.4-1.1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/alsa-lib/libasound2-dev_1.2.4-1.1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/atk1.0/libatk1.0-0_2.38.0-1~bpo11+1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/atk1.0/libatk1.0-dev_2.38.0-1~bpo11+1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/at-spi2-atk/libatk-bridge2.0-0_2.38.0-4~bpo11+1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/at-spi2-atk/libatk-bridge2.0-dev_2.38.0-4~bpo11+1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/at-spi2-core/libatspi2.0-0_2.44.1-1~bpo11+1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/at-spi2-core/libatspi2.0-dev_2.44.1-1~bpo11+1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/attr/libattr1_2.4.48-6_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/audit/libaudit1_3.0-2_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/avahi/libavahi-client3_0.8-5+deb11u2_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/avahi/libavahi-common3_0.8-5+deb11u2_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/b/bluez/libbluetooth3_5.55-3.1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/b/bluez/libbluetooth-dev_5.55-3.1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/b/brotli/libbrotli1_1.0.9-2+b2_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/b/brotli/libbrotli-dev_1.0.9-2+b2_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cairo/libcairo2_1.16.0-5_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cairo/libcairo2-dev_1.16.0-5_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cairo/libcairo-gobject2_1.16.0-5_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cairo/libcairo-script-interpreter2_1.16.0-5_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/colord/libcolord2_1.4.5-3_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cups/libcups2_2.3.3op2-3+deb11u2_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cups/libcups2-dev_2.3.3op2-3+deb11u2_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cups/libcupsimage2_2.3.3op2-3+deb11u2_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cups/libcupsimage2-dev_2.3.3op2-3+deb11u2_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/curl/libcurl3-gnutls_7.88.1-7~bpo11+2_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/curl/libcurl4-gnutls-dev_7.88.1-7~bpo11+2_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cyrus-sasl2/libsasl2-2_2.1.27+dfsg-2.1+deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/d/db5.3/libdb5.3_5.3.28+dfsg1-0.8_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/d/dbus-glib/libdbus-glib-1-2_0.110-6_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/d/dbus/libdbus-1-3_1.12.24-0+deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/d/dbus/libdbus-1-dev_1.12.24-0+deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/d/double-conversion/libdouble-conversion3_3.1.5-6.1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/e/e2fsprogs/comerr-dev_2.1-1.46.6-1~bpo11+1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/e/e2fsprogs/libcom-err2_1.46.6-1~bpo11+1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/e/elfutils/libelf1_0.187-1~bpo11+1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/e/elfutils/libelf-dev_0.187-1~bpo11+1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/e/expat/libexpat1_2.2.10-2+deb11u5_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/e/expat/libexpat1-dev_2.2.10-2+deb11u5_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/flac/libflac8_1.3.3-2+deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/flac/libflac-dev_1.3.3-2+deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/fontconfig/libfontconfig1_2.13.1-4.2_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/fontconfig/libfontconfig-dev_2.13.1-4.2_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/freetype/libfreetype6_2.10.4+dfsg-1+deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/freetype/libfreetype-dev_2.10.4+dfsg-1+deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/fribidi/libfribidi0_1.0.8-2+deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/fribidi/libfribidi-dev_1.0.8-2+deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libasan6_10.2.1-6_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libatomic1_10.2.1-6_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libgcc-10-dev_10.2.1-6_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libgcc-s1_10.2.1-6_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libgomp1_10.2.1-6_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libitm1_10.2.1-6_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/liblsan0_10.2.1-6_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libquadmath0_10.2.1-6_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libstdc++-10-dev_10.2.1-6_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libstdc++6_10.2.1-6_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libtsan0_10.2.1-6_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libubsan1_10.2.1-6_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gdk-pixbuf/libgdk-pixbuf-2.0-0_2.42.2+dfsg-1+deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gdk-pixbuf/libgdk-pixbuf-2.0-dev_2.42.2+dfsg-1+deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/glib2.0/libglib2.0-0_2.66.8-1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/glib2.0/libglib2.0-dev_2.66.8-1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/glibc/libc6_2.31-13+deb11u5_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/glibc/libc6-dev_2.31-13+deb11u5_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gmp/libgmp10_6.2.1+dfsg-1+deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gnutls28/libgnutls28-dev_3.7.1-5+deb11u3_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gnutls28/libgnutls30_3.7.1-5+deb11u3_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gnutls28/libgnutls-dane0_3.7.1-5+deb11u3_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gnutls28/libgnutls-openssl27_3.7.1-5+deb11u3_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gnutls28/libgnutlsxx28_3.7.1-5+deb11u3_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/graphene/libgraphene-1.0-0_1.10.4+dfsg1-1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/graphene/libgraphene-1.0-dev_1.10.4+dfsg1-1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/graphite2/libgraphite2-3_1.3.14-1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/graphite2/libgraphite2-dev_1.3.14-1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gtk+2.0/libgtk2.0-0_2.24.33-2_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gtk+3.0/libgtk-3-0_3.24.24-4+deb11u3_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gtk+3.0/libgtk-3-dev_3.24.24-4+deb11u3_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gtk4/libgtk-4-1_4.8.3+ds-2_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gtk4/libgtk-4-dev_4.8.3+ds-2_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/h/harfbuzz/libharfbuzz0b_2.7.4-1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/h/harfbuzz/libharfbuzz-dev_2.7.4-1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/h/harfbuzz/libharfbuzz-gobject0_2.7.4-1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/h/harfbuzz/libharfbuzz-icu0_2.7.4-1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/i/icu-le-hb/libicu-le-hb0_1.0.3+git180724-3+b2_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/i/icu/libicu67_67.1-7_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/j/jbigkit/libjbig0_2.1-3.1+b2_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/j/jbigkit/libjbig-dev_2.1-3.1+b2_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/j/json-glib/libjson-glib-1.0-0_1.6.2-1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/keyutils/libkeyutils1_1.6.1-2_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/krb5-multidev_1.18.3-6+deb11u3_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libgssapi-krb5-2_1.18.3-6+deb11u3_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libgssrpc4_1.18.3-6+deb11u3_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libk5crypto3_1.18.3-6+deb11u3_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libkadm5clnt-mit12_1.18.3-6+deb11u3_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libkadm5srv-mit12_1.18.3-6+deb11u3_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libkdb5-10_1.18.3-6+deb11u3_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libkrb5-3_1.18.3-6+deb11u3_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libkrb5-dev_1.18.3-6+deb11u3_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libkrb5support0_1.18.3-6+deb11u3_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/liba/libasyncns/libasyncns0_0.8-6+b2_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libb/libb2/libb2-1_0.98.1-1.1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libb/libbsd/libbsd0_0.11.3-1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libc/libcap2/libcap2_2.44-1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libc/libcap2/libcap-dev_2.44-1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libc/libcap-ng/libcap-ng0_0.7.9-2.2+b1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libc/libcloudproviders/libcloudproviders0_0.3.0-3_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdatrie/libdatrie1_0.2.13-1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdatrie/libdatrie-dev_0.2.13-1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdbusmenu/libdbusmenu-glib4_18.10.20180917~bzr492+repack1-2_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdbusmenu/libdbusmenu-glib-dev_18.10.20180917~bzr492+repack1-2_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdbusmenu/libdbusmenu-gtk3-4_18.10.20180917~bzr492+repack1-2_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdbusmenu/libdbusmenu-gtk4_18.10.20180917~bzr492+repack1-2_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdeflate/libdeflate0_1.10-2~bpo11+1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdeflate/libdeflate-dev_1.10-2~bpo11+1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdrm/libdrm2_2.4.104-1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdrm/libdrm-amdgpu1_2.4.104-1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdrm/libdrm-dev_2.4.104-1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdrm/libdrm-intel1_2.4.104-1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdrm/libdrm-nouveau2_2.4.104-1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdrm/libdrm-radeon1_2.4.104-1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libe/libepoxy/libepoxy0_1.5.8-1~bpo11+1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libe/libepoxy/libepoxy-dev_1.5.8-1~bpo11+1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libe/libevdev/libevdev2_1.11.0+dfsg-1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libe/libevdev/libevdev-dev_1.11.0+dfsg-1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libe/libevent/libevent-2.1-7_2.1.12-stable-1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libf/libffi/libffi7_3.3-6_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libf/libffi/libffi-dev_3.3-6_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libgcrypt20/libgcrypt20_1.8.7-6_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libgcrypt20/libgcrypt20-dev_1.8.7-6_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libegl1_1.3.2-1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libegl-dev_1.3.2-1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libgl1_1.3.2-1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libgl-dev_1.3.2-1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libgles1_1.3.2-1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libgles2_1.3.2-1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libgles-dev_1.3.2-1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libglvnd0_1.3.2-1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libglvnd-dev_1.3.2-1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libglx0_1.3.2-1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libglx-dev_1.3.2-1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libopengl0_1.3.2-1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libgpg-error/libgpg-error0_1.38-2_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libgpg-error/libgpg-error-dev_1.38-2_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libgudev/libgudev-1.0-0_234-1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libi/libice/libice6_1.0.10-1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libi/libidl/libidl-2-0_0.8.14-4+b12_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libi/libidn2/libidn2-0_2.3.0-5_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libi/libidn/libidn11_1.33-3_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libi/libinput/libinput10_1.16.4-3_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libi/libinput/libinput-dev_1.16.4-3_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libj/libjpeg-turbo/libjpeg62-turbo_2.0.6-4_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libj/libjpeg-turbo/libjpeg62-turbo-dev_2.0.6-4_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libj/libjsoncpp/libjsoncpp24_1.9.4-4_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libj/libjsoncpp/libjsoncpp-dev_1.9.4-4_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libm/libmd/libmd0_1.0.3-3_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libn/libnsl/libnsl2_1.3.0-2_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libn/libnss-db/libnss-db_2.2.3pre1-6+b10_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libo/libogg/libogg0_1.3.4-0.1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libo/libogg/libogg-dev_1.3.4-0.1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libp/libpciaccess/libpciaccess0_0.16-1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libp/libpng1.6/libpng16-16_1.6.37-3_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libp/libpng1.6/libpng-dev_1.6.37-3_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libp/libproxy/libproxy1v5_0.4.17-1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libp/libpsl/libpsl5_0.21.0-1.2_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libp/libpthread-stubs/libpthread-stubs0-dev_0.4-1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libr/librest/librest-0.7-0_0.8.1-1.1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libselinux/libselinux1_3.1-3_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libselinux/libselinux1-dev_3.1-3_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libsepol/libsepol1_3.1-1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libsepol/libsepol1-dev_3.1-1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libsm/libsm6_1.2.3-1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libsndfile/libsndfile1_1.0.31-2_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libsoup2.4/libsoup2.4-1_2.72.0-2_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libsoup2.4/libsoup-gnome2.4-1_2.72.0-2_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libssh2/libssh2-1_1.9.0-2_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libt/libtasn1-6/libtasn1-6_4.16.0-2+deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libt/libthai/libthai0_0.1.28-3_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libt/libthai/libthai-dev_0.1.28-3_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libt/libtirpc/libtirpc3_1.3.1-1+deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libt/libtool/libltdl7_2.4.6-15_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libu/libunistring/libunistring2_0.9.10-4_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libu/libutempter/libutempter0_1.2.1-2_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libu/libutempter/libutempter-dev_1.2.1-2_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libva/libva2_2.17.0-1~bpo11+1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libva/libva-dev_2.17.0-1~bpo11+1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libva/libva-drm2_2.17.0-1~bpo11+1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libva/libva-glx2_2.17.0-1~bpo11+1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libva/libva-wayland2_2.17.0-1~bpo11+1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libva/libva-x11-2_2.17.0-1~bpo11+1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libvorbis/libvorbis0a_1.3.7-1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libvorbis/libvorbisenc2_1.3.7-1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libw/libwacom/libwacom2_1.8-2_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libw/libwebp/libwebp6_0.6.1-2.1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libw/libwebp/libwebp7_1.2.4-0.2_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libw/libwebp/libwebpdemux2_0.6.1-2.1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libw/libwebp/libwebp-dev_0.6.1-2.1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libw/libwebp/libwebpmux3_0.6.1-2.1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libx11/libx11-6_1.7.2-1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libx11/libx11-dev_1.7.2-1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libx11/libx11-xcb1_1.7.2-1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libx11/libx11-xcb-dev_1.7.2-1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxau/libxau6_1.0.9-1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxau/libxau-dev_1.0.9-1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb1_1.14-3_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb1-dev_1.14-3_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-dri2-0_1.14-3_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-dri2-0-dev_1.14-3_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-dri3-0_1.14-3_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-dri3-dev_1.14-3_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-glx0_1.14-3_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-glx0-dev_1.14-3_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-present0_1.14-3_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-present-dev_1.14-3_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-randr0_1.14-3_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-randr0-dev_1.14-3_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-render0_1.14-3_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-render0-dev_1.14-3_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-shape0_1.14-3_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-shape0-dev_1.14-3_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-shm0_1.14-3_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-shm0-dev_1.14-3_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-sync1_1.14-3_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-sync-dev_1.14-3_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-xfixes0_1.14-3_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-xfixes0-dev_1.14-3_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-xinerama0_1.14-3_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-xinput0_1.14-3_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-xkb1_1.14-3_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcomposite/libxcomposite1_0.4.5-1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcomposite/libxcomposite-dev_0.4.5-1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcrypt/libcrypt1_4.4.18-4_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcrypt/libcrypt-dev_4.4.18-4_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcursor/libxcursor1_1.2.0-2_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcursor/libxcursor-dev_1.2.0-2_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxdamage/libxdamage1_1.1.5-2_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxdamage/libxdamage-dev_1.1.5-2_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxdmcp/libxdmcp6_1.1.2-3_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxdmcp/libxdmcp-dev_1.1.2-3_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxext/libxext6_1.3.3-1.1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxext/libxext-dev_1.3.3-1.1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxfixes/libxfixes3_5.0.3-2_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxfixes/libxfixes-dev_5.0.3-2_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxi/libxi6_1.7.10-1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxi/libxi-dev_1.7.10-1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxinerama/libxinerama1_1.1.4-2_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxinerama/libxinerama-dev_1.1.4-2_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxkbcommon/libxkbcommon0_1.0.3-2_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxkbcommon/libxkbcommon-dev_1.0.3-2_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxkbcommon/libxkbcommon-x11-0_1.0.3-2_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxml2/libxml2_2.9.10+dfsg-6.7+deb11u4_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxml2/libxml2-dev_2.9.10+dfsg-6.7+deb11u4_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxrandr/libxrandr2_1.5.1-1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxrandr/libxrandr-dev_1.5.1-1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxrender/libxrender1_0.9.10-1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxrender/libxrender-dev_0.9.10-1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxshmfence/libxshmfence1_1.3-1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxshmfence/libxshmfence-dev_1.3-1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxslt/libxslt1.1_1.1.34-4+deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxslt/libxslt1-dev_1.1.34-4+deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxss/libxss1_1.2.3-1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxss/libxss-dev_1.2.3-1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxt/libxt6_1.2.0-1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxt/libxt-dev_1.2.0-1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxtst/libxtst6_1.2.3-1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxtst/libxtst-dev_1.2.3-1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxxf86vm/libxxf86vm1_1.1.4-1+b2_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxxf86vm/libxxf86vm-dev_1.1.4-1+b2_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libz/libzstd/libzstd1_1.4.8+dfsg-2.1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/l/lcms2/liblcms2-2_2.12~rc1-2_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/l/lerc/liblerc4_4.0.0+ds-2_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/l/linux/linux-libc-dev_6.1.20-2~bpo11+1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/l/lz4/liblz4-1_1.9.3-2_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/l/lzo2/liblzo2-2_2.10-2_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/md4c/libmd4c0_0.4.7-2_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/libegl1-mesa_20.3.5-1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/libegl1-mesa-dev_20.3.5-1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/libgbm1_20.3.5-1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/libgbm-dev_20.3.5-1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/libgl1-mesa-dev_20.3.5-1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/libgl1-mesa-glx_20.3.5-1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/libglapi-mesa_20.3.5-1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/libwayland-egl1-mesa_20.3.5-1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/mesa-common-dev_20.3.5-1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/minizip/libminizip1_1.1-8+b1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/minizip/libminizip-dev_1.1-8+b1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mtdev/libmtdev1_1.1.6-1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/ncurses/libncurses6_6.2+20201114-2+deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/ncurses/libncurses-dev_6.2+20201114-2+deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/ncurses/libncursesw6_6.2+20201114-2+deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/ncurses/libtinfo6_6.2+20201114-2+deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/nettle/libhogweed6_3.7.3-1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/nettle/libnettle8_3.7.3-1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/nghttp2/libnghttp2-14_1.43.0-1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/nspr/libnspr4_4.29-1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/nspr/libnspr4-dev_4.29-1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/nss/libnss3_3.61-1+deb11u3_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/nss/libnss3-dev_3.61-1+deb11u3_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/o/openldap/libldap-2.4-2_2.4.59+dfsg-1~bpo11+1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/o/openssl/libssl1.1_1.1.1n-0+deb11u4_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/o/openssl/libssl-dev_1.1.1n-0+deb11u4_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/o/opus/libopus0_1.3.1-0.1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/o/opus/libopus-dev_1.3.1-0.1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/p11-kit/libp11-kit0_0.23.22-1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pam/libpam0g_1.4.0-9+deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pam/libpam0g-dev_1.4.0-9+deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pango1.0/libpango-1.0-0_1.46.2-3_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pango1.0/libpango1.0-dev_1.46.2-3_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pango1.0/libpangocairo-1.0-0_1.46.2-3_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pango1.0/libpangoft2-1.0-0_1.46.2-3_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pango1.0/libpangoxft-1.0-0_1.46.2-3_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pangox-compat/libpangox-1.0-0_0.0.2-5.1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pciutils/libpci3_3.7.0-5_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pciutils/libpci-dev_3.7.0-5_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre2/libpcre2-16-0_10.36-2+deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre2/libpcre2-32-0_10.36-2+deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre2/libpcre2-8-0_10.36-2+deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre2/libpcre2-dev_10.36-2+deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre2/libpcre2-posix2_10.36-2+deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre3/libpcre16-3_8.39-13_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre3/libpcre32-3_8.39-13_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre3/libpcre3_8.39-13_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre3/libpcre3-dev_8.39-13_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre3/libpcrecpp0v5_8.39-13_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pipewire/libpipewire-0.3-0_0.3.65-2~bpo11+1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pipewire/libpipewire-0.3-dev_0.3.65-2~bpo11+1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pipewire/libspa-0.2-dev_0.3.65-2~bpo11+1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pixman/libpixman-1-0_0.40.0-1.1~deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pixman/libpixman-1-dev_0.40.0-1.1~deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pulseaudio/libpulse0_14.2-2_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pulseaudio/libpulse-dev_14.2-2_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pulseaudio/libpulse-mainloop-glib0_14.2-2_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6concurrent6_6.4.2+dfsg-10~bpo11+1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6core6_6.4.2+dfsg-10~bpo11+1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6dbus6_6.4.2+dfsg-10~bpo11+1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6gui6_6.4.2+dfsg-10~bpo11+1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6network6_6.4.2+dfsg-10~bpo11+1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6opengl6_6.4.2+dfsg-10~bpo11+1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6openglwidgets6_6.4.2+dfsg-10~bpo11+1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6printsupport6_6.4.2+dfsg-10~bpo11+1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6sql6_6.4.2+dfsg-10~bpo11+1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6test6_6.4.2+dfsg-10~bpo11+1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6widgets6_6.4.2+dfsg-10~bpo11+1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6xml6_6.4.2+dfsg-10~bpo11+1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/qt6-base-dev_6.4.2+dfsg-10~bpo11+1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/qt6-base-dev-tools_6.4.2+dfsg-10~bpo11+1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5concurrent5_5.15.2+dfsg-9_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5core5a_5.15.2+dfsg-9_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5dbus5_5.15.2+dfsg-9_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5gui5_5.15.2+dfsg-9_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5network5_5.15.2+dfsg-9_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5printsupport5_5.15.2+dfsg-9_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5sql5_5.15.2+dfsg-9_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5test5_5.15.2+dfsg-9_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5widgets5_5.15.2+dfsg-9_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5xml5_5.15.2+dfsg-9_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/qtbase5-dev_5.15.2+dfsg-9_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/qtbase5-dev-tools_5.15.2+dfsg-9_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/r/re2/libre2-9_20210201+dfsg-1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/r/re2/libre2-dev_20210201+dfsg-1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/r/rtmpdump/librtmp1_2.4+20151223.gitfa8646d.1-2+b2_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/shared-mime-info/shared-mime-info_2.0-1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/snappy/libsnappy1v5_1.1.8-1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/snappy/libsnappy-dev_1.1.8-1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/speech-dispatcher/libspeechd2_0.11.4-2~bpo11+1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/speech-dispatcher/libspeechd-dev_0.11.4-2~bpo11+1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/sqlite3/libsqlite3-0_3.34.1-3_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/systemd/libsystemd0_252.5-2~bpo11+1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/systemd/libsystemd-dev_252.5-2~bpo11+1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/systemd/libudev1_252.5-2~bpo11+1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/systemd/libudev-dev_252.5-2~bpo11+1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/t/tcp-wrappers/libwrap0_7.6.q-31_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/t/tiff/libtiff5_4.2.0-1+deb11u4_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/t/tiff/libtiff6_4.5.0-6_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/t/tiff/libtiff-dev_4.2.0-1+deb11u4_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/t/tiff/libtiffxx5_4.2.0-1+deb11u4_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/t/tslib/libts0_1.22-1+b1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/u/unbound/libunbound8_1.17.1-2~bpo11+1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/u/util-linux/libblkid1_2.36.1-8+deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/u/util-linux/libblkid-dev_2.36.1-8+deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/u/util-linux/libmount1_2.36.1-8+deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/u/util-linux/libmount-dev_2.36.1-8+deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/u/util-linux/libuuid1_2.36.1-8+deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/u/util-linux/uuid-dev_2.36.1-8+deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/v/valgrind/valgrind_3.16.1-1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/v/vulkan-loader/libvulkan1_1.3.224.0-1~bpo11+1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/v/vulkan-loader/libvulkan-dev_1.3.224.0-1~bpo11+1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wayland/libwayland-bin_1.18.0-2~exp1.1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wayland/libwayland-client0_1.18.0-2~exp1.1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wayland/libwayland-cursor0_1.18.0-2~exp1.1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wayland/libwayland-dev_1.18.0-2~exp1.1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wayland/libwayland-egl1_1.18.0-2~exp1.1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wayland/libwayland-egl-backend-dev_1.18.0-2~exp1.1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wayland/libwayland-server0_1.18.0-2~exp1.1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wayland-protocols/wayland-protocols_1.20-1_all.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xcb-util-image/libxcb-image0_0.4.0-1+b3_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xcb-util-image/libxcb-image0-dev_0.4.0-1+b3_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xcb-util-keysyms/libxcb-keysyms1_0.4.0-1+b2_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xcb-util/libxcb-util1_0.4.0-1+b1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xcb-util/libxcb-util-dev_0.4.0-1+b1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xcb-util-renderutil/libxcb-render-util0_0.3.9-1+b1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xcb-util-renderutil/libxcb-render-util0-dev_0.3.9-1+b1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xcb-util-wm/libxcb-icccm4_0.4.1-1.1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xft/libxft2_2.3.2-2_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xft/libxft-dev_2.3.2-2_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xorgproto/x11proto-dev_2020.1-1_all.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xz-utils/liblzma5_5.2.5-2.1~deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/z/zlib/zlib1g_1.2.11.dfsg-2+deb11u2_amd64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/z/zlib/zlib1g-dev_1.2.11.dfsg-2+deb11u2_amd64.deb diff --git a/build/linux/sysroot_scripts/generated_package_lists/bullseye.arm b/build/linux/sysroot_scripts/generated_package_lists/bullseye.arm deleted file mode 100644 index 20517dc..0000000 --- a/build/linux/sysroot_scripts/generated_package_lists/bullseye.arm +++ /dev/null @@ -1,391 +0,0 @@ -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/a/alsa-lib/libasound2_1.2.4-1.1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/a/alsa-lib/libasound2-dev_1.2.4-1.1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/a/atk1.0/libatk1.0-0_2.38.0-1~bpo11+1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/a/atk1.0/libatk1.0-dev_2.38.0-1~bpo11+1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/a/at-spi2-atk/libatk-bridge2.0-0_2.38.0-4~bpo11+1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/a/at-spi2-atk/libatk-bridge2.0-dev_2.38.0-4~bpo11+1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/a/at-spi2-core/libatspi2.0-0_2.44.1-1~bpo11+1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/a/at-spi2-core/libatspi2.0-dev_2.44.1-1~bpo11+1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/a/attr/libattr1_2.4.48-6_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/a/audit/libaudit1_3.0-2_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/a/avahi/libavahi-client3_0.8-5+deb11u1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/a/avahi/libavahi-common3_0.8-5+deb11u1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/b/bluez/libbluetooth3_5.55-3.1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/b/bluez/libbluetooth-dev_5.55-3.1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/b/brotli/libbrotli1_1.0.9-2+b2_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/b/brotli/libbrotli-dev_1.0.9-2+b2_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/c/cairo/libcairo2_1.16.0-5_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/c/cairo/libcairo2-dev_1.16.0-5_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/c/cairo/libcairo-gobject2_1.16.0-5_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/c/cairo/libcairo-script-interpreter2_1.16.0-5_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/c/colord/libcolord2_1.4.5-3_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/c/cups/libcups2_2.3.3op2-3+deb11u2_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/c/cups/libcups2-dev_2.3.3op2-3+deb11u2_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/c/cups/libcupsimage2_2.3.3op2-3+deb11u2_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/c/cups/libcupsimage2-dev_2.3.3op2-3+deb11u2_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/c/curl/libcurl3-gnutls_7.85.0-1~bpo11+1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/c/curl/libcurl4-gnutls-dev_7.85.0-1~bpo11+1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/c/cyrus-sasl2/libsasl2-2_2.1.27+dfsg-2.1+deb11u1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/d/db5.3/libdb5.3_5.3.28+dfsg1-0.8_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/d/dbus-glib/libdbus-glib-1-2_0.110-6_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/d/dbus/libdbus-1-3_1.12.20-2_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/d/dbus/libdbus-1-dev_1.12.20-2_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/d/double-conversion/libdouble-conversion3_3.1.5-6.1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/e/e2fsprogs/comerr-dev_2.1-1.46.5-2~bpo11+2_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/e/e2fsprogs/libcom-err2_1.46.5-2~bpo11+2_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/e/elfutils/libelf1_0.187-1~bpo11+1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/e/elfutils/libelf-dev_0.187-1~bpo11+1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/e/expat/libexpat1_2.2.10-2+deb11u3_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/e/expat/libexpat1-dev_2.2.10-2+deb11u3_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/f/flac/libflac8_1.3.3-2+deb11u1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/f/flac/libflac-dev_1.3.3-2+deb11u1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/f/fontconfig/libfontconfig1_2.13.1-4.2_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/f/fontconfig/libfontconfig-dev_2.13.1-4.2_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/f/freetype/libfreetype6_2.10.4+dfsg-1+deb11u1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/f/freetype/libfreetype-dev_2.10.4+dfsg-1+deb11u1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/f/fribidi/libfribidi0_1.0.8-2+deb11u1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/f/fribidi/libfribidi-dev_1.0.8-2+deb11u1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gcc-10/libasan6_10.2.1-6_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gcc-10/libatomic1_10.2.1-6_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gcc-10/libgcc-10-dev_10.2.1-6_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gcc-10/libgcc-s1_10.2.1-6_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gcc-10/libgomp1_10.2.1-6_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gcc-10/libstdc++-10-dev_10.2.1-6_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gcc-10/libstdc++6_10.2.1-6_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gcc-10/libubsan1_10.2.1-6_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gdk-pixbuf/libgdk-pixbuf-2.0-0_2.42.2+dfsg-1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gdk-pixbuf/libgdk-pixbuf-2.0-dev_2.42.2+dfsg-1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/glib2.0/libglib2.0-0_2.66.8-1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/glib2.0/libglib2.0-dev_2.66.8-1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/glibc/libc6_2.31-13+deb11u5_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/glibc/libc6-dev_2.31-13+deb11u5_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gmp/libgmp10_6.2.1+dfsg-1+deb11u1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gnutls28/libgnutls28-dev_3.7.1-5+deb11u2_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gnutls28/libgnutls30_3.7.1-5+deb11u2_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gnutls28/libgnutls-dane0_3.7.1-5+deb11u2_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gnutls28/libgnutls-openssl27_3.7.1-5+deb11u2_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gnutls28/libgnutlsxx28_3.7.1-5+deb11u2_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/graphene/libgraphene-1.0-0_1.10.4+dfsg1-1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/graphene/libgraphene-1.0-dev_1.10.4+dfsg1-1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/graphite2/libgraphite2-3_1.3.14-1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/graphite2/libgraphite2-dev_1.3.14-1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gtk+2.0/libgtk2.0-0_2.24.33-2_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gtk+3.0/libgtk-3-0_3.24.24-4+deb11u2_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gtk+3.0/libgtk-3-dev_3.24.24-4+deb11u2_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gtk4/libgtk-4-1_4.8.1+ds-1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gtk4/libgtk-4-dev_4.8.1+ds-1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/h/harfbuzz/libharfbuzz0b_2.7.4-1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/h/harfbuzz/libharfbuzz-dev_2.7.4-1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/h/harfbuzz/libharfbuzz-gobject0_2.7.4-1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/h/harfbuzz/libharfbuzz-icu0_2.7.4-1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/i/icu-le-hb/libicu-le-hb0_1.0.3+git180724-3+b2_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/i/icu/libicu67_67.1-7_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/j/jbigkit/libjbig0_2.1-3.1+b2_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/j/jbigkit/libjbig-dev_2.1-3.1+b2_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/j/json-glib/libjson-glib-1.0-0_1.6.2-1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/k/keyutils/libkeyutils1_1.6.1-2_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/k/krb5/krb5-multidev_1.18.3-6+deb11u2_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/k/krb5/libgssapi-krb5-2_1.18.3-6+deb11u2_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/k/krb5/libgssrpc4_1.18.3-6+deb11u2_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/k/krb5/libk5crypto3_1.18.3-6+deb11u2_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/k/krb5/libkadm5clnt-mit12_1.18.3-6+deb11u2_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/k/krb5/libkadm5srv-mit12_1.18.3-6+deb11u2_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/k/krb5/libkdb5-10_1.18.3-6+deb11u2_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/k/krb5/libkrb5-3_1.18.3-6+deb11u2_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/k/krb5/libkrb5-dev_1.18.3-6+deb11u2_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/k/krb5/libkrb5support0_1.18.3-6+deb11u2_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/liba/libasyncns/libasyncns0_0.8-6+b2_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libb/libbsd/libbsd0_0.11.3-1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libc/libcap2/libcap2_2.44-1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libc/libcap2/libcap-dev_2.44-1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libc/libcap-ng/libcap-ng0_0.7.9-2.2+b1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libc/libcloudproviders/libcloudproviders0_0.3.0-3_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libd/libdatrie/libdatrie1_0.2.13-1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libd/libdatrie/libdatrie-dev_0.2.13-1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libd/libdbusmenu/libdbusmenu-glib4_18.10.20180917~bzr492+repack1-2_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libd/libdbusmenu/libdbusmenu-glib-dev_18.10.20180917~bzr492+repack1-2_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libd/libdbusmenu/libdbusmenu-gtk3-4_18.10.20180917~bzr492+repack1-2_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libd/libdbusmenu/libdbusmenu-gtk4_18.10.20180917~bzr492+repack1-2_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libd/libdeflate/libdeflate0_1.10-2~bpo11+1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libd/libdeflate/libdeflate-dev_1.10-2~bpo11+1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libd/libdrm/libdrm2_2.4.104-1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libd/libdrm/libdrm-amdgpu1_2.4.104-1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libd/libdrm/libdrm-dev_2.4.104-1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libd/libdrm/libdrm-etnaviv1_2.4.104-1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libd/libdrm/libdrm-exynos1_2.4.104-1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libd/libdrm/libdrm-freedreno1_2.4.104-1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libd/libdrm/libdrm-nouveau2_2.4.104-1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libd/libdrm/libdrm-omap1_2.4.104-1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libd/libdrm/libdrm-radeon1_2.4.104-1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libd/libdrm/libdrm-tegra0_2.4.104-1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libe/libepoxy/libepoxy0_1.5.8-1~bpo11+1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libe/libepoxy/libepoxy-dev_1.5.8-1~bpo11+1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libe/libevdev/libevdev2_1.11.0+dfsg-1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libe/libevdev/libevdev-dev_1.11.0+dfsg-1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libe/libevent/libevent-2.1-7_2.1.12-stable-1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libf/libffi/libffi7_3.3-6_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libf/libffi/libffi-dev_3.3-6_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libgcrypt20/libgcrypt20_1.8.7-6_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libgcrypt20/libgcrypt20-dev_1.8.7-6_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libglvnd/libegl1_1.3.2-1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libglvnd/libegl-dev_1.3.2-1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libglvnd/libgl1_1.3.2-1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libglvnd/libgl-dev_1.3.2-1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libglvnd/libgles1_1.3.2-1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libglvnd/libgles2_1.3.2-1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libglvnd/libgles-dev_1.3.2-1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libglvnd/libglvnd0_1.3.2-1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libglvnd/libglvnd-dev_1.3.2-1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libglvnd/libglx0_1.3.2-1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libglvnd/libglx-dev_1.3.2-1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libglvnd/libopengl0_1.3.2-1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libgnome-keyring/libgnome-keyring0_3.12.0-1+b2_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libgnome-keyring/libgnome-keyring-dev_3.12.0-1+b2_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libgpg-error/libgpg-error0_1.38-2_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libgpg-error/libgpg-error-dev_1.38-2_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libgudev/libgudev-1.0-0_234-1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libi/libice/libice6_1.0.10-1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libi/libidl/libidl-2-0_0.8.14-4+b12_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libi/libidn2/libidn2-0_2.3.0-5_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libi/libidn/libidn11_1.33-3_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libi/libinput/libinput10_1.16.4-3_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libi/libinput/libinput-dev_1.16.4-3_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libj/libjpeg-turbo/libjpeg62-turbo_2.0.6-4_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libj/libjpeg-turbo/libjpeg62-turbo-dev_2.0.6-4_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libj/libjsoncpp/libjsoncpp24_1.9.4-4_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libj/libjsoncpp/libjsoncpp-dev_1.9.4-4_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libm/libmd/libmd0_1.0.3-3_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libn/libnsl/libnsl2_1.3.0-2_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libn/libnss-db/libnss-db_2.2.3pre1-6+b10_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libo/libogg/libogg0_1.3.4-0.1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libo/libogg/libogg-dev_1.3.4-0.1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libp/libpciaccess/libpciaccess0_0.16-1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libp/libpng1.6/libpng16-16_1.6.37-3_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libp/libpng1.6/libpng-dev_1.6.37-3_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libp/libpsl/libpsl5_0.21.0-1.2_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libp/libpthread-stubs/libpthread-stubs0-dev_0.4-1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libr/librest/librest-0.7-0_0.8.1-1.1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libs/libselinux/libselinux1_3.1-3_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libs/libselinux/libselinux1-dev_3.1-3_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libs/libsepol/libsepol1_3.1-1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libs/libsepol/libsepol1-dev_3.1-1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libs/libsm/libsm6_1.2.3-1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libs/libsndfile/libsndfile1_1.0.31-2_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libs/libsoup2.4/libsoup2.4-1_2.72.0-2_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libs/libsoup2.4/libsoup-gnome2.4-1_2.72.0-2_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libs/libssh2/libssh2-1_1.9.0-2_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libt/libtasn1-6/libtasn1-6_4.16.0-2_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libt/libthai/libthai0_0.1.28-3_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libt/libthai/libthai-dev_0.1.28-3_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libt/libtirpc/libtirpc3_1.3.1-1+deb11u1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libt/libtool/libltdl7_2.4.6-15_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libu/libunistring/libunistring2_0.9.10-4_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libu/libutempter/libutempter0_1.2.1-2_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libu/libutempter/libutempter-dev_1.2.1-2_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libv/libva/libva2_2.14.0-1~bpo11+1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libv/libva/libva-dev_2.14.0-1~bpo11+1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libv/libva/libva-drm2_2.14.0-1~bpo11+1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libv/libva/libva-glx2_2.14.0-1~bpo11+1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libv/libva/libva-wayland2_2.14.0-1~bpo11+1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libv/libva/libva-x11-2_2.14.0-1~bpo11+1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libv/libvorbis/libvorbis0a_1.3.7-1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libv/libvorbis/libvorbisenc2_1.3.7-1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libw/libwacom/libwacom2_1.8-2_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libw/libwebp/libwebp6_0.6.1-2.1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libw/libwebp/libwebpdemux2_0.6.1-2.1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libw/libwebp/libwebp-dev_0.6.1-2.1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libw/libwebp/libwebpmux3_0.6.1-2.1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libx11/libx11-6_1.7.2-1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libx11/libx11-dev_1.7.2-1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libx11/libx11-xcb1_1.7.2-1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libx11/libx11-xcb-dev_1.7.2-1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxau/libxau6_1.0.9-1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxau/libxau-dev_1.0.9-1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb1_1.14-3_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb1-dev_1.14-3_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-dri2-0_1.14-3_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-dri2-0-dev_1.14-3_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-dri3-0_1.14-3_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-dri3-dev_1.14-3_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-glx0_1.14-3_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-glx0-dev_1.14-3_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-present0_1.14-3_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-present-dev_1.14-3_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-randr0_1.14-3_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-randr0-dev_1.14-3_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-render0_1.14-3_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-render0-dev_1.14-3_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-shape0_1.14-3_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-shape0-dev_1.14-3_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-shm0_1.14-3_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-shm0-dev_1.14-3_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-sync1_1.14-3_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-sync-dev_1.14-3_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-xfixes0_1.14-3_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-xfixes0-dev_1.14-3_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-xinerama0_1.14-3_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-xinput0_1.14-3_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-xkb1_1.14-3_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcomposite/libxcomposite1_0.4.5-1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcomposite/libxcomposite-dev_0.4.5-1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcrypt/libcrypt1_4.4.18-4_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcrypt/libcrypt-dev_4.4.18-4_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcursor/libxcursor1_1.2.0-2_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcursor/libxcursor-dev_1.2.0-2_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxdamage/libxdamage1_1.1.5-2_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxdamage/libxdamage-dev_1.1.5-2_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxdmcp/libxdmcp6_1.1.2-3_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxdmcp/libxdmcp-dev_1.1.2-3_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxext/libxext6_1.3.3-1.1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxext/libxext-dev_1.3.3-1.1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxfixes/libxfixes3_5.0.3-2_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxfixes/libxfixes-dev_5.0.3-2_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxi/libxi6_1.7.10-1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxi/libxi-dev_1.7.10-1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxinerama/libxinerama1_1.1.4-2_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxinerama/libxinerama-dev_1.1.4-2_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxkbcommon/libxkbcommon0_1.0.3-2_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxkbcommon/libxkbcommon-dev_1.0.3-2_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxkbcommon/libxkbcommon-x11-0_1.0.3-2_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxml2/libxml2_2.9.10+dfsg-6.7+deb11u2_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxml2/libxml2-dev_2.9.10+dfsg-6.7+deb11u2_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxrandr/libxrandr2_1.5.1-1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxrandr/libxrandr-dev_1.5.1-1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxrender/libxrender1_0.9.10-1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxrender/libxrender-dev_0.9.10-1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxshmfence/libxshmfence1_1.3-1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxshmfence/libxshmfence-dev_1.3-1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxslt/libxslt1.1_1.1.34-4+deb11u1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxslt/libxslt1-dev_1.1.34-4+deb11u1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxss/libxss1_1.2.3-1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxss/libxss-dev_1.2.3-1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxt/libxt6_1.2.0-1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxt/libxt-dev_1.2.0-1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxtst/libxtst6_1.2.3-1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxtst/libxtst-dev_1.2.3-1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxxf86vm/libxxf86vm1_1.1.4-1+b2_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxxf86vm/libxxf86vm-dev_1.1.4-1+b2_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libz/libzstd/libzstd1_1.4.8+dfsg-2.1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/l/lcms2/liblcms2-2_2.12~rc1-2_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/l/linux/linux-libc-dev_6.0.3-1~bpo11+1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/l/lz4/liblz4-1_1.9.3-2_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/l/lzo2/liblzo2-2_2.10-2_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/m/md4c/libmd4c0_0.4.7-2_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/m/mesa/libegl1-mesa_20.3.5-1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/m/mesa/libegl1-mesa-dev_20.3.5-1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/m/mesa/libgbm1_20.3.5-1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/m/mesa/libgbm-dev_20.3.5-1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/m/mesa/libgl1-mesa-dev_20.3.5-1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/m/mesa/libgl1-mesa-glx_20.3.5-1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/m/mesa/libglapi-mesa_20.3.5-1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/m/mesa/libwayland-egl1-mesa_20.3.5-1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/m/mesa/mesa-common-dev_20.3.5-1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/m/minizip/libminizip1_1.1-8+b1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/m/minizip/libminizip-dev_1.1-8+b1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/m/mtdev/libmtdev1_1.1.6-1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/n/ncurses/libncurses6_6.2+20201114-2_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/n/ncurses/libncurses-dev_6.2+20201114-2_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/n/ncurses/libncursesw6_6.2+20201114-2_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/n/ncurses/libtinfo6_6.2+20201114-2_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/n/nettle/libhogweed6_3.7.3-1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/n/nettle/libnettle8_3.7.3-1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/n/nghttp2/libnghttp2-14_1.43.0-1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/n/nspr/libnspr4_4.29-1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/n/nspr/libnspr4-dev_4.29-1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/n/nss/libnss3_3.61-1+deb11u2_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/n/nss/libnss3-dev_3.61-1+deb11u2_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/o/openldap/libldap-2.4-2_2.4.59+dfsg-1~bpo11+1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/o/openssl/libssl1.1_1.1.1n-0+deb11u3_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/o/openssl/libssl-dev_1.1.1n-0+deb11u3_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/o/opus/libopus0_1.3.1-0.1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/o/opus/libopus-dev_1.3.1-0.1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/p11-kit/libp11-kit0_0.23.22-1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pam/libpam0g_1.4.0-9+deb11u1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pam/libpam0g-dev_1.4.0-9+deb11u1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pango1.0/libpango-1.0-0_1.46.2-3_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pango1.0/libpango1.0-dev_1.46.2-3_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pango1.0/libpangocairo-1.0-0_1.46.2-3_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pango1.0/libpangoft2-1.0-0_1.46.2-3_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pango1.0/libpangoxft-1.0-0_1.46.2-3_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pangox-compat/libpangox-1.0-0_0.0.2-5.1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pciutils/libpci3_3.7.0-5_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pciutils/libpci-dev_3.7.0-5_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pcre2/libpcre2-16-0_10.36-2+deb11u1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pcre2/libpcre2-32-0_10.36-2+deb11u1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pcre2/libpcre2-8-0_10.36-2+deb11u1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pcre2/libpcre2-dev_10.36-2+deb11u1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pcre2/libpcre2-posix2_10.36-2+deb11u1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pcre3/libpcre16-3_8.39-13_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pcre3/libpcre32-3_8.39-13_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pcre3/libpcre3_8.39-13_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pcre3/libpcre3-dev_8.39-13_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pcre3/libpcrecpp0v5_8.39-13_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pipewire/libpipewire-0.3-0_0.3.58-2~bpo11+1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pipewire/libpipewire-0.3-dev_0.3.58-2~bpo11+1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pipewire/libspa-0.2-dev_0.3.58-2~bpo11+1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pixman/libpixman-1-0_0.40.0-1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pixman/libpixman-1-dev_0.40.0-1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pulseaudio/libpulse0_14.2-2_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pulseaudio/libpulse-dev_14.2-2_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pulseaudio/libpulse-mainloop-glib0_14.2-2_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/q/qtbase-opensource-src/libqt5concurrent5_5.15.2+dfsg-9_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/q/qtbase-opensource-src/libqt5core5a_5.15.2+dfsg-9_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/q/qtbase-opensource-src/libqt5dbus5_5.15.2+dfsg-9_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/q/qtbase-opensource-src/libqt5gui5_5.15.2+dfsg-9_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/q/qtbase-opensource-src/libqt5network5_5.15.2+dfsg-9_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/q/qtbase-opensource-src/libqt5printsupport5_5.15.2+dfsg-9_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/q/qtbase-opensource-src/libqt5sql5_5.15.2+dfsg-9_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/q/qtbase-opensource-src/libqt5test5_5.15.2+dfsg-9_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/q/qtbase-opensource-src/libqt5widgets5_5.15.2+dfsg-9_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/q/qtbase-opensource-src/libqt5xml5_5.15.2+dfsg-9_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/q/qtbase-opensource-src/qtbase5-dev_5.15.2+dfsg-9_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/q/qtbase-opensource-src/qtbase5-dev-tools_5.15.2+dfsg-9_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/r/re2/libre2-9_20210201+dfsg-1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/r/re2/libre2-dev_20210201+dfsg-1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/r/rtmpdump/librtmp1_2.4+20151223.gitfa8646d.1-2+b2_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/s/shared-mime-info/shared-mime-info_2.0-1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/s/snappy/libsnappy1v5_1.1.8-1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/s/snappy/libsnappy-dev_1.1.8-1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/s/speech-dispatcher/libspeechd2_0.11.4-1~bpo11+1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/s/speech-dispatcher/libspeechd-dev_0.11.4-1~bpo11+1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/s/sqlite3/libsqlite3-0_3.34.1-3_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/s/systemd/libsystemd0_251.3-1~bpo11+1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/s/systemd/libsystemd-dev_251.3-1~bpo11+1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/s/systemd/libudev1_251.3-1~bpo11+1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/s/systemd/libudev-dev_251.3-1~bpo11+1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/t/tcp-wrappers/libwrap0_7.6.q-31_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/t/tiff/libtiff5_4.2.0-1+deb11u1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/t/tiff/libtiff-dev_4.2.0-1+deb11u1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/t/tiff/libtiffxx5_4.2.0-1+deb11u1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/u/unbound/libunbound8_1.13.1-1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/u/util-linux/libblkid1_2.36.1-8+deb11u1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/u/util-linux/libblkid-dev_2.36.1-8+deb11u1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/u/util-linux/libmount1_2.36.1-8+deb11u1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/u/util-linux/libmount-dev_2.36.1-8+deb11u1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/u/util-linux/libuuid1_2.36.1-8+deb11u1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/u/util-linux/uuid-dev_2.36.1-8+deb11u1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/v/valgrind/valgrind_3.16.1-1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/v/vulkan-loader/libvulkan1_1.3.224.0-1~bpo11+1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/v/vulkan-loader/libvulkan-dev_1.3.224.0-1~bpo11+1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/w/wayland/libwayland-bin_1.18.0-2~exp1.1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/w/wayland/libwayland-client0_1.18.0-2~exp1.1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/w/wayland/libwayland-cursor0_1.18.0-2~exp1.1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/w/wayland/libwayland-dev_1.18.0-2~exp1.1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/w/wayland/libwayland-egl1_1.18.0-2~exp1.1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/w/wayland/libwayland-egl-backend-dev_1.18.0-2~exp1.1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/w/wayland/libwayland-server0_1.18.0-2~exp1.1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/w/wayland-protocols/wayland-protocols_1.20-1_all.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/x/xcb-util-image/libxcb-image0_0.4.0-1+b3_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/x/xcb-util-image/libxcb-image0-dev_0.4.0-1+b3_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/x/xcb-util-keysyms/libxcb-keysyms1_0.4.0-1+b2_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/x/xcb-util/libxcb-util1_0.4.0-1+b1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/x/xcb-util/libxcb-util-dev_0.4.0-1+b1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/x/xcb-util-renderutil/libxcb-render-util0_0.3.9-1+b1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/x/xcb-util-renderutil/libxcb-render-util0-dev_0.3.9-1+b1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/x/xcb-util-wm/libxcb-icccm4_0.4.1-1.1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/x/xft/libxft2_2.3.2-2_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/x/xft/libxft-dev_2.3.2-2_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/x/xorgproto/x11proto-dev_2020.1-1_all.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/x/xz-utils/liblzma5_5.2.5-2.1~deb11u1_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/z/zlib/zlib1g_1.2.11.dfsg-2+deb11u2_armhf.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/z/zlib/zlib1g-dev_1.2.11.dfsg-2+deb11u2_armhf.deb diff --git a/build/linux/sysroot_scripts/generated_package_lists/bullseye.arm64 b/build/linux/sysroot_scripts/generated_package_lists/bullseye.arm64 index b191ace..e58880f 100644 --- a/build/linux/sysroot_scripts/generated_package_lists/bullseye.arm64 +++ b/build/linux/sysroot_scripts/generated_package_lists/bullseye.arm64 @@ -1,394 +1,412 @@ -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/a/alsa-lib/libasound2_1.2.4-1.1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/a/alsa-lib/libasound2-dev_1.2.4-1.1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/a/atk1.0/libatk1.0-0_2.38.0-1~bpo11+1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/a/atk1.0/libatk1.0-dev_2.38.0-1~bpo11+1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/a/at-spi2-atk/libatk-bridge2.0-0_2.38.0-4~bpo11+1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/a/at-spi2-atk/libatk-bridge2.0-dev_2.38.0-4~bpo11+1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/a/at-spi2-core/libatspi2.0-0_2.44.1-1~bpo11+1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/a/at-spi2-core/libatspi2.0-dev_2.44.1-1~bpo11+1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/a/attr/libattr1_2.4.48-6_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/a/audit/libaudit1_3.0-2_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/a/avahi/libavahi-client3_0.8-5+deb11u1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/a/avahi/libavahi-common3_0.8-5+deb11u1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/b/bluez/libbluetooth3_5.55-3.1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/b/bluez/libbluetooth-dev_5.55-3.1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/b/brotli/libbrotli1_1.0.9-2+b2_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/b/brotli/libbrotli-dev_1.0.9-2+b2_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/c/cairo/libcairo2_1.16.0-5_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/c/cairo/libcairo2-dev_1.16.0-5_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/c/cairo/libcairo-gobject2_1.16.0-5_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/c/cairo/libcairo-script-interpreter2_1.16.0-5_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/c/colord/libcolord2_1.4.5-3_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/c/cups/libcups2_2.3.3op2-3+deb11u2_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/c/cups/libcups2-dev_2.3.3op2-3+deb11u2_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/c/cups/libcupsimage2_2.3.3op2-3+deb11u2_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/c/cups/libcupsimage2-dev_2.3.3op2-3+deb11u2_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/c/curl/libcurl3-gnutls_7.85.0-1~bpo11+1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/c/curl/libcurl4-gnutls-dev_7.85.0-1~bpo11+1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/c/cyrus-sasl2/libsasl2-2_2.1.27+dfsg-2.1+deb11u1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/d/db5.3/libdb5.3_5.3.28+dfsg1-0.8_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/d/dbus-glib/libdbus-glib-1-2_0.110-6_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/d/dbus/libdbus-1-3_1.12.20-2_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/d/dbus/libdbus-1-dev_1.12.20-2_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/d/double-conversion/libdouble-conversion3_3.1.5-6.1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/e/e2fsprogs/comerr-dev_2.1-1.46.5-2~bpo11+2_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/e/e2fsprogs/libcom-err2_1.46.5-2~bpo11+2_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/e/elfutils/libelf1_0.187-1~bpo11+1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/e/elfutils/libelf-dev_0.187-1~bpo11+1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/e/expat/libexpat1_2.2.10-2+deb11u3_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/e/expat/libexpat1-dev_2.2.10-2+deb11u3_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/f/flac/libflac8_1.3.3-2+deb11u1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/f/flac/libflac-dev_1.3.3-2+deb11u1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/f/fontconfig/libfontconfig1_2.13.1-4.2_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/f/fontconfig/libfontconfig-dev_2.13.1-4.2_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/f/freetype/libfreetype6_2.10.4+dfsg-1+deb11u1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/f/freetype/libfreetype-dev_2.10.4+dfsg-1+deb11u1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/f/fribidi/libfribidi0_1.0.8-2+deb11u1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/f/fribidi/libfribidi-dev_1.0.8-2+deb11u1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gcc-10/libasan6_10.2.1-6_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gcc-10/libatomic1_10.2.1-6_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gcc-10/libgcc-10-dev_10.2.1-6_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gcc-10/libgcc-s1_10.2.1-6_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gcc-10/libgomp1_10.2.1-6_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gcc-10/libitm1_10.2.1-6_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gcc-10/liblsan0_10.2.1-6_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gcc-10/libstdc++-10-dev_10.2.1-6_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gcc-10/libstdc++6_10.2.1-6_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gcc-10/libtsan0_10.2.1-6_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gcc-10/libubsan1_10.2.1-6_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gdk-pixbuf/libgdk-pixbuf-2.0-0_2.42.2+dfsg-1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gdk-pixbuf/libgdk-pixbuf-2.0-dev_2.42.2+dfsg-1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/glib2.0/libglib2.0-0_2.66.8-1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/glib2.0/libglib2.0-dev_2.66.8-1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/glibc/libc6_2.31-13+deb11u5_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/glibc/libc6-dev_2.31-13+deb11u5_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gmp/libgmp10_6.2.1+dfsg-1+deb11u1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gmp/libgmp10_6.2.1+dfsg-1+deb11u1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gnutls28/libgnutls28-dev_3.7.1-5+deb11u2_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gnutls28/libgnutls30_3.7.1-5+deb11u2_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gnutls28/libgnutls-dane0_3.7.1-5+deb11u2_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gnutls28/libgnutls-openssl27_3.7.1-5+deb11u2_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gnutls28/libgnutlsxx28_3.7.1-5+deb11u2_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/graphene/libgraphene-1.0-0_1.10.4+dfsg1-1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/graphene/libgraphene-1.0-dev_1.10.4+dfsg1-1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/graphite2/libgraphite2-3_1.3.14-1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/graphite2/libgraphite2-dev_1.3.14-1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gtk+2.0/libgtk2.0-0_2.24.33-2_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gtk+3.0/libgtk-3-0_3.24.24-4+deb11u2_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gtk+3.0/libgtk-3-dev_3.24.24-4+deb11u2_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gtk4/libgtk-4-1_4.8.1+ds-1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gtk4/libgtk-4-dev_4.8.1+ds-1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/h/harfbuzz/libharfbuzz0b_2.7.4-1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/h/harfbuzz/libharfbuzz-dev_2.7.4-1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/h/harfbuzz/libharfbuzz-gobject0_2.7.4-1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/h/harfbuzz/libharfbuzz-icu0_2.7.4-1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/i/icu-le-hb/libicu-le-hb0_1.0.3+git180724-3+b2_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/i/icu/libicu67_67.1-7_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/j/jbigkit/libjbig0_2.1-3.1+b2_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/j/jbigkit/libjbig-dev_2.1-3.1+b2_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/j/json-glib/libjson-glib-1.0-0_1.6.2-1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/k/keyutils/libkeyutils1_1.6.1-2_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/k/krb5/krb5-multidev_1.18.3-6+deb11u2_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/k/krb5/libgssapi-krb5-2_1.18.3-6+deb11u2_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/k/krb5/libgssrpc4_1.18.3-6+deb11u2_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/k/krb5/libk5crypto3_1.18.3-6+deb11u2_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/k/krb5/libkadm5clnt-mit12_1.18.3-6+deb11u2_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/k/krb5/libkadm5srv-mit12_1.18.3-6+deb11u2_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/k/krb5/libkdb5-10_1.18.3-6+deb11u2_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/k/krb5/libkrb5-3_1.18.3-6+deb11u2_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/k/krb5/libkrb5-dev_1.18.3-6+deb11u2_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/k/krb5/libkrb5support0_1.18.3-6+deb11u2_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/liba/libasyncns/libasyncns0_0.8-6+b2_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libb/libbsd/libbsd0_0.11.3-1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libc/libcap2/libcap2_2.44-1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libc/libcap2/libcap-dev_2.44-1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libc/libcap-ng/libcap-ng0_0.7.9-2.2+b1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libc/libcloudproviders/libcloudproviders0_0.3.0-3_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libd/libdatrie/libdatrie1_0.2.13-1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libd/libdatrie/libdatrie-dev_0.2.13-1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libd/libdbusmenu/libdbusmenu-glib4_18.10.20180917~bzr492+repack1-2_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libd/libdbusmenu/libdbusmenu-glib-dev_18.10.20180917~bzr492+repack1-2_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libd/libdbusmenu/libdbusmenu-gtk3-4_18.10.20180917~bzr492+repack1-2_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libd/libdbusmenu/libdbusmenu-gtk4_18.10.20180917~bzr492+repack1-2_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libd/libdeflate/libdeflate0_1.10-2~bpo11+1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libd/libdeflate/libdeflate-dev_1.10-2~bpo11+1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libd/libdrm/libdrm2_2.4.104-1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libd/libdrm/libdrm-amdgpu1_2.4.104-1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libd/libdrm/libdrm-dev_2.4.104-1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libd/libdrm/libdrm-etnaviv1_2.4.104-1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libd/libdrm/libdrm-freedreno1_2.4.104-1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libd/libdrm/libdrm-nouveau2_2.4.104-1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libd/libdrm/libdrm-radeon1_2.4.104-1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libd/libdrm/libdrm-tegra0_2.4.104-1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libe/libepoxy/libepoxy0_1.5.8-1~bpo11+1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libe/libepoxy/libepoxy-dev_1.5.8-1~bpo11+1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libe/libevdev/libevdev2_1.11.0+dfsg-1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libe/libevdev/libevdev-dev_1.11.0+dfsg-1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libe/libevent/libevent-2.1-7_2.1.12-stable-1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libf/libffi/libffi7_3.3-6_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libf/libffi/libffi-dev_3.3-6_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libgcrypt20/libgcrypt20_1.8.7-6_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libgcrypt20/libgcrypt20-dev_1.8.7-6_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libglvnd/libegl1_1.3.2-1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libglvnd/libegl-dev_1.3.2-1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libglvnd/libgl1_1.3.2-1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libglvnd/libgl-dev_1.3.2-1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libglvnd/libgles1_1.3.2-1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libglvnd/libgles2_1.3.2-1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libglvnd/libgles-dev_1.3.2-1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libglvnd/libglvnd0_1.3.2-1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libglvnd/libglvnd-dev_1.3.2-1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libglvnd/libglx0_1.3.2-1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libglvnd/libglx-dev_1.3.2-1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libglvnd/libopengl0_1.3.2-1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libgnome-keyring/libgnome-keyring0_3.12.0-1+b2_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libgnome-keyring/libgnome-keyring-dev_3.12.0-1+b2_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libgpg-error/libgpg-error0_1.38-2_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libgpg-error/libgpg-error-dev_1.38-2_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libgudev/libgudev-1.0-0_234-1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libi/libice/libice6_1.0.10-1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libi/libidl/libidl-2-0_0.8.14-4+b12_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libi/libidn2/libidn2-0_2.3.0-5_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libi/libidn/libidn11_1.33-3_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libi/libinput/libinput10_1.16.4-3_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libi/libinput/libinput-dev_1.16.4-3_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libj/libjpeg-turbo/libjpeg62-turbo_2.0.6-4_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libj/libjpeg-turbo/libjpeg62-turbo-dev_2.0.6-4_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libj/libjsoncpp/libjsoncpp24_1.9.4-4_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libj/libjsoncpp/libjsoncpp-dev_1.9.4-4_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libm/libmd/libmd0_1.0.3-3_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libn/libnsl/libnsl2_1.3.0-2_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libn/libnss-db/libnss-db_2.2.3pre1-6+b10_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libo/libogg/libogg0_1.3.4-0.1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libo/libogg/libogg-dev_1.3.4-0.1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libp/libpciaccess/libpciaccess0_0.16-1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libp/libpng1.6/libpng16-16_1.6.37-3_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libp/libpng1.6/libpng-dev_1.6.37-3_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libp/libpsl/libpsl5_0.21.0-1.2_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libp/libpthread-stubs/libpthread-stubs0-dev_0.4-1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libr/librest/librest-0.7-0_0.8.1-1.1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libs/libselinux/libselinux1_3.1-3_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libs/libselinux/libselinux1-dev_3.1-3_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libs/libsepol/libsepol1_3.1-1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libs/libsepol/libsepol1-dev_3.1-1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libs/libsm/libsm6_1.2.3-1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libs/libsndfile/libsndfile1_1.0.31-2_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libs/libsoup2.4/libsoup2.4-1_2.72.0-2_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libs/libsoup2.4/libsoup-gnome2.4-1_2.72.0-2_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libs/libssh2/libssh2-1_1.9.0-2_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libt/libtasn1-6/libtasn1-6_4.16.0-2_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libt/libthai/libthai0_0.1.28-3_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libt/libthai/libthai0_0.1.28-3_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libt/libthai/libthai-dev_0.1.28-3_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libt/libtirpc/libtirpc3_1.3.1-1+deb11u1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libt/libtool/libltdl7_2.4.6-15_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libu/libunistring/libunistring2_0.9.10-4_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libu/libutempter/libutempter0_1.2.1-2_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libu/libutempter/libutempter-dev_1.2.1-2_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libv/libva/libva2_2.14.0-1~bpo11+1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libv/libva/libva-dev_2.14.0-1~bpo11+1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libv/libva/libva-drm2_2.14.0-1~bpo11+1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libv/libva/libva-glx2_2.14.0-1~bpo11+1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libv/libva/libva-wayland2_2.14.0-1~bpo11+1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libv/libva/libva-x11-2_2.14.0-1~bpo11+1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libv/libvorbis/libvorbis0a_1.3.7-1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libv/libvorbis/libvorbisenc2_1.3.7-1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libw/libwacom/libwacom2_1.8-2_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libw/libwebp/libwebp6_0.6.1-2.1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libw/libwebp/libwebpdemux2_0.6.1-2.1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libw/libwebp/libwebp-dev_0.6.1-2.1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libw/libwebp/libwebpmux3_0.6.1-2.1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libx11/libx11-6_1.7.2-1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libx11/libx11-dev_1.7.2-1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libx11/libx11-xcb1_1.7.2-1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libx11/libx11-xcb-dev_1.7.2-1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxau/libxau6_1.0.9-1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxau/libxau-dev_1.0.9-1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb1_1.14-3_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb1-dev_1.14-3_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-dri2-0_1.14-3_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-dri2-0-dev_1.14-3_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-dri3-0_1.14-3_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-dri3-dev_1.14-3_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-glx0_1.14-3_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-glx0-dev_1.14-3_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-present0_1.14-3_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-present-dev_1.14-3_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-randr0_1.14-3_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-randr0-dev_1.14-3_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-render0_1.14-3_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-render0-dev_1.14-3_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-shape0_1.14-3_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-shape0-dev_1.14-3_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-shm0_1.14-3_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-shm0-dev_1.14-3_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-sync1_1.14-3_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-sync-dev_1.14-3_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-xfixes0_1.14-3_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-xfixes0-dev_1.14-3_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-xinerama0_1.14-3_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-xinput0_1.14-3_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-xkb1_1.14-3_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcomposite/libxcomposite1_0.4.5-1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcomposite/libxcomposite-dev_0.4.5-1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcrypt/libcrypt1_4.4.18-4_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcrypt/libcrypt-dev_4.4.18-4_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcursor/libxcursor1_1.2.0-2_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcursor/libxcursor-dev_1.2.0-2_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxdamage/libxdamage1_1.1.5-2_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxdamage/libxdamage-dev_1.1.5-2_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxdmcp/libxdmcp6_1.1.2-3_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxdmcp/libxdmcp-dev_1.1.2-3_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxext/libxext6_1.3.3-1.1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxext/libxext-dev_1.3.3-1.1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxfixes/libxfixes3_5.0.3-2_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxfixes/libxfixes-dev_5.0.3-2_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxi/libxi6_1.7.10-1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxi/libxi-dev_1.7.10-1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxinerama/libxinerama1_1.1.4-2_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxinerama/libxinerama-dev_1.1.4-2_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxkbcommon/libxkbcommon0_1.0.3-2_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxkbcommon/libxkbcommon-dev_1.0.3-2_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxkbcommon/libxkbcommon-x11-0_1.0.3-2_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxml2/libxml2_2.9.10+dfsg-6.7+deb11u2_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxml2/libxml2-dev_2.9.10+dfsg-6.7+deb11u2_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxrandr/libxrandr2_1.5.1-1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxrandr/libxrandr-dev_1.5.1-1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxrender/libxrender1_0.9.10-1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxrender/libxrender-dev_0.9.10-1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxshmfence/libxshmfence1_1.3-1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxshmfence/libxshmfence-dev_1.3-1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxslt/libxslt1.1_1.1.34-4+deb11u1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxslt/libxslt1-dev_1.1.34-4+deb11u1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxss/libxss1_1.2.3-1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxss/libxss-dev_1.2.3-1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxt/libxt6_1.2.0-1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxt/libxt-dev_1.2.0-1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxtst/libxtst6_1.2.3-1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxtst/libxtst-dev_1.2.3-1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxxf86vm/libxxf86vm1_1.1.4-1+b2_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxxf86vm/libxxf86vm-dev_1.1.4-1+b2_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libz/libzstd/libzstd1_1.4.8+dfsg-2.1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/l/lcms2/liblcms2-2_2.12~rc1-2_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/l/linux/linux-libc-dev_6.0.3-1~bpo11+1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/l/lz4/liblz4-1_1.9.3-2_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/l/lzo2/liblzo2-2_2.10-2_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/m/md4c/libmd4c0_0.4.7-2_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/m/mesa/libegl1-mesa_20.3.5-1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/m/mesa/libegl1-mesa-dev_20.3.5-1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/m/mesa/libgbm1_20.3.5-1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/m/mesa/libgbm-dev_20.3.5-1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/m/mesa/libgl1-mesa-dev_20.3.5-1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/m/mesa/libgl1-mesa-glx_20.3.5-1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/m/mesa/libglapi-mesa_20.3.5-1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/m/mesa/libwayland-egl1-mesa_20.3.5-1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/m/mesa/mesa-common-dev_20.3.5-1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/m/minizip/libminizip1_1.1-8+b1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/m/minizip/libminizip-dev_1.1-8+b1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/m/mtdev/libmtdev1_1.1.6-1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/n/ncurses/libncurses6_6.2+20201114-2_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/n/ncurses/libncurses-dev_6.2+20201114-2_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/n/ncurses/libncursesw6_6.2+20201114-2_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/n/ncurses/libtinfo6_6.2+20201114-2_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/n/nettle/libhogweed6_3.7.3-1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/n/nettle/libnettle8_3.7.3-1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/n/nghttp2/libnghttp2-14_1.43.0-1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/n/nspr/libnspr4_4.29-1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/n/nspr/libnspr4-dev_4.29-1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/n/nss/libnss3_3.61-1+deb11u2_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/n/nss/libnss3-dev_3.61-1+deb11u2_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/o/openldap/libldap-2.4-2_2.4.59+dfsg-1~bpo11+1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/o/openssl/libssl1.1_1.1.1n-0+deb11u3_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/o/openssl/libssl-dev_1.1.1n-0+deb11u3_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/o/opus/libopus0_1.3.1-0.1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/o/opus/libopus-dev_1.3.1-0.1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/p11-kit/libp11-kit0_0.23.22-1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pam/libpam0g_1.4.0-9+deb11u1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pam/libpam0g-dev_1.4.0-9+deb11u1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pango1.0/libpango-1.0-0_1.46.2-3_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pango1.0/libpango1.0-dev_1.46.2-3_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pango1.0/libpangocairo-1.0-0_1.46.2-3_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pango1.0/libpangoft2-1.0-0_1.46.2-3_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pango1.0/libpangoxft-1.0-0_1.46.2-3_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pangox-compat/libpangox-1.0-0_0.0.2-5.1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pciutils/libpci3_3.7.0-5_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pciutils/libpci-dev_3.7.0-5_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pcre2/libpcre2-16-0_10.36-2+deb11u1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pcre2/libpcre2-32-0_10.36-2+deb11u1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pcre2/libpcre2-8-0_10.36-2+deb11u1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pcre2/libpcre2-dev_10.36-2+deb11u1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pcre2/libpcre2-posix2_10.36-2+deb11u1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pcre3/libpcre16-3_8.39-13_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pcre3/libpcre32-3_8.39-13_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pcre3/libpcre3_8.39-13_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pcre3/libpcre3-dev_8.39-13_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pcre3/libpcrecpp0v5_8.39-13_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pipewire/libpipewire-0.3-0_0.3.58-2~bpo11+1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pipewire/libpipewire-0.3-dev_0.3.58-2~bpo11+1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pipewire/libspa-0.2-dev_0.3.58-2~bpo11+1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pixman/libpixman-1-0_0.40.0-1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pixman/libpixman-1-dev_0.40.0-1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pulseaudio/libpulse0_14.2-2_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pulseaudio/libpulse-dev_14.2-2_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pulseaudio/libpulse-mainloop-glib0_14.2-2_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/q/qtbase-opensource-src/libqt5concurrent5_5.15.2+dfsg-9_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/q/qtbase-opensource-src/libqt5core5a_5.15.2+dfsg-9_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/q/qtbase-opensource-src/libqt5dbus5_5.15.2+dfsg-9_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/q/qtbase-opensource-src/libqt5gui5_5.15.2+dfsg-9_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/q/qtbase-opensource-src/libqt5network5_5.15.2+dfsg-9_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/q/qtbase-opensource-src/libqt5printsupport5_5.15.2+dfsg-9_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/q/qtbase-opensource-src/libqt5sql5_5.15.2+dfsg-9_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/q/qtbase-opensource-src/libqt5test5_5.15.2+dfsg-9_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/q/qtbase-opensource-src/libqt5widgets5_5.15.2+dfsg-9_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/q/qtbase-opensource-src/libqt5xml5_5.15.2+dfsg-9_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/q/qtbase-opensource-src/qtbase5-dev_5.15.2+dfsg-9_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/q/qtbase-opensource-src/qtbase5-dev-tools_5.15.2+dfsg-9_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/r/re2/libre2-9_20210201+dfsg-1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/r/re2/libre2-dev_20210201+dfsg-1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/r/rtmpdump/librtmp1_2.4+20151223.gitfa8646d.1-2+b2_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/s/shared-mime-info/shared-mime-info_2.0-1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/s/snappy/libsnappy1v5_1.1.8-1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/s/snappy/libsnappy-dev_1.1.8-1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/s/speech-dispatcher/libspeechd2_0.11.4-1~bpo11+1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/s/speech-dispatcher/libspeechd-dev_0.11.4-1~bpo11+1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/s/sqlite3/libsqlite3-0_3.34.1-3_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/s/systemd/libsystemd0_251.3-1~bpo11+1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/s/systemd/libsystemd-dev_251.3-1~bpo11+1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/s/systemd/libudev1_251.3-1~bpo11+1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/s/systemd/libudev-dev_251.3-1~bpo11+1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/t/tcp-wrappers/libwrap0_7.6.q-31_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/t/tiff/libtiff5_4.2.0-1+deb11u1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/t/tiff/libtiff-dev_4.2.0-1+deb11u1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/t/tiff/libtiffxx5_4.2.0-1+deb11u1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/u/unbound/libunbound8_1.13.1-1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/u/util-linux/libblkid1_2.36.1-8+deb11u1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/u/util-linux/libblkid-dev_2.36.1-8+deb11u1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/u/util-linux/libmount1_2.36.1-8+deb11u1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/u/util-linux/libmount-dev_2.36.1-8+deb11u1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/u/util-linux/libuuid1_2.36.1-8+deb11u1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/u/util-linux/uuid-dev_2.36.1-8+deb11u1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/v/valgrind/valgrind_3.16.1-1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/v/vulkan-loader/libvulkan1_1.3.224.0-1~bpo11+1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/v/vulkan-loader/libvulkan-dev_1.3.224.0-1~bpo11+1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/w/wayland/libwayland-bin_1.18.0-2~exp1.1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/w/wayland/libwayland-client0_1.18.0-2~exp1.1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/w/wayland/libwayland-cursor0_1.18.0-2~exp1.1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/w/wayland/libwayland-dev_1.18.0-2~exp1.1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/w/wayland/libwayland-egl1_1.18.0-2~exp1.1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/w/wayland/libwayland-egl-backend-dev_1.18.0-2~exp1.1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/w/wayland/libwayland-server0_1.18.0-2~exp1.1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/w/wayland-protocols/wayland-protocols_1.20-1_all.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/x/xcb-util-image/libxcb-image0_0.4.0-1+b3_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/x/xcb-util-image/libxcb-image0-dev_0.4.0-1+b3_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/x/xcb-util-keysyms/libxcb-keysyms1_0.4.0-1+b2_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/x/xcb-util/libxcb-util1_0.4.0-1+b1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/x/xcb-util/libxcb-util-dev_0.4.0-1+b1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/x/xcb-util-renderutil/libxcb-render-util0_0.3.9-1+b1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/x/xcb-util-renderutil/libxcb-render-util0-dev_0.3.9-1+b1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/x/xcb-util-wm/libxcb-icccm4_0.4.1-1.1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/x/xft/libxft2_2.3.2-2_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/x/xft/libxft-dev_2.3.2-2_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/x/xorgproto/x11proto-dev_2020.1-1_all.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/x/xz-utils/liblzma5_5.2.5-2.1~deb11u1_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/z/zlib/zlib1g_1.2.11.dfsg-2+deb11u2_arm64.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/z/zlib/zlib1g-dev_1.2.11.dfsg-2+deb11u2_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/alsa-lib/libasound2_1.2.4-1.1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/alsa-lib/libasound2-dev_1.2.4-1.1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/atk1.0/libatk1.0-0_2.38.0-1~bpo11+1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/atk1.0/libatk1.0-dev_2.38.0-1~bpo11+1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/at-spi2-atk/libatk-bridge2.0-0_2.38.0-4~bpo11+1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/at-spi2-atk/libatk-bridge2.0-dev_2.38.0-4~bpo11+1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/at-spi2-core/libatspi2.0-0_2.44.1-1~bpo11+1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/at-spi2-core/libatspi2.0-dev_2.44.1-1~bpo11+1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/attr/libattr1_2.4.48-6_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/audit/libaudit1_3.0-2_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/avahi/libavahi-client3_0.8-5+deb11u2_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/avahi/libavahi-common3_0.8-5+deb11u2_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/b/bluez/libbluetooth3_5.55-3.1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/b/bluez/libbluetooth-dev_5.55-3.1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/b/brotli/libbrotli1_1.0.9-2+b2_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/b/brotli/libbrotli-dev_1.0.9-2+b2_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cairo/libcairo2_1.16.0-5_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cairo/libcairo2-dev_1.16.0-5_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cairo/libcairo-gobject2_1.16.0-5_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cairo/libcairo-script-interpreter2_1.16.0-5_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/colord/libcolord2_1.4.5-3_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cups/libcups2_2.3.3op2-3+deb11u2_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cups/libcups2-dev_2.3.3op2-3+deb11u2_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cups/libcupsimage2_2.3.3op2-3+deb11u2_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cups/libcupsimage2-dev_2.3.3op2-3+deb11u2_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/curl/libcurl3-gnutls_7.88.1-7~bpo11+2_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/curl/libcurl4-gnutls-dev_7.88.1-7~bpo11+2_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cyrus-sasl2/libsasl2-2_2.1.27+dfsg-2.1+deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/d/db5.3/libdb5.3_5.3.28+dfsg1-0.8_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/d/dbus-glib/libdbus-glib-1-2_0.110-6_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/d/dbus/libdbus-1-3_1.12.24-0+deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/d/dbus/libdbus-1-dev_1.12.24-0+deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/d/double-conversion/libdouble-conversion3_3.1.5-6.1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/e/e2fsprogs/comerr-dev_2.1-1.46.6-1~bpo11+1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/e/e2fsprogs/libcom-err2_1.46.6-1~bpo11+1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/e/elfutils/libelf1_0.187-1~bpo11+1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/e/elfutils/libelf-dev_0.187-1~bpo11+1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/e/expat/libexpat1_2.2.10-2+deb11u5_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/e/expat/libexpat1-dev_2.2.10-2+deb11u5_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/flac/libflac8_1.3.3-2+deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/flac/libflac-dev_1.3.3-2+deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/fontconfig/libfontconfig1_2.13.1-4.2_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/fontconfig/libfontconfig-dev_2.13.1-4.2_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/freetype/libfreetype6_2.10.4+dfsg-1+deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/freetype/libfreetype-dev_2.10.4+dfsg-1+deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/fribidi/libfribidi0_1.0.8-2+deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/fribidi/libfribidi-dev_1.0.8-2+deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libasan6_10.2.1-6_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libatomic1_10.2.1-6_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libgcc-10-dev_10.2.1-6_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libgcc-s1_10.2.1-6_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libgomp1_10.2.1-6_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libitm1_10.2.1-6_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/liblsan0_10.2.1-6_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libstdc++-10-dev_10.2.1-6_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libstdc++6_10.2.1-6_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libtsan0_10.2.1-6_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libubsan1_10.2.1-6_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gdk-pixbuf/libgdk-pixbuf-2.0-0_2.42.2+dfsg-1+deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gdk-pixbuf/libgdk-pixbuf-2.0-dev_2.42.2+dfsg-1+deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/glib2.0/libglib2.0-0_2.66.8-1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/glib2.0/libglib2.0-dev_2.66.8-1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/glibc/libc6_2.31-13+deb11u5_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/glibc/libc6-dev_2.31-13+deb11u5_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gmp/libgmp10_6.2.1+dfsg-1+deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gmp/libgmp10_6.2.1+dfsg-1+deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gnutls28/libgnutls28-dev_3.7.1-5+deb11u3_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gnutls28/libgnutls30_3.7.1-5+deb11u3_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gnutls28/libgnutls-dane0_3.7.1-5+deb11u3_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gnutls28/libgnutls-openssl27_3.7.1-5+deb11u3_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gnutls28/libgnutlsxx28_3.7.1-5+deb11u3_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/graphene/libgraphene-1.0-0_1.10.4+dfsg1-1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/graphene/libgraphene-1.0-dev_1.10.4+dfsg1-1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/graphite2/libgraphite2-3_1.3.14-1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/graphite2/libgraphite2-dev_1.3.14-1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gtk+2.0/libgtk2.0-0_2.24.33-2_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gtk+3.0/libgtk-3-0_3.24.24-4+deb11u3_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gtk+3.0/libgtk-3-dev_3.24.24-4+deb11u3_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gtk4/libgtk-4-1_4.8.3+ds-2_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gtk4/libgtk-4-dev_4.8.3+ds-2_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/h/harfbuzz/libharfbuzz0b_2.7.4-1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/h/harfbuzz/libharfbuzz-dev_2.7.4-1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/h/harfbuzz/libharfbuzz-gobject0_2.7.4-1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/h/harfbuzz/libharfbuzz-icu0_2.7.4-1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/i/icu-le-hb/libicu-le-hb0_1.0.3+git180724-3+b2_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/i/icu/libicu67_67.1-7_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/j/jbigkit/libjbig0_2.1-3.1+b2_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/j/jbigkit/libjbig-dev_2.1-3.1+b2_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/j/json-glib/libjson-glib-1.0-0_1.6.2-1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/keyutils/libkeyutils1_1.6.1-2_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/krb5-multidev_1.18.3-6+deb11u3_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libgssapi-krb5-2_1.18.3-6+deb11u3_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libgssrpc4_1.18.3-6+deb11u3_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libk5crypto3_1.18.3-6+deb11u3_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libkadm5clnt-mit12_1.18.3-6+deb11u3_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libkadm5srv-mit12_1.18.3-6+deb11u3_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libkdb5-10_1.18.3-6+deb11u3_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libkrb5-3_1.18.3-6+deb11u3_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libkrb5-dev_1.18.3-6+deb11u3_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libkrb5support0_1.18.3-6+deb11u3_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/liba/libasyncns/libasyncns0_0.8-6+b2_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libb/libb2/libb2-1_0.98.1-1.1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libb/libbsd/libbsd0_0.11.3-1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libc/libcap2/libcap2_2.44-1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libc/libcap2/libcap-dev_2.44-1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libc/libcap-ng/libcap-ng0_0.7.9-2.2+b1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libc/libcloudproviders/libcloudproviders0_0.3.0-3_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdatrie/libdatrie1_0.2.13-1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdatrie/libdatrie-dev_0.2.13-1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdbusmenu/libdbusmenu-glib4_18.10.20180917~bzr492+repack1-2_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdbusmenu/libdbusmenu-glib-dev_18.10.20180917~bzr492+repack1-2_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdbusmenu/libdbusmenu-gtk3-4_18.10.20180917~bzr492+repack1-2_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdbusmenu/libdbusmenu-gtk4_18.10.20180917~bzr492+repack1-2_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdeflate/libdeflate0_1.10-2~bpo11+1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdeflate/libdeflate-dev_1.10-2~bpo11+1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdrm/libdrm2_2.4.104-1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdrm/libdrm-amdgpu1_2.4.104-1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdrm/libdrm-dev_2.4.104-1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdrm/libdrm-etnaviv1_2.4.104-1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdrm/libdrm-freedreno1_2.4.104-1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdrm/libdrm-nouveau2_2.4.104-1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdrm/libdrm-radeon1_2.4.104-1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdrm/libdrm-tegra0_2.4.104-1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libe/libepoxy/libepoxy0_1.5.8-1~bpo11+1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libe/libepoxy/libepoxy-dev_1.5.8-1~bpo11+1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libe/libevdev/libevdev2_1.11.0+dfsg-1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libe/libevdev/libevdev-dev_1.11.0+dfsg-1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libe/libevent/libevent-2.1-7_2.1.12-stable-1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libf/libffi/libffi7_3.3-6_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libf/libffi/libffi-dev_3.3-6_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libgcrypt20/libgcrypt20_1.8.7-6_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libgcrypt20/libgcrypt20-dev_1.8.7-6_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libegl1_1.3.2-1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libegl-dev_1.3.2-1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libgl1_1.3.2-1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libgl-dev_1.3.2-1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libgles1_1.3.2-1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libgles2_1.3.2-1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libgles-dev_1.3.2-1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libglvnd0_1.3.2-1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libglvnd-dev_1.3.2-1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libglx0_1.3.2-1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libglx-dev_1.3.2-1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libopengl0_1.3.2-1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libgpg-error/libgpg-error0_1.38-2_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libgpg-error/libgpg-error-dev_1.38-2_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libgudev/libgudev-1.0-0_234-1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libi/libice/libice6_1.0.10-1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libi/libidl/libidl-2-0_0.8.14-4+b12_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libi/libidn2/libidn2-0_2.3.0-5_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libi/libidn/libidn11_1.33-3_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libi/libinput/libinput10_1.16.4-3_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libi/libinput/libinput-dev_1.16.4-3_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libj/libjpeg-turbo/libjpeg62-turbo_2.0.6-4_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libj/libjpeg-turbo/libjpeg62-turbo-dev_2.0.6-4_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libj/libjsoncpp/libjsoncpp24_1.9.4-4_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libj/libjsoncpp/libjsoncpp-dev_1.9.4-4_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libm/libmd/libmd0_1.0.3-3_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libn/libnsl/libnsl2_1.3.0-2_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libn/libnss-db/libnss-db_2.2.3pre1-6+b10_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libo/libogg/libogg0_1.3.4-0.1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libo/libogg/libogg-dev_1.3.4-0.1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libp/libpciaccess/libpciaccess0_0.16-1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libp/libpng1.6/libpng16-16_1.6.37-3_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libp/libpng1.6/libpng-dev_1.6.37-3_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libp/libproxy/libproxy1v5_0.4.17-1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libp/libpsl/libpsl5_0.21.0-1.2_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libp/libpthread-stubs/libpthread-stubs0-dev_0.4-1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libr/librest/librest-0.7-0_0.8.1-1.1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libselinux/libselinux1_3.1-3_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libselinux/libselinux1-dev_3.1-3_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libsepol/libsepol1_3.1-1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libsepol/libsepol1-dev_3.1-1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libsm/libsm6_1.2.3-1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libsndfile/libsndfile1_1.0.31-2_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libsoup2.4/libsoup2.4-1_2.72.0-2_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libsoup2.4/libsoup-gnome2.4-1_2.72.0-2_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libssh2/libssh2-1_1.9.0-2_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libt/libtasn1-6/libtasn1-6_4.16.0-2+deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libt/libthai/libthai0_0.1.28-3_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libt/libthai/libthai0_0.1.28-3_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libt/libthai/libthai-dev_0.1.28-3_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libt/libtirpc/libtirpc3_1.3.1-1+deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libt/libtool/libltdl7_2.4.6-15_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libu/libunistring/libunistring2_0.9.10-4_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libu/libutempter/libutempter0_1.2.1-2_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libu/libutempter/libutempter-dev_1.2.1-2_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libva/libva2_2.17.0-1~bpo11+1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libva/libva-dev_2.17.0-1~bpo11+1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libva/libva-drm2_2.17.0-1~bpo11+1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libva/libva-glx2_2.17.0-1~bpo11+1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libva/libva-wayland2_2.17.0-1~bpo11+1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libva/libva-x11-2_2.17.0-1~bpo11+1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libvorbis/libvorbis0a_1.3.7-1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libvorbis/libvorbisenc2_1.3.7-1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libw/libwacom/libwacom2_1.8-2_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libw/libwebp/libwebp6_0.6.1-2.1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libw/libwebp/libwebp7_1.2.4-0.2_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libw/libwebp/libwebpdemux2_0.6.1-2.1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libw/libwebp/libwebp-dev_0.6.1-2.1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libw/libwebp/libwebpmux3_0.6.1-2.1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libx11/libx11-6_1.7.2-1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libx11/libx11-dev_1.7.2-1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libx11/libx11-xcb1_1.7.2-1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libx11/libx11-xcb-dev_1.7.2-1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxau/libxau6_1.0.9-1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxau/libxau-dev_1.0.9-1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb1_1.14-3_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb1-dev_1.14-3_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-dri2-0_1.14-3_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-dri2-0-dev_1.14-3_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-dri3-0_1.14-3_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-dri3-dev_1.14-3_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-glx0_1.14-3_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-glx0-dev_1.14-3_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-present0_1.14-3_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-present-dev_1.14-3_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-randr0_1.14-3_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-randr0-dev_1.14-3_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-render0_1.14-3_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-render0-dev_1.14-3_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-shape0_1.14-3_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-shape0-dev_1.14-3_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-shm0_1.14-3_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-shm0-dev_1.14-3_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-sync1_1.14-3_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-sync-dev_1.14-3_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-xfixes0_1.14-3_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-xfixes0-dev_1.14-3_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-xinerama0_1.14-3_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-xinput0_1.14-3_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-xkb1_1.14-3_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcomposite/libxcomposite1_0.4.5-1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcomposite/libxcomposite-dev_0.4.5-1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcrypt/libcrypt1_4.4.18-4_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcrypt/libcrypt-dev_4.4.18-4_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcursor/libxcursor1_1.2.0-2_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcursor/libxcursor-dev_1.2.0-2_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxdamage/libxdamage1_1.1.5-2_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxdamage/libxdamage-dev_1.1.5-2_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxdmcp/libxdmcp6_1.1.2-3_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxdmcp/libxdmcp-dev_1.1.2-3_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxext/libxext6_1.3.3-1.1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxext/libxext-dev_1.3.3-1.1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxfixes/libxfixes3_5.0.3-2_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxfixes/libxfixes-dev_5.0.3-2_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxi/libxi6_1.7.10-1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxi/libxi-dev_1.7.10-1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxinerama/libxinerama1_1.1.4-2_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxinerama/libxinerama-dev_1.1.4-2_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxkbcommon/libxkbcommon0_1.0.3-2_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxkbcommon/libxkbcommon-dev_1.0.3-2_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxkbcommon/libxkbcommon-x11-0_1.0.3-2_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxml2/libxml2_2.9.10+dfsg-6.7+deb11u4_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxml2/libxml2-dev_2.9.10+dfsg-6.7+deb11u4_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxrandr/libxrandr2_1.5.1-1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxrandr/libxrandr-dev_1.5.1-1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxrender/libxrender1_0.9.10-1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxrender/libxrender-dev_0.9.10-1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxshmfence/libxshmfence1_1.3-1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxshmfence/libxshmfence-dev_1.3-1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxslt/libxslt1.1_1.1.34-4+deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxslt/libxslt1-dev_1.1.34-4+deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxss/libxss1_1.2.3-1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxss/libxss-dev_1.2.3-1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxt/libxt6_1.2.0-1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxt/libxt-dev_1.2.0-1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxtst/libxtst6_1.2.3-1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxtst/libxtst-dev_1.2.3-1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxxf86vm/libxxf86vm1_1.1.4-1+b2_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxxf86vm/libxxf86vm-dev_1.1.4-1+b2_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libz/libzstd/libzstd1_1.4.8+dfsg-2.1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/l/lcms2/liblcms2-2_2.12~rc1-2_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/l/lerc/liblerc4_4.0.0+ds-2_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/l/linux/linux-libc-dev_6.1.20-2~bpo11+1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/l/lz4/liblz4-1_1.9.3-2_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/l/lzo2/liblzo2-2_2.10-2_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/md4c/libmd4c0_0.4.7-2_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/libegl1-mesa_20.3.5-1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/libegl1-mesa-dev_20.3.5-1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/libgbm1_20.3.5-1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/libgbm-dev_20.3.5-1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/libgl1-mesa-dev_20.3.5-1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/libgl1-mesa-glx_20.3.5-1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/libglapi-mesa_20.3.5-1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/libwayland-egl1-mesa_20.3.5-1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/mesa-common-dev_20.3.5-1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/minizip/libminizip1_1.1-8+b1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/minizip/libminizip-dev_1.1-8+b1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mtdev/libmtdev1_1.1.6-1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/ncurses/libncurses6_6.2+20201114-2+deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/ncurses/libncurses-dev_6.2+20201114-2+deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/ncurses/libncursesw6_6.2+20201114-2+deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/ncurses/libtinfo6_6.2+20201114-2+deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/nettle/libhogweed6_3.7.3-1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/nettle/libnettle8_3.7.3-1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/nghttp2/libnghttp2-14_1.43.0-1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/nspr/libnspr4_4.29-1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/nspr/libnspr4-dev_4.29-1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/nss/libnss3_3.61-1+deb11u3_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/nss/libnss3-dev_3.61-1+deb11u3_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/o/openldap/libldap-2.4-2_2.4.59+dfsg-1~bpo11+1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/o/openssl/libssl1.1_1.1.1n-0+deb11u4_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/o/openssl/libssl-dev_1.1.1n-0+deb11u4_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/o/opus/libopus0_1.3.1-0.1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/o/opus/libopus-dev_1.3.1-0.1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/p11-kit/libp11-kit0_0.23.22-1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pam/libpam0g_1.4.0-9+deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pam/libpam0g-dev_1.4.0-9+deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pango1.0/libpango-1.0-0_1.46.2-3_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pango1.0/libpango1.0-dev_1.46.2-3_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pango1.0/libpangocairo-1.0-0_1.46.2-3_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pango1.0/libpangoft2-1.0-0_1.46.2-3_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pango1.0/libpangoxft-1.0-0_1.46.2-3_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pangox-compat/libpangox-1.0-0_0.0.2-5.1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pciutils/libpci3_3.7.0-5_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pciutils/libpci-dev_3.7.0-5_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre2/libpcre2-16-0_10.36-2+deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre2/libpcre2-32-0_10.36-2+deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre2/libpcre2-8-0_10.36-2+deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre2/libpcre2-dev_10.36-2+deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre2/libpcre2-posix2_10.36-2+deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre3/libpcre16-3_8.39-13_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre3/libpcre32-3_8.39-13_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre3/libpcre3_8.39-13_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre3/libpcre3-dev_8.39-13_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre3/libpcrecpp0v5_8.39-13_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pipewire/libpipewire-0.3-0_0.3.65-2~bpo11+1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pipewire/libpipewire-0.3-dev_0.3.65-2~bpo11+1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pipewire/libspa-0.2-dev_0.3.65-2~bpo11+1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pixman/libpixman-1-0_0.40.0-1.1~deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pixman/libpixman-1-dev_0.40.0-1.1~deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pulseaudio/libpulse0_14.2-2_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pulseaudio/libpulse-dev_14.2-2_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pulseaudio/libpulse-mainloop-glib0_14.2-2_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6concurrent6_6.4.2+dfsg-10~bpo11+1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6core6_6.4.2+dfsg-10~bpo11+1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6dbus6_6.4.2+dfsg-10~bpo11+1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6gui6_6.4.2+dfsg-10~bpo11+1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6network6_6.4.2+dfsg-10~bpo11+1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6opengl6_6.4.2+dfsg-10~bpo11+1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6openglwidgets6_6.4.2+dfsg-10~bpo11+1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6printsupport6_6.4.2+dfsg-10~bpo11+1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6sql6_6.4.2+dfsg-10~bpo11+1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6test6_6.4.2+dfsg-10~bpo11+1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6widgets6_6.4.2+dfsg-10~bpo11+1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6xml6_6.4.2+dfsg-10~bpo11+1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/qt6-base-dev_6.4.2+dfsg-10~bpo11+1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/qt6-base-dev-tools_6.4.2+dfsg-10~bpo11+1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5concurrent5_5.15.2+dfsg-9_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5core5a_5.15.2+dfsg-9_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5dbus5_5.15.2+dfsg-9_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5gui5_5.15.2+dfsg-9_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5network5_5.15.2+dfsg-9_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5printsupport5_5.15.2+dfsg-9_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5sql5_5.15.2+dfsg-9_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5test5_5.15.2+dfsg-9_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5widgets5_5.15.2+dfsg-9_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5xml5_5.15.2+dfsg-9_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/qtbase5-dev_5.15.2+dfsg-9_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/qtbase5-dev-tools_5.15.2+dfsg-9_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/r/re2/libre2-9_20210201+dfsg-1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/r/re2/libre2-dev_20210201+dfsg-1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/r/rtmpdump/librtmp1_2.4+20151223.gitfa8646d.1-2+b2_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/shared-mime-info/shared-mime-info_2.0-1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/snappy/libsnappy1v5_1.1.8-1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/snappy/libsnappy-dev_1.1.8-1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/speech-dispatcher/libspeechd2_0.11.4-2~bpo11+1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/speech-dispatcher/libspeechd-dev_0.11.4-2~bpo11+1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/sqlite3/libsqlite3-0_3.34.1-3_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/systemd/libsystemd0_252.5-2~bpo11+1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/systemd/libsystemd-dev_252.5-2~bpo11+1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/systemd/libudev1_252.5-2~bpo11+1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/systemd/libudev-dev_252.5-2~bpo11+1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/t/tcp-wrappers/libwrap0_7.6.q-31_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/t/tiff/libtiff5_4.2.0-1+deb11u4_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/t/tiff/libtiff6_4.5.0-6_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/t/tiff/libtiff-dev_4.2.0-1+deb11u4_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/t/tiff/libtiffxx5_4.2.0-1+deb11u4_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/t/tslib/libts0_1.22-1+b1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/u/unbound/libunbound8_1.17.1-2~bpo11+1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/u/util-linux/libblkid1_2.36.1-8+deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/u/util-linux/libblkid-dev_2.36.1-8+deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/u/util-linux/libmount1_2.36.1-8+deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/u/util-linux/libmount-dev_2.36.1-8+deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/u/util-linux/libuuid1_2.36.1-8+deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/u/util-linux/uuid-dev_2.36.1-8+deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/v/valgrind/valgrind_3.16.1-1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/v/vulkan-loader/libvulkan1_1.3.224.0-1~bpo11+1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/v/vulkan-loader/libvulkan-dev_1.3.224.0-1~bpo11+1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wayland/libwayland-bin_1.18.0-2~exp1.1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wayland/libwayland-client0_1.18.0-2~exp1.1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wayland/libwayland-cursor0_1.18.0-2~exp1.1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wayland/libwayland-dev_1.18.0-2~exp1.1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wayland/libwayland-egl1_1.18.0-2~exp1.1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wayland/libwayland-egl-backend-dev_1.18.0-2~exp1.1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wayland/libwayland-server0_1.18.0-2~exp1.1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wayland-protocols/wayland-protocols_1.20-1_all.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xcb-util-image/libxcb-image0_0.4.0-1+b3_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xcb-util-image/libxcb-image0-dev_0.4.0-1+b3_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xcb-util-keysyms/libxcb-keysyms1_0.4.0-1+b2_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xcb-util/libxcb-util1_0.4.0-1+b1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xcb-util/libxcb-util-dev_0.4.0-1+b1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xcb-util-renderutil/libxcb-render-util0_0.3.9-1+b1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xcb-util-renderutil/libxcb-render-util0-dev_0.3.9-1+b1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xcb-util-wm/libxcb-icccm4_0.4.1-1.1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xft/libxft2_2.3.2-2_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xft/libxft-dev_2.3.2-2_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xorgproto/x11proto-dev_2020.1-1_all.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xz-utils/liblzma5_5.2.5-2.1~deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/z/zlib/zlib1g_1.2.11.dfsg-2+deb11u2_arm64.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/z/zlib/zlib1g-dev_1.2.11.dfsg-2+deb11u2_arm64.deb diff --git a/build/linux/sysroot_scripts/generated_package_lists/bullseye.armel b/build/linux/sysroot_scripts/generated_package_lists/bullseye.armel index d67cd5d..bb1d76d 100644 --- a/build/linux/sysroot_scripts/generated_package_lists/bullseye.armel +++ b/build/linux/sysroot_scripts/generated_package_lists/bullseye.armel @@ -1,389 +1,407 @@ -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/a/alsa-lib/libasound2_1.2.4-1.1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/a/alsa-lib/libasound2-dev_1.2.4-1.1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/a/atk1.0/libatk1.0-0_2.38.0-1~bpo11+1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/a/atk1.0/libatk1.0-dev_2.38.0-1~bpo11+1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/a/at-spi2-atk/libatk-bridge2.0-0_2.38.0-4~bpo11+1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/a/at-spi2-atk/libatk-bridge2.0-dev_2.38.0-4~bpo11+1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/a/at-spi2-core/libatspi2.0-0_2.44.1-1~bpo11+1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/a/at-spi2-core/libatspi2.0-dev_2.44.1-1~bpo11+1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/a/attr/libattr1_2.4.48-6_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/a/audit/libaudit1_3.0-2_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/a/avahi/libavahi-client3_0.8-5+deb11u1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/a/avahi/libavahi-common3_0.8-5+deb11u1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/b/bluez/libbluetooth3_5.55-3.1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/b/bluez/libbluetooth-dev_5.55-3.1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/b/brotli/libbrotli1_1.0.9-2+b2_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/b/brotli/libbrotli-dev_1.0.9-2+b2_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/c/cairo/libcairo2_1.16.0-5_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/c/cairo/libcairo2-dev_1.16.0-5_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/c/cairo/libcairo-gobject2_1.16.0-5_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/c/cairo/libcairo-script-interpreter2_1.16.0-5_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/c/colord/libcolord2_1.4.5-3_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/c/cups/libcups2_2.3.3op2-3+deb11u2_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/c/cups/libcups2-dev_2.3.3op2-3+deb11u2_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/c/cups/libcupsimage2_2.3.3op2-3+deb11u2_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/c/cups/libcupsimage2-dev_2.3.3op2-3+deb11u2_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/c/curl/libcurl3-gnutls_7.85.0-1~bpo11+1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/c/curl/libcurl4-gnutls-dev_7.85.0-1~bpo11+1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/c/cyrus-sasl2/libsasl2-2_2.1.27+dfsg-2.1+deb11u1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/d/db5.3/libdb5.3_5.3.28+dfsg1-0.8_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/d/dbus-glib/libdbus-glib-1-2_0.110-6_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/d/dbus/libdbus-1-3_1.12.20-2_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/d/dbus/libdbus-1-dev_1.12.20-2_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/d/double-conversion/libdouble-conversion3_3.1.5-6.1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/e/e2fsprogs/comerr-dev_2.1-1.46.5-2~bpo11+2_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/e/e2fsprogs/libcom-err2_1.46.5-2~bpo11+2_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/e/elfutils/libelf1_0.187-1~bpo11+1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/e/elfutils/libelf-dev_0.187-1~bpo11+1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/e/expat/libexpat1_2.2.10-2+deb11u3_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/e/expat/libexpat1-dev_2.2.10-2+deb11u3_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/f/flac/libflac8_1.3.3-2+deb11u1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/f/flac/libflac-dev_1.3.3-2+deb11u1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/f/fontconfig/libfontconfig1_2.13.1-4.2_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/f/fontconfig/libfontconfig-dev_2.13.1-4.2_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/f/freetype/libfreetype6_2.10.4+dfsg-1+deb11u1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/f/freetype/libfreetype-dev_2.10.4+dfsg-1+deb11u1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/f/fribidi/libfribidi0_1.0.8-2+deb11u1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/f/fribidi/libfribidi-dev_1.0.8-2+deb11u1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gcc-10/libasan6_10.2.1-6_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gcc-10/libatomic1_10.2.1-6_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gcc-10/libgcc-10-dev_10.2.1-6_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gcc-10/libgcc-s1_10.2.1-6_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gcc-10/libgomp1_10.2.1-6_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gcc-10/libstdc++-10-dev_10.2.1-6_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gcc-10/libstdc++6_10.2.1-6_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gcc-10/libubsan1_10.2.1-6_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gdk-pixbuf/libgdk-pixbuf-2.0-0_2.42.2+dfsg-1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gdk-pixbuf/libgdk-pixbuf-2.0-dev_2.42.2+dfsg-1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/glib2.0/libglib2.0-0_2.66.8-1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/glib2.0/libglib2.0-dev_2.66.8-1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/glibc/libc6_2.31-13+deb11u5_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/glibc/libc6-dev_2.31-13+deb11u5_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gmp/libgmp10_6.2.1+dfsg-1+deb11u1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gnutls28/libgnutls28-dev_3.7.1-5+deb11u2_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gnutls28/libgnutls30_3.7.1-5+deb11u2_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gnutls28/libgnutls-dane0_3.7.1-5+deb11u2_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gnutls28/libgnutls-openssl27_3.7.1-5+deb11u2_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gnutls28/libgnutlsxx28_3.7.1-5+deb11u2_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/graphene/libgraphene-1.0-0_1.10.4+dfsg1-1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/graphene/libgraphene-1.0-dev_1.10.4+dfsg1-1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/graphite2/libgraphite2-3_1.3.14-1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/graphite2/libgraphite2-dev_1.3.14-1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gtk+2.0/libgtk2.0-0_2.24.33-2_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gtk+3.0/libgtk-3-0_3.24.24-4+deb11u2_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gtk+3.0/libgtk-3-dev_3.24.24-4+deb11u2_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gtk4/libgtk-4-1_4.8.1+ds-1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gtk4/libgtk-4-dev_4.8.1+ds-1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/h/harfbuzz/libharfbuzz0b_2.7.4-1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/h/harfbuzz/libharfbuzz-dev_2.7.4-1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/h/harfbuzz/libharfbuzz-gobject0_2.7.4-1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/h/harfbuzz/libharfbuzz-icu0_2.7.4-1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/i/icu-le-hb/libicu-le-hb0_1.0.3+git180724-3+b2_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/i/icu/libicu67_67.1-7_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/j/jbigkit/libjbig0_2.1-3.1+b2_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/j/jbigkit/libjbig-dev_2.1-3.1+b2_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/j/json-glib/libjson-glib-1.0-0_1.6.2-1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/k/keyutils/libkeyutils1_1.6.1-2_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/k/krb5/krb5-multidev_1.18.3-6+deb11u2_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/k/krb5/libgssapi-krb5-2_1.18.3-6+deb11u2_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/k/krb5/libgssrpc4_1.18.3-6+deb11u2_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/k/krb5/libk5crypto3_1.18.3-6+deb11u2_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/k/krb5/libkadm5clnt-mit12_1.18.3-6+deb11u2_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/k/krb5/libkadm5srv-mit12_1.18.3-6+deb11u2_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/k/krb5/libkdb5-10_1.18.3-6+deb11u2_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/k/krb5/libkrb5-3_1.18.3-6+deb11u2_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/k/krb5/libkrb5-dev_1.18.3-6+deb11u2_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/k/krb5/libkrb5support0_1.18.3-6+deb11u2_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/liba/libasyncns/libasyncns0_0.8-6+b2_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libb/libbsd/libbsd0_0.11.3-1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libc/libcap2/libcap2_2.44-1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libc/libcap2/libcap-dev_2.44-1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libc/libcap-ng/libcap-ng0_0.7.9-2.2+b1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libc/libcloudproviders/libcloudproviders0_0.3.0-3_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libd/libdatrie/libdatrie1_0.2.13-1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libd/libdatrie/libdatrie-dev_0.2.13-1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libd/libdbusmenu/libdbusmenu-glib4_18.10.20180917~bzr492+repack1-2_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libd/libdbusmenu/libdbusmenu-glib-dev_18.10.20180917~bzr492+repack1-2_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libd/libdbusmenu/libdbusmenu-gtk3-4_18.10.20180917~bzr492+repack1-2_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libd/libdbusmenu/libdbusmenu-gtk4_18.10.20180917~bzr492+repack1-2_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libd/libdeflate/libdeflate0_1.10-2~bpo11+1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libd/libdeflate/libdeflate-dev_1.10-2~bpo11+1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libd/libdrm/libdrm2_2.4.104-1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libd/libdrm/libdrm-amdgpu1_2.4.104-1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libd/libdrm/libdrm-dev_2.4.104-1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libd/libdrm/libdrm-exynos1_2.4.104-1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libd/libdrm/libdrm-freedreno1_2.4.104-1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libd/libdrm/libdrm-nouveau2_2.4.104-1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libd/libdrm/libdrm-omap1_2.4.104-1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libd/libdrm/libdrm-radeon1_2.4.104-1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libd/libdrm/libdrm-tegra0_2.4.104-1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libe/libepoxy/libepoxy0_1.5.8-1~bpo11+1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libe/libepoxy/libepoxy-dev_1.5.8-1~bpo11+1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libe/libevdev/libevdev2_1.11.0+dfsg-1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libe/libevdev/libevdev-dev_1.11.0+dfsg-1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libe/libevent/libevent-2.1-7_2.1.12-stable-1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libf/libffi/libffi7_3.3-6_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libf/libffi/libffi-dev_3.3-6_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libgcrypt20/libgcrypt20_1.8.7-6_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libgcrypt20/libgcrypt20-dev_1.8.7-6_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libglvnd/libegl1_1.3.2-1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libglvnd/libegl-dev_1.3.2-1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libglvnd/libgl1_1.3.2-1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libglvnd/libgl-dev_1.3.2-1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libglvnd/libgles1_1.3.2-1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libglvnd/libgles2_1.3.2-1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libglvnd/libgles-dev_1.3.2-1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libglvnd/libglvnd0_1.3.2-1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libglvnd/libglvnd-dev_1.3.2-1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libglvnd/libglx0_1.3.2-1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libglvnd/libglx-dev_1.3.2-1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libglvnd/libopengl0_1.3.2-1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libgnome-keyring/libgnome-keyring0_3.12.0-1+b2_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libgnome-keyring/libgnome-keyring-dev_3.12.0-1+b2_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libgpg-error/libgpg-error0_1.38-2_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libgpg-error/libgpg-error-dev_1.38-2_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libgudev/libgudev-1.0-0_234-1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libi/libice/libice6_1.0.10-1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libi/libidl/libidl-2-0_0.8.14-4+b12_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libi/libidn2/libidn2-0_2.3.0-5_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libi/libidn/libidn11_1.33-3_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libi/libinput/libinput10_1.16.4-3_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libi/libinput/libinput-dev_1.16.4-3_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libj/libjpeg-turbo/libjpeg62-turbo_2.0.6-4_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libj/libjpeg-turbo/libjpeg62-turbo-dev_2.0.6-4_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libj/libjsoncpp/libjsoncpp24_1.9.4-4_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libj/libjsoncpp/libjsoncpp-dev_1.9.4-4_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libm/libmd/libmd0_1.0.3-3_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libn/libnsl/libnsl2_1.3.0-2_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libn/libnss-db/libnss-db_2.2.3pre1-6+b10_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libo/libogg/libogg0_1.3.4-0.1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libo/libogg/libogg-dev_1.3.4-0.1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libp/libpciaccess/libpciaccess0_0.16-1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libp/libpng1.6/libpng16-16_1.6.37-3_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libp/libpng1.6/libpng-dev_1.6.37-3_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libp/libpsl/libpsl5_0.21.0-1.2_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libp/libpthread-stubs/libpthread-stubs0-dev_0.4-1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libr/librest/librest-0.7-0_0.8.1-1.1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libs/libselinux/libselinux1_3.1-3_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libs/libselinux/libselinux1-dev_3.1-3_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libs/libsepol/libsepol1_3.1-1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libs/libsepol/libsepol1-dev_3.1-1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libs/libsm/libsm6_1.2.3-1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libs/libsndfile/libsndfile1_1.0.31-2_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libs/libsoup2.4/libsoup2.4-1_2.72.0-2_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libs/libsoup2.4/libsoup-gnome2.4-1_2.72.0-2_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libs/libssh2/libssh2-1_1.9.0-2_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libt/libtasn1-6/libtasn1-6_4.16.0-2_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libt/libthai/libthai0_0.1.28-3_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libt/libthai/libthai-dev_0.1.28-3_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libt/libtirpc/libtirpc3_1.3.1-1+deb11u1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libt/libtool/libltdl7_2.4.6-15_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libu/libunistring/libunistring2_0.9.10-4_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libu/libutempter/libutempter0_1.2.1-2_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libu/libutempter/libutempter-dev_1.2.1-2_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libv/libva/libva2_2.14.0-1~bpo11+1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libv/libva/libva-dev_2.14.0-1~bpo11+1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libv/libva/libva-drm2_2.14.0-1~bpo11+1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libv/libva/libva-glx2_2.14.0-1~bpo11+1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libv/libva/libva-wayland2_2.14.0-1~bpo11+1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libv/libva/libva-x11-2_2.14.0-1~bpo11+1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libv/libvorbis/libvorbis0a_1.3.7-1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libv/libvorbis/libvorbisenc2_1.3.7-1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libw/libwacom/libwacom2_1.8-2_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libw/libwebp/libwebp6_0.6.1-2.1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libw/libwebp/libwebpdemux2_0.6.1-2.1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libw/libwebp/libwebp-dev_0.6.1-2.1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libw/libwebp/libwebpmux3_0.6.1-2.1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libx11/libx11-6_1.7.2-1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libx11/libx11-dev_1.7.2-1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libx11/libx11-xcb1_1.7.2-1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libx11/libx11-xcb-dev_1.7.2-1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxau/libxau6_1.0.9-1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxau/libxau-dev_1.0.9-1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb1_1.14-3_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb1-dev_1.14-3_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-dri2-0_1.14-3_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-dri2-0-dev_1.14-3_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-dri3-0_1.14-3_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-dri3-dev_1.14-3_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-glx0_1.14-3_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-glx0-dev_1.14-3_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-present0_1.14-3_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-present-dev_1.14-3_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-randr0_1.14-3_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-randr0-dev_1.14-3_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-render0_1.14-3_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-render0-dev_1.14-3_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-shape0_1.14-3_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-shape0-dev_1.14-3_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-shm0_1.14-3_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-shm0-dev_1.14-3_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-sync1_1.14-3_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-sync-dev_1.14-3_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-xfixes0_1.14-3_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-xfixes0-dev_1.14-3_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-xinerama0_1.14-3_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-xinput0_1.14-3_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-xkb1_1.14-3_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcomposite/libxcomposite1_0.4.5-1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcomposite/libxcomposite-dev_0.4.5-1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcrypt/libcrypt1_4.4.18-4_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcrypt/libcrypt-dev_4.4.18-4_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcursor/libxcursor1_1.2.0-2_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcursor/libxcursor-dev_1.2.0-2_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxdamage/libxdamage1_1.1.5-2_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxdamage/libxdamage-dev_1.1.5-2_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxdmcp/libxdmcp6_1.1.2-3_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxdmcp/libxdmcp-dev_1.1.2-3_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxext/libxext6_1.3.3-1.1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxext/libxext-dev_1.3.3-1.1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxfixes/libxfixes3_5.0.3-2_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxfixes/libxfixes-dev_5.0.3-2_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxi/libxi6_1.7.10-1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxi/libxi-dev_1.7.10-1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxinerama/libxinerama1_1.1.4-2_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxinerama/libxinerama-dev_1.1.4-2_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxkbcommon/libxkbcommon0_1.0.3-2_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxkbcommon/libxkbcommon-dev_1.0.3-2_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxkbcommon/libxkbcommon-x11-0_1.0.3-2_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxml2/libxml2_2.9.10+dfsg-6.7+deb11u2_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxml2/libxml2-dev_2.9.10+dfsg-6.7+deb11u2_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxrandr/libxrandr2_1.5.1-1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxrandr/libxrandr-dev_1.5.1-1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxrender/libxrender1_0.9.10-1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxrender/libxrender-dev_0.9.10-1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxshmfence/libxshmfence1_1.3-1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxshmfence/libxshmfence-dev_1.3-1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxslt/libxslt1.1_1.1.34-4+deb11u1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxslt/libxslt1-dev_1.1.34-4+deb11u1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxss/libxss1_1.2.3-1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxss/libxss-dev_1.2.3-1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxt/libxt6_1.2.0-1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxt/libxt-dev_1.2.0-1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxtst/libxtst6_1.2.3-1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxtst/libxtst-dev_1.2.3-1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxxf86vm/libxxf86vm1_1.1.4-1+b2_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxxf86vm/libxxf86vm-dev_1.1.4-1+b2_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libz/libzstd/libzstd1_1.4.8+dfsg-2.1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/l/lcms2/liblcms2-2_2.12~rc1-2_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/l/linux/linux-libc-dev_6.0.3-1~bpo11+1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/l/lz4/liblz4-1_1.9.3-2_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/l/lzo2/liblzo2-2_2.10-2_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/m/md4c/libmd4c0_0.4.7-2_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/m/mesa/libegl1-mesa_20.3.5-1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/m/mesa/libegl1-mesa-dev_20.3.5-1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/m/mesa/libgbm1_20.3.5-1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/m/mesa/libgbm-dev_20.3.5-1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/m/mesa/libgl1-mesa-dev_20.3.5-1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/m/mesa/libgl1-mesa-glx_20.3.5-1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/m/mesa/libglapi-mesa_20.3.5-1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/m/mesa/libwayland-egl1-mesa_20.3.5-1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/m/mesa/mesa-common-dev_20.3.5-1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/m/minizip/libminizip1_1.1-8+b1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/m/minizip/libminizip-dev_1.1-8+b1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/m/mtdev/libmtdev1_1.1.6-1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/n/ncurses/libncurses6_6.2+20201114-2_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/n/ncurses/libncurses-dev_6.2+20201114-2_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/n/ncurses/libncursesw6_6.2+20201114-2_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/n/ncurses/libtinfo6_6.2+20201114-2_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/n/nettle/libhogweed6_3.7.3-1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/n/nettle/libnettle8_3.7.3-1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/n/nghttp2/libnghttp2-14_1.43.0-1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/n/nspr/libnspr4_4.29-1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/n/nspr/libnspr4-dev_4.29-1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/n/nss/libnss3_3.61-1+deb11u2_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/n/nss/libnss3-dev_3.61-1+deb11u2_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/o/openldap/libldap-2.4-2_2.4.59+dfsg-1~bpo11+1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/o/openssl/libssl1.1_1.1.1n-0+deb11u3_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/o/openssl/libssl-dev_1.1.1n-0+deb11u3_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/o/opus/libopus0_1.3.1-0.1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/o/opus/libopus-dev_1.3.1-0.1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/p11-kit/libp11-kit0_0.23.22-1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pam/libpam0g_1.4.0-9+deb11u1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pam/libpam0g-dev_1.4.0-9+deb11u1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pango1.0/libpango-1.0-0_1.46.2-3_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pango1.0/libpango1.0-dev_1.46.2-3_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pango1.0/libpangocairo-1.0-0_1.46.2-3_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pango1.0/libpangoft2-1.0-0_1.46.2-3_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pango1.0/libpangoxft-1.0-0_1.46.2-3_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pangox-compat/libpangox-1.0-0_0.0.2-5.1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pciutils/libpci3_3.7.0-5_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pciutils/libpci-dev_3.7.0-5_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pcre2/libpcre2-16-0_10.36-2+deb11u1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pcre2/libpcre2-32-0_10.36-2+deb11u1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pcre2/libpcre2-8-0_10.36-2+deb11u1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pcre2/libpcre2-dev_10.36-2+deb11u1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pcre2/libpcre2-posix2_10.36-2+deb11u1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pcre3/libpcre16-3_8.39-13_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pcre3/libpcre32-3_8.39-13_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pcre3/libpcre3_8.39-13_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pcre3/libpcre3-dev_8.39-13_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pcre3/libpcrecpp0v5_8.39-13_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pipewire/libpipewire-0.3-0_0.3.58-2~bpo11+1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pipewire/libpipewire-0.3-dev_0.3.58-2~bpo11+1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pipewire/libspa-0.2-dev_0.3.58-2~bpo11+1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pixman/libpixman-1-0_0.40.0-1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pixman/libpixman-1-dev_0.40.0-1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pulseaudio/libpulse0_14.2-2_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pulseaudio/libpulse-dev_14.2-2_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pulseaudio/libpulse-mainloop-glib0_14.2-2_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/q/qtbase-opensource-src/libqt5concurrent5_5.15.2+dfsg-9_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/q/qtbase-opensource-src/libqt5core5a_5.15.2+dfsg-9_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/q/qtbase-opensource-src/libqt5dbus5_5.15.2+dfsg-9_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/q/qtbase-opensource-src/libqt5gui5_5.15.2+dfsg-9_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/q/qtbase-opensource-src/libqt5network5_5.15.2+dfsg-9_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/q/qtbase-opensource-src/libqt5printsupport5_5.15.2+dfsg-9_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/q/qtbase-opensource-src/libqt5sql5_5.15.2+dfsg-9_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/q/qtbase-opensource-src/libqt5test5_5.15.2+dfsg-9_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/q/qtbase-opensource-src/libqt5widgets5_5.15.2+dfsg-9_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/q/qtbase-opensource-src/libqt5xml5_5.15.2+dfsg-9_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/q/qtbase-opensource-src/qtbase5-dev_5.15.2+dfsg-9_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/q/qtbase-opensource-src/qtbase5-dev-tools_5.15.2+dfsg-9_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/r/re2/libre2-9_20210201+dfsg-1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/r/re2/libre2-dev_20210201+dfsg-1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/r/rtmpdump/librtmp1_2.4+20151223.gitfa8646d.1-2+b2_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/s/shared-mime-info/shared-mime-info_2.0-1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/s/snappy/libsnappy1v5_1.1.8-1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/s/snappy/libsnappy-dev_1.1.8-1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/s/speech-dispatcher/libspeechd2_0.11.4-1~bpo11+1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/s/speech-dispatcher/libspeechd-dev_0.11.4-1~bpo11+1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/s/sqlite3/libsqlite3-0_3.34.1-3_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/s/systemd/libsystemd0_251.3-1~bpo11+1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/s/systemd/libsystemd-dev_251.3-1~bpo11+1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/s/systemd/libudev1_251.3-1~bpo11+1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/s/systemd/libudev-dev_251.3-1~bpo11+1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/t/tcp-wrappers/libwrap0_7.6.q-31_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/t/tiff/libtiff5_4.2.0-1+deb11u1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/t/tiff/libtiff-dev_4.2.0-1+deb11u1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/t/tiff/libtiffxx5_4.2.0-1+deb11u1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/u/unbound/libunbound8_1.13.1-1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/u/util-linux/libblkid1_2.36.1-8+deb11u1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/u/util-linux/libblkid-dev_2.36.1-8+deb11u1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/u/util-linux/libmount1_2.36.1-8+deb11u1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/u/util-linux/libmount-dev_2.36.1-8+deb11u1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/u/util-linux/libuuid1_2.36.1-8+deb11u1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/u/util-linux/uuid-dev_2.36.1-8+deb11u1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/v/vulkan-loader/libvulkan1_1.3.224.0-1~bpo11+1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/v/vulkan-loader/libvulkan-dev_1.3.224.0-1~bpo11+1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/w/wayland/libwayland-bin_1.18.0-2~exp1.1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/w/wayland/libwayland-client0_1.18.0-2~exp1.1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/w/wayland/libwayland-cursor0_1.18.0-2~exp1.1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/w/wayland/libwayland-dev_1.18.0-2~exp1.1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/w/wayland/libwayland-egl1_1.18.0-2~exp1.1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/w/wayland/libwayland-egl-backend-dev_1.18.0-2~exp1.1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/w/wayland/libwayland-server0_1.18.0-2~exp1.1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/w/wayland-protocols/wayland-protocols_1.20-1_all.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/x/xcb-util-image/libxcb-image0_0.4.0-1+b3_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/x/xcb-util-image/libxcb-image0-dev_0.4.0-1+b3_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/x/xcb-util-keysyms/libxcb-keysyms1_0.4.0-1+b2_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/x/xcb-util/libxcb-util1_0.4.0-1+b1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/x/xcb-util/libxcb-util-dev_0.4.0-1+b1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/x/xcb-util-renderutil/libxcb-render-util0_0.3.9-1+b1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/x/xcb-util-renderutil/libxcb-render-util0-dev_0.3.9-1+b1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/x/xcb-util-wm/libxcb-icccm4_0.4.1-1.1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/x/xft/libxft2_2.3.2-2_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/x/xft/libxft-dev_2.3.2-2_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/x/xorgproto/x11proto-dev_2020.1-1_all.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/x/xz-utils/liblzma5_5.2.5-2.1~deb11u1_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/z/zlib/zlib1g_1.2.11.dfsg-2+deb11u2_armel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/z/zlib/zlib1g-dev_1.2.11.dfsg-2+deb11u2_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/alsa-lib/libasound2_1.2.4-1.1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/alsa-lib/libasound2-dev_1.2.4-1.1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/atk1.0/libatk1.0-0_2.38.0-1~bpo11+1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/atk1.0/libatk1.0-dev_2.38.0-1~bpo11+1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/at-spi2-atk/libatk-bridge2.0-0_2.38.0-4~bpo11+1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/at-spi2-atk/libatk-bridge2.0-dev_2.38.0-4~bpo11+1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/at-spi2-core/libatspi2.0-0_2.44.1-1~bpo11+1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/at-spi2-core/libatspi2.0-dev_2.44.1-1~bpo11+1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/attr/libattr1_2.4.48-6_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/audit/libaudit1_3.0-2_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/avahi/libavahi-client3_0.8-5+deb11u2_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/avahi/libavahi-common3_0.8-5+deb11u2_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/b/bluez/libbluetooth3_5.55-3.1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/b/bluez/libbluetooth-dev_5.55-3.1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/b/brotli/libbrotli1_1.0.9-2+b2_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/b/brotli/libbrotli-dev_1.0.9-2+b2_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cairo/libcairo2_1.16.0-5_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cairo/libcairo2-dev_1.16.0-5_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cairo/libcairo-gobject2_1.16.0-5_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cairo/libcairo-script-interpreter2_1.16.0-5_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/colord/libcolord2_1.4.5-3_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cups/libcups2_2.3.3op2-3+deb11u2_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cups/libcups2-dev_2.3.3op2-3+deb11u2_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cups/libcupsimage2_2.3.3op2-3+deb11u2_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cups/libcupsimage2-dev_2.3.3op2-3+deb11u2_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/curl/libcurl3-gnutls_7.88.1-7~bpo11+2_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/curl/libcurl4-gnutls-dev_7.88.1-7~bpo11+2_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cyrus-sasl2/libsasl2-2_2.1.27+dfsg-2.1+deb11u1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/d/db5.3/libdb5.3_5.3.28+dfsg1-0.8_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/d/dbus-glib/libdbus-glib-1-2_0.110-6_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/d/dbus/libdbus-1-3_1.12.24-0+deb11u1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/d/dbus/libdbus-1-dev_1.12.24-0+deb11u1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/d/double-conversion/libdouble-conversion3_3.1.5-6.1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/e/e2fsprogs/comerr-dev_2.1-1.46.6-1~bpo11+1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/e/e2fsprogs/libcom-err2_1.46.6-1~bpo11+1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/e/elfutils/libelf1_0.187-1~bpo11+1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/e/elfutils/libelf-dev_0.187-1~bpo11+1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/e/expat/libexpat1_2.2.10-2+deb11u5_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/e/expat/libexpat1-dev_2.2.10-2+deb11u5_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/flac/libflac8_1.3.3-2+deb11u1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/flac/libflac-dev_1.3.3-2+deb11u1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/fontconfig/libfontconfig1_2.13.1-4.2_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/fontconfig/libfontconfig-dev_2.13.1-4.2_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/freetype/libfreetype6_2.10.4+dfsg-1+deb11u1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/freetype/libfreetype-dev_2.10.4+dfsg-1+deb11u1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/fribidi/libfribidi0_1.0.8-2+deb11u1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/fribidi/libfribidi-dev_1.0.8-2+deb11u1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libasan6_10.2.1-6_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libatomic1_10.2.1-6_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libgcc-10-dev_10.2.1-6_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libgcc-s1_10.2.1-6_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libgomp1_10.2.1-6_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libstdc++-10-dev_10.2.1-6_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libstdc++6_10.2.1-6_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libubsan1_10.2.1-6_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gdk-pixbuf/libgdk-pixbuf-2.0-0_2.42.2+dfsg-1+deb11u1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gdk-pixbuf/libgdk-pixbuf-2.0-dev_2.42.2+dfsg-1+deb11u1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/glib2.0/libglib2.0-0_2.66.8-1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/glib2.0/libglib2.0-dev_2.66.8-1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/glibc/libc6_2.31-13+deb11u5_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/glibc/libc6-dev_2.31-13+deb11u5_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gmp/libgmp10_6.2.1+dfsg-1+deb11u1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gnutls28/libgnutls28-dev_3.7.1-5+deb11u3_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gnutls28/libgnutls30_3.7.1-5+deb11u3_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gnutls28/libgnutls-dane0_3.7.1-5+deb11u3_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gnutls28/libgnutls-openssl27_3.7.1-5+deb11u3_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gnutls28/libgnutlsxx28_3.7.1-5+deb11u3_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/graphene/libgraphene-1.0-0_1.10.4+dfsg1-1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/graphene/libgraphene-1.0-dev_1.10.4+dfsg1-1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/graphite2/libgraphite2-3_1.3.14-1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/graphite2/libgraphite2-dev_1.3.14-1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gtk+2.0/libgtk2.0-0_2.24.33-2_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gtk+3.0/libgtk-3-0_3.24.24-4+deb11u3_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gtk+3.0/libgtk-3-dev_3.24.24-4+deb11u3_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gtk4/libgtk-4-1_4.8.3+ds-2_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gtk4/libgtk-4-dev_4.8.3+ds-2_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/h/harfbuzz/libharfbuzz0b_2.7.4-1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/h/harfbuzz/libharfbuzz-dev_2.7.4-1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/h/harfbuzz/libharfbuzz-gobject0_2.7.4-1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/h/harfbuzz/libharfbuzz-icu0_2.7.4-1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/i/icu-le-hb/libicu-le-hb0_1.0.3+git180724-3+b2_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/i/icu/libicu67_67.1-7_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/j/jbigkit/libjbig0_2.1-3.1+b2_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/j/jbigkit/libjbig-dev_2.1-3.1+b2_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/j/json-glib/libjson-glib-1.0-0_1.6.2-1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/keyutils/libkeyutils1_1.6.1-2_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/krb5-multidev_1.18.3-6+deb11u3_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libgssapi-krb5-2_1.18.3-6+deb11u3_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libgssrpc4_1.18.3-6+deb11u3_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libk5crypto3_1.18.3-6+deb11u3_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libkadm5clnt-mit12_1.18.3-6+deb11u3_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libkadm5srv-mit12_1.18.3-6+deb11u3_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libkdb5-10_1.18.3-6+deb11u3_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libkrb5-3_1.18.3-6+deb11u3_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libkrb5-dev_1.18.3-6+deb11u3_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libkrb5support0_1.18.3-6+deb11u3_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/liba/libasyncns/libasyncns0_0.8-6+b2_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libb/libb2/libb2-1_0.98.1-1.1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libb/libbsd/libbsd0_0.11.3-1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libc/libcap2/libcap2_2.44-1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libc/libcap2/libcap-dev_2.44-1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libc/libcap-ng/libcap-ng0_0.7.9-2.2+b1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libc/libcloudproviders/libcloudproviders0_0.3.0-3_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdatrie/libdatrie1_0.2.13-1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdatrie/libdatrie-dev_0.2.13-1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdbusmenu/libdbusmenu-glib4_18.10.20180917~bzr492+repack1-2_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdbusmenu/libdbusmenu-glib-dev_18.10.20180917~bzr492+repack1-2_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdbusmenu/libdbusmenu-gtk3-4_18.10.20180917~bzr492+repack1-2_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdbusmenu/libdbusmenu-gtk4_18.10.20180917~bzr492+repack1-2_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdeflate/libdeflate0_1.10-2~bpo11+1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdeflate/libdeflate-dev_1.10-2~bpo11+1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdrm/libdrm2_2.4.104-1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdrm/libdrm-amdgpu1_2.4.104-1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdrm/libdrm-dev_2.4.104-1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdrm/libdrm-exynos1_2.4.104-1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdrm/libdrm-freedreno1_2.4.104-1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdrm/libdrm-nouveau2_2.4.104-1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdrm/libdrm-omap1_2.4.104-1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdrm/libdrm-radeon1_2.4.104-1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdrm/libdrm-tegra0_2.4.104-1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libe/libepoxy/libepoxy0_1.5.8-1~bpo11+1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libe/libepoxy/libepoxy-dev_1.5.8-1~bpo11+1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libe/libevdev/libevdev2_1.11.0+dfsg-1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libe/libevdev/libevdev-dev_1.11.0+dfsg-1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libe/libevent/libevent-2.1-7_2.1.12-stable-1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libf/libffi/libffi7_3.3-6_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libf/libffi/libffi-dev_3.3-6_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libgcrypt20/libgcrypt20_1.8.7-6_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libgcrypt20/libgcrypt20-dev_1.8.7-6_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libegl1_1.3.2-1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libegl-dev_1.3.2-1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libgl1_1.3.2-1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libgl-dev_1.3.2-1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libgles1_1.3.2-1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libgles2_1.3.2-1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libgles-dev_1.3.2-1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libglvnd0_1.3.2-1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libglvnd-dev_1.3.2-1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libglx0_1.3.2-1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libglx-dev_1.3.2-1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libopengl0_1.3.2-1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libgpg-error/libgpg-error0_1.38-2_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libgpg-error/libgpg-error-dev_1.38-2_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libgudev/libgudev-1.0-0_234-1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libi/libice/libice6_1.0.10-1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libi/libidl/libidl-2-0_0.8.14-4+b12_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libi/libidn2/libidn2-0_2.3.0-5_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libi/libidn/libidn11_1.33-3_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libi/libinput/libinput10_1.16.4-3_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libi/libinput/libinput-dev_1.16.4-3_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libj/libjpeg-turbo/libjpeg62-turbo_2.0.6-4_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libj/libjpeg-turbo/libjpeg62-turbo-dev_2.0.6-4_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libj/libjsoncpp/libjsoncpp24_1.9.4-4_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libj/libjsoncpp/libjsoncpp-dev_1.9.4-4_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libm/libmd/libmd0_1.0.3-3_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libn/libnsl/libnsl2_1.3.0-2_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libn/libnss-db/libnss-db_2.2.3pre1-6+b10_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libo/libogg/libogg0_1.3.4-0.1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libo/libogg/libogg-dev_1.3.4-0.1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libp/libpciaccess/libpciaccess0_0.16-1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libp/libpng1.6/libpng16-16_1.6.37-3_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libp/libpng1.6/libpng-dev_1.6.37-3_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libp/libproxy/libproxy1v5_0.4.17-1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libp/libpsl/libpsl5_0.21.0-1.2_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libp/libpthread-stubs/libpthread-stubs0-dev_0.4-1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libr/librest/librest-0.7-0_0.8.1-1.1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libselinux/libselinux1_3.1-3_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libselinux/libselinux1-dev_3.1-3_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libsepol/libsepol1_3.1-1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libsepol/libsepol1-dev_3.1-1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libsm/libsm6_1.2.3-1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libsndfile/libsndfile1_1.0.31-2_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libsoup2.4/libsoup2.4-1_2.72.0-2_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libsoup2.4/libsoup-gnome2.4-1_2.72.0-2_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libssh2/libssh2-1_1.9.0-2_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libt/libtasn1-6/libtasn1-6_4.16.0-2+deb11u1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libt/libthai/libthai0_0.1.28-3_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libt/libthai/libthai-dev_0.1.28-3_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libt/libtirpc/libtirpc3_1.3.1-1+deb11u1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libt/libtool/libltdl7_2.4.6-15_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libu/libunistring/libunistring2_0.9.10-4_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libu/libutempter/libutempter0_1.2.1-2_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libu/libutempter/libutempter-dev_1.2.1-2_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libva/libva2_2.17.0-1~bpo11+1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libva/libva-dev_2.17.0-1~bpo11+1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libva/libva-drm2_2.17.0-1~bpo11+1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libva/libva-glx2_2.17.0-1~bpo11+1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libva/libva-wayland2_2.17.0-1~bpo11+1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libva/libva-x11-2_2.17.0-1~bpo11+1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libvorbis/libvorbis0a_1.3.7-1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libvorbis/libvorbisenc2_1.3.7-1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libw/libwacom/libwacom2_1.8-2_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libw/libwebp/libwebp6_0.6.1-2.1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libw/libwebp/libwebp7_1.2.4-0.2_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libw/libwebp/libwebpdemux2_0.6.1-2.1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libw/libwebp/libwebp-dev_0.6.1-2.1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libw/libwebp/libwebpmux3_0.6.1-2.1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libx11/libx11-6_1.7.2-1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libx11/libx11-dev_1.7.2-1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libx11/libx11-xcb1_1.7.2-1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libx11/libx11-xcb-dev_1.7.2-1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxau/libxau6_1.0.9-1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxau/libxau-dev_1.0.9-1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb1_1.14-3_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb1-dev_1.14-3_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-dri2-0_1.14-3_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-dri2-0-dev_1.14-3_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-dri3-0_1.14-3_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-dri3-dev_1.14-3_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-glx0_1.14-3_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-glx0-dev_1.14-3_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-present0_1.14-3_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-present-dev_1.14-3_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-randr0_1.14-3_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-randr0-dev_1.14-3_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-render0_1.14-3_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-render0-dev_1.14-3_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-shape0_1.14-3_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-shape0-dev_1.14-3_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-shm0_1.14-3_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-shm0-dev_1.14-3_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-sync1_1.14-3_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-sync-dev_1.14-3_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-xfixes0_1.14-3_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-xfixes0-dev_1.14-3_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-xinerama0_1.14-3_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-xinput0_1.14-3_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-xkb1_1.14-3_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcomposite/libxcomposite1_0.4.5-1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcomposite/libxcomposite-dev_0.4.5-1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcrypt/libcrypt1_4.4.18-4_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcrypt/libcrypt-dev_4.4.18-4_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcursor/libxcursor1_1.2.0-2_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcursor/libxcursor-dev_1.2.0-2_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxdamage/libxdamage1_1.1.5-2_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxdamage/libxdamage-dev_1.1.5-2_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxdmcp/libxdmcp6_1.1.2-3_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxdmcp/libxdmcp-dev_1.1.2-3_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxext/libxext6_1.3.3-1.1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxext/libxext-dev_1.3.3-1.1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxfixes/libxfixes3_5.0.3-2_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxfixes/libxfixes-dev_5.0.3-2_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxi/libxi6_1.7.10-1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxi/libxi-dev_1.7.10-1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxinerama/libxinerama1_1.1.4-2_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxinerama/libxinerama-dev_1.1.4-2_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxkbcommon/libxkbcommon0_1.0.3-2_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxkbcommon/libxkbcommon-dev_1.0.3-2_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxkbcommon/libxkbcommon-x11-0_1.0.3-2_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxml2/libxml2_2.9.10+dfsg-6.7+deb11u4_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxml2/libxml2-dev_2.9.10+dfsg-6.7+deb11u4_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxrandr/libxrandr2_1.5.1-1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxrandr/libxrandr-dev_1.5.1-1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxrender/libxrender1_0.9.10-1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxrender/libxrender-dev_0.9.10-1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxshmfence/libxshmfence1_1.3-1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxshmfence/libxshmfence-dev_1.3-1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxslt/libxslt1.1_1.1.34-4+deb11u1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxslt/libxslt1-dev_1.1.34-4+deb11u1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxss/libxss1_1.2.3-1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxss/libxss-dev_1.2.3-1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxt/libxt6_1.2.0-1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxt/libxt-dev_1.2.0-1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxtst/libxtst6_1.2.3-1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxtst/libxtst-dev_1.2.3-1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxxf86vm/libxxf86vm1_1.1.4-1+b2_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxxf86vm/libxxf86vm-dev_1.1.4-1+b2_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libz/libzstd/libzstd1_1.4.8+dfsg-2.1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/l/lcms2/liblcms2-2_2.12~rc1-2_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/l/lerc/liblerc4_4.0.0+ds-2_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/l/linux/linux-libc-dev_6.1.20-2~bpo11+1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/l/lz4/liblz4-1_1.9.3-2_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/l/lzo2/liblzo2-2_2.10-2_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/md4c/libmd4c0_0.4.7-2_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/libegl1-mesa_20.3.5-1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/libegl1-mesa-dev_20.3.5-1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/libgbm1_20.3.5-1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/libgbm-dev_20.3.5-1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/libgl1-mesa-dev_20.3.5-1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/libgl1-mesa-glx_20.3.5-1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/libglapi-mesa_20.3.5-1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/libwayland-egl1-mesa_20.3.5-1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/mesa-common-dev_20.3.5-1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/minizip/libminizip1_1.1-8+b1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/minizip/libminizip-dev_1.1-8+b1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mtdev/libmtdev1_1.1.6-1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/ncurses/libncurses6_6.2+20201114-2+deb11u1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/ncurses/libncurses-dev_6.2+20201114-2+deb11u1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/ncurses/libncursesw6_6.2+20201114-2+deb11u1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/ncurses/libtinfo6_6.2+20201114-2+deb11u1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/nettle/libhogweed6_3.7.3-1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/nettle/libnettle8_3.7.3-1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/nghttp2/libnghttp2-14_1.43.0-1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/nspr/libnspr4_4.29-1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/nspr/libnspr4-dev_4.29-1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/nss/libnss3_3.61-1+deb11u3_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/nss/libnss3-dev_3.61-1+deb11u3_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/o/openldap/libldap-2.4-2_2.4.59+dfsg-1~bpo11+1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/o/openssl/libssl1.1_1.1.1n-0+deb11u4_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/o/openssl/libssl-dev_1.1.1n-0+deb11u4_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/o/opus/libopus0_1.3.1-0.1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/o/opus/libopus-dev_1.3.1-0.1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/p11-kit/libp11-kit0_0.23.22-1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pam/libpam0g_1.4.0-9+deb11u1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pam/libpam0g-dev_1.4.0-9+deb11u1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pango1.0/libpango-1.0-0_1.46.2-3_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pango1.0/libpango1.0-dev_1.46.2-3_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pango1.0/libpangocairo-1.0-0_1.46.2-3_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pango1.0/libpangoft2-1.0-0_1.46.2-3_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pango1.0/libpangoxft-1.0-0_1.46.2-3_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pangox-compat/libpangox-1.0-0_0.0.2-5.1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pciutils/libpci3_3.7.0-5_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pciutils/libpci-dev_3.7.0-5_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre2/libpcre2-16-0_10.36-2+deb11u1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre2/libpcre2-32-0_10.36-2+deb11u1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre2/libpcre2-8-0_10.36-2+deb11u1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre2/libpcre2-dev_10.36-2+deb11u1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre2/libpcre2-posix2_10.36-2+deb11u1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre3/libpcre16-3_8.39-13_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre3/libpcre32-3_8.39-13_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre3/libpcre3_8.39-13_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre3/libpcre3-dev_8.39-13_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre3/libpcrecpp0v5_8.39-13_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pipewire/libpipewire-0.3-0_0.3.65-2~bpo11+1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pipewire/libpipewire-0.3-dev_0.3.65-2~bpo11+1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pipewire/libspa-0.2-dev_0.3.65-2~bpo11+1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pixman/libpixman-1-0_0.40.0-1.1~deb11u1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pixman/libpixman-1-dev_0.40.0-1.1~deb11u1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pulseaudio/libpulse0_14.2-2_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pulseaudio/libpulse-dev_14.2-2_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pulseaudio/libpulse-mainloop-glib0_14.2-2_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6concurrent6_6.4.2+dfsg-10~bpo11+1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6core6_6.4.2+dfsg-10~bpo11+1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6dbus6_6.4.2+dfsg-10~bpo11+1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6gui6_6.4.2+dfsg-10~bpo11+1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6network6_6.4.2+dfsg-10~bpo11+1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6opengl6_6.4.2+dfsg-10~bpo11+1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6openglwidgets6_6.4.2+dfsg-10~bpo11+1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6printsupport6_6.4.2+dfsg-10~bpo11+1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6sql6_6.4.2+dfsg-10~bpo11+1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6test6_6.4.2+dfsg-10~bpo11+1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6widgets6_6.4.2+dfsg-10~bpo11+1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6xml6_6.4.2+dfsg-10~bpo11+1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/qt6-base-dev_6.4.2+dfsg-10~bpo11+1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/qt6-base-dev-tools_6.4.2+dfsg-10~bpo11+1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5concurrent5_5.15.2+dfsg-9_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5core5a_5.15.2+dfsg-9_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5dbus5_5.15.2+dfsg-9_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5gui5_5.15.2+dfsg-9_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5network5_5.15.2+dfsg-9_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5printsupport5_5.15.2+dfsg-9_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5sql5_5.15.2+dfsg-9_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5test5_5.15.2+dfsg-9_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5widgets5_5.15.2+dfsg-9_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5xml5_5.15.2+dfsg-9_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/qtbase5-dev_5.15.2+dfsg-9_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/qtbase5-dev-tools_5.15.2+dfsg-9_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/r/re2/libre2-9_20210201+dfsg-1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/r/re2/libre2-dev_20210201+dfsg-1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/r/rtmpdump/librtmp1_2.4+20151223.gitfa8646d.1-2+b2_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/shared-mime-info/shared-mime-info_2.0-1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/snappy/libsnappy1v5_1.1.8-1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/snappy/libsnappy-dev_1.1.8-1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/speech-dispatcher/libspeechd2_0.11.4-2~bpo11+1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/speech-dispatcher/libspeechd-dev_0.11.4-2~bpo11+1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/sqlite3/libsqlite3-0_3.34.1-3_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/systemd/libsystemd0_252.5-2~bpo11+1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/systemd/libsystemd-dev_252.5-2~bpo11+1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/systemd/libudev1_252.5-2~bpo11+1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/systemd/libudev-dev_252.5-2~bpo11+1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/t/tcp-wrappers/libwrap0_7.6.q-31_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/t/tiff/libtiff5_4.2.0-1+deb11u4_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/t/tiff/libtiff6_4.5.0-6_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/t/tiff/libtiff-dev_4.2.0-1+deb11u4_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/t/tiff/libtiffxx5_4.2.0-1+deb11u4_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/t/tslib/libts0_1.22-1+b1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/u/unbound/libunbound8_1.17.1-2~bpo11+1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/u/util-linux/libblkid1_2.36.1-8+deb11u1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/u/util-linux/libblkid-dev_2.36.1-8+deb11u1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/u/util-linux/libmount1_2.36.1-8+deb11u1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/u/util-linux/libmount-dev_2.36.1-8+deb11u1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/u/util-linux/libuuid1_2.36.1-8+deb11u1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/u/util-linux/uuid-dev_2.36.1-8+deb11u1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/v/vulkan-loader/libvulkan1_1.3.224.0-1~bpo11+1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/v/vulkan-loader/libvulkan-dev_1.3.224.0-1~bpo11+1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wayland/libwayland-bin_1.18.0-2~exp1.1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wayland/libwayland-client0_1.18.0-2~exp1.1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wayland/libwayland-cursor0_1.18.0-2~exp1.1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wayland/libwayland-dev_1.18.0-2~exp1.1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wayland/libwayland-egl1_1.18.0-2~exp1.1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wayland/libwayland-egl-backend-dev_1.18.0-2~exp1.1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wayland/libwayland-server0_1.18.0-2~exp1.1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wayland-protocols/wayland-protocols_1.20-1_all.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xcb-util-image/libxcb-image0_0.4.0-1+b3_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xcb-util-image/libxcb-image0-dev_0.4.0-1+b3_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xcb-util-keysyms/libxcb-keysyms1_0.4.0-1+b2_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xcb-util/libxcb-util1_0.4.0-1+b1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xcb-util/libxcb-util-dev_0.4.0-1+b1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xcb-util-renderutil/libxcb-render-util0_0.3.9-1+b1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xcb-util-renderutil/libxcb-render-util0-dev_0.3.9-1+b1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xcb-util-wm/libxcb-icccm4_0.4.1-1.1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xft/libxft2_2.3.2-2_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xft/libxft-dev_2.3.2-2_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xorgproto/x11proto-dev_2020.1-1_all.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xz-utils/liblzma5_5.2.5-2.1~deb11u1_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/z/zlib/zlib1g_1.2.11.dfsg-2+deb11u2_armel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/z/zlib/zlib1g-dev_1.2.11.dfsg-2+deb11u2_armel.deb diff --git a/build/linux/sysroot_scripts/generated_package_lists/bullseye.armhf b/build/linux/sysroot_scripts/generated_package_lists/bullseye.armhf new file mode 100644 index 0000000..2785535 --- /dev/null +++ b/build/linux/sysroot_scripts/generated_package_lists/bullseye.armhf @@ -0,0 +1,409 @@ +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/alsa-lib/libasound2_1.2.4-1.1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/alsa-lib/libasound2-dev_1.2.4-1.1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/atk1.0/libatk1.0-0_2.38.0-1~bpo11+1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/atk1.0/libatk1.0-dev_2.38.0-1~bpo11+1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/at-spi2-atk/libatk-bridge2.0-0_2.38.0-4~bpo11+1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/at-spi2-atk/libatk-bridge2.0-dev_2.38.0-4~bpo11+1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/at-spi2-core/libatspi2.0-0_2.44.1-1~bpo11+1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/at-spi2-core/libatspi2.0-dev_2.44.1-1~bpo11+1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/attr/libattr1_2.4.48-6_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/audit/libaudit1_3.0-2_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/avahi/libavahi-client3_0.8-5+deb11u2_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/avahi/libavahi-common3_0.8-5+deb11u2_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/b/bluez/libbluetooth3_5.55-3.1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/b/bluez/libbluetooth-dev_5.55-3.1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/b/brotli/libbrotli1_1.0.9-2+b2_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/b/brotli/libbrotli-dev_1.0.9-2+b2_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cairo/libcairo2_1.16.0-5_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cairo/libcairo2-dev_1.16.0-5_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cairo/libcairo-gobject2_1.16.0-5_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cairo/libcairo-script-interpreter2_1.16.0-5_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/colord/libcolord2_1.4.5-3_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cups/libcups2_2.3.3op2-3+deb11u2_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cups/libcups2-dev_2.3.3op2-3+deb11u2_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cups/libcupsimage2_2.3.3op2-3+deb11u2_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cups/libcupsimage2-dev_2.3.3op2-3+deb11u2_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/curl/libcurl3-gnutls_7.88.1-7~bpo11+2_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/curl/libcurl4-gnutls-dev_7.88.1-7~bpo11+2_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cyrus-sasl2/libsasl2-2_2.1.27+dfsg-2.1+deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/d/db5.3/libdb5.3_5.3.28+dfsg1-0.8_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/d/dbus-glib/libdbus-glib-1-2_0.110-6_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/d/dbus/libdbus-1-3_1.12.24-0+deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/d/dbus/libdbus-1-dev_1.12.24-0+deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/d/double-conversion/libdouble-conversion3_3.1.5-6.1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/e/e2fsprogs/comerr-dev_2.1-1.46.6-1~bpo11+1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/e/e2fsprogs/libcom-err2_1.46.6-1~bpo11+1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/e/elfutils/libelf1_0.187-1~bpo11+1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/e/elfutils/libelf-dev_0.187-1~bpo11+1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/e/expat/libexpat1_2.2.10-2+deb11u5_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/e/expat/libexpat1-dev_2.2.10-2+deb11u5_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/flac/libflac8_1.3.3-2+deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/flac/libflac-dev_1.3.3-2+deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/fontconfig/libfontconfig1_2.13.1-4.2_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/fontconfig/libfontconfig-dev_2.13.1-4.2_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/freetype/libfreetype6_2.10.4+dfsg-1+deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/freetype/libfreetype-dev_2.10.4+dfsg-1+deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/fribidi/libfribidi0_1.0.8-2+deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/fribidi/libfribidi-dev_1.0.8-2+deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libasan6_10.2.1-6_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libatomic1_10.2.1-6_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libgcc-10-dev_10.2.1-6_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libgcc-s1_10.2.1-6_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libgomp1_10.2.1-6_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libstdc++-10-dev_10.2.1-6_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libstdc++6_10.2.1-6_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libubsan1_10.2.1-6_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gdk-pixbuf/libgdk-pixbuf-2.0-0_2.42.2+dfsg-1+deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gdk-pixbuf/libgdk-pixbuf-2.0-dev_2.42.2+dfsg-1+deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/glib2.0/libglib2.0-0_2.66.8-1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/glib2.0/libglib2.0-dev_2.66.8-1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/glibc/libc6_2.31-13+deb11u5_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/glibc/libc6-dev_2.31-13+deb11u5_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gmp/libgmp10_6.2.1+dfsg-1+deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gnutls28/libgnutls28-dev_3.7.1-5+deb11u3_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gnutls28/libgnutls30_3.7.1-5+deb11u3_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gnutls28/libgnutls-dane0_3.7.1-5+deb11u3_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gnutls28/libgnutls-openssl27_3.7.1-5+deb11u3_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gnutls28/libgnutlsxx28_3.7.1-5+deb11u3_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/graphene/libgraphene-1.0-0_1.10.4+dfsg1-1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/graphene/libgraphene-1.0-dev_1.10.4+dfsg1-1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/graphite2/libgraphite2-3_1.3.14-1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/graphite2/libgraphite2-dev_1.3.14-1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gtk+2.0/libgtk2.0-0_2.24.33-2_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gtk+3.0/libgtk-3-0_3.24.24-4+deb11u3_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gtk+3.0/libgtk-3-dev_3.24.24-4+deb11u3_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gtk4/libgtk-4-1_4.8.3+ds-2_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gtk4/libgtk-4-dev_4.8.3+ds-2_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/h/harfbuzz/libharfbuzz0b_2.7.4-1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/h/harfbuzz/libharfbuzz-dev_2.7.4-1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/h/harfbuzz/libharfbuzz-gobject0_2.7.4-1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/h/harfbuzz/libharfbuzz-icu0_2.7.4-1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/i/icu-le-hb/libicu-le-hb0_1.0.3+git180724-3+b2_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/i/icu/libicu67_67.1-7_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/j/jbigkit/libjbig0_2.1-3.1+b2_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/j/jbigkit/libjbig-dev_2.1-3.1+b2_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/j/json-glib/libjson-glib-1.0-0_1.6.2-1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/keyutils/libkeyutils1_1.6.1-2_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/krb5-multidev_1.18.3-6+deb11u3_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libgssapi-krb5-2_1.18.3-6+deb11u3_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libgssrpc4_1.18.3-6+deb11u3_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libk5crypto3_1.18.3-6+deb11u3_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libkadm5clnt-mit12_1.18.3-6+deb11u3_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libkadm5srv-mit12_1.18.3-6+deb11u3_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libkdb5-10_1.18.3-6+deb11u3_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libkrb5-3_1.18.3-6+deb11u3_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libkrb5-dev_1.18.3-6+deb11u3_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libkrb5support0_1.18.3-6+deb11u3_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/liba/libasyncns/libasyncns0_0.8-6+b2_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libb/libb2/libb2-1_0.98.1-1.1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libb/libbsd/libbsd0_0.11.3-1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libc/libcap2/libcap2_2.44-1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libc/libcap2/libcap-dev_2.44-1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libc/libcap-ng/libcap-ng0_0.7.9-2.2+b1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libc/libcloudproviders/libcloudproviders0_0.3.0-3_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdatrie/libdatrie1_0.2.13-1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdatrie/libdatrie-dev_0.2.13-1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdbusmenu/libdbusmenu-glib4_18.10.20180917~bzr492+repack1-2_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdbusmenu/libdbusmenu-glib-dev_18.10.20180917~bzr492+repack1-2_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdbusmenu/libdbusmenu-gtk3-4_18.10.20180917~bzr492+repack1-2_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdbusmenu/libdbusmenu-gtk4_18.10.20180917~bzr492+repack1-2_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdeflate/libdeflate0_1.10-2~bpo11+1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdeflate/libdeflate-dev_1.10-2~bpo11+1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdrm/libdrm2_2.4.104-1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdrm/libdrm-amdgpu1_2.4.104-1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdrm/libdrm-dev_2.4.104-1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdrm/libdrm-etnaviv1_2.4.104-1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdrm/libdrm-exynos1_2.4.104-1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdrm/libdrm-freedreno1_2.4.104-1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdrm/libdrm-nouveau2_2.4.104-1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdrm/libdrm-omap1_2.4.104-1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdrm/libdrm-radeon1_2.4.104-1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdrm/libdrm-tegra0_2.4.104-1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libe/libepoxy/libepoxy0_1.5.8-1~bpo11+1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libe/libepoxy/libepoxy-dev_1.5.8-1~bpo11+1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libe/libevdev/libevdev2_1.11.0+dfsg-1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libe/libevdev/libevdev-dev_1.11.0+dfsg-1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libe/libevent/libevent-2.1-7_2.1.12-stable-1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libf/libffi/libffi7_3.3-6_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libf/libffi/libffi-dev_3.3-6_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libgcrypt20/libgcrypt20_1.8.7-6_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libgcrypt20/libgcrypt20-dev_1.8.7-6_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libegl1_1.3.2-1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libegl-dev_1.3.2-1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libgl1_1.3.2-1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libgl-dev_1.3.2-1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libgles1_1.3.2-1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libgles2_1.3.2-1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libgles-dev_1.3.2-1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libglvnd0_1.3.2-1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libglvnd-dev_1.3.2-1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libglx0_1.3.2-1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libglx-dev_1.3.2-1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libopengl0_1.3.2-1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libgpg-error/libgpg-error0_1.38-2_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libgpg-error/libgpg-error-dev_1.38-2_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libgudev/libgudev-1.0-0_234-1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libi/libice/libice6_1.0.10-1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libi/libidl/libidl-2-0_0.8.14-4+b12_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libi/libidn2/libidn2-0_2.3.0-5_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libi/libidn/libidn11_1.33-3_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libi/libinput/libinput10_1.16.4-3_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libi/libinput/libinput-dev_1.16.4-3_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libj/libjpeg-turbo/libjpeg62-turbo_2.0.6-4_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libj/libjpeg-turbo/libjpeg62-turbo-dev_2.0.6-4_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libj/libjsoncpp/libjsoncpp24_1.9.4-4_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libj/libjsoncpp/libjsoncpp-dev_1.9.4-4_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libm/libmd/libmd0_1.0.3-3_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libn/libnsl/libnsl2_1.3.0-2_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libn/libnss-db/libnss-db_2.2.3pre1-6+b10_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libo/libogg/libogg0_1.3.4-0.1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libo/libogg/libogg-dev_1.3.4-0.1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libp/libpciaccess/libpciaccess0_0.16-1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libp/libpng1.6/libpng16-16_1.6.37-3_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libp/libpng1.6/libpng-dev_1.6.37-3_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libp/libproxy/libproxy1v5_0.4.17-1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libp/libpsl/libpsl5_0.21.0-1.2_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libp/libpthread-stubs/libpthread-stubs0-dev_0.4-1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libr/librest/librest-0.7-0_0.8.1-1.1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libselinux/libselinux1_3.1-3_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libselinux/libselinux1-dev_3.1-3_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libsepol/libsepol1_3.1-1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libsepol/libsepol1-dev_3.1-1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libsm/libsm6_1.2.3-1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libsndfile/libsndfile1_1.0.31-2_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libsoup2.4/libsoup2.4-1_2.72.0-2_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libsoup2.4/libsoup-gnome2.4-1_2.72.0-2_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libssh2/libssh2-1_1.9.0-2_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libt/libtasn1-6/libtasn1-6_4.16.0-2+deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libt/libthai/libthai0_0.1.28-3_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libt/libthai/libthai-dev_0.1.28-3_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libt/libtirpc/libtirpc3_1.3.1-1+deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libt/libtool/libltdl7_2.4.6-15_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libu/libunistring/libunistring2_0.9.10-4_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libu/libutempter/libutempter0_1.2.1-2_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libu/libutempter/libutempter-dev_1.2.1-2_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libva/libva2_2.17.0-1~bpo11+1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libva/libva-dev_2.17.0-1~bpo11+1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libva/libva-drm2_2.17.0-1~bpo11+1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libva/libva-glx2_2.17.0-1~bpo11+1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libva/libva-wayland2_2.17.0-1~bpo11+1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libva/libva-x11-2_2.17.0-1~bpo11+1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libvorbis/libvorbis0a_1.3.7-1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libvorbis/libvorbisenc2_1.3.7-1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libw/libwacom/libwacom2_1.8-2_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libw/libwebp/libwebp6_0.6.1-2.1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libw/libwebp/libwebp7_1.2.4-0.2_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libw/libwebp/libwebpdemux2_0.6.1-2.1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libw/libwebp/libwebp-dev_0.6.1-2.1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libw/libwebp/libwebpmux3_0.6.1-2.1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libx11/libx11-6_1.7.2-1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libx11/libx11-dev_1.7.2-1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libx11/libx11-xcb1_1.7.2-1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libx11/libx11-xcb-dev_1.7.2-1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxau/libxau6_1.0.9-1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxau/libxau-dev_1.0.9-1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb1_1.14-3_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb1-dev_1.14-3_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-dri2-0_1.14-3_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-dri2-0-dev_1.14-3_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-dri3-0_1.14-3_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-dri3-dev_1.14-3_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-glx0_1.14-3_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-glx0-dev_1.14-3_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-present0_1.14-3_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-present-dev_1.14-3_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-randr0_1.14-3_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-randr0-dev_1.14-3_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-render0_1.14-3_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-render0-dev_1.14-3_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-shape0_1.14-3_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-shape0-dev_1.14-3_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-shm0_1.14-3_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-shm0-dev_1.14-3_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-sync1_1.14-3_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-sync-dev_1.14-3_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-xfixes0_1.14-3_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-xfixes0-dev_1.14-3_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-xinerama0_1.14-3_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-xinput0_1.14-3_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-xkb1_1.14-3_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcomposite/libxcomposite1_0.4.5-1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcomposite/libxcomposite-dev_0.4.5-1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcrypt/libcrypt1_4.4.18-4_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcrypt/libcrypt-dev_4.4.18-4_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcursor/libxcursor1_1.2.0-2_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcursor/libxcursor-dev_1.2.0-2_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxdamage/libxdamage1_1.1.5-2_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxdamage/libxdamage-dev_1.1.5-2_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxdmcp/libxdmcp6_1.1.2-3_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxdmcp/libxdmcp-dev_1.1.2-3_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxext/libxext6_1.3.3-1.1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxext/libxext-dev_1.3.3-1.1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxfixes/libxfixes3_5.0.3-2_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxfixes/libxfixes-dev_5.0.3-2_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxi/libxi6_1.7.10-1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxi/libxi-dev_1.7.10-1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxinerama/libxinerama1_1.1.4-2_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxinerama/libxinerama-dev_1.1.4-2_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxkbcommon/libxkbcommon0_1.0.3-2_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxkbcommon/libxkbcommon-dev_1.0.3-2_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxkbcommon/libxkbcommon-x11-0_1.0.3-2_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxml2/libxml2_2.9.10+dfsg-6.7+deb11u4_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxml2/libxml2-dev_2.9.10+dfsg-6.7+deb11u4_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxrandr/libxrandr2_1.5.1-1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxrandr/libxrandr-dev_1.5.1-1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxrender/libxrender1_0.9.10-1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxrender/libxrender-dev_0.9.10-1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxshmfence/libxshmfence1_1.3-1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxshmfence/libxshmfence-dev_1.3-1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxslt/libxslt1.1_1.1.34-4+deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxslt/libxslt1-dev_1.1.34-4+deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxss/libxss1_1.2.3-1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxss/libxss-dev_1.2.3-1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxt/libxt6_1.2.0-1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxt/libxt-dev_1.2.0-1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxtst/libxtst6_1.2.3-1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxtst/libxtst-dev_1.2.3-1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxxf86vm/libxxf86vm1_1.1.4-1+b2_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxxf86vm/libxxf86vm-dev_1.1.4-1+b2_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libz/libzstd/libzstd1_1.4.8+dfsg-2.1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/l/lcms2/liblcms2-2_2.12~rc1-2_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/l/lerc/liblerc4_4.0.0+ds-2_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/l/linux/linux-libc-dev_6.1.20-2~bpo11+1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/l/lz4/liblz4-1_1.9.3-2_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/l/lzo2/liblzo2-2_2.10-2_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/md4c/libmd4c0_0.4.7-2_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/libegl1-mesa_20.3.5-1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/libegl1-mesa-dev_20.3.5-1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/libgbm1_20.3.5-1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/libgbm-dev_20.3.5-1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/libgl1-mesa-dev_20.3.5-1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/libgl1-mesa-glx_20.3.5-1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/libglapi-mesa_20.3.5-1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/libwayland-egl1-mesa_20.3.5-1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/mesa-common-dev_20.3.5-1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/minizip/libminizip1_1.1-8+b1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/minizip/libminizip-dev_1.1-8+b1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mtdev/libmtdev1_1.1.6-1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/ncurses/libncurses6_6.2+20201114-2+deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/ncurses/libncurses-dev_6.2+20201114-2+deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/ncurses/libncursesw6_6.2+20201114-2+deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/ncurses/libtinfo6_6.2+20201114-2+deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/nettle/libhogweed6_3.7.3-1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/nettle/libnettle8_3.7.3-1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/nghttp2/libnghttp2-14_1.43.0-1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/nspr/libnspr4_4.29-1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/nspr/libnspr4-dev_4.29-1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/nss/libnss3_3.61-1+deb11u3_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/nss/libnss3-dev_3.61-1+deb11u3_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/o/openldap/libldap-2.4-2_2.4.59+dfsg-1~bpo11+1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/o/openssl/libssl1.1_1.1.1n-0+deb11u4_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/o/openssl/libssl-dev_1.1.1n-0+deb11u4_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/o/opus/libopus0_1.3.1-0.1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/o/opus/libopus-dev_1.3.1-0.1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/p11-kit/libp11-kit0_0.23.22-1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pam/libpam0g_1.4.0-9+deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pam/libpam0g-dev_1.4.0-9+deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pango1.0/libpango-1.0-0_1.46.2-3_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pango1.0/libpango1.0-dev_1.46.2-3_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pango1.0/libpangocairo-1.0-0_1.46.2-3_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pango1.0/libpangoft2-1.0-0_1.46.2-3_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pango1.0/libpangoxft-1.0-0_1.46.2-3_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pangox-compat/libpangox-1.0-0_0.0.2-5.1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pciutils/libpci3_3.7.0-5_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pciutils/libpci-dev_3.7.0-5_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre2/libpcre2-16-0_10.36-2+deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre2/libpcre2-32-0_10.36-2+deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre2/libpcre2-8-0_10.36-2+deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre2/libpcre2-dev_10.36-2+deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre2/libpcre2-posix2_10.36-2+deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre3/libpcre16-3_8.39-13_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre3/libpcre32-3_8.39-13_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre3/libpcre3_8.39-13_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre3/libpcre3-dev_8.39-13_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre3/libpcrecpp0v5_8.39-13_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pipewire/libpipewire-0.3-0_0.3.65-2~bpo11+1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pipewire/libpipewire-0.3-dev_0.3.65-2~bpo11+1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pipewire/libspa-0.2-dev_0.3.65-2~bpo11+1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pixman/libpixman-1-0_0.40.0-1.1~deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pixman/libpixman-1-dev_0.40.0-1.1~deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pulseaudio/libpulse0_14.2-2_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pulseaudio/libpulse-dev_14.2-2_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pulseaudio/libpulse-mainloop-glib0_14.2-2_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6concurrent6_6.4.2+dfsg-10~bpo11+1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6core6_6.4.2+dfsg-10~bpo11+1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6dbus6_6.4.2+dfsg-10~bpo11+1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6gui6_6.4.2+dfsg-10~bpo11+1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6network6_6.4.2+dfsg-10~bpo11+1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6opengl6_6.4.2+dfsg-10~bpo11+1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6openglwidgets6_6.4.2+dfsg-10~bpo11+1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6printsupport6_6.4.2+dfsg-10~bpo11+1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6sql6_6.4.2+dfsg-10~bpo11+1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6test6_6.4.2+dfsg-10~bpo11+1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6widgets6_6.4.2+dfsg-10~bpo11+1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6xml6_6.4.2+dfsg-10~bpo11+1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/qt6-base-dev_6.4.2+dfsg-10~bpo11+1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/qt6-base-dev-tools_6.4.2+dfsg-10~bpo11+1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5concurrent5_5.15.2+dfsg-9_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5core5a_5.15.2+dfsg-9_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5dbus5_5.15.2+dfsg-9_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5gui5_5.15.2+dfsg-9_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5network5_5.15.2+dfsg-9_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5printsupport5_5.15.2+dfsg-9_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5sql5_5.15.2+dfsg-9_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5test5_5.15.2+dfsg-9_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5widgets5_5.15.2+dfsg-9_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5xml5_5.15.2+dfsg-9_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/qtbase5-dev_5.15.2+dfsg-9_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/qtbase5-dev-tools_5.15.2+dfsg-9_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/r/re2/libre2-9_20210201+dfsg-1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/r/re2/libre2-dev_20210201+dfsg-1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/r/rtmpdump/librtmp1_2.4+20151223.gitfa8646d.1-2+b2_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/shared-mime-info/shared-mime-info_2.0-1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/snappy/libsnappy1v5_1.1.8-1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/snappy/libsnappy-dev_1.1.8-1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/speech-dispatcher/libspeechd2_0.11.4-2~bpo11+1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/speech-dispatcher/libspeechd-dev_0.11.4-2~bpo11+1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/sqlite3/libsqlite3-0_3.34.1-3_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/systemd/libsystemd0_252.5-2~bpo11+1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/systemd/libsystemd-dev_252.5-2~bpo11+1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/systemd/libudev1_252.5-2~bpo11+1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/systemd/libudev-dev_252.5-2~bpo11+1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/t/tcp-wrappers/libwrap0_7.6.q-31_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/t/tiff/libtiff5_4.2.0-1+deb11u4_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/t/tiff/libtiff6_4.5.0-6_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/t/tiff/libtiff-dev_4.2.0-1+deb11u4_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/t/tiff/libtiffxx5_4.2.0-1+deb11u4_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/t/tslib/libts0_1.22-1+b1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/u/unbound/libunbound8_1.17.1-2~bpo11+1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/u/util-linux/libblkid1_2.36.1-8+deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/u/util-linux/libblkid-dev_2.36.1-8+deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/u/util-linux/libmount1_2.36.1-8+deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/u/util-linux/libmount-dev_2.36.1-8+deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/u/util-linux/libuuid1_2.36.1-8+deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/u/util-linux/uuid-dev_2.36.1-8+deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/v/valgrind/valgrind_3.16.1-1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/v/vulkan-loader/libvulkan1_1.3.224.0-1~bpo11+1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/v/vulkan-loader/libvulkan-dev_1.3.224.0-1~bpo11+1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wayland/libwayland-bin_1.18.0-2~exp1.1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wayland/libwayland-client0_1.18.0-2~exp1.1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wayland/libwayland-cursor0_1.18.0-2~exp1.1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wayland/libwayland-dev_1.18.0-2~exp1.1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wayland/libwayland-egl1_1.18.0-2~exp1.1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wayland/libwayland-egl-backend-dev_1.18.0-2~exp1.1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wayland/libwayland-server0_1.18.0-2~exp1.1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wayland-protocols/wayland-protocols_1.20-1_all.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xcb-util-image/libxcb-image0_0.4.0-1+b3_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xcb-util-image/libxcb-image0-dev_0.4.0-1+b3_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xcb-util-keysyms/libxcb-keysyms1_0.4.0-1+b2_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xcb-util/libxcb-util1_0.4.0-1+b1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xcb-util/libxcb-util-dev_0.4.0-1+b1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xcb-util-renderutil/libxcb-render-util0_0.3.9-1+b1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xcb-util-renderutil/libxcb-render-util0-dev_0.3.9-1+b1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xcb-util-wm/libxcb-icccm4_0.4.1-1.1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xft/libxft2_2.3.2-2_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xft/libxft-dev_2.3.2-2_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xorgproto/x11proto-dev_2020.1-1_all.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xz-utils/liblzma5_5.2.5-2.1~deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/z/zlib/zlib1g_1.2.11.dfsg-2+deb11u2_armhf.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/z/zlib/zlib1g-dev_1.2.11.dfsg-2+deb11u2_armhf.deb diff --git a/build/linux/sysroot_scripts/generated_package_lists/bullseye.i386 b/build/linux/sysroot_scripts/generated_package_lists/bullseye.i386 index 4802e40..cd354e2 100644 --- a/build/linux/sysroot_scripts/generated_package_lists/bullseye.i386 +++ b/build/linux/sysroot_scripts/generated_package_lists/bullseye.i386 @@ -1,389 +1,407 @@ -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/a/alsa-lib/libasound2_1.2.4-1.1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/a/alsa-lib/libasound2-dev_1.2.4-1.1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/a/atk1.0/libatk1.0-0_2.38.0-1~bpo11+1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/a/atk1.0/libatk1.0-dev_2.38.0-1~bpo11+1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/a/at-spi2-atk/libatk-bridge2.0-0_2.38.0-4~bpo11+1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/a/at-spi2-atk/libatk-bridge2.0-dev_2.38.0-4~bpo11+1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/a/at-spi2-core/libatspi2.0-0_2.44.1-1~bpo11+1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/a/at-spi2-core/libatspi2.0-dev_2.44.1-1~bpo11+1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/a/attr/libattr1_2.4.48-6_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/a/audit/libaudit1_3.0-2_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/a/avahi/libavahi-client3_0.8-5+deb11u1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/a/avahi/libavahi-common3_0.8-5+deb11u1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/b/bluez/libbluetooth3_5.55-3.1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/b/bluez/libbluetooth-dev_5.55-3.1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/b/brotli/libbrotli1_1.0.9-2+b2_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/b/brotli/libbrotli-dev_1.0.9-2+b2_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/c/cairo/libcairo2_1.16.0-5_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/c/cairo/libcairo2-dev_1.16.0-5_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/c/cairo/libcairo-gobject2_1.16.0-5_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/c/cairo/libcairo-script-interpreter2_1.16.0-5_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/c/colord/libcolord2_1.4.5-3_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/c/cups/libcups2_2.3.3op2-3+deb11u2_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/c/cups/libcups2-dev_2.3.3op2-3+deb11u2_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/c/cups/libcupsimage2_2.3.3op2-3+deb11u2_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/c/cups/libcupsimage2-dev_2.3.3op2-3+deb11u2_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/c/curl/libcurl3-gnutls_7.85.0-1~bpo11+1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/c/curl/libcurl4-gnutls-dev_7.85.0-1~bpo11+1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/c/cyrus-sasl2/libsasl2-2_2.1.27+dfsg-2.1+deb11u1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/d/db5.3/libdb5.3_5.3.28+dfsg1-0.8_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/d/dbus-glib/libdbus-glib-1-2_0.110-6_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/d/dbus/libdbus-1-3_1.12.20-2_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/d/dbus/libdbus-1-dev_1.12.20-2_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/d/double-conversion/libdouble-conversion3_3.1.5-6.1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/e/e2fsprogs/comerr-dev_2.1-1.46.5-2~bpo11+2_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/e/e2fsprogs/libcom-err2_1.46.5-2~bpo11+2_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/e/elfutils/libelf1_0.187-1~bpo11+1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/e/elfutils/libelf-dev_0.187-1~bpo11+1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/e/expat/libexpat1_2.2.10-2+deb11u3_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/e/expat/libexpat1-dev_2.2.10-2+deb11u3_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/f/flac/libflac8_1.3.3-2+deb11u1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/f/flac/libflac-dev_1.3.3-2+deb11u1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/f/fontconfig/libfontconfig1_2.13.1-4.2_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/f/fontconfig/libfontconfig-dev_2.13.1-4.2_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/f/freetype/libfreetype6_2.10.4+dfsg-1+deb11u1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/f/freetype/libfreetype-dev_2.10.4+dfsg-1+deb11u1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/f/fribidi/libfribidi0_1.0.8-2+deb11u1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/f/fribidi/libfribidi-dev_1.0.8-2+deb11u1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gcc-10/libasan6_10.2.1-6_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gcc-10/libatomic1_10.2.1-6_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gcc-10/libgcc-10-dev_10.2.1-6_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gcc-10/libgcc-s1_10.2.1-6_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gcc-10/libgomp1_10.2.1-6_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gcc-10/libitm1_10.2.1-6_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gcc-10/libquadmath0_10.2.1-6_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gcc-10/libstdc++-10-dev_10.2.1-6_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gcc-10/libstdc++6_10.2.1-6_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gcc-10/libubsan1_10.2.1-6_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gdk-pixbuf/libgdk-pixbuf-2.0-0_2.42.2+dfsg-1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gdk-pixbuf/libgdk-pixbuf-2.0-dev_2.42.2+dfsg-1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/glib2.0/libglib2.0-0_2.66.8-1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/glib2.0/libglib2.0-dev_2.66.8-1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/glibc/libc6_2.31-13+deb11u5_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/glibc/libc6-dev_2.31-13+deb11u5_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gmp/libgmp10_6.2.1+dfsg-1+deb11u1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gnutls28/libgnutls28-dev_3.7.1-5+deb11u2_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gnutls28/libgnutls30_3.7.1-5+deb11u2_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gnutls28/libgnutls-dane0_3.7.1-5+deb11u2_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gnutls28/libgnutls-openssl27_3.7.1-5+deb11u2_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gnutls28/libgnutlsxx28_3.7.1-5+deb11u2_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/graphene/libgraphene-1.0-0_1.10.4+dfsg1-1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/graphene/libgraphene-1.0-dev_1.10.4+dfsg1-1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/graphite2/libgraphite2-3_1.3.14-1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/graphite2/libgraphite2-dev_1.3.14-1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gtk+2.0/libgtk2.0-0_2.24.33-2_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gtk+3.0/libgtk-3-0_3.24.24-4+deb11u2_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gtk+3.0/libgtk-3-dev_3.24.24-4+deb11u2_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gtk4/libgtk-4-1_4.8.1+ds-1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gtk4/libgtk-4-dev_4.8.1+ds-1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/h/harfbuzz/libharfbuzz0b_2.7.4-1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/h/harfbuzz/libharfbuzz-dev_2.7.4-1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/h/harfbuzz/libharfbuzz-gobject0_2.7.4-1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/h/harfbuzz/libharfbuzz-icu0_2.7.4-1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/i/icu-le-hb/libicu-le-hb0_1.0.3+git180724-3+b2_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/i/icu/libicu67_67.1-7_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/j/jbigkit/libjbig0_2.1-3.1+b2_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/j/jbigkit/libjbig-dev_2.1-3.1+b2_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/j/json-glib/libjson-glib-1.0-0_1.6.2-1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/k/keyutils/libkeyutils1_1.6.1-2_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/k/krb5/krb5-multidev_1.18.3-6+deb11u2_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/k/krb5/libgssapi-krb5-2_1.18.3-6+deb11u2_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/k/krb5/libgssrpc4_1.18.3-6+deb11u2_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/k/krb5/libk5crypto3_1.18.3-6+deb11u2_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/k/krb5/libkadm5clnt-mit12_1.18.3-6+deb11u2_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/k/krb5/libkadm5srv-mit12_1.18.3-6+deb11u2_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/k/krb5/libkdb5-10_1.18.3-6+deb11u2_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/k/krb5/libkrb5-3_1.18.3-6+deb11u2_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/k/krb5/libkrb5-dev_1.18.3-6+deb11u2_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/k/krb5/libkrb5support0_1.18.3-6+deb11u2_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/liba/libasyncns/libasyncns0_0.8-6+b2_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libb/libbsd/libbsd0_0.11.3-1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libc/libcap2/libcap2_2.44-1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libc/libcap2/libcap-dev_2.44-1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libc/libcap-ng/libcap-ng0_0.7.9-2.2+b1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libc/libcloudproviders/libcloudproviders0_0.3.0-3_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libd/libdatrie/libdatrie1_0.2.13-1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libd/libdatrie/libdatrie-dev_0.2.13-1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libd/libdbusmenu/libdbusmenu-glib4_18.10.20180917~bzr492+repack1-2_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libd/libdbusmenu/libdbusmenu-glib-dev_18.10.20180917~bzr492+repack1-2_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libd/libdbusmenu/libdbusmenu-gtk3-4_18.10.20180917~bzr492+repack1-2_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libd/libdbusmenu/libdbusmenu-gtk4_18.10.20180917~bzr492+repack1-2_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libd/libdeflate/libdeflate0_1.10-2~bpo11+1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libd/libdeflate/libdeflate-dev_1.10-2~bpo11+1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libd/libdrm/libdrm2_2.4.104-1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libd/libdrm/libdrm-amdgpu1_2.4.104-1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libd/libdrm/libdrm-dev_2.4.104-1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libd/libdrm/libdrm-intel1_2.4.104-1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libd/libdrm/libdrm-nouveau2_2.4.104-1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libd/libdrm/libdrm-radeon1_2.4.104-1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libe/libepoxy/libepoxy0_1.5.8-1~bpo11+1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libe/libepoxy/libepoxy-dev_1.5.8-1~bpo11+1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libe/libevdev/libevdev2_1.11.0+dfsg-1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libe/libevdev/libevdev-dev_1.11.0+dfsg-1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libe/libevent/libevent-2.1-7_2.1.12-stable-1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libf/libffi/libffi7_3.3-6_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libf/libffi/libffi-dev_3.3-6_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libgcrypt20/libgcrypt20_1.8.7-6_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libgcrypt20/libgcrypt20-dev_1.8.7-6_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libglvnd/libegl1_1.3.2-1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libglvnd/libegl-dev_1.3.2-1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libglvnd/libgl1_1.3.2-1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libglvnd/libgl-dev_1.3.2-1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libglvnd/libgles1_1.3.2-1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libglvnd/libgles2_1.3.2-1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libglvnd/libgles-dev_1.3.2-1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libglvnd/libglvnd0_1.3.2-1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libglvnd/libglvnd-dev_1.3.2-1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libglvnd/libglx0_1.3.2-1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libglvnd/libglx-dev_1.3.2-1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libglvnd/libopengl0_1.3.2-1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libgnome-keyring/libgnome-keyring0_3.12.0-1+b2_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libgnome-keyring/libgnome-keyring-dev_3.12.0-1+b2_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libgpg-error/libgpg-error0_1.38-2_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libgpg-error/libgpg-error-dev_1.38-2_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libgudev/libgudev-1.0-0_234-1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libi/libice/libice6_1.0.10-1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libi/libidl/libidl-2-0_0.8.14-4+b12_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libi/libidn2/libidn2-0_2.3.0-5_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libi/libidn/libidn11_1.33-3_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libi/libinput/libinput10_1.16.4-3_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libi/libinput/libinput-dev_1.16.4-3_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libj/libjpeg-turbo/libjpeg62-turbo_2.0.6-4_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libj/libjpeg-turbo/libjpeg62-turbo-dev_2.0.6-4_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libj/libjsoncpp/libjsoncpp24_1.9.4-4_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libj/libjsoncpp/libjsoncpp-dev_1.9.4-4_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libm/libmd/libmd0_1.0.3-3_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libn/libnsl/libnsl2_1.3.0-2_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libn/libnss-db/libnss-db_2.2.3pre1-6+b10_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libo/libogg/libogg0_1.3.4-0.1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libo/libogg/libogg-dev_1.3.4-0.1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libp/libpciaccess/libpciaccess0_0.16-1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libp/libpng1.6/libpng16-16_1.6.37-3_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libp/libpng1.6/libpng-dev_1.6.37-3_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libp/libpsl/libpsl5_0.21.0-1.2_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libp/libpthread-stubs/libpthread-stubs0-dev_0.4-1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libr/librest/librest-0.7-0_0.8.1-1.1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libs/libselinux/libselinux1_3.1-3_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libs/libselinux/libselinux1-dev_3.1-3_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libs/libsepol/libsepol1_3.1-1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libs/libsepol/libsepol1-dev_3.1-1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libs/libsm/libsm6_1.2.3-1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libs/libsndfile/libsndfile1_1.0.31-2_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libs/libsoup2.4/libsoup2.4-1_2.72.0-2_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libs/libsoup2.4/libsoup-gnome2.4-1_2.72.0-2_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libs/libssh2/libssh2-1_1.9.0-2_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libt/libtasn1-6/libtasn1-6_4.16.0-2_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libt/libthai/libthai0_0.1.28-3_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libt/libthai/libthai-dev_0.1.28-3_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libt/libtirpc/libtirpc3_1.3.1-1+deb11u1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libt/libtool/libltdl7_2.4.6-15_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libu/libunistring/libunistring2_0.9.10-4_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libu/libutempter/libutempter0_1.2.1-2_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libu/libutempter/libutempter-dev_1.2.1-2_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libv/libva/libva2_2.14.0-1~bpo11+1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libv/libva/libva-dev_2.14.0-1~bpo11+1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libv/libva/libva-drm2_2.14.0-1~bpo11+1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libv/libva/libva-glx2_2.14.0-1~bpo11+1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libv/libva/libva-wayland2_2.14.0-1~bpo11+1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libv/libva/libva-x11-2_2.14.0-1~bpo11+1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libv/libvorbis/libvorbis0a_1.3.7-1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libv/libvorbis/libvorbisenc2_1.3.7-1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libw/libwacom/libwacom2_1.8-2_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libw/libwebp/libwebp6_0.6.1-2.1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libw/libwebp/libwebpdemux2_0.6.1-2.1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libw/libwebp/libwebp-dev_0.6.1-2.1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libw/libwebp/libwebpmux3_0.6.1-2.1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libx11/libx11-6_1.7.2-1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libx11/libx11-dev_1.7.2-1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libx11/libx11-xcb1_1.7.2-1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libx11/libx11-xcb-dev_1.7.2-1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxau/libxau6_1.0.9-1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxau/libxau-dev_1.0.9-1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb1_1.14-3_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb1-dev_1.14-3_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-dri2-0_1.14-3_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-dri2-0-dev_1.14-3_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-dri3-0_1.14-3_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-dri3-dev_1.14-3_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-glx0_1.14-3_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-glx0-dev_1.14-3_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-present0_1.14-3_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-present-dev_1.14-3_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-randr0_1.14-3_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-randr0-dev_1.14-3_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-render0_1.14-3_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-render0-dev_1.14-3_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-shape0_1.14-3_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-shape0-dev_1.14-3_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-shm0_1.14-3_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-shm0-dev_1.14-3_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-sync1_1.14-3_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-sync-dev_1.14-3_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-xfixes0_1.14-3_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-xfixes0-dev_1.14-3_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-xinerama0_1.14-3_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-xinput0_1.14-3_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-xkb1_1.14-3_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcomposite/libxcomposite1_0.4.5-1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcomposite/libxcomposite-dev_0.4.5-1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcrypt/libcrypt1_4.4.18-4_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcrypt/libcrypt-dev_4.4.18-4_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcursor/libxcursor1_1.2.0-2_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcursor/libxcursor-dev_1.2.0-2_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxdamage/libxdamage1_1.1.5-2_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxdamage/libxdamage-dev_1.1.5-2_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxdmcp/libxdmcp6_1.1.2-3_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxdmcp/libxdmcp-dev_1.1.2-3_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxext/libxext6_1.3.3-1.1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxext/libxext-dev_1.3.3-1.1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxfixes/libxfixes3_5.0.3-2_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxfixes/libxfixes-dev_5.0.3-2_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxi/libxi6_1.7.10-1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxi/libxi-dev_1.7.10-1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxinerama/libxinerama1_1.1.4-2_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxinerama/libxinerama-dev_1.1.4-2_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxkbcommon/libxkbcommon0_1.0.3-2_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxkbcommon/libxkbcommon-dev_1.0.3-2_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxkbcommon/libxkbcommon-x11-0_1.0.3-2_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxml2/libxml2_2.9.10+dfsg-6.7+deb11u2_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxml2/libxml2-dev_2.9.10+dfsg-6.7+deb11u2_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxrandr/libxrandr2_1.5.1-1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxrandr/libxrandr-dev_1.5.1-1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxrender/libxrender1_0.9.10-1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxrender/libxrender-dev_0.9.10-1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxshmfence/libxshmfence1_1.3-1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxshmfence/libxshmfence-dev_1.3-1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxslt/libxslt1.1_1.1.34-4+deb11u1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxslt/libxslt1-dev_1.1.34-4+deb11u1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxss/libxss1_1.2.3-1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxss/libxss-dev_1.2.3-1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxt/libxt6_1.2.0-1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxt/libxt-dev_1.2.0-1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxtst/libxtst6_1.2.3-1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxtst/libxtst-dev_1.2.3-1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxxf86vm/libxxf86vm1_1.1.4-1+b2_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxxf86vm/libxxf86vm-dev_1.1.4-1+b2_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libz/libzstd/libzstd1_1.4.8+dfsg-2.1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/l/lcms2/liblcms2-2_2.12~rc1-2_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/l/linux/linux-libc-dev_6.0.3-1~bpo11+1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/l/lz4/liblz4-1_1.9.3-2_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/l/lzo2/liblzo2-2_2.10-2_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/m/md4c/libmd4c0_0.4.7-2_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/m/mesa/libegl1-mesa_20.3.5-1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/m/mesa/libegl1-mesa-dev_20.3.5-1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/m/mesa/libgbm1_20.3.5-1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/m/mesa/libgbm-dev_20.3.5-1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/m/mesa/libgl1-mesa-dev_20.3.5-1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/m/mesa/libgl1-mesa-glx_20.3.5-1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/m/mesa/libglapi-mesa_20.3.5-1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/m/mesa/libwayland-egl1-mesa_20.3.5-1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/m/mesa/mesa-common-dev_20.3.5-1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/m/minizip/libminizip1_1.1-8+b1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/m/minizip/libminizip-dev_1.1-8+b1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/m/mtdev/libmtdev1_1.1.6-1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/n/ncurses/libncurses6_6.2+20201114-2_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/n/ncurses/libncurses-dev_6.2+20201114-2_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/n/ncurses/libncursesw6_6.2+20201114-2_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/n/ncurses/libtinfo6_6.2+20201114-2_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/n/nettle/libhogweed6_3.7.3-1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/n/nettle/libnettle8_3.7.3-1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/n/nghttp2/libnghttp2-14_1.43.0-1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/n/nspr/libnspr4_4.29-1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/n/nspr/libnspr4-dev_4.29-1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/n/nss/libnss3_3.61-1+deb11u2_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/n/nss/libnss3-dev_3.61-1+deb11u2_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/o/openldap/libldap-2.4-2_2.4.59+dfsg-1~bpo11+1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/o/openssl/libssl1.1_1.1.1n-0+deb11u3_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/o/openssl/libssl-dev_1.1.1n-0+deb11u3_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/o/opus/libopus0_1.3.1-0.1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/o/opus/libopus-dev_1.3.1-0.1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/p11-kit/libp11-kit0_0.23.22-1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pam/libpam0g_1.4.0-9+deb11u1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pam/libpam0g-dev_1.4.0-9+deb11u1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pango1.0/libpango-1.0-0_1.46.2-3_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pango1.0/libpango1.0-dev_1.46.2-3_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pango1.0/libpangocairo-1.0-0_1.46.2-3_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pango1.0/libpangoft2-1.0-0_1.46.2-3_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pango1.0/libpangoxft-1.0-0_1.46.2-3_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pangox-compat/libpangox-1.0-0_0.0.2-5.1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pciutils/libpci3_3.7.0-5_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pciutils/libpci-dev_3.7.0-5_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pcre2/libpcre2-16-0_10.36-2+deb11u1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pcre2/libpcre2-32-0_10.36-2+deb11u1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pcre2/libpcre2-8-0_10.36-2+deb11u1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pcre2/libpcre2-dev_10.36-2+deb11u1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pcre2/libpcre2-posix2_10.36-2+deb11u1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pcre3/libpcre16-3_8.39-13_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pcre3/libpcre32-3_8.39-13_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pcre3/libpcre3_8.39-13_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pcre3/libpcre3-dev_8.39-13_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pcre3/libpcrecpp0v5_8.39-13_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pipewire/libpipewire-0.3-0_0.3.58-2~bpo11+1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pipewire/libpipewire-0.3-dev_0.3.58-2~bpo11+1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pipewire/libspa-0.2-dev_0.3.58-2~bpo11+1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pixman/libpixman-1-0_0.40.0-1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pixman/libpixman-1-dev_0.40.0-1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pulseaudio/libpulse0_14.2-2_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pulseaudio/libpulse-dev_14.2-2_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pulseaudio/libpulse-mainloop-glib0_14.2-2_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/q/qtbase-opensource-src/libqt5concurrent5_5.15.2+dfsg-9_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/q/qtbase-opensource-src/libqt5core5a_5.15.2+dfsg-9_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/q/qtbase-opensource-src/libqt5dbus5_5.15.2+dfsg-9_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/q/qtbase-opensource-src/libqt5gui5_5.15.2+dfsg-9_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/q/qtbase-opensource-src/libqt5network5_5.15.2+dfsg-9_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/q/qtbase-opensource-src/libqt5printsupport5_5.15.2+dfsg-9_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/q/qtbase-opensource-src/libqt5sql5_5.15.2+dfsg-9_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/q/qtbase-opensource-src/libqt5test5_5.15.2+dfsg-9_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/q/qtbase-opensource-src/libqt5widgets5_5.15.2+dfsg-9_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/q/qtbase-opensource-src/libqt5xml5_5.15.2+dfsg-9_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/q/qtbase-opensource-src/qtbase5-dev_5.15.2+dfsg-9_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/q/qtbase-opensource-src/qtbase5-dev-tools_5.15.2+dfsg-9_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/r/re2/libre2-9_20210201+dfsg-1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/r/re2/libre2-dev_20210201+dfsg-1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/r/rtmpdump/librtmp1_2.4+20151223.gitfa8646d.1-2+b2_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/s/shared-mime-info/shared-mime-info_2.0-1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/s/snappy/libsnappy1v5_1.1.8-1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/s/snappy/libsnappy-dev_1.1.8-1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/s/speech-dispatcher/libspeechd2_0.11.4-1~bpo11+1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/s/speech-dispatcher/libspeechd-dev_0.11.4-1~bpo11+1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/s/sqlite3/libsqlite3-0_3.34.1-3_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/s/systemd/libsystemd0_251.3-1~bpo11+1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/s/systemd/libsystemd-dev_251.3-1~bpo11+1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/s/systemd/libudev1_251.3-1~bpo11+1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/s/systemd/libudev-dev_251.3-1~bpo11+1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/t/tcp-wrappers/libwrap0_7.6.q-31_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/t/tiff/libtiff5_4.2.0-1+deb11u1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/t/tiff/libtiff-dev_4.2.0-1+deb11u1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/t/tiff/libtiffxx5_4.2.0-1+deb11u1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/u/unbound/libunbound8_1.13.1-1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/u/util-linux/libblkid1_2.36.1-8+deb11u1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/u/util-linux/libblkid-dev_2.36.1-8+deb11u1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/u/util-linux/libmount1_2.36.1-8+deb11u1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/u/util-linux/libmount-dev_2.36.1-8+deb11u1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/u/util-linux/libuuid1_2.36.1-8+deb11u1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/u/util-linux/uuid-dev_2.36.1-8+deb11u1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/v/valgrind/valgrind_3.16.1-1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/v/vulkan-loader/libvulkan1_1.3.224.0-1~bpo11+1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/v/vulkan-loader/libvulkan-dev_1.3.224.0-1~bpo11+1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/w/wayland/libwayland-bin_1.18.0-2~exp1.1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/w/wayland/libwayland-client0_1.18.0-2~exp1.1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/w/wayland/libwayland-cursor0_1.18.0-2~exp1.1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/w/wayland/libwayland-dev_1.18.0-2~exp1.1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/w/wayland/libwayland-egl1_1.18.0-2~exp1.1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/w/wayland/libwayland-egl-backend-dev_1.18.0-2~exp1.1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/w/wayland/libwayland-server0_1.18.0-2~exp1.1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/w/wayland-protocols/wayland-protocols_1.20-1_all.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/x/xcb-util-image/libxcb-image0_0.4.0-1+b3_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/x/xcb-util-image/libxcb-image0-dev_0.4.0-1+b3_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/x/xcb-util-keysyms/libxcb-keysyms1_0.4.0-1+b2_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/x/xcb-util/libxcb-util1_0.4.0-1+b1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/x/xcb-util/libxcb-util-dev_0.4.0-1+b1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/x/xcb-util-renderutil/libxcb-render-util0_0.3.9-1+b1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/x/xcb-util-renderutil/libxcb-render-util0-dev_0.3.9-1+b1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/x/xcb-util-wm/libxcb-icccm4_0.4.1-1.1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/x/xft/libxft2_2.3.2-2_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/x/xft/libxft-dev_2.3.2-2_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/x/xorgproto/x11proto-dev_2020.1-1_all.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/x/xz-utils/liblzma5_5.2.5-2.1~deb11u1_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/z/zlib/zlib1g_1.2.11.dfsg-2+deb11u2_i386.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/z/zlib/zlib1g-dev_1.2.11.dfsg-2+deb11u2_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/alsa-lib/libasound2_1.2.4-1.1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/alsa-lib/libasound2-dev_1.2.4-1.1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/atk1.0/libatk1.0-0_2.38.0-1~bpo11+1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/atk1.0/libatk1.0-dev_2.38.0-1~bpo11+1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/at-spi2-atk/libatk-bridge2.0-0_2.38.0-4~bpo11+1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/at-spi2-atk/libatk-bridge2.0-dev_2.38.0-4~bpo11+1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/at-spi2-core/libatspi2.0-0_2.44.1-1~bpo11+1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/at-spi2-core/libatspi2.0-dev_2.44.1-1~bpo11+1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/attr/libattr1_2.4.48-6_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/audit/libaudit1_3.0-2_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/avahi/libavahi-client3_0.8-5+deb11u2_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/avahi/libavahi-common3_0.8-5+deb11u2_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/b/bluez/libbluetooth3_5.55-3.1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/b/bluez/libbluetooth-dev_5.55-3.1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/b/brotli/libbrotli1_1.0.9-2+b2_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/b/brotli/libbrotli-dev_1.0.9-2+b2_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cairo/libcairo2_1.16.0-5_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cairo/libcairo2-dev_1.16.0-5_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cairo/libcairo-gobject2_1.16.0-5_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cairo/libcairo-script-interpreter2_1.16.0-5_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/colord/libcolord2_1.4.5-3_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cups/libcups2_2.3.3op2-3+deb11u2_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cups/libcups2-dev_2.3.3op2-3+deb11u2_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cups/libcupsimage2_2.3.3op2-3+deb11u2_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cups/libcupsimage2-dev_2.3.3op2-3+deb11u2_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/curl/libcurl3-gnutls_7.88.1-7~bpo11+2_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/curl/libcurl4-gnutls-dev_7.88.1-7~bpo11+2_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cyrus-sasl2/libsasl2-2_2.1.27+dfsg-2.1+deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/d/db5.3/libdb5.3_5.3.28+dfsg1-0.8_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/d/dbus-glib/libdbus-glib-1-2_0.110-6_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/d/dbus/libdbus-1-3_1.12.24-0+deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/d/dbus/libdbus-1-dev_1.12.24-0+deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/d/double-conversion/libdouble-conversion3_3.1.5-6.1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/e/e2fsprogs/comerr-dev_2.1-1.46.6-1~bpo11+1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/e/e2fsprogs/libcom-err2_1.46.6-1~bpo11+1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/e/elfutils/libelf1_0.187-1~bpo11+1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/e/elfutils/libelf-dev_0.187-1~bpo11+1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/e/expat/libexpat1_2.2.10-2+deb11u5_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/e/expat/libexpat1-dev_2.2.10-2+deb11u5_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/flac/libflac8_1.3.3-2+deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/flac/libflac-dev_1.3.3-2+deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/fontconfig/libfontconfig1_2.13.1-4.2_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/fontconfig/libfontconfig-dev_2.13.1-4.2_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/freetype/libfreetype6_2.10.4+dfsg-1+deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/freetype/libfreetype-dev_2.10.4+dfsg-1+deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/fribidi/libfribidi0_1.0.8-2+deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/fribidi/libfribidi-dev_1.0.8-2+deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libasan6_10.2.1-6_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libatomic1_10.2.1-6_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libgcc-10-dev_10.2.1-6_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libgcc-s1_10.2.1-6_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libgomp1_10.2.1-6_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libitm1_10.2.1-6_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libquadmath0_10.2.1-6_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libstdc++-10-dev_10.2.1-6_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libstdc++6_10.2.1-6_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libubsan1_10.2.1-6_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gdk-pixbuf/libgdk-pixbuf-2.0-0_2.42.2+dfsg-1+deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gdk-pixbuf/libgdk-pixbuf-2.0-dev_2.42.2+dfsg-1+deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/glib2.0/libglib2.0-0_2.66.8-1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/glib2.0/libglib2.0-dev_2.66.8-1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/glibc/libc6_2.31-13+deb11u5_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/glibc/libc6-dev_2.31-13+deb11u5_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gmp/libgmp10_6.2.1+dfsg-1+deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gnutls28/libgnutls28-dev_3.7.1-5+deb11u3_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gnutls28/libgnutls30_3.7.1-5+deb11u3_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gnutls28/libgnutls-dane0_3.7.1-5+deb11u3_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gnutls28/libgnutls-openssl27_3.7.1-5+deb11u3_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gnutls28/libgnutlsxx28_3.7.1-5+deb11u3_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/graphene/libgraphene-1.0-0_1.10.4+dfsg1-1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/graphene/libgraphene-1.0-dev_1.10.4+dfsg1-1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/graphite2/libgraphite2-3_1.3.14-1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/graphite2/libgraphite2-dev_1.3.14-1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gtk+2.0/libgtk2.0-0_2.24.33-2_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gtk+3.0/libgtk-3-0_3.24.24-4+deb11u3_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gtk+3.0/libgtk-3-dev_3.24.24-4+deb11u3_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gtk4/libgtk-4-1_4.8.3+ds-2_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gtk4/libgtk-4-dev_4.8.3+ds-2_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/h/harfbuzz/libharfbuzz0b_2.7.4-1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/h/harfbuzz/libharfbuzz-dev_2.7.4-1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/h/harfbuzz/libharfbuzz-gobject0_2.7.4-1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/h/harfbuzz/libharfbuzz-icu0_2.7.4-1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/i/icu-le-hb/libicu-le-hb0_1.0.3+git180724-3+b2_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/i/icu/libicu67_67.1-7_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/j/jbigkit/libjbig0_2.1-3.1+b2_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/j/jbigkit/libjbig-dev_2.1-3.1+b2_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/j/json-glib/libjson-glib-1.0-0_1.6.2-1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/keyutils/libkeyutils1_1.6.1-2_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/krb5-multidev_1.18.3-6+deb11u3_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libgssapi-krb5-2_1.18.3-6+deb11u3_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libgssrpc4_1.18.3-6+deb11u3_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libk5crypto3_1.18.3-6+deb11u3_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libkadm5clnt-mit12_1.18.3-6+deb11u3_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libkadm5srv-mit12_1.18.3-6+deb11u3_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libkdb5-10_1.18.3-6+deb11u3_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libkrb5-3_1.18.3-6+deb11u3_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libkrb5-dev_1.18.3-6+deb11u3_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libkrb5support0_1.18.3-6+deb11u3_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/liba/libasyncns/libasyncns0_0.8-6+b2_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libb/libb2/libb2-1_0.98.1-1.1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libb/libbsd/libbsd0_0.11.3-1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libc/libcap2/libcap2_2.44-1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libc/libcap2/libcap-dev_2.44-1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libc/libcap-ng/libcap-ng0_0.7.9-2.2+b1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libc/libcloudproviders/libcloudproviders0_0.3.0-3_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdatrie/libdatrie1_0.2.13-1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdatrie/libdatrie-dev_0.2.13-1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdbusmenu/libdbusmenu-glib4_18.10.20180917~bzr492+repack1-2_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdbusmenu/libdbusmenu-glib-dev_18.10.20180917~bzr492+repack1-2_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdbusmenu/libdbusmenu-gtk3-4_18.10.20180917~bzr492+repack1-2_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdbusmenu/libdbusmenu-gtk4_18.10.20180917~bzr492+repack1-2_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdeflate/libdeflate0_1.10-2~bpo11+1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdeflate/libdeflate-dev_1.10-2~bpo11+1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdrm/libdrm2_2.4.104-1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdrm/libdrm-amdgpu1_2.4.104-1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdrm/libdrm-dev_2.4.104-1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdrm/libdrm-intel1_2.4.104-1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdrm/libdrm-nouveau2_2.4.104-1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdrm/libdrm-radeon1_2.4.104-1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libe/libepoxy/libepoxy0_1.5.8-1~bpo11+1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libe/libepoxy/libepoxy-dev_1.5.8-1~bpo11+1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libe/libevdev/libevdev2_1.11.0+dfsg-1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libe/libevdev/libevdev-dev_1.11.0+dfsg-1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libe/libevent/libevent-2.1-7_2.1.12-stable-1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libf/libffi/libffi7_3.3-6_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libf/libffi/libffi-dev_3.3-6_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libgcrypt20/libgcrypt20_1.8.7-6_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libgcrypt20/libgcrypt20-dev_1.8.7-6_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libegl1_1.3.2-1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libegl-dev_1.3.2-1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libgl1_1.3.2-1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libgl-dev_1.3.2-1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libgles1_1.3.2-1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libgles2_1.3.2-1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libgles-dev_1.3.2-1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libglvnd0_1.3.2-1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libglvnd-dev_1.3.2-1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libglx0_1.3.2-1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libglx-dev_1.3.2-1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libopengl0_1.3.2-1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libgpg-error/libgpg-error0_1.38-2_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libgpg-error/libgpg-error-dev_1.38-2_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libgudev/libgudev-1.0-0_234-1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libi/libice/libice6_1.0.10-1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libi/libidl/libidl-2-0_0.8.14-4+b12_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libi/libidn2/libidn2-0_2.3.0-5_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libi/libidn/libidn11_1.33-3_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libi/libinput/libinput10_1.16.4-3_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libi/libinput/libinput-dev_1.16.4-3_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libj/libjpeg-turbo/libjpeg62-turbo_2.0.6-4_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libj/libjpeg-turbo/libjpeg62-turbo-dev_2.0.6-4_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libj/libjsoncpp/libjsoncpp24_1.9.4-4_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libj/libjsoncpp/libjsoncpp-dev_1.9.4-4_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libm/libmd/libmd0_1.0.3-3_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libn/libnsl/libnsl2_1.3.0-2_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libn/libnss-db/libnss-db_2.2.3pre1-6+b10_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libo/libogg/libogg0_1.3.4-0.1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libo/libogg/libogg-dev_1.3.4-0.1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libp/libpciaccess/libpciaccess0_0.16-1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libp/libpng1.6/libpng16-16_1.6.37-3_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libp/libpng1.6/libpng-dev_1.6.37-3_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libp/libproxy/libproxy1v5_0.4.17-1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libp/libpsl/libpsl5_0.21.0-1.2_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libp/libpthread-stubs/libpthread-stubs0-dev_0.4-1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libr/librest/librest-0.7-0_0.8.1-1.1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libselinux/libselinux1_3.1-3_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libselinux/libselinux1-dev_3.1-3_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libsepol/libsepol1_3.1-1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libsepol/libsepol1-dev_3.1-1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libsm/libsm6_1.2.3-1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libsndfile/libsndfile1_1.0.31-2_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libsoup2.4/libsoup2.4-1_2.72.0-2_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libsoup2.4/libsoup-gnome2.4-1_2.72.0-2_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libssh2/libssh2-1_1.9.0-2_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libt/libtasn1-6/libtasn1-6_4.16.0-2+deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libt/libthai/libthai0_0.1.28-3_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libt/libthai/libthai-dev_0.1.28-3_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libt/libtirpc/libtirpc3_1.3.1-1+deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libt/libtool/libltdl7_2.4.6-15_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libu/libunistring/libunistring2_0.9.10-4_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libu/libutempter/libutempter0_1.2.1-2_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libu/libutempter/libutempter-dev_1.2.1-2_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libva/libva2_2.17.0-1~bpo11+1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libva/libva-dev_2.17.0-1~bpo11+1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libva/libva-drm2_2.17.0-1~bpo11+1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libva/libva-glx2_2.17.0-1~bpo11+1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libva/libva-wayland2_2.17.0-1~bpo11+1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libva/libva-x11-2_2.17.0-1~bpo11+1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libvorbis/libvorbis0a_1.3.7-1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libvorbis/libvorbisenc2_1.3.7-1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libw/libwacom/libwacom2_1.8-2_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libw/libwebp/libwebp6_0.6.1-2.1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libw/libwebp/libwebp7_1.2.4-0.2_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libw/libwebp/libwebpdemux2_0.6.1-2.1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libw/libwebp/libwebp-dev_0.6.1-2.1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libw/libwebp/libwebpmux3_0.6.1-2.1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libx11/libx11-6_1.7.2-1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libx11/libx11-dev_1.7.2-1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libx11/libx11-xcb1_1.7.2-1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libx11/libx11-xcb-dev_1.7.2-1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxau/libxau6_1.0.9-1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxau/libxau-dev_1.0.9-1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb1_1.14-3_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb1-dev_1.14-3_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-dri2-0_1.14-3_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-dri2-0-dev_1.14-3_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-dri3-0_1.14-3_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-dri3-dev_1.14-3_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-glx0_1.14-3_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-glx0-dev_1.14-3_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-present0_1.14-3_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-present-dev_1.14-3_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-randr0_1.14-3_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-randr0-dev_1.14-3_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-render0_1.14-3_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-render0-dev_1.14-3_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-shape0_1.14-3_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-shape0-dev_1.14-3_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-shm0_1.14-3_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-shm0-dev_1.14-3_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-sync1_1.14-3_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-sync-dev_1.14-3_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-xfixes0_1.14-3_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-xfixes0-dev_1.14-3_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-xinerama0_1.14-3_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-xinput0_1.14-3_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-xkb1_1.14-3_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcomposite/libxcomposite1_0.4.5-1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcomposite/libxcomposite-dev_0.4.5-1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcrypt/libcrypt1_4.4.18-4_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcrypt/libcrypt-dev_4.4.18-4_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcursor/libxcursor1_1.2.0-2_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcursor/libxcursor-dev_1.2.0-2_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxdamage/libxdamage1_1.1.5-2_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxdamage/libxdamage-dev_1.1.5-2_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxdmcp/libxdmcp6_1.1.2-3_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxdmcp/libxdmcp-dev_1.1.2-3_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxext/libxext6_1.3.3-1.1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxext/libxext-dev_1.3.3-1.1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxfixes/libxfixes3_5.0.3-2_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxfixes/libxfixes-dev_5.0.3-2_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxi/libxi6_1.7.10-1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxi/libxi-dev_1.7.10-1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxinerama/libxinerama1_1.1.4-2_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxinerama/libxinerama-dev_1.1.4-2_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxkbcommon/libxkbcommon0_1.0.3-2_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxkbcommon/libxkbcommon-dev_1.0.3-2_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxkbcommon/libxkbcommon-x11-0_1.0.3-2_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxml2/libxml2_2.9.10+dfsg-6.7+deb11u4_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxml2/libxml2-dev_2.9.10+dfsg-6.7+deb11u4_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxrandr/libxrandr2_1.5.1-1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxrandr/libxrandr-dev_1.5.1-1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxrender/libxrender1_0.9.10-1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxrender/libxrender-dev_0.9.10-1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxshmfence/libxshmfence1_1.3-1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxshmfence/libxshmfence-dev_1.3-1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxslt/libxslt1.1_1.1.34-4+deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxslt/libxslt1-dev_1.1.34-4+deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxss/libxss1_1.2.3-1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxss/libxss-dev_1.2.3-1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxt/libxt6_1.2.0-1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxt/libxt-dev_1.2.0-1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxtst/libxtst6_1.2.3-1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxtst/libxtst-dev_1.2.3-1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxxf86vm/libxxf86vm1_1.1.4-1+b2_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxxf86vm/libxxf86vm-dev_1.1.4-1+b2_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libz/libzstd/libzstd1_1.4.8+dfsg-2.1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/l/lcms2/liblcms2-2_2.12~rc1-2_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/l/lerc/liblerc4_4.0.0+ds-2_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/l/linux/linux-libc-dev_6.1.20-2~bpo11+1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/l/lz4/liblz4-1_1.9.3-2_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/l/lzo2/liblzo2-2_2.10-2_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/md4c/libmd4c0_0.4.7-2_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/libegl1-mesa_20.3.5-1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/libegl1-mesa-dev_20.3.5-1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/libgbm1_20.3.5-1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/libgbm-dev_20.3.5-1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/libgl1-mesa-dev_20.3.5-1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/libgl1-mesa-glx_20.3.5-1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/libglapi-mesa_20.3.5-1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/libwayland-egl1-mesa_20.3.5-1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/mesa-common-dev_20.3.5-1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/minizip/libminizip1_1.1-8+b1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/minizip/libminizip-dev_1.1-8+b1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mtdev/libmtdev1_1.1.6-1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/ncurses/libncurses6_6.2+20201114-2+deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/ncurses/libncurses-dev_6.2+20201114-2+deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/ncurses/libncursesw6_6.2+20201114-2+deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/ncurses/libtinfo6_6.2+20201114-2+deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/nettle/libhogweed6_3.7.3-1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/nettle/libnettle8_3.7.3-1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/nghttp2/libnghttp2-14_1.43.0-1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/nspr/libnspr4_4.29-1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/nspr/libnspr4-dev_4.29-1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/nss/libnss3_3.61-1+deb11u3_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/nss/libnss3-dev_3.61-1+deb11u3_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/o/openldap/libldap-2.4-2_2.4.59+dfsg-1~bpo11+1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/o/openssl/libssl1.1_1.1.1n-0+deb11u4_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/o/openssl/libssl-dev_1.1.1n-0+deb11u4_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/o/opus/libopus0_1.3.1-0.1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/o/opus/libopus-dev_1.3.1-0.1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/p11-kit/libp11-kit0_0.23.22-1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pam/libpam0g_1.4.0-9+deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pam/libpam0g-dev_1.4.0-9+deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pango1.0/libpango-1.0-0_1.46.2-3_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pango1.0/libpango1.0-dev_1.46.2-3_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pango1.0/libpangocairo-1.0-0_1.46.2-3_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pango1.0/libpangoft2-1.0-0_1.46.2-3_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pango1.0/libpangoxft-1.0-0_1.46.2-3_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pangox-compat/libpangox-1.0-0_0.0.2-5.1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pciutils/libpci3_3.7.0-5_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pciutils/libpci-dev_3.7.0-5_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre2/libpcre2-16-0_10.36-2+deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre2/libpcre2-32-0_10.36-2+deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre2/libpcre2-8-0_10.36-2+deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre2/libpcre2-dev_10.36-2+deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre2/libpcre2-posix2_10.36-2+deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre3/libpcre16-3_8.39-13_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre3/libpcre32-3_8.39-13_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre3/libpcre3_8.39-13_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre3/libpcre3-dev_8.39-13_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre3/libpcrecpp0v5_8.39-13_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pipewire/libpipewire-0.3-0_0.3.65-2~bpo11+1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pipewire/libpipewire-0.3-dev_0.3.65-2~bpo11+1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pipewire/libspa-0.2-dev_0.3.65-2~bpo11+1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pixman/libpixman-1-0_0.40.0-1.1~deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pixman/libpixman-1-dev_0.40.0-1.1~deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pulseaudio/libpulse0_14.2-2_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pulseaudio/libpulse-dev_14.2-2_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pulseaudio/libpulse-mainloop-glib0_14.2-2_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6concurrent6_6.4.2+dfsg-10~bpo11+1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6core6_6.4.2+dfsg-10~bpo11+1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6dbus6_6.4.2+dfsg-10~bpo11+1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6gui6_6.4.2+dfsg-10~bpo11+1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6network6_6.4.2+dfsg-10~bpo11+1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6opengl6_6.4.2+dfsg-10~bpo11+1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6openglwidgets6_6.4.2+dfsg-10~bpo11+1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6printsupport6_6.4.2+dfsg-10~bpo11+1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6sql6_6.4.2+dfsg-10~bpo11+1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6test6_6.4.2+dfsg-10~bpo11+1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6widgets6_6.4.2+dfsg-10~bpo11+1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6xml6_6.4.2+dfsg-10~bpo11+1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/qt6-base-dev_6.4.2+dfsg-10~bpo11+1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/qt6-base-dev-tools_6.4.2+dfsg-10~bpo11+1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5concurrent5_5.15.2+dfsg-9_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5core5a_5.15.2+dfsg-9_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5dbus5_5.15.2+dfsg-9_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5gui5_5.15.2+dfsg-9_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5network5_5.15.2+dfsg-9_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5printsupport5_5.15.2+dfsg-9_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5sql5_5.15.2+dfsg-9_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5test5_5.15.2+dfsg-9_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5widgets5_5.15.2+dfsg-9_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5xml5_5.15.2+dfsg-9_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/qtbase5-dev_5.15.2+dfsg-9_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/qtbase5-dev-tools_5.15.2+dfsg-9_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/r/re2/libre2-9_20210201+dfsg-1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/r/re2/libre2-dev_20210201+dfsg-1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/r/rtmpdump/librtmp1_2.4+20151223.gitfa8646d.1-2+b2_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/shared-mime-info/shared-mime-info_2.0-1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/snappy/libsnappy1v5_1.1.8-1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/snappy/libsnappy-dev_1.1.8-1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/speech-dispatcher/libspeechd2_0.11.4-2~bpo11+1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/speech-dispatcher/libspeechd-dev_0.11.4-2~bpo11+1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/sqlite3/libsqlite3-0_3.34.1-3_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/systemd/libsystemd0_252.5-2~bpo11+1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/systemd/libsystemd-dev_252.5-2~bpo11+1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/systemd/libudev1_252.5-2~bpo11+1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/systemd/libudev-dev_252.5-2~bpo11+1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/t/tcp-wrappers/libwrap0_7.6.q-31_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/t/tiff/libtiff5_4.2.0-1+deb11u4_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/t/tiff/libtiff6_4.5.0-6_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/t/tiff/libtiff-dev_4.2.0-1+deb11u4_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/t/tiff/libtiffxx5_4.2.0-1+deb11u4_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/t/tslib/libts0_1.22-1+b1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/u/unbound/libunbound8_1.17.1-2~bpo11+1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/u/util-linux/libblkid1_2.36.1-8+deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/u/util-linux/libblkid-dev_2.36.1-8+deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/u/util-linux/libmount1_2.36.1-8+deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/u/util-linux/libmount-dev_2.36.1-8+deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/u/util-linux/libuuid1_2.36.1-8+deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/u/util-linux/uuid-dev_2.36.1-8+deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/v/valgrind/valgrind_3.16.1-1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/v/vulkan-loader/libvulkan1_1.3.224.0-1~bpo11+1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/v/vulkan-loader/libvulkan-dev_1.3.224.0-1~bpo11+1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wayland/libwayland-bin_1.18.0-2~exp1.1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wayland/libwayland-client0_1.18.0-2~exp1.1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wayland/libwayland-cursor0_1.18.0-2~exp1.1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wayland/libwayland-dev_1.18.0-2~exp1.1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wayland/libwayland-egl1_1.18.0-2~exp1.1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wayland/libwayland-egl-backend-dev_1.18.0-2~exp1.1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wayland/libwayland-server0_1.18.0-2~exp1.1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wayland-protocols/wayland-protocols_1.20-1_all.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xcb-util-image/libxcb-image0_0.4.0-1+b3_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xcb-util-image/libxcb-image0-dev_0.4.0-1+b3_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xcb-util-keysyms/libxcb-keysyms1_0.4.0-1+b2_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xcb-util/libxcb-util1_0.4.0-1+b1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xcb-util/libxcb-util-dev_0.4.0-1+b1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xcb-util-renderutil/libxcb-render-util0_0.3.9-1+b1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xcb-util-renderutil/libxcb-render-util0-dev_0.3.9-1+b1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xcb-util-wm/libxcb-icccm4_0.4.1-1.1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xft/libxft2_2.3.2-2_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xft/libxft-dev_2.3.2-2_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xorgproto/x11proto-dev_2020.1-1_all.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xz-utils/liblzma5_5.2.5-2.1~deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/z/zlib/zlib1g_1.2.11.dfsg-2+deb11u2_i386.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/z/zlib/zlib1g-dev_1.2.11.dfsg-2+deb11u2_i386.deb diff --git a/build/linux/sysroot_scripts/generated_package_lists/bullseye.mips64el b/build/linux/sysroot_scripts/generated_package_lists/bullseye.mips64el index 39f6e39..78e5909 100644 --- a/build/linux/sysroot_scripts/generated_package_lists/bullseye.mips64el +++ b/build/linux/sysroot_scripts/generated_package_lists/bullseye.mips64el @@ -1,384 +1,402 @@ -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/a/alsa-lib/libasound2_1.2.4-1.1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/a/alsa-lib/libasound2-dev_1.2.4-1.1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/a/atk1.0/libatk1.0-0_2.38.0-1~bpo11+1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/a/atk1.0/libatk1.0-dev_2.38.0-1~bpo11+1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/a/at-spi2-atk/libatk-bridge2.0-0_2.38.0-4~bpo11+1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/a/at-spi2-atk/libatk-bridge2.0-dev_2.38.0-4~bpo11+1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/a/at-spi2-core/libatspi2.0-0_2.44.1-1~bpo11+1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/a/at-spi2-core/libatspi2.0-dev_2.44.1-1~bpo11+1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/a/attr/libattr1_2.4.48-6_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/a/audit/libaudit1_3.0-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/a/avahi/libavahi-client3_0.8-5+deb11u1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/a/avahi/libavahi-common3_0.8-5+deb11u1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/b/bluez/libbluetooth3_5.55-3.1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/b/bluez/libbluetooth-dev_5.55-3.1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/b/brotli/libbrotli1_1.0.9-2+b2_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/b/brotli/libbrotli-dev_1.0.9-2+b2_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/c/cairo/libcairo2_1.16.0-5_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/c/cairo/libcairo2-dev_1.16.0-5_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/c/cairo/libcairo-gobject2_1.16.0-5_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/c/cairo/libcairo-script-interpreter2_1.16.0-5_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/c/colord/libcolord2_1.4.5-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/c/cups/libcups2_2.3.3op2-3+deb11u2_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/c/cups/libcups2-dev_2.3.3op2-3+deb11u2_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/c/cups/libcupsimage2_2.3.3op2-3+deb11u2_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/c/cups/libcupsimage2-dev_2.3.3op2-3+deb11u2_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/c/curl/libcurl3-gnutls_7.85.0-1~bpo11+1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/c/curl/libcurl4-gnutls-dev_7.85.0-1~bpo11+1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/c/cyrus-sasl2/libsasl2-2_2.1.27+dfsg-2.1+deb11u1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/d/db5.3/libdb5.3_5.3.28+dfsg1-0.8_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/d/dbus-glib/libdbus-glib-1-2_0.110-6_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/d/dbus/libdbus-1-3_1.12.20-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/d/dbus/libdbus-1-dev_1.12.20-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/d/double-conversion/libdouble-conversion3_3.1.5-6.1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/e/e2fsprogs/comerr-dev_2.1-1.46.5-2~bpo11+2_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/e/e2fsprogs/libcom-err2_1.46.5-2~bpo11+2_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/e/elfutils/libelf1_0.187-1~bpo11+1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/e/elfutils/libelf-dev_0.187-1~bpo11+1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/e/expat/libexpat1_2.2.10-2+deb11u3_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/e/expat/libexpat1-dev_2.2.10-2+deb11u3_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/f/flac/libflac8_1.3.3-2+deb11u1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/f/flac/libflac-dev_1.3.3-2+deb11u1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/f/fontconfig/libfontconfig1_2.13.1-4.2_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/f/fontconfig/libfontconfig-dev_2.13.1-4.2_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/f/freetype/libfreetype6_2.10.4+dfsg-1+deb11u1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/f/freetype/libfreetype-dev_2.10.4+dfsg-1+deb11u1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/f/fribidi/libfribidi0_1.0.8-2+deb11u1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/f/fribidi/libfribidi-dev_1.0.8-2+deb11u1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gcc-10/libatomic1_10.2.1-6_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gcc-10/libgcc-10-dev_10.2.1-6_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gcc-10/libgcc-s1_10.2.1-6_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gcc-10/libgomp1_10.2.1-6_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gcc-10/libstdc++-10-dev_10.2.1-6_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gcc-10/libstdc++6_10.2.1-6_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gdk-pixbuf/libgdk-pixbuf-2.0-0_2.42.2+dfsg-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gdk-pixbuf/libgdk-pixbuf-2.0-dev_2.42.2+dfsg-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/glib2.0/libglib2.0-0_2.66.8-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/glib2.0/libglib2.0-dev_2.66.8-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/glibc/libc6_2.31-13+deb11u5_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/glibc/libc6-dev_2.31-13+deb11u5_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gmp/libgmp10_6.2.1+dfsg-1+deb11u1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gnutls28/libgnutls28-dev_3.7.1-5+deb11u2_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gnutls28/libgnutls30_3.7.1-5+deb11u2_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gnutls28/libgnutls-dane0_3.7.1-5+deb11u2_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gnutls28/libgnutls-openssl27_3.7.1-5+deb11u2_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gnutls28/libgnutlsxx28_3.7.1-5+deb11u2_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/graphene/libgraphene-1.0-0_1.10.4+dfsg1-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/graphene/libgraphene-1.0-dev_1.10.4+dfsg1-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/graphite2/libgraphite2-3_1.3.14-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/graphite2/libgraphite2-dev_1.3.14-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gtk+2.0/libgtk2.0-0_2.24.33-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gtk+3.0/libgtk-3-0_3.24.24-4+deb11u2_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gtk+3.0/libgtk-3-dev_3.24.24-4+deb11u2_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gtk4/libgtk-4-1_4.8.1+ds-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gtk4/libgtk-4-dev_4.8.1+ds-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/h/harfbuzz/libharfbuzz0b_2.7.4-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/h/harfbuzz/libharfbuzz-dev_2.7.4-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/h/harfbuzz/libharfbuzz-gobject0_2.7.4-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/h/harfbuzz/libharfbuzz-icu0_2.7.4-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/i/icu-le-hb/libicu-le-hb0_1.0.3+git180724-3+b2_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/i/icu/libicu67_67.1-7_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/j/jbigkit/libjbig0_2.1-3.1+b2_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/j/jbigkit/libjbig-dev_2.1-3.1+b2_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/j/json-glib/libjson-glib-1.0-0_1.6.2-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/k/keyutils/libkeyutils1_1.6.1-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/k/krb5/krb5-multidev_1.18.3-6+deb11u2_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/k/krb5/libgssapi-krb5-2_1.18.3-6+deb11u2_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/k/krb5/libgssrpc4_1.18.3-6+deb11u2_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/k/krb5/libk5crypto3_1.18.3-6+deb11u2_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/k/krb5/libkadm5clnt-mit12_1.18.3-6+deb11u2_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/k/krb5/libkadm5srv-mit12_1.18.3-6+deb11u2_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/k/krb5/libkdb5-10_1.18.3-6+deb11u2_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/k/krb5/libkrb5-3_1.18.3-6+deb11u2_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/k/krb5/libkrb5-dev_1.18.3-6+deb11u2_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/k/krb5/libkrb5support0_1.18.3-6+deb11u2_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/liba/libasyncns/libasyncns0_0.8-6+b2_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libb/libbsd/libbsd0_0.11.3-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libc/libcap2/libcap2_2.44-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libc/libcap2/libcap-dev_2.44-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libc/libcap-ng/libcap-ng0_0.7.9-2.2+b1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libc/libcloudproviders/libcloudproviders0_0.3.0-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libd/libdatrie/libdatrie1_0.2.13-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libd/libdatrie/libdatrie-dev_0.2.13-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libd/libdbusmenu/libdbusmenu-glib4_18.10.20180917~bzr492+repack1-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libd/libdbusmenu/libdbusmenu-glib-dev_18.10.20180917~bzr492+repack1-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libd/libdbusmenu/libdbusmenu-gtk3-4_18.10.20180917~bzr492+repack1-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libd/libdbusmenu/libdbusmenu-gtk4_18.10.20180917~bzr492+repack1-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libd/libdeflate/libdeflate0_1.10-2~bpo11+1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libd/libdeflate/libdeflate-dev_1.10-2~bpo11+1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libd/libdrm/libdrm2_2.4.104-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libd/libdrm/libdrm-amdgpu1_2.4.104-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libd/libdrm/libdrm-dev_2.4.104-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libd/libdrm/libdrm-nouveau2_2.4.104-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libd/libdrm/libdrm-radeon1_2.4.104-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libe/libepoxy/libepoxy0_1.5.8-1~bpo11+1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libe/libepoxy/libepoxy-dev_1.5.8-1~bpo11+1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libe/libevdev/libevdev2_1.11.0+dfsg-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libe/libevdev/libevdev-dev_1.11.0+dfsg-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libe/libevent/libevent-2.1-7_2.1.12-stable-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libf/libffi/libffi7_3.3-6_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libf/libffi/libffi-dev_3.3-6_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libgcrypt20/libgcrypt20_1.8.7-6_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libgcrypt20/libgcrypt20-dev_1.8.7-6_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libglvnd/libegl1_1.3.2-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libglvnd/libegl-dev_1.3.2-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libglvnd/libgl1_1.3.2-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libglvnd/libgl-dev_1.3.2-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libglvnd/libgles1_1.3.2-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libglvnd/libgles2_1.3.2-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libglvnd/libgles-dev_1.3.2-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libglvnd/libglvnd0_1.3.2-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libglvnd/libglvnd-dev_1.3.2-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libglvnd/libglx0_1.3.2-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libglvnd/libglx-dev_1.3.2-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libglvnd/libopengl0_1.3.2-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libgnome-keyring/libgnome-keyring0_3.12.0-1+b2_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libgnome-keyring/libgnome-keyring-dev_3.12.0-1+b2_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libgpg-error/libgpg-error0_1.38-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libgpg-error/libgpg-error-dev_1.38-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libgudev/libgudev-1.0-0_234-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libi/libice/libice6_1.0.10-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libi/libidl/libidl-2-0_0.8.14-4+b12_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libi/libidn2/libidn2-0_2.3.0-5_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libi/libidn/libidn11_1.33-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libi/libinput/libinput10_1.16.4-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libi/libinput/libinput-dev_1.16.4-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libj/libjpeg-turbo/libjpeg62-turbo_2.0.6-4_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libj/libjpeg-turbo/libjpeg62-turbo-dev_2.0.6-4_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libj/libjsoncpp/libjsoncpp24_1.9.4-4_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libj/libjsoncpp/libjsoncpp-dev_1.9.4-4_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libm/libmd/libmd0_1.0.3-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libn/libnsl/libnsl2_1.3.0-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libn/libnss-db/libnss-db_2.2.3pre1-6+b10_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libo/libogg/libogg0_1.3.4-0.1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libo/libogg/libogg-dev_1.3.4-0.1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libp/libpciaccess/libpciaccess0_0.16-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libp/libpng1.6/libpng16-16_1.6.37-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libp/libpng1.6/libpng-dev_1.6.37-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libp/libpsl/libpsl5_0.21.0-1.2_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libp/libpthread-stubs/libpthread-stubs0-dev_0.4-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libr/librest/librest-0.7-0_0.8.1-1.1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libs/libselinux/libselinux1_3.1-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libs/libselinux/libselinux1-dev_3.1-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libs/libsepol/libsepol1_3.1-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libs/libsepol/libsepol1-dev_3.1-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libs/libsm/libsm6_1.2.3-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libs/libsndfile/libsndfile1_1.0.31-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libs/libsoup2.4/libsoup2.4-1_2.72.0-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libs/libsoup2.4/libsoup-gnome2.4-1_2.72.0-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libs/libssh2/libssh2-1_1.9.0-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libt/libtasn1-6/libtasn1-6_4.16.0-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libt/libthai/libthai0_0.1.28-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libt/libthai/libthai-dev_0.1.28-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libt/libtirpc/libtirpc3_1.3.1-1+deb11u1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libt/libtool/libltdl7_2.4.6-15_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libu/libunistring/libunistring2_0.9.10-4_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libu/libutempter/libutempter0_1.2.1-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libu/libutempter/libutempter-dev_1.2.1-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libv/libva/libva2_2.14.0-1~bpo11+1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libv/libva/libva-dev_2.14.0-1~bpo11+1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libv/libva/libva-drm2_2.14.0-1~bpo11+1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libv/libva/libva-glx2_2.14.0-1~bpo11+1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libv/libva/libva-wayland2_2.14.0-1~bpo11+1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libv/libva/libva-x11-2_2.14.0-1~bpo11+1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libv/libvorbis/libvorbis0a_1.3.7-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libv/libvorbis/libvorbisenc2_1.3.7-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libw/libwacom/libwacom2_1.8-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libw/libwebp/libwebp6_0.6.1-2.1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libw/libwebp/libwebpdemux2_0.6.1-2.1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libw/libwebp/libwebp-dev_0.6.1-2.1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libw/libwebp/libwebpmux3_0.6.1-2.1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libx11/libx11-6_1.7.2-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libx11/libx11-dev_1.7.2-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libx11/libx11-xcb1_1.7.2-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libx11/libx11-xcb-dev_1.7.2-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxau/libxau6_1.0.9-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxau/libxau-dev_1.0.9-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb1_1.14-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb1-dev_1.14-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-dri2-0_1.14-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-dri2-0-dev_1.14-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-dri3-0_1.14-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-dri3-dev_1.14-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-glx0_1.14-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-glx0-dev_1.14-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-present0_1.14-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-present-dev_1.14-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-randr0_1.14-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-randr0-dev_1.14-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-render0_1.14-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-render0-dev_1.14-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-shape0_1.14-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-shape0-dev_1.14-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-shm0_1.14-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-shm0-dev_1.14-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-sync1_1.14-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-sync-dev_1.14-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-xfixes0_1.14-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-xfixes0-dev_1.14-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-xinerama0_1.14-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-xinput0_1.14-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-xkb1_1.14-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcomposite/libxcomposite1_0.4.5-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcomposite/libxcomposite-dev_0.4.5-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcrypt/libcrypt1_4.4.18-4_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcrypt/libcrypt-dev_4.4.18-4_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcursor/libxcursor1_1.2.0-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcursor/libxcursor-dev_1.2.0-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxdamage/libxdamage1_1.1.5-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxdamage/libxdamage-dev_1.1.5-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxdmcp/libxdmcp6_1.1.2-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxdmcp/libxdmcp-dev_1.1.2-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxext/libxext6_1.3.3-1.1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxext/libxext-dev_1.3.3-1.1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxfixes/libxfixes3_5.0.3-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxfixes/libxfixes-dev_5.0.3-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxi/libxi6_1.7.10-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxi/libxi-dev_1.7.10-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxinerama/libxinerama1_1.1.4-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxinerama/libxinerama-dev_1.1.4-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxkbcommon/libxkbcommon0_1.0.3-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxkbcommon/libxkbcommon-dev_1.0.3-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxkbcommon/libxkbcommon-x11-0_1.0.3-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxml2/libxml2_2.9.10+dfsg-6.7+deb11u2_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxml2/libxml2-dev_2.9.10+dfsg-6.7+deb11u2_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxrandr/libxrandr2_1.5.1-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxrandr/libxrandr-dev_1.5.1-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxrender/libxrender1_0.9.10-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxrender/libxrender-dev_0.9.10-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxshmfence/libxshmfence1_1.3-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxshmfence/libxshmfence-dev_1.3-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxslt/libxslt1.1_1.1.34-4+deb11u1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxslt/libxslt1-dev_1.1.34-4+deb11u1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxss/libxss1_1.2.3-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxss/libxss-dev_1.2.3-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxt/libxt6_1.2.0-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxt/libxt-dev_1.2.0-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxtst/libxtst6_1.2.3-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxtst/libxtst-dev_1.2.3-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxxf86vm/libxxf86vm1_1.1.4-1+b2_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxxf86vm/libxxf86vm-dev_1.1.4-1+b2_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libz/libzstd/libzstd1_1.4.8+dfsg-2.1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/l/lcms2/liblcms2-2_2.12~rc1-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/l/linux/linux-libc-dev_5.19.11-1~bpo11+1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/l/lz4/liblz4-1_1.9.3-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/l/lzo2/liblzo2-2_2.10-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/m/md4c/libmd4c0_0.4.7-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/m/mesa/libegl1-mesa_20.3.5-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/m/mesa/libegl1-mesa-dev_20.3.5-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/m/mesa/libgbm1_20.3.5-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/m/mesa/libgbm-dev_20.3.5-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/m/mesa/libgl1-mesa-dev_20.3.5-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/m/mesa/libgl1-mesa-glx_20.3.5-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/m/mesa/libglapi-mesa_20.3.5-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/m/mesa/libwayland-egl1-mesa_20.3.5-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/m/mesa/mesa-common-dev_20.3.5-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/m/minizip/libminizip1_1.1-8+b1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/m/minizip/libminizip-dev_1.1-8+b1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/m/mtdev/libmtdev1_1.1.6-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/n/ncurses/libncurses6_6.2+20201114-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/n/ncurses/libncurses-dev_6.2+20201114-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/n/ncurses/libncursesw6_6.2+20201114-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/n/ncurses/libtinfo6_6.2+20201114-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/n/nettle/libhogweed6_3.7.3-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/n/nettle/libnettle8_3.7.3-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/n/nghttp2/libnghttp2-14_1.43.0-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/n/nspr/libnspr4_4.29-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/n/nspr/libnspr4-dev_4.29-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/n/nss/libnss3_3.61-1+deb11u2_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/n/nss/libnss3-dev_3.61-1+deb11u2_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/o/openldap/libldap-2.4-2_2.4.59+dfsg-1~bpo11+1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/o/openssl/libssl1.1_1.1.1n-0+deb11u3_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/o/openssl/libssl-dev_1.1.1n-0+deb11u3_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/o/opus/libopus0_1.3.1-0.1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/o/opus/libopus-dev_1.3.1-0.1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/p11-kit/libp11-kit0_0.23.22-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pam/libpam0g_1.4.0-9+deb11u1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pam/libpam0g-dev_1.4.0-9+deb11u1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pango1.0/libpango-1.0-0_1.46.2-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pango1.0/libpango1.0-dev_1.46.2-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pango1.0/libpangocairo-1.0-0_1.46.2-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pango1.0/libpangoft2-1.0-0_1.46.2-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pango1.0/libpangoxft-1.0-0_1.46.2-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pangox-compat/libpangox-1.0-0_0.0.2-5.1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pciutils/libpci3_3.7.0-5_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pciutils/libpci-dev_3.7.0-5_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pcre2/libpcre2-16-0_10.36-2+deb11u1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pcre2/libpcre2-32-0_10.36-2+deb11u1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pcre2/libpcre2-8-0_10.36-2+deb11u1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pcre2/libpcre2-dev_10.36-2+deb11u1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pcre2/libpcre2-posix2_10.36-2+deb11u1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pcre3/libpcre16-3_8.39-13_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pcre3/libpcre32-3_8.39-13_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pcre3/libpcre3_8.39-13_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pcre3/libpcre3-dev_8.39-13_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pcre3/libpcrecpp0v5_8.39-13_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pipewire/libpipewire-0.3-0_0.3.58-2~bpo11+1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pipewire/libpipewire-0.3-dev_0.3.58-2~bpo11+1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pipewire/libspa-0.2-dev_0.3.58-2~bpo11+1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pixman/libpixman-1-0_0.40.0-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pixman/libpixman-1-dev_0.40.0-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pulseaudio/libpulse0_14.2-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pulseaudio/libpulse-dev_14.2-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pulseaudio/libpulse-mainloop-glib0_14.2-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/q/qtbase-opensource-src/libqt5concurrent5_5.15.2+dfsg-9_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/q/qtbase-opensource-src/libqt5core5a_5.15.2+dfsg-9_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/q/qtbase-opensource-src/libqt5dbus5_5.15.2+dfsg-9_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/q/qtbase-opensource-src/libqt5gui5_5.15.2+dfsg-9_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/q/qtbase-opensource-src/libqt5network5_5.15.2+dfsg-9_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/q/qtbase-opensource-src/libqt5printsupport5_5.15.2+dfsg-9_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/q/qtbase-opensource-src/libqt5sql5_5.15.2+dfsg-9_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/q/qtbase-opensource-src/libqt5test5_5.15.2+dfsg-9_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/q/qtbase-opensource-src/libqt5widgets5_5.15.2+dfsg-9_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/q/qtbase-opensource-src/libqt5xml5_5.15.2+dfsg-9_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/q/qtbase-opensource-src/qtbase5-dev_5.15.2+dfsg-9_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/q/qtbase-opensource-src/qtbase5-dev-tools_5.15.2+dfsg-9_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/r/re2/libre2-9_20210201+dfsg-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/r/re2/libre2-dev_20210201+dfsg-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/r/rtmpdump/librtmp1_2.4+20151223.gitfa8646d.1-2+b2_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/s/shared-mime-info/shared-mime-info_2.0-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/s/snappy/libsnappy1v5_1.1.8-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/s/snappy/libsnappy-dev_1.1.8-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/s/speech-dispatcher/libspeechd2_0.11.4-1~bpo11+1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/s/speech-dispatcher/libspeechd-dev_0.11.4-1~bpo11+1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/s/sqlite3/libsqlite3-0_3.34.1-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/s/systemd/libsystemd0_251.3-1~bpo11+1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/s/systemd/libsystemd-dev_251.3-1~bpo11+1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/s/systemd/libudev1_251.3-1~bpo11+1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/s/systemd/libudev-dev_251.3-1~bpo11+1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/t/tcp-wrappers/libwrap0_7.6.q-31_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/t/tiff/libtiff5_4.2.0-1+deb11u1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/t/tiff/libtiff-dev_4.2.0-1+deb11u1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/t/tiff/libtiffxx5_4.2.0-1+deb11u1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/u/unbound/libunbound8_1.13.1-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/u/util-linux/libblkid1_2.36.1-8+deb11u1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/u/util-linux/libblkid-dev_2.36.1-8+deb11u1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/u/util-linux/libmount1_2.36.1-8+deb11u1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/u/util-linux/libmount-dev_2.36.1-8+deb11u1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/u/util-linux/libuuid1_2.36.1-8+deb11u1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/u/util-linux/uuid-dev_2.36.1-8+deb11u1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/v/valgrind/valgrind_3.16.1-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/v/vulkan-loader/libvulkan1_1.3.224.0-1~bpo11+1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/v/vulkan-loader/libvulkan-dev_1.3.224.0-1~bpo11+1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/w/wayland/libwayland-bin_1.18.0-2~exp1.1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/w/wayland/libwayland-client0_1.18.0-2~exp1.1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/w/wayland/libwayland-cursor0_1.18.0-2~exp1.1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/w/wayland/libwayland-dev_1.18.0-2~exp1.1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/w/wayland/libwayland-egl1_1.18.0-2~exp1.1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/w/wayland/libwayland-egl-backend-dev_1.18.0-2~exp1.1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/w/wayland/libwayland-server0_1.18.0-2~exp1.1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/w/wayland-protocols/wayland-protocols_1.20-1_all.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/x/xcb-util-image/libxcb-image0_0.4.0-1+b3_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/x/xcb-util-image/libxcb-image0-dev_0.4.0-1+b3_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/x/xcb-util-keysyms/libxcb-keysyms1_0.4.0-1+b2_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/x/xcb-util/libxcb-util1_0.4.0-1+b1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/x/xcb-util/libxcb-util-dev_0.4.0-1+b1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/x/xcb-util-renderutil/libxcb-render-util0_0.3.9-1+b1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/x/xcb-util-renderutil/libxcb-render-util0-dev_0.3.9-1+b1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/x/xcb-util-wm/libxcb-icccm4_0.4.1-1.1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/x/xft/libxft2_2.3.2-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/x/xft/libxft-dev_2.3.2-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/x/xorgproto/x11proto-dev_2020.1-1_all.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/x/xz-utils/liblzma5_5.2.5-2.1~deb11u1_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/z/zlib/zlib1g_1.2.11.dfsg-2+deb11u2_mips64el.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/z/zlib/zlib1g-dev_1.2.11.dfsg-2+deb11u2_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/alsa-lib/libasound2_1.2.4-1.1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/alsa-lib/libasound2-dev_1.2.4-1.1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/atk1.0/libatk1.0-0_2.38.0-1~bpo11+1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/atk1.0/libatk1.0-dev_2.38.0-1~bpo11+1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/at-spi2-atk/libatk-bridge2.0-0_2.38.0-4~bpo11+1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/at-spi2-atk/libatk-bridge2.0-dev_2.38.0-4~bpo11+1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/at-spi2-core/libatspi2.0-0_2.44.1-1~bpo11+1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/at-spi2-core/libatspi2.0-dev_2.44.1-1~bpo11+1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/attr/libattr1_2.4.48-6_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/audit/libaudit1_3.0-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/avahi/libavahi-client3_0.8-5+deb11u2_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/avahi/libavahi-common3_0.8-5+deb11u2_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/b/bluez/libbluetooth3_5.55-3.1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/b/bluez/libbluetooth-dev_5.55-3.1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/b/brotli/libbrotli1_1.0.9-2+b2_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/b/brotli/libbrotli-dev_1.0.9-2+b2_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cairo/libcairo2_1.16.0-5_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cairo/libcairo2-dev_1.16.0-5_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cairo/libcairo-gobject2_1.16.0-5_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cairo/libcairo-script-interpreter2_1.16.0-5_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/colord/libcolord2_1.4.5-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cups/libcups2_2.3.3op2-3+deb11u2_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cups/libcups2-dev_2.3.3op2-3+deb11u2_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cups/libcupsimage2_2.3.3op2-3+deb11u2_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cups/libcupsimage2-dev_2.3.3op2-3+deb11u2_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/curl/libcurl3-gnutls_7.88.1-7~bpo11+2_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/curl/libcurl4-gnutls-dev_7.88.1-7~bpo11+2_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cyrus-sasl2/libsasl2-2_2.1.27+dfsg-2.1+deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/d/db5.3/libdb5.3_5.3.28+dfsg1-0.8_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/d/dbus-glib/libdbus-glib-1-2_0.110-6_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/d/dbus/libdbus-1-3_1.12.24-0+deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/d/dbus/libdbus-1-dev_1.12.24-0+deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/d/double-conversion/libdouble-conversion3_3.1.5-6.1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/e/e2fsprogs/comerr-dev_2.1-1.46.6-1~bpo11+1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/e/e2fsprogs/libcom-err2_1.46.6-1~bpo11+1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/e/elfutils/libelf1_0.187-1~bpo11+1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/e/elfutils/libelf-dev_0.187-1~bpo11+1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/e/expat/libexpat1_2.2.10-2+deb11u5_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/e/expat/libexpat1-dev_2.2.10-2+deb11u5_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/flac/libflac8_1.3.3-2+deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/flac/libflac-dev_1.3.3-2+deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/fontconfig/libfontconfig1_2.13.1-4.2_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/fontconfig/libfontconfig-dev_2.13.1-4.2_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/freetype/libfreetype6_2.10.4+dfsg-1+deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/freetype/libfreetype-dev_2.10.4+dfsg-1+deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/fribidi/libfribidi0_1.0.8-2+deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/fribidi/libfribidi-dev_1.0.8-2+deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libatomic1_10.2.1-6_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libgcc-10-dev_10.2.1-6_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libgcc-s1_10.2.1-6_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libgomp1_10.2.1-6_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libstdc++-10-dev_10.2.1-6_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libstdc++6_10.2.1-6_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gdk-pixbuf/libgdk-pixbuf-2.0-0_2.42.2+dfsg-1+deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gdk-pixbuf/libgdk-pixbuf-2.0-dev_2.42.2+dfsg-1+deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/glib2.0/libglib2.0-0_2.66.8-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/glib2.0/libglib2.0-dev_2.66.8-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/glibc/libc6_2.31-13+deb11u5_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/glibc/libc6-dev_2.31-13+deb11u5_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gmp/libgmp10_6.2.1+dfsg-1+deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gnutls28/libgnutls28-dev_3.7.1-5+deb11u3_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gnutls28/libgnutls30_3.7.1-5+deb11u3_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gnutls28/libgnutls-dane0_3.7.1-5+deb11u3_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gnutls28/libgnutls-openssl27_3.7.1-5+deb11u3_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gnutls28/libgnutlsxx28_3.7.1-5+deb11u3_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/graphene/libgraphene-1.0-0_1.10.4+dfsg1-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/graphene/libgraphene-1.0-dev_1.10.4+dfsg1-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/graphite2/libgraphite2-3_1.3.14-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/graphite2/libgraphite2-dev_1.3.14-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gtk+2.0/libgtk2.0-0_2.24.33-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gtk+3.0/libgtk-3-0_3.24.24-4+deb11u3_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gtk+3.0/libgtk-3-dev_3.24.24-4+deb11u3_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gtk4/libgtk-4-1_4.8.3+ds-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gtk4/libgtk-4-dev_4.8.3+ds-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/h/harfbuzz/libharfbuzz0b_2.7.4-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/h/harfbuzz/libharfbuzz-dev_2.7.4-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/h/harfbuzz/libharfbuzz-gobject0_2.7.4-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/h/harfbuzz/libharfbuzz-icu0_2.7.4-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/i/icu-le-hb/libicu-le-hb0_1.0.3+git180724-3+b2_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/i/icu/libicu67_67.1-7_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/j/jbigkit/libjbig0_2.1-3.1+b2_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/j/jbigkit/libjbig-dev_2.1-3.1+b2_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/j/json-glib/libjson-glib-1.0-0_1.6.2-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/keyutils/libkeyutils1_1.6.1-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/krb5-multidev_1.18.3-6+deb11u3_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libgssapi-krb5-2_1.18.3-6+deb11u3_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libgssrpc4_1.18.3-6+deb11u3_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libk5crypto3_1.18.3-6+deb11u3_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libkadm5clnt-mit12_1.18.3-6+deb11u3_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libkadm5srv-mit12_1.18.3-6+deb11u3_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libkdb5-10_1.18.3-6+deb11u3_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libkrb5-3_1.18.3-6+deb11u3_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libkrb5-dev_1.18.3-6+deb11u3_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libkrb5support0_1.18.3-6+deb11u3_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/liba/libasyncns/libasyncns0_0.8-6+b2_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libb/libb2/libb2-1_0.98.1-1.1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libb/libbsd/libbsd0_0.11.3-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libc/libcap2/libcap2_2.44-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libc/libcap2/libcap-dev_2.44-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libc/libcap-ng/libcap-ng0_0.7.9-2.2+b1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libc/libcloudproviders/libcloudproviders0_0.3.0-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdatrie/libdatrie1_0.2.13-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdatrie/libdatrie-dev_0.2.13-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdbusmenu/libdbusmenu-glib4_18.10.20180917~bzr492+repack1-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdbusmenu/libdbusmenu-glib-dev_18.10.20180917~bzr492+repack1-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdbusmenu/libdbusmenu-gtk3-4_18.10.20180917~bzr492+repack1-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdbusmenu/libdbusmenu-gtk4_18.10.20180917~bzr492+repack1-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdeflate/libdeflate0_1.10-2~bpo11+1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdeflate/libdeflate-dev_1.10-2~bpo11+1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdrm/libdrm2_2.4.104-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdrm/libdrm-amdgpu1_2.4.104-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdrm/libdrm-dev_2.4.104-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdrm/libdrm-nouveau2_2.4.104-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdrm/libdrm-radeon1_2.4.104-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libe/libepoxy/libepoxy0_1.5.8-1~bpo11+1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libe/libepoxy/libepoxy-dev_1.5.8-1~bpo11+1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libe/libevdev/libevdev2_1.11.0+dfsg-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libe/libevdev/libevdev-dev_1.11.0+dfsg-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libe/libevent/libevent-2.1-7_2.1.12-stable-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libf/libffi/libffi7_3.3-6_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libf/libffi/libffi-dev_3.3-6_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libgcrypt20/libgcrypt20_1.8.7-6_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libgcrypt20/libgcrypt20-dev_1.8.7-6_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libegl1_1.3.2-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libegl-dev_1.3.2-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libgl1_1.3.2-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libgl-dev_1.3.2-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libgles1_1.3.2-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libgles2_1.3.2-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libgles-dev_1.3.2-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libglvnd0_1.3.2-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libglvnd-dev_1.3.2-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libglx0_1.3.2-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libglx-dev_1.3.2-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libopengl0_1.3.2-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libgpg-error/libgpg-error0_1.38-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libgpg-error/libgpg-error-dev_1.38-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libgudev/libgudev-1.0-0_234-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libi/libice/libice6_1.0.10-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libi/libidl/libidl-2-0_0.8.14-4+b12_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libi/libidn2/libidn2-0_2.3.0-5_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libi/libidn/libidn11_1.33-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libi/libinput/libinput10_1.16.4-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libi/libinput/libinput-dev_1.16.4-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libj/libjpeg-turbo/libjpeg62-turbo_2.0.6-4_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libj/libjpeg-turbo/libjpeg62-turbo-dev_2.0.6-4_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libj/libjsoncpp/libjsoncpp24_1.9.4-4_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libj/libjsoncpp/libjsoncpp-dev_1.9.4-4_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libm/libmd/libmd0_1.0.3-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libn/libnsl/libnsl2_1.3.0-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libn/libnss-db/libnss-db_2.2.3pre1-6+b10_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libo/libogg/libogg0_1.3.4-0.1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libo/libogg/libogg-dev_1.3.4-0.1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libp/libpciaccess/libpciaccess0_0.16-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libp/libpng1.6/libpng16-16_1.6.37-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libp/libpng1.6/libpng-dev_1.6.37-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libp/libproxy/libproxy1v5_0.4.17-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libp/libpsl/libpsl5_0.21.0-1.2_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libp/libpthread-stubs/libpthread-stubs0-dev_0.4-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libr/librest/librest-0.7-0_0.8.1-1.1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libselinux/libselinux1_3.1-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libselinux/libselinux1-dev_3.1-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libsepol/libsepol1_3.1-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libsepol/libsepol1-dev_3.1-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libsm/libsm6_1.2.3-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libsndfile/libsndfile1_1.0.31-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libsoup2.4/libsoup2.4-1_2.72.0-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libsoup2.4/libsoup-gnome2.4-1_2.72.0-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libssh2/libssh2-1_1.9.0-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libt/libtasn1-6/libtasn1-6_4.16.0-2+deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libt/libthai/libthai0_0.1.28-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libt/libthai/libthai-dev_0.1.28-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libt/libtirpc/libtirpc3_1.3.1-1+deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libt/libtool/libltdl7_2.4.6-15_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libu/libunistring/libunistring2_0.9.10-4_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libu/libutempter/libutempter0_1.2.1-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libu/libutempter/libutempter-dev_1.2.1-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libva/libva2_2.17.0-1~bpo11+1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libva/libva-dev_2.17.0-1~bpo11+1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libva/libva-drm2_2.17.0-1~bpo11+1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libva/libva-glx2_2.17.0-1~bpo11+1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libva/libva-wayland2_2.17.0-1~bpo11+1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libva/libva-x11-2_2.17.0-1~bpo11+1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libvorbis/libvorbis0a_1.3.7-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libvorbis/libvorbisenc2_1.3.7-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libw/libwacom/libwacom2_1.8-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libw/libwebp/libwebp6_0.6.1-2.1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libw/libwebp/libwebp7_1.2.4-0.2_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libw/libwebp/libwebpdemux2_0.6.1-2.1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libw/libwebp/libwebp-dev_0.6.1-2.1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libw/libwebp/libwebpmux3_0.6.1-2.1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libx11/libx11-6_1.7.2-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libx11/libx11-dev_1.7.2-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libx11/libx11-xcb1_1.7.2-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libx11/libx11-xcb-dev_1.7.2-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxau/libxau6_1.0.9-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxau/libxau-dev_1.0.9-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb1_1.14-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb1-dev_1.14-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-dri2-0_1.14-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-dri2-0-dev_1.14-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-dri3-0_1.14-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-dri3-dev_1.14-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-glx0_1.14-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-glx0-dev_1.14-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-present0_1.14-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-present-dev_1.14-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-randr0_1.14-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-randr0-dev_1.14-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-render0_1.14-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-render0-dev_1.14-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-shape0_1.14-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-shape0-dev_1.14-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-shm0_1.14-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-shm0-dev_1.14-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-sync1_1.14-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-sync-dev_1.14-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-xfixes0_1.14-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-xfixes0-dev_1.14-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-xinerama0_1.14-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-xinput0_1.14-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-xkb1_1.14-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcomposite/libxcomposite1_0.4.5-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcomposite/libxcomposite-dev_0.4.5-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcrypt/libcrypt1_4.4.18-4_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcrypt/libcrypt-dev_4.4.18-4_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcursor/libxcursor1_1.2.0-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcursor/libxcursor-dev_1.2.0-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxdamage/libxdamage1_1.1.5-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxdamage/libxdamage-dev_1.1.5-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxdmcp/libxdmcp6_1.1.2-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxdmcp/libxdmcp-dev_1.1.2-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxext/libxext6_1.3.3-1.1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxext/libxext-dev_1.3.3-1.1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxfixes/libxfixes3_5.0.3-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxfixes/libxfixes-dev_5.0.3-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxi/libxi6_1.7.10-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxi/libxi-dev_1.7.10-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxinerama/libxinerama1_1.1.4-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxinerama/libxinerama-dev_1.1.4-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxkbcommon/libxkbcommon0_1.0.3-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxkbcommon/libxkbcommon-dev_1.0.3-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxkbcommon/libxkbcommon-x11-0_1.0.3-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxml2/libxml2_2.9.10+dfsg-6.7+deb11u4_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxml2/libxml2-dev_2.9.10+dfsg-6.7+deb11u4_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxrandr/libxrandr2_1.5.1-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxrandr/libxrandr-dev_1.5.1-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxrender/libxrender1_0.9.10-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxrender/libxrender-dev_0.9.10-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxshmfence/libxshmfence1_1.3-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxshmfence/libxshmfence-dev_1.3-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxslt/libxslt1.1_1.1.34-4+deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxslt/libxslt1-dev_1.1.34-4+deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxss/libxss1_1.2.3-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxss/libxss-dev_1.2.3-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxt/libxt6_1.2.0-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxt/libxt-dev_1.2.0-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxtst/libxtst6_1.2.3-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxtst/libxtst-dev_1.2.3-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxxf86vm/libxxf86vm1_1.1.4-1+b2_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxxf86vm/libxxf86vm-dev_1.1.4-1+b2_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libz/libzstd/libzstd1_1.4.8+dfsg-2.1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/l/lcms2/liblcms2-2_2.12~rc1-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/l/lerc/liblerc4_4.0.0+ds-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/l/linux/linux-libc-dev_5.19.11-1~bpo11+1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/l/lz4/liblz4-1_1.9.3-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/l/lzo2/liblzo2-2_2.10-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/md4c/libmd4c0_0.4.7-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/libegl1-mesa_20.3.5-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/libegl1-mesa-dev_20.3.5-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/libgbm1_20.3.5-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/libgbm-dev_20.3.5-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/libgl1-mesa-dev_20.3.5-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/libgl1-mesa-glx_20.3.5-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/libglapi-mesa_20.3.5-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/libwayland-egl1-mesa_20.3.5-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/mesa-common-dev_20.3.5-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/minizip/libminizip1_1.1-8+b1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/minizip/libminizip-dev_1.1-8+b1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mtdev/libmtdev1_1.1.6-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/ncurses/libncurses6_6.2+20201114-2+deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/ncurses/libncurses-dev_6.2+20201114-2+deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/ncurses/libncursesw6_6.2+20201114-2+deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/ncurses/libtinfo6_6.2+20201114-2+deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/nettle/libhogweed6_3.7.3-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/nettle/libnettle8_3.7.3-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/nghttp2/libnghttp2-14_1.43.0-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/nspr/libnspr4_4.29-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/nspr/libnspr4-dev_4.29-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/nss/libnss3_3.61-1+deb11u3_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/nss/libnss3-dev_3.61-1+deb11u3_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/o/openldap/libldap-2.4-2_2.4.59+dfsg-1~bpo11+1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/o/openssl/libssl1.1_1.1.1n-0+deb11u4_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/o/openssl/libssl-dev_1.1.1n-0+deb11u4_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/o/opus/libopus0_1.3.1-0.1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/o/opus/libopus-dev_1.3.1-0.1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/p11-kit/libp11-kit0_0.23.22-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pam/libpam0g_1.4.0-9+deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pam/libpam0g-dev_1.4.0-9+deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pango1.0/libpango-1.0-0_1.46.2-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pango1.0/libpango1.0-dev_1.46.2-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pango1.0/libpangocairo-1.0-0_1.46.2-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pango1.0/libpangoft2-1.0-0_1.46.2-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pango1.0/libpangoxft-1.0-0_1.46.2-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pangox-compat/libpangox-1.0-0_0.0.2-5.1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pciutils/libpci3_3.7.0-5_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pciutils/libpci-dev_3.7.0-5_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre2/libpcre2-16-0_10.36-2+deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre2/libpcre2-32-0_10.36-2+deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre2/libpcre2-8-0_10.36-2+deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre2/libpcre2-dev_10.36-2+deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre2/libpcre2-posix2_10.36-2+deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre3/libpcre16-3_8.39-13_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre3/libpcre32-3_8.39-13_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre3/libpcre3_8.39-13_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre3/libpcre3-dev_8.39-13_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre3/libpcrecpp0v5_8.39-13_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pipewire/libpipewire-0.3-0_0.3.65-2~bpo11+1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pipewire/libpipewire-0.3-dev_0.3.65-2~bpo11+1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pipewire/libspa-0.2-dev_0.3.65-2~bpo11+1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pixman/libpixman-1-0_0.40.0-1.1~deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pixman/libpixman-1-dev_0.40.0-1.1~deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pulseaudio/libpulse0_14.2-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pulseaudio/libpulse-dev_14.2-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pulseaudio/libpulse-mainloop-glib0_14.2-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6concurrent6_6.4.2+dfsg-10~bpo11+1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6core6_6.4.2+dfsg-10~bpo11+1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6dbus6_6.4.2+dfsg-10~bpo11+1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6gui6_6.4.2+dfsg-10~bpo11+1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6network6_6.4.2+dfsg-10~bpo11+1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6opengl6_6.4.2+dfsg-10~bpo11+1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6openglwidgets6_6.4.2+dfsg-10~bpo11+1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6printsupport6_6.4.2+dfsg-10~bpo11+1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6sql6_6.4.2+dfsg-10~bpo11+1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6test6_6.4.2+dfsg-10~bpo11+1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6widgets6_6.4.2+dfsg-10~bpo11+1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6xml6_6.4.2+dfsg-10~bpo11+1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/qt6-base-dev_6.4.2+dfsg-10~bpo11+1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/qt6-base-dev-tools_6.4.2+dfsg-10~bpo11+1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5concurrent5_5.15.2+dfsg-9_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5core5a_5.15.2+dfsg-9_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5dbus5_5.15.2+dfsg-9_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5gui5_5.15.2+dfsg-9_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5network5_5.15.2+dfsg-9_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5printsupport5_5.15.2+dfsg-9_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5sql5_5.15.2+dfsg-9_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5test5_5.15.2+dfsg-9_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5widgets5_5.15.2+dfsg-9_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5xml5_5.15.2+dfsg-9_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/qtbase5-dev_5.15.2+dfsg-9_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/qtbase5-dev-tools_5.15.2+dfsg-9_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/r/re2/libre2-9_20210201+dfsg-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/r/re2/libre2-dev_20210201+dfsg-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/r/rtmpdump/librtmp1_2.4+20151223.gitfa8646d.1-2+b2_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/shared-mime-info/shared-mime-info_2.0-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/snappy/libsnappy1v5_1.1.8-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/snappy/libsnappy-dev_1.1.8-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/speech-dispatcher/libspeechd2_0.11.4-2~bpo11+1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/speech-dispatcher/libspeechd-dev_0.11.4-2~bpo11+1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/sqlite3/libsqlite3-0_3.34.1-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/systemd/libsystemd0_252.5-2~bpo11+1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/systemd/libsystemd-dev_252.5-2~bpo11+1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/systemd/libudev1_252.5-2~bpo11+1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/systemd/libudev-dev_252.5-2~bpo11+1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/t/tcp-wrappers/libwrap0_7.6.q-31_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/t/tiff/libtiff5_4.2.0-1+deb11u4_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/t/tiff/libtiff6_4.5.0-6_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/t/tiff/libtiff-dev_4.2.0-1+deb11u4_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/t/tiff/libtiffxx5_4.2.0-1+deb11u4_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/t/tslib/libts0_1.22-1+b1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/u/unbound/libunbound8_1.17.1-2~bpo11+1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/u/util-linux/libblkid1_2.36.1-8+deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/u/util-linux/libblkid-dev_2.36.1-8+deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/u/util-linux/libmount1_2.36.1-8+deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/u/util-linux/libmount-dev_2.36.1-8+deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/u/util-linux/libuuid1_2.36.1-8+deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/u/util-linux/uuid-dev_2.36.1-8+deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/v/valgrind/valgrind_3.16.1-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/v/vulkan-loader/libvulkan1_1.3.224.0-1~bpo11+1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/v/vulkan-loader/libvulkan-dev_1.3.224.0-1~bpo11+1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wayland/libwayland-bin_1.18.0-2~exp1.1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wayland/libwayland-client0_1.18.0-2~exp1.1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wayland/libwayland-cursor0_1.18.0-2~exp1.1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wayland/libwayland-dev_1.18.0-2~exp1.1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wayland/libwayland-egl1_1.18.0-2~exp1.1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wayland/libwayland-egl-backend-dev_1.18.0-2~exp1.1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wayland/libwayland-server0_1.18.0-2~exp1.1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wayland-protocols/wayland-protocols_1.20-1_all.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xcb-util-image/libxcb-image0_0.4.0-1+b3_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xcb-util-image/libxcb-image0-dev_0.4.0-1+b3_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xcb-util-keysyms/libxcb-keysyms1_0.4.0-1+b2_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xcb-util/libxcb-util1_0.4.0-1+b1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xcb-util/libxcb-util-dev_0.4.0-1+b1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xcb-util-renderutil/libxcb-render-util0_0.3.9-1+b1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xcb-util-renderutil/libxcb-render-util0-dev_0.3.9-1+b1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xcb-util-wm/libxcb-icccm4_0.4.1-1.1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xft/libxft2_2.3.2-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xft/libxft-dev_2.3.2-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xorgproto/x11proto-dev_2020.1-1_all.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xz-utils/liblzma5_5.2.5-2.1~deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/z/zlib/zlib1g_1.2.11.dfsg-2+deb11u2_mips64el.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/z/zlib/zlib1g-dev_1.2.11.dfsg-2+deb11u2_mips64el.deb diff --git a/build/linux/sysroot_scripts/generated_package_lists/bullseye.mipsel b/build/linux/sysroot_scripts/generated_package_lists/bullseye.mipsel index 9027494..dc38c60 100644 --- a/build/linux/sysroot_scripts/generated_package_lists/bullseye.mipsel +++ b/build/linux/sysroot_scripts/generated_package_lists/bullseye.mipsel @@ -1,383 +1,401 @@ -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/a/alsa-lib/libasound2_1.2.4-1.1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/a/alsa-lib/libasound2-dev_1.2.4-1.1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/a/atk1.0/libatk1.0-0_2.38.0-1~bpo11+1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/a/atk1.0/libatk1.0-dev_2.38.0-1~bpo11+1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/a/at-spi2-atk/libatk-bridge2.0-0_2.38.0-4~bpo11+1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/a/at-spi2-atk/libatk-bridge2.0-dev_2.38.0-4~bpo11+1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/a/at-spi2-core/libatspi2.0-0_2.44.1-1~bpo11+1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/a/at-spi2-core/libatspi2.0-dev_2.44.1-1~bpo11+1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/a/attr/libattr1_2.4.48-6_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/a/audit/libaudit1_3.0-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/a/avahi/libavahi-client3_0.8-5+deb11u1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/a/avahi/libavahi-common3_0.8-5+deb11u1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/b/bluez/libbluetooth3_5.55-3.1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/b/bluez/libbluetooth-dev_5.55-3.1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/b/brotli/libbrotli1_1.0.9-2+b2_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/b/brotli/libbrotli-dev_1.0.9-2+b2_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/c/cairo/libcairo2_1.16.0-5_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/c/cairo/libcairo2-dev_1.16.0-5_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/c/cairo/libcairo-gobject2_1.16.0-5_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/c/cairo/libcairo-script-interpreter2_1.16.0-5_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/c/colord/libcolord2_1.4.5-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/c/cups/libcups2_2.3.3op2-3+deb11u2_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/c/cups/libcups2-dev_2.3.3op2-3+deb11u2_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/c/cups/libcupsimage2_2.3.3op2-3+deb11u2_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/c/cups/libcupsimage2-dev_2.3.3op2-3+deb11u2_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/c/curl/libcurl3-gnutls_7.85.0-1~bpo11+1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/c/curl/libcurl4-gnutls-dev_7.85.0-1~bpo11+1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/c/cyrus-sasl2/libsasl2-2_2.1.27+dfsg-2.1+deb11u1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/d/db5.3/libdb5.3_5.3.28+dfsg1-0.8_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/d/dbus-glib/libdbus-glib-1-2_0.110-6_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/d/dbus/libdbus-1-3_1.12.20-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/d/dbus/libdbus-1-dev_1.12.20-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/d/double-conversion/libdouble-conversion3_3.1.5-6.1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/e/e2fsprogs/comerr-dev_2.1-1.46.5-2~bpo11+2_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/e/e2fsprogs/libcom-err2_1.46.5-2~bpo11+2_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/e/elfutils/libelf1_0.187-1~bpo11+1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/e/elfutils/libelf-dev_0.187-1~bpo11+1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/e/expat/libexpat1_2.2.10-2+deb11u3_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/e/expat/libexpat1-dev_2.2.10-2+deb11u3_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/f/flac/libflac8_1.3.3-2+deb11u1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/f/flac/libflac-dev_1.3.3-2+deb11u1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/f/fontconfig/libfontconfig1_2.13.1-4.2_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/f/fontconfig/libfontconfig-dev_2.13.1-4.2_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/f/freetype/libfreetype6_2.10.4+dfsg-1+deb11u1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/f/freetype/libfreetype-dev_2.10.4+dfsg-1+deb11u1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/f/fribidi/libfribidi0_1.0.8-2+deb11u1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/f/fribidi/libfribidi-dev_1.0.8-2+deb11u1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gcc-10/libatomic1_10.2.1-6_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gcc-10/libgcc-10-dev_10.2.1-6_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gcc-10/libgcc-s1_10.2.1-6_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gcc-10/libgomp1_10.2.1-6_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gcc-10/libstdc++-10-dev_10.2.1-6_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gcc-10/libstdc++6_10.2.1-6_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gdk-pixbuf/libgdk-pixbuf-2.0-0_2.42.2+dfsg-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gdk-pixbuf/libgdk-pixbuf-2.0-dev_2.42.2+dfsg-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/glib2.0/libglib2.0-0_2.66.8-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/glib2.0/libglib2.0-dev_2.66.8-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/glibc/libc6_2.31-13+deb11u5_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/glibc/libc6-dev_2.31-13+deb11u5_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gmp/libgmp10_6.2.1+dfsg-1+deb11u1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gnutls28/libgnutls28-dev_3.7.1-5+deb11u2_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gnutls28/libgnutls30_3.7.1-5+deb11u2_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gnutls28/libgnutls-dane0_3.7.1-5+deb11u2_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gnutls28/libgnutls-openssl27_3.7.1-5+deb11u2_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gnutls28/libgnutlsxx28_3.7.1-5+deb11u2_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/graphene/libgraphene-1.0-0_1.10.4+dfsg1-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/graphene/libgraphene-1.0-dev_1.10.4+dfsg1-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/graphite2/libgraphite2-3_1.3.14-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/graphite2/libgraphite2-dev_1.3.14-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gtk+2.0/libgtk2.0-0_2.24.33-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gtk+3.0/libgtk-3-0_3.24.24-4+deb11u2_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gtk+3.0/libgtk-3-dev_3.24.24-4+deb11u2_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gtk4/libgtk-4-1_4.8.1+ds-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/g/gtk4/libgtk-4-dev_4.8.1+ds-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/h/harfbuzz/libharfbuzz0b_2.7.4-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/h/harfbuzz/libharfbuzz-dev_2.7.4-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/h/harfbuzz/libharfbuzz-gobject0_2.7.4-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/h/harfbuzz/libharfbuzz-icu0_2.7.4-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/i/icu-le-hb/libicu-le-hb0_1.0.3+git180724-3+b2_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/i/icu/libicu67_67.1-7_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/j/jbigkit/libjbig0_2.1-3.1+b2_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/j/jbigkit/libjbig-dev_2.1-3.1+b2_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/j/json-glib/libjson-glib-1.0-0_1.6.2-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/k/keyutils/libkeyutils1_1.6.1-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/k/krb5/krb5-multidev_1.18.3-6+deb11u2_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/k/krb5/libgssapi-krb5-2_1.18.3-6+deb11u2_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/k/krb5/libgssrpc4_1.18.3-6+deb11u2_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/k/krb5/libk5crypto3_1.18.3-6+deb11u2_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/k/krb5/libkadm5clnt-mit12_1.18.3-6+deb11u2_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/k/krb5/libkadm5srv-mit12_1.18.3-6+deb11u2_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/k/krb5/libkdb5-10_1.18.3-6+deb11u2_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/k/krb5/libkrb5-3_1.18.3-6+deb11u2_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/k/krb5/libkrb5-dev_1.18.3-6+deb11u2_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/k/krb5/libkrb5support0_1.18.3-6+deb11u2_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/liba/libasyncns/libasyncns0_0.8-6+b2_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libb/libbsd/libbsd0_0.11.3-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libc/libcap2/libcap2_2.44-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libc/libcap2/libcap-dev_2.44-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libc/libcap-ng/libcap-ng0_0.7.9-2.2+b1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libc/libcloudproviders/libcloudproviders0_0.3.0-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libd/libdatrie/libdatrie1_0.2.13-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libd/libdatrie/libdatrie-dev_0.2.13-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libd/libdbusmenu/libdbusmenu-glib4_18.10.20180917~bzr492+repack1-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libd/libdbusmenu/libdbusmenu-glib-dev_18.10.20180917~bzr492+repack1-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libd/libdbusmenu/libdbusmenu-gtk3-4_18.10.20180917~bzr492+repack1-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libd/libdbusmenu/libdbusmenu-gtk4_18.10.20180917~bzr492+repack1-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libd/libdeflate/libdeflate0_1.10-2~bpo11+1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libd/libdeflate/libdeflate-dev_1.10-2~bpo11+1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libd/libdrm/libdrm2_2.4.104-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libd/libdrm/libdrm-amdgpu1_2.4.104-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libd/libdrm/libdrm-dev_2.4.104-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libd/libdrm/libdrm-nouveau2_2.4.104-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libd/libdrm/libdrm-radeon1_2.4.104-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libe/libepoxy/libepoxy0_1.5.8-1~bpo11+1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libe/libepoxy/libepoxy-dev_1.5.8-1~bpo11+1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libe/libevdev/libevdev2_1.11.0+dfsg-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libe/libevdev/libevdev-dev_1.11.0+dfsg-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libe/libevent/libevent-2.1-7_2.1.12-stable-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libf/libffi/libffi7_3.3-6_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libf/libffi/libffi-dev_3.3-6_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libgcrypt20/libgcrypt20_1.8.7-6_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libgcrypt20/libgcrypt20-dev_1.8.7-6_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libglvnd/libegl1_1.3.2-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libglvnd/libegl-dev_1.3.2-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libglvnd/libgl1_1.3.2-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libglvnd/libgl-dev_1.3.2-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libglvnd/libgles1_1.3.2-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libglvnd/libgles2_1.3.2-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libglvnd/libgles-dev_1.3.2-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libglvnd/libglvnd0_1.3.2-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libglvnd/libglvnd-dev_1.3.2-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libglvnd/libglx0_1.3.2-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libglvnd/libglx-dev_1.3.2-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libglvnd/libopengl0_1.3.2-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libgnome-keyring/libgnome-keyring0_3.12.0-1+b2_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libgnome-keyring/libgnome-keyring-dev_3.12.0-1+b2_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libgpg-error/libgpg-error0_1.38-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libgpg-error/libgpg-error-dev_1.38-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libg/libgudev/libgudev-1.0-0_234-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libi/libice/libice6_1.0.10-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libi/libidl/libidl-2-0_0.8.14-4+b12_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libi/libidn2/libidn2-0_2.3.0-5_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libi/libidn/libidn11_1.33-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libi/libinput/libinput10_1.16.4-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libi/libinput/libinput-dev_1.16.4-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libj/libjpeg-turbo/libjpeg62-turbo_2.0.6-4_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libj/libjpeg-turbo/libjpeg62-turbo-dev_2.0.6-4_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libj/libjsoncpp/libjsoncpp24_1.9.4-4_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libj/libjsoncpp/libjsoncpp-dev_1.9.4-4_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libm/libmd/libmd0_1.0.3-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libn/libnsl/libnsl2_1.3.0-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libn/libnss-db/libnss-db_2.2.3pre1-6+b10_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libo/libogg/libogg0_1.3.4-0.1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libo/libogg/libogg-dev_1.3.4-0.1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libp/libpciaccess/libpciaccess0_0.16-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libp/libpng1.6/libpng16-16_1.6.37-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libp/libpng1.6/libpng-dev_1.6.37-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libp/libpsl/libpsl5_0.21.0-1.2_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libp/libpthread-stubs/libpthread-stubs0-dev_0.4-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libr/librest/librest-0.7-0_0.8.1-1.1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libs/libselinux/libselinux1_3.1-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libs/libselinux/libselinux1-dev_3.1-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libs/libsepol/libsepol1_3.1-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libs/libsepol/libsepol1-dev_3.1-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libs/libsm/libsm6_1.2.3-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libs/libsndfile/libsndfile1_1.0.31-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libs/libsoup2.4/libsoup2.4-1_2.72.0-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libs/libsoup2.4/libsoup-gnome2.4-1_2.72.0-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libs/libssh2/libssh2-1_1.9.0-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libt/libtasn1-6/libtasn1-6_4.16.0-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libt/libthai/libthai0_0.1.28-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libt/libthai/libthai-dev_0.1.28-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libt/libtirpc/libtirpc3_1.3.1-1+deb11u1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libt/libtool/libltdl7_2.4.6-15_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libu/libunistring/libunistring2_0.9.10-4_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libu/libutempter/libutempter0_1.2.1-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libu/libutempter/libutempter-dev_1.2.1-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libv/libva/libva2_2.14.0-1~bpo11+1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libv/libva/libva-dev_2.14.0-1~bpo11+1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libv/libva/libva-drm2_2.14.0-1~bpo11+1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libv/libva/libva-glx2_2.14.0-1~bpo11+1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libv/libva/libva-wayland2_2.14.0-1~bpo11+1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libv/libva/libva-x11-2_2.14.0-1~bpo11+1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libv/libvorbis/libvorbis0a_1.3.7-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libv/libvorbis/libvorbisenc2_1.3.7-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libw/libwacom/libwacom2_1.8-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libw/libwebp/libwebp6_0.6.1-2.1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libw/libwebp/libwebpdemux2_0.6.1-2.1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libw/libwebp/libwebp-dev_0.6.1-2.1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libw/libwebp/libwebpmux3_0.6.1-2.1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libx11/libx11-6_1.7.2-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libx11/libx11-dev_1.7.2-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libx11/libx11-xcb1_1.7.2-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libx11/libx11-xcb-dev_1.7.2-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxau/libxau6_1.0.9-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxau/libxau-dev_1.0.9-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb1_1.14-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb1-dev_1.14-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-dri2-0_1.14-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-dri2-0-dev_1.14-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-dri3-0_1.14-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-dri3-dev_1.14-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-glx0_1.14-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-glx0-dev_1.14-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-present0_1.14-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-present-dev_1.14-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-randr0_1.14-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-randr0-dev_1.14-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-render0_1.14-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-render0-dev_1.14-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-shape0_1.14-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-shape0-dev_1.14-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-shm0_1.14-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-shm0-dev_1.14-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-sync1_1.14-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-sync-dev_1.14-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-xfixes0_1.14-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-xfixes0-dev_1.14-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-xinerama0_1.14-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-xinput0_1.14-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcb/libxcb-xkb1_1.14-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcomposite/libxcomposite1_0.4.5-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcomposite/libxcomposite-dev_0.4.5-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcrypt/libcrypt1_4.4.18-4_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcrypt/libcrypt-dev_4.4.18-4_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcursor/libxcursor1_1.2.0-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxcursor/libxcursor-dev_1.2.0-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxdamage/libxdamage1_1.1.5-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxdamage/libxdamage-dev_1.1.5-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxdmcp/libxdmcp6_1.1.2-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxdmcp/libxdmcp-dev_1.1.2-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxext/libxext6_1.3.3-1.1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxext/libxext-dev_1.3.3-1.1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxfixes/libxfixes3_5.0.3-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxfixes/libxfixes-dev_5.0.3-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxi/libxi6_1.7.10-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxi/libxi-dev_1.7.10-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxinerama/libxinerama1_1.1.4-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxinerama/libxinerama-dev_1.1.4-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxkbcommon/libxkbcommon0_1.0.3-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxkbcommon/libxkbcommon-dev_1.0.3-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxkbcommon/libxkbcommon-x11-0_1.0.3-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxml2/libxml2_2.9.10+dfsg-6.7+deb11u2_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxml2/libxml2-dev_2.9.10+dfsg-6.7+deb11u2_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxrandr/libxrandr2_1.5.1-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxrandr/libxrandr-dev_1.5.1-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxrender/libxrender1_0.9.10-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxrender/libxrender-dev_0.9.10-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxshmfence/libxshmfence1_1.3-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxshmfence/libxshmfence-dev_1.3-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxslt/libxslt1.1_1.1.34-4+deb11u1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxslt/libxslt1-dev_1.1.34-4+deb11u1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxss/libxss1_1.2.3-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxss/libxss-dev_1.2.3-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxt/libxt6_1.2.0-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxt/libxt-dev_1.2.0-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxtst/libxtst6_1.2.3-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxtst/libxtst-dev_1.2.3-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxxf86vm/libxxf86vm1_1.1.4-1+b2_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libx/libxxf86vm/libxxf86vm-dev_1.1.4-1+b2_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/libz/libzstd/libzstd1_1.4.8+dfsg-2.1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/l/lcms2/liblcms2-2_2.12~rc1-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/l/linux/linux-libc-dev_5.19.11-1~bpo11+1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/l/lz4/liblz4-1_1.9.3-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/l/lzo2/liblzo2-2_2.10-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/m/md4c/libmd4c0_0.4.7-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/m/mesa/libegl1-mesa_20.3.5-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/m/mesa/libegl1-mesa-dev_20.3.5-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/m/mesa/libgbm1_20.3.5-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/m/mesa/libgbm-dev_20.3.5-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/m/mesa/libgl1-mesa-dev_20.3.5-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/m/mesa/libgl1-mesa-glx_20.3.5-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/m/mesa/libglapi-mesa_20.3.5-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/m/mesa/libwayland-egl1-mesa_20.3.5-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/m/mesa/mesa-common-dev_20.3.5-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/m/minizip/libminizip1_1.1-8+b1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/m/minizip/libminizip-dev_1.1-8+b1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/m/mtdev/libmtdev1_1.1.6-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/n/ncurses/libncurses6_6.2+20201114-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/n/ncurses/libncurses-dev_6.2+20201114-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/n/ncurses/libncursesw6_6.2+20201114-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/n/ncurses/libtinfo6_6.2+20201114-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/n/nettle/libhogweed6_3.7.3-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/n/nettle/libnettle8_3.7.3-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/n/nghttp2/libnghttp2-14_1.43.0-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/n/nspr/libnspr4_4.29-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/n/nspr/libnspr4-dev_4.29-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/n/nss/libnss3_3.61-1+deb11u2_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/n/nss/libnss3-dev_3.61-1+deb11u2_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/o/openldap/libldap-2.4-2_2.4.59+dfsg-1~bpo11+1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/o/openssl/libssl1.1_1.1.1n-0+deb11u3_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/o/openssl/libssl-dev_1.1.1n-0+deb11u3_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/o/opus/libopus0_1.3.1-0.1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/o/opus/libopus-dev_1.3.1-0.1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/p11-kit/libp11-kit0_0.23.22-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pam/libpam0g_1.4.0-9+deb11u1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pam/libpam0g-dev_1.4.0-9+deb11u1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pango1.0/libpango-1.0-0_1.46.2-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pango1.0/libpango1.0-dev_1.46.2-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pango1.0/libpangocairo-1.0-0_1.46.2-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pango1.0/libpangoft2-1.0-0_1.46.2-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pango1.0/libpangoxft-1.0-0_1.46.2-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pangox-compat/libpangox-1.0-0_0.0.2-5.1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pciutils/libpci3_3.7.0-5_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pciutils/libpci-dev_3.7.0-5_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pcre2/libpcre2-16-0_10.36-2+deb11u1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pcre2/libpcre2-32-0_10.36-2+deb11u1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pcre2/libpcre2-8-0_10.36-2+deb11u1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pcre2/libpcre2-dev_10.36-2+deb11u1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pcre2/libpcre2-posix2_10.36-2+deb11u1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pcre3/libpcre16-3_8.39-13_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pcre3/libpcre32-3_8.39-13_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pcre3/libpcre3_8.39-13_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pcre3/libpcre3-dev_8.39-13_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pcre3/libpcrecpp0v5_8.39-13_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pipewire/libpipewire-0.3-0_0.3.58-2~bpo11+1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pipewire/libpipewire-0.3-dev_0.3.58-2~bpo11+1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pipewire/libspa-0.2-dev_0.3.58-2~bpo11+1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pixman/libpixman-1-0_0.40.0-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pixman/libpixman-1-dev_0.40.0-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pulseaudio/libpulse0_14.2-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pulseaudio/libpulse-dev_14.2-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/p/pulseaudio/libpulse-mainloop-glib0_14.2-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/q/qtbase-opensource-src/libqt5concurrent5_5.15.2+dfsg-9_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/q/qtbase-opensource-src/libqt5core5a_5.15.2+dfsg-9_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/q/qtbase-opensource-src/libqt5dbus5_5.15.2+dfsg-9_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/q/qtbase-opensource-src/libqt5gui5_5.15.2+dfsg-9_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/q/qtbase-opensource-src/libqt5network5_5.15.2+dfsg-9_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/q/qtbase-opensource-src/libqt5printsupport5_5.15.2+dfsg-9_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/q/qtbase-opensource-src/libqt5sql5_5.15.2+dfsg-9_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/q/qtbase-opensource-src/libqt5test5_5.15.2+dfsg-9_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/q/qtbase-opensource-src/libqt5widgets5_5.15.2+dfsg-9_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/q/qtbase-opensource-src/libqt5xml5_5.15.2+dfsg-9_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/q/qtbase-opensource-src/qtbase5-dev_5.15.2+dfsg-9_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/q/qtbase-opensource-src/qtbase5-dev-tools_5.15.2+dfsg-9_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/r/re2/libre2-9_20210201+dfsg-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/r/re2/libre2-dev_20210201+dfsg-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/r/rtmpdump/librtmp1_2.4+20151223.gitfa8646d.1-2+b2_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/s/shared-mime-info/shared-mime-info_2.0-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/s/snappy/libsnappy1v5_1.1.8-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/s/snappy/libsnappy-dev_1.1.8-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/s/speech-dispatcher/libspeechd2_0.11.4-1~bpo11+1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/s/speech-dispatcher/libspeechd-dev_0.11.4-1~bpo11+1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/s/sqlite3/libsqlite3-0_3.34.1-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/s/systemd/libsystemd0_251.3-1~bpo11+1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/s/systemd/libsystemd-dev_251.3-1~bpo11+1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/s/systemd/libudev1_251.3-1~bpo11+1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/s/systemd/libudev-dev_251.3-1~bpo11+1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/t/tcp-wrappers/libwrap0_7.6.q-31_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/t/tiff/libtiff5_4.2.0-1+deb11u1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/t/tiff/libtiff-dev_4.2.0-1+deb11u1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/t/tiff/libtiffxx5_4.2.0-1+deb11u1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/u/unbound/libunbound8_1.13.1-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/u/util-linux/libblkid1_2.36.1-8+deb11u1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/u/util-linux/libblkid-dev_2.36.1-8+deb11u1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/u/util-linux/libmount1_2.36.1-8+deb11u1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/u/util-linux/libmount-dev_2.36.1-8+deb11u1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/u/util-linux/libuuid1_2.36.1-8+deb11u1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/u/util-linux/uuid-dev_2.36.1-8+deb11u1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/v/vulkan-loader/libvulkan1_1.3.224.0-1~bpo11+1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/v/vulkan-loader/libvulkan-dev_1.3.224.0-1~bpo11+1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/w/wayland/libwayland-bin_1.18.0-2~exp1.1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/w/wayland/libwayland-client0_1.18.0-2~exp1.1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/w/wayland/libwayland-cursor0_1.18.0-2~exp1.1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/w/wayland/libwayland-dev_1.18.0-2~exp1.1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/w/wayland/libwayland-egl1_1.18.0-2~exp1.1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/w/wayland/libwayland-egl-backend-dev_1.18.0-2~exp1.1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/w/wayland/libwayland-server0_1.18.0-2~exp1.1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/w/wayland-protocols/wayland-protocols_1.20-1_all.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/x/xcb-util-image/libxcb-image0_0.4.0-1+b3_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/x/xcb-util-image/libxcb-image0-dev_0.4.0-1+b3_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/x/xcb-util-keysyms/libxcb-keysyms1_0.4.0-1+b2_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/x/xcb-util/libxcb-util1_0.4.0-1+b1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/x/xcb-util/libxcb-util-dev_0.4.0-1+b1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/x/xcb-util-renderutil/libxcb-render-util0_0.3.9-1+b1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/x/xcb-util-renderutil/libxcb-render-util0-dev_0.3.9-1+b1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/x/xcb-util-wm/libxcb-icccm4_0.4.1-1.1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/x/xft/libxft2_2.3.2-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/x/xft/libxft-dev_2.3.2-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/x/xorgproto/x11proto-dev_2020.1-1_all.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/x/xz-utils/liblzma5_5.2.5-2.1~deb11u1_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/z/zlib/zlib1g_1.2.11.dfsg-2+deb11u2_mipsel.deb -https://snapshot.debian.org/archive/debian/20221105T211506Z/pool/main/z/zlib/zlib1g-dev_1.2.11.dfsg-2+deb11u2_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/alsa-lib/libasound2_1.2.4-1.1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/alsa-lib/libasound2-dev_1.2.4-1.1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/atk1.0/libatk1.0-0_2.38.0-1~bpo11+1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/atk1.0/libatk1.0-dev_2.38.0-1~bpo11+1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/at-spi2-atk/libatk-bridge2.0-0_2.38.0-4~bpo11+1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/at-spi2-atk/libatk-bridge2.0-dev_2.38.0-4~bpo11+1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/at-spi2-core/libatspi2.0-0_2.44.1-1~bpo11+1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/at-spi2-core/libatspi2.0-dev_2.44.1-1~bpo11+1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/attr/libattr1_2.4.48-6_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/audit/libaudit1_3.0-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/avahi/libavahi-client3_0.8-5+deb11u2_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/avahi/libavahi-common3_0.8-5+deb11u2_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/b/bluez/libbluetooth3_5.55-3.1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/b/bluez/libbluetooth-dev_5.55-3.1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/b/brotli/libbrotli1_1.0.9-2+b2_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/b/brotli/libbrotli-dev_1.0.9-2+b2_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cairo/libcairo2_1.16.0-5_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cairo/libcairo2-dev_1.16.0-5_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cairo/libcairo-gobject2_1.16.0-5_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cairo/libcairo-script-interpreter2_1.16.0-5_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/colord/libcolord2_1.4.5-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cups/libcups2_2.3.3op2-3+deb11u2_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cups/libcups2-dev_2.3.3op2-3+deb11u2_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cups/libcupsimage2_2.3.3op2-3+deb11u2_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cups/libcupsimage2-dev_2.3.3op2-3+deb11u2_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/curl/libcurl3-gnutls_7.88.1-7~bpo11+2_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/curl/libcurl4-gnutls-dev_7.88.1-7~bpo11+2_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cyrus-sasl2/libsasl2-2_2.1.27+dfsg-2.1+deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/d/db5.3/libdb5.3_5.3.28+dfsg1-0.8_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/d/dbus-glib/libdbus-glib-1-2_0.110-6_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/d/dbus/libdbus-1-3_1.12.24-0+deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/d/dbus/libdbus-1-dev_1.12.24-0+deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/d/double-conversion/libdouble-conversion3_3.1.5-6.1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/e/e2fsprogs/comerr-dev_2.1-1.46.6-1~bpo11+1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/e/e2fsprogs/libcom-err2_1.46.6-1~bpo11+1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/e/elfutils/libelf1_0.187-1~bpo11+1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/e/elfutils/libelf-dev_0.187-1~bpo11+1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/e/expat/libexpat1_2.2.10-2+deb11u5_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/e/expat/libexpat1-dev_2.2.10-2+deb11u5_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/flac/libflac8_1.3.3-2+deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/flac/libflac-dev_1.3.3-2+deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/fontconfig/libfontconfig1_2.13.1-4.2_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/fontconfig/libfontconfig-dev_2.13.1-4.2_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/freetype/libfreetype6_2.10.4+dfsg-1+deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/freetype/libfreetype-dev_2.10.4+dfsg-1+deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/fribidi/libfribidi0_1.0.8-2+deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/fribidi/libfribidi-dev_1.0.8-2+deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libatomic1_10.2.1-6_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libgcc-10-dev_10.2.1-6_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libgcc-s1_10.2.1-6_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libgomp1_10.2.1-6_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libstdc++-10-dev_10.2.1-6_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libstdc++6_10.2.1-6_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gdk-pixbuf/libgdk-pixbuf-2.0-0_2.42.2+dfsg-1+deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gdk-pixbuf/libgdk-pixbuf-2.0-dev_2.42.2+dfsg-1+deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/glib2.0/libglib2.0-0_2.66.8-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/glib2.0/libglib2.0-dev_2.66.8-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/glibc/libc6_2.31-13+deb11u5_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/glibc/libc6-dev_2.31-13+deb11u5_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gmp/libgmp10_6.2.1+dfsg-1+deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gnutls28/libgnutls28-dev_3.7.1-5+deb11u3_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gnutls28/libgnutls30_3.7.1-5+deb11u3_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gnutls28/libgnutls-dane0_3.7.1-5+deb11u3_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gnutls28/libgnutls-openssl27_3.7.1-5+deb11u3_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gnutls28/libgnutlsxx28_3.7.1-5+deb11u3_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/graphene/libgraphene-1.0-0_1.10.4+dfsg1-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/graphene/libgraphene-1.0-dev_1.10.4+dfsg1-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/graphite2/libgraphite2-3_1.3.14-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/graphite2/libgraphite2-dev_1.3.14-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gtk+2.0/libgtk2.0-0_2.24.33-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gtk+3.0/libgtk-3-0_3.24.24-4+deb11u3_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gtk+3.0/libgtk-3-dev_3.24.24-4+deb11u3_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gtk4/libgtk-4-1_4.8.3+ds-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gtk4/libgtk-4-dev_4.8.3+ds-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/h/harfbuzz/libharfbuzz0b_2.7.4-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/h/harfbuzz/libharfbuzz-dev_2.7.4-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/h/harfbuzz/libharfbuzz-gobject0_2.7.4-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/h/harfbuzz/libharfbuzz-icu0_2.7.4-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/i/icu-le-hb/libicu-le-hb0_1.0.3+git180724-3+b2_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/i/icu/libicu67_67.1-7_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/j/jbigkit/libjbig0_2.1-3.1+b2_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/j/jbigkit/libjbig-dev_2.1-3.1+b2_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/j/json-glib/libjson-glib-1.0-0_1.6.2-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/keyutils/libkeyutils1_1.6.1-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/krb5-multidev_1.18.3-6+deb11u3_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libgssapi-krb5-2_1.18.3-6+deb11u3_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libgssrpc4_1.18.3-6+deb11u3_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libk5crypto3_1.18.3-6+deb11u3_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libkadm5clnt-mit12_1.18.3-6+deb11u3_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libkadm5srv-mit12_1.18.3-6+deb11u3_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libkdb5-10_1.18.3-6+deb11u3_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libkrb5-3_1.18.3-6+deb11u3_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libkrb5-dev_1.18.3-6+deb11u3_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libkrb5support0_1.18.3-6+deb11u3_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/liba/libasyncns/libasyncns0_0.8-6+b2_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libb/libb2/libb2-1_0.98.1-1.1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libb/libbsd/libbsd0_0.11.3-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libc/libcap2/libcap2_2.44-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libc/libcap2/libcap-dev_2.44-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libc/libcap-ng/libcap-ng0_0.7.9-2.2+b1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libc/libcloudproviders/libcloudproviders0_0.3.0-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdatrie/libdatrie1_0.2.13-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdatrie/libdatrie-dev_0.2.13-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdbusmenu/libdbusmenu-glib4_18.10.20180917~bzr492+repack1-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdbusmenu/libdbusmenu-glib-dev_18.10.20180917~bzr492+repack1-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdbusmenu/libdbusmenu-gtk3-4_18.10.20180917~bzr492+repack1-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdbusmenu/libdbusmenu-gtk4_18.10.20180917~bzr492+repack1-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdeflate/libdeflate0_1.10-2~bpo11+1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdeflate/libdeflate-dev_1.10-2~bpo11+1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdrm/libdrm2_2.4.104-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdrm/libdrm-amdgpu1_2.4.104-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdrm/libdrm-dev_2.4.104-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdrm/libdrm-nouveau2_2.4.104-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdrm/libdrm-radeon1_2.4.104-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libe/libepoxy/libepoxy0_1.5.8-1~bpo11+1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libe/libepoxy/libepoxy-dev_1.5.8-1~bpo11+1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libe/libevdev/libevdev2_1.11.0+dfsg-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libe/libevdev/libevdev-dev_1.11.0+dfsg-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libe/libevent/libevent-2.1-7_2.1.12-stable-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libf/libffi/libffi7_3.3-6_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libf/libffi/libffi-dev_3.3-6_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libgcrypt20/libgcrypt20_1.8.7-6_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libgcrypt20/libgcrypt20-dev_1.8.7-6_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libegl1_1.3.2-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libegl-dev_1.3.2-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libgl1_1.3.2-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libgl-dev_1.3.2-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libgles1_1.3.2-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libgles2_1.3.2-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libgles-dev_1.3.2-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libglvnd0_1.3.2-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libglvnd-dev_1.3.2-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libglx0_1.3.2-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libglx-dev_1.3.2-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libopengl0_1.3.2-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libgpg-error/libgpg-error0_1.38-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libgpg-error/libgpg-error-dev_1.38-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libgudev/libgudev-1.0-0_234-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libi/libice/libice6_1.0.10-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libi/libidl/libidl-2-0_0.8.14-4+b12_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libi/libidn2/libidn2-0_2.3.0-5_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libi/libidn/libidn11_1.33-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libi/libinput/libinput10_1.16.4-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libi/libinput/libinput-dev_1.16.4-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libj/libjpeg-turbo/libjpeg62-turbo_2.0.6-4_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libj/libjpeg-turbo/libjpeg62-turbo-dev_2.0.6-4_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libj/libjsoncpp/libjsoncpp24_1.9.4-4_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libj/libjsoncpp/libjsoncpp-dev_1.9.4-4_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libm/libmd/libmd0_1.0.3-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libn/libnsl/libnsl2_1.3.0-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libn/libnss-db/libnss-db_2.2.3pre1-6+b10_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libo/libogg/libogg0_1.3.4-0.1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libo/libogg/libogg-dev_1.3.4-0.1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libp/libpciaccess/libpciaccess0_0.16-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libp/libpng1.6/libpng16-16_1.6.37-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libp/libpng1.6/libpng-dev_1.6.37-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libp/libproxy/libproxy1v5_0.4.17-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libp/libpsl/libpsl5_0.21.0-1.2_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libp/libpthread-stubs/libpthread-stubs0-dev_0.4-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libr/librest/librest-0.7-0_0.8.1-1.1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libselinux/libselinux1_3.1-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libselinux/libselinux1-dev_3.1-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libsepol/libsepol1_3.1-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libsepol/libsepol1-dev_3.1-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libsm/libsm6_1.2.3-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libsndfile/libsndfile1_1.0.31-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libsoup2.4/libsoup2.4-1_2.72.0-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libsoup2.4/libsoup-gnome2.4-1_2.72.0-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libssh2/libssh2-1_1.9.0-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libt/libtasn1-6/libtasn1-6_4.16.0-2+deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libt/libthai/libthai0_0.1.28-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libt/libthai/libthai-dev_0.1.28-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libt/libtirpc/libtirpc3_1.3.1-1+deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libt/libtool/libltdl7_2.4.6-15_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libu/libunistring/libunistring2_0.9.10-4_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libu/libutempter/libutempter0_1.2.1-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libu/libutempter/libutempter-dev_1.2.1-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libva/libva2_2.17.0-1~bpo11+1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libva/libva-dev_2.17.0-1~bpo11+1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libva/libva-drm2_2.17.0-1~bpo11+1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libva/libva-glx2_2.17.0-1~bpo11+1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libva/libva-wayland2_2.17.0-1~bpo11+1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libva/libva-x11-2_2.17.0-1~bpo11+1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libvorbis/libvorbis0a_1.3.7-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libvorbis/libvorbisenc2_1.3.7-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libw/libwacom/libwacom2_1.8-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libw/libwebp/libwebp6_0.6.1-2.1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libw/libwebp/libwebp7_1.2.4-0.2_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libw/libwebp/libwebpdemux2_0.6.1-2.1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libw/libwebp/libwebp-dev_0.6.1-2.1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libw/libwebp/libwebpmux3_0.6.1-2.1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libx11/libx11-6_1.7.2-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libx11/libx11-dev_1.7.2-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libx11/libx11-xcb1_1.7.2-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libx11/libx11-xcb-dev_1.7.2-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxau/libxau6_1.0.9-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxau/libxau-dev_1.0.9-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb1_1.14-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb1-dev_1.14-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-dri2-0_1.14-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-dri2-0-dev_1.14-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-dri3-0_1.14-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-dri3-dev_1.14-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-glx0_1.14-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-glx0-dev_1.14-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-present0_1.14-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-present-dev_1.14-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-randr0_1.14-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-randr0-dev_1.14-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-render0_1.14-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-render0-dev_1.14-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-shape0_1.14-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-shape0-dev_1.14-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-shm0_1.14-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-shm0-dev_1.14-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-sync1_1.14-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-sync-dev_1.14-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-xfixes0_1.14-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-xfixes0-dev_1.14-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-xinerama0_1.14-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-xinput0_1.14-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-xkb1_1.14-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcomposite/libxcomposite1_0.4.5-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcomposite/libxcomposite-dev_0.4.5-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcrypt/libcrypt1_4.4.18-4_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcrypt/libcrypt-dev_4.4.18-4_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcursor/libxcursor1_1.2.0-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcursor/libxcursor-dev_1.2.0-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxdamage/libxdamage1_1.1.5-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxdamage/libxdamage-dev_1.1.5-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxdmcp/libxdmcp6_1.1.2-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxdmcp/libxdmcp-dev_1.1.2-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxext/libxext6_1.3.3-1.1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxext/libxext-dev_1.3.3-1.1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxfixes/libxfixes3_5.0.3-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxfixes/libxfixes-dev_5.0.3-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxi/libxi6_1.7.10-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxi/libxi-dev_1.7.10-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxinerama/libxinerama1_1.1.4-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxinerama/libxinerama-dev_1.1.4-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxkbcommon/libxkbcommon0_1.0.3-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxkbcommon/libxkbcommon-dev_1.0.3-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxkbcommon/libxkbcommon-x11-0_1.0.3-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxml2/libxml2_2.9.10+dfsg-6.7+deb11u4_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxml2/libxml2-dev_2.9.10+dfsg-6.7+deb11u4_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxrandr/libxrandr2_1.5.1-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxrandr/libxrandr-dev_1.5.1-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxrender/libxrender1_0.9.10-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxrender/libxrender-dev_0.9.10-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxshmfence/libxshmfence1_1.3-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxshmfence/libxshmfence-dev_1.3-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxslt/libxslt1.1_1.1.34-4+deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxslt/libxslt1-dev_1.1.34-4+deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxss/libxss1_1.2.3-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxss/libxss-dev_1.2.3-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxt/libxt6_1.2.0-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxt/libxt-dev_1.2.0-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxtst/libxtst6_1.2.3-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxtst/libxtst-dev_1.2.3-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxxf86vm/libxxf86vm1_1.1.4-1+b2_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxxf86vm/libxxf86vm-dev_1.1.4-1+b2_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libz/libzstd/libzstd1_1.4.8+dfsg-2.1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/l/lcms2/liblcms2-2_2.12~rc1-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/l/lerc/liblerc4_4.0.0+ds-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/l/linux/linux-libc-dev_6.1.12-1~bpo11+1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/l/lz4/liblz4-1_1.9.3-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/l/lzo2/liblzo2-2_2.10-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/md4c/libmd4c0_0.4.7-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/libegl1-mesa_20.3.5-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/libegl1-mesa-dev_20.3.5-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/libgbm1_20.3.5-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/libgbm-dev_20.3.5-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/libgl1-mesa-dev_20.3.5-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/libgl1-mesa-glx_20.3.5-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/libglapi-mesa_20.3.5-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/libwayland-egl1-mesa_20.3.5-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/mesa-common-dev_20.3.5-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/minizip/libminizip1_1.1-8+b1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/minizip/libminizip-dev_1.1-8+b1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mtdev/libmtdev1_1.1.6-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/ncurses/libncurses6_6.2+20201114-2+deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/ncurses/libncurses-dev_6.2+20201114-2+deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/ncurses/libncursesw6_6.2+20201114-2+deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/ncurses/libtinfo6_6.2+20201114-2+deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/nettle/libhogweed6_3.7.3-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/nettle/libnettle8_3.7.3-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/nghttp2/libnghttp2-14_1.43.0-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/nspr/libnspr4_4.29-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/nspr/libnspr4-dev_4.29-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/nss/libnss3_3.61-1+deb11u3_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/nss/libnss3-dev_3.61-1+deb11u3_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/o/openldap/libldap-2.4-2_2.4.59+dfsg-1~bpo11+1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/o/openssl/libssl1.1_1.1.1n-0+deb11u4_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/o/openssl/libssl-dev_1.1.1n-0+deb11u4_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/o/opus/libopus0_1.3.1-0.1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/o/opus/libopus-dev_1.3.1-0.1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/p11-kit/libp11-kit0_0.23.22-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pam/libpam0g_1.4.0-9+deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pam/libpam0g-dev_1.4.0-9+deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pango1.0/libpango-1.0-0_1.46.2-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pango1.0/libpango1.0-dev_1.46.2-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pango1.0/libpangocairo-1.0-0_1.46.2-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pango1.0/libpangoft2-1.0-0_1.46.2-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pango1.0/libpangoxft-1.0-0_1.46.2-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pangox-compat/libpangox-1.0-0_0.0.2-5.1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pciutils/libpci3_3.7.0-5_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pciutils/libpci-dev_3.7.0-5_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre2/libpcre2-16-0_10.36-2+deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre2/libpcre2-32-0_10.36-2+deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre2/libpcre2-8-0_10.36-2+deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre2/libpcre2-dev_10.36-2+deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre2/libpcre2-posix2_10.36-2+deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre3/libpcre16-3_8.39-13_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre3/libpcre32-3_8.39-13_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre3/libpcre3_8.39-13_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre3/libpcre3-dev_8.39-13_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre3/libpcrecpp0v5_8.39-13_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pipewire/libpipewire-0.3-0_0.3.65-2~bpo11+1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pipewire/libpipewire-0.3-dev_0.3.65-2~bpo11+1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pipewire/libspa-0.2-dev_0.3.65-2~bpo11+1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pixman/libpixman-1-0_0.40.0-1.1~deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pixman/libpixman-1-dev_0.40.0-1.1~deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pulseaudio/libpulse0_14.2-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pulseaudio/libpulse-dev_14.2-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pulseaudio/libpulse-mainloop-glib0_14.2-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6concurrent6_6.4.2+dfsg-10~bpo11+1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6core6_6.4.2+dfsg-10~bpo11+1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6dbus6_6.4.2+dfsg-10~bpo11+1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6gui6_6.4.2+dfsg-10~bpo11+1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6network6_6.4.2+dfsg-10~bpo11+1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6opengl6_6.4.2+dfsg-10~bpo11+1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6openglwidgets6_6.4.2+dfsg-10~bpo11+1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6printsupport6_6.4.2+dfsg-10~bpo11+1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6sql6_6.4.2+dfsg-10~bpo11+1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6test6_6.4.2+dfsg-10~bpo11+1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6widgets6_6.4.2+dfsg-10~bpo11+1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6xml6_6.4.2+dfsg-10~bpo11+1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/qt6-base-dev_6.4.2+dfsg-10~bpo11+1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/qt6-base-dev-tools_6.4.2+dfsg-10~bpo11+1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5concurrent5_5.15.2+dfsg-9_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5core5a_5.15.2+dfsg-9_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5dbus5_5.15.2+dfsg-9_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5gui5_5.15.2+dfsg-9_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5network5_5.15.2+dfsg-9_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5printsupport5_5.15.2+dfsg-9_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5sql5_5.15.2+dfsg-9_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5test5_5.15.2+dfsg-9_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5widgets5_5.15.2+dfsg-9_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5xml5_5.15.2+dfsg-9_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/qtbase5-dev_5.15.2+dfsg-9_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/qtbase5-dev-tools_5.15.2+dfsg-9_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/r/re2/libre2-9_20210201+dfsg-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/r/re2/libre2-dev_20210201+dfsg-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/r/rtmpdump/librtmp1_2.4+20151223.gitfa8646d.1-2+b2_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/shared-mime-info/shared-mime-info_2.0-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/snappy/libsnappy1v5_1.1.8-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/snappy/libsnappy-dev_1.1.8-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/speech-dispatcher/libspeechd2_0.11.4-2~bpo11+1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/speech-dispatcher/libspeechd-dev_0.11.4-2~bpo11+1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/sqlite3/libsqlite3-0_3.34.1-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/systemd/libsystemd0_252.5-2~bpo11+1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/systemd/libsystemd-dev_252.5-2~bpo11+1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/systemd/libudev1_252.5-2~bpo11+1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/systemd/libudev-dev_252.5-2~bpo11+1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/t/tcp-wrappers/libwrap0_7.6.q-31_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/t/tiff/libtiff5_4.2.0-1+deb11u4_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/t/tiff/libtiff6_4.5.0-6_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/t/tiff/libtiff-dev_4.2.0-1+deb11u4_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/t/tiff/libtiffxx5_4.2.0-1+deb11u4_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/t/tslib/libts0_1.22-1+b1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/u/unbound/libunbound8_1.17.1-2~bpo11+1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/u/util-linux/libblkid1_2.36.1-8+deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/u/util-linux/libblkid-dev_2.36.1-8+deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/u/util-linux/libmount1_2.36.1-8+deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/u/util-linux/libmount-dev_2.36.1-8+deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/u/util-linux/libuuid1_2.36.1-8+deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/u/util-linux/uuid-dev_2.36.1-8+deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/v/vulkan-loader/libvulkan1_1.3.224.0-1~bpo11+1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/v/vulkan-loader/libvulkan-dev_1.3.224.0-1~bpo11+1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wayland/libwayland-bin_1.18.0-2~exp1.1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wayland/libwayland-client0_1.18.0-2~exp1.1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wayland/libwayland-cursor0_1.18.0-2~exp1.1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wayland/libwayland-dev_1.18.0-2~exp1.1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wayland/libwayland-egl1_1.18.0-2~exp1.1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wayland/libwayland-egl-backend-dev_1.18.0-2~exp1.1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wayland/libwayland-server0_1.18.0-2~exp1.1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wayland-protocols/wayland-protocols_1.20-1_all.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xcb-util-image/libxcb-image0_0.4.0-1+b3_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xcb-util-image/libxcb-image0-dev_0.4.0-1+b3_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xcb-util-keysyms/libxcb-keysyms1_0.4.0-1+b2_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xcb-util/libxcb-util1_0.4.0-1+b1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xcb-util/libxcb-util-dev_0.4.0-1+b1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xcb-util-renderutil/libxcb-render-util0_0.3.9-1+b1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xcb-util-renderutil/libxcb-render-util0-dev_0.3.9-1+b1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xcb-util-wm/libxcb-icccm4_0.4.1-1.1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xft/libxft2_2.3.2-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xft/libxft-dev_2.3.2-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xorgproto/x11proto-dev_2020.1-1_all.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xz-utils/liblzma5_5.2.5-2.1~deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/z/zlib/zlib1g_1.2.11.dfsg-2+deb11u2_mipsel.deb +https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/z/zlib/zlib1g-dev_1.2.11.dfsg-2+deb11u2_mipsel.deb diff --git a/build/linux/sysroot_scripts/generated_package_lists/sid.amd64 b/build/linux/sysroot_scripts/generated_package_lists/sid.amd64 deleted file mode 100644 index c7889a7..0000000 --- a/build/linux/sysroot_scripts/generated_package_lists/sid.amd64 +++ /dev/null @@ -1,378 +0,0 @@ -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/a/alsa-lib/libasound2_1.2.5.1-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/a/alsa-lib/libasound2-dev_1.2.5.1-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/a/atk1.0/libatk1.0-0_2.36.0-2_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/a/atk1.0/libatk1.0-dev_2.36.0-2_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/a/at-spi2-atk/libatk-bridge2.0-0_2.38.0-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/a/at-spi2-atk/libatk-bridge2.0-dev_2.38.0-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/a/at-spi2-core/libatspi2.0-0_2.40.3-3_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/a/at-spi2-core/libatspi2.0-dev_2.40.3-3_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/a/attr/libattr1_2.4.48-6_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/a/audit/libaudit1_3.0.5-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/a/avahi/libavahi-client3_0.8-5_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/a/avahi/libavahi-common3_0.8-5_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/b/bluez/libbluetooth3_5.55-3.1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/b/bluez/libbluetooth-dev_5.55-3.1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/b/brotli/libbrotli1_1.0.9-2+b2_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/b/brotli/libbrotli-dev_1.0.9-2+b2_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/c/cairo/libcairo2_1.16.0-5_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/c/cairo/libcairo2-dev_1.16.0-5_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/c/cairo/libcairo-gobject2_1.16.0-5_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/c/cairo/libcairo-script-interpreter2_1.16.0-5_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/c/colord/libcolord2_1.4.5-3_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/c/cups/libcups2_2.3.3op2-3+deb11u1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/c/cups/libcups2-dev_2.3.3op2-3+deb11u1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/c/cups/libcupsimage2_2.3.3op2-3+deb11u1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/c/cups/libcupsimage2-dev_2.3.3op2-3+deb11u1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/c/curl/libcurl3-gnutls_7.74.0-1.3+b1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/c/curl/libcurl4-gnutls-dev_7.74.0-1.3+b1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/c/cyrus-sasl2/libsasl2-2_2.1.27+dfsg-2.1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/d/db5.3/libdb5.3_5.3.28+dfsg1-0.8_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/d/dbus-glib/libdbus-glib-1-2_0.112-2_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/d/dbus/libdbus-1-3_1.12.20-2_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/d/dbus/libdbus-1-dev_1.12.20-2_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/e/e2fsprogs/comerr-dev_2.1-1.46.2-2_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/e/e2fsprogs/libcom-err2_1.46.2-2_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/e/elfutils/libelf1_0.185-2_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/e/elfutils/libelf-dev_0.185-2_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/e/expat/libexpat1_2.2.10-2_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/e/expat/libexpat1-dev_2.2.10-2_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/f/flac/libflac8_1.3.3-2_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/f/flac/libflac-dev_1.3.3-2_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/f/fontconfig/libfontconfig1_2.13.1-4.2_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/f/fontconfig/libfontconfig-dev_2.13.1-4.2_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/f/freetype/libfreetype6_2.10.4+dfsg-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/f/freetype/libfreetype-dev_2.10.4+dfsg-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/f/fribidi/libfribidi0_1.0.8-2_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/f/fribidi/libfribidi-dev_1.0.8-2_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gcc-10/libgcc-10-dev_10.2.1-6_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gcc-10/libstdc++-10-dev_10.2.1-6_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gcc-11/libasan6_11.2.0-2_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gcc-11/libatomic1_11.2.0-2_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gcc-11/libgomp1_11.2.0-2_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gcc-11/libitm1_11.2.0-2_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gcc-11/liblsan0_11.2.0-2_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gcc-11/libquadmath0_11.2.0-2_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gcc-11/libstdc++6_11.2.0-2_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gcc-11/libtsan0_11.2.0-2_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gcc-11/libubsan1_11.2.0-2_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gcc-6/libcilkrts5_6.3.0-18+deb9u1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gcc-6/libgcc1_6.3.0-18+deb9u1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gcc-6/libmpx2_6.3.0-18+deb9u1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gdk-pixbuf/libgdk-pixbuf-2.0-0_2.42.6+dfsg-2_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gdk-pixbuf/libgdk-pixbuf-2.0-dev_2.42.6+dfsg-2_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/glib2.0/libglib2.0-0_2.68.3-2_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/glib2.0/libglib2.0-dev_2.68.3-2_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/glibc/libc6_2.31-16_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/glibc/libc6-dev_2.31-16_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gmp/libgmp10_6.2.1+dfsg-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gnutls28/libgnutls28-dev_3.7.1-5_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gnutls28/libgnutls30_3.7.1-5_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gnutls28/libgnutls-dane0_3.7.1-5_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gnutls28/libgnutls-openssl27_3.7.1-5_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gnutls28/libgnutlsxx28_3.7.1-5_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/graphene/libgraphene-1.0-0_1.10.4+dfsg1-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/graphene/libgraphene-1.0-dev_1.10.4+dfsg1-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/graphite2/libgraphite2-3_1.3.14-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/graphite2/libgraphite2-dev_1.3.14-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gtk+2.0/libgtk2.0-0_2.24.33-2_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gtk+3.0/libgtk-3-0_3.24.30-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gtk+3.0/libgtk-3-dev_3.24.30-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gtk4/libgtk-4-1_4.3.1+ds-2_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gtk4/libgtk-4-1_4.3.1+ds-2_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gtk4/libgtk-4-dev_4.3.1+ds-2_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gtk4/libgtk-4-dev_4.3.1+ds-2_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/h/harfbuzz/libharfbuzz0b_2.7.4-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/h/harfbuzz/libharfbuzz-dev_2.7.4-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/h/harfbuzz/libharfbuzz-gobject0_2.7.4-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/h/harfbuzz/libharfbuzz-icu0_2.7.4-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/i/icu-le-hb/libicu-le-hb0_1.0.3+git180724-3+b2_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/i/icu/libicu67_67.1-7_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/j/jbigkit/libjbig0_2.1-3.1+b2_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/j/jbigkit/libjbig-dev_2.1-3.1+b2_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/j/json-glib/libjson-glib-1.0-0_1.6.2-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/k/keyutils/libkeyutils1_1.6.1-2_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/k/krb5/krb5-multidev_1.18.3-6_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/k/krb5/libgssapi-krb5-2_1.18.3-6_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/k/krb5/libgssrpc4_1.18.3-6_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/k/krb5/libk5crypto3_1.18.3-6_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/k/krb5/libkadm5clnt-mit12_1.18.3-6_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/k/krb5/libkadm5srv-mit12_1.18.3-6_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/k/krb5/libkdb5-10_1.18.3-6_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/k/krb5/libkrb5-3_1.18.3-6_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/k/krb5/libkrb5-dev_1.18.3-6_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/k/krb5/libkrb5support0_1.18.3-6_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/liba/libappindicator/libappindicator1_0.4.92-8_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/liba/libappindicator/libappindicator3-1_0.4.92-8_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/liba/libappindicator/libappindicator3-dev_0.4.92-8_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/liba/libappindicator/libappindicator-dev_0.4.92-8_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/liba/libasyncns/libasyncns0_0.8-6+b2_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libb/libbsd/libbsd0_0.11.3-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libc/libcap2/libcap2_2.44-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libc/libcap2/libcap-dev_2.44-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libc/libcap-ng/libcap-ng0_0.7.9-2.2+b1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libc/libcloudproviders/libcloudproviders0_0.3.0-3_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libd/libdatrie/libdatrie1_0.2.13-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libd/libdatrie/libdatrie-dev_0.2.13-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libd/libdbusmenu/libdbusmenu-glib4_18.10.20180917~bzr492+repack1-2+b1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libd/libdbusmenu/libdbusmenu-glib-dev_18.10.20180917~bzr492+repack1-2+b1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libd/libdbusmenu/libdbusmenu-gtk3-4_18.10.20180917~bzr492+repack1-2+b1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libd/libdbusmenu/libdbusmenu-gtk4_18.10.20180917~bzr492+repack1-2+b1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libd/libdeflate/libdeflate0_1.7-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libd/libdeflate/libdeflate-dev_1.7-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libd/libdrm/libdrm2_2.4.104-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libd/libdrm/libdrm-amdgpu1_2.4.104-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libd/libdrm/libdrm-dev_2.4.104-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libd/libdrm/libdrm-intel1_2.4.104-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libd/libdrm/libdrm-nouveau2_2.4.104-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libd/libdrm/libdrm-radeon1_2.4.104-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libe/libepoxy/libepoxy0_1.5.8-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libe/libepoxy/libepoxy-dev_1.5.8-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libe/libevdev/libevdev2_1.11.0+dfsg-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libe/libevdev/libevdev-dev_1.11.0+dfsg-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libe/libevent/libevent-2.1-7_2.1.12-stable-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libf/libffi/libffi6_3.2.1-9_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libf/libffi/libffi7_3.3-6_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libf/libffi/libffi8_3.4.2-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libf/libffi/libffi-dev_3.3-6_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libgcrypt20/libgcrypt20_1.8.7-6_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libgcrypt20/libgcrypt20-dev_1.8.7-6_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libglvnd/libegl1_1.3.2-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libglvnd/libegl-dev_1.3.2-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libglvnd/libgl1_1.3.2-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libglvnd/libgl-dev_1.3.2-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libglvnd/libgles1_1.3.2-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libglvnd/libgles2_1.3.2-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libglvnd/libgles-dev_1.3.2-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libglvnd/libglvnd0_1.3.2-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libglvnd/libglvnd-dev_1.3.2-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libglvnd/libglx0_1.3.2-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libglvnd/libglx-dev_1.3.2-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libglvnd/libopengl0_1.3.2-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libgnome-keyring/libgnome-keyring0_3.12.0-1+b2_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libgnome-keyring/libgnome-keyring-dev_3.12.0-1+b2_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libgpg-error/libgpg-error0_1.38-2_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libgpg-error/libgpg-error-dev_1.38-2_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libgudev/libgudev-1.0-0_234-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libi/libice/libice6_1.0.10-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libi/libidl/libidl-2-0_0.8.14-4+b12_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libi/libidn2/libidn2-0_2.3.2-2_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libi/libidn/libidn11_1.33-3_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libi/libindicator/libindicator3-7_0.5.0-4_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libi/libindicator/libindicator7_0.5.0-4_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libi/libinput/libinput10_1.16.4-3_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libi/libinput/libinput-dev_1.16.4-3_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libj/libjpeg-turbo/libjpeg62-turbo_2.0.6-4_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libj/libjpeg-turbo/libjpeg62-turbo-dev_2.0.6-4_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libj/libjsoncpp/libjsoncpp24_1.9.4-4_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libj/libjsoncpp/libjsoncpp-dev_1.9.4-4_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libm/libmd/libmd0_1.0.3-3_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libn/libnsl/libnsl2_1.3.0-2_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libn/libnss-db/libnss-db_2.2.3pre1-6+b10_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libo/libogg/libogg0_1.3.4-0.1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libo/libogg/libogg-dev_1.3.4-0.1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libp/libpciaccess/libpciaccess0_0.16-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libp/libpng1.6/libpng16-16_1.6.37-3_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libp/libpng1.6/libpng-dev_1.6.37-3_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libp/libpsl/libpsl5_0.21.0-1.2_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libp/libpthread-stubs/libpthread-stubs0-dev_0.4-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libr/librest/librest-0.7-0_0.8.1-1.1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libs/libselinux/libselinux1_3.1-3_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libs/libselinux/libselinux1-dev_3.1-3_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libs/libsepol/libsepol1_3.1-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libs/libsepol/libsepol1-dev_3.1-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libs/libsm/libsm6_1.2.3-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libs/libsndfile/libsndfile1_1.0.31-2_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libs/libsoup2.4/libsoup2.4-1_2.72.0-4_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libs/libsoup2.4/libsoup-gnome2.4-1_2.72.0-4_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libs/libssh2/libssh2-1_1.9.0-3_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libt/libtasn1-6/libtasn1-6_4.16.0-2_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libt/libthai/libthai0_0.1.28-4_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libt/libthai/libthai-dev_0.1.28-4_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libt/libtirpc/libtirpc3_1.3.2-2_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libt/libtool/libltdl7_2.4.6-15_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libu/libunistring/libunistring2_0.9.10-6_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libu/libutempter/libutempter0_1.2.1-2_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libu/libutempter/libutempter-dev_1.2.1-2_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libv/libva/libva2_2.12.0-2_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libv/libva/libva-dev_2.12.0-2_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libv/libva/libva-drm2_2.12.0-2_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libv/libva/libva-glx2_2.12.0-2_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libv/libva/libva-wayland2_2.12.0-2_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libv/libva/libva-x11-2_2.12.0-2_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libv/libvorbis/libvorbis0a_1.3.7-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libv/libvorbis/libvorbisenc2_1.3.7-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libw/libwacom/libwacom2_1.8-2_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libw/libwebp/libwebp6_0.6.1-2.1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libw/libwebp/libwebpdemux2_0.6.1-2.1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libw/libwebp/libwebp-dev_0.6.1-2.1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libw/libwebp/libwebpmux3_0.6.1-2.1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libx11/libx11-6_1.7.2-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libx11/libx11-dev_1.7.2-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libx11/libx11-xcb1_1.7.2-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libx11/libx11-xcb-dev_1.7.2-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxau/libxau6_1.0.9-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxau/libxau-dev_1.0.9-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb1_1.14-3_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb1-dev_1.14-3_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb-dri2-0_1.14-3_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb-dri2-0-dev_1.14-3_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb-dri3-0_1.14-3_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb-dri3-dev_1.14-3_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb-glx0_1.14-3_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb-glx0-dev_1.14-3_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb-present0_1.14-3_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb-present-dev_1.14-3_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb-render0_1.14-3_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb-render0-dev_1.14-3_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb-shm0_1.14-3_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb-shm0-dev_1.14-3_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb-sync1_1.14-3_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb-xfixes0_1.14-3_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcomposite/libxcomposite1_0.4.5-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcomposite/libxcomposite-dev_0.4.5-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcursor/libxcursor1_1.2.0-2_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcursor/libxcursor-dev_1.2.0-2_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxdamage/libxdamage1_1.1.5-2_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxdamage/libxdamage-dev_1.1.5-2_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxdmcp/libxdmcp6_1.1.2-3_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxdmcp/libxdmcp-dev_1.1.2-3_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxext/libxext6_1.3.3-1.1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxext/libxext-dev_1.3.3-1.1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxfixes/libxfixes3_5.0.3-2_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxfixes/libxfixes-dev_5.0.3-2_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxi/libxi6_1.7.10-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxi/libxi-dev_1.7.10-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxinerama/libxinerama1_1.1.4-2_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxinerama/libxinerama-dev_1.1.4-2_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxkbcommon/libxkbcommon0_1.0.3-2_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxkbcommon/libxkbcommon-dev_1.0.3-2_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxml2/libxml2_2.9.10+dfsg-6.7_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxml2/libxml2-dev_2.9.10+dfsg-6.7_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxrandr/libxrandr2_1.5.1-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxrandr/libxrandr-dev_1.5.1-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxrender/libxrender1_0.9.10-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxrender/libxrender-dev_0.9.10-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxshmfence/libxshmfence1_1.3-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxshmfence/libxshmfence-dev_1.3-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxslt/libxslt1.1_1.1.34-4_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxslt/libxslt1-dev_1.1.34-4_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxss/libxss1_1.2.3-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxss/libxss-dev_1.2.3-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxt/libxt6_1.2.0-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxt/libxt-dev_1.2.0-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxtst/libxtst6_1.2.3-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxtst/libxtst-dev_1.2.3-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxxf86vm/libxxf86vm1_1.1.4-1+b2_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxxf86vm/libxxf86vm-dev_1.1.4-1+b2_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libz/libzstd/libzstd1_1.4.8+dfsg-2.1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/l/lcms2/liblcms2-2_2.12~rc1-2_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/l/linux/linux-libc-dev_5.10.46-4_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/l/lz4/liblz4-1_1.9.3-2_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/l/lzo2/liblzo2-2_2.10-2_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/m/mesa/libegl1-mesa_20.3.5-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/m/mesa/libegl1-mesa-dev_20.3.5-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/m/mesa/libgbm1_20.3.5-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/m/mesa/libgbm-dev_20.3.5-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/m/mesa/libgl1-mesa-dev_20.3.5-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/m/mesa/libgl1-mesa-glx_20.3.5-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/m/mesa/libglapi-mesa_20.3.5-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/m/mesa/libwayland-egl1-mesa_20.3.5-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/m/mesa/mesa-common-dev_20.3.5-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/m/minizip/libminizip1_1.1-8+b1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/m/minizip/libminizip-dev_1.1-8+b1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/m/mtdev/libmtdev1_1.1.6-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/n/ncurses/libncurses6_6.2+20201114-2_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/n/ncurses/libncurses-dev_6.2+20201114-2_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/n/ncurses/libncursesw6_6.2+20201114-2_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/n/ncurses/libtinfo6_6.2+20201114-2_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/n/nettle/libhogweed6_3.7.3-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/n/nettle/libnettle8_3.7.3-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/n/nghttp2/libnghttp2-14_1.43.0-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/n/nspr/libnspr4_4.32-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/n/nspr/libnspr4-dev_4.32-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/n/nss/libnss3_3.68-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/n/nss/libnss3-dev_3.68-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/o/openldap/libldap-2.4-2_2.4.57+dfsg-3_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/o/openssl/libssl1.1_1.1.1k-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/o/openssl/libssl-dev_1.1.1k-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/o/opus/libopus0_1.3.1-0.1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/o/opus/libopus-dev_1.3.1-0.1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/p11-kit/libp11-kit0_0.23.22-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pam/libpam0g_1.4.0-9_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pam/libpam0g-dev_1.4.0-9_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pango1.0/libpango-1.0-0_1.46.2-3_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pango1.0/libpango1.0-dev_1.46.2-3_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pango1.0/libpangocairo-1.0-0_1.46.2-3_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pango1.0/libpangoft2-1.0-0_1.46.2-3_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pango1.0/libpangoxft-1.0-0_1.46.2-3_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pangox-compat/libpangox-1.0-0_0.0.2-5.1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pciutils/libpci3_3.7.0-5_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pciutils/libpci-dev_3.7.0-5_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pcre2/libpcre2-16-0_10.36-2_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pcre2/libpcre2-32-0_10.36-2_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pcre2/libpcre2-8-0_10.36-2_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pcre2/libpcre2-dev_10.36-2_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pcre2/libpcre2-posix0_10.22-3_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pcre2/libpcre2-posix2_10.36-2_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pcre3/libpcre16-3_8.39-13_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pcre3/libpcre32-3_8.39-13_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pcre3/libpcre3_8.39-13_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pcre3/libpcre3-dev_8.39-13_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pcre3/libpcrecpp0v5_8.39-13_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pipewire/libpipewire-0.3-0_0.3.33-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pipewire/libpipewire-0.3-dev_0.3.33-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pipewire/libspa-0.2-dev_0.3.33-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pixman/libpixman-1-0_0.40.0-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pixman/libpixman-1-dev_0.40.0-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pulseaudio/libpulse0_14.2-2_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pulseaudio/libpulse-dev_14.2-2_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pulseaudio/libpulse-mainloop-glib0_14.2-2_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/r/re2/libre2-9_20210801+dfsg-2_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/r/re2/libre2-dev_20210801+dfsg-2_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/r/rtmpdump/librtmp1_2.4+20151223.gitfa8646d.1-2+b2_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/s/shared-mime-info/shared-mime-info_2.0-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/s/snappy/libsnappy1v5_1.1.8-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/s/snappy/libsnappy-dev_1.1.8-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/s/speech-dispatcher/libspeechd2_0.10.2-2_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/s/speech-dispatcher/libspeechd-dev_0.10.2-2_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/s/sqlite3/libsqlite3-0_3.34.1-3_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/s/systemd/libsystemd0_247.9-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/s/systemd/libudev1_247.9-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/s/systemd/libudev-dev_247.9-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/t/tcp-wrappers/libwrap0_7.6.q-31_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/t/tiff/libtiff5_4.2.0-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/t/tiff/libtiff-dev_4.2.0-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/t/tiff/libtiffxx5_4.2.0-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/u/unbound/libunbound8_1.13.1-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/u/util-linux/libblkid1_2.36.1-8_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/u/util-linux/libblkid-dev_2.36.1-8_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/u/util-linux/libmount1_2.36.1-8_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/u/util-linux/libmount-dev_2.36.1-8_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/u/util-linux/libuuid1_2.36.1-8_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/u/util-linux/uuid-dev_2.36.1-8_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/v/valgrind/valgrind_3.16.1-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/v/vulkan-loader/libvulkan1_1.2.162.0-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/v/vulkan-loader/libvulkan-dev_1.2.162.0-1_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/w/wayland/libwayland-client0_1.19.0-2_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/w/wayland/libwayland-cursor0_1.19.0-2_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/w/wayland/libwayland-dev_1.19.0-2_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/w/wayland/libwayland-egl1_1.19.0-2_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/w/wayland/libwayland-server0_1.19.0-2_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/w/wayland-protocols/wayland-protocols_1.20-1_all.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/x/x11proto-composite/x11proto-composite-dev_0.4.2-2_all.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/x/x11proto-damage/x11proto-damage-dev_1.2.1-2_all.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/x/x11proto-fixes/x11proto-fixes-dev_5.0-2_all.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/x/xft/libxft2_2.3.2-2_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/x/xft/libxft-dev_2.3.2-2_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/x/xorgproto/x11proto-dev_2020.1-1_all.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/x/xorgproto/x11proto-input-dev_2020.1-1_all.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/x/xorgproto/x11proto-kb-dev_2020.1-1_all.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/x/xorgproto/x11proto-randr-dev_2020.1-1_all.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/x/xorgproto/x11proto-record-dev_2020.1-1_all.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/x/xorgproto/x11proto-render-dev_2020.1-1_all.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/x/xorgproto/x11proto-scrnsaver-dev_2020.1-1_all.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/x/xorgproto/x11proto-xext-dev_2020.1-1_all.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/x/xorgproto/x11proto-xinerama-dev_2020.1-1_all.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/x/xz-utils/liblzma5_5.2.5-2_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/z/zlib/zlib1g_1.2.11.dfsg-2_amd64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/z/zlib/zlib1g-dev_1.2.11.dfsg-2_amd64.deb diff --git a/build/linux/sysroot_scripts/generated_package_lists/sid.arm b/build/linux/sysroot_scripts/generated_package_lists/sid.arm deleted file mode 100644 index a268bc5..0000000 --- a/build/linux/sysroot_scripts/generated_package_lists/sid.arm +++ /dev/null @@ -1,374 +0,0 @@ -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/a/alsa-lib/libasound2_1.2.5.1-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/a/alsa-lib/libasound2-dev_1.2.5.1-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/a/atk1.0/libatk1.0-0_2.36.0-2_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/a/atk1.0/libatk1.0-dev_2.36.0-2_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/a/at-spi2-atk/libatk-bridge2.0-0_2.38.0-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/a/at-spi2-atk/libatk-bridge2.0-dev_2.38.0-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/a/at-spi2-core/libatspi2.0-0_2.40.3-3_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/a/at-spi2-core/libatspi2.0-dev_2.40.3-3_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/a/attr/libattr1_2.4.48-6_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/a/audit/libaudit1_3.0.5-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/a/avahi/libavahi-client3_0.8-5_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/a/avahi/libavahi-common3_0.8-5_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/b/bluez/libbluetooth3_5.55-3.1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/b/bluez/libbluetooth-dev_5.55-3.1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/b/brotli/libbrotli1_1.0.9-2+b2_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/b/brotli/libbrotli-dev_1.0.9-2+b2_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/c/cairo/libcairo2_1.16.0-5_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/c/cairo/libcairo2-dev_1.16.0-5_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/c/cairo/libcairo-gobject2_1.16.0-5_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/c/cairo/libcairo-script-interpreter2_1.16.0-5_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/c/colord/libcolord2_1.4.5-3_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/c/cups/libcups2_2.3.3op2-3+deb11u1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/c/cups/libcups2-dev_2.3.3op2-3+deb11u1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/c/cups/libcupsimage2_2.3.3op2-3+deb11u1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/c/cups/libcupsimage2-dev_2.3.3op2-3+deb11u1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/c/curl/libcurl3-gnutls_7.74.0-1.3+b1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/c/curl/libcurl4-gnutls-dev_7.74.0-1.3+b1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/c/cyrus-sasl2/libsasl2-2_2.1.27+dfsg-2.1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/d/db5.3/libdb5.3_5.3.28+dfsg1-0.8_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/d/dbus-glib/libdbus-glib-1-2_0.112-2_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/d/dbus/libdbus-1-3_1.12.20-2_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/d/dbus/libdbus-1-dev_1.12.20-2_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/e/e2fsprogs/comerr-dev_2.1-1.46.2-2_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/e/e2fsprogs/libcom-err2_1.46.2-2_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/e/elfutils/libelf1_0.185-2_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/e/elfutils/libelf-dev_0.185-2_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/e/expat/libexpat1_2.2.10-2_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/e/expat/libexpat1-dev_2.2.10-2_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/f/flac/libflac8_1.3.3-2_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/f/flac/libflac-dev_1.3.3-2_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/f/fontconfig/libfontconfig1_2.13.1-4.2_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/f/fontconfig/libfontconfig-dev_2.13.1-4.2_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/f/freetype/libfreetype6_2.10.4+dfsg-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/f/freetype/libfreetype-dev_2.10.4+dfsg-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/f/fribidi/libfribidi0_1.0.8-2_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/f/fribidi/libfribidi-dev_1.0.8-2_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gcc-10/libgcc-10-dev_10.2.1-6_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gcc-10/libstdc++-10-dev_10.2.1-6_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gcc-11/libasan6_11.2.0-2_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gcc-11/libatomic1_11.2.0-2_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gcc-11/libgomp1_11.2.0-2_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gcc-11/libstdc++6_11.2.0-2_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gcc-11/libubsan1_11.2.0-2_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gcc-6/libgcc1_6.3.0-18+deb9u1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gdk-pixbuf/libgdk-pixbuf-2.0-0_2.42.6+dfsg-2_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gdk-pixbuf/libgdk-pixbuf-2.0-dev_2.42.6+dfsg-2_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/glib2.0/libglib2.0-0_2.68.3-2_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/glib2.0/libglib2.0-dev_2.68.3-2_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/glibc/libc6_2.31-16_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/glibc/libc6-dev_2.31-16_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gmp/libgmp10_6.2.1+dfsg-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gnutls28/libgnutls28-dev_3.7.1-5_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gnutls28/libgnutls30_3.7.1-5_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gnutls28/libgnutls-dane0_3.7.1-5_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gnutls28/libgnutls-openssl27_3.7.1-5_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gnutls28/libgnutlsxx28_3.7.1-5_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/graphene/libgraphene-1.0-0_1.10.4+dfsg1-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/graphene/libgraphene-1.0-dev_1.10.4+dfsg1-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/graphite2/libgraphite2-3_1.3.14-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/graphite2/libgraphite2-dev_1.3.14-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gtk+2.0/libgtk2.0-0_2.24.33-2_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gtk+3.0/libgtk-3-0_3.24.30-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gtk+3.0/libgtk-3-dev_3.24.30-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gtk4/libgtk-4-1_4.3.1+ds-2_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gtk4/libgtk-4-dev_4.3.1+ds-2_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/h/harfbuzz/libharfbuzz0b_2.7.4-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/h/harfbuzz/libharfbuzz-dev_2.7.4-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/h/harfbuzz/libharfbuzz-gobject0_2.7.4-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/h/harfbuzz/libharfbuzz-icu0_2.7.4-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/i/icu-le-hb/libicu-le-hb0_1.0.3+git180724-3+b2_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/i/icu/libicu67_67.1-7_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/j/jbigkit/libjbig0_2.1-3.1+b2_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/j/jbigkit/libjbig-dev_2.1-3.1+b2_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/j/json-glib/libjson-glib-1.0-0_1.6.2-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/k/keyutils/libkeyutils1_1.6.1-2_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/k/krb5/krb5-multidev_1.18.3-6_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/k/krb5/libgssapi-krb5-2_1.18.3-6_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/k/krb5/libgssrpc4_1.18.3-6_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/k/krb5/libk5crypto3_1.18.3-6_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/k/krb5/libkadm5clnt-mit12_1.18.3-6_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/k/krb5/libkadm5srv-mit12_1.18.3-6_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/k/krb5/libkdb5-10_1.18.3-6_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/k/krb5/libkrb5-3_1.18.3-6_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/k/krb5/libkrb5-dev_1.18.3-6_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/k/krb5/libkrb5support0_1.18.3-6_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/liba/libappindicator/libappindicator1_0.4.92-8_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/liba/libappindicator/libappindicator3-1_0.4.92-8_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/liba/libappindicator/libappindicator3-dev_0.4.92-8_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/liba/libappindicator/libappindicator-dev_0.4.92-8_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/liba/libasyncns/libasyncns0_0.8-6+b2_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libb/libbsd/libbsd0_0.11.3-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libc/libcap2/libcap2_2.44-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libc/libcap2/libcap-dev_2.44-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libc/libcap-ng/libcap-ng0_0.7.9-2.2+b1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libc/libcloudproviders/libcloudproviders0_0.3.0-3_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libd/libdatrie/libdatrie1_0.2.13-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libd/libdatrie/libdatrie-dev_0.2.13-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libd/libdbusmenu/libdbusmenu-glib4_18.10.20180917~bzr492+repack1-2+b1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libd/libdbusmenu/libdbusmenu-glib-dev_18.10.20180917~bzr492+repack1-2+b1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libd/libdbusmenu/libdbusmenu-gtk3-4_18.10.20180917~bzr492+repack1-2+b1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libd/libdbusmenu/libdbusmenu-gtk4_18.10.20180917~bzr492+repack1-2+b1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libd/libdeflate/libdeflate0_1.7-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libd/libdeflate/libdeflate-dev_1.7-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libd/libdrm/libdrm2_2.4.104-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libd/libdrm/libdrm-amdgpu1_2.4.104-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libd/libdrm/libdrm-dev_2.4.104-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libd/libdrm/libdrm-etnaviv1_2.4.104-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libd/libdrm/libdrm-exynos1_2.4.104-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libd/libdrm/libdrm-freedreno1_2.4.104-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libd/libdrm/libdrm-nouveau2_2.4.104-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libd/libdrm/libdrm-omap1_2.4.104-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libd/libdrm/libdrm-radeon1_2.4.104-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libd/libdrm/libdrm-tegra0_2.4.104-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libe/libepoxy/libepoxy0_1.5.8-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libe/libepoxy/libepoxy-dev_1.5.8-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libe/libevdev/libevdev2_1.11.0+dfsg-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libe/libevdev/libevdev-dev_1.11.0+dfsg-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libe/libevent/libevent-2.1-7_2.1.12-stable-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libf/libffi/libffi6_3.2.1-9_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libf/libffi/libffi7_3.3-6_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libf/libffi/libffi8_3.4.2-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libf/libffi/libffi-dev_3.3-6_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libgcrypt20/libgcrypt20_1.8.7-6_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libgcrypt20/libgcrypt20-dev_1.8.7-6_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libglvnd/libegl1_1.3.2-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libglvnd/libegl-dev_1.3.2-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libglvnd/libgl1_1.3.2-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libglvnd/libgl-dev_1.3.2-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libglvnd/libgles1_1.3.2-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libglvnd/libgles2_1.3.2-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libglvnd/libgles-dev_1.3.2-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libglvnd/libglvnd0_1.3.2-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libglvnd/libglvnd-dev_1.3.2-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libglvnd/libglx0_1.3.2-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libglvnd/libglx-dev_1.3.2-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libglvnd/libopengl0_1.3.2-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libgnome-keyring/libgnome-keyring0_3.12.0-1+b2_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libgnome-keyring/libgnome-keyring-dev_3.12.0-1+b2_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libgpg-error/libgpg-error0_1.38-2_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libgpg-error/libgpg-error-dev_1.38-2_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libgudev/libgudev-1.0-0_234-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libi/libice/libice6_1.0.10-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libi/libidl/libidl-2-0_0.8.14-4+b12_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libi/libidn2/libidn2-0_2.3.2-2_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libi/libidn/libidn11_1.33-3_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libi/libindicator/libindicator3-7_0.5.0-4_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libi/libindicator/libindicator7_0.5.0-4_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libi/libinput/libinput10_1.16.4-3_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libi/libinput/libinput-dev_1.16.4-3_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libj/libjpeg-turbo/libjpeg62-turbo_2.0.6-4_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libj/libjpeg-turbo/libjpeg62-turbo-dev_2.0.6-4_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libj/libjsoncpp/libjsoncpp24_1.9.4-4_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libj/libjsoncpp/libjsoncpp-dev_1.9.4-4_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libm/libmd/libmd0_1.0.3-3_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libn/libnsl/libnsl2_1.3.0-2_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libn/libnss-db/libnss-db_2.2.3pre1-6+b10_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libo/libogg/libogg0_1.3.4-0.1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libo/libogg/libogg-dev_1.3.4-0.1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libp/libpciaccess/libpciaccess0_0.16-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libp/libpng1.6/libpng16-16_1.6.37-3_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libp/libpng1.6/libpng-dev_1.6.37-3_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libp/libpsl/libpsl5_0.21.0-1.2_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libp/libpthread-stubs/libpthread-stubs0-dev_0.4-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libr/librest/librest-0.7-0_0.8.1-1.1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libs/libselinux/libselinux1_3.1-3_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libs/libselinux/libselinux1-dev_3.1-3_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libs/libsepol/libsepol1_3.1-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libs/libsepol/libsepol1-dev_3.1-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libs/libsm/libsm6_1.2.3-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libs/libsndfile/libsndfile1_1.0.31-2_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libs/libsoup2.4/libsoup2.4-1_2.72.0-4_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libs/libsoup2.4/libsoup-gnome2.4-1_2.72.0-4_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libs/libssh2/libssh2-1_1.9.0-3_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libt/libtasn1-6/libtasn1-6_4.16.0-2_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libt/libthai/libthai0_0.1.28-4_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libt/libthai/libthai-dev_0.1.28-4_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libt/libtirpc/libtirpc3_1.3.2-2_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libt/libtool/libltdl7_2.4.6-15_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libu/libunistring/libunistring2_0.9.10-6_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libu/libutempter/libutempter0_1.2.1-2_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libu/libutempter/libutempter-dev_1.2.1-2_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libv/libva/libva2_2.12.0-2_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libv/libva/libva-dev_2.12.0-2_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libv/libva/libva-drm2_2.12.0-2_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libv/libva/libva-glx2_2.12.0-2_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libv/libva/libva-wayland2_2.12.0-2_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libv/libva/libva-x11-2_2.12.0-2_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libv/libvorbis/libvorbis0a_1.3.7-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libv/libvorbis/libvorbisenc2_1.3.7-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libw/libwacom/libwacom2_1.8-2_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libw/libwebp/libwebp6_0.6.1-2.1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libw/libwebp/libwebpdemux2_0.6.1-2.1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libw/libwebp/libwebp-dev_0.6.1-2.1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libw/libwebp/libwebpmux3_0.6.1-2.1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libx11/libx11-6_1.7.2-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libx11/libx11-dev_1.7.2-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libx11/libx11-xcb1_1.7.2-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libx11/libx11-xcb-dev_1.7.2-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxau/libxau6_1.0.9-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxau/libxau-dev_1.0.9-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb1_1.14-3_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb1-dev_1.14-3_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb-dri2-0_1.14-3_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb-dri2-0-dev_1.14-3_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb-dri3-0_1.14-3_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb-dri3-dev_1.14-3_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb-glx0_1.14-3_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb-glx0-dev_1.14-3_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb-present0_1.14-3_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb-present-dev_1.14-3_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb-render0_1.14-3_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb-render0-dev_1.14-3_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb-shm0_1.14-3_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb-shm0-dev_1.14-3_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb-sync1_1.14-3_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb-xfixes0_1.14-3_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcomposite/libxcomposite1_0.4.5-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcomposite/libxcomposite-dev_0.4.5-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcursor/libxcursor1_1.2.0-2_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcursor/libxcursor-dev_1.2.0-2_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxdamage/libxdamage1_1.1.5-2_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxdamage/libxdamage-dev_1.1.5-2_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxdmcp/libxdmcp6_1.1.2-3_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxdmcp/libxdmcp-dev_1.1.2-3_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxext/libxext6_1.3.3-1.1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxext/libxext-dev_1.3.3-1.1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxfixes/libxfixes3_5.0.3-2_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxfixes/libxfixes-dev_5.0.3-2_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxi/libxi6_1.7.10-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxi/libxi-dev_1.7.10-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxinerama/libxinerama1_1.1.4-2_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxinerama/libxinerama-dev_1.1.4-2_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxkbcommon/libxkbcommon0_1.0.3-2_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxkbcommon/libxkbcommon-dev_1.0.3-2_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxml2/libxml2_2.9.10+dfsg-6.7_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxml2/libxml2-dev_2.9.10+dfsg-6.7_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxrandr/libxrandr2_1.5.1-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxrandr/libxrandr-dev_1.5.1-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxrender/libxrender1_0.9.10-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxrender/libxrender-dev_0.9.10-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxshmfence/libxshmfence1_1.3-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxshmfence/libxshmfence-dev_1.3-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxslt/libxslt1.1_1.1.34-4_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxslt/libxslt1-dev_1.1.34-4_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxss/libxss1_1.2.3-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxss/libxss-dev_1.2.3-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxt/libxt6_1.2.0-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxt/libxt-dev_1.2.0-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxtst/libxtst6_1.2.3-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxtst/libxtst-dev_1.2.3-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxxf86vm/libxxf86vm1_1.1.4-1+b2_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxxf86vm/libxxf86vm-dev_1.1.4-1+b2_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libz/libzstd/libzstd1_1.4.8+dfsg-2.1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/l/lcms2/liblcms2-2_2.12~rc1-2_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/l/linux/linux-libc-dev_5.10.46-4_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/l/lz4/liblz4-1_1.9.3-2_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/l/lzo2/liblzo2-2_2.10-2_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/m/mesa/libegl1-mesa_20.3.5-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/m/mesa/libegl1-mesa-dev_20.3.5-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/m/mesa/libgbm1_20.3.5-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/m/mesa/libgbm-dev_20.3.5-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/m/mesa/libgl1-mesa-dev_20.3.5-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/m/mesa/libgl1-mesa-glx_20.3.5-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/m/mesa/libglapi-mesa_20.3.5-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/m/mesa/libwayland-egl1-mesa_20.3.5-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/m/mesa/mesa-common-dev_20.3.5-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/m/minizip/libminizip1_1.1-8+b1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/m/minizip/libminizip-dev_1.1-8+b1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/m/mtdev/libmtdev1_1.1.6-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/n/ncurses/libncurses6_6.2+20201114-2_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/n/ncurses/libncurses-dev_6.2+20201114-2_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/n/ncurses/libncursesw6_6.2+20201114-2_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/n/ncurses/libtinfo6_6.2+20201114-2_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/n/nettle/libhogweed6_3.7.3-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/n/nettle/libnettle8_3.7.3-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/n/nghttp2/libnghttp2-14_1.43.0-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/n/nspr/libnspr4_4.32-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/n/nspr/libnspr4-dev_4.32-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/n/nss/libnss3_3.68-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/n/nss/libnss3-dev_3.68-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/o/openldap/libldap-2.4-2_2.4.57+dfsg-3_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/o/openssl/libssl1.1_1.1.1k-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/o/openssl/libssl-dev_1.1.1k-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/o/opus/libopus0_1.3.1-0.1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/o/opus/libopus-dev_1.3.1-0.1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/p11-kit/libp11-kit0_0.23.22-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pam/libpam0g_1.4.0-9_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pam/libpam0g-dev_1.4.0-9_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pango1.0/libpango-1.0-0_1.46.2-3_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pango1.0/libpango1.0-dev_1.46.2-3_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pango1.0/libpangocairo-1.0-0_1.46.2-3_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pango1.0/libpangoft2-1.0-0_1.46.2-3_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pango1.0/libpangoxft-1.0-0_1.46.2-3_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pangox-compat/libpangox-1.0-0_0.0.2-5.1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pciutils/libpci3_3.7.0-5_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pciutils/libpci-dev_3.7.0-5_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pcre2/libpcre2-16-0_10.36-2_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pcre2/libpcre2-32-0_10.36-2_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pcre2/libpcre2-8-0_10.36-2_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pcre2/libpcre2-dev_10.36-2_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pcre2/libpcre2-posix0_10.22-3_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pcre2/libpcre2-posix2_10.36-2_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pcre3/libpcre16-3_8.39-13_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pcre3/libpcre32-3_8.39-13_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pcre3/libpcre3_8.39-13_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pcre3/libpcre3-dev_8.39-13_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pcre3/libpcrecpp0v5_8.39-13_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pipewire/libpipewire-0.3-0_0.3.33-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pipewire/libpipewire-0.3-dev_0.3.33-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pipewire/libspa-0.2-dev_0.3.33-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pixman/libpixman-1-0_0.40.0-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pixman/libpixman-1-dev_0.40.0-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pulseaudio/libpulse0_14.2-2_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pulseaudio/libpulse-dev_14.2-2_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pulseaudio/libpulse-mainloop-glib0_14.2-2_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/r/re2/libre2-9_20210801+dfsg-2_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/r/re2/libre2-dev_20210801+dfsg-2_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/r/rtmpdump/librtmp1_2.4+20151223.gitfa8646d.1-2+b2_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/s/shared-mime-info/shared-mime-info_2.0-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/s/snappy/libsnappy1v5_1.1.8-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/s/snappy/libsnappy-dev_1.1.8-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/s/speech-dispatcher/libspeechd2_0.10.2-2_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/s/speech-dispatcher/libspeechd-dev_0.10.2-2_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/s/sqlite3/libsqlite3-0_3.34.1-3_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/s/systemd/libsystemd0_247.9-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/s/systemd/libudev1_247.9-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/s/systemd/libudev-dev_247.9-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/t/tcp-wrappers/libwrap0_7.6.q-31_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/t/tiff/libtiff5_4.2.0-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/t/tiff/libtiff-dev_4.2.0-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/t/tiff/libtiffxx5_4.2.0-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/u/unbound/libunbound8_1.13.1-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/u/util-linux/libblkid1_2.36.1-8_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/u/util-linux/libblkid-dev_2.36.1-8_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/u/util-linux/libmount1_2.36.1-8_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/u/util-linux/libmount-dev_2.36.1-8_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/u/util-linux/libuuid1_2.36.1-8_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/u/util-linux/uuid-dev_2.36.1-8_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/v/valgrind/valgrind_3.16.1-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/v/vulkan-loader/libvulkan1_1.2.162.0-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/v/vulkan-loader/libvulkan-dev_1.2.162.0-1_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/w/wayland/libwayland-client0_1.19.0-2_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/w/wayland/libwayland-cursor0_1.19.0-2_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/w/wayland/libwayland-dev_1.19.0-2_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/w/wayland/libwayland-egl1_1.19.0-2_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/w/wayland/libwayland-server0_1.19.0-2_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/w/wayland-protocols/wayland-protocols_1.20-1_all.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/x/x11proto-composite/x11proto-composite-dev_0.4.2-2_all.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/x/x11proto-damage/x11proto-damage-dev_1.2.1-2_all.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/x/x11proto-fixes/x11proto-fixes-dev_5.0-2_all.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/x/xft/libxft2_2.3.2-2_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/x/xft/libxft-dev_2.3.2-2_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/x/xorgproto/x11proto-dev_2020.1-1_all.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/x/xorgproto/x11proto-input-dev_2020.1-1_all.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/x/xorgproto/x11proto-kb-dev_2020.1-1_all.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/x/xorgproto/x11proto-randr-dev_2020.1-1_all.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/x/xorgproto/x11proto-record-dev_2020.1-1_all.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/x/xorgproto/x11proto-render-dev_2020.1-1_all.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/x/xorgproto/x11proto-scrnsaver-dev_2020.1-1_all.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/x/xorgproto/x11proto-xext-dev_2020.1-1_all.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/x/xorgproto/x11proto-xinerama-dev_2020.1-1_all.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/x/xz-utils/liblzma5_5.2.5-2_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/z/zlib/zlib1g_1.2.11.dfsg-2_armhf.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/z/zlib/zlib1g-dev_1.2.11.dfsg-2_armhf.deb diff --git a/build/linux/sysroot_scripts/generated_package_lists/sid.arm64 b/build/linux/sysroot_scripts/generated_package_lists/sid.arm64 deleted file mode 100644 index 6e80c1c..0000000 --- a/build/linux/sysroot_scripts/generated_package_lists/sid.arm64 +++ /dev/null @@ -1,377 +0,0 @@ -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/a/alsa-lib/libasound2_1.2.5.1-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/a/alsa-lib/libasound2-dev_1.2.5.1-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/a/atk1.0/libatk1.0-0_2.36.0-2_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/a/atk1.0/libatk1.0-dev_2.36.0-2_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/a/at-spi2-atk/libatk-bridge2.0-0_2.38.0-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/a/at-spi2-atk/libatk-bridge2.0-dev_2.38.0-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/a/at-spi2-core/libatspi2.0-0_2.40.3-3_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/a/at-spi2-core/libatspi2.0-dev_2.40.3-3_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/a/attr/libattr1_2.4.48-6_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/a/audit/libaudit1_3.0.5-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/a/avahi/libavahi-client3_0.8-5_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/a/avahi/libavahi-common3_0.8-5_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/b/bluez/libbluetooth3_5.55-3.1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/b/bluez/libbluetooth-dev_5.55-3.1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/b/brotli/libbrotli1_1.0.9-2+b2_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/b/brotli/libbrotli-dev_1.0.9-2+b2_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/c/cairo/libcairo2_1.16.0-5_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/c/cairo/libcairo2-dev_1.16.0-5_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/c/cairo/libcairo-gobject2_1.16.0-5_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/c/cairo/libcairo-script-interpreter2_1.16.0-5_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/c/colord/libcolord2_1.4.5-3_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/c/cups/libcups2_2.3.3op2-3+deb11u1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/c/cups/libcups2-dev_2.3.3op2-3+deb11u1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/c/cups/libcupsimage2_2.3.3op2-3+deb11u1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/c/cups/libcupsimage2-dev_2.3.3op2-3+deb11u1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/c/curl/libcurl3-gnutls_7.74.0-1.3+b1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/c/curl/libcurl4-gnutls-dev_7.74.0-1.3+b1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/c/cyrus-sasl2/libsasl2-2_2.1.27+dfsg-2.1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/d/db5.3/libdb5.3_5.3.28+dfsg1-0.8_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/d/dbus-glib/libdbus-glib-1-2_0.112-2_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/d/dbus/libdbus-1-3_1.12.20-2_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/d/dbus/libdbus-1-dev_1.12.20-2_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/e/e2fsprogs/comerr-dev_2.1-1.46.2-2_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/e/e2fsprogs/libcom-err2_1.46.2-2_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/e/elfutils/libelf1_0.185-2_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/e/elfutils/libelf-dev_0.185-2_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/e/expat/libexpat1_2.2.10-2_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/e/expat/libexpat1-dev_2.2.10-2_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/f/flac/libflac8_1.3.3-2_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/f/flac/libflac-dev_1.3.3-2_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/f/fontconfig/libfontconfig1_2.13.1-4.2_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/f/fontconfig/libfontconfig-dev_2.13.1-4.2_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/f/freetype/libfreetype6_2.10.4+dfsg-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/f/freetype/libfreetype-dev_2.10.4+dfsg-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/f/fribidi/libfribidi0_1.0.8-2_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/f/fribidi/libfribidi-dev_1.0.8-2_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gcc-10/libgcc-10-dev_10.2.1-6_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gcc-10/libstdc++-10-dev_10.2.1-6_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gcc-11/libasan6_11.2.0-2_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gcc-11/libatomic1_11.2.0-2_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gcc-11/libgomp1_11.2.0-2_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gcc-11/libitm1_11.2.0-2_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gcc-11/liblsan0_11.2.0-2_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gcc-11/libstdc++6_11.2.0-2_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gcc-11/libtsan0_11.2.0-2_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gcc-11/libubsan1_11.2.0-2_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gcc-6/libgcc1_6.3.0-18+deb9u1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gdk-pixbuf/libgdk-pixbuf-2.0-0_2.42.6+dfsg-2_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gdk-pixbuf/libgdk-pixbuf-2.0-dev_2.42.6+dfsg-2_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/glib2.0/libglib2.0-0_2.68.3-2_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/glib2.0/libglib2.0-dev_2.68.3-2_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/glibc/libc6_2.31-16_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/glibc/libc6-dev_2.31-16_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gmp/libgmp10_6.2.1+dfsg-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gmp/libgmp10_6.2.1+dfsg-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gnutls28/libgnutls28-dev_3.7.1-5_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gnutls28/libgnutls30_3.7.1-5_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gnutls28/libgnutls-dane0_3.7.1-5_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gnutls28/libgnutls-openssl27_3.7.1-5_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gnutls28/libgnutlsxx28_3.7.1-5_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/graphene/libgraphene-1.0-0_1.10.4+dfsg1-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/graphene/libgraphene-1.0-dev_1.10.4+dfsg1-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/graphite2/libgraphite2-3_1.3.14-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/graphite2/libgraphite2-dev_1.3.14-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gtk+2.0/libgtk2.0-0_2.24.33-2_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gtk+3.0/libgtk-3-0_3.24.30-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gtk+3.0/libgtk-3-dev_3.24.30-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gtk4/libgtk-4-1_4.3.1+ds-2_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gtk4/libgtk-4-dev_4.3.1+ds-2_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/h/harfbuzz/libharfbuzz0b_2.7.4-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/h/harfbuzz/libharfbuzz-dev_2.7.4-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/h/harfbuzz/libharfbuzz-gobject0_2.7.4-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/h/harfbuzz/libharfbuzz-icu0_2.7.4-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/i/icu-le-hb/libicu-le-hb0_1.0.3+git180724-3+b2_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/i/icu/libicu67_67.1-7_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/j/jbigkit/libjbig0_2.1-3.1+b2_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/j/jbigkit/libjbig-dev_2.1-3.1+b2_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/j/json-glib/libjson-glib-1.0-0_1.6.2-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/k/keyutils/libkeyutils1_1.6.1-2_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/k/krb5/krb5-multidev_1.18.3-6_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/k/krb5/libgssapi-krb5-2_1.18.3-6_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/k/krb5/libgssrpc4_1.18.3-6_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/k/krb5/libk5crypto3_1.18.3-6_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/k/krb5/libkadm5clnt-mit12_1.18.3-6_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/k/krb5/libkadm5srv-mit12_1.18.3-6_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/k/krb5/libkdb5-10_1.18.3-6_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/k/krb5/libkrb5-3_1.18.3-6_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/k/krb5/libkrb5-dev_1.18.3-6_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/k/krb5/libkrb5support0_1.18.3-6_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/liba/libappindicator/libappindicator1_0.4.92-8_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/liba/libappindicator/libappindicator3-1_0.4.92-8_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/liba/libappindicator/libappindicator3-dev_0.4.92-8_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/liba/libappindicator/libappindicator-dev_0.4.92-8_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/liba/libasyncns/libasyncns0_0.8-6+b2_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libb/libbsd/libbsd0_0.11.3-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libc/libcap2/libcap2_2.44-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libc/libcap2/libcap-dev_2.44-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libc/libcap-ng/libcap-ng0_0.7.9-2.2+b1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libc/libcloudproviders/libcloudproviders0_0.3.0-3_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libd/libdatrie/libdatrie1_0.2.13-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libd/libdatrie/libdatrie-dev_0.2.13-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libd/libdbusmenu/libdbusmenu-glib4_18.10.20180917~bzr492+repack1-2+b1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libd/libdbusmenu/libdbusmenu-glib-dev_18.10.20180917~bzr492+repack1-2+b1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libd/libdbusmenu/libdbusmenu-gtk3-4_18.10.20180917~bzr492+repack1-2+b1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libd/libdbusmenu/libdbusmenu-gtk4_18.10.20180917~bzr492+repack1-2+b1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libd/libdeflate/libdeflate0_1.7-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libd/libdeflate/libdeflate-dev_1.7-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libd/libdrm/libdrm2_2.4.104-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libd/libdrm/libdrm-amdgpu1_2.4.104-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libd/libdrm/libdrm-dev_2.4.104-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libd/libdrm/libdrm-etnaviv1_2.4.104-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libd/libdrm/libdrm-freedreno1_2.4.104-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libd/libdrm/libdrm-nouveau2_2.4.104-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libd/libdrm/libdrm-radeon1_2.4.104-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libd/libdrm/libdrm-tegra0_2.4.104-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libe/libepoxy/libepoxy0_1.5.8-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libe/libepoxy/libepoxy-dev_1.5.8-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libe/libevdev/libevdev2_1.11.0+dfsg-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libe/libevdev/libevdev-dev_1.11.0+dfsg-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libe/libevent/libevent-2.1-7_2.1.12-stable-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libf/libffi/libffi6_3.2.1-9_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libf/libffi/libffi7_3.3-6_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libf/libffi/libffi8_3.4.2-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libf/libffi/libffi-dev_3.3-6_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libgcrypt20/libgcrypt20_1.8.7-6_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libgcrypt20/libgcrypt20-dev_1.8.7-6_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libglvnd/libegl1_1.3.2-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libglvnd/libegl-dev_1.3.2-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libglvnd/libgl1_1.3.2-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libglvnd/libgl-dev_1.3.2-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libglvnd/libgles1_1.3.2-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libglvnd/libgles2_1.3.2-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libglvnd/libgles-dev_1.3.2-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libglvnd/libglvnd0_1.3.2-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libglvnd/libglvnd-dev_1.3.2-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libglvnd/libglx0_1.3.2-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libglvnd/libglx-dev_1.3.2-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libglvnd/libopengl0_1.3.2-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libgnome-keyring/libgnome-keyring0_3.12.0-1+b2_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libgnome-keyring/libgnome-keyring-dev_3.12.0-1+b2_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libgpg-error/libgpg-error0_1.38-2_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libgpg-error/libgpg-error-dev_1.38-2_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libgudev/libgudev-1.0-0_234-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libi/libice/libice6_1.0.10-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libi/libidl/libidl-2-0_0.8.14-4+b12_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libi/libidn2/libidn2-0_2.3.2-2_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libi/libidn/libidn11_1.33-3_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libi/libindicator/libindicator3-7_0.5.0-4_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libi/libindicator/libindicator7_0.5.0-4_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libi/libinput/libinput10_1.16.4-3_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libi/libinput/libinput-dev_1.16.4-3_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libj/libjpeg-turbo/libjpeg62-turbo_2.0.6-4_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libj/libjpeg-turbo/libjpeg62-turbo-dev_2.0.6-4_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libj/libjsoncpp/libjsoncpp24_1.9.4-4_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libj/libjsoncpp/libjsoncpp-dev_1.9.4-4_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libm/libmd/libmd0_1.0.3-3_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libn/libnsl/libnsl2_1.3.0-2_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libn/libnss-db/libnss-db_2.2.3pre1-6+b10_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libo/libogg/libogg0_1.3.4-0.1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libo/libogg/libogg-dev_1.3.4-0.1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libp/libpciaccess/libpciaccess0_0.16-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libp/libpng1.6/libpng16-16_1.6.37-3_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libp/libpng1.6/libpng-dev_1.6.37-3_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libp/libpsl/libpsl5_0.21.0-1.2_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libp/libpthread-stubs/libpthread-stubs0-dev_0.4-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libr/librest/librest-0.7-0_0.8.1-1.1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libs/libselinux/libselinux1_3.1-3_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libs/libselinux/libselinux1-dev_3.1-3_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libs/libsepol/libsepol1_3.1-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libs/libsepol/libsepol1-dev_3.1-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libs/libsm/libsm6_1.2.3-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libs/libsndfile/libsndfile1_1.0.31-2_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libs/libsoup2.4/libsoup2.4-1_2.72.0-4_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libs/libsoup2.4/libsoup-gnome2.4-1_2.72.0-4_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libs/libssh2/libssh2-1_1.9.0-3_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libt/libtasn1-6/libtasn1-6_4.16.0-2_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libt/libthai/libthai0_0.1.28-4_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libt/libthai/libthai0_0.1.28-4_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libt/libthai/libthai-dev_0.1.28-4_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libt/libtirpc/libtirpc3_1.3.2-2_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libt/libtool/libltdl7_2.4.6-15_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libu/libunistring/libunistring2_0.9.10-6_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libu/libutempter/libutempter0_1.2.1-2_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libu/libutempter/libutempter-dev_1.2.1-2_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libv/libva/libva2_2.12.0-2_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libv/libva/libva-dev_2.12.0-2_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libv/libva/libva-drm2_2.12.0-2_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libv/libva/libva-glx2_2.12.0-2_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libv/libva/libva-wayland2_2.12.0-2_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libv/libva/libva-x11-2_2.12.0-2_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libv/libvorbis/libvorbis0a_1.3.7-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libv/libvorbis/libvorbisenc2_1.3.7-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libw/libwacom/libwacom2_1.8-2_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libw/libwebp/libwebp6_0.6.1-2.1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libw/libwebp/libwebpdemux2_0.6.1-2.1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libw/libwebp/libwebp-dev_0.6.1-2.1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libw/libwebp/libwebpmux3_0.6.1-2.1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libx11/libx11-6_1.7.2-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libx11/libx11-dev_1.7.2-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libx11/libx11-xcb1_1.7.2-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libx11/libx11-xcb-dev_1.7.2-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxau/libxau6_1.0.9-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxau/libxau-dev_1.0.9-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb1_1.14-3_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb1-dev_1.14-3_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb-dri2-0_1.14-3_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb-dri2-0-dev_1.14-3_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb-dri3-0_1.14-3_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb-dri3-dev_1.14-3_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb-glx0_1.14-3_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb-glx0-dev_1.14-3_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb-present0_1.14-3_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb-present-dev_1.14-3_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb-render0_1.14-3_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb-render0-dev_1.14-3_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb-shm0_1.14-3_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb-shm0-dev_1.14-3_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb-sync1_1.14-3_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb-xfixes0_1.14-3_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcomposite/libxcomposite1_0.4.5-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcomposite/libxcomposite-dev_0.4.5-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcursor/libxcursor1_1.2.0-2_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcursor/libxcursor-dev_1.2.0-2_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxdamage/libxdamage1_1.1.5-2_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxdamage/libxdamage-dev_1.1.5-2_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxdmcp/libxdmcp6_1.1.2-3_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxdmcp/libxdmcp-dev_1.1.2-3_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxext/libxext6_1.3.3-1.1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxext/libxext-dev_1.3.3-1.1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxfixes/libxfixes3_5.0.3-2_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxfixes/libxfixes-dev_5.0.3-2_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxi/libxi6_1.7.10-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxi/libxi-dev_1.7.10-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxinerama/libxinerama1_1.1.4-2_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxinerama/libxinerama-dev_1.1.4-2_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxkbcommon/libxkbcommon0_1.0.3-2_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxkbcommon/libxkbcommon-dev_1.0.3-2_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxml2/libxml2_2.9.10+dfsg-6.7_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxml2/libxml2-dev_2.9.10+dfsg-6.7_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxrandr/libxrandr2_1.5.1-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxrandr/libxrandr-dev_1.5.1-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxrender/libxrender1_0.9.10-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxrender/libxrender-dev_0.9.10-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxshmfence/libxshmfence1_1.3-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxshmfence/libxshmfence-dev_1.3-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxslt/libxslt1.1_1.1.34-4_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxslt/libxslt1-dev_1.1.34-4_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxss/libxss1_1.2.3-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxss/libxss-dev_1.2.3-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxt/libxt6_1.2.0-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxt/libxt-dev_1.2.0-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxtst/libxtst6_1.2.3-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxtst/libxtst-dev_1.2.3-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxxf86vm/libxxf86vm1_1.1.4-1+b2_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxxf86vm/libxxf86vm-dev_1.1.4-1+b2_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libz/libzstd/libzstd1_1.4.8+dfsg-2.1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/l/lcms2/liblcms2-2_2.12~rc1-2_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/l/linux/linux-libc-dev_5.10.46-4_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/l/lz4/liblz4-1_1.9.3-2_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/l/lzo2/liblzo2-2_2.10-2_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/m/mesa/libegl1-mesa_20.3.5-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/m/mesa/libegl1-mesa-dev_20.3.5-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/m/mesa/libgbm1_20.3.5-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/m/mesa/libgbm-dev_20.3.5-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/m/mesa/libgl1-mesa-dev_20.3.5-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/m/mesa/libgl1-mesa-glx_20.3.5-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/m/mesa/libglapi-mesa_20.3.5-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/m/mesa/libwayland-egl1-mesa_20.3.5-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/m/mesa/mesa-common-dev_20.3.5-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/m/minizip/libminizip1_1.1-8+b1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/m/minizip/libminizip-dev_1.1-8+b1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/m/mtdev/libmtdev1_1.1.6-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/n/ncurses/libncurses6_6.2+20201114-2_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/n/ncurses/libncurses-dev_6.2+20201114-2_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/n/ncurses/libncursesw6_6.2+20201114-2_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/n/ncurses/libtinfo6_6.2+20201114-2_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/n/nettle/libhogweed6_3.7.3-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/n/nettle/libnettle8_3.7.3-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/n/nghttp2/libnghttp2-14_1.43.0-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/n/nspr/libnspr4_4.32-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/n/nspr/libnspr4-dev_4.32-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/n/nss/libnss3_3.68-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/n/nss/libnss3-dev_3.68-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/o/openldap/libldap-2.4-2_2.4.57+dfsg-3_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/o/openssl/libssl1.1_1.1.1k-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/o/openssl/libssl-dev_1.1.1k-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/o/opus/libopus0_1.3.1-0.1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/o/opus/libopus-dev_1.3.1-0.1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/p11-kit/libp11-kit0_0.23.22-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pam/libpam0g_1.4.0-9_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pam/libpam0g-dev_1.4.0-9_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pango1.0/libpango-1.0-0_1.46.2-3_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pango1.0/libpango1.0-dev_1.46.2-3_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pango1.0/libpangocairo-1.0-0_1.46.2-3_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pango1.0/libpangoft2-1.0-0_1.46.2-3_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pango1.0/libpangoxft-1.0-0_1.46.2-3_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pangox-compat/libpangox-1.0-0_0.0.2-5.1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pciutils/libpci3_3.7.0-5_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pciutils/libpci-dev_3.7.0-5_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pcre2/libpcre2-16-0_10.36-2_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pcre2/libpcre2-32-0_10.36-2_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pcre2/libpcre2-8-0_10.36-2_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pcre2/libpcre2-dev_10.36-2_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pcre2/libpcre2-posix0_10.22-3_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pcre2/libpcre2-posix2_10.36-2_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pcre3/libpcre16-3_8.39-13_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pcre3/libpcre32-3_8.39-13_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pcre3/libpcre3_8.39-13_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pcre3/libpcre3-dev_8.39-13_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pcre3/libpcrecpp0v5_8.39-13_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pipewire/libpipewire-0.3-0_0.3.33-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pipewire/libpipewire-0.3-dev_0.3.33-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pipewire/libspa-0.2-dev_0.3.33-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pixman/libpixman-1-0_0.40.0-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pixman/libpixman-1-dev_0.40.0-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pulseaudio/libpulse0_14.2-2_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pulseaudio/libpulse-dev_14.2-2_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pulseaudio/libpulse-mainloop-glib0_14.2-2_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/r/re2/libre2-9_20210801+dfsg-2_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/r/re2/libre2-dev_20210801+dfsg-2_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/r/rtmpdump/librtmp1_2.4+20151223.gitfa8646d.1-2+b2_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/s/shared-mime-info/shared-mime-info_2.0-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/s/snappy/libsnappy1v5_1.1.8-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/s/snappy/libsnappy-dev_1.1.8-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/s/speech-dispatcher/libspeechd2_0.10.2-2_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/s/speech-dispatcher/libspeechd-dev_0.10.2-2_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/s/sqlite3/libsqlite3-0_3.34.1-3_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/s/systemd/libsystemd0_247.9-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/s/systemd/libudev1_247.9-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/s/systemd/libudev-dev_247.9-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/t/tcp-wrappers/libwrap0_7.6.q-31_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/t/tiff/libtiff5_4.2.0-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/t/tiff/libtiff-dev_4.2.0-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/t/tiff/libtiffxx5_4.2.0-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/u/unbound/libunbound8_1.13.1-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/u/util-linux/libblkid1_2.36.1-8_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/u/util-linux/libblkid-dev_2.36.1-8_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/u/util-linux/libmount1_2.36.1-8_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/u/util-linux/libmount-dev_2.36.1-8_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/u/util-linux/libuuid1_2.36.1-8_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/u/util-linux/uuid-dev_2.36.1-8_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/v/valgrind/valgrind_3.16.1-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/v/vulkan-loader/libvulkan1_1.2.162.0-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/v/vulkan-loader/libvulkan-dev_1.2.162.0-1_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/w/wayland/libwayland-client0_1.19.0-2_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/w/wayland/libwayland-cursor0_1.19.0-2_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/w/wayland/libwayland-dev_1.19.0-2_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/w/wayland/libwayland-egl1_1.19.0-2_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/w/wayland/libwayland-server0_1.19.0-2_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/w/wayland-protocols/wayland-protocols_1.20-1_all.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/x/x11proto-composite/x11proto-composite-dev_0.4.2-2_all.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/x/x11proto-damage/x11proto-damage-dev_1.2.1-2_all.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/x/x11proto-fixes/x11proto-fixes-dev_5.0-2_all.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/x/xft/libxft2_2.3.2-2_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/x/xft/libxft-dev_2.3.2-2_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/x/xorgproto/x11proto-dev_2020.1-1_all.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/x/xorgproto/x11proto-input-dev_2020.1-1_all.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/x/xorgproto/x11proto-kb-dev_2020.1-1_all.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/x/xorgproto/x11proto-randr-dev_2020.1-1_all.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/x/xorgproto/x11proto-record-dev_2020.1-1_all.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/x/xorgproto/x11proto-render-dev_2020.1-1_all.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/x/xorgproto/x11proto-scrnsaver-dev_2020.1-1_all.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/x/xorgproto/x11proto-xext-dev_2020.1-1_all.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/x/xorgproto/x11proto-xinerama-dev_2020.1-1_all.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/x/xz-utils/liblzma5_5.2.5-2_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/z/zlib/zlib1g_1.2.11.dfsg-2_arm64.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/z/zlib/zlib1g-dev_1.2.11.dfsg-2_arm64.deb diff --git a/build/linux/sysroot_scripts/generated_package_lists/sid.armel b/build/linux/sysroot_scripts/generated_package_lists/sid.armel deleted file mode 100644 index ad8d0b7..0000000 --- a/build/linux/sysroot_scripts/generated_package_lists/sid.armel +++ /dev/null @@ -1,372 +0,0 @@ -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/a/alsa-lib/libasound2_1.2.5.1-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/a/alsa-lib/libasound2-dev_1.2.5.1-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/a/atk1.0/libatk1.0-0_2.36.0-2_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/a/atk1.0/libatk1.0-dev_2.36.0-2_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/a/at-spi2-atk/libatk-bridge2.0-0_2.38.0-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/a/at-spi2-atk/libatk-bridge2.0-dev_2.38.0-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/a/at-spi2-core/libatspi2.0-0_2.40.3-3_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/a/at-spi2-core/libatspi2.0-dev_2.40.3-3_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/a/attr/libattr1_2.4.48-6_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/a/audit/libaudit1_3.0.5-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/a/avahi/libavahi-client3_0.8-5_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/a/avahi/libavahi-common3_0.8-5_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/b/bluez/libbluetooth3_5.55-3.1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/b/bluez/libbluetooth-dev_5.55-3.1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/b/brotli/libbrotli1_1.0.9-2+b2_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/b/brotli/libbrotli-dev_1.0.9-2+b2_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/c/cairo/libcairo2_1.16.0-5_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/c/cairo/libcairo2-dev_1.16.0-5_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/c/cairo/libcairo-gobject2_1.16.0-5_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/c/cairo/libcairo-script-interpreter2_1.16.0-5_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/c/colord/libcolord2_1.4.5-3_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/c/cups/libcups2_2.3.3op2-3+deb11u1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/c/cups/libcups2-dev_2.3.3op2-3+deb11u1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/c/cups/libcupsimage2_2.3.3op2-3+deb11u1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/c/cups/libcupsimage2-dev_2.3.3op2-3+deb11u1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/c/curl/libcurl3-gnutls_7.74.0-1.3+b1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/c/curl/libcurl4-gnutls-dev_7.74.0-1.3+b1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/c/cyrus-sasl2/libsasl2-2_2.1.27+dfsg-2.1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/d/db5.3/libdb5.3_5.3.28+dfsg1-0.8_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/d/dbus-glib/libdbus-glib-1-2_0.112-2_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/d/dbus/libdbus-1-3_1.12.20-2_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/d/dbus/libdbus-1-dev_1.12.20-2_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/e/e2fsprogs/comerr-dev_2.1-1.46.2-2_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/e/e2fsprogs/libcom-err2_1.46.2-2_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/e/elfutils/libelf1_0.185-2_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/e/elfutils/libelf-dev_0.185-2_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/e/expat/libexpat1_2.2.10-2_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/e/expat/libexpat1-dev_2.2.10-2_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/f/flac/libflac8_1.3.3-2_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/f/flac/libflac-dev_1.3.3-2_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/f/fontconfig/libfontconfig1_2.13.1-4.2_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/f/fontconfig/libfontconfig-dev_2.13.1-4.2_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/f/freetype/libfreetype6_2.10.4+dfsg-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/f/freetype/libfreetype-dev_2.10.4+dfsg-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/f/fribidi/libfribidi0_1.0.8-2_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/f/fribidi/libfribidi-dev_1.0.8-2_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gcc-10/libgcc-10-dev_10.2.1-6_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gcc-10/libstdc++-10-dev_10.2.1-6_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gcc-11/libasan6_11.2.0-2_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gcc-11/libatomic1_11.2.0-2_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gcc-11/libgomp1_11.2.0-2_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gcc-11/libstdc++6_11.2.0-2_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gcc-11/libubsan1_11.2.0-2_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gcc-6/libgcc1_6.3.0-18+deb9u1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gdk-pixbuf/libgdk-pixbuf-2.0-0_2.42.6+dfsg-2_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gdk-pixbuf/libgdk-pixbuf-2.0-dev_2.42.6+dfsg-2_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/glib2.0/libglib2.0-0_2.68.3-2_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/glib2.0/libglib2.0-dev_2.68.3-2_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/glibc/libc6_2.31-16_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/glibc/libc6-dev_2.31-16_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gmp/libgmp10_6.2.1+dfsg-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gnutls28/libgnutls28-dev_3.7.1-5_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gnutls28/libgnutls30_3.7.1-5_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gnutls28/libgnutls-dane0_3.7.1-5_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gnutls28/libgnutls-openssl27_3.7.1-5_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gnutls28/libgnutlsxx28_3.7.1-5_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/graphene/libgraphene-1.0-0_1.10.4+dfsg1-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/graphene/libgraphene-1.0-dev_1.10.4+dfsg1-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/graphite2/libgraphite2-3_1.3.14-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/graphite2/libgraphite2-dev_1.3.14-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gtk+2.0/libgtk2.0-0_2.24.33-2_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gtk+3.0/libgtk-3-0_3.24.30-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gtk+3.0/libgtk-3-dev_3.24.30-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gtk4/libgtk-4-1_4.3.1+ds-2_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gtk4/libgtk-4-dev_4.3.1+ds-2_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/h/harfbuzz/libharfbuzz0b_2.7.4-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/h/harfbuzz/libharfbuzz-dev_2.7.4-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/h/harfbuzz/libharfbuzz-gobject0_2.7.4-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/h/harfbuzz/libharfbuzz-icu0_2.7.4-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/i/icu-le-hb/libicu-le-hb0_1.0.3+git180724-3+b2_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/i/icu/libicu67_67.1-7_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/j/jbigkit/libjbig0_2.1-3.1+b2_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/j/jbigkit/libjbig-dev_2.1-3.1+b2_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/j/json-glib/libjson-glib-1.0-0_1.6.2-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/k/keyutils/libkeyutils1_1.6.1-2_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/k/krb5/krb5-multidev_1.18.3-6_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/k/krb5/libgssapi-krb5-2_1.18.3-6_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/k/krb5/libgssrpc4_1.18.3-6_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/k/krb5/libk5crypto3_1.18.3-6_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/k/krb5/libkadm5clnt-mit12_1.18.3-6_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/k/krb5/libkadm5srv-mit12_1.18.3-6_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/k/krb5/libkdb5-10_1.18.3-6_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/k/krb5/libkrb5-3_1.18.3-6_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/k/krb5/libkrb5-dev_1.18.3-6_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/k/krb5/libkrb5support0_1.18.3-6_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/liba/libappindicator/libappindicator1_0.4.92-8_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/liba/libappindicator/libappindicator3-1_0.4.92-8_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/liba/libappindicator/libappindicator3-dev_0.4.92-8_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/liba/libappindicator/libappindicator-dev_0.4.92-8_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/liba/libasyncns/libasyncns0_0.8-6+b2_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libb/libbsd/libbsd0_0.11.3-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libc/libcap2/libcap2_2.44-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libc/libcap2/libcap-dev_2.44-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libc/libcap-ng/libcap-ng0_0.7.9-2.2+b1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libc/libcloudproviders/libcloudproviders0_0.3.0-3_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libd/libdatrie/libdatrie1_0.2.13-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libd/libdatrie/libdatrie-dev_0.2.13-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libd/libdbusmenu/libdbusmenu-glib4_18.10.20180917~bzr492+repack1-2+b1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libd/libdbusmenu/libdbusmenu-glib-dev_18.10.20180917~bzr492+repack1-2+b1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libd/libdbusmenu/libdbusmenu-gtk3-4_18.10.20180917~bzr492+repack1-2+b1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libd/libdbusmenu/libdbusmenu-gtk4_18.10.20180917~bzr492+repack1-2+b1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libd/libdeflate/libdeflate0_1.7-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libd/libdeflate/libdeflate-dev_1.7-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libd/libdrm/libdrm2_2.4.104-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libd/libdrm/libdrm-amdgpu1_2.4.104-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libd/libdrm/libdrm-dev_2.4.104-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libd/libdrm/libdrm-exynos1_2.4.104-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libd/libdrm/libdrm-freedreno1_2.4.104-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libd/libdrm/libdrm-nouveau2_2.4.104-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libd/libdrm/libdrm-omap1_2.4.104-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libd/libdrm/libdrm-radeon1_2.4.104-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libd/libdrm/libdrm-tegra0_2.4.104-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libe/libepoxy/libepoxy0_1.5.8-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libe/libepoxy/libepoxy-dev_1.5.8-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libe/libevdev/libevdev2_1.11.0+dfsg-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libe/libevdev/libevdev-dev_1.11.0+dfsg-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libe/libevent/libevent-2.1-7_2.1.12-stable-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libf/libffi/libffi6_3.2.1-9_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libf/libffi/libffi7_3.3-6_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libf/libffi/libffi8_3.4.2-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libf/libffi/libffi-dev_3.3-6_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libgcrypt20/libgcrypt20_1.8.7-6_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libgcrypt20/libgcrypt20-dev_1.8.7-6_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libglvnd/libegl1_1.3.2-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libglvnd/libegl-dev_1.3.2-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libglvnd/libgl1_1.3.2-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libglvnd/libgl-dev_1.3.2-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libglvnd/libgles1_1.3.2-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libglvnd/libgles2_1.3.2-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libglvnd/libgles-dev_1.3.2-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libglvnd/libglvnd0_1.3.2-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libglvnd/libglvnd-dev_1.3.2-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libglvnd/libglx0_1.3.2-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libglvnd/libglx-dev_1.3.2-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libglvnd/libopengl0_1.3.2-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libgnome-keyring/libgnome-keyring0_3.12.0-1+b2_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libgnome-keyring/libgnome-keyring-dev_3.12.0-1+b2_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libgpg-error/libgpg-error0_1.38-2_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libgpg-error/libgpg-error-dev_1.38-2_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libgudev/libgudev-1.0-0_234-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libi/libice/libice6_1.0.10-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libi/libidl/libidl-2-0_0.8.14-4+b12_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libi/libidn2/libidn2-0_2.3.2-2_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libi/libidn/libidn11_1.33-3_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libi/libindicator/libindicator3-7_0.5.0-4_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libi/libindicator/libindicator7_0.5.0-4_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libi/libinput/libinput10_1.16.4-3_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libi/libinput/libinput-dev_1.16.4-3_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libj/libjpeg-turbo/libjpeg62-turbo_2.0.6-4_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libj/libjpeg-turbo/libjpeg62-turbo-dev_2.0.6-4_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libj/libjsoncpp/libjsoncpp24_1.9.4-4_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libj/libjsoncpp/libjsoncpp-dev_1.9.4-4_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libm/libmd/libmd0_1.0.3-3_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libn/libnsl/libnsl2_1.3.0-2_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libn/libnss-db/libnss-db_2.2.3pre1-6+b10_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libo/libogg/libogg0_1.3.4-0.1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libo/libogg/libogg-dev_1.3.4-0.1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libp/libpciaccess/libpciaccess0_0.16-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libp/libpng1.6/libpng16-16_1.6.37-3_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libp/libpng1.6/libpng-dev_1.6.37-3_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libp/libpsl/libpsl5_0.21.0-1.2_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libp/libpthread-stubs/libpthread-stubs0-dev_0.4-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libr/librest/librest-0.7-0_0.8.1-1.1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libs/libselinux/libselinux1_3.1-3_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libs/libselinux/libselinux1-dev_3.1-3_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libs/libsepol/libsepol1_3.1-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libs/libsepol/libsepol1-dev_3.1-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libs/libsm/libsm6_1.2.3-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libs/libsndfile/libsndfile1_1.0.31-2_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libs/libsoup2.4/libsoup2.4-1_2.72.0-4_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libs/libsoup2.4/libsoup-gnome2.4-1_2.72.0-4_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libs/libssh2/libssh2-1_1.9.0-3_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libt/libtasn1-6/libtasn1-6_4.16.0-2_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libt/libthai/libthai0_0.1.28-4_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libt/libthai/libthai-dev_0.1.28-4_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libt/libtirpc/libtirpc3_1.3.2-2_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libt/libtool/libltdl7_2.4.6-15_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libu/libunistring/libunistring2_0.9.10-6_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libu/libutempter/libutempter0_1.2.1-2_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libu/libutempter/libutempter-dev_1.2.1-2_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libv/libva/libva2_2.12.0-2_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libv/libva/libva-dev_2.12.0-2_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libv/libva/libva-drm2_2.12.0-2_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libv/libva/libva-glx2_2.12.0-2_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libv/libva/libva-wayland2_2.12.0-2_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libv/libva/libva-x11-2_2.12.0-2_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libv/libvorbis/libvorbis0a_1.3.7-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libv/libvorbis/libvorbisenc2_1.3.7-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libw/libwacom/libwacom2_1.8-2_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libw/libwebp/libwebp6_0.6.1-2.1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libw/libwebp/libwebpdemux2_0.6.1-2.1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libw/libwebp/libwebp-dev_0.6.1-2.1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libw/libwebp/libwebpmux3_0.6.1-2.1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libx11/libx11-6_1.7.2-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libx11/libx11-dev_1.7.2-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libx11/libx11-xcb1_1.7.2-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libx11/libx11-xcb-dev_1.7.2-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxau/libxau6_1.0.9-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxau/libxau-dev_1.0.9-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb1_1.14-3_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb1-dev_1.14-3_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb-dri2-0_1.14-3_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb-dri2-0-dev_1.14-3_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb-dri3-0_1.14-3_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb-dri3-dev_1.14-3_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb-glx0_1.14-3_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb-glx0-dev_1.14-3_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb-present0_1.14-3_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb-present-dev_1.14-3_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb-render0_1.14-3_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb-render0-dev_1.14-3_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb-shm0_1.14-3_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb-shm0-dev_1.14-3_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb-sync1_1.14-3_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb-xfixes0_1.14-3_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcomposite/libxcomposite1_0.4.5-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcomposite/libxcomposite-dev_0.4.5-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcursor/libxcursor1_1.2.0-2_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcursor/libxcursor-dev_1.2.0-2_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxdamage/libxdamage1_1.1.5-2_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxdamage/libxdamage-dev_1.1.5-2_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxdmcp/libxdmcp6_1.1.2-3_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxdmcp/libxdmcp-dev_1.1.2-3_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxext/libxext6_1.3.3-1.1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxext/libxext-dev_1.3.3-1.1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxfixes/libxfixes3_5.0.3-2_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxfixes/libxfixes-dev_5.0.3-2_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxi/libxi6_1.7.10-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxi/libxi-dev_1.7.10-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxinerama/libxinerama1_1.1.4-2_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxinerama/libxinerama-dev_1.1.4-2_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxkbcommon/libxkbcommon0_1.0.3-2_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxkbcommon/libxkbcommon-dev_1.0.3-2_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxml2/libxml2_2.9.10+dfsg-6.7_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxml2/libxml2-dev_2.9.10+dfsg-6.7_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxrandr/libxrandr2_1.5.1-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxrandr/libxrandr-dev_1.5.1-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxrender/libxrender1_0.9.10-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxrender/libxrender-dev_0.9.10-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxshmfence/libxshmfence1_1.3-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxshmfence/libxshmfence-dev_1.3-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxslt/libxslt1.1_1.1.34-4_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxslt/libxslt1-dev_1.1.34-4_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxss/libxss1_1.2.3-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxss/libxss-dev_1.2.3-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxt/libxt6_1.2.0-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxt/libxt-dev_1.2.0-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxtst/libxtst6_1.2.3-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxtst/libxtst-dev_1.2.3-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxxf86vm/libxxf86vm1_1.1.4-1+b2_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxxf86vm/libxxf86vm-dev_1.1.4-1+b2_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libz/libzstd/libzstd1_1.4.8+dfsg-2.1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/l/lcms2/liblcms2-2_2.12~rc1-2_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/l/linux/linux-libc-dev_5.10.46-4_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/l/lz4/liblz4-1_1.9.3-2_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/l/lzo2/liblzo2-2_2.10-2_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/m/mesa/libegl1-mesa_20.3.5-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/m/mesa/libegl1-mesa-dev_20.3.5-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/m/mesa/libgbm1_20.3.5-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/m/mesa/libgbm-dev_20.3.5-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/m/mesa/libgl1-mesa-dev_20.3.5-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/m/mesa/libgl1-mesa-glx_20.3.5-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/m/mesa/libglapi-mesa_20.3.5-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/m/mesa/libwayland-egl1-mesa_20.3.5-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/m/mesa/mesa-common-dev_20.3.5-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/m/minizip/libminizip1_1.1-8+b1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/m/minizip/libminizip-dev_1.1-8+b1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/m/mtdev/libmtdev1_1.1.6-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/n/ncurses/libncurses6_6.2+20201114-2_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/n/ncurses/libncurses-dev_6.2+20201114-2_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/n/ncurses/libncursesw6_6.2+20201114-2_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/n/ncurses/libtinfo6_6.2+20201114-2_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/n/nettle/libhogweed6_3.7.3-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/n/nettle/libnettle8_3.7.3-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/n/nghttp2/libnghttp2-14_1.43.0-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/n/nspr/libnspr4_4.32-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/n/nspr/libnspr4-dev_4.32-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/n/nss/libnss3_3.68-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/n/nss/libnss3-dev_3.68-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/o/openldap/libldap-2.4-2_2.4.57+dfsg-3_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/o/openssl/libssl1.1_1.1.1k-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/o/openssl/libssl-dev_1.1.1k-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/o/opus/libopus0_1.3.1-0.1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/o/opus/libopus-dev_1.3.1-0.1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/p11-kit/libp11-kit0_0.23.22-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pam/libpam0g_1.4.0-9_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pam/libpam0g-dev_1.4.0-9_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pango1.0/libpango-1.0-0_1.46.2-3_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pango1.0/libpango1.0-dev_1.46.2-3_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pango1.0/libpangocairo-1.0-0_1.46.2-3_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pango1.0/libpangoft2-1.0-0_1.46.2-3_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pango1.0/libpangoxft-1.0-0_1.46.2-3_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pangox-compat/libpangox-1.0-0_0.0.2-5.1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pciutils/libpci3_3.7.0-5_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pciutils/libpci-dev_3.7.0-5_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pcre2/libpcre2-16-0_10.36-2_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pcre2/libpcre2-32-0_10.36-2_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pcre2/libpcre2-8-0_10.36-2_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pcre2/libpcre2-dev_10.36-2_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pcre2/libpcre2-posix0_10.22-3_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pcre2/libpcre2-posix2_10.36-2_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pcre3/libpcre16-3_8.39-13_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pcre3/libpcre32-3_8.39-13_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pcre3/libpcre3_8.39-13_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pcre3/libpcre3-dev_8.39-13_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pcre3/libpcrecpp0v5_8.39-13_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pipewire/libpipewire-0.3-0_0.3.33-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pipewire/libpipewire-0.3-dev_0.3.33-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pipewire/libspa-0.2-dev_0.3.33-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pixman/libpixman-1-0_0.40.0-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pixman/libpixman-1-dev_0.40.0-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pulseaudio/libpulse0_14.2-2_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pulseaudio/libpulse-dev_14.2-2_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pulseaudio/libpulse-mainloop-glib0_14.2-2_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/r/re2/libre2-9_20210801+dfsg-2_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/r/re2/libre2-dev_20210801+dfsg-2_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/r/rtmpdump/librtmp1_2.4+20151223.gitfa8646d.1-2+b2_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/s/shared-mime-info/shared-mime-info_2.0-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/s/snappy/libsnappy1v5_1.1.8-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/s/snappy/libsnappy-dev_1.1.8-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/s/speech-dispatcher/libspeechd2_0.10.2-2_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/s/speech-dispatcher/libspeechd-dev_0.10.2-2_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/s/sqlite3/libsqlite3-0_3.34.1-3_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/s/systemd/libsystemd0_247.9-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/s/systemd/libudev1_247.9-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/s/systemd/libudev-dev_247.9-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/t/tcp-wrappers/libwrap0_7.6.q-31_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/t/tiff/libtiff5_4.2.0-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/t/tiff/libtiff-dev_4.2.0-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/t/tiff/libtiffxx5_4.2.0-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/u/unbound/libunbound8_1.13.1-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/u/util-linux/libblkid1_2.36.1-8_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/u/util-linux/libblkid-dev_2.36.1-8_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/u/util-linux/libmount1_2.36.1-8_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/u/util-linux/libmount-dev_2.36.1-8_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/u/util-linux/libuuid1_2.36.1-8_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/u/util-linux/uuid-dev_2.36.1-8_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/v/vulkan-loader/libvulkan1_1.2.162.0-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/v/vulkan-loader/libvulkan-dev_1.2.162.0-1_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/w/wayland/libwayland-client0_1.19.0-2_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/w/wayland/libwayland-cursor0_1.19.0-2_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/w/wayland/libwayland-dev_1.19.0-2_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/w/wayland/libwayland-egl1_1.19.0-2_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/w/wayland/libwayland-server0_1.19.0-2_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/w/wayland-protocols/wayland-protocols_1.20-1_all.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/x/x11proto-composite/x11proto-composite-dev_0.4.2-2_all.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/x/x11proto-damage/x11proto-damage-dev_1.2.1-2_all.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/x/x11proto-fixes/x11proto-fixes-dev_5.0-2_all.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/x/xft/libxft2_2.3.2-2_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/x/xft/libxft-dev_2.3.2-2_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/x/xorgproto/x11proto-dev_2020.1-1_all.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/x/xorgproto/x11proto-input-dev_2020.1-1_all.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/x/xorgproto/x11proto-kb-dev_2020.1-1_all.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/x/xorgproto/x11proto-randr-dev_2020.1-1_all.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/x/xorgproto/x11proto-record-dev_2020.1-1_all.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/x/xorgproto/x11proto-render-dev_2020.1-1_all.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/x/xorgproto/x11proto-scrnsaver-dev_2020.1-1_all.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/x/xorgproto/x11proto-xext-dev_2020.1-1_all.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/x/xorgproto/x11proto-xinerama-dev_2020.1-1_all.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/x/xz-utils/liblzma5_5.2.5-2_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/z/zlib/zlib1g_1.2.11.dfsg-2_armel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/z/zlib/zlib1g-dev_1.2.11.dfsg-2_armel.deb diff --git a/build/linux/sysroot_scripts/generated_package_lists/sid.i386 b/build/linux/sysroot_scripts/generated_package_lists/sid.i386 deleted file mode 100644 index d8c0e9b..0000000 --- a/build/linux/sysroot_scripts/generated_package_lists/sid.i386 +++ /dev/null @@ -1,374 +0,0 @@ -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/a/alsa-lib/libasound2_1.2.5.1-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/a/alsa-lib/libasound2-dev_1.2.5.1-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/a/atk1.0/libatk1.0-0_2.36.0-2_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/a/atk1.0/libatk1.0-dev_2.36.0-2_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/a/at-spi2-atk/libatk-bridge2.0-0_2.38.0-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/a/at-spi2-atk/libatk-bridge2.0-dev_2.38.0-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/a/at-spi2-core/libatspi2.0-0_2.40.3-3_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/a/at-spi2-core/libatspi2.0-dev_2.40.3-3_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/a/attr/libattr1_2.4.48-6_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/a/audit/libaudit1_3.0.5-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/a/avahi/libavahi-client3_0.8-5_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/a/avahi/libavahi-common3_0.8-5_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/b/bluez/libbluetooth3_5.55-3.1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/b/bluez/libbluetooth-dev_5.55-3.1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/b/brotli/libbrotli1_1.0.9-2+b2_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/b/brotli/libbrotli-dev_1.0.9-2+b2_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/c/cairo/libcairo2_1.16.0-5_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/c/cairo/libcairo2-dev_1.16.0-5_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/c/cairo/libcairo-gobject2_1.16.0-5_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/c/cairo/libcairo-script-interpreter2_1.16.0-5_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/c/colord/libcolord2_1.4.5-3_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/c/cups/libcups2_2.3.3op2-3+deb11u1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/c/cups/libcups2-dev_2.3.3op2-3+deb11u1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/c/cups/libcupsimage2_2.3.3op2-3+deb11u1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/c/cups/libcupsimage2-dev_2.3.3op2-3+deb11u1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/c/curl/libcurl3-gnutls_7.74.0-1.3+b1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/c/curl/libcurl4-gnutls-dev_7.74.0-1.3+b1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/c/cyrus-sasl2/libsasl2-2_2.1.27+dfsg-2.1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/d/db5.3/libdb5.3_5.3.28+dfsg1-0.8_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/d/dbus-glib/libdbus-glib-1-2_0.112-2_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/d/dbus/libdbus-1-3_1.12.20-2_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/d/dbus/libdbus-1-dev_1.12.20-2_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/e/e2fsprogs/comerr-dev_2.1-1.46.2-2_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/e/e2fsprogs/libcom-err2_1.46.2-2_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/e/elfutils/libelf1_0.185-2_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/e/elfutils/libelf-dev_0.185-2_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/e/expat/libexpat1_2.2.10-2_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/e/expat/libexpat1-dev_2.2.10-2_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/f/flac/libflac8_1.3.3-2_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/f/flac/libflac-dev_1.3.3-2_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/f/fontconfig/libfontconfig1_2.13.1-4.2_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/f/fontconfig/libfontconfig-dev_2.13.1-4.2_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/f/freetype/libfreetype6_2.10.4+dfsg-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/f/freetype/libfreetype-dev_2.10.4+dfsg-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/f/fribidi/libfribidi0_1.0.8-2_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/f/fribidi/libfribidi-dev_1.0.8-2_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gcc-10/libgcc-10-dev_10.2.1-6_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gcc-10/libstdc++-10-dev_10.2.1-6_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gcc-11/libasan6_11.2.0-2_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gcc-11/libatomic1_11.2.0-2_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gcc-11/libgomp1_11.2.0-2_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gcc-11/libitm1_11.2.0-2_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gcc-11/libquadmath0_11.2.0-2_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gcc-11/libstdc++6_11.2.0-2_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gcc-11/libubsan1_11.2.0-2_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gcc-6/libcilkrts5_6.3.0-18+deb9u1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gcc-6/libgcc1_6.3.0-18+deb9u1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gcc-6/libmpx2_6.3.0-18+deb9u1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gdk-pixbuf/libgdk-pixbuf-2.0-0_2.42.6+dfsg-2_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gdk-pixbuf/libgdk-pixbuf-2.0-dev_2.42.6+dfsg-2_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/glib2.0/libglib2.0-0_2.68.3-2_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/glib2.0/libglib2.0-dev_2.68.3-2_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/glibc/libc6_2.31-16_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/glibc/libc6-dev_2.31-16_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gmp/libgmp10_6.2.1+dfsg-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gnutls28/libgnutls28-dev_3.7.1-5_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gnutls28/libgnutls30_3.7.1-5_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gnutls28/libgnutls-dane0_3.7.1-5_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gnutls28/libgnutls-openssl27_3.7.1-5_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gnutls28/libgnutlsxx28_3.7.1-5_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/graphene/libgraphene-1.0-0_1.10.4+dfsg1-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/graphene/libgraphene-1.0-dev_1.10.4+dfsg1-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/graphite2/libgraphite2-3_1.3.14-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/graphite2/libgraphite2-dev_1.3.14-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gtk+2.0/libgtk2.0-0_2.24.33-2_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gtk+3.0/libgtk-3-0_3.24.30-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gtk+3.0/libgtk-3-dev_3.24.30-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gtk4/libgtk-4-1_4.3.1+ds-2_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gtk4/libgtk-4-dev_4.3.1+ds-2_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/h/harfbuzz/libharfbuzz0b_2.7.4-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/h/harfbuzz/libharfbuzz-dev_2.7.4-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/h/harfbuzz/libharfbuzz-gobject0_2.7.4-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/h/harfbuzz/libharfbuzz-icu0_2.7.4-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/i/icu-le-hb/libicu-le-hb0_1.0.3+git180724-3+b2_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/i/icu/libicu67_67.1-7_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/j/jbigkit/libjbig0_2.1-3.1+b2_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/j/jbigkit/libjbig-dev_2.1-3.1+b2_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/j/json-glib/libjson-glib-1.0-0_1.6.2-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/k/keyutils/libkeyutils1_1.6.1-2_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/k/krb5/krb5-multidev_1.18.3-6_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/k/krb5/libgssapi-krb5-2_1.18.3-6_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/k/krb5/libgssrpc4_1.18.3-6_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/k/krb5/libk5crypto3_1.18.3-6_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/k/krb5/libkadm5clnt-mit12_1.18.3-6_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/k/krb5/libkadm5srv-mit12_1.18.3-6_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/k/krb5/libkdb5-10_1.18.3-6_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/k/krb5/libkrb5-3_1.18.3-6_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/k/krb5/libkrb5-dev_1.18.3-6_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/k/krb5/libkrb5support0_1.18.3-6_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/liba/libappindicator/libappindicator1_0.4.92-8_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/liba/libappindicator/libappindicator3-1_0.4.92-8_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/liba/libappindicator/libappindicator3-dev_0.4.92-8_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/liba/libappindicator/libappindicator-dev_0.4.92-8_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/liba/libasyncns/libasyncns0_0.8-6+b2_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libb/libbsd/libbsd0_0.11.3-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libc/libcap2/libcap2_2.44-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libc/libcap2/libcap-dev_2.44-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libc/libcap-ng/libcap-ng0_0.7.9-2.2+b1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libc/libcloudproviders/libcloudproviders0_0.3.0-3_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libd/libdatrie/libdatrie1_0.2.13-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libd/libdatrie/libdatrie-dev_0.2.13-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libd/libdbusmenu/libdbusmenu-glib4_18.10.20180917~bzr492+repack1-2+b1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libd/libdbusmenu/libdbusmenu-glib-dev_18.10.20180917~bzr492+repack1-2+b1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libd/libdbusmenu/libdbusmenu-gtk3-4_18.10.20180917~bzr492+repack1-2+b1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libd/libdbusmenu/libdbusmenu-gtk4_18.10.20180917~bzr492+repack1-2+b1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libd/libdeflate/libdeflate0_1.7-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libd/libdeflate/libdeflate-dev_1.7-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libd/libdrm/libdrm2_2.4.104-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libd/libdrm/libdrm-amdgpu1_2.4.104-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libd/libdrm/libdrm-dev_2.4.104-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libd/libdrm/libdrm-intel1_2.4.104-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libd/libdrm/libdrm-nouveau2_2.4.104-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libd/libdrm/libdrm-radeon1_2.4.104-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libe/libepoxy/libepoxy0_1.5.8-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libe/libepoxy/libepoxy-dev_1.5.8-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libe/libevdev/libevdev2_1.11.0+dfsg-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libe/libevdev/libevdev-dev_1.11.0+dfsg-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libe/libevent/libevent-2.1-7_2.1.12-stable-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libf/libffi/libffi6_3.2.1-9_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libf/libffi/libffi7_3.3-6_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libf/libffi/libffi8_3.4.2-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libf/libffi/libffi-dev_3.3-6_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libgcrypt20/libgcrypt20_1.8.7-6_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libgcrypt20/libgcrypt20-dev_1.8.7-6_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libglvnd/libegl1_1.3.2-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libglvnd/libegl-dev_1.3.2-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libglvnd/libgl1_1.3.2-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libglvnd/libgl-dev_1.3.2-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libglvnd/libgles1_1.3.2-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libglvnd/libgles2_1.3.2-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libglvnd/libgles-dev_1.3.2-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libglvnd/libglvnd0_1.3.2-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libglvnd/libglvnd-dev_1.3.2-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libglvnd/libglx0_1.3.2-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libglvnd/libglx-dev_1.3.2-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libglvnd/libopengl0_1.3.2-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libgnome-keyring/libgnome-keyring0_3.12.0-1+b2_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libgnome-keyring/libgnome-keyring-dev_3.12.0-1+b2_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libgpg-error/libgpg-error0_1.38-2_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libgpg-error/libgpg-error-dev_1.38-2_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libgudev/libgudev-1.0-0_234-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libi/libice/libice6_1.0.10-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libi/libidl/libidl-2-0_0.8.14-4+b12_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libi/libidn2/libidn2-0_2.3.2-2_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libi/libidn/libidn11_1.33-3_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libi/libindicator/libindicator3-7_0.5.0-4_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libi/libindicator/libindicator7_0.5.0-4_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libi/libinput/libinput10_1.16.4-3_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libi/libinput/libinput-dev_1.16.4-3_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libj/libjpeg-turbo/libjpeg62-turbo_2.0.6-4_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libj/libjpeg-turbo/libjpeg62-turbo-dev_2.0.6-4_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libj/libjsoncpp/libjsoncpp24_1.9.4-4_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libj/libjsoncpp/libjsoncpp-dev_1.9.4-4_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libm/libmd/libmd0_1.0.3-3_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libn/libnsl/libnsl2_1.3.0-2_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libn/libnss-db/libnss-db_2.2.3pre1-6+b10_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libo/libogg/libogg0_1.3.4-0.1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libo/libogg/libogg-dev_1.3.4-0.1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libp/libpciaccess/libpciaccess0_0.16-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libp/libpng1.6/libpng16-16_1.6.37-3_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libp/libpng1.6/libpng-dev_1.6.37-3_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libp/libpsl/libpsl5_0.21.0-1.2_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libp/libpthread-stubs/libpthread-stubs0-dev_0.4-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libr/librest/librest-0.7-0_0.8.1-1.1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libs/libselinux/libselinux1_3.1-3_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libs/libselinux/libselinux1-dev_3.1-3_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libs/libsepol/libsepol1_3.1-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libs/libsepol/libsepol1-dev_3.1-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libs/libsm/libsm6_1.2.3-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libs/libsndfile/libsndfile1_1.0.31-2_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libs/libsoup2.4/libsoup2.4-1_2.72.0-4_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libs/libsoup2.4/libsoup-gnome2.4-1_2.72.0-4_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libs/libssh2/libssh2-1_1.9.0-3_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libt/libtasn1-6/libtasn1-6_4.16.0-2_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libt/libthai/libthai0_0.1.28-4_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libt/libthai/libthai-dev_0.1.28-4_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libt/libtirpc/libtirpc3_1.3.2-2_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libt/libtool/libltdl7_2.4.6-15_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libu/libunistring/libunistring2_0.9.10-6_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libu/libutempter/libutempter0_1.2.1-2_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libu/libutempter/libutempter-dev_1.2.1-2_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libv/libva/libva2_2.12.0-2_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libv/libva/libva-dev_2.12.0-2_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libv/libva/libva-drm2_2.12.0-2_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libv/libva/libva-glx2_2.12.0-2_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libv/libva/libva-wayland2_2.12.0-2_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libv/libva/libva-x11-2_2.12.0-2_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libv/libvorbis/libvorbis0a_1.3.7-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libv/libvorbis/libvorbisenc2_1.3.7-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libw/libwacom/libwacom2_1.8-2_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libw/libwebp/libwebp6_0.6.1-2.1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libw/libwebp/libwebpdemux2_0.6.1-2.1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libw/libwebp/libwebp-dev_0.6.1-2.1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libw/libwebp/libwebpmux3_0.6.1-2.1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libx11/libx11-6_1.7.2-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libx11/libx11-dev_1.7.2-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libx11/libx11-xcb1_1.7.2-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libx11/libx11-xcb-dev_1.7.2-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxau/libxau6_1.0.9-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxau/libxau-dev_1.0.9-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb1_1.14-3_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb1-dev_1.14-3_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb-dri2-0_1.14-3_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb-dri2-0-dev_1.14-3_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb-dri3-0_1.14-3_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb-dri3-dev_1.14-3_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb-glx0_1.14-3_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb-glx0-dev_1.14-3_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb-present0_1.14-3_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb-present-dev_1.14-3_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb-render0_1.14-3_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb-render0-dev_1.14-3_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb-shm0_1.14-3_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb-shm0-dev_1.14-3_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb-sync1_1.14-3_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb-xfixes0_1.14-3_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcomposite/libxcomposite1_0.4.5-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcomposite/libxcomposite-dev_0.4.5-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcursor/libxcursor1_1.2.0-2_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcursor/libxcursor-dev_1.2.0-2_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxdamage/libxdamage1_1.1.5-2_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxdamage/libxdamage-dev_1.1.5-2_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxdmcp/libxdmcp6_1.1.2-3_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxdmcp/libxdmcp-dev_1.1.2-3_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxext/libxext6_1.3.3-1.1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxext/libxext-dev_1.3.3-1.1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxfixes/libxfixes3_5.0.3-2_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxfixes/libxfixes-dev_5.0.3-2_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxi/libxi6_1.7.10-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxi/libxi-dev_1.7.10-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxinerama/libxinerama1_1.1.4-2_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxinerama/libxinerama-dev_1.1.4-2_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxkbcommon/libxkbcommon0_1.0.3-2_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxkbcommon/libxkbcommon-dev_1.0.3-2_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxml2/libxml2_2.9.10+dfsg-6.7_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxml2/libxml2-dev_2.9.10+dfsg-6.7_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxrandr/libxrandr2_1.5.1-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxrandr/libxrandr-dev_1.5.1-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxrender/libxrender1_0.9.10-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxrender/libxrender-dev_0.9.10-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxshmfence/libxshmfence1_1.3-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxshmfence/libxshmfence-dev_1.3-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxslt/libxslt1.1_1.1.34-4_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxslt/libxslt1-dev_1.1.34-4_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxss/libxss1_1.2.3-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxss/libxss-dev_1.2.3-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxt/libxt6_1.2.0-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxt/libxt-dev_1.2.0-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxtst/libxtst6_1.2.3-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxtst/libxtst-dev_1.2.3-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxxf86vm/libxxf86vm1_1.1.4-1+b2_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxxf86vm/libxxf86vm-dev_1.1.4-1+b2_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libz/libzstd/libzstd1_1.4.8+dfsg-2.1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/l/lcms2/liblcms2-2_2.12~rc1-2_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/l/linux/linux-libc-dev_5.10.46-4_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/l/lz4/liblz4-1_1.9.3-2_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/l/lzo2/liblzo2-2_2.10-2_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/m/mesa/libegl1-mesa_20.3.5-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/m/mesa/libegl1-mesa-dev_20.3.5-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/m/mesa/libgbm1_20.3.5-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/m/mesa/libgbm-dev_20.3.5-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/m/mesa/libgl1-mesa-dev_20.3.5-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/m/mesa/libgl1-mesa-glx_20.3.5-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/m/mesa/libglapi-mesa_20.3.5-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/m/mesa/libwayland-egl1-mesa_20.3.5-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/m/mesa/mesa-common-dev_20.3.5-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/m/minizip/libminizip1_1.1-8+b1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/m/minizip/libminizip-dev_1.1-8+b1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/m/mtdev/libmtdev1_1.1.6-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/n/ncurses/libncurses6_6.2+20201114-2_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/n/ncurses/libncurses-dev_6.2+20201114-2_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/n/ncurses/libncursesw6_6.2+20201114-2_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/n/ncurses/libtinfo6_6.2+20201114-2_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/n/nettle/libhogweed6_3.7.3-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/n/nettle/libnettle8_3.7.3-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/n/nghttp2/libnghttp2-14_1.43.0-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/n/nspr/libnspr4_4.32-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/n/nspr/libnspr4-dev_4.32-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/n/nss/libnss3_3.68-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/n/nss/libnss3-dev_3.68-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/o/openldap/libldap-2.4-2_2.4.57+dfsg-3_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/o/openssl/libssl1.1_1.1.1k-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/o/openssl/libssl-dev_1.1.1k-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/o/opus/libopus0_1.3.1-0.1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/o/opus/libopus-dev_1.3.1-0.1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/p11-kit/libp11-kit0_0.23.22-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pam/libpam0g_1.4.0-9_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pam/libpam0g-dev_1.4.0-9_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pango1.0/libpango-1.0-0_1.46.2-3_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pango1.0/libpango1.0-dev_1.46.2-3_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pango1.0/libpangocairo-1.0-0_1.46.2-3_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pango1.0/libpangoft2-1.0-0_1.46.2-3_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pango1.0/libpangoxft-1.0-0_1.46.2-3_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pangox-compat/libpangox-1.0-0_0.0.2-5.1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pciutils/libpci3_3.7.0-5_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pciutils/libpci-dev_3.7.0-5_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pcre2/libpcre2-16-0_10.36-2_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pcre2/libpcre2-32-0_10.36-2_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pcre2/libpcre2-8-0_10.36-2_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pcre2/libpcre2-dev_10.36-2_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pcre2/libpcre2-posix0_10.22-3_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pcre2/libpcre2-posix2_10.36-2_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pcre3/libpcre16-3_8.39-13_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pcre3/libpcre32-3_8.39-13_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pcre3/libpcre3_8.39-13_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pcre3/libpcre3-dev_8.39-13_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pcre3/libpcrecpp0v5_8.39-13_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pipewire/libpipewire-0.3-0_0.3.33-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pipewire/libpipewire-0.3-dev_0.3.33-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pipewire/libspa-0.2-dev_0.3.33-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pixman/libpixman-1-0_0.40.0-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pixman/libpixman-1-dev_0.40.0-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pulseaudio/libpulse0_14.2-2_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pulseaudio/libpulse-dev_14.2-2_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pulseaudio/libpulse-mainloop-glib0_14.2-2_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/r/re2/libre2-9_20210801+dfsg-2_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/r/re2/libre2-dev_20210801+dfsg-2_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/r/rtmpdump/librtmp1_2.4+20151223.gitfa8646d.1-2+b2_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/s/shared-mime-info/shared-mime-info_2.0-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/s/snappy/libsnappy1v5_1.1.8-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/s/snappy/libsnappy-dev_1.1.8-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/s/speech-dispatcher/libspeechd2_0.10.2-2_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/s/speech-dispatcher/libspeechd-dev_0.10.2-2_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/s/sqlite3/libsqlite3-0_3.34.1-3_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/s/systemd/libsystemd0_247.9-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/s/systemd/libudev1_247.9-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/s/systemd/libudev-dev_247.9-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/t/tcp-wrappers/libwrap0_7.6.q-31_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/t/tiff/libtiff5_4.2.0-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/t/tiff/libtiff-dev_4.2.0-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/t/tiff/libtiffxx5_4.2.0-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/u/unbound/libunbound8_1.13.1-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/u/util-linux/libblkid1_2.36.1-8_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/u/util-linux/libblkid-dev_2.36.1-8_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/u/util-linux/libmount1_2.36.1-8_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/u/util-linux/libmount-dev_2.36.1-8_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/u/util-linux/libuuid1_2.36.1-8_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/u/util-linux/uuid-dev_2.36.1-8_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/v/valgrind/valgrind_3.16.1-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/v/vulkan-loader/libvulkan1_1.2.162.0-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/v/vulkan-loader/libvulkan-dev_1.2.162.0-1_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/w/wayland/libwayland-client0_1.19.0-2_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/w/wayland/libwayland-cursor0_1.19.0-2_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/w/wayland/libwayland-dev_1.19.0-2_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/w/wayland/libwayland-egl1_1.19.0-2_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/w/wayland/libwayland-server0_1.19.0-2_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/w/wayland-protocols/wayland-protocols_1.20-1_all.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/x/x11proto-composite/x11proto-composite-dev_0.4.2-2_all.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/x/x11proto-damage/x11proto-damage-dev_1.2.1-2_all.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/x/x11proto-fixes/x11proto-fixes-dev_5.0-2_all.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/x/xft/libxft2_2.3.2-2_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/x/xft/libxft-dev_2.3.2-2_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/x/xorgproto/x11proto-dev_2020.1-1_all.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/x/xorgproto/x11proto-input-dev_2020.1-1_all.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/x/xorgproto/x11proto-kb-dev_2020.1-1_all.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/x/xorgproto/x11proto-randr-dev_2020.1-1_all.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/x/xorgproto/x11proto-record-dev_2020.1-1_all.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/x/xorgproto/x11proto-render-dev_2020.1-1_all.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/x/xorgproto/x11proto-scrnsaver-dev_2020.1-1_all.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/x/xorgproto/x11proto-xext-dev_2020.1-1_all.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/x/xorgproto/x11proto-xinerama-dev_2020.1-1_all.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/x/xz-utils/liblzma5_5.2.5-2_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/z/zlib/zlib1g_1.2.11.dfsg-2_i386.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/z/zlib/zlib1g-dev_1.2.11.dfsg-2_i386.deb diff --git a/build/linux/sysroot_scripts/generated_package_lists/sid.mips64el b/build/linux/sysroot_scripts/generated_package_lists/sid.mips64el deleted file mode 100644 index aee8097..0000000 --- a/build/linux/sysroot_scripts/generated_package_lists/sid.mips64el +++ /dev/null @@ -1,365 +0,0 @@ -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/a/alsa-lib/libasound2_1.2.5.1-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/a/alsa-lib/libasound2-dev_1.2.5.1-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/a/atk1.0/libatk1.0-0_2.36.0-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/a/atk1.0/libatk1.0-dev_2.36.0-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/a/at-spi2-atk/libatk-bridge2.0-0_2.38.0-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/a/at-spi2-atk/libatk-bridge2.0-dev_2.38.0-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/a/at-spi2-core/libatspi2.0-0_2.40.3-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/a/at-spi2-core/libatspi2.0-dev_2.40.3-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/a/attr/libattr1_2.4.48-6_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/a/audit/libaudit1_3.0.5-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/a/avahi/libavahi-client3_0.8-5_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/a/avahi/libavahi-common3_0.8-5_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/b/bluez/libbluetooth3_5.55-3.1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/b/bluez/libbluetooth-dev_5.55-3.1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/b/brotli/libbrotli1_1.0.9-2+b2_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/b/brotli/libbrotli-dev_1.0.9-2+b2_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/c/cairo/libcairo2_1.16.0-5_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/c/cairo/libcairo2-dev_1.16.0-5_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/c/cairo/libcairo-gobject2_1.16.0-5_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/c/cairo/libcairo-script-interpreter2_1.16.0-5_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/c/colord/libcolord2_1.4.5-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/c/cups/libcups2_2.3.3op2-3+deb11u1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/c/cups/libcups2-dev_2.3.3op2-3+deb11u1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/c/cups/libcupsimage2_2.3.3op2-3+deb11u1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/c/cups/libcupsimage2-dev_2.3.3op2-3+deb11u1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/c/curl/libcurl3-gnutls_7.74.0-1.3+b1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/c/curl/libcurl4-gnutls-dev_7.74.0-1.3+b1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/c/cyrus-sasl2/libsasl2-2_2.1.27+dfsg-2.1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/d/db5.3/libdb5.3_5.3.28+dfsg1-0.8_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/d/dbus-glib/libdbus-glib-1-2_0.112-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/d/dbus/libdbus-1-3_1.12.20-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/d/dbus/libdbus-1-dev_1.12.20-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/e/e2fsprogs/comerr-dev_2.1-1.46.2-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/e/e2fsprogs/libcom-err2_1.46.2-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/e/elfutils/libelf1_0.185-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/e/elfutils/libelf-dev_0.185-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/e/expat/libexpat1_2.2.10-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/e/expat/libexpat1-dev_2.2.10-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/f/flac/libflac8_1.3.3-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/f/flac/libflac-dev_1.3.3-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/f/fontconfig/libfontconfig1_2.13.1-4.2_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/f/fontconfig/libfontconfig-dev_2.13.1-4.2_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/f/freetype/libfreetype6_2.10.4+dfsg-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/f/freetype/libfreetype-dev_2.10.4+dfsg-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/f/fribidi/libfribidi0_1.0.8-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/f/fribidi/libfribidi-dev_1.0.8-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gcc-10/libatomic1_10.2.1-6_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gcc-10/libgcc-10-dev_10.2.1-6_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gcc-10/libgomp1_10.2.1-6_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gcc-10/libstdc++-10-dev_10.2.1-6_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gcc-10/libstdc++6_10.2.1-6_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gcc-6/libgcc1_6.3.0-18+deb9u1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gdk-pixbuf/libgdk-pixbuf-2.0-0_2.42.6+dfsg-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gdk-pixbuf/libgdk-pixbuf-2.0-dev_2.42.6+dfsg-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/glib2.0/libglib2.0-0_2.68.3-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/glib2.0/libglib2.0-dev_2.68.3-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/glibc/libc6_2.31-16_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/glibc/libc6-dev_2.31-16_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gmp/libgmp10_6.2.1+dfsg-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gnutls28/libgnutls28-dev_3.7.1-5_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gnutls28/libgnutls30_3.7.1-5_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gnutls28/libgnutls-dane0_3.7.1-5_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gnutls28/libgnutls-openssl27_3.7.1-5_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gnutls28/libgnutlsxx28_3.7.1-5_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/graphene/libgraphene-1.0-0_1.10.4+dfsg1-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/graphene/libgraphene-1.0-dev_1.10.4+dfsg1-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/graphite2/libgraphite2-3_1.3.14-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/graphite2/libgraphite2-dev_1.3.14-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gtk+2.0/libgtk2.0-0_2.24.33-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gtk+3.0/libgtk-3-0_3.24.30-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gtk+3.0/libgtk-3-dev_3.24.30-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/h/harfbuzz/libharfbuzz0b_2.7.4-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/h/harfbuzz/libharfbuzz-dev_2.7.4-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/h/harfbuzz/libharfbuzz-gobject0_2.7.4-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/h/harfbuzz/libharfbuzz-icu0_2.7.4-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/i/icu-le-hb/libicu-le-hb0_1.0.3+git180724-3+b2_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/i/icu/libicu67_67.1-7_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/j/jbigkit/libjbig0_2.1-3.1+b2_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/j/jbigkit/libjbig-dev_2.1-3.1+b2_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/j/json-glib/libjson-glib-1.0-0_1.6.2-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/k/keyutils/libkeyutils1_1.6.1-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/k/krb5/krb5-multidev_1.18.3-6_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/k/krb5/libgssapi-krb5-2_1.18.3-6_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/k/krb5/libgssrpc4_1.18.3-6_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/k/krb5/libk5crypto3_1.18.3-6_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/k/krb5/libkadm5clnt-mit12_1.18.3-6_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/k/krb5/libkadm5srv-mit12_1.18.3-6_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/k/krb5/libkdb5-10_1.18.3-6_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/k/krb5/libkrb5-3_1.18.3-6_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/k/krb5/libkrb5-dev_1.18.3-6_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/k/krb5/libkrb5support0_1.18.3-6_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/liba/libappindicator/libappindicator1_0.4.92-8_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/liba/libappindicator/libappindicator3-1_0.4.92-8_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/liba/libappindicator/libappindicator3-dev_0.4.92-8_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/liba/libappindicator/libappindicator-dev_0.4.92-8_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/liba/libasyncns/libasyncns0_0.8-6+b2_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libb/libbsd/libbsd0_0.11.3-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libc/libcap2/libcap2_2.44-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libc/libcap2/libcap-dev_2.44-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libc/libcap-ng/libcap-ng0_0.7.9-2.2+b1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libc/libcloudproviders/libcloudproviders0_0.3.0-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libd/libdatrie/libdatrie1_0.2.13-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libd/libdatrie/libdatrie-dev_0.2.13-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libd/libdbusmenu/libdbusmenu-glib4_18.10.20180917~bzr492+repack1-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libd/libdbusmenu/libdbusmenu-glib-dev_18.10.20180917~bzr492+repack1-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libd/libdbusmenu/libdbusmenu-gtk3-4_18.10.20180917~bzr492+repack1-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libd/libdbusmenu/libdbusmenu-gtk4_18.10.20180917~bzr492+repack1-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libd/libdeflate/libdeflate0_1.7-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libd/libdeflate/libdeflate-dev_1.7-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libd/libdrm/libdrm2_2.4.104-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libd/libdrm/libdrm-amdgpu1_2.4.104-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libd/libdrm/libdrm-dev_2.4.104-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libd/libdrm/libdrm-nouveau2_2.4.104-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libd/libdrm/libdrm-radeon1_2.4.104-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libe/libepoxy/libepoxy0_1.5.8-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libe/libepoxy/libepoxy-dev_1.5.8-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libe/libevdev/libevdev2_1.11.0+dfsg-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libe/libevdev/libevdev-dev_1.11.0+dfsg-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libe/libevent/libevent-2.1-7_2.1.12-stable-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libf/libffi/libffi6_3.2.1-9_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libf/libffi/libffi7_3.3-6_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libf/libffi/libffi8_3.4.2-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libf/libffi/libffi-dev_3.3-6_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libgcrypt20/libgcrypt20_1.8.7-6_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libgcrypt20/libgcrypt20-dev_1.8.7-6_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libglvnd/libegl1_1.3.2-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libglvnd/libegl-dev_1.3.2-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libglvnd/libgl1_1.3.2-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libglvnd/libgl-dev_1.3.2-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libglvnd/libgles1_1.3.2-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libglvnd/libgles2_1.3.2-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libglvnd/libgles-dev_1.3.2-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libglvnd/libglvnd0_1.3.2-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libglvnd/libglvnd-dev_1.3.2-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libglvnd/libglx0_1.3.2-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libglvnd/libglx-dev_1.3.2-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libglvnd/libopengl0_1.3.2-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libgnome-keyring/libgnome-keyring0_3.12.0-1+b2_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libgnome-keyring/libgnome-keyring-dev_3.12.0-1+b2_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libgpg-error/libgpg-error0_1.38-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libgpg-error/libgpg-error-dev_1.38-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libgudev/libgudev-1.0-0_234-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libi/libice/libice6_1.0.10-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libi/libidl/libidl-2-0_0.8.14-4+b12_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libi/libidn2/libidn2-0_2.3.2-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libi/libidn/libidn11_1.33-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libi/libindicator/libindicator3-7_0.5.0-4_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libi/libindicator/libindicator7_0.5.0-4_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libi/libinput/libinput10_1.16.4-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libi/libinput/libinput-dev_1.16.4-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libj/libjpeg-turbo/libjpeg62-turbo_2.0.6-4_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libj/libjpeg-turbo/libjpeg62-turbo-dev_2.0.6-4_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libj/libjsoncpp/libjsoncpp24_1.9.4-4_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libj/libjsoncpp/libjsoncpp-dev_1.9.4-4_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libm/libmd/libmd0_1.0.3-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libn/libnsl/libnsl2_1.3.0-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libn/libnss-db/libnss-db_2.2.3pre1-6+b10_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libo/libogg/libogg0_1.3.4-0.1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libo/libogg/libogg-dev_1.3.4-0.1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libp/libpciaccess/libpciaccess0_0.16-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libp/libpng1.6/libpng16-16_1.6.37-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libp/libpng1.6/libpng-dev_1.6.37-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libp/libpsl/libpsl5_0.21.0-1.2_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libp/libpthread-stubs/libpthread-stubs0-dev_0.4-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libr/librest/librest-0.7-0_0.8.1-1.1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libs/libselinux/libselinux1_3.1-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libs/libselinux/libselinux1-dev_3.1-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libs/libsepol/libsepol1_3.1-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libs/libsepol/libsepol1-dev_3.1-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libs/libsm/libsm6_1.2.3-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libs/libsndfile/libsndfile1_1.0.31-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libs/libsoup2.4/libsoup2.4-1_2.72.0-4_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libs/libsoup2.4/libsoup-gnome2.4-1_2.72.0-4_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libs/libssh2/libssh2-1_1.9.0-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libt/libtasn1-6/libtasn1-6_4.16.0-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libt/libthai/libthai0_0.1.28-4_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libt/libthai/libthai-dev_0.1.28-4_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libt/libtirpc/libtirpc3_1.3.2-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libt/libtool/libltdl7_2.4.6-15_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libu/libunistring/libunistring2_0.9.10-6_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libu/libutempter/libutempter0_1.2.1-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libu/libutempter/libutempter-dev_1.2.1-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libv/libva/libva2_2.12.0-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libv/libva/libva-dev_2.12.0-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libv/libva/libva-drm2_2.12.0-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libv/libva/libva-glx2_2.12.0-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libv/libva/libva-wayland2_2.12.0-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libv/libva/libva-x11-2_2.12.0-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libv/libvorbis/libvorbis0a_1.3.7-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libv/libvorbis/libvorbisenc2_1.3.7-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libw/libwacom/libwacom2_1.8-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libw/libwebp/libwebp6_0.6.1-2.1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libw/libwebp/libwebpdemux2_0.6.1-2.1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libw/libwebp/libwebp-dev_0.6.1-2.1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libw/libwebp/libwebpmux3_0.6.1-2.1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libx11/libx11-6_1.7.2-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libx11/libx11-dev_1.7.2-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libx11/libx11-xcb1_1.7.2-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libx11/libx11-xcb-dev_1.7.2-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxau/libxau6_1.0.9-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxau/libxau-dev_1.0.9-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb1_1.14-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb1-dev_1.14-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb-dri2-0_1.14-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb-dri2-0-dev_1.14-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb-dri3-0_1.14-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb-dri3-dev_1.14-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb-glx0_1.14-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb-glx0-dev_1.14-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb-present0_1.14-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb-present-dev_1.14-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb-render0_1.14-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb-render0-dev_1.14-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb-shm0_1.14-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb-shm0-dev_1.14-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb-sync1_1.14-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb-xfixes0_1.14-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcomposite/libxcomposite1_0.4.5-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcomposite/libxcomposite-dev_0.4.5-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcursor/libxcursor1_1.2.0-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcursor/libxcursor-dev_1.2.0-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxdamage/libxdamage1_1.1.5-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxdamage/libxdamage-dev_1.1.5-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxdmcp/libxdmcp6_1.1.2-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxdmcp/libxdmcp-dev_1.1.2-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxext/libxext6_1.3.3-1.1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxext/libxext-dev_1.3.3-1.1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxfixes/libxfixes3_5.0.3-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxfixes/libxfixes-dev_5.0.3-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxi/libxi6_1.7.10-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxi/libxi-dev_1.7.10-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxinerama/libxinerama1_1.1.4-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxinerama/libxinerama-dev_1.1.4-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxkbcommon/libxkbcommon0_1.0.3-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxkbcommon/libxkbcommon-dev_1.0.3-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxml2/libxml2_2.9.10+dfsg-6.7_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxml2/libxml2-dev_2.9.10+dfsg-6.7_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxrandr/libxrandr2_1.5.1-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxrandr/libxrandr-dev_1.5.1-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxrender/libxrender1_0.9.10-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxrender/libxrender-dev_0.9.10-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxshmfence/libxshmfence1_1.3-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxshmfence/libxshmfence-dev_1.3-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxslt/libxslt1.1_1.1.34-4_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxslt/libxslt1-dev_1.1.34-4_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxss/libxss1_1.2.3-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxss/libxss-dev_1.2.3-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxt/libxt6_1.2.0-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxt/libxt-dev_1.2.0-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxtst/libxtst6_1.2.3-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxtst/libxtst-dev_1.2.3-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxxf86vm/libxxf86vm1_1.1.4-1+b2_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxxf86vm/libxxf86vm-dev_1.1.4-1+b2_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libz/libzstd/libzstd1_1.4.8+dfsg-2.1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/l/lcms2/liblcms2-2_2.12~rc1-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/l/linux/linux-libc-dev_5.10.46-4_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/l/lz4/liblz4-1_1.9.3-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/l/lzo2/liblzo2-2_2.10-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/m/mesa/libegl1-mesa_20.3.5-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/m/mesa/libegl1-mesa-dev_20.3.5-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/m/mesa/libgbm1_20.3.5-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/m/mesa/libgbm-dev_20.3.5-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/m/mesa/libgl1-mesa-dev_20.3.5-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/m/mesa/libgl1-mesa-glx_20.3.5-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/m/mesa/libglapi-mesa_20.3.5-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/m/mesa/libwayland-egl1-mesa_20.3.5-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/m/mesa/mesa-common-dev_20.3.5-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/m/minizip/libminizip1_1.1-8+b1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/m/minizip/libminizip-dev_1.1-8+b1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/m/mtdev/libmtdev1_1.1.6-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/n/ncurses/libncurses6_6.2+20201114-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/n/ncurses/libncurses-dev_6.2+20201114-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/n/ncurses/libncursesw6_6.2+20201114-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/n/ncurses/libtinfo6_6.2+20201114-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/n/nettle/libhogweed6_3.7.3-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/n/nettle/libnettle8_3.7.3-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/n/nghttp2/libnghttp2-14_1.43.0-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/n/nspr/libnspr4_4.32-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/n/nspr/libnspr4-dev_4.32-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/n/nss/libnss3_3.68-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/n/nss/libnss3-dev_3.68-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/o/openldap/libldap-2.4-2_2.4.57+dfsg-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/o/openssl/libssl1.1_1.1.1k-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/o/openssl/libssl-dev_1.1.1k-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/o/opus/libopus0_1.3.1-0.1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/o/opus/libopus-dev_1.3.1-0.1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/p11-kit/libp11-kit0_0.23.22-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pam/libpam0g_1.4.0-9_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pam/libpam0g-dev_1.4.0-9_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pango1.0/libpango-1.0-0_1.46.2-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pango1.0/libpango1.0-dev_1.46.2-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pango1.0/libpangocairo-1.0-0_1.46.2-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pango1.0/libpangoft2-1.0-0_1.46.2-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pango1.0/libpangoxft-1.0-0_1.46.2-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pangox-compat/libpangox-1.0-0_0.0.2-5.1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pciutils/libpci3_3.7.0-5_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pciutils/libpci-dev_3.7.0-5_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pcre2/libpcre2-16-0_10.36-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pcre2/libpcre2-32-0_10.36-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pcre2/libpcre2-8-0_10.36-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pcre2/libpcre2-dev_10.36-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pcre2/libpcre2-posix0_10.22-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pcre2/libpcre2-posix2_10.36-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pcre3/libpcre16-3_8.39-13_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pcre3/libpcre32-3_8.39-13_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pcre3/libpcre3_8.39-13_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pcre3/libpcre3-dev_8.39-13_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pcre3/libpcrecpp0v5_8.39-13_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pipewire/libpipewire-0.3-0_0.3.33-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pipewire/libpipewire-0.3-dev_0.3.33-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pipewire/libspa-0.2-dev_0.3.33-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pixman/libpixman-1-0_0.40.0-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pixman/libpixman-1-dev_0.40.0-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pulseaudio/libpulse0_14.2-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pulseaudio/libpulse-dev_14.2-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pulseaudio/libpulse-mainloop-glib0_14.2-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/r/re2/libre2-9_20210801+dfsg-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/r/re2/libre2-dev_20210801+dfsg-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/r/rtmpdump/librtmp1_2.4+20151223.gitfa8646d.1-2+b2_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/s/shared-mime-info/shared-mime-info_2.0-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/s/snappy/libsnappy1v5_1.1.8-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/s/snappy/libsnappy-dev_1.1.8-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/s/speech-dispatcher/libspeechd2_0.10.2-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/s/speech-dispatcher/libspeechd-dev_0.10.2-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/s/sqlite3/libsqlite3-0_3.34.1-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/s/systemd/libsystemd0_247.9-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/s/systemd/libudev1_247.9-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/s/systemd/libudev-dev_247.9-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/t/tcp-wrappers/libwrap0_7.6.q-31_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/t/tiff/libtiff5_4.2.0-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/t/tiff/libtiff-dev_4.2.0-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/t/tiff/libtiffxx5_4.2.0-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/u/unbound/libunbound8_1.13.1-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/u/util-linux/libblkid1_2.36.1-8_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/u/util-linux/libblkid-dev_2.36.1-8_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/u/util-linux/libmount1_2.36.1-8_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/u/util-linux/libmount-dev_2.36.1-8_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/u/util-linux/libuuid1_2.36.1-8_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/u/util-linux/uuid-dev_2.36.1-8_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/v/valgrind/valgrind_3.16.1-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/v/vulkan-loader/libvulkan1_1.2.162.0-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/v/vulkan-loader/libvulkan-dev_1.2.162.0-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/w/wayland/libwayland-client0_1.19.0-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/w/wayland/libwayland-cursor0_1.19.0-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/w/wayland/libwayland-dev_1.19.0-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/w/wayland/libwayland-egl1_1.19.0-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/w/wayland/libwayland-server0_1.19.0-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/w/wayland-protocols/wayland-protocols_1.20-1_all.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/x/x11proto-composite/x11proto-composite-dev_0.4.2-2_all.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/x/x11proto-damage/x11proto-damage-dev_1.2.1-2_all.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/x/x11proto-fixes/x11proto-fixes-dev_5.0-2_all.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/x/xft/libxft2_2.3.2-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/x/xft/libxft-dev_2.3.2-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/x/xorgproto/x11proto-dev_2020.1-1_all.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/x/xorgproto/x11proto-input-dev_2020.1-1_all.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/x/xorgproto/x11proto-kb-dev_2020.1-1_all.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/x/xorgproto/x11proto-randr-dev_2020.1-1_all.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/x/xorgproto/x11proto-record-dev_2020.1-1_all.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/x/xorgproto/x11proto-render-dev_2020.1-1_all.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/x/xorgproto/x11proto-scrnsaver-dev_2020.1-1_all.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/x/xorgproto/x11proto-xext-dev_2020.1-1_all.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/x/xorgproto/x11proto-xinerama-dev_2020.1-1_all.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/x/xz-utils/liblzma5_5.2.5-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/z/zlib/zlib1g_1.2.11.dfsg-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/z/zlib/zlib1g-dev_1.2.11.dfsg-2_mips64el.deb diff --git a/build/linux/sysroot_scripts/generated_package_lists/sid.mipsel b/build/linux/sysroot_scripts/generated_package_lists/sid.mipsel deleted file mode 100644 index 626b7f2..0000000 --- a/build/linux/sysroot_scripts/generated_package_lists/sid.mipsel +++ /dev/null @@ -1,364 +0,0 @@ -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/a/alsa-lib/libasound2_1.2.5.1-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/a/alsa-lib/libasound2-dev_1.2.5.1-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/a/atk1.0/libatk1.0-0_2.36.0-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/a/atk1.0/libatk1.0-dev_2.36.0-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/a/at-spi2-atk/libatk-bridge2.0-0_2.38.0-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/a/at-spi2-atk/libatk-bridge2.0-dev_2.38.0-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/a/at-spi2-core/libatspi2.0-0_2.40.3-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/a/at-spi2-core/libatspi2.0-dev_2.40.3-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/a/attr/libattr1_2.4.48-6_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/a/audit/libaudit1_3.0.5-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/a/avahi/libavahi-client3_0.8-5_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/a/avahi/libavahi-common3_0.8-5_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/b/bluez/libbluetooth3_5.55-3.1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/b/bluez/libbluetooth-dev_5.55-3.1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/b/brotli/libbrotli1_1.0.9-2+b2_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/b/brotli/libbrotli-dev_1.0.9-2+b2_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/c/cairo/libcairo2_1.16.0-5_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/c/cairo/libcairo2-dev_1.16.0-5_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/c/cairo/libcairo-gobject2_1.16.0-5_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/c/cairo/libcairo-script-interpreter2_1.16.0-5_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/c/colord/libcolord2_1.4.5-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/c/cups/libcups2_2.3.3op2-3+deb11u1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/c/cups/libcups2-dev_2.3.3op2-3+deb11u1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/c/cups/libcupsimage2_2.3.3op2-3+deb11u1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/c/cups/libcupsimage2-dev_2.3.3op2-3+deb11u1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/c/curl/libcurl3-gnutls_7.74.0-1.3+b1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/c/curl/libcurl4-gnutls-dev_7.74.0-1.3+b1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/c/cyrus-sasl2/libsasl2-2_2.1.27+dfsg-2.1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/d/db5.3/libdb5.3_5.3.28+dfsg1-0.8_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/d/dbus-glib/libdbus-glib-1-2_0.112-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/d/dbus/libdbus-1-3_1.12.20-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/d/dbus/libdbus-1-dev_1.12.20-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/e/e2fsprogs/comerr-dev_2.1-1.46.2-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/e/e2fsprogs/libcom-err2_1.46.2-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/e/elfutils/libelf1_0.185-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/e/elfutils/libelf-dev_0.185-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/e/expat/libexpat1_2.2.10-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/e/expat/libexpat1-dev_2.2.10-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/f/flac/libflac8_1.3.3-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/f/flac/libflac-dev_1.3.3-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/f/fontconfig/libfontconfig1_2.13.1-4.2_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/f/fontconfig/libfontconfig-dev_2.13.1-4.2_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/f/freetype/libfreetype6_2.10.4+dfsg-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/f/freetype/libfreetype-dev_2.10.4+dfsg-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/f/fribidi/libfribidi0_1.0.8-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/f/fribidi/libfribidi-dev_1.0.8-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gcc-10/libatomic1_10.2.1-6_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gcc-10/libgcc-10-dev_10.2.1-6_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gcc-10/libgomp1_10.2.1-6_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gcc-10/libstdc++-10-dev_10.2.1-6_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gcc-10/libstdc++6_10.2.1-6_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gcc-6/libgcc1_6.3.0-18+deb9u1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gdk-pixbuf/libgdk-pixbuf-2.0-0_2.42.6+dfsg-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gdk-pixbuf/libgdk-pixbuf-2.0-dev_2.42.6+dfsg-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/glib2.0/libglib2.0-0_2.68.3-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/glib2.0/libglib2.0-dev_2.68.3-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/glibc/libc6_2.31-16_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/glibc/libc6-dev_2.31-16_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gmp/libgmp10_6.2.1+dfsg-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gnutls28/libgnutls28-dev_3.7.1-5_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gnutls28/libgnutls30_3.7.1-5_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gnutls28/libgnutls-dane0_3.7.1-5_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gnutls28/libgnutls-openssl27_3.7.1-5_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gnutls28/libgnutlsxx28_3.7.1-5_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/graphene/libgraphene-1.0-0_1.10.4+dfsg1-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/graphene/libgraphene-1.0-dev_1.10.4+dfsg1-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/graphite2/libgraphite2-3_1.3.14-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/graphite2/libgraphite2-dev_1.3.14-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gtk+2.0/libgtk2.0-0_2.24.33-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gtk+3.0/libgtk-3-0_3.24.30-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/g/gtk+3.0/libgtk-3-dev_3.24.30-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/h/harfbuzz/libharfbuzz0b_2.7.4-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/h/harfbuzz/libharfbuzz-dev_2.7.4-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/h/harfbuzz/libharfbuzz-gobject0_2.7.4-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/h/harfbuzz/libharfbuzz-icu0_2.7.4-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/i/icu-le-hb/libicu-le-hb0_1.0.3+git180724-3+b2_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/i/icu/libicu67_67.1-7_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/j/jbigkit/libjbig0_2.1-3.1+b2_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/j/jbigkit/libjbig-dev_2.1-3.1+b2_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/j/json-glib/libjson-glib-1.0-0_1.6.2-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/k/keyutils/libkeyutils1_1.6.1-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/k/krb5/krb5-multidev_1.18.3-6_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/k/krb5/libgssapi-krb5-2_1.18.3-6_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/k/krb5/libgssrpc4_1.18.3-6_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/k/krb5/libk5crypto3_1.18.3-6_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/k/krb5/libkadm5clnt-mit12_1.18.3-6_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/k/krb5/libkadm5srv-mit12_1.18.3-6_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/k/krb5/libkdb5-10_1.18.3-6_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/k/krb5/libkrb5-3_1.18.3-6_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/k/krb5/libkrb5-dev_1.18.3-6_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/k/krb5/libkrb5support0_1.18.3-6_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/liba/libappindicator/libappindicator1_0.4.92-8_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/liba/libappindicator/libappindicator3-1_0.4.92-8_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/liba/libappindicator/libappindicator3-dev_0.4.92-8_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/liba/libappindicator/libappindicator-dev_0.4.92-8_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/liba/libasyncns/libasyncns0_0.8-6+b2_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libb/libbsd/libbsd0_0.11.3-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libc/libcap2/libcap2_2.44-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libc/libcap2/libcap-dev_2.44-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libc/libcap-ng/libcap-ng0_0.7.9-2.2+b1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libc/libcloudproviders/libcloudproviders0_0.3.0-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libd/libdatrie/libdatrie1_0.2.13-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libd/libdatrie/libdatrie-dev_0.2.13-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libd/libdbusmenu/libdbusmenu-glib4_18.10.20180917~bzr492+repack1-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libd/libdbusmenu/libdbusmenu-glib-dev_18.10.20180917~bzr492+repack1-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libd/libdbusmenu/libdbusmenu-gtk3-4_18.10.20180917~bzr492+repack1-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libd/libdbusmenu/libdbusmenu-gtk4_18.10.20180917~bzr492+repack1-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libd/libdeflate/libdeflate0_1.7-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libd/libdeflate/libdeflate-dev_1.7-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libd/libdrm/libdrm2_2.4.104-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libd/libdrm/libdrm-amdgpu1_2.4.104-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libd/libdrm/libdrm-dev_2.4.104-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libd/libdrm/libdrm-nouveau2_2.4.104-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libd/libdrm/libdrm-radeon1_2.4.104-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libe/libepoxy/libepoxy0_1.5.8-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libe/libepoxy/libepoxy-dev_1.5.8-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libe/libevdev/libevdev2_1.11.0+dfsg-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libe/libevdev/libevdev-dev_1.11.0+dfsg-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libe/libevent/libevent-2.1-7_2.1.12-stable-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libf/libffi/libffi6_3.2.1-9_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libf/libffi/libffi7_3.3-6_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libf/libffi/libffi8_3.4.2-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libf/libffi/libffi-dev_3.3-6_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libgcrypt20/libgcrypt20_1.8.7-6_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libgcrypt20/libgcrypt20-dev_1.8.7-6_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libglvnd/libegl1_1.3.2-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libglvnd/libegl-dev_1.3.2-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libglvnd/libgl1_1.3.2-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libglvnd/libgl-dev_1.3.2-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libglvnd/libgles1_1.3.2-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libglvnd/libgles2_1.3.2-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libglvnd/libgles-dev_1.3.2-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libglvnd/libglvnd0_1.3.2-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libglvnd/libglvnd-dev_1.3.2-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libglvnd/libglx0_1.3.2-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libglvnd/libglx-dev_1.3.2-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libglvnd/libopengl0_1.3.2-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libgnome-keyring/libgnome-keyring0_3.12.0-1+b2_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libgnome-keyring/libgnome-keyring-dev_3.12.0-1+b2_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libgpg-error/libgpg-error0_1.38-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libgpg-error/libgpg-error-dev_1.38-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libg/libgudev/libgudev-1.0-0_234-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libi/libice/libice6_1.0.10-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libi/libidl/libidl-2-0_0.8.14-4+b12_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libi/libidn2/libidn2-0_2.3.2-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libi/libidn/libidn11_1.33-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libi/libindicator/libindicator3-7_0.5.0-4_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libi/libindicator/libindicator7_0.5.0-4_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libi/libinput/libinput10_1.16.4-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libi/libinput/libinput-dev_1.16.4-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libj/libjpeg-turbo/libjpeg62-turbo_2.0.6-4_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libj/libjpeg-turbo/libjpeg62-turbo-dev_2.0.6-4_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libj/libjsoncpp/libjsoncpp24_1.9.4-4_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libj/libjsoncpp/libjsoncpp-dev_1.9.4-4_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libm/libmd/libmd0_1.0.3-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libn/libnsl/libnsl2_1.3.0-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libn/libnss-db/libnss-db_2.2.3pre1-6+b10_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libo/libogg/libogg0_1.3.4-0.1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libo/libogg/libogg-dev_1.3.4-0.1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libp/libpciaccess/libpciaccess0_0.16-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libp/libpng1.6/libpng16-16_1.6.37-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libp/libpng1.6/libpng-dev_1.6.37-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libp/libpsl/libpsl5_0.21.0-1.2_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libp/libpthread-stubs/libpthread-stubs0-dev_0.4-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libr/librest/librest-0.7-0_0.8.1-1.1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libs/libselinux/libselinux1_3.1-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libs/libselinux/libselinux1-dev_3.1-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libs/libsepol/libsepol1_3.1-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libs/libsepol/libsepol1-dev_3.1-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libs/libsm/libsm6_1.2.3-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libs/libsndfile/libsndfile1_1.0.31-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libs/libsoup2.4/libsoup2.4-1_2.72.0-4_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libs/libsoup2.4/libsoup-gnome2.4-1_2.72.0-4_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libs/libssh2/libssh2-1_1.9.0-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libt/libtasn1-6/libtasn1-6_4.16.0-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libt/libthai/libthai0_0.1.28-4_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libt/libthai/libthai-dev_0.1.28-4_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libt/libtirpc/libtirpc3_1.3.2-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libt/libtool/libltdl7_2.4.6-15_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libu/libunistring/libunistring2_0.9.10-6_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libu/libutempter/libutempter0_1.2.1-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libu/libutempter/libutempter-dev_1.2.1-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libv/libva/libva2_2.12.0-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libv/libva/libva-dev_2.12.0-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libv/libva/libva-drm2_2.12.0-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libv/libva/libva-glx2_2.12.0-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libv/libva/libva-wayland2_2.12.0-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libv/libva/libva-x11-2_2.12.0-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libv/libvorbis/libvorbis0a_1.3.7-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libv/libvorbis/libvorbisenc2_1.3.7-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libw/libwacom/libwacom2_1.8-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libw/libwebp/libwebp6_0.6.1-2.1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libw/libwebp/libwebpdemux2_0.6.1-2.1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libw/libwebp/libwebp-dev_0.6.1-2.1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libw/libwebp/libwebpmux3_0.6.1-2.1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libx11/libx11-6_1.7.2-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libx11/libx11-dev_1.7.2-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libx11/libx11-xcb1_1.7.2-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libx11/libx11-xcb-dev_1.7.2-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxau/libxau6_1.0.9-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxau/libxau-dev_1.0.9-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb1_1.14-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb1-dev_1.14-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb-dri2-0_1.14-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb-dri2-0-dev_1.14-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb-dri3-0_1.14-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb-dri3-dev_1.14-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb-glx0_1.14-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb-glx0-dev_1.14-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb-present0_1.14-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb-present-dev_1.14-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb-render0_1.14-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb-render0-dev_1.14-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb-shm0_1.14-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb-shm0-dev_1.14-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb-sync1_1.14-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcb/libxcb-xfixes0_1.14-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcomposite/libxcomposite1_0.4.5-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcomposite/libxcomposite-dev_0.4.5-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcursor/libxcursor1_1.2.0-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxcursor/libxcursor-dev_1.2.0-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxdamage/libxdamage1_1.1.5-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxdamage/libxdamage-dev_1.1.5-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxdmcp/libxdmcp6_1.1.2-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxdmcp/libxdmcp-dev_1.1.2-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxext/libxext6_1.3.3-1.1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxext/libxext-dev_1.3.3-1.1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxfixes/libxfixes3_5.0.3-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxfixes/libxfixes-dev_5.0.3-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxi/libxi6_1.7.10-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxi/libxi-dev_1.7.10-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxinerama/libxinerama1_1.1.4-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxinerama/libxinerama-dev_1.1.4-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxkbcommon/libxkbcommon0_1.0.3-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxkbcommon/libxkbcommon-dev_1.0.3-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxml2/libxml2_2.9.10+dfsg-6.7_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxml2/libxml2-dev_2.9.10+dfsg-6.7_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxrandr/libxrandr2_1.5.1-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxrandr/libxrandr-dev_1.5.1-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxrender/libxrender1_0.9.10-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxrender/libxrender-dev_0.9.10-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxshmfence/libxshmfence1_1.3-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxshmfence/libxshmfence-dev_1.3-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxslt/libxslt1.1_1.1.34-4_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxslt/libxslt1-dev_1.1.34-4_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxss/libxss1_1.2.3-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxss/libxss-dev_1.2.3-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxt/libxt6_1.2.0-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxt/libxt-dev_1.2.0-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxtst/libxtst6_1.2.3-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxtst/libxtst-dev_1.2.3-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxxf86vm/libxxf86vm1_1.1.4-1+b2_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libx/libxxf86vm/libxxf86vm-dev_1.1.4-1+b2_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/libz/libzstd/libzstd1_1.4.8+dfsg-2.1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/l/lcms2/liblcms2-2_2.12~rc1-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/l/linux/linux-libc-dev_5.10.46-4_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/l/lz4/liblz4-1_1.9.3-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/l/lzo2/liblzo2-2_2.10-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/m/mesa/libegl1-mesa_20.3.5-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/m/mesa/libegl1-mesa-dev_20.3.5-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/m/mesa/libgbm1_20.3.5-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/m/mesa/libgbm-dev_20.3.5-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/m/mesa/libgl1-mesa-dev_20.3.5-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/m/mesa/libgl1-mesa-glx_20.3.5-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/m/mesa/libglapi-mesa_20.3.5-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/m/mesa/libwayland-egl1-mesa_20.3.5-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/m/mesa/mesa-common-dev_20.3.5-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/m/minizip/libminizip1_1.1-8+b1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/m/minizip/libminizip-dev_1.1-8+b1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/m/mtdev/libmtdev1_1.1.6-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/n/ncurses/libncurses6_6.2+20201114-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/n/ncurses/libncurses-dev_6.2+20201114-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/n/ncurses/libncursesw6_6.2+20201114-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/n/ncurses/libtinfo6_6.2+20201114-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/n/nettle/libhogweed6_3.7.3-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/n/nettle/libnettle8_3.7.3-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/n/nghttp2/libnghttp2-14_1.43.0-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/n/nspr/libnspr4_4.32-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/n/nspr/libnspr4-dev_4.32-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/n/nss/libnss3_3.68-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/n/nss/libnss3-dev_3.68-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/o/openldap/libldap-2.4-2_2.4.57+dfsg-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/o/openssl/libssl1.1_1.1.1k-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/o/openssl/libssl-dev_1.1.1k-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/o/opus/libopus0_1.3.1-0.1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/o/opus/libopus-dev_1.3.1-0.1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/p11-kit/libp11-kit0_0.23.22-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pam/libpam0g_1.4.0-9_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pam/libpam0g-dev_1.4.0-9_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pango1.0/libpango-1.0-0_1.46.2-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pango1.0/libpango1.0-dev_1.46.2-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pango1.0/libpangocairo-1.0-0_1.46.2-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pango1.0/libpangoft2-1.0-0_1.46.2-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pango1.0/libpangoxft-1.0-0_1.46.2-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pangox-compat/libpangox-1.0-0_0.0.2-5.1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pciutils/libpci3_3.7.0-5_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pciutils/libpci-dev_3.7.0-5_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pcre2/libpcre2-16-0_10.36-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pcre2/libpcre2-32-0_10.36-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pcre2/libpcre2-8-0_10.36-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pcre2/libpcre2-dev_10.36-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pcre2/libpcre2-posix0_10.22-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pcre2/libpcre2-posix2_10.36-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pcre3/libpcre16-3_8.39-13_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pcre3/libpcre32-3_8.39-13_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pcre3/libpcre3_8.39-13_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pcre3/libpcre3-dev_8.39-13_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pcre3/libpcrecpp0v5_8.39-13_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pipewire/libpipewire-0.3-0_0.3.33-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pipewire/libpipewire-0.3-dev_0.3.33-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pipewire/libspa-0.2-dev_0.3.33-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pixman/libpixman-1-0_0.40.0-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pixman/libpixman-1-dev_0.40.0-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pulseaudio/libpulse0_14.2-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pulseaudio/libpulse-dev_14.2-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/p/pulseaudio/libpulse-mainloop-glib0_14.2-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/r/re2/libre2-9_20210801+dfsg-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/r/re2/libre2-dev_20210801+dfsg-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/r/rtmpdump/librtmp1_2.4+20151223.gitfa8646d.1-2+b2_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/s/shared-mime-info/shared-mime-info_2.0-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/s/snappy/libsnappy1v5_1.1.8-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/s/snappy/libsnappy-dev_1.1.8-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/s/speech-dispatcher/libspeechd2_0.10.2-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/s/speech-dispatcher/libspeechd-dev_0.10.2-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/s/sqlite3/libsqlite3-0_3.34.1-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/s/systemd/libsystemd0_247.9-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/s/systemd/libudev1_247.9-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/s/systemd/libudev-dev_247.9-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/t/tcp-wrappers/libwrap0_7.6.q-31_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/t/tiff/libtiff5_4.2.0-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/t/tiff/libtiff-dev_4.2.0-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/t/tiff/libtiffxx5_4.2.0-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/u/unbound/libunbound8_1.13.1-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/u/util-linux/libblkid1_2.36.1-8_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/u/util-linux/libblkid-dev_2.36.1-8_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/u/util-linux/libmount1_2.36.1-8_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/u/util-linux/libmount-dev_2.36.1-8_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/u/util-linux/libuuid1_2.36.1-8_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/u/util-linux/uuid-dev_2.36.1-8_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/v/vulkan-loader/libvulkan1_1.2.162.0-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/v/vulkan-loader/libvulkan-dev_1.2.162.0-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/w/wayland/libwayland-client0_1.19.0-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/w/wayland/libwayland-cursor0_1.19.0-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/w/wayland/libwayland-dev_1.19.0-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/w/wayland/libwayland-egl1_1.19.0-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/w/wayland/libwayland-server0_1.19.0-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/w/wayland-protocols/wayland-protocols_1.20-1_all.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/x/x11proto-composite/x11proto-composite-dev_0.4.2-2_all.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/x/x11proto-damage/x11proto-damage-dev_1.2.1-2_all.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/x/x11proto-fixes/x11proto-fixes-dev_5.0-2_all.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/x/xft/libxft2_2.3.2-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/x/xft/libxft-dev_2.3.2-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/x/xorgproto/x11proto-dev_2020.1-1_all.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/x/xorgproto/x11proto-input-dev_2020.1-1_all.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/x/xorgproto/x11proto-kb-dev_2020.1-1_all.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/x/xorgproto/x11proto-randr-dev_2020.1-1_all.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/x/xorgproto/x11proto-record-dev_2020.1-1_all.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/x/xorgproto/x11proto-render-dev_2020.1-1_all.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/x/xorgproto/x11proto-scrnsaver-dev_2020.1-1_all.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/x/xorgproto/x11proto-xext-dev_2020.1-1_all.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/x/xorgproto/x11proto-xinerama-dev_2020.1-1_all.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/x/xz-utils/liblzma5_5.2.5-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/z/zlib/zlib1g_1.2.11.dfsg-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20210819T144544Z/pool/main/z/zlib/zlib1g-dev_1.2.11.dfsg-2_mipsel.deb diff --git a/build/linux/sysroot_scripts/install-sysroot.py b/build/linux/sysroot_scripts/install-sysroot.py index 42842a1..a2ac830 100755 --- a/build/linux/sysroot_scripts/install-sysroot.py +++ b/build/linux/sysroot_scripts/install-sysroot.py @@ -25,34 +25,28 @@ import hashlib import json -import platform import optparse import os -import re import shutil import subprocess import sys -try: - # For Python 3.0 and later - from urllib.request import urlopen -except ImportError: - # Fall back to Python 2's urllib2 - from urllib2 import urlopen +from urllib.request import urlopen SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__)) +SRC_DIR = os.path.dirname(os.path.dirname(os.path.dirname(SCRIPT_DIR))) -URL_PREFIX = 'https://commondatastorage.googleapis.com' -URL_PATH = 'chrome-linux-sysroot/toolchain' - -VALID_ARCHS = ('arm', 'arm64', 'i386', 'amd64', 'mips', 'mips64el') +VALID_ARCHS = ('amd64', 'i386', 'armhf', 'arm64', 'armel', 'mipsel', 'mips64el') ARCH_TRANSLATIONS = { 'x64': 'amd64', 'x86': 'i386', - 'mipsel': 'mips', + 'arm': 'armhf', + 'mips': 'mipsel', 'mips64': 'mips64el', } +DEFAULT_SYSROOTS_PATH = os.path.join(os.path.relpath(SCRIPT_DIR, SRC_DIR), + 'sysroots.json') DEFAULT_TARGET_PLATFORM = 'bullseye' @@ -74,6 +68,8 @@ def GetSha1(filename): def main(args): parser = optparse.OptionParser('usage: %prog [OPTIONS]', description=__doc__) + parser.add_option('--sysroots-json-path', + help='The location of sysroots.json file') parser.add_option('--arch', help='Sysroot architecture: %s' % ', '.join(VALID_ARCHS)) parser.add_option('--all', action='store_true', @@ -83,18 +79,23 @@ def main(args): help='Print the hash of the sysroot for the given arch.') options, _ = parser.parse_args(args) + if options.sysroots_json_path: + sysroots_json_path = options.sysroots_json_path + else: + sysroots_json_path = DEFAULT_SYSROOTS_PATH + if options.print_key: arch = options.print_key print( - GetSysrootDict(DEFAULT_TARGET_PLATFORM, + GetSysrootDict(sysroots_json_path, DEFAULT_TARGET_PLATFORM, ARCH_TRANSLATIONS.get(arch, arch))['Key']) return 0 if options.arch: - InstallSysroot(DEFAULT_TARGET_PLATFORM, + InstallSysroot(sysroots_json_path, DEFAULT_TARGET_PLATFORM, ARCH_TRANSLATIONS.get(options.arch, options.arch)) elif options.all: for arch in VALID_ARCHS: - InstallSysroot(DEFAULT_TARGET_PLATFORM, arch) + InstallSysroot(sysroots_json_path, DEFAULT_TARGET_PLATFORM, arch) else: print('You much specify one of the options.') return 1 @@ -102,11 +103,11 @@ def main(args): return 0 -def GetSysrootDict(target_platform, target_arch): +def GetSysrootDict(sysroots_json_path, target_platform, target_arch): if target_arch not in VALID_ARCHS: raise Error('Unknown architecture: %s' % target_arch) - sysroots_file = os.path.join(SCRIPT_DIR, 'sysroots.json') + sysroots_file = os.path.join(SRC_DIR, sysroots_json_path) sysroots = json.load(open(sysroots_file)) sysroot_key = '%s_%s' % (target_platform, target_arch) if sysroot_key not in sysroots: @@ -114,17 +115,18 @@ def GetSysrootDict(target_platform, target_arch): return sysroots[sysroot_key] -def InstallSysroot(target_platform, target_arch): - sysroot_dict = GetSysrootDict(target_platform, target_arch) +def InstallSysroot(sysroots_json_path, target_platform, target_arch): + sysroot_dict = GetSysrootDict(sysroots_json_path, target_platform, + target_arch) tarball_filename = sysroot_dict['Tarball'] tarball_sha1sum = sysroot_dict['Sha1Sum'] + url_prefix = sysroot_dict['URL'] # TODO(thestig) Consider putting this elsewhere to avoid having to recreate # it on every build. linux_dir = os.path.dirname(SCRIPT_DIR) sysroot = os.path.join(linux_dir, sysroot_dict['SysrootDir']) - url = '%s/%s/%s/%s' % (URL_PREFIX, URL_PATH, tarball_sha1sum, - tarball_filename) + url = '%s/%s/%s' % (url_prefix, tarball_sha1sum, tarball_filename) stamp = os.path.join(sysroot, '.stamp') if os.path.exists(stamp): diff --git a/build/linux/sysroot_scripts/keyring.gpg b/build/linux/sysroot_scripts/keyring.gpg index 81e2624c5f3845a1642d9379bf47ed2221a291a4..f1119982d0fcaa155526da4e5635c7bb479c6fbc 100644 GIT binary patch delta 5876 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 rPy17l7T&713?vZ!xd{W<4nm.sh * -#@ Available modes are shown below. +#@ Usage: +#@ sysroot-creator.sh {build,upload} \ +#@ {amd64,i386,armhf,arm64,armel,mipsel,mips64el} #@ -#@ List of modes: ###################################################################### # Config @@ -27,30 +18,499 @@ set -o nounset set -o errexit -SCRIPT_DIR=$(cd $(dirname $0) && pwd) - -if [ -z "${DIST:-}" ]; then - echo "error: DIST not defined" - exit 1 -fi - -if [ -z "${KEYRING_FILE:-}" ]; then - echo "error: KEYRING_FILE not defined" - exit 1 -fi - -if [ -z "${DEBIAN_PACKAGES:-}" ]; then - echo "error: DEBIAN_PACKAGES not defined" - exit 1 -fi - -readonly HAS_ARCH_AMD64=${HAS_ARCH_AMD64:=0} -readonly HAS_ARCH_I386=${HAS_ARCH_I386:=0} -readonly HAS_ARCH_ARM=${HAS_ARCH_ARM:=0} -readonly HAS_ARCH_ARM64=${HAS_ARCH_ARM64:=0} -readonly HAS_ARCH_ARMEL=${HAS_ARCH_ARMEL:=0} -readonly HAS_ARCH_MIPS=${HAS_ARCH_MIPS:=0} -readonly HAS_ARCH_MIPS64EL=${HAS_ARCH_MIPS64EL:=0} +SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" + +DISTRO=debian +RELEASE=bullseye + +# This number is appended to the sysroot key to cause full rebuilds. It +# should be incremented when removing packages or patching existing packages. +# It should not be incremented when adding packages. +SYSROOT_RELEASE=2 + +ARCHIVE_TIMESTAMP=20230611T210420Z + +ARCHIVE_URL="https://snapshot.debian.org/archive/debian/$ARCHIVE_TIMESTAMP/" +APT_SOURCES_LIST=( + # Debian 12 (Bookworm) is needed for GTK4. It should be kept before bullseye + # so that bullseye takes precedence. + "${ARCHIVE_URL} bookworm main" + "${ARCHIVE_URL} bookworm-updates main" + + # This mimics a sources.list from bullseye. + "${ARCHIVE_URL} bullseye main contrib non-free" + "${ARCHIVE_URL} bullseye-updates main contrib non-free" + "${ARCHIVE_URL} bullseye-backports main contrib non-free" +) + +# gpg keyring file generated using generate_keyring.sh +KEYRING_FILE="${SCRIPT_DIR}/keyring.gpg" + +# Sysroot packages: these are the packages needed to build chrome. +DEBIAN_PACKAGES="\ + comerr-dev + krb5-multidev + libasound2 + libasound2-dev + libasyncns0 + libatk-bridge2.0-0 + libatk-bridge2.0-dev + libatk1.0-0 + libatk1.0-dev + libatomic1 + libatspi2.0-0 + libatspi2.0-dev + libattr1 + libaudit1 + libavahi-client3 + libavahi-common3 + libb2-1 + libblkid-dev + libblkid1 + libbluetooth-dev + libbluetooth3 + libbrotli-dev + libbrotli1 + libbsd0 + libc6 + libc6-dev + libcairo-gobject2 + libcairo-script-interpreter2 + libcairo2 + libcairo2-dev + libcap-dev + libcap-ng0 + libcap2 + libcloudproviders0 + libcolord2 + libcom-err2 + libcrypt-dev + libcrypt1 + libcups2 + libcups2-dev + libcupsimage2 + libcupsimage2-dev + libcurl3-gnutls + libcurl4-gnutls-dev + libdatrie-dev + libdatrie1 + libdb5.3 + libdbus-1-3 + libdbus-1-dev + libdbus-glib-1-2 + libdbusmenu-glib-dev + libdbusmenu-glib4 + libdbusmenu-gtk3-4 + libdbusmenu-gtk4 + libdeflate-dev + libdeflate0 + libdouble-conversion3 + libdrm-amdgpu1 + libdrm-dev + libdrm-nouveau2 + libdrm-radeon1 + libdrm2 + libegl-dev + libegl1 + libegl1-mesa + libegl1-mesa-dev + libelf-dev + libelf1 + libepoxy-dev + libepoxy0 + libevdev-dev + libevdev2 + libevent-2.1-7 + libexpat1 + libexpat1-dev + libffi-dev + libffi7 + libflac-dev + libflac8 + libfontconfig-dev + libfontconfig1 + libfreetype-dev + libfreetype6 + libfribidi-dev + libfribidi0 + libgbm-dev + libgbm1 + libgcc-10-dev + libgcc-s1 + libgcrypt20 + libgcrypt20-dev + libgdk-pixbuf-2.0-0 + libgdk-pixbuf-2.0-dev + libgl-dev + libgl1 + libgl1-mesa-dev + libgl1-mesa-glx + libglapi-mesa + libgles-dev + libgles1 + libgles2 + libglib2.0-0 + libglib2.0-dev + libglvnd-dev + libglvnd0 + libglx-dev + libglx0 + libgmp10 + libgnutls-dane0 + libgnutls-openssl27 + libgnutls28-dev + libgnutls30 + libgnutlsxx28 + libgomp1 + libgpg-error-dev + libgpg-error0 + libgraphene-1.0-0 + libgraphene-1.0-dev + libgraphite2-3 + libgraphite2-dev + libgssapi-krb5-2 + libgssrpc4 + libgtk-3-0 + libgtk-3-dev + libgtk-4-1 + libgtk-4-dev + libgtk2.0-0 + libgudev-1.0-0 + libharfbuzz-dev + libharfbuzz-gobject0 + libharfbuzz-icu0 + libharfbuzz0b + libhogweed6 + libice6 + libicu-le-hb0 + libicu67 + libidl-2-0 + libidn11 + libidn2-0 + libinput-dev + libinput10 + libjbig-dev + libjbig0 + libjpeg62-turbo + libjpeg62-turbo-dev + libjson-glib-1.0-0 + libjsoncpp-dev + libjsoncpp24 + libk5crypto3 + libkadm5clnt-mit12 + libkadm5srv-mit12 + libkdb5-10 + libkeyutils1 + libkrb5-3 + libkrb5-dev + libkrb5support0 + liblcms2-2 + libldap-2.4-2 + liblerc4 + libltdl7 + liblz4-1 + liblzma5 + liblzo2-2 + libmd0 + libmd4c0 + libminizip-dev + libminizip1 + libmount-dev + libmount1 + libmtdev1 + libncurses-dev + libncurses6 + libncursesw6 + libnettle8 + libnghttp2-14 + libnsl2 + libnspr4 + libnspr4-dev + libnss-db + libnss3 + libnss3-dev + libogg-dev + libogg0 + libopengl0 + libopus-dev + libopus0 + libp11-kit0 + libpam0g + libpam0g-dev + libpango-1.0-0 + libpango1.0-dev + libpangocairo-1.0-0 + libpangoft2-1.0-0 + libpangox-1.0-0 + libpangoxft-1.0-0 + libpci-dev + libpci3 + libpciaccess0 + libpcre16-3 + libpcre2-16-0 + libpcre2-32-0 + libpcre2-8-0 + libpcre2-dev + libpcre2-posix2 + libpcre3 + libpcre3-dev + libpcre32-3 + libpcrecpp0v5 + libpipewire-0.3-0 + libpipewire-0.3-dev + libpixman-1-0 + libpixman-1-dev + libpng-dev + libpng16-16 + libproxy1v5 + libpsl5 + libpthread-stubs0-dev + libpulse-dev + libpulse-mainloop-glib0 + libpulse0 + libqt5concurrent5 + libqt5core5a + libqt5dbus5 + libqt5gui5 + libqt5network5 + libqt5printsupport5 + libqt5sql5 + libqt5test5 + libqt5widgets5 + libqt5xml5 + libqt6concurrent6 + libqt6core6 + libqt6dbus6 + libqt6gui6 + libqt6network6 + libqt6opengl6 + libqt6openglwidgets6 + libqt6printsupport6 + libqt6sql6 + libqt6test6 + libqt6widgets6 + libqt6xml6 + libre2-9 + libre2-dev + librest-0.7-0 + librtmp1 + libsasl2-2 + libselinux1 + libselinux1-dev + libsepol1 + libsepol1-dev + libsm6 + libsnappy-dev + libsnappy1v5 + libsndfile1 + libsoup-gnome2.4-1 + libsoup2.4-1 + libspa-0.2-dev + libspeechd-dev + libspeechd2 + libsqlite3-0 + libssh2-1 + libssl-dev + libssl1.1 + libstdc++-10-dev + libstdc++6 + libsystemd-dev + libsystemd0 + libtasn1-6 + libthai-dev + libthai0 + libtiff-dev + libtiff5 + libtiff6 + libtiffxx5 + libtinfo6 + libtirpc3 + libts0 + libudev-dev + libudev1 + libunbound8 + libunistring2 + libutempter-dev + libutempter0 + libuuid1 + libva-dev + libva-drm2 + libva-glx2 + libva-wayland2 + libva-x11-2 + libva2 + libvorbis0a + libvorbisenc2 + libvulkan-dev + libvulkan1 + libwacom2 + libwayland-bin + libwayland-client0 + libwayland-cursor0 + libwayland-dev + libwayland-egl-backend-dev + libwayland-egl1 + libwayland-egl1-mesa + libwayland-server0 + libwebp-dev + libwebp6 + libwebp7 + libwebpdemux2 + libwebpmux3 + libwrap0 + libx11-6 + libx11-dev + libx11-xcb-dev + libx11-xcb1 + libxau-dev + libxau6 + libxcb-dri2-0 + libxcb-dri2-0-dev + libxcb-dri3-0 + libxcb-dri3-dev + libxcb-glx0 + libxcb-glx0-dev + libxcb-icccm4 + libxcb-image0 + libxcb-image0-dev + libxcb-keysyms1 + libxcb-present-dev + libxcb-present0 + libxcb-randr0 + libxcb-randr0-dev + libxcb-render-util0 + libxcb-render-util0-dev + libxcb-render0 + libxcb-render0-dev + libxcb-shape0 + libxcb-shape0-dev + libxcb-shm0 + libxcb-shm0-dev + libxcb-sync-dev + libxcb-sync1 + libxcb-util-dev + libxcb-util1 + libxcb-xfixes0 + libxcb-xfixes0-dev + libxcb-xinerama0 + libxcb-xinput0 + libxcb-xkb1 + libxcb1 + libxcb1-dev + libxcomposite-dev + libxcomposite1 + libxcursor-dev + libxcursor1 + libxdamage-dev + libxdamage1 + libxdmcp-dev + libxdmcp6 + libxext-dev + libxext6 + libxfixes-dev + libxfixes3 + libxft-dev + libxft2 + libxi-dev + libxi6 + libxinerama-dev + libxinerama1 + libxkbcommon-dev + libxkbcommon-x11-0 + libxkbcommon0 + libxml2 + libxml2-dev + libxrandr-dev + libxrandr2 + libxrender-dev + libxrender1 + libxshmfence-dev + libxshmfence1 + libxslt1-dev + libxslt1.1 + libxss-dev + libxss1 + libxt-dev + libxt6 + libxtst-dev + libxtst6 + libxxf86vm-dev + libxxf86vm1 + libzstd1 + linux-libc-dev + mesa-common-dev + qt6-base-dev + qt6-base-dev-tools + qtbase5-dev + qtbase5-dev-tools + shared-mime-info + uuid-dev + wayland-protocols + x11proto-dev + zlib1g + zlib1g-dev +" + +DEBIAN_PACKAGES_AMD64=" + libasan6 + libdrm-intel1 + libitm1 + liblsan0 + libquadmath0 + libtsan0 + libubsan1 + valgrind +" + +DEBIAN_PACKAGES_I386=" + libasan6 + libdrm-intel1 + libitm1 + libquadmath0 + libubsan1 + valgrind +" + +DEBIAN_PACKAGES_ARMHF=" + libasan6 + libdrm-etnaviv1 + libdrm-exynos1 + libdrm-freedreno1 + libdrm-omap1 + libdrm-tegra0 + libubsan1 + valgrind +" + +DEBIAN_PACKAGES_ARM64=" + libasan6 + libdrm-etnaviv1 + libdrm-freedreno1 + libdrm-tegra0 + libgmp10 + libitm1 + liblsan0 + libthai0 + libtsan0 + libubsan1 + valgrind +" + +DEBIAN_PACKAGES_ARMEL=" + libasan6 + libdrm-exynos1 + libdrm-freedreno1 + libdrm-omap1 + libdrm-tegra0 + libubsan1 +" + +DEBIAN_PACKAGES_MIPSEL=" +" + +DEBIAN_PACKAGES_MIPS64EL=" + valgrind +" readonly REQUIRED_TOOLS="curl xzcat" @@ -62,15 +522,6 @@ readonly PACKAGES_EXT=xz readonly RELEASE_FILE="Release" readonly RELEASE_FILE_GPG="Release.gpg" -readonly DEBIAN_DEP_LIST_AMD64="generated_package_lists/${DIST}.amd64" -readonly DEBIAN_DEP_LIST_I386="generated_package_lists/${DIST}.i386" -readonly DEBIAN_DEP_LIST_ARM="generated_package_lists/${DIST}.arm" -readonly DEBIAN_DEP_LIST_ARM64="generated_package_lists/${DIST}.arm64" -readonly DEBIAN_DEP_LIST_ARMEL="generated_package_lists/${DIST}.armel" -readonly DEBIAN_DEP_LIST_MIPS="generated_package_lists/${DIST}.mipsel" -readonly DEBIAN_DEP_LIST_MIPS64EL="generated_package_lists/${DIST}.mips64el" - - ###################################################################### # Helper ###################################################################### @@ -147,46 +598,51 @@ DownloadOrCopy() { fi } - SetEnvironmentVariables() { - case $1 in - *Amd64) - ARCH=AMD64 + case $ARCH in + amd64) + TRIPLE=x86_64-linux-gnu + DEBIAN_PACKAGES_ARCH="${DEBIAN_PACKAGES_AMD64}" ;; - *I386) - ARCH=I386 + i386) + TRIPLE=i386-linux-gnu + DEBIAN_PACKAGES_ARCH="${DEBIAN_PACKAGES_I386}" ;; - *Mips64el) - ARCH=MIPS64EL + armhf) + TRIPLE=arm-linux-gnueabihf + DEBIAN_PACKAGES_ARCH="${DEBIAN_PACKAGES_ARMHF}" ;; - *Mips) - ARCH=MIPS + arm64) + TRIPLE=aarch64-linux-gnu + DEBIAN_PACKAGES_ARCH="${DEBIAN_PACKAGES_ARM64}" ;; - *ARM) - ARCH=ARM + armel) + TRIPLE=arm-linux-gnueabi + DEBIAN_PACKAGES_ARCH="${DEBIAN_PACKAGES_ARMEL}" ;; - *ARM64) - ARCH=ARM64 + mipsel) + TRIPLE=mipsel-linux-gnu + DEBIAN_PACKAGES_ARCH="${DEBIAN_PACKAGES_MIPSEL}" ;; - *ARMEL) - ARCH=ARMEL + mips64el) + TRIPLE=mips64el-linux-gnuabi64 + DEBIAN_PACKAGES_ARCH="${DEBIAN_PACKAGES_MIPS64EL}" ;; *) - echo "ERROR: Unable to determine architecture based on: $1" + echo "ERROR: Unsupported architecture: $ARCH" + Usage exit 1 ;; esac - ARCH_LOWER=$(echo $ARCH | tr '[:upper:]' '[:lower:]') } - # some sanity checks to make sure this script is run from the right place # with the right tools SanityCheck() { Banner "Sanity Checks" local chrome_dir=$(cd "${SCRIPT_DIR}/../../.." && pwd) - BUILD_DIR="${chrome_dir}/out/sysroot-build/${DIST}" + BUILD_DIR="${chrome_dir}/out/sysroot-build/${RELEASE}" mkdir -p ${BUILD_DIR} echo "Using build directory: ${BUILD_DIR}" @@ -199,8 +655,8 @@ SanityCheck() { done # This is where the staging sysroot is. - INSTALL_ROOT="${BUILD_DIR}/${DIST}_${ARCH_LOWER}_staging" - TARBALL="${BUILD_DIR}/${DISTRO}_${DIST}_${ARCH_LOWER}_sysroot.tar.xz" + INSTALL_ROOT="${BUILD_DIR}/${RELEASE}_${ARCH}_staging" + TARBALL="${BUILD_DIR}/${DISTRO}_${RELEASE}_${ARCH}_sysroot.tar.xz" if ! mkdir -p "${INSTALL_ROOT}" ; then echo "ERROR: ${INSTALL_ROOT} can't be created." @@ -259,57 +715,24 @@ GeneratePackageListDist() { local dist="$2" shift 2 while (( "$#" )); do - GeneratePackageListDistRepo "$arch" "$repo" "$dist" "$1" - shift + GeneratePackageListDistRepo "$arch" "$repo" "$dist" "$1" + shift done } -GeneratePackageListCommon() { +GeneratePackageList() { local output_file="$1" local arch="$2" local packages="$3" - local list_base="${BUILD_DIR}/Packages.${DIST}_${arch}" + local list_base="${BUILD_DIR}/Packages.${RELEASE}_${arch}" > "${list_base}" # Create (or truncate) a zero-length file. printf '%s\n' "${APT_SOURCES_LIST[@]}" | while read source; do GeneratePackageListDist "${arch}" "${source}" done - GeneratePackageList "${list_base}" "${output_file}" "${packages}" -} - -GeneratePackageListAmd64() { - GeneratePackageListCommon "$1" amd64 "${DEBIAN_PACKAGES} - ${DEBIAN_PACKAGES_X86:=} ${DEBIAN_PACKAGES_AMD64:=}" -} - -GeneratePackageListI386() { - GeneratePackageListCommon "$1" i386 "${DEBIAN_PACKAGES} - ${DEBIAN_PACKAGES_X86:=}" -} - -GeneratePackageListARM() { - GeneratePackageListCommon "$1" armhf "${DEBIAN_PACKAGES} - ${DEBIAN_PACKAGES_ARM:=}" -} - -GeneratePackageListARM64() { - GeneratePackageListCommon "$1" arm64 "${DEBIAN_PACKAGES} - ${DEBIAN_PACKAGES_ARM64:=}" -} - -GeneratePackageListARMEL() { - GeneratePackageListCommon "$1" armel "${DEBIAN_PACKAGES} - ${DEBIAN_PACKAGES_ARMEL:=}" -} - -GeneratePackageListMips() { - GeneratePackageListCommon "$1" mipsel "${DEBIAN_PACKAGES}" -} - -GeneratePackageListMips64el() { - GeneratePackageListCommon "$1" mips64el "${DEBIAN_PACKAGES} - ${DEBIAN_PACKAGES_MIPS64EL:=}" + GeneratePackageListImpl "${list_base}" "${output_file}" \ + "${DEBIAN_PACKAGES} ${packages}" } StripChecksumsFromPackageList() { @@ -321,13 +744,11 @@ StripChecksumsFromPackageList() { # ###################################################################### -HacksAndPatchesCommon() { - local arch=$1 - local os=$2 +HacksAndPatches() { Banner "Misc Hacks & Patches" # Remove an unnecessary dependency on qtchooser. - rm "${INSTALL_ROOT}/usr/lib/${arch}-${os}/qt-default/qtchooser/default.conf" + rm "${INSTALL_ROOT}/usr/lib/${TRIPLE}/qt-default/qtchooser/default.conf" # libxcomposite1 is missing a symbols file. cp "${SCRIPT_DIR}/libxcomposite1-symbols" \ @@ -347,72 +768,31 @@ HacksAndPatchesCommon() { "${fcntl_h}" # Do not use pthread_cond_clockwait as it was introduced in glibc 2.30. - local cppconfig_h="${usr_include}/${arch}-${os}/c++/10/bits/c++config.h" + local cppconfig_h="${usr_include}/${TRIPLE}/c++/10/bits/c++config.h" sed -i 's|\(#define\s\+_GLIBCXX_USE_PTHREAD_COND_CLOCKWAIT\)|// \1|' \ "${cppconfig_h}" + # Include limits.h in stdlib.h to fix an ODR issue + # (https://sourceware.org/bugzilla/show_bug.cgi?id=30516) + local stdlib_h="${usr_include}/stdlib.h" + sed -i '/#include /a #include ' "${stdlib_h}" + # This is for chrome's ./build/linux/pkg-config-wrapper # which overwrites PKG_CONFIG_LIBDIR internally SubBanner "Move pkgconfig scripts" mkdir -p ${INSTALL_ROOT}/usr/lib/pkgconfig - mv ${INSTALL_ROOT}/usr/lib/${arch}-${os}/pkgconfig/* \ + mv ${INSTALL_ROOT}/usr/lib/${TRIPLE}/pkgconfig/* \ ${INSTALL_ROOT}/usr/lib/pkgconfig -} - - -ReversionGlibc() { - local arch=$1 - local os=$2 # Avoid requiring unsupported glibc versions. "${SCRIPT_DIR}/reversion_glibc.py" \ - "${INSTALL_ROOT}/lib/${arch}-${os}/libc.so.6" + "${INSTALL_ROOT}/lib/${TRIPLE}/libc.so.6" "${SCRIPT_DIR}/reversion_glibc.py" \ - "${INSTALL_ROOT}/lib/${arch}-${os}/libm.so.6" + "${INSTALL_ROOT}/lib/${TRIPLE}/libm.so.6" "${SCRIPT_DIR}/reversion_glibc.py" \ - "${INSTALL_ROOT}/lib/${arch}-${os}/libcrypt.so.1" -} - - -HacksAndPatchesAmd64() { - HacksAndPatchesCommon x86_64 linux-gnu - ReversionGlibc x86_64 linux-gnu -} - - -HacksAndPatchesI386() { - HacksAndPatchesCommon i386 linux-gnu - ReversionGlibc i386 linux-gnu -} - - -HacksAndPatchesARM() { - HacksAndPatchesCommon arm linux-gnueabihf - ReversionGlibc arm linux-gnueabihf -} - -HacksAndPatchesARM64() { - HacksAndPatchesCommon aarch64 linux-gnu - ReversionGlibc aarch64 linux-gnu -} - -HacksAndPatchesARMEL() { - HacksAndPatchesCommon arm linux-gnueabi - ReversionGlibc arm linux-gnueabi -} - -HacksAndPatchesMips() { - HacksAndPatchesCommon mipsel linux-gnu - ReversionGlibc mipsel linux-gnu + "${INSTALL_ROOT}/lib/${TRIPLE}/libcrypt.so.1" } - -HacksAndPatchesMips64el() { - HacksAndPatchesCommon mips64el linux-gnuabi64 - ReversionGlibc mips64el linux-gnuabi64 -} - - InstallIntoSysroot() { Banner "Install Libs And Headers Into Jail" @@ -462,7 +842,7 @@ CleanupJailSymlinks() { SAVEDPWD=$(pwd) cd ${INSTALL_ROOT} local libdirs="lib usr/lib" - if [ "${ARCH}" != "MIPS" ]; then + if [ -d lib64 ]; then libdirs="${libdirs} lib64" fi @@ -491,13 +871,11 @@ CleanupJailSymlinks() { } -VerifyLibraryDepsCommon() { - local arch=$1 - local os=$2 +VerifyLibraryDeps() { local find_dirs=( "${INSTALL_ROOT}/lib/" - "${INSTALL_ROOT}/lib/${arch}-${os}/" - "${INSTALL_ROOT}/usr/lib/${arch}-${os}/" + "${INSTALL_ROOT}/lib/${TRIPLE}/" + "${INSTALL_ROOT}/usr/lib/${TRIPLE}/" ) local needed_libs="$( find ${find_dirs[*]} -name "*\.so*" -type f -exec file {} \; | \ @@ -515,194 +893,19 @@ VerifyLibraryDepsCommon() { fi } - -VerifyLibraryDepsAmd64() { - VerifyLibraryDepsCommon x86_64 linux-gnu -} - - -VerifyLibraryDepsI386() { - VerifyLibraryDepsCommon i386 linux-gnu -} - - -VerifyLibraryDepsARM() { - VerifyLibraryDepsCommon arm linux-gnueabihf -} - - -VerifyLibraryDepsARM64() { - VerifyLibraryDepsCommon aarch64 linux-gnu -} - -VerifyLibraryDepsARMEL() { - VerifyLibraryDepsCommon arm linux-gnueabi -} - -VerifyLibraryDepsMips() { - VerifyLibraryDepsCommon mipsel linux-gnu -} - - -VerifyLibraryDepsMips64el() { - VerifyLibraryDepsCommon mips64el linux-gnuabi64 -} - - -#@ -#@ BuildSysrootAmd64 -#@ -#@ Build everything and package it -BuildSysrootAmd64() { - if [ "$HAS_ARCH_AMD64" = "0" ]; then - return - fi - ClearInstallDir - local package_file="${DEBIAN_DEP_LIST_AMD64}" - GeneratePackageListAmd64 "$package_file" - local files_and_sha256sums="$(cat ${package_file})" - StripChecksumsFromPackageList "$package_file" - InstallIntoSysroot ${files_and_sha256sums} - HacksAndPatchesAmd64 - CleanupJailSymlinks - VerifyLibraryDepsAmd64 - CreateTarBall -} - -#@ -#@ BuildSysrootI386 -#@ -#@ Build everything and package it -BuildSysrootI386() { - if [ "$HAS_ARCH_I386" = "0" ]; then - return - fi - ClearInstallDir - local package_file="${DEBIAN_DEP_LIST_I386}" - GeneratePackageListI386 "$package_file" - local files_and_sha256sums="$(cat ${package_file})" - StripChecksumsFromPackageList "$package_file" - InstallIntoSysroot ${files_and_sha256sums} - HacksAndPatchesI386 - CleanupJailSymlinks - VerifyLibraryDepsI386 - CreateTarBall -} - -#@ -#@ BuildSysrootARM -#@ -#@ Build everything and package it -BuildSysrootARM() { - if [ "$HAS_ARCH_ARM" = "0" ]; then - return - fi - ClearInstallDir - local package_file="${DEBIAN_DEP_LIST_ARM}" - GeneratePackageListARM "$package_file" - local files_and_sha256sums="$(cat ${package_file})" - StripChecksumsFromPackageList "$package_file" - InstallIntoSysroot ${files_and_sha256sums} - HacksAndPatchesARM - CleanupJailSymlinks - VerifyLibraryDepsARM - CreateTarBall -} - -#@ -#@ BuildSysrootARM64 -#@ -#@ Build everything and package it -BuildSysrootARM64() { - if [ "$HAS_ARCH_ARM64" = "0" ]; then - return - fi - ClearInstallDir - local package_file="${DEBIAN_DEP_LIST_ARM64}" - GeneratePackageListARM64 "$package_file" - local files_and_sha256sums="$(cat ${package_file})" - StripChecksumsFromPackageList "$package_file" - InstallIntoSysroot ${files_and_sha256sums} - HacksAndPatchesARM64 - CleanupJailSymlinks - VerifyLibraryDepsARM64 - CreateTarBall -} - -#@ -#@ BuildSysrootARMEL -#@ -#@ Build everything and package it -BuildSysrootARMEL() { - if [ "$HAS_ARCH_ARMEL" = "0" ]; then - return - fi - ClearInstallDir - local package_file="${DEBIAN_DEP_LIST_ARMEL}" - GeneratePackageListARMEL "$package_file" - local files_and_sha256sums="$(cat ${package_file})" - StripChecksumsFromPackageList "$package_file" - InstallIntoSysroot ${files_and_sha256sums} - HacksAndPatchesARMEL - CleanupJailSymlinks - VerifyLibraryDepsARMEL - CreateTarBall -} - -#@ -#@ BuildSysrootMips -#@ -#@ Build everything and package it -BuildSysrootMips() { - if [ "$HAS_ARCH_MIPS" = "0" ]; then - return - fi - ClearInstallDir - local package_file="${DEBIAN_DEP_LIST_MIPS}" - GeneratePackageListMips "$package_file" - local files_and_sha256sums="$(cat ${package_file})" - StripChecksumsFromPackageList "$package_file" - InstallIntoSysroot ${files_and_sha256sums} - HacksAndPatchesMips - CleanupJailSymlinks - VerifyLibraryDepsMips - CreateTarBall -} - -#@ -#@ BuildSysrootMips64el -#@ -#@ Build everything and package it -BuildSysrootMips64el() { - if [ "$HAS_ARCH_MIPS64EL" = "0" ]; then - return - fi +BuildSysroot() { ClearInstallDir - local package_file="${DEBIAN_DEP_LIST_MIPS64EL}" - GeneratePackageListMips64el "$package_file" + local package_file="generated_package_lists/${RELEASE}.${ARCH}" + GeneratePackageList "${package_file}" $ARCH "${DEBIAN_PACKAGES_ARCH}" local files_and_sha256sums="$(cat ${package_file})" StripChecksumsFromPackageList "$package_file" InstallIntoSysroot ${files_and_sha256sums} - HacksAndPatchesMips64el + HacksAndPatches CleanupJailSymlinks - VerifyLibraryDepsMips64el + VerifyLibraryDeps CreateTarBall } -#@ -#@ BuildSysrootAll -#@ -#@ Build sysroot images for all architectures -BuildSysrootAll() { - RunCommand BuildSysrootAmd64 - RunCommand BuildSysrootI386 - RunCommand BuildSysrootARM - RunCommand BuildSysrootARM64 - RunCommand BuildSysrootARMEL - RunCommand BuildSysrootMips - RunCommand BuildSysrootMips64el -} - UploadSysroot() { local sha=$(sha1sum "${TARBALL}" | awk '{print $1;}') set -x @@ -711,91 +914,6 @@ UploadSysroot() { set +x } -#@ -#@ UploadSysrootAmd64 -#@ -UploadSysrootAmd64() { - if [ "$HAS_ARCH_AMD64" = "0" ]; then - return - fi - UploadSysroot "$@" -} - -#@ -#@ UploadSysrootI386 -#@ -UploadSysrootI386() { - if [ "$HAS_ARCH_I386" = "0" ]; then - return - fi - UploadSysroot "$@" -} - -#@ -#@ UploadSysrootARM -#@ -UploadSysrootARM() { - if [ "$HAS_ARCH_ARM" = "0" ]; then - return - fi - UploadSysroot "$@" -} - -#@ -#@ UploadSysrootARM64 -#@ -UploadSysrootARM64() { - if [ "$HAS_ARCH_ARM64" = "0" ]; then - return - fi - UploadSysroot "$@" -} - -#@ -#@ UploadSysrootARMEL -#@ -UploadSysrootARMEL() { - if [ "$HAS_ARCH_ARMEL" = "0" ]; then - return - fi - UploadSysroot "$@" -} - -#@ -#@ UploadSysrootMips -#@ -UploadSysrootMips() { - if [ "$HAS_ARCH_MIPS" = "0" ]; then - return - fi - UploadSysroot "$@" -} - -#@ -#@ UploadSysrootMips64el -#@ -UploadSysrootMips64el() { - if [ "$HAS_ARCH_MIPS64EL" = "0" ]; then - return - fi - UploadSysroot "$@" -} - -#@ -#@ UploadSysrootAll -#@ -#@ Upload sysroot image for all architectures -UploadSysrootAll() { - RunCommand UploadSysrootAmd64 "$@" - RunCommand UploadSysrootI386 "$@" - RunCommand UploadSysrootARM "$@" - RunCommand UploadSysrootARM64 "$@" - RunCommand UploadSysrootARMEL "$@" - RunCommand UploadSysrootMips "$@" - RunCommand UploadSysrootMips64el "$@" - -} - # # CheckForDebianGPGKeyring # @@ -849,12 +967,12 @@ VerifyPackageListing() { } # -# GeneratePackageList +# GeneratePackageListImpl # # Looks up package names in ${BUILD_DIR}/Packages and write list of URLs # to output file. # -GeneratePackageList() { +GeneratePackageListImpl() { local input_file="$1" local output_file="$2" echo "Updating: ${output_file} from ${input_file}" @@ -885,79 +1003,25 @@ GeneratePackageList() { sort "$output_file" -o "$output_file" } -#@ -#@ PrintArchitectures -#@ -#@ Prints supported architectures. -PrintArchitectures() { - if [ "$HAS_ARCH_AMD64" = "1" ]; then - echo Amd64 - fi - if [ "$HAS_ARCH_I386" = "1" ]; then - echo I386 - fi - if [ "$HAS_ARCH_ARM" = "1" ]; then - echo ARM - fi - if [ "$HAS_ARCH_ARM64" = "1" ]; then - echo ARM64 - fi - if [ "$HAS_ARCH_ARMEL" = "1" ]; then - echo ARMEL - fi - if [ "$HAS_ARCH_MIPS" = "1" ]; then - echo Mips - fi - if [ "$HAS_ARCH_MIPS64EL" = "1" ]; then - echo Mips64el - fi -} - -#@ -#@ PrintDistro -#@ -#@ Prints distro. eg: ubuntu -PrintDistro() { - echo ${DISTRO} -} - -#@ -#@ PrintRelease -#@ -#@ Prints disto release. eg: bullseye -PrintRelease() { - echo ${DIST} -} - -#@ -#@ PrintKey -#@ -#@ Prints sysroot key identifier. -PrintKey() { - echo "${ARCHIVE_TIMESTAMP}-${SYSROOT_RELEASE}" -} - -RunCommand() { - SetEnvironmentVariables "$1" - SanityCheck - "$@" -} - -if [ $# -eq 0 ] ; then - echo "ERROR: you must specify a mode on the commandline" - echo +if [ $# -ne 2 ]; then Usage exit 1 -elif [ "$(type -t $1)" != "function" ]; then - echo "ERROR: unknown function '$1'." >&2 - echo "For help, try:" - echo " $0 help" - exit 1 else ChangeDirectory - if echo $1 | grep -qs --regexp='\(^Print\)\|\(All$\)'; then - "$@" - else - RunCommand "$@" - fi + ARCH=$2 + SetEnvironmentVariables + SanityCheck + case "$1" in + build) + BuildSysroot + ;; + upload) + UploadSysroot + ;; + *) + echo "ERROR: Invalid command: $1" + Usage + exit 1 + ;; + esac fi diff --git a/build/linux/sysroot_scripts/sysroots.json b/build/linux/sysroot_scripts/sysroots.json index 355c350..156d4c6 100644 --- a/build/linux/sysroot_scripts/sysroots.json +++ b/build/linux/sysroot_scripts/sysroots.json @@ -1,44 +1,51 @@ { "bullseye_amd64": { - "Key": "20221105T211506Z-0", - "Sha1Sum": "3bdb3503702d35520d101fc5eec9a8ab5353149f", + "Key": "20230611T210420Z-2", + "Sha1Sum": "4c00ba2ad61ca7cc39392f192aa39420e086777c", "SysrootDir": "debian_bullseye_amd64-sysroot", - "Tarball": "debian_bullseye_amd64_sysroot.tar.xz" - }, - "bullseye_arm": { - "Key": "20221105T211506Z-0", - "Sha1Sum": "d160892586b87782fef76ccc651fa2024a62bdcd", - "SysrootDir": "debian_bullseye_arm-sysroot", - "Tarball": "debian_bullseye_arm_sysroot.tar.xz" + "Tarball": "debian_bullseye_amd64_sysroot.tar.xz", + "URL": "https://commondatastorage.googleapis.com/chrome-linux-sysroot/toolchain" }, "bullseye_arm64": { - "Key": "20221105T211506Z-1", - "Sha1Sum": "6553f74237ef4a99240a740f0084e1ade71aec6f", + "Key": "20230611T210420Z-2", + "Sha1Sum": "41a6c8dec4c4304d6509e30cbaf9218dffb4438e", "SysrootDir": "debian_bullseye_arm64-sysroot", - "Tarball": "debian_bullseye_arm64_sysroot.tar.xz" + "Tarball": "debian_bullseye_arm64_sysroot.tar.xz", + "URL": "https://commondatastorage.googleapis.com/chrome-linux-sysroot/toolchain" }, "bullseye_armel": { - "Key": "20221105T211506Z-0", - "Sha1Sum": "bd0167a99fa282fa54835a635d2d0ac18b7ab8a5", + "Key": "20230611T210420Z-2", + "Sha1Sum": "bcff5c5a4060f3be7bff28aa9ff28c100b70a858", "SysrootDir": "debian_bullseye_armel-sysroot", - "Tarball": "debian_bullseye_armel_sysroot.tar.xz" + "Tarball": "debian_bullseye_armel_sysroot.tar.xz", + "URL": "https://commondatastorage.googleapis.com/chrome-linux-sysroot/toolchain" + }, + "bullseye_armhf": { + "Key": "20230611T210420Z-2", + "Sha1Sum": "c153bf1027a67eec0f6ea2efa190e29c9c06e603", + "SysrootDir": "debian_bullseye_armhf-sysroot", + "Tarball": "debian_bullseye_armhf_sysroot.tar.xz", + "URL": "https://commondatastorage.googleapis.com/chrome-linux-sysroot/toolchain" }, "bullseye_i386": { - "Key": "20221105T211506Z-0", - "Sha1Sum": "de629dcc11a6ab1b11e6d66c4180a959c6290097", + "Key": "20230611T210420Z-2", + "Sha1Sum": "cfba9004de1ace04f9604c13c30abad3be90e58f", "SysrootDir": "debian_bullseye_i386-sysroot", - "Tarball": "debian_bullseye_i386_sysroot.tar.xz" - }, - "bullseye_mips": { - "Key": "20221105T211506Z-0", - "Sha1Sum": "6f27b4f65d8e190864e7c18fa281ffb418cf2e43", - "SysrootDir": "debian_bullseye_mips-sysroot", - "Tarball": "debian_bullseye_mips_sysroot.tar.xz" + "Tarball": "debian_bullseye_i386_sysroot.tar.xz", + "URL": "https://commondatastorage.googleapis.com/chrome-linux-sysroot/toolchain" }, "bullseye_mips64el": { - "Key": "20221105T211506Z-0", - "Sha1Sum": "817d0905f294c9c5af828fa5c5b814dbe9610a24", + "Key": "20230611T210420Z-2", + "Sha1Sum": "3ce49d1c6b5fef17ad512f2d663a175829ae0b72", "SysrootDir": "debian_bullseye_mips64el-sysroot", - "Tarball": "debian_bullseye_mips64el_sysroot.tar.xz" + "Tarball": "debian_bullseye_mips64el_sysroot.tar.xz", + "URL": "https://commondatastorage.googleapis.com/chrome-linux-sysroot/toolchain" + }, + "bullseye_mipsel": { + "Key": "20230611T210420Z-2", + "Sha1Sum": "1b857baabd7999ff0d6949a8973f896836ac45ac", + "SysrootDir": "debian_bullseye_mipsel-sysroot", + "Tarball": "debian_bullseye_mipsel_sysroot.tar.xz", + "URL": "https://commondatastorage.googleapis.com/chrome-linux-sysroot/toolchain" } } diff --git a/build/linux/sysroot_scripts/update-archive-timestamp.sh b/build/linux/sysroot_scripts/update-archive-timestamp.sh index ff5adf1..63b7dab 100755 --- a/build/linux/sysroot_scripts/update-archive-timestamp.sh +++ b/build/linux/sysroot_scripts/update-archive-timestamp.sh @@ -3,7 +3,7 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. -# This script updates sysroot-creator-*.sh with the timestamp of the latest +# This script updates sysroot-creator.sh with the timestamp of the latest # snapshot from snapshot.debian.org. SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" @@ -15,4 +15,4 @@ TIMESTAMP=$(curl -s "${ARCHIVE_URL}/99990101T000000Z/pool/" | \ sed -n "s|.*${ARCHIVE_URL}/\([[:digit:]TZ]\+\)/pool/.*|\1|p" | head -n 1) sed -i "s/ARCHIVE_TIMESTAMP=.*$/ARCHIVE_TIMESTAMP=${TIMESTAMP}/" \ - "${SCRIPT_DIR}"/sysroot-creator-*.sh + "${SCRIPT_DIR}"/sysroot-creator.sh diff --git a/build/mac_toolchain.py b/build/mac_toolchain.py index 68c96e2..cd253cd 100755 --- a/build/mac_toolchain.py +++ b/build/mac_toolchain.py @@ -34,12 +34,16 @@ def LoadPList(path): return plistlib.load(f) -# This contains binaries from Xcode 14.0 14B47b along with the macOS 13 SDK -# (13.0 22A372). To build these packages, see comments in +# This contains binaries from Xcode 14.3 14E222b along with the macOS 13.3 SDK +# (13.3 22E245). To build these packages, see comments in # build/xcode_binaries.yaml +# To update the version numbers, open Xcode's "About Xcode" for the first number +# and run `xcrun --show-sdk-build-version` for the second. +# To update the _TAG, use the output of the `cipd create` command mentioned in +# xcode_binaries.yaml. MAC_BINARIES_LABEL = 'infra_internal/ios/xcode/xcode_binaries/mac-amd64' -MAC_BINARIES_TAG = '14b47b' +MAC_BINARIES_TAG = 'ajH0-Cuzzqtyj98qUlsgO1-lepRhXoVVNAjVXDIYHxcC' # The toolchain will not be downloaded if the minimum OS version is not met. 19 # is the major version number for macOS 10.15. Xcode 14.0 14B47b only runs on diff --git a/build/nocompile.gni b/build/nocompile.gni index 093cf66..dafc9f4 100644 --- a/build/nocompile.gni +++ b/build/nocompile.gni @@ -63,8 +63,12 @@ import("//build/config/python.gni") import("//build/toolchain/toolchain.gni") import("//testing/test.gni") +if (is_mac) { + import("//build/config/mac/mac_sdk.gni") +} + declare_args() { - # TODO(crbug.com/105388): make sure no-compile test is not flaky. + # TODO(crbug.com/1442625): Enable for Windows. enable_nocompile_tests = (is_linux || is_chromeos || is_apple) && is_clang && host_cpu == target_cpu } @@ -77,7 +81,7 @@ if (enable_nocompile_tests) { action_foreach(nocompile_target) { testonly = true - script = "//tools/nocompile_driver.py" + script = "//tools/nocompile/driver.py" sources = invoker.sources deps = invoker.deps if (defined(invoker.public_deps)) { @@ -85,19 +89,25 @@ if (enable_nocompile_tests) { } result_path = "$target_gen_dir/{{source_name_part}}_nc.cc" - depfile = "${result_path}.d" outputs = [ result_path ] + rebased_result_path = rebase_path(result_path, root_build_dir) + if (is_win) { + if (host_os == "win") { + cxx = "clang-cl.exe" + nulldevice = "nul" + } else { + cxx = "clang-cl" + nulldevice = "/dev/null" + } + } else { + cxx = "clang++" + } args = [ - rebase_path("$clang_base_path/bin/clang++", root_build_dir), + rebase_path("$clang_base_path/bin/$cxx", root_build_dir), "4", # number of compilers to invoke in parallel. "{{source}}", - rebase_path(result_path, root_build_dir), + rebased_result_path, "--", - "-nostdinc++", - "-isystem" + rebase_path("$libcxx_prefix/include", root_build_dir), - "-isystem" + rebase_path("$libcxxabi_prefix/include", root_build_dir), - "-std=c++17", - "-Wall", "-Werror", "-Wfatal-errors", "-Wthread-safety", @@ -109,9 +119,48 @@ if (enable_nocompile_tests) { # TODO(https://crbug.com/989932): Track build/config/compiler/BUILD.gn "-Wno-implicit-int-float-conversion", ] + if (is_win) { + args += [ + "/W4", + "-Wno-unused-parameter", + "-I" + rebase_path("$libcxx_prefix/include", root_build_dir), + "/std:c++20", + + # TODO(crbug.com/1442625): Uncomment this, then filter and process the + # output appropriately to track dependencies. + # "/showIncludes:user" + + "/Fo" + nulldevice, + "/c", + "/Tp", + ] + } else { + depfile = "${result_path}.d" + args += [ + "-Wall", + "-nostdinc++", + "-isystem" + rebase_path("$libcxx_prefix/include", root_build_dir), + "-isystem" + rebase_path("$libcxxabi_prefix/include", root_build_dir), + "-std=c++20", + "-MMD", + "-MF", + rebased_result_path + ".d", + "-MT", + rebased_result_path, + "-o", + "/dev/null", + "-c", + "-x", + "c++", + ] + } + args += [ "{{source}}" ] - if (is_apple && host_os != "mac") { - args += [ "--target=x86_64-apple-macos" ] + if (is_mac && host_os != "mac") { + args += [ + "--target=x86_64-apple-macos", + "-mmacos-version-min=$mac_deployment_target", + ] } # Iterate over any extra include dirs and append them to the command line. @@ -122,10 +171,15 @@ if (enable_nocompile_tests) { } if (sysroot != "") { - args += [ - "--sysroot", - rebase_path(sysroot, root_build_dir), - ] + sysroot_path = rebase_path(sysroot, root_build_dir) + if (is_win) { + args += [ "/winsysroot" + sysroot_path ] + } else { + args += [ + "--sysroot", + sysroot_path, + ] + } } if (!is_nacl) { @@ -139,6 +193,7 @@ if (enable_nocompile_tests) { test(target_name) { deps = invoker.deps + [ ":$nocompile_target" ] sources = get_target_outputs(":$nocompile_target") + forward_variables_from(invoker, [ "bundle_deps" ]) } } } diff --git a/build/print_python_deps.py b/build/print_python_deps.py index 07f988a..415e7b0 100755 --- a/build/print_python_deps.py +++ b/build/print_python_deps.py @@ -11,7 +11,7 @@ import argparse import os -import pipes +import shlex import sys # Don't use any helper modules, or else they will end up in the results. @@ -68,7 +68,7 @@ def _NormalizeCommandLine(options): if os.name == 'nt': return ' '.join(quote(x) for x in args).replace('\\', '/') else: - return ' '.join(pipes.quote(x) for x in args) + return ' '.join(shlex.quote(x) for x in args) def _FindPythonInDirectory(directory, allow_test): diff --git a/build/private_code_test/BUILD.gn b/build/private_code_test/BUILD.gn index 3fb0a0d..8fcdd54 100644 --- a/build/private_code_test/BUILD.gn +++ b/build/private_code_test/BUILD.gn @@ -32,14 +32,14 @@ if (!is_component_build) { inputs = [ "//../.gclient_entries" ] } - shared_library("private_code_test_lib") { + shared_library("private_code_test_inputs") { deps = [ "//v8" ] ldflags = [ "--collect-inputs-only" ] } # Test that ensures the checker fails when it is supposed to. private_code_test("private_code_failure_test") { - linker_inputs_dep = ":private_code_test_lib" + linker_inputs_dep = ":private_code_test_inputs" private_paths_dep = ":private_code_test_gclient_deps" private_paths_file = "$target_gen_dir/test_private_paths.txt" expect_failure = true diff --git a/build/private_code_test/README.md b/build/private_code_test/README.md index 75329b0..52d1dd7 100644 --- a/build/private_code_test/README.md +++ b/build/private_code_test/README.md @@ -15,8 +15,8 @@ simple. The main alternative I found was to use `gclient flatten`. Example output: ``` - # src -> src-internal - "src-internal": { + # src -> src/internal + "src/internal": { "url": "https://chrome-internal.googlesource.com/chrome/src-internal.git@c649c6a155fe65c3730e2d663d7d2058d33bf1f9", "condition": 'checkout_src_internal', }, diff --git a/build/private_code_test/list_gclient_deps.py b/build/private_code_test/list_gclient_deps.py index dea0d6d..6a34fc4 100755 --- a/build/private_code_test/list_gclient_deps.py +++ b/build/private_code_test/list_gclient_deps.py @@ -12,12 +12,6 @@ _ENTRIES_FILE = _REPO_ROOT / '.gclient_entries' -def _parse_gclient_entries(): - result = {} - exec(_ENTRIES_FILE.read_text(), result) - return result['entries'] - - def main(): parser = argparse.ArgumentParser() parser.add_argument('--source-filter', required=True) @@ -25,8 +19,23 @@ def main(): args = parser.parse_args() source_filter = args.source_filter - entries = _parse_gclient_entries() - private_dirs = sorted(d for d, s in entries.items() if source_filter in s) + + # Ninja validates that the file exists since it's marked as an input. + try: + text = _ENTRIES_FILE.read_text() + result = {} + exec(text, result) + entries = result['entries'] + private_dirs = sorted(d for d, s in entries.items() + if s and source_filter in s) + except Exception as e: + # Make the test fail rather than the compile step so that failures here do + # not prevent other bot functionality. + private_dirs = [ + '# ERROR parsing .gclient_entries', + str(e), '', 'File was:', text + ] + pathlib.Path(args.output).write_text('\n'.join(private_dirs) + '\n') diff --git a/build/private_code_test/private_code_test.gni b/build/private_code_test/private_code_test.gni index e52b150..6ce82f0 100644 --- a/build/private_code_test/private_code_test.gni +++ b/build/private_code_test/private_code_test.gni @@ -13,14 +13,17 @@ template("private_code_test") { ]) script = "//build/private_code_test/private_code_test.py" _linker_inputs_dep = invoker.linker_inputs_dep + if (shlib_prefix != "") { + _so_name = shlib_prefix + get_label_info(_linker_inputs_dep, "name") + _so_name = string_replace(_so_name, + "${shlib_prefix}${shlib_prefix}", + shlib_prefix) + } + _dir = get_label_info(_linker_inputs_dep, "root_out_dir") if (is_android) { - _so_name = "lib" + get_label_info(_linker_inputs_dep, "name") - _so_name = string_replace(_so_name, "liblib", "lib") - _linker_inputs_file = get_label_info(_linker_inputs_dep, "root_out_dir") + - "/lib.unstripped/${_so_name}$shlib_extension" - } else { - assert(false, "TODO: Add non-android support") + _dir += "/lib.unstripped" } + _linker_inputs_file = "$_dir/${_so_name}$shlib_extension" if (defined(invoker.private_paths_dep)) { _private_paths_dep = invoker.private_paths_dep _private_paths_file = invoker.private_paths_file diff --git a/build/private_code_test/private_code_test.py b/build/private_code_test/private_code_test.py index 5d8f0b4..a164741 100755 --- a/build/private_code_test/private_code_test.py +++ b/build/private_code_test/private_code_test.py @@ -63,6 +63,28 @@ def _find_private_paths(linker_inputs, private_paths, root_out_dir): return found +def _read_private_paths(path): + text = pathlib.Path(path).read_text() + + # Check if .gclient_entries was not valid. https://crbug.com/1427829 + if text.startswith('# ERROR: '): + sys.stderr.write(text) + sys.exit(1) + + # Remove src/ prefix from paths. + # We care only about paths within src/ since GN cannot reference files + # outside of // (and what would the obj/ path for them look like?). + ret = [p[4:] for p in text.splitlines() if p.startswith('src/')] + if not ret: + sys.stderr.write(f'No src/ paths found in {args.private_paths_file}\n') + sys.stderr.write(f'This test should not be run on public bots.\n') + sys.stderr.write(f'File contents:\n') + sys.stderr.write(text) + sys.exit(1) + + return ret + + def main(): parser = argparse.ArgumentParser() parser.add_argument('--linker-inputs', @@ -84,16 +106,9 @@ def main(): help='Invert exit code.') args = parser.parse_args() - private_paths = pathlib.Path(args.private_paths_file).read_text().splitlines() + private_paths = _read_private_paths(args.private_paths_file) linker_inputs = pathlib.Path(args.linker_inputs).read_text().splitlines() - # Remove src/ prefix from paths. - # We care only about paths within src/ since GN cannot reference files - # outside of // (and what would the obj/ path for them look like?). - private_paths = [p[4:] for p in private_paths if p.startswith('src/')] - if not private_paths: - raise ('No paths src/ paths found in ' + args.private_paths_file) - root_out_dir = args.root_out_dir if root_out_dir == '.': root_out_dir = '' diff --git a/build/protoc_java.py b/build/protoc_java.py index 28c4200..8f25e3a 100755 --- a/build/protoc_java.py +++ b/build/protoc_java.py @@ -22,6 +22,9 @@ import subprocess import sys +import action_helpers +import zip_helpers + sys.path.append(os.path.join(os.path.dirname(__file__), 'android', 'gyp')) from util import build_utils @@ -41,7 +44,7 @@ def _EnforceJavaPackage(proto_srcs): def main(argv): parser = argparse.ArgumentParser() - build_utils.AddDepfileOption(parser) + action_helpers.add_depfile_arg(parser) parser.add_argument('--protoc', required=True, help='Path to protoc binary.') parser.add_argument('--plugin', help='Path to plugin executable') parser.add_argument('--proto-path', @@ -91,12 +94,13 @@ def main(argv): build_utils.DeleteDirectory(options.java_out_dir) shutil.copytree(temp_dir, options.java_out_dir) else: - build_utils.ZipDir(options.srcjar, temp_dir) + with action_helpers.atomic_output(options.srcjar) as f: + zip_helpers.zip_directory(f, temp_dir) if options.depfile: assert options.srcjar deps = options.protos + [options.protoc] - build_utils.WriteDepfile(options.depfile, options.srcjar, deps) + action_helpers.write_depfile(options.depfile, options.srcjar, deps) if options.stamp: build_utils.Touch(options.stamp) diff --git a/build/protoc_java.pydeps b/build/protoc_java.pydeps index c3ed2be..467907f 100644 --- a/build/protoc_java.pydeps +++ b/build/protoc_java.pydeps @@ -1,6 +1,8 @@ # Generated by running: # build/print_python_deps.py --root build --output build/protoc_java.pydeps build/protoc_java.py +action_helpers.py android/gyp/util/__init__.py android/gyp/util/build_utils.py gn_helpers.py protoc_java.py +zip_helpers.py diff --git a/build/rust/BUILD.gn b/build/rust/BUILD.gn index b6ad5f1..609dab8 100644 --- a/build/rust/BUILD.gn +++ b/build/rust/BUILD.gn @@ -5,11 +5,6 @@ import("//build/buildflag_header.gni") import("//build/config/rust.gni") -buildflag_header("rust_buildflags") { - header = "rust_buildflags.h" - flags = [ "TOOLCHAIN_HAS_RUST=$toolchain_has_rust" ] -} - if (toolchain_has_rust) { config("edition_2021") { rustflags = [ "--edition=2021" ] @@ -33,23 +28,21 @@ if (toolchain_has_rust) { defines = [ "RUST_CXX_NO_EXCEPTIONS" ] - if (is_win) { - defines += [ "CXX_RS_EXPORT=__declspec(dllexport)" ] + # We cannot depend on base/base_export.h because base depends on us. + if (is_component_build) { + if (is_win) { + defines += [ "CXX_RS_EXPORT=__declspec(dllexport)" ] + } else { + defines += [ "CXX_RS_EXPORT=__attribute__((visibility(\"default\")))" ] + } } else { - defines += [ "CXX_RS_EXPORT=__attribute__((visibility(\"default\")))" ] + defines += [ "CXX_RS_EXPORT=" ] } # Depending on the C++ bindings side of cxx then requires also depending # on the Rust bindings, since one calls the other. And the Rust bindings # require the Rust standard library. - # Normally the Rust stdlib is brought in as a dependency by depending - # on any first-party Rust target. But in this case, it's conceivable - # that pure-C++ targets will not depend on any 1p Rust code so we'll add - # the Rust stdlib explicitly. - deps = [ - ":cxx_rustdeps", - "//build/rust/std", - ] + deps = [ ":cxx_rustdeps" ] } # The required dependencies for cxx-generated bindings, that must be included @@ -77,3 +70,18 @@ config("proc_macro_extern") { "proc_macro", ] } + +# Forbids unsafe code in crates with this config. +config("forbid_unsafe") { + rustflags = [ "-Funsafe_code" ] +} + +config("panic_immediate_abort") { + visibility = [ "//build/rust/std/rules:*" ] + if (is_official_build) { + rustflags = [ + "--cfg", + "feature=\"panic_immediate_abort\"", + ] + } +} diff --git a/build/rust/OWNERS b/build/rust/OWNERS index 4ba728c..0e7aca6 100644 --- a/build/rust/OWNERS +++ b/build/rust/OWNERS @@ -2,7 +2,6 @@ adetaylor@chromium.org ajgo@chromium.org collinbaker@chromium.org danakj@chromium.org -jclinton@chromium.org lukasza@chromium.org rsesek@chromium.org thakis@chromium.org diff --git a/build/rust/analyze.gni b/build/rust/analyze.gni deleted file mode 100644 index 30784ca..0000000 --- a/build/rust/analyze.gni +++ /dev/null @@ -1,78 +0,0 @@ -# Copyright 2023 The Chromium Authors -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -import("//build/config/compute_inputs_for_analyze.gni") - -if (compute_inputs_for_analyze) { - template("analyze_rust") { - _target_name = target_name - assert(defined(invoker.crate_root)) - - action("${_target_name}_collect_sources") { - forward_variables_from(invoker, - "*", - TESTONLY_AND_VISIBILITY + [ - "inputs", - "script", - "sources", - "depfile", - "outputs", - "args", - ]) - forward_variables_from(invoker, [ "testonly" ]) - - script = "//build/rust/collect_rust_sources.py" - depfile = "${target_gen_dir}/${target_name}.verify.d" - outputs = [ depfile ] - - args = [ - "--generate-depfile", - "third_party/rust-toolchain/bin/rustc", - rebase_path(crate_root, root_build_dir), - rebase_path(depfile, root_build_dir), - "{{rustflags}}", - ] - } - - action(_target_name) { - forward_variables_from(invoker, [ "testonly" ]) - - # Constructs a depfile of all rust sources in the crate. - deps = [ ":${_target_name}_collect_sources" ] - - # This target is reached once during `gn gen` and then again during - # `gn analyze`. - # - # 1. When doing `gn gen`, the ':${_target_name}_collect_sources' - # target generates a depfile containing all the rust sources of - # the crate. The exec_script() below runs first, and it produces an - # empty result. - # 2. When doing `gn analyze`, the exec_script() reads the depfile that - # was written during `gn gen` and puts each Rust file in the crate - # into `inputs`. - depfile_path = [] - foreach(d, get_target_outputs(":${_target_name}_collect_sources")) { - depfile_path += [ rebase_path(d, root_build_dir) ] - } - - # Here we read the depfile from `gn gen` when doing `gn analyze`, and - # add all the rust files in the crate to `inputs`. This ensures that - # analyze considers them as affecting tests that depend on the crate. - rust_srcs = exec_script("//build/rust/collect_rust_sources.py", - [ "--read-depfile" ] + depfile_path, - "list lines") - inputs = [] - foreach(s, rust_srcs) { - inputs += [ rebase_path(s, "//", root_build_dir) ] - } - script = "//build/rust/collect_rust_sources.py" - args = [ - "--stamp", - rebase_path("${target_gen_dir}/${target_name}.verify.stamp", - root_build_dir), - ] - outputs = [ "${target_gen_dir}/${target_name}.verify.stamp" ] - } - } -} diff --git a/build/rust/cargo_crate.gni b/build/rust/cargo_crate.gni index ef30626..427fcf6 100644 --- a/build/rust/cargo_crate.gni +++ b/build/rust/cargo_crate.gni @@ -2,8 +2,9 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. -import("//build/config/rust.gni") -import("//build/rust/rust_target.gni") +import("//build/rust/rust_executable.gni") +import("//build/rust/rust_macro.gni") +import("//build/rust/rust_static_library.gni") # This template allows for building Cargo crates within gn. # @@ -22,7 +23,6 @@ import("//build/rust/rust_target.gni") # Arguments: # sources # crate_root -# epoch # deps # aliased_deps # features @@ -33,6 +33,20 @@ import("//build/rust/rust_target.gni") # library_configs/executable_configs # All just as in rust_target.gni # +# epoch (optional) +# The major version of the library, which is used to differentiate between +# multiple versions of the same library name. This includes all leading 0s +# and the first non-zero value in the crate's version. This should be left +# as the default, which is "0", for first-party code unless there are +# multiple versions of a crate present. For third-party code, the version +# epoch (matching the directory it is found in) should be specified. +# +# Examples: +# 1.0.2 => epoch = "1" +# 4.2.0 => epoch = "4" +# 0.2.7 => epoch = "0.2" +# 0.0.3 => epoch = "0.0.3" +# # dev_deps # Same meaning as test_deps in rust_static_library.gni, but called # dev_deps to match Cargo.toml better. @@ -76,13 +90,22 @@ import("//build/rust/rust_target.gni") # command line tool help) template("cargo_crate") { - orig_target_name = target_name + _orig_target_name = target_name - _crate_name = orig_target_name + _crate_name = _orig_target_name if (defined(invoker.crate_name)) { _crate_name = invoker.crate_name } + # Construct metadata from the crate epoch or an explicitly provided metadata + # field. + _rustc_metadata = "" + if (defined(invoker.rustc_metadata)) { + _rustc_metadata = invoker.rustc_metadata + } else if (defined(invoker.epoch)) { + _rustc_metadata = "${_crate_name}-${invoker.epoch}" + } + # Executables need to have unique names. Work out a prefix. if (defined(invoker.build_root)) { _epochlabel = "vunknown" @@ -90,8 +113,17 @@ template("cargo_crate") { _tempepoch = string_replace(invoker.epoch, ".", "_") _epochlabel = "v${_tempepoch}" } - build_script_name = + + # This name includes the target name to ensure it's unique for each possible + # build target in the same BUILD.gn file. + _build_script_name = "${_crate_name}_${target_name}_${_epochlabel}_build_script" + + # Where the OUT_DIR will point when running the build script exe, and + # compiling the crate library/binaries. This directory must include the + # target name to avoid collisions between multiple GN targets that exist + # in the same BUILD.gn. + _build_script_env_out_dir = "$target_gen_dir/$target_name" } _rustenv = [] @@ -99,36 +131,72 @@ template("cargo_crate") { _rustenv = invoker.rustenv } if (defined(invoker.cargo_pkg_authors)) { - _rustenv += [ string_join("=", - [ - "CARGO_PKG_AUTHORS", - invoker.cargo_pkg_authors, - ]) ] + _rustenv += [ "CARGO_PKG_AUTHORS=${invoker.cargo_pkg_authors}" ] } if (defined(invoker.cargo_pkg_version)) { - _rustenv += [ string_join("=", - [ - "CARGO_PKG_VERSION", - invoker.cargo_pkg_version, - ]) ] + _rustenv += [ "CARGO_PKG_VERSION=${invoker.cargo_pkg_version}" ] } if (defined(invoker.cargo_pkg_name)) { - _rustenv += [ string_join("=", - [ - "CARGO_PKG_NAME", - invoker.cargo_pkg_name, - ]) ] + _rustenv += [ "CARGO_PKG_NAME=${invoker.cargo_pkg_name}" ] } if (defined(invoker.cargo_pkg_description)) { - _rustenv += [ string_join("=", - [ - "CARGO_PKG_DESCRIPTION", - invoker.cargo_pkg_description, - ]) ] + _rustenv += [ "CARGO_PKG_DESCRIPTION=${invoker.cargo_pkg_description}" ] + } + + # Try to determine the CARGO_MANIFEST_DIR, preferring the directory + # with build.rs and otherwise assuming that the target contains a + # `crate/` subdirectory. + if (defined(invoker.build_root)) { + manifest_dir = rebase_path(get_path_info(invoker.build_root, "dir"), "") + } else { + build_gn_dir = get_label_info(target_name, "dir") + manifest_dir = rebase_path(build_gn_dir + "/crate", "") + } + _rustenv += [ "CARGO_MANIFEST_DIR=${manifest_dir}" ] + + # cargo_crate() should set library_configs, executable_configs, + # proc_macro_configs. Not configs. + assert(!defined(invoker.configs)) + + # Work out what we're building. + _crate_type = "rlib" + if (defined(invoker.crate_type)) { + _crate_type = invoker.crate_type + } + if (_crate_type == "cdylib") { + # Crates are rarely cdylibs. The example encountered so far aims + # to expose a C API to other code. In a Chromium context, we don't + # want to build that as a dylib for a couple of reasons: + # * rust_shared_library does not work on Mac. rustc does not know + # how to export the __llvm_profile_raw_version symbol. + # * even if it did work, this might require us to distribute extra + # binaries (.so/.dylib etc.) + # For the only case we've had so far, it makes more sense to build + # the code as a static library which we can then link into downstream + # binaries. + _crate_type = "rlib" + } + if (_crate_type == "bin") { + _target_type = "rust_executable" + assert(!defined(invoker.epoch)) + if (defined(invoker.executable_configs)) { + _configs = invoker.executable_configs + } + } else if (_crate_type == "proc-macro") { + _target_type = "rust_macro" + if (defined(invoker.proc_macro_configs)) { + _configs = invoker.proc_macro_configs + } + } else { + assert(_crate_type == "rlib") + _target_type = "rust_static_library" + if (defined(invoker.library_configs)) { + _configs = invoker.library_configs + } } # The main target, either a Rust source set or an executable. - rust_target(target_name) { + target(_target_type, target_name) { forward_variables_from(invoker, "*", TESTONLY_AND_VISIBILITY + [ @@ -137,43 +205,52 @@ template("cargo_crate") { "build_sources", "build_script_inputs", "build_script_outputs", - "output_dir", + "epoch", "unit_test_target", - "target_type", "configs", + "executable_configs", + "library_configs", + "proc_macro_configs", "rustenv", + "dev_deps", ]) forward_variables_from(invoker, TESTONLY_AND_VISIBILITY) + if (defined(crate_type) && crate_type == "cdylib") { + # See comments above about cdylib. + crate_type = "rlib" + } + + rustc_metadata = _rustc_metadata + + # TODO(crbug.com/1422745): don't default to true. This requires changes to + # third_party.toml and gnrt when generating third-party build targets. + allow_unsafe = true - # Work out what we're building. - crate_type = "rlib" - if (defined(invoker.crate_type)) { - crate_type = invoker.crate_type + configs = [] + if (defined(_configs)) { + configs += _configs } + + if (_crate_type == "rlib") { + # Forward configs for unit tests. + if (defined(invoker.executable_configs)) { + executable_configs = invoker.executable_configs + } + } + if (!defined(rustflags)) { rustflags = [] } rustenv = _rustenv - if (crate_type == "bin") { - target_type = "executable" - assert(!defined(invoker.epoch)) - } else if (crate_type == "proc-macro") { - target_type = "rust_proc_macro" - } else { - assert(crate_type == "rlib") - target_type = "rust_library" - } if (!defined(build_native_rust_unit_tests)) { - build_native_rust_unit_tests = true + build_native_rust_unit_tests = _crate_type != "proc-macro" + } + if (build_native_rust_unit_tests) { + # Unit tests in a proc-macro crate type don't make sense, you can't + # compile executables against the `proc_macro` crate. + assert(_crate_type != "proc-macro") } - - # We may generate multiple build rules for the same Cargo crate, as they may - # have multiple build configurations: for use from deps, build-deps or - # dev-deps. But that would try to build multiple crates with the same name, - # colliding on the libcratename.rlib outputs. So we specify an output_dir - # for Cargo crates which includes the GN target name to disambiguate them. - output_dir = "${target_out_dir}/${orig_target_name}" # The unit tests for each target, if generated, should be unique as well. # a) It needs to be unique even if multiple build targets have the same @@ -181,16 +258,30 @@ template("cargo_crate") { # b) It needs to be unique even if multiple build targets have the same # `crate_name` and target name, but different epochs. _unit_test_unique_target_name = "" - if (_crate_name != orig_target_name) { - _unit_test_unique_target_name = "${orig_target_name}_" + if (_crate_name != _orig_target_name) { + _unit_test_unique_target_name = "${_orig_target_name}_" } _unit_test_unique_epoch = "" if (defined(invoker.epoch)) { _epoch_str = string_replace(invoker.epoch, ".", "_") _unit_test_unique_epoch = "v${_epoch_str}_" } + if (defined(output_dir) && output_dir != "") { + unit_test_output_dir = output_dir + } unit_test_target = "${_unit_test_unique_target_name}${_crate_name}_${_unit_test_unique_epoch}unittests" + if ((!defined(output_dir) || output_dir == "") && _crate_type == "rlib") { + # Cargo crate rlibs can be compiled differently for tests, and must not + # collide with the production outputs. This does *not* override the + # unit_test_output_dir, which is set above, as that target is not an rlib. + output_dir = "$target_out_dir/$_orig_target_name" + } + + if (defined(invoker.dev_deps)) { + test_deps = invoker.dev_deps + } + if (defined(invoker.build_root)) { # Uh-oh, we have a build script if (!defined(deps)) { @@ -199,15 +290,6 @@ template("cargo_crate") { if (!defined(sources)) { sources = [] } - if (defined(invoker.dev_deps)) { - test_deps = invoker.dev_deps - } - - # Re-compute the directory the build script used as its `--out-dir`. This - # logic needs to match that in `action("${build_script_name}_output")`. - _build_script_target_out_dir = - get_label_info(":${build_script_name}_output", "target_out_dir") - _build_script_out_dir = "$_build_script_target_out_dir/$orig_target_name" # This... is a bit weird. We generate a file called cargo_flags.rs which # does not actually contain Rust code, but instead some flags to add @@ -215,7 +297,7 @@ template("cargo_crate") { # we can include it in the 'sources' line and thus have dependency # calculation done correctly. data_deps won't work because targets don't # require them to be present until runtime. - flags_file = "$_build_script_out_dir/cargo_flags.rs" + flags_file = "$_build_script_env_out_dir/cargo_flags.rs" rustflags += [ "@" + rebase_path(flags_file, root_build_dir) ] sources += [ flags_file ] if (defined(invoker.build_script_outputs)) { @@ -225,49 +307,52 @@ template("cargo_crate") { # about the dependency either way. foreach(extra_source, filter_include(invoker.build_script_outputs, [ "*.rs" ])) { - sources += [ "$_build_script_out_dir/$extra_source" ] + sources += [ "$_build_script_env_out_dir/$extra_source" ] } inputs = [] foreach(extra_source, filter_exclude(invoker.build_script_outputs, [ "*.rs" ])) { - inputs += [ "$_build_script_out_dir/$extra_source" ] + inputs += [ "$_build_script_env_out_dir/$extra_source" ] } } - deps += [ ":${build_script_name}_output" ] - } else { - not_needed([ "orig_target_name" ]) + deps += [ ":${_build_script_name}_output" ] } } if (defined(invoker.build_root)) { # Extra targets required to make build script work - action("${build_script_name}_output") { + action("${_build_script_name}_output") { script = rebase_path("//build/rust/run_build_script.py") - build_script_target = - ":${build_script_name}($host_toolchain_no_sanitizers)" + build_script_target = ":${_build_script_name}($rust_macro_toolchain)" deps = [ build_script_target ] - _build_script_exe_dir = + # The build script may be built with a different toolchain when + # cross-compiling (the host toolchain) so we must find the path relative + # to that. + _build_script_root_out_dir = get_label_info(build_script_target, "root_out_dir") - build_script = "$_build_script_exe_dir/${build_script_name}" - if (is_win) { - build_script = "${build_script}.exe" + _build_script_exe = "$_build_script_root_out_dir/$_build_script_name" + + # The executable is always built with the `rust_macro_toolchain` which + # targets the `host_os`. The rule here is on the `target_toolchain` which + # can be different (e.g. compiling on Linux, targeting Windows). + if (host_os == "win") { + _build_script_exe = "${_build_script_exe}.exe" } - _build_script_out_dir = "$target_out_dir/$orig_target_name" - flags_file = "$_build_script_out_dir/cargo_flags.rs" + _flags_file = "$_build_script_env_out_dir/cargo_flags.rs" - inputs = [ build_script ] - outputs = [ flags_file ] + inputs = [ _build_script_exe ] + outputs = [ _flags_file ] args = [ "--build-script", - rebase_path(build_script, root_build_dir), + rebase_path(_build_script_exe, root_build_dir), "--output", - rebase_path(flags_file, root_build_dir), + rebase_path(_flags_file, root_build_dir), "--rust-prefix", - rebase_path("${rust_sysroot}/bin"), + rebase_path("${rust_sysroot}/bin", root_build_dir), "--out-dir", - rebase_path(_build_script_out_dir, root_build_dir), + rebase_path(_build_script_env_out_dir, root_build_dir), "--src-dir", rebase_path(get_path_info(invoker.build_root, "dir"), root_build_dir), ] @@ -285,7 +370,7 @@ template("cargo_crate") { args += [ "--generated-files" ] args += invoker.build_script_outputs foreach(generated_file, invoker.build_script_outputs) { - outputs += [ "$_build_script_out_dir/$generated_file" ] + outputs += [ "$_build_script_env_out_dir/$generated_file" ] } } if (_rustenv != []) { @@ -297,14 +382,25 @@ template("cargo_crate") { } } - if (current_toolchain == host_toolchain_no_sanitizers) { - rust_target(build_script_name) { - target_type = "executable" + if (toolchain_for_rust_host_build_tools) { + # The build script is only available to be built on the host, and we use + # the rust_macro_toolchain for it to unblock building them while the + # Chromium stdlib is still being compiled. + rust_executable(_build_script_name) { sources = invoker.build_sources crate_root = invoker.build_root if (defined(invoker.build_deps)) { deps = invoker.build_deps } + + # The ${_build_script_name}_output target looks for the exe in this + # location. Due to how the Windows component build works, this has to + # be $root_out_dir for all EXEs. In component build, C++ links to the + # CRT as a DLL, and if Rust does not match, we can't link mixed target + # Rust EXE/DLLs, as the headers in C++ said something different than + # what Rust links. Since the CRT DLL is placed in the $root_out_dir, + # an EXE can find it if it's also placed in that dir. + output_dir = root_out_dir rustenv = _rustenv forward_variables_from(invoker, [ @@ -312,8 +408,22 @@ template("cargo_crate") { "edition", "rustflags", ]) - executable_configs -= [ "//build/config/compiler:chromium_code" ] - executable_configs += [ "//build/config/compiler:no_chromium_code" ] + configs -= [ + "//build/config/compiler:chromium_code", + + # Avoid generating profiling data for build scripts. + # + # TODO(crbug.com/1426472): determine for sure whether to remove this + # config. I'm not sure of the overlap between PGO instrumentation and + # code coverage instrumentation, but we definitely don't want build + # script coverage for PGO, while we might for test coverage metrics. + # + # If we do include build script output in test metrics, it could be + # misleading: exercising some code from a build script doesn't give us + # the same signal as an actual test. + "//build/config/coverage:default_coverage", + ] + configs += [ "//build/config/compiler:no_chromium_code" ] } } else { not_needed(invoker, @@ -325,10 +435,16 @@ template("cargo_crate") { "build_script_outputs", ]) } + } else { + not_needed([ + "_name_specific_output_dir", + "_orig_target_name", + ]) } } set_defaults("cargo_crate") { library_configs = default_compiler_configs executable_configs = default_executable_configs + proc_macro_configs = default_rust_proc_macro_configs } diff --git a/build/rust/clanglibs/BUILD.gn b/build/rust/clanglibs/BUILD.gn deleted file mode 100644 index a80b29c..0000000 --- a/build/rust/clanglibs/BUILD.gn +++ /dev/null @@ -1,80 +0,0 @@ -# Copyright 2022 The Chromium Authors -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -# Several Rust codegen tools (bindgen, autocxx_gen) link against -# libclang. We prefer to distribute the static libraries that make up -# the conceptual "libclang", but there are quite a few such libraries. -# This script enumerates them. - -import("//build/rust/rust_static_library.gni") - -_clang_libs_dir = "//third_party/llvm-build/Release+Asserts/lib" - -if (toolchain_has_rust) { - # This requires you to configure your .gclient file with - # "custom_vars": { - # "checkout_clang_libs": True, - # } - rust_static_library("clanglibs") { - # Clang libs are used to build developer tools that run on a developer - # machine. - assert(!is_android) - - crate_root = get_label_info(":find_clanglibs", "target_gen_dir") + "/lib.rs" - sources = [ crate_root ] - deps = [ ":find_clanglibs" ] - - # all_dependent_configs not public_configs because these directives - # need to propagate to the eventual final linking step. Our immediate - # dependent is probably libclang_sys.rlib, which will only later be - # linked into an executable. - all_dependent_configs = [ ":clanglibs_static_config" ] - } - - action("find_clanglibs") { - # We need to tell rustc to link such binaries against a large - # and frequently-varying list of static libraries. - # gn/ninja, however, require statically determined dependency - # rules. - # Our options are: - # a) hard-code them in a .gn file like this, changing them frequently; - # b) use exec_script to enumerate them. This will slow down everyone's - # 'gn' invocations - # c) use libclang.so instead - # d) put these files entirely outside the visibility of gn/ninja - # We choose option (d). We generate a crate which tells rustc to link - # against these things. - script = "find_clanglibs.py" - _generated_crate_root = "$target_gen_dir/lib.rs" - depfile = "$target_out_dir/find_clanglibs.d" - args = [ - "--clang-libs-dir", - rebase_path(_clang_libs_dir), - "--output", - rebase_path(_generated_crate_root, root_build_dir), - "--depfile", - rebase_path(depfile, root_build_dir), - ] - - # Always rerun this script when clang rolls, in case the - # set of libraries has changed. The following script contains - # a clang revision label, so is guaranteed to change each time - # clang rolls. - inputs = [ rebase_path("//tools/clang/scripts/update.py") ] - outputs = [ _generated_crate_root ] - visibility = [ ":*" ] - } - - config("clanglibs_static_config") { - # Inform dependent rustc invocations where these various libraries - # are to be found. - rustflags = [ "-L" + rebase_path(_clang_libs_dir) ] - - # At present, all known Rust codegen tools are based ultimately - # on bindgen and libclang-sys, so set the environment variable - # required to inform those build processes where the libraries - # are. - rustenv = [ "LIBCLANG_STATIC_PATH=" + rebase_path(_clang_libs_dir) ] - } -} diff --git a/build/rust/clanglibs/find_clanglibs.py b/build/rust/clanglibs/find_clanglibs.py deleted file mode 100755 index 8fd667a..0000000 --- a/build/rust/clanglibs/find_clanglibs.py +++ /dev/null @@ -1,58 +0,0 @@ -#!/usr/bin/env/python3 - -# Copyright 2022 The Chromium Authors -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -# Enumerate all clang libraries and generate a .rs file which is built into a -# library that links all the clanglibs into it. Depending on that library -# ensures linking against our clang libraries. -# See BUILD.gn in this directory for more context. - -import argparse -import os -import stat -import sys -import shutil -import subprocess -import re - -LIB_BASENAME_RE = re.compile(r"lib(.*)\.(?:lib|a)$", re.I) - - -def main(): - parser = argparse.ArgumentParser("find_clanglibs.py") - parser.add_argument("--output", help="Path to rsp file", required=True) - parser.add_argument("--depfile", help="Path to write depfile", required=True) - parser.add_argument("--clang-libs-dir", - help="Where to find clang and LLVM libs", - required=True) - args = parser.parse_args() - if not os.path.exists(os.path.join( - args.clang_libs_dir, "libclang.a")) and not os.path.exists( - os.path.join(args.clang_libs_dir, "libclang.lib")): - print("Couldn't find libclang.a|lib. Please ensure you set a custom var in " - "your .gclient file like so:\n" - " \"custom_vars\": { \"checkout_clang_libs\": True, }\n" - "Then run gclient sync; rm " - "/obj/build/rust/clanglibs/clang_libs.rsp.") - return -1 - with open(args.depfile, 'w') as depfile: - depfile.write("%s:" % args.output) - with open(args.output, 'w') as output: - output.write("//! Generated by build/rust/clanglibs/find_clanglibs.py\n") - output.write("//! @generated\n") - for f in os.listdir(args.clang_libs_dir): - m = LIB_BASENAME_RE.match(f) - if m: - basename = m.group(1) - output.write("#[link(name=\"{}\")]\n".format(basename)) - full_path = os.path.join(args.clang_libs_dir, f) - depfile.write(" {} \\\n".format(full_path)) - output.write("#[link(name=\"stdc++\")]\n") - output.write("#[link(name=\"z\")]\n") - output.write("extern {}\n") - - -if __name__ == '__main__': - sys.exit(main()) diff --git a/build/rust/collect_rust_sources.py b/build/rust/collect_rust_sources.py deleted file mode 100755 index 48f2f1f..0000000 --- a/build/rust/collect_rust_sources.py +++ /dev/null @@ -1,64 +0,0 @@ -#!/usr/bin/env python3 -# Copyright 2023 The Chromium Authors -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. -'''Is used to find all rust files in a crate, and write the result to a -depfile. Then, used again to read the same depfile and pull out just the -source files. Lastly, it is also used to write a stamp file at the same -location as the depfile.''' - -import argparse -import re -import subprocess -import sys - -FILE_REGEX = re.compile('^(.*):') - - -def main(): - parser = argparse.ArgumentParser( - description='Collect Rust sources for a crate') - parser.add_argument('--stamp', - action='store_true', - help='Generate a stamp file') - parser.add_argument('--generate-depfile', - action='store_true', - help='Generate a depfile') - parser.add_argument('--read-depfile', - action='store_true', - help='Read the previously generated depfile') - args, rest = parser.parse_known_args() - - if (args.stamp): - stampfile = rest[0] - with open(stampfile, "w") as f: - f.write("stamp") - elif (args.generate_depfile): - rustc = rest[0] - crate_root = rest[1] - depfile = rest[2] - rustflags = rest[3:] - - rustc_args = [ - "--emit=dep-info=" + depfile, "-Zdep-info-omit-d-target", crate_root - ] - subprocess.check_call([rustc] + rustc_args + rustflags) - elif (args.read_depfile): - depfile = rest[0] - try: - with open(depfile, "r") as f: - files = [FILE_REGEX.match(l) for l in f.readlines()] - for f in files: - if f: - print(f.group(1)) - except: - pass - else: - print("ERROR: Unknown action") - parser.print_help() - return 1 - return 0 - - -if __name__ == '__main__': - sys.exit(main()) diff --git a/build/rust/rs_bindings_from_cc.gni b/build/rust/rs_bindings_from_cc.gni index 9bd08cf..463bd61 100644 --- a/build/rust/rs_bindings_from_cc.gni +++ b/build/rust/rs_bindings_from_cc.gni @@ -32,7 +32,7 @@ import("//build/rust/mixed_static_library.gni") # the *public* API that bindings are needed for. # # TODO(crbug.com/1329611): Internal headers should still to be included in -# the targets_and_headers metadata... +# the targets_and_args metadata... # # deps: # Other `rs_bindings_from_cc` targets that the bindings need to depend on @@ -157,7 +157,7 @@ template("rs_bindings_from_cc") { _rs_out_path = "${target_gen_dir}/${_lib_target_name}.rs" _cc_out_path = "${target_gen_dir}/${_lib_target_name}_impl.cc" - # Calculating the --targets_and_headers snippet for the *current* target + # Calculating the --targets_and_args snippet for the *current* target # and putting it into GN's `metadata`. group(_metadata_target_name) { testonly = _testonly @@ -169,8 +169,8 @@ template("rs_bindings_from_cc") { metadata = { # The data below corresponds to a single-target entry inside - # `--targets_and_headers` cmdline argument of `rs_bindings_from_cc`. - crubit_target_and_headers = [ + # `--targets_and_args` cmdline argument of `rs_bindings_from_cc`. + crubit_target_and_args = [ { # The `get_label_info` call below expands ":foo_rs_api" into # something like "//dir/bar/baz:foo_rs_api". Crubit assumes that @@ -183,7 +183,7 @@ template("rs_bindings_from_cc") { } } - # Gathering --targets-and-headers data from *all* transitive dependencies and + # Gathering --targets-and-args data from *all* transitive dependencies and # putting them into the file at `_metadata_path`. generated_file(_gen_metadata_target_name) { testonly = _testonly @@ -195,7 +195,7 @@ template("rs_bindings_from_cc") { testonly = _testonly outputs = [ _metadata_path ] output_conversion = "json" - data_keys = [ "crubit_target_and_headers" ] + data_keys = [ "crubit_target_and_args" ] # `walk_keys` are used to limit how deep the transitive dependency goes. # This is important, because Crubit doesn't care about all the `deps` or @@ -266,7 +266,7 @@ template("rs_bindings_from_cc") { # Target-specific inputs: "--public_headers", string_join(",", _rebased_public_headers), - "--targets_and_headers_from_gn", + "--targets_and_args_from_gn", rebase_path(_metadata_path), ] diff --git a/build/rust/run_bindgen.py b/build/rust/run_bindgen.py index da84f4b..c9d192f 100755 --- a/build/rust/run_bindgen.py +++ b/build/rust/run_bindgen.py @@ -9,18 +9,18 @@ import subprocess import sys -# Set up path to be able to import build_utils. +# Set up path to be able to import action_helpers. sys.path.append( os.path.join(os.path.dirname(os.path.abspath(__file__)), os.pardir, - os.pardir, 'build', 'android', 'gyp')) -from util import build_utils + os.pardir, 'build')) +import action_helpers from filter_clang_args import filter_clang_args def atomic_copy(in_path, out_path): with open(in_path, 'rb') as input: - with build_utils.AtomicOutput(out_path, only_if_changed=True) as output: + with action_helpers.atomic_output(out_path) as output: content = input.read() output.write(content) @@ -39,8 +39,15 @@ def main(): parser.add_argument("--depfile", help="depfile to output with header dependencies") parser.add_argument("--output", help="output .rs bindings", required=True) - parser.add_argument("--ld-library-path", help="LD_LIBRARY_PATH to set") + parser.add_argument("--ld-library-path", + help="LD_LIBRARY_PATH (or DYLD_LIBRARY_PATH on Mac) to " + "set") + parser.add_argument("--libclang-path", + help="Path to the libclang shared libray.") parser.add_argument("-I", "--include", help="include path", action="append") + parser.add_argument("--bindgen-flags", + help="flags to pass to bindgen", + nargs="*") parser.add_argument( "clangargs", metavar="CLANGARGS", @@ -48,11 +55,17 @@ def main(): "https://docs.rs/bindgen/latest/bindgen/struct.Builder.html#method.clang_args)", nargs="*") args = parser.parse_args() - genargs = [] - # Bindgen settings we use for Chromium + # Args passed to the actual bindgen cli + genargs = [] genargs.append('--no-layout-tests') - genargs.append('--size_t-is-usize') + if args.bindgen_flags is not None: + for flag in args.bindgen_flags: + genargs.append("--" + flag) + + # TODO(danakj): We need to point bindgen to + # //third_party/rust-toolchain/bin/rustfmt. + genargs.append('--no-rustfmt-bindings') genargs += ['--rust-target', 'nightly'] if args.depfile: @@ -65,7 +78,12 @@ def main(): genargs.extend(filter_clang_args(args.clangargs)) env = os.environ if args.ld_library_path: - env["LD_LIBRARY_PATH"] = args.ld_library_path + if sys.platform == 'darwin': + env["DYLD_LIBRARY_PATH"] = args.ld_library_path + else: + env["LD_LIBRARY_PATH"] = args.ld_library_path + if args.libclang_path: + env["LIBCLANG_PATH"] = args.libclang_path returncode = subprocess.run([args.exe, *genargs], env=env).returncode if returncode != 0: # Make sure we don't emit anything if bindgen failed. diff --git a/build/rust/run_build_script.py b/build/rust/run_build_script.py index f184edc..fe8eb10 100755 --- a/build/rust/run_build_script.py +++ b/build/rust/run_build_script.py @@ -24,21 +24,21 @@ # That's it. We don't even support the other standard cargo:rustc- # output messages. +import argparse +import io import os +import platform +import re +import subprocess import sys +import tempfile -# Set up path to be able to import build_utils +# Set up path to be able to import action_helpers sys.path.append( os.path.join(os.path.dirname(os.path.abspath(__file__)), os.pardir, - os.pardir, 'build', 'android', 'gyp')) -from util import build_utils + os.pardir, 'build')) +import action_helpers -import argparse -import io -import subprocess -import re -import platform -import tempfile RUSTC_VERSION_LINE = re.compile(r"(\w+): (.*)") @@ -106,7 +106,24 @@ def main(): else: env["TARGET"] = args.target target_components = env["TARGET"].split("-") - env["CARGO_CFG_TARGET_ARCH"] = target_components[0] + if len(target_components) == 2: + env["CARGO_CFG_TARGET_ARCH"] = target_components[0] + env["CARGO_CFG_TARGET_VENDOR"] = '' + env["CARGO_CFG_TARGET_OS"] = target_components[1] + env["CARGO_CFG_TARGET_ENV"] = '' + elif len(target_components) == 3: + env["CARGO_CFG_TARGET_ARCH"] = target_components[0] + env["CARGO_CFG_TARGET_VENDOR"] = target_components[1] + env["CARGO_CFG_TARGET_OS"] = target_components[2] + env["CARGO_CFG_TARGET_ENV"] = '' + elif len(target_components) == 4: + env["CARGO_CFG_TARGET_ARCH"] = target_components[0] + env["CARGO_CFG_TARGET_VENDOR"] = target_components[1] + env["CARGO_CFG_TARGET_OS"] = target_components[2] + env["CARGO_CFG_TARGET_ENV"] = target_components[3] + else: + print(f'Invalid TARGET {env["TARGET"]}') + sys.exit(1) if args.features: for f in args.features: feature_name = f.upper().replace("-", "_") @@ -128,7 +145,8 @@ def main(): env=env, cwd=args.src_dir, encoding='utf8', - capture_output=True) + stdout=subprocess.PIPE, + stderr=subprocess.PIPE) if proc.stderr.rstrip(): print(proc.stderr.rstrip(), file=sys.stderr) @@ -142,7 +160,7 @@ def main(): # AtomicOutput will ensure we only write to the file on disk if what we # give to write() is different than what's currently on disk. - with build_utils.AtomicOutput(args.output) as output: + with action_helpers.atomic_output(args.output) as output: output.write(flags.encode("utf-8")) # Copy any generated code out of the temporary directory, @@ -155,7 +173,7 @@ def main(): if not os.path.exists(out_dir): os.makedirs(out_dir) with open(in_path, 'rb') as input: - with build_utils.AtomicOutput(out_path) as output: + with action_helpers.atomic_output(out_path) as output: content = input.read() output.write(content) diff --git a/build/rust/run_rs_bindings_from_cc.py b/build/rust/run_rs_bindings_from_cc.py index 6885f33..bf3dd13 100755 --- a/build/rust/run_rs_bindings_from_cc.py +++ b/build/rust/run_rs_bindings_from_cc.py @@ -10,13 +10,10 @@ import subprocess import sys -# Set up path to be able to import build_utils. THIS_DIR = os.path.dirname(os.path.abspath(__file__)) CHROMIUM_SRC_DIR = os.path.relpath(os.path.join(THIS_DIR, os.pardir, os.pardir)) sys.path.append(THIS_DIR) -sys.path.append(os.path.join(CHROMIUM_SRC_DIR, 'build', 'android', 'gyp')) from run_bindgen import filter_clang_args -from util import build_utils RUST_TOOLCHAIN_DIR = os.path.join(CHROMIUM_SRC_DIR, "third_party", "rust-toolchain") @@ -37,9 +34,9 @@ def quote_arg(x): def main(): parser = argparse.ArgumentParser() - parser.add_argument("--targets_and_headers_from_gn", + parser.add_argument("--targets_and_args_from_gn", metavar="FILE", - help="File parsed into --targets_and_headers Crubit arg", + help="File parsed into --targets_and_args Crubit arg", required=True), parser.add_argument("--public_headers", metavar="FILE", @@ -72,14 +69,15 @@ def main(): [os.path.relpath(hdr) for hdr in args.public_headers.split(",")]))) # Targets to headers map. - with open(args.targets_and_headers_from_gn, "r") as f: - targets_and_headers = json.load(f) - for entry in targets_and_headers: + with open(args.targets_and_args_from_gn, "r") as f: + targets_and_args = json.load(f) + for entry in targets_and_args: + entry["f"] = ["supported"] hdrs = entry["h"] for i in range(len(hdrs)): hdrs[i] = os.path.relpath(hdrs[i]) - generator_args.append("--targets_and_headers={0}".format( - json.dumps(targets_and_headers))) + generator_args.append("--targets_and_args={0}".format( + json.dumps(targets_and_args))) # All Crubit invocations in Chromium share the following cmdline args. generator_args.append(f"--rustfmt_exe_path={RUSTFMT_EXE_PATH}") diff --git a/build/rust/rust_bindgen.gni b/build/rust/rust_bindgen.gni index caad79e..e57bf48 100644 --- a/build/rust/rust_bindgen.gni +++ b/build/rust/rust_bindgen.gni @@ -7,6 +7,24 @@ import("//build/config/rust.gni") import("//build/config/sysroot.gni") import("//build/rust/rust_static_library.gni") +if (is_win) { + import("//build/toolchain/win/win_toolchain_data.gni") +} + +_bindgen_path = "${rust_bindgen_root}/bin/bindgen" +if (host_os == "win") { + _bindgen_path = "${_bindgen_path}.exe" +} + +# On Windows, the libclang.dll is beside the bindgen.exe, otherwise it is in +# ../lib. +_libclang_path = rust_bindgen_root +if (host_os == "win") { + _libclang_path += "/bin" +} else { + _libclang_path += "/lib" +} + # Template to build Rust/C bindings with bindgen. # # This template expands to a static_library containing the Rust side of the @@ -25,97 +43,154 @@ import("//build/rust/rust_static_library.gni") # on their dependencies and any configs applied. The same applies here. Set # any configs here as if this were a C target. # +# bindgen_flags: (optional) +# the additional bindgen flags which are passed to the executable +# # Rust targets depending on the output must include! the generated file. # template("rust_bindgen") { assert(defined(invoker.header), "Must specify the C header file to make bindings for.") - _target_name = target_name - _testonly = false - if (defined(invoker.testonly)) { - _testonly = invoker.testonly - } - if (defined(invoker.visibility)) { - _visibility = invoker.visibility - } - _deps = [] - if (defined(invoker.deps)) { - _deps += invoker.deps - } - - action(_target_name) { - testonly = _testonly - if (defined(_visibility)) { - visibility = _visibility - } + action(target_name) { + # bindgen relies on knowing the {{defines}} and {{include_dirs}} required + # to build the C++ headers which it's parsing. These are passed to the + # script's args and are populated using deps and configs. + forward_variables_from(invoker, + TESTONLY_AND_VISIBILITY + [ + "deps", + "configs", + ]) sources = [ invoker.header ] - # Several important compiler flags come from default_compiler_configs - configs = default_compiler_configs - if (defined(invoker.configs)) { - configs += invoker.configs + if (!defined(configs)) { + configs = [] } - bindgen_target = "//third_party/rust/bindgen/v0_60:bindgen($host_toolchain)" - - bindgen_obj_dir = get_label_info(bindgen_target, "root_out_dir") - bindgen_executable = "${bindgen_obj_dir}/bindgen" - if (is_win) { - bindgen_executable = "${bindgen_executable}.exe" - } + # Several important compiler flags come from default_compiler_configs + configs += default_compiler_configs output_dir = "$target_gen_dir" out_gen_rs = "$output_dir/${target_name}.rs" script = rebase_path("//build/rust/run_bindgen.py") - inputs = [ bindgen_executable ] + inputs = [ _bindgen_path ] depfile = "$target_out_dir/${target_name}.d" outputs = [ out_gen_rs ] - deps = [ bindgen_target ] - - # bindgen relies on knowing the {{defines}} and {{include_dirs}} required - # to build the C++ headers which it's parsing. These are passed to the - # script's args and are populated using deps and configs. - deps += _deps - args = [ "--exe", - rebase_path(bindgen_executable), + rebase_path(_bindgen_path, root_build_dir), "--header", rebase_path(invoker.header, root_build_dir), "--depfile", rebase_path(depfile, root_build_dir), "--output", rebase_path(out_gen_rs, root_build_dir), - "--ld-library-path", - rebase_path(clang_base_path + "/lib", root_build_dir), + "--libclang-path", + rebase_path(_libclang_path, root_build_dir), ] + if (is_linux) { + # Linux clang, and clang libs, use a shared libstdc++, which we must + # point to. + args += [ + "--ld-library-path", + rebase_path(clang_base_path + "/lib", root_build_dir), + ] + } + + if (defined(invoker.bindgen_flags)) { + args += [ "--bindgen-flags" ] + foreach(flag, invoker.bindgen_flags) { + args += [ flag ] + } + } + args += [ "--", "{{defines}}", "{{include_dirs}}", "{{cflags}}", "{{cflags_c}}", + ] - # This path contains important C headers (e.g. stddef.h) and {{cflags}} - # does not include it. Normally this path is implicitly added by clang but - # it does not happen for libclang. - # - # Add it last so includes from deps and configs take precedence. - "-isystem" + rebase_path( - clang_base_path + "/lib/clang/" + clang_version + "/include", - root_build_dir), - - # Passes C comments through as rustdoc attributes. - "-fparse-all-comments", - - # Default configs include "-fvisibility=hidden", and for some reason this - # causes bindgen not to emit function bindings. Override it. - "-fvisibility=default", + # libclang will run the system `clang` to find the "resource dir" which it + # places before the directory specified in `-isysroot`. + # https://github.com/llvm/llvm-project/blob/699e0bed4bfead826e210025bf33e5a1997c018b/clang/lib/Tooling/Tooling.cpp#L499-L510 + # + # This means include files are pulled from the wrong place if the `clang` + # says the wrong thing. We point it to our clang's resource dir which will + # make it behave consistently with our other command line flags and allows + # system headers to be found. + clang_resource_dir = + rebase_path(clang_base_path + "/lib/clang/" + clang_version, + root_build_dir) + args += [ + "-resource-dir", + clang_resource_dir, ] + + if (is_win) { + # On Windows we fall back to using system headers from a sysroot from + # depot_tools. This is negotiated by python scripts and the result is + # available in //build/toolchain/win/win_toolchain_data.gni. From there + # we get the `include_flags_imsvc` which point to the system headers. + if (host_cpu == "x86") { + win_toolchain_data = win_toolchain_data_x86 + } else if (host_cpu == "x64") { + win_toolchain_data = win_toolchain_data_x64 + } else if (host_cpu == "arm64") { + win_toolchain_data = win_toolchain_data_arm64 + } else { + error("Unsupported host_cpu, add it to win_toolchain_data.gni") + } + args += [ "${win_toolchain_data.include_flags_imsvc}" ] + } + + # Passes C comments through as rustdoc attributes. + if (is_win) { + args += [ "/clang:-fparse-all-comments" ] + } else { + args += [ "-fparse-all-comments" ] + } + + # Default configs include "-fvisibility=hidden", and for some reason this + # causes bindgen not to emit function bindings. Override it. + if (!is_win) { + args += [ "-fvisibility=default" ] + } + + if (is_win) { + # We pass MSVC style flags to clang on Windows, and libclang needs to be + # told explicitly to accept them. + args += [ "--driver-mode=cl" ] + + # On Windows, libclang adds arguments that it then fails to understand. + # -fno-spell-checking + # -fallow-editor-placeholders + # These should not cause bindgen to fail. + args += [ "-Wno-unknown-argument" ] + + # Replace these two arguments with a version that clang-cl can parse. + args += [ + "/clang:-fno-spell-checking", + "/clang:-fallow-editor-placeholders", + ] + } + + if (is_cfi) { + # LLVM searches for a default CFI ignorelist at (exactly) + # $(cwd)/lib/clang/$(llvm_version)/share/cfi_ignorelist.txt + # Even if we provide a custom -fsanitize-ignorelist, the absence + # of this default file will cause a fatal error. clang finds + # it within third_party/llvm-build, but for bindgen our cwd + # is the $out_dir. We _could_ create this file at the right + # location within the outdir using a "copy" target, but as + # we don't actually generate code within bindgen, the easier + # option is to tell bindgen to ignore all CFI ignorelists. + args += [ "-fno-sanitize-ignorelist" ] + } } } diff --git a/build/rust/rust_executable.gni b/build/rust/rust_executable.gni index ea22aa3..478f529 100644 --- a/build/rust/rust_executable.gni +++ b/build/rust/rust_executable.gni @@ -52,14 +52,12 @@ import("//build/rust/rust_target.gni") # This template is intended to serve the same purpose as 'rustc_library' # in Fuchsia. template("rust_executable") { - exclude_forwards = TESTONLY_AND_VISIBILITY + [ "configs" ] rust_target(target_name) { - forward_variables_from(invoker, "*", exclude_forwards) + forward_variables_from(invoker, + "*", + TESTONLY_AND_VISIBILITY + [ "configs" ]) forward_variables_from(invoker, TESTONLY_AND_VISIBILITY) - if (defined(invoker.configs)) { - library_configs = [] - library_configs = invoker.configs - } + executable_configs = invoker.configs target_type = "executable" assert(!defined(cxx_bindings)) } diff --git a/build/rust/rust_macro.gni b/build/rust/rust_macro.gni index 427220b..bcbb30e 100644 --- a/build/rust/rust_macro.gni +++ b/build/rust/rust_macro.gni @@ -10,10 +10,15 @@ import("//build/rust/rust_target.gni") # code for compilation. template("rust_macro") { rust_target(target_name) { - forward_variables_from(invoker, "*", TESTONLY_AND_VISIBILITY) + forward_variables_from(invoker, + "*", + TESTONLY_AND_VISIBILITY + [ "configs" ]) forward_variables_from(invoker, TESTONLY_AND_VISIBILITY) - - # Has rust_target generate a rust_proc_macro GN output. + proc_macro_configs = invoker.configs target_type = "rust_proc_macro" } } + +set_defaults("rust_macro") { + configs = default_rust_proc_macro_configs +} diff --git a/build/rust/rust_shared_library.gni b/build/rust/rust_shared_library.gni index 6bea51d..e1358c5 100644 --- a/build/rust/rust_shared_library.gni +++ b/build/rust/rust_shared_library.gni @@ -4,23 +4,25 @@ import("//build/rust/rust_target.gni") -# Defines a shared_library containing just Rust code. Has the same variables -# available as a rust_static_library. See rust_static_library.gni for -# documentation. -template("rust_shared_library") { - exclude_forwards = TESTONLY_AND_VISIBILITY + [ "configs" ] - rust_target(target_name) { - forward_variables_from(invoker, "*", exclude_forwards) - forward_variables_from(invoker, TESTONLY_AND_VISIBILITY) - if (defined(invoker.configs)) { - library_configs = [] - library_configs = invoker.configs +# Rust dylibs should not be built outside of component builds. Non-component +# builds use build configurations that conflict with the linking of dylibs. +if (is_component_build) { + # Defines a shared_library containing just Rust code. Has the same variables + # available as a rust_static_library. See rust_static_library.gni for + # documentation. + template("rust_shared_library") { + rust_target(target_name) { + forward_variables_from(invoker, + "*", + TESTONLY_AND_VISIBILITY + [ "configs" ]) + forward_variables_from(invoker, TESTONLY_AND_VISIBILITY) + shared_library_configs = invoker.configs + target_type = "shared_library" + crate_type = "cdylib" } - target_type = "shared_library" - crate_type = "cdylib" } -} -set_defaults("rust_shared_library") { - configs = default_shared_library_configs + set_defaults("rust_shared_library") { + configs = default_shared_library_configs + } } diff --git a/build/rust/rust_static_library.gni b/build/rust/rust_static_library.gni index 82b4304..03d3366 100644 --- a/build/rust/rust_static_library.gni +++ b/build/rust/rust_static_library.gni @@ -23,24 +23,13 @@ import("//build/rust/rust_target.gni") # discovered source files must match this list. (This is not yet enforced, # but will be.) # -# epoch (optional) -# The major version of the library, which is used to differentiate between -# multiple versions of the same library name. This includes all leading 0s -# and the first non-zero value in the crate's version. This should be left -# as the default, which is "0", for first-party code unless there are -# multiple versions of a crate present. For third-party code, the version -# epoch (matching the directory it is found in) should be specified. -# -# Examples: -# 1.0.2 => epoch = "1" -# 4.2.0 => epoch = "4" -# 0.2.7 => epoch = "0.2" -# 0.0.3 => epoch = "0.0.3" -# # edition (optional) # Edition of the Rust language to be used. # Options are "2015", "2018" and "2021". Defaults to "2021". # +# allow_unsafe (optional) +# Set to true to allow unsafe code in this target. Defaults to false. +# # configs (optional) # A list of config labels (in the GN meaning) applying to this target. # @@ -132,6 +121,13 @@ import("//build/rust/rust_target.gni") # test_inputs (optional) # Same as above but for the unit tests target # +# rustc_metadata (optional) +# Override the metadata identifying the target's version. This allows e.g. +# linking otherwise conflicting versions of the same Rust library. The +# metadata string will also be appended to the output library names. +# Should be used sparingly, since generally we should have one version and +# build of each target. +# # Example of usage: # # rust_static_library("foo_bar") { @@ -147,37 +143,15 @@ import("//build/rust/rust_target.gni") # This template is intended to serve the same purpose as 'rustc_library' # in Fuchsia. template("rust_static_library") { - exclude_forwards = TESTONLY_AND_VISIBILITY + [ "configs" ] _target_name = target_name - # For Gtest unittests, we must avoid dropping the object files even when - # there's no edges into them, as the tests register themselves through - # static initializers. For C++ this is done by not putting them in a library - # at all, but Rust must be compiled into an rlib. - # - # On AIX there's no flag to avoid pruning unit tests in this library from - # the linking step. - _whole_archive = defined(invoker.is_gtest_unittests) && - invoker.is_gtest_unittests && current_os != "aix" - rust_target(_target_name) { - forward_variables_from(invoker, "*", exclude_forwards) + forward_variables_from(invoker, + "*", + TESTONLY_AND_VISIBILITY + [ "configs" ]) forward_variables_from(invoker, TESTONLY_AND_VISIBILITY) - if (defined(invoker.configs)) { - library_configs = [] - library_configs = invoker.configs - } + library_configs = invoker.configs target_type = "rust_library" - - if (_whole_archive) { - all_dependent_configs = [ ":${_target_name}_whole_archive" ] - } - } - - if (_whole_archive) { - config("${_target_name}_whole_archive") { - ldflags = [ "-LinkWrapper,add-whole-archive=${_target_name}" ] - } } } diff --git a/build/rust/rust_target.gni b/build/rust/rust_target.gni index 61657fe..1fdad63 100644 --- a/build/rust/rust_target.gni +++ b/build/rust/rust_target.gni @@ -3,7 +3,6 @@ # found in the LICENSE file. import("//build/config/rust.gni") -import("//build/rust/analyze.gni") import("//build/rust/rust_unit_test.gni") # The //build directory is re-used for non-Chromium products. We do not support @@ -33,24 +32,34 @@ if (build_with_chromium) { # be provided. template("rust_target") { - # Only one of `crate_root` or `generate_crate_root` can be specified, or - # neither. - assert(!defined(invoker.crate_root) || - !(defined(invoker.generate_crate_root) && invoker.generate_crate_root)) - _target_name = target_name _crate_name = target_name if (defined(invoker.crate_name)) { _crate_name = invoker.crate_name } + _generate_crate_root = + defined(invoker.generate_crate_root) && invoker.generate_crate_root + + # Only one of `crate_root` or `generate_crate_root` can be specified, or + # neither. + assert(!defined(invoker.crate_root) || !_generate_crate_root) if (defined(invoker.output_dir) && invoker.output_dir != "") { - _out_dir = invoker.output_dir - } else { - _out_dir = target_out_dir + # This is where the build target (.exe, .rlib, etc) goes. + _output_dir = invoker.output_dir } - if (defined(invoker.generate_crate_root) && invoker.generate_crate_root) { + # This is where the OUT_DIR environment variable points to when running a + # build script and when compiling the build target, for consuming generated + # files. + _env_out_dir = "$target_gen_dir/$_target_name" + + _allow_unsafe = false + if (defined(invoker.allow_unsafe)) { + _allow_unsafe = invoker.allow_unsafe + } + + if (_generate_crate_root) { generated_file("${_target_name}_crate_root") { outputs = [ "${target_gen_dir}/${target_name}.rs" ] contents = [ @@ -77,8 +86,8 @@ template("rust_target") { ] } } - _crate_root = - string_join("", get_target_outputs(":${_target_name}_crate_root")) + _generated_crate_root = get_target_outputs(":${_target_name}_crate_root") + _crate_root = _generated_crate_root[0] } else if (defined(invoker.crate_root)) { _crate_root = invoker.crate_root } else if (invoker.target_type == "executable") { @@ -108,29 +117,22 @@ template("rust_target") { if (defined(invoker.edition)) { _edition = invoker.edition } - _configs = [ string_join("", - [ - "//build/rust:edition_", - _edition, - ]) ] + + assert(!defined(configs)) + _configs = [ "//build/rust:edition_${_edition}" ] + _test_configs = [] if (invoker.target_type == "executable") { - if (defined(invoker.executable_configs)) { - _configs += invoker.executable_configs - } + _configs += invoker.executable_configs } else if (invoker.target_type == "rust_proc_macro") { - if (defined(invoker.proc_macro_configs)) { - _configs += invoker.proc_macro_configs - } + _configs += invoker.proc_macro_configs + _test_configs += [ "//build/rust:proc_macro_extern" ] + } else if (invoker.target_type == "shared_library") { + _configs += invoker.shared_library_configs } else { - if (defined(invoker.library_configs)) { - _configs += invoker.library_configs - } + _configs += invoker.library_configs } - _forward_to_host_toolchain = false + if (invoker.target_type == "rust_proc_macro") { - if (current_toolchain != host_toolchain_no_sanitizers) { - _forward_to_host_toolchain = true - } _main_target_suffix = "${target_name}__proc_macro" } else { _main_target_suffix = "__rlib" @@ -151,6 +153,8 @@ template("rust_target") { } } + _is_data_dep = defined(invoker.is_data_dep) && invoker.is_data_dep + _build_unit_tests = false if (defined(invoker.build_native_rust_unit_tests)) { _build_unit_tests = @@ -168,19 +172,12 @@ template("rust_target") { "outside the Chromium build.") _cxx_bindings = invoker.cxx_bindings } - _rustenv = [ "OUT_DIR=" + rebase_path(_out_dir) ] + _rustenv = [ "OUT_DIR=" + + rebase_path(_env_out_dir, get_path_info(_crate_root, "dir")) ] if (defined(invoker.rustenv)) { _rustenv += invoker.rustenv } - # TODO(danakj): This could be a hash generated from the input crate, such as - # from its path, in which case the BUILD.gn would not need to specify - # anything. But GN doesn't give us a hash function to make that easy. - _metadata = "0" - if (defined(invoker.epoch)) { - _metadata = invoker.epoch - } - # We require that all source files are listed, even though this is # not a requirement for rustc. The reason is to ensure that tools # such as `gn deps` give the correct answer, and thus we trigger @@ -188,37 +185,50 @@ template("rust_target") { # TODO(crbug.com/1256930) - verify this is correct assert(defined(invoker.sources), "sources must be listed") - if (_forward_to_host_toolchain) { - # Redirect to the host toolchain. + if (invoker.target_type == "rust_proc_macro" && + !toolchain_for_rust_host_build_tools) { + # Redirect to the proc macro toolchain, which uses prebuilt stdlib libraries + # that are not built with panic=abort. group(_target_name) { testonly = _testonly if (defined(_visibility)) { visibility = _visibility } - public_deps = [ - ":${_target_name}${_main_target_suffix}($host_toolchain_no_sanitizers)", - ] + public_deps = + [ ":${_target_name}${_main_target_suffix}($rust_macro_toolchain)" ] } not_needed(invoker, "*") not_needed([ + "_allow_unsafe", "_build_unit_tests", "_crate_root", "_crate_name", "_cxx_bindings", "_deps", "_aliased_deps", - "_metadata", + "_is_data_dep", + "_rustc_metadata", "_out_dir", "_public_deps", "_rustenv", "_rustflags", "_support_use_from_cpp", - "_test_deps", "_testonly", "_visibility", ]) } else { + _rustc_metadata = "" + if (defined(invoker.rustc_metadata)) { + _rustc_metadata = invoker.rustc_metadata + } + + # Add a metadata-influenced suffix to the output name for libraries only. + _output_suffix = "" + if (invoker.target_type == "rust_library" && _rustc_metadata != "") { + _output_suffix = "-${_rustc_metadata}" + } + group(_target_name) { testonly = _testonly if (defined(_visibility)) { @@ -229,6 +239,12 @@ template("rust_target") { # like direct dependencies, so we expose them both in public_deps. public_deps = [ ":${_target_name}${_main_target_suffix}" ] + # TODO(danakj): This would not be needed if we stopped forwarding through + # a group in the common (non-procmacro) case. + if (_is_data_dep) { + data_deps = [ ":${_target_name}${_main_target_suffix}" ] + } + if (_cxx_bindings != []) { public_deps += [ ":${_target_name}_cxx_generated" ] @@ -241,7 +257,7 @@ template("rust_target") { # If C++ depends on and links in the library, we need to make sure C++ # links in the Rust stdlib. This is orthogonal to if the library exports # bindings for C++ to use. - deps = [ "//build/rust/std" ] + deps = [ "//build/rust/std:stdlib_for_clang" ] } } @@ -261,13 +277,62 @@ template("rust_target") { } if (!defined(invoker.no_std) || !invoker.no_std) { - _rust_deps += [ "//build/rust/std:prebuilt_std_for_rustc" ] + _rust_deps += [ "//build/rust/std:stdlib_for_rustc" ] } # You must go through the groups above to get to these targets. _visibility = [] _visibility = [ ":${_target_name}" ] + if (_build_unit_tests) { + _unit_test_target = "${_target_name}_unittests" + if (defined(invoker.unit_test_target)) { + _unit_test_target = invoker.unit_test_target + } + + rust_unit_test(_unit_test_target) { + testonly = true + crate_root = _crate_root + sources = invoker.sources + [ crate_root ] + rustflags = _rustflags + env_out_dir = _env_out_dir + if (defined(invoker.unit_test_output_dir)) { + output_dir = invoker.unit_test_output_dir + } + deps = _rust_deps + _public_deps + aliased_deps = _rust_aliased_deps + public_deps = [ ":${_target_name}" ] + if (defined(invoker.test_deps)) { + deps += invoker.test_deps + } + inputs = [] + if (defined(invoker.inputs)) { + inputs += invoker.inputs + } + if (defined(invoker.test_inputs)) { + inputs += invoker.test_inputs + } + if (defined(invoker.executable_configs)) { + configs = [] + configs += invoker.executable_configs + } + configs += _test_configs + rustenv = _rustenv + + if (!_allow_unsafe) { + configs += [ "//build/rust:forbid_unsafe" ] + } + } + } else { + not_needed([ + "_crate_root", + "_crate_name", + "_rustc_metadata", + "_test_configs", + ]) + not_needed(invoker, [ "executable_configs" ]) + } + target(invoker.target_type, "${_target_name}${_main_target_suffix}") { forward_variables_from(invoker, "*", @@ -279,7 +344,7 @@ template("rust_target") { "rustflags", "rustenv", "configs", - "output_dir", + "unit_test_output_dir", "unit_test_target", "test_inputs", ]) @@ -294,32 +359,28 @@ template("rust_target") { aliased_deps = _rust_aliased_deps public_deps = _rust_public_deps rustflags = _rustflags - rustflags += [ string_join("", - [ - "-Cmetadata=", - _metadata, - ]) ] + if (_rustc_metadata != "") { + rustflags += [ "-Cmetadata=${_rustc_metadata}" ] + } rustenv = _rustenv + if (_generate_crate_root) { + deps += [ ":${_target_name}_crate_root" ] + sources += [ _crate_root ] + } + # The Rust tool() declarations, like C++ ones, use the output_name and # output_dir, so that GN targets can override these if needed. Here we # give them their default values, or allow them to be overridden. - output_dir = _out_dir - if (!defined(output_name) || output_name == "") { - output_name = crate_name + if (defined(_output_dir)) { + output_dir = _output_dir } - - if (compute_inputs_for_analyze) { - deps += [ ":${_target_name}_analyze" ] + if (!defined(output_name) || output_name == "") { + output_name = "${crate_name}${_output_suffix}" } - } - if (compute_inputs_for_analyze) { - # Find and depend on all rust files in the crate for the purpose of `gn - # analyze`. - analyze_rust("${_target_name}_analyze") { - forward_variables_from(invoker, "*", [ "crate_root" ]) - crate_root = _crate_root + if (!_allow_unsafe) { + configs += [ "//build/rust:forbid_unsafe" ] } } @@ -332,6 +393,7 @@ template("rust_target") { } sources = _cxx_bindings deps = _cxx_deps + _public_deps + configs = _configs if (is_component_build) { # In a component_build the cxx bindings may be linked into a shared @@ -346,50 +408,5 @@ template("rust_target") { } else { not_needed([ "_cxx_deps" ]) } - - if (_build_unit_tests) { - _unit_test_target = "${_target_name}_unittests" - if (defined(invoker.unit_test_target)) { - _unit_test_target = invoker.unit_test_target - } - - rust_unit_test(_unit_test_target) { - forward_variables_from(invoker, [ "sources" ]) - testonly = true - crate_root = _crate_root - rustflags = _rustflags - output_dir = _out_dir - deps = _rust_deps + _public_deps - aliased_deps = _rust_aliased_deps - public_deps = [ ":${_target_name}" ] - if (defined(invoker.test_deps)) { - deps += invoker.test_deps - } - inputs = [] - if (defined(invoker.inputs)) { - inputs += invoker.inputs - } - if (defined(invoker.test_inputs)) { - inputs += invoker.test_inputs - } - if (defined(invoker.executable_configs)) { - configs = [] - configs = invoker.executable_configs - } - rustenv = _rustenv - } - } else { - not_needed([ - "_crate_root", - "_crate_name", - "_metadata", - ]) - } } } - -set_defaults("rust_target") { - executable_configs = default_executable_configs - library_configs = default_compiler_configs - proc_macro_configs = default_rust_proc_macro_configs -} diff --git a/build/rust/rust_unit_test.gni b/build/rust/rust_unit_test.gni index 879cb84..6cfa827 100644 --- a/build/rust/rust_unit_test.gni +++ b/build/rust/rust_unit_test.gni @@ -15,6 +15,7 @@ import("//build/rust/rust_unit_tests_group.gni") # # sources # edition (optional) +# allow_unsafe (optional) # configs (optional) # deps (optional) # crate_root (optional) @@ -62,11 +63,7 @@ template("rust_unit_test") { if (defined(invoker.edition)) { _edition = invoker.edition } - _configs += [ string_join("", - [ - "//build/rust:edition_", - _edition, - ]) ] + _configs += [ "//build/rust:edition_${_edition}" ] # We require that all source files are listed, even though this is # not a requirement for rustc. The reason is to ensure that tools @@ -80,6 +77,15 @@ template("rust_unit_test") { deps = [ ":$_exe_target_name" ] } + # The OUT_DIR for a crate's tests should point to the same OUT_DIR that the + # library it's testing used. The `env_out_dir` variable can be used to specify + # that directory. + if (defined(invoker.env_out_dir)) { + _env_out_dir = invoker.env_out_dir + } else { + _env_out_dir = target_gen_dir + } + # TODO(crbug.com/1229320): Arrange to run test executables on try bots. # TODO(crbug.com/gn/146): Allow Rust executables to depend on C/C++ source # sets. @@ -90,21 +96,15 @@ template("rust_unit_test") { forward_variables_from(invoker, "*", [ + "allow_unsafe", "edition", "features", "rustflags", "configs", - "output_name", "crate_name", "crate_root", + "env_out_dir", ]) - - if (defined(output_dir) && output_dir != "") { - _out_dir = output_dir - } else { - _out_dir = target_out_dir - } - if (!defined(output_name) || output_name == "") { output_name = _crate_name } @@ -122,7 +122,9 @@ template("rust_unit_test") { if (!defined(rustenv)) { rustenv = [] } - rustenv += [ "OUT_DIR=" + rebase_path(_out_dir) ] + + rustenv += [ "OUT_DIR=" + + rebase_path(_env_out_dir, get_path_info(_crate_root, "dir")) ] metadata = { # Consumed by "rust_unit_tests_group" gni template. rust_unit_test_executables = [ _crate_name ] diff --git a/build/rust/rust_unit_tests_group.gni b/build/rust/rust_unit_tests_group.gni index a210d9e..c2cdfe4 100644 --- a/build/rust/rust_unit_tests_group.gni +++ b/build/rust/rust_unit_tests_group.gni @@ -20,11 +20,12 @@ # # Example usage: # -# # This will generate a script at out/Default/bin/run_foo_tests that wraps -# # out/Default/foo_crate1_unittests, -# # out/Default/foo_mixed_source_set2_rs_unittests, -# # and out/Default/foo_mixed_source_set3_rs_unittests executables containing -# # native Rust unit tests. +# # This will generate a script at out/Default/bin/run_foo_tests (or +# # run_foo_tests.bat on Windows) that wraps the executables containing +# # native Rust unit tests: +# # * out/Default/foo_crate1_unittests +# # * out/Default/foo_mixed_source_set2_rs_unittests +# # * out/Default/foo_mixed_source_set3_rs_unittests # rust_unit_tests_group("foo_tests") { # deps = [ # "foo_crate1", @@ -32,7 +33,6 @@ # "foo_mixed_source_set3", # ] # } -# # TODO(https://crbug.com/1271215): Mention .bat generation once implemented. template("rust_unit_tests_group") { assert(defined(invoker.deps), "deps must be listed") @@ -40,7 +40,11 @@ template("rust_unit_tests_group") { # As noted in the top-level comment of //testing/buildbot/gn_isolate_map.pyl # the script *must* be in output_dir/bin/run_$target (or # output_dir\bin\run_$target.bat on Windows). - _script_filepath = "$root_out_dir/bin/run_${target_name}" + bat = "" + if (is_win) { + bat = ".bat" + } + _script_filepath = "$root_out_dir/bin/run_${target_name}${bat}" # Gathering metadata provided by the rust_unit_test gni template from all of # our dependencies. @@ -56,15 +60,11 @@ template("rust_unit_tests_group") { # Generating a script that can run all of the wrapped Rust unit test # executables. - # - # TODO(https://crbug.com/1271215): Also generate: bin/run_${target_name}.bat - # when *targeting* Windows: if (is_win) { ... }. (The "targeting" part means - # that we can't just detect whether the build is *hosted* on Windows.) action(target_name) { forward_variables_from(invoker, "*", []) testonly = true - script = "//testing/scripts/rust/generate_bash_script.py" + script = "//testing/scripts/rust/generate_script.py" inputs = [ _metadata_filepath ] outputs = [ _script_filepath ] @@ -86,5 +86,8 @@ template("rust_unit_tests_group") { "--script-path", rebase_path(_script_filepath, root_build_dir), ] + if (is_win) { + args += [ "--make-bat" ] + } } } diff --git a/build/rust/rustc_wrapper.py b/build/rust/rustc_wrapper.py index 239d1b3..1c61e9f 100755 --- a/build/rust/rustc_wrapper.py +++ b/build/rust/rustc_wrapper.py @@ -11,11 +11,11 @@ import sys import re -# Set up path to be able to import build_utils +# Set up path to be able to import action_helpers. sys.path.append( os.path.join(os.path.dirname(os.path.abspath(__file__)), os.pardir, - os.pardir, 'build', 'android', 'gyp')) -from util import build_utils + os.pardir, 'build')) +import action_helpers # This script wraps rustc for (currently) these reasons: # * To work around some ldflags escaping performed by ninja/gn @@ -81,6 +81,8 @@ # using our clang toolchain. That will remove the need for most of this # script. +FILE_RE = re.compile("[^:]+: (.+)") + # Equivalent of python3.9 built-in def remove_lib_suffix_from_l_args(text): @@ -89,11 +91,56 @@ def remove_lib_suffix_from_l_args(text): return text +def verify_inputs(depline, sources, abs_build_root): + """Verify everything used by rustc (found in `depline`) was specified in the + GN build rule (found in `sources` or `inputs`). + + TODO(danakj): This allows things in `sources` that were not actually used by + rustc since third-party packages sources need to be a union of all build + configs/platforms for simplicity in generating build rules. For first-party + code we could be more strict and reject things in `sources` that were not + consumed. + """ + + # str.removeprefix() does not exist before python 3.9. + def remove_prefix(text, prefix): + if text.startswith(prefix): + return text[len(prefix):] + return text + + def normalize_path(p): + return os.path.relpath(os.path.normpath(remove_prefix( + p, abs_build_root))).replace('\\', '/') + + # Collect the files that rustc says are needed. + found_files = {} + m = FILE_RE.match(depline) + if m: + files = m.group(1) + found_files = {normalize_path(f): f for f in files.split()} + # Get which ones are not listed in GN. + missing_files = found_files.keys() - sources + + if not missing_files: + return True + + # The matching did a bunch of path manipulation to get paths relative to the + # build dir such that they would match GN. In errors, we will print out the + # exact path that rustc produces for easier debugging and writing of stdlib + # config rules. + for file_files_key in missing_files: + gn_type = "sources" if file_files_key.endswith(".rs") else "inputs" + print(f'ERROR: file not in GN {gn_type}: {found_files[file_files_key]}', + file=sys.stderr) + return False + + def main(): parser = argparse.ArgumentParser() parser.add_argument('--rustc', required=True, type=pathlib.Path) - parser.add_argument('--depfile', type=pathlib.Path) - parser.add_argument('--rsp', type=pathlib.Path) + parser.add_argument('--depfile', required=True, type=pathlib.Path) + parser.add_argument('--rsp', type=pathlib.Path, required=True) + parser.add_argument('--target-windows', action='store_true') parser.add_argument('args', metavar='ARG', nargs='+') args = parser.parse_args() @@ -102,28 +149,39 @@ def main(): ldflags_separator = remaining_args.index("LDFLAGS") rustenv_separator = remaining_args.index("RUSTENV", ldflags_separator) + # Sometimes we duplicate the SOURCES list into the command line for debugging + # issues on the bots. + try: + sources_separator = remaining_args.index("SOURCES", rustenv_separator) + except: + sources_separator = None rustc_args = remaining_args[:ldflags_separator] ldflags = remaining_args[ldflags_separator + 1:rustenv_separator] - rustenv = remaining_args[rustenv_separator + 1:] + rustenv = remaining_args[rustenv_separator + 1:sources_separator] - is_windows = os.name == 'nt' + abs_build_root = os.getcwd().replace('\\', '/') + '/' + is_windows = sys.platform == 'win32' or args.target_windows rustc_args.extend(["-Clink-arg=%s" % arg for arg in ldflags]) - # Workaround for https://bugs.chromium.org/p/gn/issues/detail?id=249 - if args.rsp: - with open(args.rsp) as rspfile: - rsp_args = [l.rstrip() for l in rspfile.read().split(' ') if l.rstrip()] - if is_windows: - # Work around for hard-coded string in gn; full fix will come from - # https://gn-review.googlesource.com/c/gn/+/12460 - rsp_args = [arg for arg in rsp_args if not arg.endswith("-Bdynamic")] - # Work around for "-l.lib", where ".lib" suffix is undesirable. - # Full fix will come from https://gn-review.googlesource.com/c/gn/+/12480 - rsp_args = [remove_lib_suffix_from_l_args(arg) for arg in rsp_args] - with open(args.rsp, 'w') as rspfile: - rspfile.write("\n".join(rsp_args)) - rustc_args.append(f'@{args.rsp}') + with open(args.rsp) as rspfile: + rsp_args = [l.rstrip() for l in rspfile.read().split(' ') if l.rstrip()] + + sources_separator = rsp_args.index("SOURCES") + sources = set(rsp_args[sources_separator + 1:]) + rsp_args = rsp_args[:sources_separator] + + if is_windows: + # Work around for "-l.lib", where ".lib" suffix is undesirable. + # Full fix will come from https://gn-review.googlesource.com/c/gn/+/12480 + rsp_args = [remove_lib_suffix_from_l_args(arg) for arg in rsp_args] + out_rsp = str(args.rsp) + ".rsp" + with open(out_rsp, 'w') as rspfile: + # rustc needs the rsp file to be separated by newlines. Note that GN + # generates the file separated by spaces: + # https://bugs.chromium.org/p/gn/issues/detail?id=249, + rspfile.write("\n".join(rsp_args)) + rustc_args.append(f'@{out_rsp}') env = os.environ.copy() fixed_env_vars = [] @@ -132,25 +190,34 @@ def main(): env[k] = v fixed_env_vars.append(k) - r = subprocess.run([args.rustc, *rustc_args], env=env, check=False) + try: + r = subprocess.run([args.rustc, *rustc_args], env=env, check=False) + finally: + os.remove(out_rsp) if r.returncode != 0: sys.exit(r.returncode) - # Now edit the depfile produced - if args.depfile is not None: + final_depfile_lines = [] + dirty = False + with open(args.depfile, encoding="utf-8") as d: + # Figure out which lines we want to keep in the depfile. If it's not the + # whole file, we will rewrite the file. env_dep_re = re.compile("# env-dep:(.*)=.*") - replacement_lines = [] - dirty = False - with open(args.depfile, encoding="utf-8") as d: - for line in d: - m = env_dep_re.match(line) - if m and m.group(1) in fixed_env_vars: - dirty = True # skip this line - else: - replacement_lines.append(line) - if dirty: # we made a change, let's write out the file - with build_utils.AtomicOutput(args.depfile) as output: - output.write("\n".join(replacement_lines).encode("utf-8")) + for line in d: + m = env_dep_re.match(line) + if m and m.group(1) in fixed_env_vars: + dirty = True # We want to skip this line. + else: + final_depfile_lines.append(line) + + # Verify each dependent file is listed in sources/inputs. + for line in final_depfile_lines: + if not verify_inputs(line, sources, abs_build_root): + return 1 + + if dirty: # we made a change, let's write out the file + with action_helpers.atomic_output(args.depfile) as output: + output.write("\n".join(final_depfile_lines).encode("utf-8")) if __name__ == '__main__': diff --git a/build/rust/std/BUILD.gn b/build/rust/std/BUILD.gn index b5fe564..b0f3134 100644 --- a/build/rust/std/BUILD.gn +++ b/build/rust/std/BUILD.gn @@ -15,11 +15,10 @@ # * Find the Rust standard library. # * Remap some generic allocator symbols to the specific allocator symbols # in use. -# This file does both those things. Any C++ target containing Rust .rlibs -# should simply depend on :std within this file and it will be taken care of. -# In practice, this will in future be taken care of by a standard template -# used for each Rust source set, so that a typical user of Rust need not -# think about it. +# This file takes care of equivalent tasks for our C++ toolchains. +# C++ targets should depend upon either local_stdlib_for_clang or +# prebuilt_stdlib_for_clang to ensure that Rust code can be linked into their +# C++ executables. # # This is obviously a bit fragile - rustc might do other magic in future. # But, linking with a final C++ toolchain is something often needed, and @@ -27,9 +26,25 @@ # officially possible. import("//build/config/compiler/compiler.gni") +import("//build/config/coverage/coverage.gni") import("//build/config/rust.gni") +import("//build/config/sanitizers/sanitizers.gni") if (toolchain_has_rust) { + # Equivalent of allocator symbols injected by rustc. + source_set("remap_alloc") { + sources = [ + # `alias.*`, `compiler_specific.h`, and `immediate_crash.*` have been + # copied from `//base`. + # TODO(https://crbug.com/1475734): Avoid duplication / reuse code. + "alias.cc", + "alias.h", + "compiler_specific.h", + "immediate_crash.h", + "remap_alloc.cc", + ] + } + # List of Rust stdlib rlibs which are present in the official Rust toolchain # we are using from the Android team. This is usually a version or two behind # nightly. Generally this matches the toolchain we build ourselves, but if @@ -55,7 +70,6 @@ if (toolchain_has_rust) { "object", "panic_abort", "panic_unwind", - "proc_macro", "rustc_demangle", "std_detect", "test", @@ -63,6 +77,13 @@ if (toolchain_has_rust) { "unwind", ] + if (toolchain_for_rust_host_build_tools) { + # When building proc macros, include the proc_macro crate in what should be + # copied with find_stdlib. Otherwise it is not copied since it will be + # unused. + stdlib_files += [ "proc_macro" ] + } + # Different Rust toolchains may add or remove files relative to the above # list. That can be specified in gn args for anyone using (for instance) # nightly or some other experimental toolchain, prior to it becoming official. @@ -79,183 +100,346 @@ if (toolchain_has_rust) { "rustc_std_workspace_std", ] - action("find_stdlib") { - # Collect prebuilt Rust libraries from toolchain package and copy to a known - # location. + config("stdlib_dependent_libs") { + # TODO(crbug.com/1434092): These should really be `libs`, however that + # breaks. Normally, we specify lib files with the `.lib` suffix but + # then when rustc links an EXE, it invokes lld-link with `.lib.lib` + # instead. # - # The Rust toolchain contains prebuilt rlibs for the standard library and - # its dependencies. However, they have unstable names: an unpredictable - # metadata hash is appended to the known crate name. - # - # We must depend on these rlibs explicitly when rustc is not in charge of - # linking. However, it is difficult to construct GN rules to do so when the - # names can't be known statically. - # - # This action copies the prebuilt rlibs to a known location, removing the - # metadata part of the name. In the process it verifies we have all the - # libraries we expect and none that we don't. A depfile is generated so this - # step is re-run when any libraries change. The action script additionally - # verifies rustc matches the expected version, which is unrelated but this - # is a convenient place to do so. + # Omitting the `.lib` suffix breaks linking as well, when clang drives + # the linking step of a C++ EXE that depends on Rust. + if (is_win) { + # The libc crate tries to link in the Windows CRT, but we specify the CRT + # library ourselves in //build/config/win:dynamic_crt and + # //build/config/win:static_crt because Rustc does not allow us to specify + # using the debug CRT: https://github.com/rust-lang/rust/issues/39016 + # + # As such, we have disabled all #[link] directives from the libc crate, + # and we need to add any non-CRT libs here. + ldflags = [ "legacy_stdio_definitions.lib" ] + } + } + config("stdlib_public_dependent_libs") { + # TODO(crbug.com/1434092): These should really be `libs`, however that + # breaks. Normally, we specify lib files with the `.lib` suffix but + # then when rustc links an EXE, it invokes lld-link with `.lib.lib` + # instead. # - # The action refers to `stdlib_files`, `skip_stdlib_files`, and the - # associated //build/config/rust.gni vars `removed_rust_stdlib_libs` and - # `added_rust_stdlib_libs` for which rlib files to expect. - # `extra_sysroot_libs` is also used to copy non-std libs, if any. - script = "find_std_rlibs.py" - depfile = "$target_out_dir/stdlib.d" - out_libdir = rebase_path(target_out_dir, root_build_dir) - out_depfile = rebase_path(depfile, root_build_dir) - - # For the rustc sysroot we must include even the rlibs we don't pass to the - # C++ linker. - all_stdlibs_to_copy = stdlib_files + skip_stdlib_files - args = [ - "--rust-bin-dir", - rebase_path("${rust_sysroot}/bin", root_build_dir), - "--output", - out_libdir, - "--depfile", - out_depfile, - - # Due to limitations in Ninja's handling of .d files, we have to pick - # *the first* of our outputs. To make diagnostics more obviously - # related to the Rust standard library, we ensure libstd.rlib is first. - "--depfile-target", - stdlib_files[0], - - # Create a dependency on the rustc version so this action is re-run when - # it changes. This argument is not actually read by the script. - "--rustc-revision", - rustc_revision, - ] - - if (!use_unverified_rust_toolchain) { - args += [ - "--stdlibs", - string_join(",", all_stdlibs_to_copy), + # Omitting the `.lib` suffix breaks linking as well, when clang drives + # the linking step of a C++ EXE that depends on Rust. + if (is_win) { + # These libs provide functions that are used by the stdlib. Rust crates + # will try to link them in with #[link] directives. However these don't + # get propagated to the linker if Rust isn't driving the linking (a C++ + # target that depends on a Rust rlib). So these need to be specified + # explicitly. + ldflags = [ + "advapi32.lib", + "bcrypt.lib", + "kernel32.lib", + "ntdll.lib", + "userenv.lib", + "ws2_32.lib", ] } - if (extra_sysroot_libs != []) { - args += [ - "--extra-libs", - string_join(",", extra_sysroot_libs), + # From rust/library/std/src/sys/unix/mod.rs. + # TODO(danakj): We should generate this list somehow when building or rolling + # the Rust toolchain? + if (is_android) { + libs = [ "dl" ] + } else if (target_os == "freebsd") { + libs = [ + "execinfo", + "pthread", + ] + } else if (target_os == "netbsd") { + libs = [ + "rt", + "pthread", + ] + } else if (is_mac) { + libs = [ "System" ] + } else if (is_ios) { + libs = [ + "System", + "objc", + ] + frameworks = [ + "Security.framework", + "Foundation.framework", + ] + } else if (is_fuchsia) { + libs = [ + "zircon", + "fdio", ] } + } - args += [ - "--target", - rust_abi_target, - ] + # Construct sysroots for rustc invocations to better control what libraries + # are linked. We have two: one with copied prebuilt libraries, and one with + # our locally-built std. Both reside in root_out_dir: we must only have one of + # each per GN toolchain anyway. - outputs = [] - foreach(lib, all_stdlibs_to_copy) { - outputs += [ "$target_out_dir/lib$lib.rlib" ] + sysroot_lib_subdir = "lib/rustlib/$rust_abi_target/lib" + + if (!rust_prebuilt_stdlib) { + local_rustc_sysroot = "$root_out_dir/local_rustc_sysroot" + + # All std targets starting with core build with our sysroot. It starts empty + # and is incrementally built. The directory must exist at the start. + generated_file("empty_sysroot_for_std_build") { + outputs = [ "$local_rustc_sysroot/$sysroot_lib_subdir/.empty" ] + contents = "" + visibility = [ ":*" ] } - foreach(lib, extra_sysroot_libs) { - outputs += [ "$target_out_dir/$lib" ] + + # Target to be depended on by std build targets. Creates the initially empty + # sysroot. + group("std_build_deps") { + deps = [ ":empty_sysroot_for_std_build" ] + public_configs = [ ":local_stdlib_sysroot" ] + visibility = [ "rules:*" ] } - } - if (local_libstd_supported) { - # Builds the Rust standard library and creates a sysroot that can be - # supplied to rustc. - copy("local_rustc_sysroot") { + profiler_builtins_crates = [ + "core", + "compiler_builtins", + "profiler_builtins", + ] + + # When using instrumentation, profiler_builtins and its deps must be built + # before other std crates. Other crates depend on this target so they are + # built in the right order. + group("profiler_builtins_group") { deps = [] - sources = [] + foreach(libname, profiler_builtins_crates) { + deps += [ "rules:$libname" ] + } + visibility = [ "rules:*" ] + } + + config("local_stdlib_sysroot") { + sysroot = rebase_path(local_rustc_sysroot, root_build_dir) + rustflags = [ "--sysroot=$sysroot" ] + visibility = [ ":*" ] + } + + # When given -Zsanitize=..., rustc insists on passing a sanitizer runtime to + # the linker it invokes. Unfortunately, our C++ ldflags already tell the + # linker to link against a C++ sanitizer runtime - which contains the same + # symbols. So, make a blank library. + # The list of relevant sanitizers here is taken from + # https://github.com/rust-lang/rust/blob/7e7483d26e3cec7a44ef00cf7ae6c9c8c918bec6/compiler/rustc_codegen_ssa/src/back/link.rs#L1148 + template("rustc_sanitizer_runtime") { + rt_name = target_name + not_needed([ "invoker" ]) + static_library("sanitizer_rt_$rt_name") { + sources = [] + output_name = "librustc-${rust_channel}_rt.$rt_name" + output_dir = "$local_rustc_sysroot/$sysroot_lib_subdir" + if (is_win) { + arflags = [ "/llvmlibempty" ] + } + } + } + rustc_sanitizer_runtimes = [] + if (is_asan) { + rustc_sanitizer_runtime("asan") { + } + rustc_sanitizer_runtimes += [ ":sanitizer_rt_asan" ] + } + if (is_lsan) { + rustc_sanitizer_runtime("lsan") { + } + rustc_sanitizer_runtimes += [ ":sanitizer_rt_lsan" ] + } + if (is_msan) { + rustc_sanitizer_runtime("msan") { + } + rustc_sanitizer_runtimes += [ ":sanitizer_rt_msan" ] + } + if (is_tsan) { + rustc_sanitizer_runtime("tsan") { + } + rustc_sanitizer_runtimes += [ ":sanitizer_rt_tsan" ] + } + if (is_hwasan) { + rustc_sanitizer_runtime("hwasan") { + } + rustc_sanitizer_runtimes += [ ":sanitizer_rt_hwasan" ] + } + group("local_stdlib_libs") { + assert(toolchain_has_rust, + "Some C++ target is depending on Rust code even though " + + "toolchain_has_rust=false. Usually this would mean" + + "a NaCl target is depending on Rust, as there's no Rust " + + "toolchain targetting NaCl.") + all_dependent_configs = [ ":stdlib_dependent_libs" ] + deps = [] foreach(libname, stdlib_files + skip_stdlib_files) { - rule = "rules:$libname" - deps += [ rule ] - outdir = get_label_info(rule, "target_out_dir") - sources += [ "$outdir/$libname/lib${libname}.rlib" ] + deps += [ "rules:$libname" ] } + deps += rustc_sanitizer_runtimes + visibility = [ ":*" ] + } - outputs = [ "$target_out_dir/local_rustc_sysroot/lib/rustlib/$rust_abi_target/lib/{{source_file_part}}" ] + # Builds the stdlib and points the rustc `--sysroot` to them. Used by + # targets for which linking is driven by Rust (bins and dylibs). + group("stdlib_for_rustc") { + all_dependent_configs = [ ":local_stdlib_sysroot" ] + public_deps = [ ":local_stdlib_libs" ] } - } - # Create a sysroot containing our std rlibs to pass to rustc invocations. This - # gives better control of where rustc may pick libraries from. - copy("prebuilt_rustc_sysroot") { - deps = [ ":find_stdlib" ] - sources = get_target_outputs(":find_stdlib") - outputs = [ "$target_out_dir/prebuilt_rustc_sysroot/lib/rustlib/$rust_abi_target/lib/{{source_file_part}}" ] - } + # Builds and links against the Rust stdlib. Used by targets for which + # linking is driven by C++. + group("stdlib_for_clang") { + all_dependent_configs = [ ":stdlib_public_dependent_libs" ] + public_deps = [ + ":local_stdlib_libs", + ":remap_alloc", + ] + } + } else { + action("find_stdlib") { + # Collect prebuilt Rust libraries from toolchain package and copy to a + # known location. + # + # The Rust toolchain contains prebuilt rlibs for the standard library and + # its dependencies. However, they have unstable names: an unpredictable + # metadata hash is appended to the known crate name. + # + # We must depend on these rlibs explicitly when rustc is not in charge of + # linking. However, it is difficult to construct GN rules to do so when + # the names can't be known statically. + # + # This action copies the prebuilt rlibs to a known location, removing the + # metadata part of the name. In the process it verifies we have all the + # libraries we expect and none that we don't. A depfile is generated so + # this step is re-run when any libraries change. The action script + # additionally verifies rustc matches the expected version, which is + # unrelated but this is a convenient place to do so. + # + # The action refers to `stdlib_files`, `skip_stdlib_files`, and the + # associated //build/config/rust.gni vars `removed_rust_stdlib_libs` and + # `added_rust_stdlib_libs` for which rlib files to expect. + # `extra_sysroot_libs` is also used to copy non-std libs, if any. + script = "find_std_rlibs.py" + depfile = "$target_out_dir/stdlib.d" + out_libdir = rebase_path(target_out_dir, root_build_dir) + out_depfile = rebase_path(depfile, root_build_dir) - if (local_libstd_supported) { - config("local_stdlib_for_rustc") { - # Match the output directory of :local_rustc_sysroot - sysroot = - rebase_path("$target_out_dir/local_rustc_sysroot", root_build_dir) - rustflags = [ "--sysroot=$sysroot" ] + # For the rustc sysroot we must include even the rlibs we don't pass to + # the C++ linker. + all_stdlibs_to_copy = stdlib_files + skip_stdlib_files + args = [ + "--rust-bin-dir", + rebase_path("${rust_sysroot}/bin", root_build_dir), + "--output", + out_libdir, + "--depfile", + out_depfile, + + # Due to limitations in Ninja's handling of .d files, we have to pick + # *the first* of our outputs. To make diagnostics more obviously + # related to the Rust standard library, we ensure libstd.rlib is first. + "--depfile-target", + stdlib_files[0], + + # Create a dependency on the rustc version so this action is re-run when + # it changes. This argument is not actually read by the script. + "--rustc-revision", + rustc_revision, + ] + + if (extra_sysroot_libs != []) { + args += [ + "--extra-libs", + string_join(",", extra_sysroot_libs), + ] + } + + args += [ + "--target", + rust_abi_target, + ] + + outputs = [] + foreach(lib, all_stdlibs_to_copy) { + outputs += [ "$target_out_dir/lib$lib.rlib" ] + } + foreach(lib, extra_sysroot_libs) { + outputs += [ "$target_out_dir/$lib" ] + } + + visibility = [ ":*" ] } - } - config("prebuilt_stdlib_for_rustc") { - # Match the output directory of :prebuilt_rustc_sysroot - sysroot = - rebase_path("$target_out_dir/prebuilt_rustc_sysroot", root_build_dir) - rustflags = [ "--sysroot=$sysroot" ] - } + prebuilt_rustc_sysroot = "$root_out_dir/prebuilt_rustc_sysroot" + copy("prebuilt_rustc_copy_to_sysroot") { + assert(enable_rust, + "Some C++ target is including Rust code even though " + + "enable_rust=false") + deps = [ ":find_stdlib" ] + sources = get_target_outputs(":find_stdlib") + outputs = + [ "$prebuilt_rustc_sysroot/$sysroot_lib_subdir/{{source_file_part}}" ] - if (local_libstd_supported) { - # Use the sysroot generated by :local_rustc_sysroot, which transitively builds - # std. Only for use in specific tests for now. - group("local_std_for_rustc") { - assert( - enable_rust, - "Some C++ target is including Rust code even though enable_rust=false") - all_dependent_configs = [ ":local_stdlib_for_rustc" ] - deps = [ ":local_rustc_sysroot" ] + visibility = [ ":*" ] } - } - # Use the sysroot generated by :prebuilt_rustc_sysroot. Almost all Rust targets should depend - # on this. - group("prebuilt_std_for_rustc") { - assert( - enable_rust, - "Some C++ target is including Rust code even though enable_rust=false") - all_dependent_configs = [ ":prebuilt_stdlib_for_rustc" ] - deps = [ ":prebuilt_rustc_sysroot" ] - } + config("prebuilt_stdlib_sysroot") { + # Match the output directory of :prebuilt_rustc_copy_to_sysroot + sysroot = rebase_path(prebuilt_rustc_sysroot, root_build_dir) + rustflags = [ "--sysroot=$sysroot" ] + visibility = [ ":*" ] + } + + config("prebuilt_stdlib_libs") { + ldflags = [] + lib_dir = rebase_path("$prebuilt_rustc_sysroot/$sysroot_lib_subdir", + root_build_dir) - config("rust_stdlib_config") { - ldflags = [] - out_libdir = rebase_path(target_out_dir, root_build_dir) - foreach(lib, stdlib_files) { - this_file = "$out_libdir/lib$lib.rlib" - ldflags += [ this_file ] + # We're unable to make these files regular gn dependencies because + # they're prebuilt. Instead, we'll pass them in the ldflags. This doesn't + # work for all types of build because ldflags propagate differently from + # actual dependencies and therefore can end up in different targets from + # the remap_alloc.cc above. For example, in a component build, we might + # apply the remap_alloc.cc file and these ldlags to shared object A, + # while shared object B (that depends upon A) might get only the ldflags + # but not remap_alloc.cc, and thus the build will fail. There is + # currently no known solution to this for the prebuilt stdlib - this + # problem does not apply with configurations where we build the stdlib + # ourselves, which is what we'll use in production. + foreach(lib, stdlib_files) { + this_file = "$lib_dir/lib$lib.rlib" + ldflags += [ this_file ] + } + visibility = [ ":*" ] } - if (is_win) { - # Our C++ builds already link against a wide variety of Windows API import libraries, - # but the Rust stdlib requires a few extra. - ldflags += [ - "bcrypt.lib", - "userenv.lib", - ] + + # Use the sysroot generated by :prebuilt_rustc_copy_to_sysroot. + group("stdlib_for_rustc") { + all_dependent_configs = [ ":prebuilt_stdlib_sysroot" ] + deps = [ ":prebuilt_rustc_copy_to_sysroot" ] } - } - source_set("remap_alloc") { - sources = [ - "immediate_crash.h", - "remap_alloc.cc", - ] - } + # Links the Rust stdlib. Used by targets for which linking is driven by + # C++. + group("stdlib_for_clang") { + all_dependent_configs = [ + ":prebuilt_stdlib_libs", + ":stdlib_public_dependent_libs", + ] + deps = [ ":prebuilt_rustc_copy_to_sysroot" ] - # TODO(crbug.com/1368806): rework this so when using locally-built std, we - # don't link the prebuilt std as well. - group("std") { - assert( - enable_rust, - "Some C++ target is including Rust code even though enable_rust=false") - all_dependent_configs = [ ":rust_stdlib_config" ] - deps = [ - ":find_stdlib", - ":remap_alloc", - ] + # The host builds tools toolchain supports Rust only and does not use + # the allocator remapping to point it to PartitionAlloc. + if (!toolchain_for_rust_host_build_tools) { + deps += [ ":remap_alloc" ] + } + } } } diff --git a/build/rust/std/BUILD.gn.hbs b/build/rust/std/BUILD.gn.hbs new file mode 100644 index 0000000..ec7b961 --- /dev/null +++ b/build/rust/std/BUILD.gn.hbs @@ -0,0 +1,122 @@ +# Copyright 2023 The Chromium Authors +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +# @generated from build/rust/std/BUILD.gn.hbs by tools/crates/gnrt. Do not edit! + +import("//build/rust/cargo_crate.gni") + +{{#each rules}} +cargo_crate("{{this.0}}") { + {{#with this.1.concrete}} + crate_type = "{{crate_type}}" + crate_root = "{{crate_root}}" + sources = [ + {{#each sources}} + "{{this}}", + {{/each}} + ] + inputs = [ + {{#each inputs}} + "{{this}}", + {{/each}} + ] + no_std = true + + # Unit tests skipped. Generate with --with-tests to include them. + build_native_rust_unit_tests = false + edition = "{{edition}}" + cargo_pkg_version = "{{cargo_pkg_version}}" + {{#with cargo_pkg_authors}} + cargo_pkg_authors = "{{this}}" + {{/with}} + cargo_pkg_name = "{{cargo_pkg_name}}" + {{#with cargo_pkg_description}} + cargo_pkg_description = "{{gn_escape this}}" + {{/with}} + library_configs -= [ + "//build/config/compiler:chromium_code", + {{#each remove_library_configs}} + "{{this}}", + {{/each}} + {{#unless extra_kv.include_coverage}} + "//build/config/coverage:default_coverage", + {{/unless}} + ] + library_configs += [ + "//build/config/compiler:no_chromium_code", + {{#if extra_kv.immediate_abort}} + "//build/rust:panic_immediate_abort", + {{/if}} + ] + executable_configs -= [ + "//build/config/compiler:chromium_code", + {{#each remove_executable_configs}} + "{{this}}", + {{/each}} + ] + executable_configs += [ + "//build/config/compiler:no_chromium_code", + {{#each add_executable_configs}} + "{{this}}", + {{/each}} + ] + deps = [ + "//build/rust/std:std_build_deps", + {{#if extra_kv.include_coverage}} + "//build/rust/std:profiler_builtins_group", + {{/if}} + {{#unless deps}} + ] + {{/unless}} + {{#each deps}} + {{#if @first}} + {{#each this.rules}} + "{{this}}", + {{/each}} + ] + {{else}} + if ({{this.cond}}) { + deps = [ + {{#each this.rules}} + "{{this}}", + {{/each}} + ] + } + {{/if}} + {{/each}} + {{#if aliased_deps}} + aliased_deps = { + {{#each aliased_deps}} + {{this.0}} = "{{this.1}}" + {{/each}} + } + {{/if}} + {{#if features}} + features = [ + {{#each features}} + "{{this}}", + {{/each}} + ] + {{/if}} + {{#unless extra_kv.skip_build_rs}} + {{#if build_root}} + build_root = "{{build_root}}" + build_sources = [ "{{build_root}}" ] + {{/if}} + {{/unless}} + rustenv = [ + "CFG_DISABLE_UNSTABLE_FEATURES=0", + "STD_ENV_ARCH=$rust_target_arch", + ] + rustflags = [ + "--cfg=backtrace_in_libstd", + "-Zforce-unstable-if-unmarked", + {{#if extra_kv.no_link_directives}} + "-Zlink-directives=false", + {{/if}} + ] + output_dir = "$root_out_dir/local_rustc_sysroot/lib/rustlib/$rust_abi_target/lib/" + {{/with}} +} +{{/each}} diff --git a/build/rust/std/alias.cc b/build/rust/std/alias.cc new file mode 100644 index 0000000..f0ea031 --- /dev/null +++ b/build/rust/std/alias.cc @@ -0,0 +1,22 @@ +// Copyright 2023 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// This file has been copied from //base/debug/alias.cc ( additionally the APIs +// were moved into the `build_rust_std` namespace). +// +// TODO(https://crbug.com/1475734): Avoid code duplication / reuse code. + +#include "build/rust/std/alias.h" + +#include "build/rust/std/compiler_specific.h" + +namespace build_rust_std { +namespace debug { + +// This file/function should be excluded from LTO/LTCG to ensure that the +// compiler can't see this function's implementation when compiling calls to it. +NOINLINE void Alias(const void* var) {} + +} // namespace debug +} // namespace build_rust_std diff --git a/build/rust/std/alias.h b/build/rust/std/alias.h new file mode 100644 index 0000000..068e440 --- /dev/null +++ b/build/rust/std/alias.h @@ -0,0 +1,37 @@ +// Copyright 2023 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// This file has been copied from //base/debug/alias.h (and then trimmed to just +// the APIs / macros needed by //build/rust/std; additionally the APIs were +// moved into the `build_rust_std` namespace). +// +// TODO(https://crbug.com/1475734): Avoid code duplication / reuse code. + +#ifndef BUILD_RUST_STD_ALIAS_H_ +#define BUILD_RUST_STD_ALIAS_H_ + +#include + +namespace build_rust_std { +namespace debug { + +// Make the optimizer think that |var| is aliased. This can be used to prevent a +// local variable from being optimized out (which is something that +// `NO_CODE_FOLDING` macro definition below depends on). See +// //base/debug/alias.h for more details. +void Alias(const void* var); + +} // namespace debug + +} // namespace build_rust_std + +// Prevent code folding (where a linker identifies functions that are +// bit-identical and overlays them, which saves space but it leads to confusing +// call stacks because multiple symbols are at the same address). See +// //base/debug/alias.h for more details. +#define NO_CODE_FOLDING() \ + const int line_number = __LINE__; \ + build_rust_std::debug::Alias(&line_number) + +#endif // BUILD_RUST_STD_ALIAS_H_ diff --git a/build/rust/std/compiler_specific.h b/build/rust/std/compiler_specific.h new file mode 100644 index 0000000..47c3e29 --- /dev/null +++ b/build/rust/std/compiler_specific.h @@ -0,0 +1,38 @@ +// Copyright 2023 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// This file has been copied from //base/compiler_specific.h (and then +// significantly trimmed to just the APIs / macros needed by //build/rust/std). +// +// TODO(https://crbug.com/1475734): Avoid code duplication / reuse code. + +#ifndef BUILD_RUST_STD_COMPILER_SPECIFIC_H_ +#define BUILD_RUST_STD_COMPILER_SPECIFIC_H_ + +#include "build/build_config.h" + +#if defined(COMPILER_MSVC) && !defined(__clang__) +#error "Only clang-cl is supported on Windows, see https://crbug.com/988071" +#endif + +#if defined(__has_attribute) +#define HAS_ATTRIBUTE(x) __has_attribute(x) +#else +#define HAS_ATTRIBUTE(x) 0 +#endif + +// Annotate a function indicating it should not be inlined. +// Use like: +// NOINLINE void DoStuff() { ... } +#if defined(__clang__) && HAS_ATTRIBUTE(noinline) +#define NOINLINE [[clang::noinline]] +#elif defined(COMPILER_GCC) && HAS_ATTRIBUTE(noinline) +#define NOINLINE __attribute__((noinline)) +#elif defined(COMPILER_MSVC) +#define NOINLINE __declspec(noinline) +#else +#define NOINLINE +#endif + +#endif // BUILD_RUST_STD_COMPILER_SPECIFIC_H_ diff --git a/build/rust/std/fake_root/.cargo/config.toml b/build/rust/std/fake_root/.cargo/config.toml deleted file mode 100644 index 72e1499..0000000 --- a/build/rust/std/fake_root/.cargo/config.toml +++ /dev/null @@ -1,5 +0,0 @@ -[source.crates-io] -replace-with = 'vendored-sources' - -[source.vendored-sources] -directory = '../../../../third_party/rust-toolchain/lib/rustlib/src/rust/vendor' diff --git a/build/rust/std/fake_root/.cargo/config.toml.template b/build/rust/std/fake_root/.cargo/config.toml.template new file mode 100644 index 0000000..40b6270 --- /dev/null +++ b/build/rust/std/fake_root/.cargo/config.toml.template @@ -0,0 +1,5 @@ +[source.crates-io] +replace-with = 'vendored-sources' + +[source.vendored-sources] +directory = '../../../../RUST_SRC_ROOT/vendor' diff --git a/build/rust/std/fake_root/.gitignore b/build/rust/std/fake_root/.gitignore index e9e2199..a21a472 100644 --- a/build/rust/std/fake_root/.gitignore +++ b/build/rust/std/fake_root/.gitignore @@ -1,2 +1,4 @@ /target/ /Cargo.lock +/Cargo.toml +/.cargo/config.toml diff --git a/build/rust/std/fake_root/Cargo.toml b/build/rust/std/fake_root/Cargo.toml deleted file mode 100644 index 55f3a07..0000000 --- a/build/rust/std/fake_root/Cargo.toml +++ /dev/null @@ -1,16 +0,0 @@ -[package] -name = "fake_root" -version = "0.1.0" -edition = "2021" - -[dependencies] -test = { path = "../../../../third_party/rust-toolchain/lib/rustlib/src/rust/library/test" } - -[dependencies.std] -path = "../../../../third_party/rust-toolchain/lib/rustlib/src/rust/library/std" -features = ["backtrace", "profiler"] - -[patch.crates-io] -rustc-std-workspace-core = { path = '../../../../third_party/rust-toolchain/lib/rustlib/src/rust/library/rustc-std-workspace-core' } -rustc-std-workspace-alloc = { path = '../../../../third_party/rust-toolchain/lib/rustlib/src/rust/library/rustc-std-workspace-alloc' } -rustc-std-workspace-std = { path = '../../../../third_party/rust-toolchain/lib/rustlib/src/rust/library/rustc-std-workspace-std' } diff --git a/build/rust/std/fake_root/Cargo.toml.template b/build/rust/std/fake_root/Cargo.toml.template new file mode 100644 index 0000000..a6d2a59 --- /dev/null +++ b/build/rust/std/fake_root/Cargo.toml.template @@ -0,0 +1,25 @@ +[package] +name = "fake_root" +version = "0.1.0" +edition = "2021" + +[dependencies] + +[dependencies.sysroot] +path = "../../../../RUST_SRC_ROOT/library/sysroot" +default-features = false +features = [ + "backtrace", + "panic-unwind", + "profiler", + "std_detect_dlsym_getauxval", + "std_detect_file_io" +] + +[dependencies.compiler_builtins] +features = ["weak-intrinsics"] + +[patch.crates-io] +rustc-std-workspace-core = { path = '../../../../RUST_SRC_ROOT/library/rustc-std-workspace-core' } +rustc-std-workspace-alloc = { path = '../../../../RUST_SRC_ROOT/library/rustc-std-workspace-alloc' } +rustc-std-workspace-std = { path = '../../../../RUST_SRC_ROOT/library/rustc-std-workspace-std' } diff --git a/build/rust/std/find_std_rlibs.py b/build/rust/std/find_std_rlibs.py index b91e631..386258f 100755 --- a/build/rust/std/find_std_rlibs.py +++ b/build/rust/std/find_std_rlibs.py @@ -33,8 +33,6 @@ def main(): parser.add_argument("--depfile-target", help="Target to key depfile around", required=True) - parser.add_argument("--stdlibs", - help="Expected list of standard library libraries") parser.add_argument("--extra-libs", help="List of extra non-libstd sysroot libraries") parser.add_argument("--rustc-revision", @@ -42,21 +40,6 @@ def main(): " on the rustc version.") args = parser.parse_args() - # Expected rlibs by concise name (the crate name, plus a disambiguating suffix - # e.g. "-2" when necessary). - if args.stdlibs: - rlibs_expected = set() - for lib in args.stdlibs.split(','): - # The version is only included if there's more than one of `name`, and - # even then is only included for the 2nd onward. - (name, version) = EXPECTED_STDLIB_INPUT_REGEX.match(lib).group(1, 2) - if version is None: - rlibs_expected.add(name) - else: - rlibs_expected.add(f"{name}-{version}") - else: - rlibs_expected = None - extra_libs = set() if args.extra_libs: for lib in args.extra_libs.split(','): @@ -133,11 +116,6 @@ def copy_file(infile, outfile): output_filename = f"lib{concise_name}.rlib" - if rlibs_expected is not None: - if concise_name not in rlibs_expected: - raise Exception("Found stdlib rlib that wasn't expected: %s" % f) - rlibs_expected.remove(concise_name) - infile = os.path.join(rustlib_dir, f) outfile = os.path.join(args.output, output_filename) copy_file(infile, outfile) @@ -148,9 +126,6 @@ def copy_file(infile, outfile): copy_file(infile, outfile) depfile.write("\n") - if rlibs_expected: - raise Exception("We failed to find all expected stdlib rlibs: %s" % - ','.join(rlibs_expected)) if __name__ == '__main__': diff --git a/build/rust/std/gnrt_config.toml b/build/rust/std/gnrt_config.toml index 40fb850..5e87d0c 100644 --- a/build/rust/std/gnrt_config.toml +++ b/build/rust/std/gnrt_config.toml @@ -2,30 +2,98 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. -[libc] -# Requires: -# * cfg(libc_align) for new enough rustc, which is normally provided by build.rs -# but we don't run build scripts for std crates. -# * cfg(libc_priv_mod_use) is required for the below to work properly. -# * cfg(libc_core_cvoid) to use the same ffi c_void definition as libcore. -# -# See https://github.com/rust-lang/libc/blob/master/build.rs -cfg = ['libc_align', 'libc_priv_mod_use', 'libc_core_cvoid'] - -[std] -# Requires: -# * cfg(backtrace_in_libstd) because it directly includes .rs files from the -# backtrace code rather than including it as a dependency. backtrace's -# implementation has special-purpose code to handle this. -# * STD_ENV_ARCH is referenced in architecture-dependent code. Note this is the -# target arch, and as such `$rust_target_arch` is passed literally to GN. This -# variable is set at build time in build/config/rust.gni -# -# See https://github.com/rust-lang/rust/blob/master/library/std/build.rs -cfg = ['backtrace_in_libstd'] -env = ['STD_ENV_ARCH=$rust_target_arch'] - -[test] -# Requires: -# * CFG_DISABLE_UNSTABLE_FEATURES=0 to match how it's built by x.py. -env = ['CFG_DISABLE_UNSTABLE_FEATURES=0'] +# Provides per-crate and overall configuration options to gnrt. + +[resolve] +# There is a virtual "sysroot" crate that includes all sysroot libraries as +# dependencies. +root = "sysroot" + +# Workaround for Cargo issue: hashbrown's Cargo.toml uses an unstable Cargo +# feature that leads to incorrect `cargo metadata` output. +# +# TODO(https://github.com/rust-lang/cargo/issues/10801): remove workaround once +# issue is fixed. +remove_crates = ['allocator-api2'] + +[gn] +build_file_template = "BUILD.gn.hbs" + +[all-crates] +# std crates should have metadata applied to them. This would avoid any symbol +# conflicts between std dependencies and third_party/rust crates. +# +# However, we can't apply it yet. GN can't automatically clean old artifacts, +# nor can we delete and rebuild the sysroot on every build. +# +# TODO(crbug.com/1245714): set up GN rules to rebuilt the sysroot only when +# needed. Then set this metadata. +# +# rustc_metadata = "libstd" + +extra_kv = { include_coverage = true } + +[crate.compiler_builtins] +# Dependencies of profiler_builtins must have instrumentation disabled +extra_kv = { include_coverage = false } + +[crate.core] +# Dependencies of profiler_builtins must have instrumentation disabled +extra_kv = { include_coverage = false, immediate_abort = true } +extra_src_roots = ['../../portable-simd/crates/core_simd', '../../stdarch/crates/core_arch'] +extra_input_roots = ['../primitive_docs'] + +[crate.hashbrown] +# Workaround for Cargo issue: hashbrown's Cargo.toml uses an unstable Cargo +# feature that leads to incorrect `cargo metadata` output. +# +# TODO(https://github.com/rust-lang/cargo/issues/10801): remove workaround once +# issue is fixed. +remove_deps = ['allocator-api2'] + +[crate.libc] +# This target is #[no_core] when included by std, which is incompatible with +# profiling. +# +# Suppress link directives since we specify the deps in GN configs. +extra_kv = { include_coverage = false, no_link_directives = true } + +[crate.profiler_builtins] +# The build script is used to compile a profiler-rt library, but we get +# the profiler rt library from clang, so we skip this. +# +# profiler_builtins cannot depend on itself, which it would if build with +# instrumentation. +extra_kv = { include_coverage = false, skip_build_rs = true } + +[crate.rustc-std-workspace-alloc] +# This target is #[no_core] which is incompatible with profiling. +extra_kv = { include_coverage = false } + +[crate.rustc-std-workspace-core] +# Dependencies of profiler_builtins must have instrumentation disabled +extra_kv = { include_coverage = false } + +[crate.std] +extra_src_roots = ['../../backtrace/src', '../../portable-simd/crates/std_float/src'] +extra_input_roots = ['../primitive_docs', '../../core/src', '../../portable-simd/crates/core_simd/src', '../../stdarch/crates/core_arch/src'] + +# Remove this from std. It will be depended on directly when needed. +exclude_deps_in_gn = ['profiler_builtins'] + +extra_kv = { immediate_abort = true } + +[crate.test] +# test only depends on proc_macro as an internal detail of the Rust build, so +# it's implicitly included with std/test. However, we list the std crates and +# construct the sysroot explicitly. We don't need this, and we don't even want +# it during cross-compiles (since we will only build host proc_macro crates). +exclude_deps_in_gn = ['proc_macro'] + +[crate.unwind] +# The build script is used to set up the link directives which we skip below. +# It uses `cc` to run a compiler to do so, which we don't support in build +# scripts. +# +# Suppress link directives since we specify the deps in GN configs. +extra_kv = { skip_build_rs = true, no_link_directives = true } \ No newline at end of file diff --git a/build/rust/std/immediate_crash.h b/build/rust/std/immediate_crash.h index bc27350..7c13eb6 100644 --- a/build/rust/std/immediate_crash.h +++ b/build/rust/std/immediate_crash.h @@ -2,7 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// This file is copied from //base/immediate_crash.h. +// This file has been copied from //base/immediate_crash.h. +// TODO(https://crbug.com/1475734): Avoid code duplication / reuse code. #ifndef BUILD_RUST_STD_IMMEDIATE_CRASH_H_ #define BUILD_RUST_STD_IMMEDIATE_CRASH_H_ diff --git a/build/rust/std/remap_alloc.cc b/build/rust/std/remap_alloc.cc index ceac756..bfd39b7 100644 --- a/build/rust/std/remap_alloc.cc +++ b/build/rust/std/remap_alloc.cc @@ -2,11 +2,19 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include -#include +#include +#include +#include +#include +#include "build/build_config.h" +#include "build/rust/std/alias.h" #include "build/rust/std/immediate_crash.h" +#if BUILDFLAG(IS_ANDROID) +#include +#endif + // When linking a final binary, rustc has to pick between either: // * The default Rust allocator // * Any #[global_allocator] defined in *any rlib in its dependency tree* @@ -37,16 +45,18 @@ // We're not (always) using rustc for final linking. For cases where we're not // Rustc as the final linker, we'll define those symbols here instead. // -// In future, we may wish to do something different from using the Rust -// default allocator (e.g. explicitly redirect to PartitionAlloc). We could -// do that here, or we could build a crate with a #[global_allocator] and -// redirect these symbols to that crate instead. The advantage of the latter -// is that it would work equally well for those cases where rustc is doing -// the final linking. At present, this is not necessary because -// PartitionAlloc-Everywhere successfully handles the calls to malloc which -// result from passing through this code. We might want to call into -// PA directly if we wished for Rust allocations to be in a different -// partition, or similar, in future. +// The Rust stdlib on Windows uses GetProcessHeap() which will bypass +// PartitionAlloc, so we do not forward these functions back to the stdlib. +// Instead, we pass them to PartitionAlloc, while replicating functionality from +// the unix stdlib to allow them to provide their increased functionality on top +// of the system functions. +// +// In future, we may build a crate with a #[global_allocator] and +// redirect these symbols back to Rust in order to use to that crate instead. +// +// Instead of going through system functions like malloc() we may want to call +// into PA directly if we wished for Rust allocations to be in a different +// partition, or similar, in the future. // // They're weak symbols, because this file will sometimes end up in targets // which are linked by rustc, and thus we would otherwise get duplicate @@ -55,33 +65,104 @@ extern "C" { -void* __rdl_alloc(size_t, size_t); -void __rdl_dealloc(void*); -void* __rdl_realloc(void*, size_t, size_t, size_t); -void* __rdl_alloc_zeroed(size_t, size_t); +#ifdef COMPONENT_BUILD +#if BUILDFLAG(IS_WIN) +#define REMAP_ALLOC_ATTRIBUTES __declspec(dllexport) __attribute__((weak)) +#else +#define REMAP_ALLOC_ATTRIBUTES \ + __attribute__((visibility("default"))) __attribute__((weak)) +#endif +#else +#define REMAP_ALLOC_ATTRIBUTES __attribute__((weak)) +#endif // COMPONENT_BUILD + +// This must exist as the stdlib depends on it to prove that we know the +// alloc shims below are unstable. In the future we may be required to replace +// them with a #[global_allocator] crate (see file comment above for more). +// +// Marked as weak as when Rust drives linking it includes this symbol itself, +// and we don't want a collision due to C++ being in the same link target, where +// C++ causes us to explicitly link in the stdlib and this symbol here. +[[maybe_unused]] __attribute__(( + weak)) unsigned char __rust_no_alloc_shim_is_unstable; + +REMAP_ALLOC_ATTRIBUTES void* __rust_alloc(size_t size, size_t align) { + // This mirrors kMaxSupportedAlignment from + // base/allocator/partition_allocator/partition_alloc_constants.h. + // ParitionAlloc will crash if given an alignment larger than this. + constexpr size_t max_align = (1 << 21) / 2; + if (align > max_align) { + return nullptr; + } + + if (align <= alignof(std::max_align_t)) { + return malloc(size); + } else { + // Note: PartitionAlloc by default will route aligned allocations back to + // malloc() (the fast path) if they are for a small enough alignment. So we + // just unconditionally use aligned allocation functions here. + // https://source.chromium.org/chromium/chromium/src/+/refs/heads/main:base/allocator/partition_allocator/shim/allocator_shim_default_dispatch_to_partition_alloc.cc;l=219-226;drc=31d99ff4aa0cc0b75063325ff243e911516a5a6a -void* __attribute__((weak)) __rust_alloc(size_t a, size_t b) { - return __rdl_alloc(a, b); +#if defined(COMPILER_MSVC) + // Because we use PartitionAlloc() as the allocator, free() is able to find + // this allocation, instead of the usual requirement to use _aligned_free(). + return _aligned_malloc(size, align); +#elif BUILDFLAG(IS_ANDROID) + // Android has no posix_memalign() exposed: + // https://source.chromium.org/chromium/chromium/src/+/main:base/memory/aligned_memory.cc;l=24-30;drc=e4622aaeccea84652488d1822c28c78b7115684f + return memalign(align, size); +#else + // The `align` from Rust is always a power of 2: + // https://doc.rust-lang.org/std/alloc/struct.Layout.html#method.from_size_align. + // + // We get here only if align > alignof(max_align_t), which guarantees that + // the alignment is both a power of 2 and even, which is required by + // posix_memalign(). + // + // The PartitionAlloc impl requires that the alignment is at least the same + // as pointer-alignment. std::max_align_t is at least pointer-aligned as + // well, so we satisfy that. + void* p; + auto ret = posix_memalign(&p, align, size); + return ret == 0 ? p : nullptr; +#endif + } } -void __attribute__((weak)) __rust_dealloc(void* a) { - __rdl_dealloc(a); +REMAP_ALLOC_ATTRIBUTES void __rust_dealloc(void* p, size_t size, size_t align) { + free(p); } -void* __attribute__((weak)) -__rust_realloc(void* a, size_t b, size_t c, size_t d) { - return __rdl_realloc(a, b, c, d); +REMAP_ALLOC_ATTRIBUTES void* __rust_realloc(void* p, + size_t old_size, + size_t align, + size_t new_size) { + if (align <= alignof(std::max_align_t)) { + return realloc(p, new_size); + } else { + void* out = __rust_alloc(align, new_size); + memcpy(out, p, std::min(old_size, new_size)); + return out; + } } -void* __attribute__((weak)) __rust_alloc_zeroed(size_t a, size_t b) { - return __rdl_alloc_zeroed(a, b); +REMAP_ALLOC_ATTRIBUTES void* __rust_alloc_zeroed(size_t size, size_t align) { + if (align <= alignof(std::max_align_t)) { + return calloc(size, 1); + } else { + void* p = __rust_alloc(size, align); + memset(p, 0, size); + return p; + } } -void __attribute__((weak)) __rust_alloc_error_handler(size_t a, size_t b) { +REMAP_ALLOC_ATTRIBUTES void __rust_alloc_error_handler(size_t size, + size_t align) { + NO_CODE_FOLDING(); IMMEDIATE_CRASH(); } -extern const unsigned char __attribute__((weak)) -__rust_alloc_error_handler_should_panic = 0; +REMAP_ALLOC_ATTRIBUTES extern const unsigned char + __rust_alloc_error_handler_should_panic = 0; } // extern "C" diff --git a/build/rust/std/rules/BUILD.gn b/build/rust/std/rules/BUILD.gn index 8bdb2ed..cda6a66 100644 --- a/build/rust/std/rules/BUILD.gn +++ b/build/rust/std/rules/BUILD.gn @@ -2,18 +2,25 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. +# @generated from build/rust/std/BUILD.gn.hbs by tools/crates/gnrt. Do not edit! + import("//build/rust/cargo_crate.gni") cargo_crate("addr2line") { crate_type = "rlib" - crate_root = "//build/rust/std/fake_root/../../../../third_party/rust-toolchain/lib/rustlib/src/rust/vendor/addr2line-0.17.0/src/lib.rs" + crate_root = "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/addr2line-0.19.0/src/lib.rs" + sources = [ + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/addr2line-0.19.0/src/function.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/addr2line-0.19.0/src/lazy.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/addr2line-0.19.0/src/lib.rs", + ] + inputs = [] no_std = true # Unit tests skipped. Generate with --with-tests to include them. build_native_rust_unit_tests = false - sources = [ "//build/rust/std/fake_root/../../../../third_party/rust-toolchain/lib/rustlib/src/rust/vendor/addr2line-0.17.0/src/lib.rs" ] edition = "2015" - cargo_pkg_version = "0.17.0" + cargo_pkg_version = "0.19.0" cargo_pkg_name = "addr2line" cargo_pkg_description = "A cross-platform symbolication library written in Rust, using `gimli`" @@ -26,6 +33,8 @@ cargo_crate("addr2line") { ":gimli", ":rustc_std_workspace_alloc", ":rustc_std_workspace_core", + "//build/rust/std:profiler_builtins_group", + "//build/rust/std:std_build_deps", ] aliased_deps = { alloc = ":rustc_std_workspace_alloc__rlib" @@ -37,15 +46,29 @@ cargo_crate("addr2line") { "core", "rustc-dep-of-std", ] + rustenv = [ + "CFG_DISABLE_UNSTABLE_FEATURES=0", + "STD_ENV_ARCH=$rust_target_arch", + ] + rustflags = [ + "--cfg=backtrace_in_libstd", + "-Zforce-unstable-if-unmarked", + ] + output_dir = + "$root_out_dir/local_rustc_sysroot/lib/rustlib/$rust_abi_target/lib/" } cargo_crate("adler") { crate_type = "rlib" - crate_root = "//build/rust/std/fake_root/../../../../third_party/rust-toolchain/lib/rustlib/src/rust/vendor/adler-1.0.2/src/lib.rs" + crate_root = "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/adler-1.0.2/src/lib.rs" + sources = [ + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/adler-1.0.2/src/algo.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/adler-1.0.2/src/lib.rs", + ] + inputs = [] no_std = true # Unit tests skipped. Generate with --with-tests to include them. build_native_rust_unit_tests = false - sources = [ "//build/rust/std/fake_root/../../../../third_party/rust-toolchain/lib/rustlib/src/rust/vendor/adler-1.0.2/src/lib.rs" ] edition = "2015" cargo_pkg_version = "1.0.2" cargo_pkg_authors = "Jonas Schievink " @@ -59,6 +82,8 @@ cargo_crate("adler") { deps = [ ":compiler_builtins", ":rustc_std_workspace_core", + "//build/rust/std:profiler_builtins_group", + "//build/rust/std:std_build_deps", ] aliased_deps = { core = ":rustc_std_workspace_core__rlib" @@ -68,15 +93,103 @@ cargo_crate("adler") { "core", "rustc-dep-of-std", ] + rustenv = [ + "CFG_DISABLE_UNSTABLE_FEATURES=0", + "STD_ENV_ARCH=$rust_target_arch", + ] + rustflags = [ + "--cfg=backtrace_in_libstd", + "-Zforce-unstable-if-unmarked", + ] + output_dir = + "$root_out_dir/local_rustc_sysroot/lib/rustlib/$rust_abi_target/lib/" } cargo_crate("alloc") { crate_type = "rlib" crate_root = "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/lib.rs" + sources = [ + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/alloc.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/alloc/tests.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/borrow.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/boxed.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/boxed/thin.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/collections/binary_heap/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/collections/binary_heap/tests.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/collections/btree/append.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/collections/btree/borrow.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/collections/btree/borrow/tests.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/collections/btree/dedup_sorted_iter.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/collections/btree/fix.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/collections/btree/map.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/collections/btree/map/entry.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/collections/btree/map/tests.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/collections/btree/mem.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/collections/btree/merge_iter.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/collections/btree/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/collections/btree/navigate.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/collections/btree/node.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/collections/btree/node/tests.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/collections/btree/remove.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/collections/btree/search.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/collections/btree/set.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/collections/btree/set/tests.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/collections/btree/set_val.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/collections/btree/split.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/collections/linked_list.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/collections/linked_list/tests.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/collections/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/collections/vec_deque/drain.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/collections/vec_deque/into_iter.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/collections/vec_deque/iter.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/collections/vec_deque/iter_mut.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/collections/vec_deque/macros.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/collections/vec_deque/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/collections/vec_deque/spec_extend.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/collections/vec_deque/spec_from_iter.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/collections/vec_deque/tests.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/ffi/c_str.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/ffi/c_str/tests.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/ffi/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/fmt.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/lib.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/macros.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/raw_vec.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/raw_vec/tests.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/rc.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/rc/tests.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/slice.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/slice/tests.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/str.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/string.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/sync.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/sync/tests.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/task.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/testing/crash_test.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/testing/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/testing/ord_chaos.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/testing/rng.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/tests.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/vec/cow.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/vec/drain.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/vec/extract_if.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/vec/in_place_collect.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/vec/in_place_drop.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/vec/into_iter.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/vec/is_zero.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/vec/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/vec/partial_eq.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/vec/set_len_on_drop.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/vec/spec_extend.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/vec/spec_from_elem.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/vec/spec_from_iter.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/vec/spec_from_iter_nested.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/vec/splice.rs", + ] + inputs = [] no_std = true # Unit tests skipped. Generate with --with-tests to include them. build_native_rust_unit_tests = false - sources = [ "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/lib.rs" ] edition = "2021" cargo_pkg_version = "0.0.0" cargo_pkg_name = "alloc" @@ -88,39 +201,34 @@ cargo_crate("alloc") { deps = [ ":compiler_builtins", ":core", + "//build/rust/std:profiler_builtins_group", + "//build/rust/std:std_build_deps", ] -} -cargo_crate("cc") { - crate_type = "rlib" - crate_root = "//build/rust/std/fake_root/../../../../third_party/rust-toolchain/lib/rustlib/src/rust/vendor/cc-1.0.78/src/lib.rs" - no_std = true - - # Unit tests skipped. Generate with --with-tests to include them. - build_native_rust_unit_tests = false - sources = [ "//build/rust/std/fake_root/../../../../third_party/rust-toolchain/lib/rustlib/src/rust/vendor/cc-1.0.78/src/lib.rs" ] - edition = "2018" - cargo_pkg_version = "1.0.78" - cargo_pkg_authors = "Alex Crichton " - cargo_pkg_name = "cc" - cargo_pkg_description = "A build-time dependency for Cargo build scripts to assist in invoking the nativeC compiler to compile native C code into a static archive to be linked into Rustcode." - library_configs -= [ "//build/config/compiler:chromium_code" ] - library_configs += [ "//build/config/compiler:no_chromium_code" ] - executable_configs -= [ "//build/config/compiler:chromium_code" ] - executable_configs += [ "//build/config/compiler:no_chromium_code" ] + rustenv = [ + "CFG_DISABLE_UNSTABLE_FEATURES=0", + "STD_ENV_ARCH=$rust_target_arch", + ] + rustflags = [ + "--cfg=backtrace_in_libstd", + "-Zforce-unstable-if-unmarked", + ] + output_dir = + "$root_out_dir/local_rustc_sysroot/lib/rustlib/$rust_abi_target/lib/" } cargo_crate("cfg_if") { crate_type = "rlib" - crate_root = "//build/rust/std/fake_root/../../../../third_party/rust-toolchain/lib/rustlib/src/rust/vendor/cfg-if-1.0.0/src/lib.rs" + crate_root = "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/cfg-if-1.0.0/src/lib.rs" + sources = [ "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/cfg-if-1.0.0/src/lib.rs" ] + inputs = [] no_std = true # Unit tests skipped. Generate with --with-tests to include them. build_native_rust_unit_tests = false - sources = [ "//build/rust/std/fake_root/../../../../third_party/rust-toolchain/lib/rustlib/src/rust/vendor/cfg-if-1.0.0/src/lib.rs" ] edition = "2018" cargo_pkg_version = "1.0.0" cargo_pkg_authors = "Alex Crichton " cargo_pkg_name = "cfg-if" - cargo_pkg_description = "A macro to ergonomically define an item depending on a large number of #[cfg]parameters. Structured like an if-else chain, the first matching branch is theitem that gets emitted." + cargo_pkg_description = "A macro to ergonomically define an item depending on a large number of #[cfg] parameters. Structured like an if-else chain, the first matching branch is the item that gets emitted." library_configs -= [ "//build/config/compiler:chromium_code" ] library_configs += [ "//build/config/compiler:no_chromium_code" ] executable_configs -= [ "//build/config/compiler:chromium_code" ] @@ -128,6 +236,8 @@ cargo_crate("cfg_if") { deps = [ ":compiler_builtins", ":rustc_std_workspace_core", + "//build/rust/std:profiler_builtins_group", + "//build/rust/std:std_build_deps", ] aliased_deps = { core = ":rustc_std_workspace_core__rlib" @@ -137,25 +247,78 @@ cargo_crate("cfg_if") { "core", "rustc-dep-of-std", ] + rustenv = [ + "CFG_DISABLE_UNSTABLE_FEATURES=0", + "STD_ENV_ARCH=$rust_target_arch", + ] + rustflags = [ + "--cfg=backtrace_in_libstd", + "-Zforce-unstable-if-unmarked", + ] + output_dir = + "$root_out_dir/local_rustc_sysroot/lib/rustlib/$rust_abi_target/lib/" } cargo_crate("compiler_builtins") { crate_type = "rlib" - crate_root = "//build/rust/std/fake_root/../../../../third_party/rust-toolchain/lib/rustlib/src/rust/vendor/compiler_builtins-0.1.85/src/lib.rs" + crate_root = "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/compiler_builtins-0.1.92/src/lib.rs" + sources = [ + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/compiler_builtins-0.1.92/src/arm.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/compiler_builtins-0.1.92/src/arm_linux.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/compiler_builtins-0.1.92/src/float/add.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/compiler_builtins-0.1.92/src/float/cmp.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/compiler_builtins-0.1.92/src/float/conv.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/compiler_builtins-0.1.92/src/float/div.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/compiler_builtins-0.1.92/src/float/extend.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/compiler_builtins-0.1.92/src/float/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/compiler_builtins-0.1.92/src/float/mul.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/compiler_builtins-0.1.92/src/float/pow.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/compiler_builtins-0.1.92/src/float/sub.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/compiler_builtins-0.1.92/src/float/trunc.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/compiler_builtins-0.1.92/src/int/addsub.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/compiler_builtins-0.1.92/src/int/leading_zeros.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/compiler_builtins-0.1.92/src/int/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/compiler_builtins-0.1.92/src/int/mul.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/compiler_builtins-0.1.92/src/int/sdiv.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/compiler_builtins-0.1.92/src/int/shift.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/compiler_builtins-0.1.92/src/int/specialized_div_rem/asymmetric.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/compiler_builtins-0.1.92/src/int/specialized_div_rem/binary_long.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/compiler_builtins-0.1.92/src/int/specialized_div_rem/delegate.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/compiler_builtins-0.1.92/src/int/specialized_div_rem/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/compiler_builtins-0.1.92/src/int/specialized_div_rem/norm_shift.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/compiler_builtins-0.1.92/src/int/specialized_div_rem/trifecta.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/compiler_builtins-0.1.92/src/int/udiv.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/compiler_builtins-0.1.92/src/lib.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/compiler_builtins-0.1.92/src/macros.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/compiler_builtins-0.1.92/src/math.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/compiler_builtins-0.1.92/src/mem/impls.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/compiler_builtins-0.1.92/src/mem/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/compiler_builtins-0.1.92/src/mem/x86_64.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/compiler_builtins-0.1.92/src/probestack.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/compiler_builtins-0.1.92/src/riscv.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/compiler_builtins-0.1.92/src/x86.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/compiler_builtins-0.1.92/src/x86_64.rs", + ] + inputs = [] no_std = true # Unit tests skipped. Generate with --with-tests to include them. build_native_rust_unit_tests = false - sources = [ "//build/rust/std/fake_root/../../../../third_party/rust-toolchain/lib/rustlib/src/rust/vendor/compiler_builtins-0.1.85/src/lib.rs" ] edition = "2015" - cargo_pkg_version = "0.1.85" + cargo_pkg_version = "0.1.92" cargo_pkg_authors = "Jorge Aparicio " cargo_pkg_name = "compiler_builtins" - cargo_pkg_description = "Compiler intrinsics used by the Rust compiler. Also available for other targetsif necessary!" - library_configs -= [ "//build/config/compiler:chromium_code" ] + cargo_pkg_description = "Compiler intrinsics used by the Rust compiler. Also available for other targets if necessary!" + library_configs -= [ + "//build/config/compiler:chromium_code", + "//build/config/coverage:default_coverage", + ] library_configs += [ "//build/config/compiler:no_chromium_code" ] executable_configs -= [ "//build/config/compiler:chromium_code" ] executable_configs += [ "//build/config/compiler:no_chromium_code" ] - deps = [ ":rustc_std_workspace_core" ] + deps = [ + ":rustc_std_workspace_core", + "//build/rust/std:std_build_deps", + ] aliased_deps = { core = ":rustc_std_workspace_core__rlib" } @@ -163,35 +326,511 @@ cargo_crate("compiler_builtins") { "compiler-builtins", "core", "rustc-dep-of-std", + "weak-intrinsics", + ] + build_root = "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/compiler_builtins-0.1.92/build.rs" + build_sources = [ "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/compiler_builtins-0.1.92/build.rs" ] + rustenv = [ + "CFG_DISABLE_UNSTABLE_FEATURES=0", + "STD_ENV_ARCH=$rust_target_arch", ] + rustflags = [ + "--cfg=backtrace_in_libstd", + "-Zforce-unstable-if-unmarked", + ] + output_dir = + "$root_out_dir/local_rustc_sysroot/lib/rustlib/$rust_abi_target/lib/" } cargo_crate("core") { crate_type = "rlib" crate_root = "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/lib.rs" + sources = [ + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/alloc/global.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/alloc/layout.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/alloc/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/any.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/arch.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/array/ascii.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/array/drain.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/array/equality.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/array/iter.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/array/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ascii.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ascii/ascii_char.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/asserting.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/async_iter/async_iter.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/async_iter/from_iter.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/async_iter/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/bool.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/borrow.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/cell.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/cell/lazy.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/cell/once.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/char/convert.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/char/decode.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/char/methods.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/char/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/clone.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/cmp.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/cmp/bytewise.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/convert/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/convert/num.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/default.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/error.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/escape.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ffi/c_str.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ffi/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/fmt/builders.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/fmt/float.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/fmt/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/fmt/nofloat.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/fmt/num.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/fmt/rt.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/future/future.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/future/into_future.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/future/join.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/future/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/future/pending.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/future/poll_fn.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/future/ready.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/hash/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/hash/sip.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/hint.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/internal_macros.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/intrinsics.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/intrinsics/mir.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/iter/adapters/array_chunks.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/iter/adapters/by_ref_sized.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/iter/adapters/chain.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/iter/adapters/cloned.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/iter/adapters/copied.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/iter/adapters/cycle.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/iter/adapters/enumerate.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/iter/adapters/filter.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/iter/adapters/filter_map.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/iter/adapters/flatten.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/iter/adapters/fuse.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/iter/adapters/inspect.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/iter/adapters/intersperse.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/iter/adapters/map.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/iter/adapters/map_while.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/iter/adapters/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/iter/adapters/peekable.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/iter/adapters/rev.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/iter/adapters/scan.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/iter/adapters/skip.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/iter/adapters/skip_while.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/iter/adapters/step_by.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/iter/adapters/take.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/iter/adapters/take_while.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/iter/adapters/zip.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/iter/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/iter/range.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/iter/sources.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/iter/sources/empty.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/iter/sources/from_fn.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/iter/sources/from_generator.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/iter/sources/once.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/iter/sources/once_with.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/iter/sources/repeat.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/iter/sources/repeat_n.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/iter/sources/repeat_with.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/iter/sources/successors.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/iter/traits/accum.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/iter/traits/collect.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/iter/traits/double_ended.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/iter/traits/exact_size.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/iter/traits/iterator.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/iter/traits/marker.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/iter/traits/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/iter/traits/unchecked_iterator.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/lib.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/marker.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/mem/manually_drop.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/mem/maybe_uninit.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/mem/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/mem/transmutability.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/net/display_buffer.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/net/ip_addr.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/net/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/net/parser.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/net/socket_addr.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/bignum.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/dec2flt/common.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/dec2flt/decimal.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/dec2flt/float.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/dec2flt/fpu.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/dec2flt/lemire.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/dec2flt/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/dec2flt/number.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/dec2flt/parse.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/dec2flt/slow.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/dec2flt/table.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/diy_float.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/error.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/f32.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/f64.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/flt2dec/decoder.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/flt2dec/estimator.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/flt2dec/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/flt2dec/strategy/dragon.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/flt2dec/strategy/grisu.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/fmt.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/int_log10.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/int_macros.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/nonzero.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/saturating.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/shells/i128.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/shells/i16.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/shells/i32.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/shells/i64.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/shells/i8.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/shells/int_macros.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/shells/isize.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/shells/u128.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/shells/u16.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/shells/u32.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/shells/u64.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/shells/u8.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/shells/usize.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/uint_macros.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/num/wrapping.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ops/arith.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ops/bit.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ops/control_flow.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ops/deref.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ops/drop.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ops/function.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ops/generator.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ops/index.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ops/index_range.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ops/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ops/range.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ops/try_trait.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ops/unsize.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/option.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/panic.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/panic/location.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/panic/panic_info.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/panic/unwind_safe.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/panicking.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/pin.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/prelude/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/prelude/v1.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/primitive.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/primitive_docs.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ptr/alignment.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ptr/const_ptr.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ptr/metadata.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ptr/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ptr/mut_ptr.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ptr/non_null.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ptr/unique.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/result.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/slice/ascii.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/slice/cmp.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/slice/index.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/slice/iter.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/slice/iter/macros.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/slice/memchr.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/slice/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/slice/raw.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/slice/rotate.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/slice/select.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/slice/sort.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/slice/specialize.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/str/converts.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/str/count.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/str/error.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/str/iter.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/str/lossy.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/str/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/str/pattern.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/str/traits.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/str/validations.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/sync/atomic.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/sync/exclusive.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/sync/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/task/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/task/poll.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/task/ready.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/task/wake.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/time.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/tuple.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/unicode/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/unicode/printable.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/unicode/unicode_data.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/unit.rs", + ] + inputs = [ + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../portable-simd/crates/core_simd/examples/README.md", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../portable-simd/crates/core_simd/examples/dot_product.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../portable-simd/crates/core_simd/examples/matrix_inversion.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../portable-simd/crates/core_simd/examples/nbody.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../portable-simd/crates/core_simd/examples/spectral_norm.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../portable-simd/crates/core_simd/src/alias.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../portable-simd/crates/core_simd/src/cast.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../portable-simd/crates/core_simd/src/core_simd_docs.md", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../portable-simd/crates/core_simd/src/elements/const_ptr.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../portable-simd/crates/core_simd/src/elements/float.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../portable-simd/crates/core_simd/src/elements/int.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../portable-simd/crates/core_simd/src/elements/mut_ptr.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../portable-simd/crates/core_simd/src/elements/uint.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../portable-simd/crates/core_simd/src/elements.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../portable-simd/crates/core_simd/src/eq.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../portable-simd/crates/core_simd/src/fmt.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../portable-simd/crates/core_simd/src/intrinsics.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../portable-simd/crates/core_simd/src/iter.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../portable-simd/crates/core_simd/src/lane_count.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../portable-simd/crates/core_simd/src/lib.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../portable-simd/crates/core_simd/src/masks/bitmask.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../portable-simd/crates/core_simd/src/masks/full_masks.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../portable-simd/crates/core_simd/src/masks/to_bitmask.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../portable-simd/crates/core_simd/src/masks.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../portable-simd/crates/core_simd/src/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../portable-simd/crates/core_simd/src/ops/assign.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../portable-simd/crates/core_simd/src/ops/deref.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../portable-simd/crates/core_simd/src/ops/unary.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../portable-simd/crates/core_simd/src/ops.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../portable-simd/crates/core_simd/src/ord.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../portable-simd/crates/core_simd/src/select.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../portable-simd/crates/core_simd/src/swizzle.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../portable-simd/crates/core_simd/src/swizzle_dyn.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../portable-simd/crates/core_simd/src/to_bytes.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../portable-simd/crates/core_simd/src/vector.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../portable-simd/crates/core_simd/src/vendor/arm.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../portable-simd/crates/core_simd/src/vendor/powerpc.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../portable-simd/crates/core_simd/src/vendor/wasm32.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../portable-simd/crates/core_simd/src/vendor/x86.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../portable-simd/crates/core_simd/src/vendor.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../portable-simd/crates/core_simd/tests/autoderef.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../portable-simd/crates/core_simd/tests/cast.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../portable-simd/crates/core_simd/tests/f32_ops.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../portable-simd/crates/core_simd/tests/f64_ops.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../portable-simd/crates/core_simd/tests/i16_ops.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../portable-simd/crates/core_simd/tests/i32_ops.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../portable-simd/crates/core_simd/tests/i64_ops.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../portable-simd/crates/core_simd/tests/i8_ops.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../portable-simd/crates/core_simd/tests/isize_ops.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../portable-simd/crates/core_simd/tests/mask_ops.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../portable-simd/crates/core_simd/tests/mask_ops_impl/mask16.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../portable-simd/crates/core_simd/tests/mask_ops_impl/mask32.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../portable-simd/crates/core_simd/tests/mask_ops_impl/mask64.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../portable-simd/crates/core_simd/tests/mask_ops_impl/mask8.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../portable-simd/crates/core_simd/tests/mask_ops_impl/mask_macros.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../portable-simd/crates/core_simd/tests/mask_ops_impl/masksize.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../portable-simd/crates/core_simd/tests/mask_ops_impl/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../portable-simd/crates/core_simd/tests/masks.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../portable-simd/crates/core_simd/tests/ops_macros.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../portable-simd/crates/core_simd/tests/pointers.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../portable-simd/crates/core_simd/tests/round.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../portable-simd/crates/core_simd/tests/swizzle.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../portable-simd/crates/core_simd/tests/swizzle_dyn.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../portable-simd/crates/core_simd/tests/to_bytes.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../portable-simd/crates/core_simd/tests/try_from_slice.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../portable-simd/crates/core_simd/tests/u16_ops.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../portable-simd/crates/core_simd/tests/u32_ops.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../portable-simd/crates/core_simd/tests/u64_ops.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../portable-simd/crates/core_simd/tests/u8_ops.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../portable-simd/crates/core_simd/tests/usize_ops.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/MISSING.md", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/README.md", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/avx512bw.md", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/avx512f.md", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/aarch64/armclang.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/aarch64/crc.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/aarch64/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/aarch64/neon/generated.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/aarch64/neon/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/aarch64/prefetch.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/aarch64/test_support.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/aarch64/tme.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/aarch64/v8.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/arm/armclang.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/arm/dsp.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/arm/ex.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/arm/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/arm/neon.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/arm/sat.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/arm/simd32.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/arm/v6.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/arm/v7.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/arm_shared/barrier/common.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/arm_shared/barrier/cp15.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/arm_shared/barrier/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/arm_shared/barrier/not_mclass.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/arm_shared/barrier/v8.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/arm_shared/crc.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/arm_shared/crypto.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/arm_shared/hints.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/arm_shared/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/arm_shared/neon/generated.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/arm_shared/neon/load_tests.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/arm_shared/neon/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/arm_shared/neon/shift_and_insert_tests.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/arm_shared/neon/store_tests.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/arm_shared/neon/table_lookup_tests.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/arm_shared/registers/aarch32.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/arm_shared/registers/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/arm_shared/registers/v6m.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/arm_shared/registers/v7m.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/arm_shared/test_support.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/core_arch_docs.md", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/lib.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/macros.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/mips/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/mips/msa.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/nvptx/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/powerpc/altivec.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/powerpc/macros.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/powerpc/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/powerpc/vsx.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/powerpc64/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/riscv64/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/riscv_shared/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/riscv_shared/p.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/simd.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/simd_llvm.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/v64.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/wasm32/atomic.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/wasm32/memory.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/wasm32/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/wasm32/relaxed_simd.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/wasm32/simd128.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/x86/abm.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/x86/adx.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/x86/aes.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/x86/avx.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/x86/avx2.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/x86/avx512bf16.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/x86/avx512bitalg.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/x86/avx512bw.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/x86/avx512cd.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/x86/avx512f.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/x86/avx512ifma.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/x86/avx512vbmi.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/x86/avx512vbmi2.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/x86/avx512vnni.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/x86/avx512vpopcntdq.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/x86/bmi1.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/x86/bmi2.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/x86/bswap.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/x86/bt.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/x86/cpuid.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/x86/eflags.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/x86/f16c.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/x86/fma.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/x86/fxsr.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/x86/gfni.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/x86/macros.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/x86/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/x86/pclmulqdq.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/x86/rdrand.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/x86/rdtsc.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/x86/rtm.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/x86/sha.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/x86/sse.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/x86/sse2.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/x86/sse3.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/x86/sse41.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/x86/sse42.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/x86/sse4a.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/x86/ssse3.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/x86/tbm.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/x86/test.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/x86/vaes.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/x86/vpclmulqdq.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/x86/xsave.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/x86_64/abm.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/x86_64/adx.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/x86_64/avx.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/x86_64/avx2.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/x86_64/avx512f.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/x86_64/bmi.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/x86_64/bmi2.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/x86_64/bswap.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/x86_64/bt.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/x86_64/cmpxchg16b.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/x86_64/fxsr.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/x86_64/macros.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/x86_64/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/x86_64/rdrand.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/x86_64/sse.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/x86_64/sse2.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/x86_64/sse41.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/x86_64/sse42.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../stdarch/crates/core_arch/src/x86_64/xsave.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../primitive_docs/box_into_raw.md", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../primitive_docs/fs_file.md", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../primitive_docs/io_bufread.md", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../primitive_docs/io_read.md", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../primitive_docs/io_seek.md", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../primitive_docs/io_write.md", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../primitive_docs/net_tosocketaddrs.md", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../primitive_docs/process_exit.md", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../primitive_docs/string_string.md", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/error.md", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ffi/c_char.md", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ffi/c_double.md", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ffi/c_float.md", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ffi/c_int.md", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ffi/c_long.md", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ffi/c_longlong.md", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ffi/c_schar.md", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ffi/c_short.md", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ffi/c_uchar.md", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ffi/c_uint.md", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ffi/c_ulong.md", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ffi/c_ulonglong.md", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ffi/c_ushort.md", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/ffi/c_void.md", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/macros/panic.md", + ] no_std = true # Unit tests skipped. Generate with --with-tests to include them. build_native_rust_unit_tests = false - sources = [ - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/lib.rs", - ] edition = "2021" cargo_pkg_version = "0.0.0" cargo_pkg_name = "core" cargo_pkg_description = "The Rust Core Library" - library_configs -= [ "//build/config/compiler:chromium_code" ] - library_configs += [ "//build/config/compiler:no_chromium_code" ] + library_configs -= [ + "//build/config/compiler:chromium_code", + "//build/config/coverage:default_coverage", + ] + library_configs += [ + "//build/config/compiler:no_chromium_code", + "//build/rust:panic_immediate_abort", + ] executable_configs -= [ "//build/config/compiler:chromium_code" ] executable_configs += [ "//build/config/compiler:no_chromium_code" ] + deps = [ "//build/rust/std:std_build_deps" ] + rustenv = [ + "CFG_DISABLE_UNSTABLE_FEATURES=0", + "STD_ENV_ARCH=$rust_target_arch", + ] + rustflags = [ + "--cfg=backtrace_in_libstd", + "-Zforce-unstable-if-unmarked", + ] + output_dir = + "$root_out_dir/local_rustc_sysroot/lib/rustlib/$rust_abi_target/lib/" } cargo_crate("getopts") { crate_type = "rlib" - crate_root = "//build/rust/std/fake_root/../../../../third_party/rust-toolchain/lib/rustlib/src/rust/vendor/getopts-0.2.21/src/lib.rs" + crate_root = "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/getopts-0.2.21/src/lib.rs" + sources = [ + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/getopts-0.2.21/src/lib.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/getopts-0.2.21/src/tests/mod.rs", + ] + inputs = [] no_std = true # Unit tests skipped. Generate with --with-tests to include them. build_native_rust_unit_tests = false - sources = [ "//build/rust/std/fake_root/../../../../third_party/rust-toolchain/lib/rustlib/src/rust/vendor/getopts-0.2.21/src/lib.rs" ] edition = "2015" cargo_pkg_version = "0.2.21" cargo_pkg_authors = "The Rust Project Developers" @@ -205,6 +844,8 @@ cargo_crate("getopts") { ":rustc_std_workspace_core", ":rustc_std_workspace_std", ":unicode_width", + "//build/rust/std:profiler_builtins_group", + "//build/rust/std:std_build_deps", ] aliased_deps = { core = ":rustc_std_workspace_core__rlib" @@ -215,17 +856,72 @@ cargo_crate("getopts") { "rustc-dep-of-std", "std", ] + rustenv = [ + "CFG_DISABLE_UNSTABLE_FEATURES=0", + "STD_ENV_ARCH=$rust_target_arch", + ] + rustflags = [ + "--cfg=backtrace_in_libstd", + "-Zforce-unstable-if-unmarked", + ] + output_dir = + "$root_out_dir/local_rustc_sysroot/lib/rustlib/$rust_abi_target/lib/" } cargo_crate("gimli") { crate_type = "rlib" - crate_root = "//build/rust/std/fake_root/../../../../third_party/rust-toolchain/lib/rustlib/src/rust/vendor/gimli-0.26.2/src/lib.rs" + crate_root = "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/gimli-0.27.2/src/lib.rs" + sources = [ + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/gimli-0.27.2/src/arch.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/gimli-0.27.2/src/common.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/gimli-0.27.2/src/constants.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/gimli-0.27.2/src/endianity.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/gimli-0.27.2/src/leb128.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/gimli-0.27.2/src/lib.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/gimli-0.27.2/src/read/abbrev.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/gimli-0.27.2/src/read/addr.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/gimli-0.27.2/src/read/aranges.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/gimli-0.27.2/src/read/cfi.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/gimli-0.27.2/src/read/dwarf.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/gimli-0.27.2/src/read/endian_reader.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/gimli-0.27.2/src/read/endian_slice.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/gimli-0.27.2/src/read/index.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/gimli-0.27.2/src/read/lazy.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/gimli-0.27.2/src/read/line.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/gimli-0.27.2/src/read/lists.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/gimli-0.27.2/src/read/loclists.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/gimli-0.27.2/src/read/lookup.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/gimli-0.27.2/src/read/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/gimli-0.27.2/src/read/op.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/gimli-0.27.2/src/read/pubnames.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/gimli-0.27.2/src/read/pubtypes.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/gimli-0.27.2/src/read/reader.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/gimli-0.27.2/src/read/rnglists.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/gimli-0.27.2/src/read/str.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/gimli-0.27.2/src/read/unit.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/gimli-0.27.2/src/read/util.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/gimli-0.27.2/src/read/value.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/gimli-0.27.2/src/test_util.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/gimli-0.27.2/src/write/abbrev.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/gimli-0.27.2/src/write/cfi.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/gimli-0.27.2/src/write/dwarf.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/gimli-0.27.2/src/write/endian_vec.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/gimli-0.27.2/src/write/line.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/gimli-0.27.2/src/write/loc.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/gimli-0.27.2/src/write/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/gimli-0.27.2/src/write/op.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/gimli-0.27.2/src/write/range.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/gimli-0.27.2/src/write/section.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/gimli-0.27.2/src/write/str.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/gimli-0.27.2/src/write/unit.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/gimli-0.27.2/src/write/writer.rs", + ] + inputs = [] no_std = true # Unit tests skipped. Generate with --with-tests to include them. build_native_rust_unit_tests = false - sources = [ "//build/rust/std/fake_root/../../../../third_party/rust-toolchain/lib/rustlib/src/rust/vendor/gimli-0.26.2/src/lib.rs" ] edition = "2018" - cargo_pkg_version = "0.26.2" + cargo_pkg_version = "0.27.2" cargo_pkg_name = "gimli" cargo_pkg_description = "A library for reading and writing the DWARF debugging format." @@ -237,6 +933,8 @@ cargo_crate("gimli") { ":compiler_builtins", ":rustc_std_workspace_alloc", ":rustc_std_workspace_core", + "//build/rust/std:profiler_builtins_group", + "//build/rust/std:std_build_deps", ] aliased_deps = { alloc = ":rustc_std_workspace_alloc__rlib" @@ -250,17 +948,51 @@ cargo_crate("gimli") { "read-core", "rustc-dep-of-std", ] + rustenv = [ + "CFG_DISABLE_UNSTABLE_FEATURES=0", + "STD_ENV_ARCH=$rust_target_arch", + ] + rustflags = [ + "--cfg=backtrace_in_libstd", + "-Zforce-unstable-if-unmarked", + ] + output_dir = + "$root_out_dir/local_rustc_sysroot/lib/rustlib/$rust_abi_target/lib/" } cargo_crate("hashbrown") { crate_type = "rlib" - crate_root = "//build/rust/std/fake_root/../../../../third_party/rust-toolchain/lib/rustlib/src/rust/vendor/hashbrown-0.12.3/src/lib.rs" + crate_root = "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/hashbrown-0.14.0/src/lib.rs" + sources = [ + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/hashbrown-0.14.0/src/external_trait_impls/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/hashbrown-0.14.0/src/external_trait_impls/rayon/helpers.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/hashbrown-0.14.0/src/external_trait_impls/rayon/map.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/hashbrown-0.14.0/src/external_trait_impls/rayon/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/hashbrown-0.14.0/src/external_trait_impls/rayon/raw.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/hashbrown-0.14.0/src/external_trait_impls/rayon/set.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/hashbrown-0.14.0/src/external_trait_impls/rkyv/hash_map.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/hashbrown-0.14.0/src/external_trait_impls/rkyv/hash_set.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/hashbrown-0.14.0/src/external_trait_impls/rkyv/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/hashbrown-0.14.0/src/external_trait_impls/serde.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/hashbrown-0.14.0/src/lib.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/hashbrown-0.14.0/src/macros.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/hashbrown-0.14.0/src/map.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/hashbrown-0.14.0/src/raw/alloc.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/hashbrown-0.14.0/src/raw/bitmask.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/hashbrown-0.14.0/src/raw/generic.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/hashbrown-0.14.0/src/raw/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/hashbrown-0.14.0/src/raw/neon.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/hashbrown-0.14.0/src/raw/sse2.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/hashbrown-0.14.0/src/rustc_entry.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/hashbrown-0.14.0/src/scopeguard.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/hashbrown-0.14.0/src/set.rs", + ] + inputs = [] no_std = true # Unit tests skipped. Generate with --with-tests to include them. build_native_rust_unit_tests = false - sources = [ "//build/rust/std/fake_root/../../../../third_party/rust-toolchain/lib/rustlib/src/rust/vendor/hashbrown-0.12.3/src/lib.rs" ] edition = "2021" - cargo_pkg_version = "0.12.3" + cargo_pkg_version = "0.14.0" cargo_pkg_authors = "Amanieu d'Antras " cargo_pkg_name = "hashbrown" cargo_pkg_description = "A Rust port of Google's SwissTable hash map" @@ -272,6 +1004,8 @@ cargo_crate("hashbrown") { ":compiler_builtins", ":rustc_std_workspace_alloc", ":rustc_std_workspace_core", + "//build/rust/std:profiler_builtins_group", + "//build/rust/std:std_build_deps", ] aliased_deps = { alloc = ":rustc_std_workspace_alloc__rlib" @@ -285,44 +1019,330 @@ cargo_crate("hashbrown") { "rustc-dep-of-std", "rustc-internal-api", ] + rustenv = [ + "CFG_DISABLE_UNSTABLE_FEATURES=0", + "STD_ENV_ARCH=$rust_target_arch", + ] + rustflags = [ + "--cfg=backtrace_in_libstd", + "-Zforce-unstable-if-unmarked", + ] + output_dir = + "$root_out_dir/local_rustc_sysroot/lib/rustlib/$rust_abi_target/lib/" } cargo_crate("libc") { crate_type = "rlib" - crate_root = "//build/rust/std/fake_root/../../../../third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.139/src/lib.rs" + crate_root = "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/lib.rs" + sources = [ + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/fixed_width_ints.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/fuchsia/aarch64.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/fuchsia/align.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/fuchsia/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/fuchsia/no_align.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/fuchsia/riscv64.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/fuchsia/x86_64.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/hermit/aarch64.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/hermit/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/hermit/x86_64.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/lib.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/macros.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/psp.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/sgx.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/solid/aarch64.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/solid/arm.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/solid/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/switch.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/aix/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/aix/powerpc64.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/align.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/bsd/apple/b32/align.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/bsd/apple/b32/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/bsd/apple/b64/aarch64/align.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/bsd/apple/b64/aarch64/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/bsd/apple/b64/align.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/bsd/apple/b64/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/bsd/apple/b64/x86_64/align.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/bsd/apple/b64/x86_64/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/bsd/apple/long_array.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/bsd/apple/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/bsd/freebsdlike/dragonfly/errno.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/bsd/freebsdlike/dragonfly/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/bsd/freebsdlike/freebsd/aarch64.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/bsd/freebsdlike/freebsd/arm.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/bsd/freebsdlike/freebsd/freebsd11/b64.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/bsd/freebsdlike/freebsd/freebsd11/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/bsd/freebsdlike/freebsd/freebsd12/b64.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/bsd/freebsdlike/freebsd/freebsd12/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/bsd/freebsdlike/freebsd/freebsd12/x86_64.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/bsd/freebsdlike/freebsd/freebsd13/b64.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/bsd/freebsdlike/freebsd/freebsd13/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/bsd/freebsdlike/freebsd/freebsd13/x86_64.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/bsd/freebsdlike/freebsd/freebsd14/b64.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/bsd/freebsdlike/freebsd/freebsd14/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/bsd/freebsdlike/freebsd/freebsd14/x86_64.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/bsd/freebsdlike/freebsd/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/bsd/freebsdlike/freebsd/powerpc.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/bsd/freebsdlike/freebsd/powerpc64.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/bsd/freebsdlike/freebsd/riscv64.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/bsd/freebsdlike/freebsd/x86.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/bsd/freebsdlike/freebsd/x86_64/align.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/bsd/freebsdlike/freebsd/x86_64/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/bsd/freebsdlike/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/bsd/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/bsd/netbsdlike/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/bsd/netbsdlike/netbsd/aarch64.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/bsd/netbsdlike/netbsd/arm.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/bsd/netbsdlike/netbsd/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/bsd/netbsdlike/netbsd/powerpc.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/bsd/netbsdlike/netbsd/sparc64.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/bsd/netbsdlike/netbsd/x86.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/bsd/netbsdlike/netbsd/x86_64.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/bsd/netbsdlike/openbsd/aarch64.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/bsd/netbsdlike/openbsd/arm.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/bsd/netbsdlike/openbsd/mips64.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/bsd/netbsdlike/openbsd/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/bsd/netbsdlike/openbsd/powerpc.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/bsd/netbsdlike/openbsd/powerpc64.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/bsd/netbsdlike/openbsd/riscv64.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/bsd/netbsdlike/openbsd/sparc64.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/bsd/netbsdlike/openbsd/x86.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/bsd/netbsdlike/openbsd/x86_64.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/haiku/b32.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/haiku/b64.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/haiku/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/haiku/native.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/haiku/x86_64.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/hermit/aarch64.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/hermit/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/hermit/x86_64.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/linux_like/android/b32/arm.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/linux_like/android/b32/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/linux_like/android/b32/x86/align.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/linux_like/android/b32/x86/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/linux_like/android/b64/aarch64/align.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/linux_like/android/b64/aarch64/int128.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/linux_like/android/b64/aarch64/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/linux_like/android/b64/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/linux_like/android/b64/riscv64/align.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/linux_like/android/b64/riscv64/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/linux_like/android/b64/x86_64/align.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/linux_like/android/b64/x86_64/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/linux_like/android/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/linux_like/emscripten/align.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/linux_like/emscripten/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/linux_like/emscripten/no_align.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/linux_like/linux/align.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/linux_like/linux/arch/generic/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/linux_like/linux/arch/mips/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/linux_like/linux/arch/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/linux_like/linux/arch/powerpc/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/linux_like/linux/arch/sparc/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/linux_like/linux/gnu/align.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/linux_like/linux/gnu/b32/arm/align.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/linux_like/linux/gnu/b32/arm/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/linux_like/linux/gnu/b32/m68k/align.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/linux_like/linux/gnu/b32/m68k/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/linux_like/linux/gnu/b32/mips/align.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/linux_like/linux/gnu/b32/mips/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/linux_like/linux/gnu/b32/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/linux_like/linux/gnu/b32/powerpc.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/linux_like/linux/gnu/b32/riscv32/align.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/linux_like/linux/gnu/b32/riscv32/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/linux_like/linux/gnu/b32/sparc/align.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/linux_like/linux/gnu/b32/sparc/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/linux_like/linux/gnu/b32/x86/align.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/linux_like/linux/gnu/b32/x86/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/linux_like/linux/gnu/b64/aarch64/align.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/linux_like/linux/gnu/b64/aarch64/ilp32.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/linux_like/linux/gnu/b64/aarch64/int128.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/linux_like/linux/gnu/b64/aarch64/lp64.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/linux_like/linux/gnu/b64/aarch64/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/linux_like/linux/gnu/b64/loongarch64/align.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/linux_like/linux/gnu/b64/loongarch64/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/linux_like/linux/gnu/b64/mips64/align.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/linux_like/linux/gnu/b64/mips64/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/linux_like/linux/gnu/b64/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/linux_like/linux/gnu/b64/powerpc64/align.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/linux_like/linux/gnu/b64/powerpc64/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/linux_like/linux/gnu/b64/riscv64/align.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/linux_like/linux/gnu/b64/riscv64/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/linux_like/linux/gnu/b64/s390x.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/linux_like/linux/gnu/b64/sparc64/align.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/linux_like/linux/gnu/b64/sparc64/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/linux_like/linux/gnu/b64/x86_64/align.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/linux_like/linux/gnu/b64/x86_64/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/linux_like/linux/gnu/b64/x86_64/not_x32.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/linux_like/linux/gnu/b64/x86_64/x32.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/linux_like/linux/gnu/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/linux_like/linux/gnu/no_align.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/linux_like/linux/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/linux_like/linux/musl/b32/arm/align.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/linux_like/linux/musl/b32/arm/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/linux_like/linux/musl/b32/hexagon.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/linux_like/linux/musl/b32/mips/align.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/linux_like/linux/musl/b32/mips/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/linux_like/linux/musl/b32/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/linux_like/linux/musl/b32/powerpc.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/linux_like/linux/musl/b32/riscv32/align.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/linux_like/linux/musl/b32/riscv32/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/linux_like/linux/musl/b32/x86/align.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/linux_like/linux/musl/b32/x86/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/linux_like/linux/musl/b64/aarch64/align.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/linux_like/linux/musl/b64/aarch64/int128.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/linux_like/linux/musl/b64/aarch64/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/linux_like/linux/musl/b64/mips64.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/linux_like/linux/musl/b64/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/linux_like/linux/musl/b64/powerpc64.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/linux_like/linux/musl/b64/riscv64/align.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/linux_like/linux/musl/b64/riscv64/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/linux_like/linux/musl/b64/s390x.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/linux_like/linux/musl/b64/x86_64/align.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/linux_like/linux/musl/b64/x86_64/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/linux_like/linux/musl/lfs64.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/linux_like/linux/musl/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/linux_like/linux/no_align.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/linux_like/linux/non_exhaustive.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/linux_like/linux/uclibc/align.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/linux_like/linux/uclibc/arm/align.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/linux_like/linux/uclibc/arm/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/linux_like/linux/uclibc/arm/no_align.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/linux_like/linux/uclibc/mips/mips32/align.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/linux_like/linux/uclibc/mips/mips32/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/linux_like/linux/uclibc/mips/mips32/no_align.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/linux_like/linux/uclibc/mips/mips64/align.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/linux_like/linux/uclibc/mips/mips64/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/linux_like/linux/uclibc/mips/mips64/no_align.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/linux_like/linux/uclibc/mips/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/linux_like/linux/uclibc/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/linux_like/linux/uclibc/no_align.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/linux_like/linux/uclibc/x86_64/l4re.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/linux_like/linux/uclibc/x86_64/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/linux_like/linux/uclibc/x86_64/other.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/linux_like/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/newlib/aarch64/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/newlib/align.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/newlib/arm/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/newlib/espidf/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/newlib/generic.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/newlib/horizon/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/newlib/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/newlib/no_align.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/newlib/powerpc/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/newlib/vita/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/no_align.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/nto/aarch64.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/nto/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/nto/neutrino.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/nto/x86_64.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/redox/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/solarish/compat.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/solarish/illumos.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/solarish/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/solarish/solaris.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/solarish/x86.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/solarish/x86_64.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/unix/solarish/x86_common.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/vxworks/aarch64.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/vxworks/arm.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/vxworks/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/vxworks/powerpc.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/vxworks/powerpc64.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/vxworks/x86.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/vxworks/x86_64.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/wasi.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/windows/gnu/align.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/windows/gnu/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/windows/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/windows/msvc/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/src/xous.rs", + ] + inputs = [] no_std = true # Unit tests skipped. Generate with --with-tests to include them. build_native_rust_unit_tests = false - sources = [ "//build/rust/std/fake_root/../../../../third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.139/src/lib.rs" ] edition = "2015" - cargo_pkg_version = "0.2.139" + cargo_pkg_version = "0.2.146" cargo_pkg_authors = "The Rust Project Developers" cargo_pkg_name = "libc" cargo_pkg_description = "Raw FFI bindings to platform libraries like libc." - library_configs -= [ "//build/config/compiler:chromium_code" ] + library_configs -= [ + "//build/config/compiler:chromium_code", + "//build/config/coverage:default_coverage", + ] library_configs += [ "//build/config/compiler:no_chromium_code" ] executable_configs -= [ "//build/config/compiler:chromium_code" ] executable_configs += [ "//build/config/compiler:no_chromium_code" ] - deps = [ ":rustc_std_workspace_core" ] + deps = [ + ":rustc_std_workspace_core", + "//build/rust/std:std_build_deps", + ] features = [ "align", "rustc-dep-of-std", "rustc-std-workspace-core", ] + build_root = "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/build.rs" + build_sources = [ "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.146/build.rs" ] + rustenv = [ + "CFG_DISABLE_UNSTABLE_FEATURES=0", + "STD_ENV_ARCH=$rust_target_arch", + ] rustflags = [ - "--cfg=libc_align", - "--cfg=libc_priv_mod_use", - "--cfg=libc_core_cvoid", + "--cfg=backtrace_in_libstd", + "-Zforce-unstable-if-unmarked", + "-Zlink-directives=false", ] + output_dir = + "$root_out_dir/local_rustc_sysroot/lib/rustlib/$rust_abi_target/lib/" } cargo_crate("memchr") { crate_type = "rlib" - crate_root = "//build/rust/std/fake_root/../../../../third_party/rust-toolchain/lib/rustlib/src/rust/vendor/memchr-2.5.0/src/lib.rs" + crate_root = "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/memchr-2.5.0/src/lib.rs" + sources = [ + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/memchr-2.5.0/src/cow.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/memchr-2.5.0/src/lib.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/memchr-2.5.0/src/memchr/c.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/memchr-2.5.0/src/memchr/fallback.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/memchr-2.5.0/src/memchr/iter.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/memchr-2.5.0/src/memchr/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/memchr-2.5.0/src/memchr/naive.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/memchr-2.5.0/src/memchr/x86/avx.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/memchr-2.5.0/src/memchr/x86/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/memchr-2.5.0/src/memchr/x86/sse2.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/memchr-2.5.0/src/memchr/x86/sse42.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/memchr-2.5.0/src/memmem/byte_frequencies.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/memchr-2.5.0/src/memmem/genericsimd.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/memchr-2.5.0/src/memmem/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/memchr-2.5.0/src/memmem/prefilter/fallback.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/memchr-2.5.0/src/memmem/prefilter/genericsimd.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/memchr-2.5.0/src/memmem/prefilter/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/memchr-2.5.0/src/memmem/prefilter/wasm.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/memchr-2.5.0/src/memmem/prefilter/x86/avx.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/memchr-2.5.0/src/memmem/prefilter/x86/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/memchr-2.5.0/src/memmem/prefilter/x86/sse.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/memchr-2.5.0/src/memmem/rabinkarp.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/memchr-2.5.0/src/memmem/rarebytes.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/memchr-2.5.0/src/memmem/twoway.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/memchr-2.5.0/src/memmem/util.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/memchr-2.5.0/src/memmem/vector.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/memchr-2.5.0/src/memmem/wasm.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/memchr-2.5.0/src/memmem/x86/avx.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/memchr-2.5.0/src/memmem/x86/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/memchr-2.5.0/src/memmem/x86/sse.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/memchr-2.5.0/src/tests/memchr/iter.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/memchr-2.5.0/src/tests/memchr/memchr.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/memchr-2.5.0/src/tests/memchr/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/memchr-2.5.0/src/tests/memchr/simple.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/memchr-2.5.0/src/tests/memchr/testdata.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/memchr-2.5.0/src/tests/mod.rs", + ] + inputs = [] no_std = true # Unit tests skipped. Generate with --with-tests to include them. build_native_rust_unit_tests = false - sources = [ "//build/rust/std/fake_root/../../../../third_party/rust-toolchain/lib/rustlib/src/rust/vendor/memchr-2.5.0/src/lib.rs" ] edition = "2018" cargo_pkg_version = "2.5.0" cargo_pkg_authors = "Andrew Gallant , bluss" @@ -335,6 +1355,8 @@ cargo_crate("memchr") { deps = [ ":compiler_builtins", ":rustc_std_workspace_core", + "//build/rust/std:profiler_builtins_group", + "//build/rust/std:std_build_deps", ] aliased_deps = { core = ":rustc_std_workspace_core__rlib" @@ -344,17 +1366,41 @@ cargo_crate("memchr") { "core", "rustc-dep-of-std", ] + build_root = "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/memchr-2.5.0/build.rs" + build_sources = [ "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/memchr-2.5.0/build.rs" ] + rustenv = [ + "CFG_DISABLE_UNSTABLE_FEATURES=0", + "STD_ENV_ARCH=$rust_target_arch", + ] + rustflags = [ + "--cfg=backtrace_in_libstd", + "-Zforce-unstable-if-unmarked", + ] + output_dir = + "$root_out_dir/local_rustc_sysroot/lib/rustlib/$rust_abi_target/lib/" } cargo_crate("miniz_oxide") { crate_type = "rlib" - crate_root = "//build/rust/std/fake_root/../../../../third_party/rust-toolchain/lib/rustlib/src/rust/vendor/miniz_oxide-0.5.3/src/lib.rs" + crate_root = "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/miniz_oxide-0.6.2/src/lib.rs" + sources = [ + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/miniz_oxide-0.6.2/src/deflate/buffer.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/miniz_oxide-0.6.2/src/deflate/core.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/miniz_oxide-0.6.2/src/deflate/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/miniz_oxide-0.6.2/src/deflate/stream.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/miniz_oxide-0.6.2/src/inflate/core.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/miniz_oxide-0.6.2/src/inflate/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/miniz_oxide-0.6.2/src/inflate/output_buffer.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/miniz_oxide-0.6.2/src/inflate/stream.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/miniz_oxide-0.6.2/src/lib.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/miniz_oxide-0.6.2/src/shared.rs", + ] + inputs = [] no_std = true # Unit tests skipped. Generate with --with-tests to include them. build_native_rust_unit_tests = false - sources = [ "//build/rust/std/fake_root/../../../../third_party/rust-toolchain/lib/rustlib/src/rust/vendor/miniz_oxide-0.5.3/src/lib.rs" ] edition = "2018" - cargo_pkg_version = "0.5.3" + cargo_pkg_version = "0.6.2" cargo_pkg_authors = "Frommi , oyvindln " cargo_pkg_name = "miniz_oxide" cargo_pkg_description = "DEFLATE compression and decompression library rewritten in Rust based on miniz" @@ -367,6 +1413,8 @@ cargo_crate("miniz_oxide") { ":compiler_builtins", ":rustc_std_workspace_alloc", ":rustc_std_workspace_core", + "//build/rust/std:profiler_builtins_group", + "//build/rust/std:std_build_deps", ] aliased_deps = { alloc = ":rustc_std_workspace_alloc__rlib" @@ -378,17 +1426,98 @@ cargo_crate("miniz_oxide") { "core", "rustc-dep-of-std", ] + rustenv = [ + "CFG_DISABLE_UNSTABLE_FEATURES=0", + "STD_ENV_ARCH=$rust_target_arch", + ] + rustflags = [ + "--cfg=backtrace_in_libstd", + "-Zforce-unstable-if-unmarked", + ] + output_dir = + "$root_out_dir/local_rustc_sysroot/lib/rustlib/$rust_abi_target/lib/" } cargo_crate("object") { crate_type = "rlib" - crate_root = "//build/rust/std/fake_root/../../../../third_party/rust-toolchain/lib/rustlib/src/rust/vendor/object-0.29.0/src/lib.rs" + crate_root = "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/object-0.30.1/src/lib.rs" + sources = [ + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/object-0.30.1/src/archive.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/object-0.30.1/src/common.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/object-0.30.1/src/elf.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/object-0.30.1/src/endian.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/object-0.30.1/src/lib.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/object-0.30.1/src/macho.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/object-0.30.1/src/pe.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/object-0.30.1/src/pod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/object-0.30.1/src/read/any.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/object-0.30.1/src/read/archive.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/object-0.30.1/src/read/coff/comdat.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/object-0.30.1/src/read/coff/file.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/object-0.30.1/src/read/coff/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/object-0.30.1/src/read/coff/relocation.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/object-0.30.1/src/read/coff/section.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/object-0.30.1/src/read/coff/symbol.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/object-0.30.1/src/read/elf/comdat.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/object-0.30.1/src/read/elf/compression.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/object-0.30.1/src/read/elf/dynamic.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/object-0.30.1/src/read/elf/file.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/object-0.30.1/src/read/elf/hash.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/object-0.30.1/src/read/elf/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/object-0.30.1/src/read/elf/note.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/object-0.30.1/src/read/elf/relocation.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/object-0.30.1/src/read/elf/section.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/object-0.30.1/src/read/elf/segment.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/object-0.30.1/src/read/elf/symbol.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/object-0.30.1/src/read/elf/version.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/object-0.30.1/src/read/macho/dyld_cache.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/object-0.30.1/src/read/macho/fat.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/object-0.30.1/src/read/macho/file.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/object-0.30.1/src/read/macho/load_command.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/object-0.30.1/src/read/macho/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/object-0.30.1/src/read/macho/relocation.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/object-0.30.1/src/read/macho/section.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/object-0.30.1/src/read/macho/segment.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/object-0.30.1/src/read/macho/symbol.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/object-0.30.1/src/read/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/object-0.30.1/src/read/pe/data_directory.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/object-0.30.1/src/read/pe/export.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/object-0.30.1/src/read/pe/file.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/object-0.30.1/src/read/pe/import.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/object-0.30.1/src/read/pe/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/object-0.30.1/src/read/pe/relocation.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/object-0.30.1/src/read/pe/resource.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/object-0.30.1/src/read/pe/rich.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/object-0.30.1/src/read/pe/section.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/object-0.30.1/src/read/read_cache.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/object-0.30.1/src/read/read_ref.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/object-0.30.1/src/read/traits.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/object-0.30.1/src/read/util.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/object-0.30.1/src/read/wasm.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/object-0.30.1/src/read/xcoff/comdat.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/object-0.30.1/src/read/xcoff/file.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/object-0.30.1/src/read/xcoff/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/object-0.30.1/src/read/xcoff/relocation.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/object-0.30.1/src/read/xcoff/section.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/object-0.30.1/src/read/xcoff/segment.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/object-0.30.1/src/read/xcoff/symbol.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/object-0.30.1/src/write/coff.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/object-0.30.1/src/write/elf/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/object-0.30.1/src/write/elf/object.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/object-0.30.1/src/write/elf/writer.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/object-0.30.1/src/write/macho.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/object-0.30.1/src/write/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/object-0.30.1/src/write/pe.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/object-0.30.1/src/write/string.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/object-0.30.1/src/write/util.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/object-0.30.1/src/xcoff.rs", + ] + inputs = [] no_std = true # Unit tests skipped. Generate with --with-tests to include them. build_native_rust_unit_tests = false - sources = [ "//build/rust/std/fake_root/../../../../third_party/rust-toolchain/lib/rustlib/src/rust/vendor/object-0.29.0/src/lib.rs" ] edition = "2018" - cargo_pkg_version = "0.29.0" + cargo_pkg_version = "0.30.1" cargo_pkg_name = "object" cargo_pkg_description = "A unified interface for reading and writing object file formats." @@ -401,6 +1530,8 @@ cargo_crate("object") { ":memchr", ":rustc_std_workspace_alloc", ":rustc_std_workspace_core", + "//build/rust/std:profiler_builtins_group", + "//build/rust/std:std_build_deps", ] aliased_deps = { alloc = ":rustc_std_workspace_alloc__rlib" @@ -419,15 +1550,29 @@ cargo_crate("object") { "rustc-dep-of-std", "unaligned", ] + rustenv = [ + "CFG_DISABLE_UNSTABLE_FEATURES=0", + "STD_ENV_ARCH=$rust_target_arch", + ] + rustflags = [ + "--cfg=backtrace_in_libstd", + "-Zforce-unstable-if-unmarked", + ] + output_dir = + "$root_out_dir/local_rustc_sysroot/lib/rustlib/$rust_abi_target/lib/" } cargo_crate("panic_abort") { crate_type = "rlib" crate_root = "//third_party/rust-toolchain/lib/rustlib/src/rust/library/panic_abort/src/lib.rs" + sources = [ + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/panic_abort/src/android.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/panic_abort/src/lib.rs", + ] + inputs = [] no_std = true # Unit tests skipped. Generate with --with-tests to include them. build_native_rust_unit_tests = false - sources = [ "//third_party/rust-toolchain/lib/rustlib/src/rust/library/panic_abort/src/lib.rs" ] edition = "2021" cargo_pkg_version = "0.0.0" cargo_pkg_name = "panic_abort" @@ -442,16 +1587,37 @@ cargo_crate("panic_abort") { ":compiler_builtins", ":core", ":libc", + "//build/rust/std:profiler_builtins_group", + "//build/rust/std:std_build_deps", + ] + rustenv = [ + "CFG_DISABLE_UNSTABLE_FEATURES=0", + "STD_ENV_ARCH=$rust_target_arch", + ] + rustflags = [ + "--cfg=backtrace_in_libstd", + "-Zforce-unstable-if-unmarked", ] + output_dir = + "$root_out_dir/local_rustc_sysroot/lib/rustlib/$rust_abi_target/lib/" } cargo_crate("panic_unwind") { crate_type = "rlib" crate_root = "//third_party/rust-toolchain/lib/rustlib/src/rust/library/panic_unwind/src/lib.rs" + sources = [ + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/panic_unwind/src/dummy.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/panic_unwind/src/emcc.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/panic_unwind/src/gcc.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/panic_unwind/src/hermit.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/panic_unwind/src/lib.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/panic_unwind/src/miri.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/panic_unwind/src/seh.rs", + ] + inputs = [] no_std = true # Unit tests skipped. Generate with --with-tests to include them. build_native_rust_unit_tests = false - sources = [ "//third_party/rust-toolchain/lib/rustlib/src/rust/library/panic_unwind/src/lib.rs" ] edition = "2021" cargo_pkg_version = "0.0.0" cargo_pkg_name = "panic_unwind" @@ -467,16 +1633,45 @@ cargo_crate("panic_unwind") { ":core", ":libc", ":unwind", + "//build/rust/std:profiler_builtins_group", + "//build/rust/std:std_build_deps", ] + rustenv = [ + "CFG_DISABLE_UNSTABLE_FEATURES=0", + "STD_ENV_ARCH=$rust_target_arch", + ] + rustflags = [ + "--cfg=backtrace_in_libstd", + "-Zforce-unstable-if-unmarked", + ] + output_dir = + "$root_out_dir/local_rustc_sysroot/lib/rustlib/$rust_abi_target/lib/" } cargo_crate("proc_macro") { crate_type = "rlib" crate_root = "//third_party/rust-toolchain/lib/rustlib/src/rust/library/proc_macro/src/lib.rs" + sources = [ + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/proc_macro/src/bridge/arena.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/proc_macro/src/bridge/buffer.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/proc_macro/src/bridge/client.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/proc_macro/src/bridge/closure.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/proc_macro/src/bridge/fxhash.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/proc_macro/src/bridge/handle.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/proc_macro/src/bridge/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/proc_macro/src/bridge/rpc.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/proc_macro/src/bridge/scoped_cell.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/proc_macro/src/bridge/selfless_reify.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/proc_macro/src/bridge/server.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/proc_macro/src/bridge/symbol.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/proc_macro/src/diagnostic.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/proc_macro/src/lib.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/proc_macro/src/quote.rs", + ] + inputs = [] no_std = true # Unit tests skipped. Generate with --with-tests to include them. build_native_rust_unit_tests = false - sources = [ "//third_party/rust-toolchain/lib/rustlib/src/rust/library/proc_macro/src/lib.rs" ] edition = "2021" cargo_pkg_version = "0.0.0" cargo_pkg_name = "proc_macro" @@ -487,37 +1682,68 @@ cargo_crate("proc_macro") { deps = [ ":core", ":std", + "//build/rust/std:profiler_builtins_group", + "//build/rust/std:std_build_deps", + ] + rustenv = [ + "CFG_DISABLE_UNSTABLE_FEATURES=0", + "STD_ENV_ARCH=$rust_target_arch", ] + rustflags = [ + "--cfg=backtrace_in_libstd", + "-Zforce-unstable-if-unmarked", + ] + output_dir = + "$root_out_dir/local_rustc_sysroot/lib/rustlib/$rust_abi_target/lib/" } cargo_crate("profiler_builtins") { crate_type = "rlib" crate_root = "//third_party/rust-toolchain/lib/rustlib/src/rust/library/profiler_builtins/src/lib.rs" + sources = [ "//third_party/rust-toolchain/lib/rustlib/src/rust/library/profiler_builtins/src/lib.rs" ] + inputs = [] no_std = true # Unit tests skipped. Generate with --with-tests to include them. build_native_rust_unit_tests = false - sources = [ "//third_party/rust-toolchain/lib/rustlib/src/rust/library/profiler_builtins/src/lib.rs" ] edition = "2021" cargo_pkg_version = "0.0.0" cargo_pkg_name = "profiler_builtins" - library_configs -= [ "//build/config/compiler:chromium_code" ] + library_configs -= [ + "//build/config/compiler:chromium_code", + "//build/config/coverage:default_coverage", + ] library_configs += [ "//build/config/compiler:no_chromium_code" ] executable_configs -= [ "//build/config/compiler:chromium_code" ] executable_configs += [ "//build/config/compiler:no_chromium_code" ] deps = [ ":compiler_builtins", ":core", + "//build/rust/std:std_build_deps", ] - build_deps = [ ":cc" ] + rustenv = [ + "CFG_DISABLE_UNSTABLE_FEATURES=0", + "STD_ENV_ARCH=$rust_target_arch", + ] + rustflags = [ + "--cfg=backtrace_in_libstd", + "-Zforce-unstable-if-unmarked", + ] + output_dir = + "$root_out_dir/local_rustc_sysroot/lib/rustlib/$rust_abi_target/lib/" } cargo_crate("rustc_demangle") { crate_type = "rlib" - crate_root = "//build/rust/std/fake_root/../../../../third_party/rust-toolchain/lib/rustlib/src/rust/vendor/rustc-demangle-0.1.21/src/lib.rs" + crate_root = "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/rustc-demangle-0.1.21/src/lib.rs" + sources = [ + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/rustc-demangle-0.1.21/src/legacy.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/rustc-demangle-0.1.21/src/lib.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/rustc-demangle-0.1.21/src/v0.rs", + ] + inputs = [] no_std = true # Unit tests skipped. Generate with --with-tests to include them. build_native_rust_unit_tests = false - sources = [ "//build/rust/std/fake_root/../../../../third_party/rust-toolchain/lib/rustlib/src/rust/vendor/rustc-demangle-0.1.21/src/lib.rs" ] edition = "2015" cargo_pkg_version = "0.1.21" cargo_pkg_authors = "Alex Crichton " @@ -530,6 +1756,8 @@ cargo_crate("rustc_demangle") { deps = [ ":compiler_builtins", ":rustc_std_workspace_core", + "//build/rust/std:profiler_builtins_group", + "//build/rust/std:std_build_deps", ] aliased_deps = { core = ":rustc_std_workspace_core__rlib" @@ -539,51 +1767,96 @@ cargo_crate("rustc_demangle") { "core", "rustc-dep-of-std", ] + rustenv = [ + "CFG_DISABLE_UNSTABLE_FEATURES=0", + "STD_ENV_ARCH=$rust_target_arch", + ] + rustflags = [ + "--cfg=backtrace_in_libstd", + "-Zforce-unstable-if-unmarked", + ] + output_dir = + "$root_out_dir/local_rustc_sysroot/lib/rustlib/$rust_abi_target/lib/" } cargo_crate("rustc_std_workspace_alloc") { crate_type = "rlib" crate_root = "//third_party/rust-toolchain/lib/rustlib/src/rust/library/rustc-std-workspace-alloc/lib.rs" + sources = [ "//third_party/rust-toolchain/lib/rustlib/src/rust/library/rustc-std-workspace-alloc/lib.rs" ] + inputs = [] no_std = true # Unit tests skipped. Generate with --with-tests to include them. build_native_rust_unit_tests = false - sources = [ "//third_party/rust-toolchain/lib/rustlib/src/rust/library/rustc-std-workspace-alloc/lib.rs" ] edition = "2021" cargo_pkg_version = "1.99.0" cargo_pkg_name = "rustc-std-workspace-alloc" cargo_pkg_description = "Hack for the compiler's own build system" - library_configs -= [ "//build/config/compiler:chromium_code" ] + library_configs -= [ + "//build/config/compiler:chromium_code", + "//build/config/coverage:default_coverage", + ] library_configs += [ "//build/config/compiler:no_chromium_code" ] executable_configs -= [ "//build/config/compiler:chromium_code" ] executable_configs += [ "//build/config/compiler:no_chromium_code" ] - deps = [ ":alloc" ] + deps = [ + ":alloc", + "//build/rust/std:std_build_deps", + ] + rustenv = [ + "CFG_DISABLE_UNSTABLE_FEATURES=0", + "STD_ENV_ARCH=$rust_target_arch", + ] + rustflags = [ + "--cfg=backtrace_in_libstd", + "-Zforce-unstable-if-unmarked", + ] + output_dir = + "$root_out_dir/local_rustc_sysroot/lib/rustlib/$rust_abi_target/lib/" } cargo_crate("rustc_std_workspace_core") { crate_type = "rlib" crate_root = "//third_party/rust-toolchain/lib/rustlib/src/rust/library/rustc-std-workspace-core/lib.rs" + sources = [ "//third_party/rust-toolchain/lib/rustlib/src/rust/library/rustc-std-workspace-core/lib.rs" ] + inputs = [ "//third_party/rust-toolchain/lib/rustlib/src/rust/library/rustc-std-workspace-core/README.md" ] no_std = true # Unit tests skipped. Generate with --with-tests to include them. build_native_rust_unit_tests = false - sources = [ "//third_party/rust-toolchain/lib/rustlib/src/rust/library/rustc-std-workspace-core/lib.rs" ] edition = "2021" cargo_pkg_version = "1.99.0" cargo_pkg_name = "rustc-std-workspace-core" cargo_pkg_description = "Hack for the compiler's own build system" - library_configs -= [ "//build/config/compiler:chromium_code" ] + library_configs -= [ + "//build/config/compiler:chromium_code", + "//build/config/coverage:default_coverage", + ] library_configs += [ "//build/config/compiler:no_chromium_code" ] executable_configs -= [ "//build/config/compiler:chromium_code" ] executable_configs += [ "//build/config/compiler:no_chromium_code" ] - deps = [ ":core" ] + deps = [ + ":core", + "//build/rust/std:std_build_deps", + ] + rustenv = [ + "CFG_DISABLE_UNSTABLE_FEATURES=0", + "STD_ENV_ARCH=$rust_target_arch", + ] + rustflags = [ + "--cfg=backtrace_in_libstd", + "-Zforce-unstable-if-unmarked", + ] + output_dir = + "$root_out_dir/local_rustc_sysroot/lib/rustlib/$rust_abi_target/lib/" } cargo_crate("rustc_std_workspace_std") { crate_type = "rlib" crate_root = "//third_party/rust-toolchain/lib/rustlib/src/rust/library/rustc-std-workspace-std/lib.rs" + sources = [ "//third_party/rust-toolchain/lib/rustlib/src/rust/library/rustc-std-workspace-std/lib.rs" ] + inputs = [ "//third_party/rust-toolchain/lib/rustlib/src/rust/library/rustc-std-workspace-std/README.md" ] no_std = true # Unit tests skipped. Generate with --with-tests to include them. build_native_rust_unit_tests = false - sources = [ "//third_party/rust-toolchain/lib/rustlib/src/rust/library/rustc-std-workspace-std/lib.rs" ] edition = "2021" cargo_pkg_version = "1.99.0" cargo_pkg_name = "rustc-std-workspace-std" @@ -592,25 +1865,591 @@ cargo_crate("rustc_std_workspace_std") { library_configs += [ "//build/config/compiler:no_chromium_code" ] executable_configs -= [ "//build/config/compiler:chromium_code" ] executable_configs += [ "//build/config/compiler:no_chromium_code" ] - deps = [ ":std" ] + deps = [ + ":std", + "//build/rust/std:profiler_builtins_group", + "//build/rust/std:std_build_deps", + ] + rustenv = [ + "CFG_DISABLE_UNSTABLE_FEATURES=0", + "STD_ENV_ARCH=$rust_target_arch", + ] + rustflags = [ + "--cfg=backtrace_in_libstd", + "-Zforce-unstable-if-unmarked", + ] + output_dir = + "$root_out_dir/local_rustc_sysroot/lib/rustlib/$rust_abi_target/lib/" } cargo_crate("std") { crate_type = "rlib" crate_root = "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/lib.rs" + sources = [ + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/alloc.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/ascii.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/backtrace.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/backtrace/tests.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/collections/hash/map.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/collections/hash/map/tests.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/collections/hash/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/collections/hash/set.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/collections/hash/set/tests.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/collections/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/env.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/env/tests.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/error.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/error/tests.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/f32.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/f32/tests.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/f64.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/f64/tests.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/ffi/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/ffi/os_str.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/ffi/os_str/tests.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/fs/tests.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/io/buffered/bufreader.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/io/buffered/bufreader/buffer.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/io/buffered/bufwriter.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/io/buffered/linewriter.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/io/buffered/linewritershim.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/io/buffered/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/io/buffered/tests.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/io/copy.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/io/copy/tests.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/io/cursor.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/io/cursor/tests.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/io/error.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/io/error/repr_bitpacked.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/io/error/repr_unpacked.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/io/error/tests.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/io/impls.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/io/impls/tests.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/io/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/io/prelude.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/io/readbuf.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/io/readbuf/tests.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/io/stdio.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/io/stdio/tests.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/io/tests.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/io/util.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/io/util/tests.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/keyword_docs.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/lib.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/macros.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/net/ip_addr.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/net/ip_addr/tests.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/net/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/net/socket_addr.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/net/socket_addr/tests.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/net/tcp.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/net/tcp/tests.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/net/test.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/net/udp.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/net/udp/tests.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/num.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/num/benches.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/num/tests.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/android/fs.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/android/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/android/net.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/android/raw.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/dragonfly/fs.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/dragonfly/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/dragonfly/raw.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/emscripten/fs.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/emscripten/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/emscripten/raw.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/espidf/fs.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/espidf/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/espidf/raw.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/fd/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/fd/net.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/fd/owned.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/fd/raw.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/fd/tests.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/fortanix_sgx/arch.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/fortanix_sgx/ffi.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/fortanix_sgx/io.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/fortanix_sgx/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/freebsd/fs.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/freebsd/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/freebsd/raw.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/fuchsia/fs.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/fuchsia/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/fuchsia/raw.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/haiku/fs.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/haiku/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/haiku/raw.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/hermit/ffi.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/hermit/io/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/hermit/io/net.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/hermit/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/horizon/fs.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/horizon/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/horizon/raw.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/illumos/fs.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/illumos/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/illumos/raw.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/ios/fs.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/ios/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/ios/raw.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/l4re/fs.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/l4re/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/l4re/raw.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/linux/fs.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/linux/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/linux/net.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/linux/process.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/linux/raw.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/macos/fs.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/macos/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/macos/raw.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/net/linux_ext/addr.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/net/linux_ext/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/net/linux_ext/tcp.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/net/linux_ext/tests.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/net/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/netbsd/fs.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/netbsd/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/netbsd/raw.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/nto/fs.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/nto/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/nto/raw.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/openbsd/fs.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/openbsd/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/openbsd/raw.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/raw/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/raw/tests.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/redox/fs.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/redox/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/redox/raw.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/solaris/fs.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/solaris/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/solaris/raw.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/solid/ffi.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/solid/io.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/solid/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/unix/ffi/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/unix/ffi/os_str.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/unix/fs.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/unix/fs/tests.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/unix/io/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/unix/io/tests.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/unix/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/unix/net/addr.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/unix/net/ancillary.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/unix/net/datagram.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/unix/net/listener.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/unix/net/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/unix/net/stream.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/unix/net/tests.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/unix/process.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/unix/raw.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/unix/thread.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/unix/ucred.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/unix/ucred/tests.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/vita/fs.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/vita/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/vita/raw.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/vxworks/fs.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/vxworks/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/vxworks/raw.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/wasi/ffi.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/wasi/fs.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/wasi/io/fd.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/wasi/io/fd/tests.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/wasi/io/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/wasi/io/raw.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/wasi/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/wasi/net/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/watchos/fs.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/watchos/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/watchos/raw.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/windows/ffi.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/windows/fs.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/windows/io/handle.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/windows/io/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/windows/io/raw.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/windows/io/socket.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/windows/io/tests.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/windows/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/windows/process.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/windows/raw.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/os/windows/thread.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/panic.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/panic/tests.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/panicking.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/path/tests.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/personality.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/personality/dwarf/eh.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/personality/dwarf/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/personality/dwarf/tests.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/personality/emcc.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/personality/gcc.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/prelude/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/prelude/v1.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/primitive_docs.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/process.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/process/tests.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/rt.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/barrier.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/barrier/tests.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/condvar.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/condvar/tests.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/lazy_lock.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/lazy_lock/tests.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/mpmc/array.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/mpmc/context.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/mpmc/counter.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/mpmc/error.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/mpmc/list.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/mpmc/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/mpmc/select.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/mpmc/utils.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/mpmc/waker.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/mpmc/zero.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/mpsc/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/mpsc/sync_tests.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/mpsc/tests.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/mutex.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/mutex/tests.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/once.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/once/tests.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/once_lock.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/once_lock/tests.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/poison.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/remutex.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/remutex/tests.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/rwlock.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/rwlock/tests.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/common/alloc.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/common/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/common/small_c_string.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/common/tests.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/common/thread_local/fast_local.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/common/thread_local/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/common/thread_local/os_local.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/common/thread_local/static_local.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/hermit/alloc.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/hermit/args.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/hermit/env.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/hermit/fd.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/hermit/fs.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/hermit/futex.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/hermit/memchr.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/hermit/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/hermit/net.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/hermit/os.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/hermit/stdio.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/hermit/thread.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/hermit/thread_local_dtor.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/hermit/time.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/itron/abi.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/itron/condvar.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/itron/error.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/itron/mutex.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/itron/spin.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/itron/task.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/itron/thread.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/itron/thread_parking.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/itron/time.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/itron/time/tests.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/sgx/abi/mem.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/sgx/abi/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/sgx/abi/panic.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/sgx/abi/reloc.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/sgx/abi/thread.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/sgx/abi/tls/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/sgx/abi/tls/sync_bitset.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/sgx/abi/tls/sync_bitset/tests.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/sgx/abi/usercalls/alloc.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/sgx/abi/usercalls/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/sgx/abi/usercalls/raw.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/sgx/abi/usercalls/tests.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/sgx/alloc.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/sgx/args.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/sgx/condvar.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/sgx/env.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/sgx/fd.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/sgx/memchr.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/sgx/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/sgx/mutex.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/sgx/net.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/sgx/os.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/sgx/path.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/sgx/rwlock.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/sgx/rwlock/tests.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/sgx/stdio.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/sgx/thread.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/sgx/thread_local_key.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/sgx/thread_parking.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/sgx/time.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/sgx/waitqueue/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/sgx/waitqueue/spin_mutex.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/sgx/waitqueue/spin_mutex/tests.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/sgx/waitqueue/tests.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/sgx/waitqueue/unsafe_list.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/sgx/waitqueue/unsafe_list/tests.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/solid/abi/fs.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/solid/abi/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/solid/abi/sockets.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/solid/alloc.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/solid/env.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/solid/error.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/solid/fs.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/solid/io.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/solid/memchr.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/solid/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/solid/net.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/solid/os.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/solid/path.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/solid/rwlock.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/solid/stdio.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/solid/thread_local_dtor.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/solid/thread_local_key.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/solid/time.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/unix/alloc.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/unix/android.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/unix/args.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/unix/cmath.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/unix/env.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/unix/fd.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/unix/fd/tests.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/unix/fs.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/unix/futex.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/unix/io.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/unix/kernel_copy.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/unix/kernel_copy/tests.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/unix/l4re.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/unix/locks/fuchsia_mutex.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/unix/locks/futex_condvar.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/unix/locks/futex_mutex.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/unix/locks/futex_rwlock.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/unix/locks/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/unix/locks/pthread_condvar.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/unix/locks/pthread_mutex.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/unix/locks/pthread_rwlock.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/unix/memchr.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/unix/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/unix/net.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/unix/os.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/unix/os/tests.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/unix/os_str.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/unix/os_str/tests.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/unix/path.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/unix/pipe.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/unix/process/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/unix/process/process_common.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/unix/process/process_common/tests.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/unix/process/process_fuchsia.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/unix/process/process_unix.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/unix/process/process_unix/tests.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/unix/process/process_unsupported.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/unix/process/process_vxworks.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/unix/process/zircon.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/unix/rand.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/unix/stack_overflow.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/unix/stdio.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/unix/thread.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/unix/thread_local_dtor.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/unix/thread_local_key.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/unix/thread_parking/darwin.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/unix/thread_parking/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/unix/thread_parking/netbsd.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/unix/thread_parking/pthread.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/unix/time.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/unix/weak.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/unsupported/alloc.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/unsupported/args.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/unsupported/common.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/unsupported/env.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/unsupported/fs.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/unsupported/io.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/unsupported/locks/condvar.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/unsupported/locks/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/unsupported/locks/mutex.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/unsupported/locks/rwlock.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/unsupported/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/unsupported/net.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/unsupported/once.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/unsupported/os.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/unsupported/pipe.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/unsupported/process.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/unsupported/stdio.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/unsupported/thread.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/unsupported/thread_local_dtor.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/unsupported/thread_local_key.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/unsupported/thread_parking.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/unsupported/time.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/wasi/args.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/wasi/env.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/wasi/fd.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/wasi/fs.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/wasi/io.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/wasi/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/wasi/net.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/wasi/os.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/wasi/stdio.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/wasi/thread.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/wasi/time.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/wasm/alloc.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/wasm/atomics/futex.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/wasm/atomics/thread.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/wasm/env.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/wasm/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/windows/alloc.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/windows/alloc/tests.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/windows/args.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/windows/args/tests.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/windows/c.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/windows/c/windows_sys.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/windows/cmath.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/windows/compat.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/windows/env.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/windows/fs.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/windows/handle.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/windows/handle/tests.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/windows/io.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/windows/locks/condvar.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/windows/locks/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/windows/locks/mutex.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/windows/locks/rwlock.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/windows/memchr.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/windows/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/windows/net.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/windows/os.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/windows/os/tests.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/windows/os_str.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/windows/path.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/windows/path/tests.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/windows/pipe.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/windows/process.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/windows/process/tests.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/windows/rand.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/windows/stack_overflow.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/windows/stack_overflow_uwp.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/windows/stdio.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/windows/stdio/tests.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/windows/thread.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/windows/thread_local_dtor.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/windows/thread_local_key.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/windows/thread_local_key/tests.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/windows/thread_parking.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/windows/time.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys_common/backtrace.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys_common/fs.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys_common/io.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys_common/lazy_box.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys_common/memchr.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys_common/memchr/tests.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys_common/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys_common/net.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys_common/net/tests.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys_common/once/futex.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys_common/once/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys_common/once/queue.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys_common/process.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys_common/tests.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys_common/thread.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys_common/thread_info.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys_common/thread_local_dtor.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys_common/thread_local_key.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys_common/thread_local_key/tests.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys_common/thread_parking/futex.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys_common/thread_parking/id.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys_common/thread_parking/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys_common/wstr.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys_common/wtf8.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys_common/wtf8/tests.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/thread/local.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/thread/local/dynamic_tests.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/thread/local/tests.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/thread/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/thread/scoped.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/thread/tests.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/time.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/time/tests.rs", + ] + inputs = [ + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/../../backtrace/src/backtrace/dbghelp.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/../../backtrace/src/backtrace/libunwind.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/../../backtrace/src/backtrace/miri.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/../../backtrace/src/backtrace/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/../../backtrace/src/backtrace/noop.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/../../backtrace/src/capture.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/../../backtrace/src/dbghelp.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/../../backtrace/src/lib.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/../../backtrace/src/print/fuchsia.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/../../backtrace/src/print.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/../../backtrace/src/symbolize/dbghelp.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/../../backtrace/src/symbolize/gimli/coff.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/../../backtrace/src/symbolize/gimli/elf.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/../../backtrace/src/symbolize/gimli/libs_dl_iterate_phdr.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/../../backtrace/src/symbolize/gimli/libs_haiku.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/../../backtrace/src/symbolize/gimli/libs_illumos.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/../../backtrace/src/symbolize/gimli/libs_libnx.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/../../backtrace/src/symbolize/gimli/libs_macos.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/../../backtrace/src/symbolize/gimli/libs_windows.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/../../backtrace/src/symbolize/gimli/macho.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/../../backtrace/src/symbolize/gimli/mmap_fake.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/../../backtrace/src/symbolize/gimli/mmap_unix.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/../../backtrace/src/symbolize/gimli/mmap_windows.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/../../backtrace/src/symbolize/gimli/parse_running_mmaps_unix.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/../../backtrace/src/symbolize/gimli/stash.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/../../backtrace/src/symbolize/gimli.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/../../backtrace/src/symbolize/miri.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/../../backtrace/src/symbolize/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/../../backtrace/src/symbolize/noop.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/../../backtrace/src/types.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/../../backtrace/src/windows.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/../../core/src/error.md", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/../../core/src/ffi/c_char.md", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/../../core/src/ffi/c_double.md", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/../../core/src/ffi/c_float.md", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/../../core/src/ffi/c_int.md", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/../../core/src/ffi/c_long.md", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/../../core/src/ffi/c_longlong.md", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/../../core/src/ffi/c_schar.md", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/../../core/src/ffi/c_short.md", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/../../core/src/ffi/c_uchar.md", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/../../core/src/ffi/c_uint.md", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/../../core/src/ffi/c_ulong.md", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/../../core/src/ffi/c_ulonglong.md", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/../../core/src/ffi/c_ushort.md", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/../../core/src/ffi/c_void.md", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/../../core/src/macros/panic.md", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/../../portable-simd/crates/core_simd/src/core_simd_docs.md", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/../../portable-simd/crates/std_float/src/lib.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/../../stdarch/crates/core_arch/src/core_arch_docs.md", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/../primitive_docs/box_into_raw.md", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/../primitive_docs/fs_file.md", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/../primitive_docs/io_bufread.md", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/../primitive_docs/io_read.md", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/../primitive_docs/io_seek.md", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/../primitive_docs/io_write.md", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/../primitive_docs/net_tosocketaddrs.md", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/../primitive_docs/process_exit.md", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/../primitive_docs/string_string.md", + ] no_std = true # Unit tests skipped. Generate with --with-tests to include them. build_native_rust_unit_tests = false - sources = [ - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/lib.rs", - ] edition = "2021" cargo_pkg_version = "0.0.0" cargo_pkg_name = "std" cargo_pkg_description = "The Rust Standard Library" library_configs -= [ "//build/config/compiler:chromium_code" ] - library_configs += [ "//build/config/compiler:no_chromium_code" ] + library_configs += [ + "//build/config/compiler:no_chromium_code", + "//build/rust:panic_immediate_abort", + ] executable_configs -= [ "//build/config/compiler:chromium_code" ] executable_configs += [ "//build/config/compiler:no_chromium_code" ] deps = [ @@ -625,10 +2464,11 @@ cargo_crate("std") { ":object", ":panic_abort", ":panic_unwind", - ":profiler_builtins", ":rustc_demangle", ":std_detect", ":unwind", + "//build/rust/std:profiler_builtins_group", + "//build/rust/std:std_build_deps", ] features = [ "addr2line", @@ -642,17 +2482,64 @@ cargo_crate("std") { "std_detect_dlsym_getauxval", "std_detect_file_io", ] - rustflags = [ "--cfg=backtrace_in_libstd" ] - rustenv = [ "STD_ENV_ARCH=$rust_target_arch" ] + build_root = + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/build.rs" + build_sources = [ + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/build.rs", + ] + rustenv = [ + "CFG_DISABLE_UNSTABLE_FEATURES=0", + "STD_ENV_ARCH=$rust_target_arch", + ] + rustflags = [ + "--cfg=backtrace_in_libstd", + "-Zforce-unstable-if-unmarked", + ] + output_dir = + "$root_out_dir/local_rustc_sysroot/lib/rustlib/$rust_abi_target/lib/" } cargo_crate("std_detect") { crate_type = "rlib" crate_root = "//third_party/rust-toolchain/lib/rustlib/src/rust/library/stdarch/crates/std_detect/src/lib.rs" + sources = [ + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/stdarch/crates/std_detect/src/detect/arch/aarch64.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/stdarch/crates/std_detect/src/detect/arch/arm.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/stdarch/crates/std_detect/src/detect/arch/mips.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/stdarch/crates/std_detect/src/detect/arch/mips64.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/stdarch/crates/std_detect/src/detect/arch/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/stdarch/crates/std_detect/src/detect/arch/powerpc.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/stdarch/crates/std_detect/src/detect/arch/powerpc64.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/stdarch/crates/std_detect/src/detect/arch/riscv.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/stdarch/crates/std_detect/src/detect/arch/x86.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/stdarch/crates/std_detect/src/detect/bit.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/stdarch/crates/std_detect/src/detect/cache.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/stdarch/crates/std_detect/src/detect/macros.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/stdarch/crates/std_detect/src/detect/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/stdarch/crates/std_detect/src/detect/os/aarch64.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/stdarch/crates/std_detect/src/detect/os/freebsd/aarch64.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/stdarch/crates/std_detect/src/detect/os/freebsd/arm.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/stdarch/crates/std_detect/src/detect/os/freebsd/auxvec.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/stdarch/crates/std_detect/src/detect/os/freebsd/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/stdarch/crates/std_detect/src/detect/os/freebsd/powerpc.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/stdarch/crates/std_detect/src/detect/os/linux/aarch64.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/stdarch/crates/std_detect/src/detect/os/linux/arm.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/stdarch/crates/std_detect/src/detect/os/linux/auxvec.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/stdarch/crates/std_detect/src/detect/os/linux/cpuinfo.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/stdarch/crates/std_detect/src/detect/os/linux/mips.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/stdarch/crates/std_detect/src/detect/os/linux/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/stdarch/crates/std_detect/src/detect/os/linux/powerpc.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/stdarch/crates/std_detect/src/detect/os/linux/riscv.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/stdarch/crates/std_detect/src/detect/os/openbsd/aarch64.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/stdarch/crates/std_detect/src/detect/os/other.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/stdarch/crates/std_detect/src/detect/os/windows/aarch64.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/stdarch/crates/std_detect/src/detect/os/x86.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/stdarch/crates/std_detect/src/lib.rs", + ] + inputs = [] no_std = true # Unit tests skipped. Generate with --with-tests to include them. build_native_rust_unit_tests = false - sources = [ "//third_party/rust-toolchain/lib/rustlib/src/rust/library/stdarch/crates/std_detect/src/lib.rs" ] edition = "2021" cargo_pkg_version = "0.1.5" cargo_pkg_authors = "Alex Crichton , Andrew Gallant , Gonzalo Brito Gadeschi " @@ -669,6 +2556,8 @@ cargo_crate("std_detect") { ":libc", ":rustc_std_workspace_alloc", ":rustc_std_workspace_core", + "//build/rust/std:profiler_builtins_group", + "//build/rust/std:std_build_deps", ] aliased_deps = { alloc = ":rustc_std_workspace_alloc__rlib" @@ -683,17 +2572,58 @@ cargo_crate("std_detect") { "std_detect_dlsym_getauxval", "std_detect_file_io", ] + rustenv = [ + "CFG_DISABLE_UNSTABLE_FEATURES=0", + "STD_ENV_ARCH=$rust_target_arch", + ] + rustflags = [ + "--cfg=backtrace_in_libstd", + "-Zforce-unstable-if-unmarked", + ] + output_dir = + "$root_out_dir/local_rustc_sysroot/lib/rustlib/$rust_abi_target/lib/" } cargo_crate("test") { crate_type = "rlib" crate_root = "//third_party/rust-toolchain/lib/rustlib/src/rust/library/test/src/lib.rs" + sources = [ + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/test/src/bench.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/test/src/cli.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/test/src/console.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/test/src/event.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/test/src/formatters/json.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/test/src/formatters/junit.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/test/src/formatters/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/test/src/formatters/pretty.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/test/src/formatters/terse.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/test/src/helpers/concurrency.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/test/src/helpers/exit_code.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/test/src/helpers/metrics.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/test/src/helpers/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/test/src/helpers/shuffle.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/test/src/lib.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/test/src/options.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/test/src/stats.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/test/src/stats/tests.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/test/src/term.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/test/src/term/terminfo/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/test/src/term/terminfo/parm.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/test/src/term/terminfo/parm/tests.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/test/src/term/terminfo/parser/compiled.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/test/src/term/terminfo/parser/compiled/tests.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/test/src/term/terminfo/searcher.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/test/src/term/terminfo/searcher/tests.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/test/src/term/win.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/test/src/test_result.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/test/src/tests.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/test/src/time.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/test/src/types.rs", + ] + inputs = [] no_std = true # Unit tests skipped. Generate with --with-tests to include them. build_native_rust_unit_tests = false - sources = [ - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/test/src/lib.rs", - ] edition = "2021" cargo_pkg_version = "0.0.0" cargo_pkg_name = "test" @@ -702,32 +2632,44 @@ cargo_crate("test") { executable_configs -= [ "//build/config/compiler:chromium_code" ] executable_configs += [ "//build/config/compiler:no_chromium_code" ] deps = [ - ":cfg_if", ":core", ":getopts", - ":libc", ":panic_abort", ":panic_unwind", - ":proc_macro", ":std", + "//build/rust/std:profiler_builtins_group", + "//build/rust/std:std_build_deps", ] - - rustenv = [ "CFG_DISABLE_UNSTABLE_FEATURES=0" ] + rustenv = [ + "CFG_DISABLE_UNSTABLE_FEATURES=0", + "STD_ENV_ARCH=$rust_target_arch", + ] + rustflags = [ + "--cfg=backtrace_in_libstd", + "-Zforce-unstable-if-unmarked", + ] + output_dir = + "$root_out_dir/local_rustc_sysroot/lib/rustlib/$rust_abi_target/lib/" } cargo_crate("unicode_width") { crate_type = "rlib" - crate_root = "//build/rust/std/fake_root/../../../../third_party/rust-toolchain/lib/rustlib/src/rust/vendor/unicode-width-0.1.10/src/lib.rs" + crate_root = "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/unicode-width-0.1.10/src/lib.rs" + sources = [ + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/unicode-width-0.1.10/src/lib.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/unicode-width-0.1.10/src/tables.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/vendor/unicode-width-0.1.10/src/tests.rs", + ] + inputs = [] no_std = true # Unit tests skipped. Generate with --with-tests to include them. build_native_rust_unit_tests = false - sources = [ "//build/rust/std/fake_root/../../../../third_party/rust-toolchain/lib/rustlib/src/rust/vendor/unicode-width-0.1.10/src/lib.rs" ] edition = "2015" cargo_pkg_version = "0.1.10" cargo_pkg_authors = "kwantam , Manish Goregaokar " cargo_pkg_name = "unicode-width" - cargo_pkg_description = "Determine displayed width of `char` and `str` typesaccording to Unicode Standard Annex #11 rules." + cargo_pkg_description = "Determine displayed width of `char` and `str` types according to Unicode Standard Annex #11 rules." library_configs -= [ "//build/config/compiler:chromium_code" ] library_configs += [ "//build/config/compiler:no_chromium_code" ] executable_configs -= [ "//build/config/compiler:chromium_code" ] @@ -736,6 +2678,8 @@ cargo_crate("unicode_width") { ":compiler_builtins", ":rustc_std_workspace_core", ":rustc_std_workspace_std", + "//build/rust/std:profiler_builtins_group", + "//build/rust/std:std_build_deps", ] aliased_deps = { core = ":rustc_std_workspace_core__rlib" @@ -747,15 +2691,29 @@ cargo_crate("unicode_width") { "rustc-dep-of-std", "std", ] + rustenv = [ + "CFG_DISABLE_UNSTABLE_FEATURES=0", + "STD_ENV_ARCH=$rust_target_arch", + ] + rustflags = [ + "--cfg=backtrace_in_libstd", + "-Zforce-unstable-if-unmarked", + ] + output_dir = + "$root_out_dir/local_rustc_sysroot/lib/rustlib/$rust_abi_target/lib/" } cargo_crate("unwind") { crate_type = "rlib" crate_root = "//third_party/rust-toolchain/lib/rustlib/src/rust/library/unwind/src/lib.rs" + sources = [ + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/unwind/src/lib.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/unwind/src/libunwind.rs", + ] + inputs = [] no_std = true # Unit tests skipped. Generate with --with-tests to include them. build_native_rust_unit_tests = false - sources = [ "//third_party/rust-toolchain/lib/rustlib/src/rust/library/unwind/src/lib.rs" ] edition = "2021" cargo_pkg_version = "0.0.0" cargo_pkg_name = "unwind" @@ -768,6 +2726,18 @@ cargo_crate("unwind") { ":compiler_builtins", ":core", ":libc", + "//build/rust/std:profiler_builtins_group", + "//build/rust/std:std_build_deps", + ] + rustenv = [ + "CFG_DISABLE_UNSTABLE_FEATURES=0", + "STD_ENV_ARCH=$rust_target_arch", + ] + rustflags = [ + "--cfg=backtrace_in_libstd", + "-Zforce-unstable-if-unmarked", + "-Zlink-directives=false", ] - build_deps = [ ":cc" ] + output_dir = + "$root_out_dir/local_rustc_sysroot/lib/rustlib/$rust_abi_target/lib/" } diff --git a/build/rust/tests/BUILD.gn b/build/rust/tests/BUILD.gn index ba5d50a..ff61553 100644 --- a/build/rust/tests/BUILD.gn +++ b/build/rust/tests/BUILD.gn @@ -5,14 +5,6 @@ import("//build/config/rust.gni") import("//build/rust/rust_unit_tests_group.gni") -if (toolchain_has_rust) { - target_has_exe = !is_android - - # TODO(crbug.com/1278030): Dylib linking on Android fails due to trying to - # link the unwinder from `-lgcc`. - target_has_dylib = !is_android -} - # Build some minimal binaries to exercise the Rust toolchain # only if that toolchain is enabled in gn args. group("tests") { @@ -31,12 +23,22 @@ group("deps") { # All the rest require Rust. if (toolchain_has_rust) { deps += [ + "bindgen_test", "test_aliased_deps", + "test_aliased_deps:test_aliased_deps_exe", + "test_bin_crate", "test_cpp_including_rust", "test_rlib_crate:target1", "test_rlib_crate:target2", + "test_rlib_crate:test_rlib_crate_associated_bin", + "test_rust_calling_cpp", + "test_rust_exe", + "test_rust_metadata:test_rust_metadata_cc_exe", + "test_rust_metadata:test_rust_metadata_exe", + "test_rust_multiple_dep_versions_exe", "test_rust_static_library", "test_serde_json_lenient", + "test_simple_rust_exe", # TODO(https://crbug.com/1329611): Enable the additional target below # once `rs_bindings_from_cc` is distributed via `gclient sync`. In the @@ -44,21 +46,6 @@ group("deps") { # `//build/rust/run_rs_bindings_from_cc.py`. #"test_rs_bindings_from_cc:test_rs_bindings_from_cc", ] - if (target_has_exe) { - deps += [ - "bindgen_test", - "test_aliased_deps:test_aliased_deps_exe", - "test_bin_crate", - "test_rlib_crate:test_rlib_crate_associated_bin", - "test_rust_exe", - "test_rust_multiple_dep_versions_exe", - "test_simple_rust_exe", - "//third_party/rust/bindgen/v0_60:bindgen", - ] - } - if (target_has_dylib) { - deps += [ "test_rust_shared_library" ] - } if (can_build_rust_unit_tests) { deps += [ "bindgen_test:bindgen_test_lib_unittests", @@ -67,6 +54,7 @@ group("deps") { "test_rlib_crate:target1_test_rlib_crate_v0_2_unittests", "test_rlib_crate:target2_test_rlib_crate_v0_2_unittests", "test_rust_exe:test_rust_exe_unittests", + "test_rust_metadata:test_rust_metadata_unittests", "test_rust_multiple_dep_versions_exe/v1:test_lib_v1_unittests", "test_rust_multiple_dep_versions_exe/v2:test_lib_v2_unittests", "test_rust_static_library:test_rust_static_library_unittests", @@ -79,27 +67,30 @@ group("deps") { # `//build/rust/run_rs_bindings_from_cc.py`. #"test_rs_bindings_from_cc:test_rs_bindings_from_cc_unittests", ] - - # TODO(crbug.com/1297592): The bot isolate does not end up including any - # .so files so the tests fail: - # - # error while loading shared libraries: libtest_rust_shared_library.so: - # cannot open shared object file: No such file or directory - if (false) { - deps += - [ "test_rust_shared_library:test_rust_shared_library_unittests" ] - } } - if (local_libstd_supported) { - deps += [ "test_local_std" ] - if (target_has_exe) { - deps += [ "test_local_std:test_local_std_exe" ] - } + # Dylibs should only be built in component builds. We turn on flags which + # are incompatible with shared library compilation in non-component builds + # (such as code coverage https://crbug.com/1457533). + if (is_component_build) { + deps += [ "test_rust_shared_library" ] if (can_build_rust_unit_tests) { - deps += [ "test_local_std:test_local_std_unittests" ] + deps += [ + "test_cpp_including_rust:test_cpp_including_rust_dylib_unittests", + ] + + # TODO(crbug.com/1442273): The shared library unittest EXE ends up + # requiring the DLL to run, even though it does not use the DLL. + if (!is_win && !is_mac) { + deps += + [ "test_rust_shared_library:test_rust_shared_library_unittests" ] + } } } + + if (is_win) { + deps += [ "test_control_flow_guard" ] + } } } diff --git a/build/rust/tests/bindgen_test/BUILD.gn b/build/rust/tests/bindgen_test/BUILD.gn index ce158e9..c0c3d9b 100644 --- a/build/rust/tests/bindgen_test/BUILD.gn +++ b/build/rust/tests/bindgen_test/BUILD.gn @@ -27,6 +27,7 @@ rust_bindgen("c_lib_bindgen") { } rust_static_library("bindgen_test_lib") { + allow_unsafe = true deps = [ ":c_lib", ":c_lib_bindgen", @@ -37,7 +38,8 @@ rust_static_library("bindgen_test_lib") { bindgen_output = get_target_outputs(":c_lib_bindgen") inputs = bindgen_output - rustenv = [ "BINDGEN_RS_FILE=" + rebase_path(bindgen_output[0]) ] + rustenv = [ "BINDGEN_RS_FILE=" + + rebase_path(bindgen_output[0], get_path_info(crate_root, "dir")) ] } rust_executable("bindgen_test") { diff --git a/build/rust/tests/bindgen_test/src/lib.rs b/build/rust/tests/bindgen_test/src/lib.rs index dfd231d..c8672e0 100644 --- a/build/rust/tests/bindgen_test/src/lib.rs +++ b/build/rust/tests/bindgen_test/src/lib.rs @@ -4,6 +4,7 @@ mod c_ffi { #![allow(dead_code)] + #![allow(non_snake_case)] #![allow(non_camel_case_types)] #![allow(non_upper_case_globals)] include!(env!("BINDGEN_RS_FILE")); diff --git a/build/rust/tests/test_bin_crate/BUILD.gn b/build/rust/tests/test_bin_crate/BUILD.gn index ac47ee0..835029c 100644 --- a/build/rust/tests/test_bin_crate/BUILD.gn +++ b/build/rust/tests/test_bin_crate/BUILD.gn @@ -7,7 +7,10 @@ import("//build/rust/cargo_crate.gni") cargo_crate("test_bin_crate") { crate_type = "bin" crate_root = "crate/src/main.rs" - sources = [ "crate/src/main.rs" ] + sources = [ + "crate/src/main.rs", + "crate/src/more.rs", + ] build_sources = [ "crate/build.rs" ] build_root = "crate/build.rs" diff --git a/build/rust/tests/test_bin_crate/crate/src/main.rs b/build/rust/tests/test_bin_crate/crate/src/main.rs index 08fff49..71ec000 100644 --- a/build/rust/tests/test_bin_crate/crate/src/main.rs +++ b/build/rust/tests/test_bin_crate/crate/src/main.rs @@ -2,6 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +mod more; + fn main() { println!("Hello, world!"); #[cfg(is_new_rustc)] @@ -12,4 +14,6 @@ fn main() { println!("Is android!"); #[cfg(is_mac)] println!("Is darwin!"); + + more::hello(); } diff --git a/build/rust/tests/test_local_std/main.rs b/build/rust/tests/test_bin_crate/crate/src/more.rs similarity index 77% rename from build/rust/tests/test_local_std/main.rs rename to build/rust/tests/test_bin_crate/crate/src/more.rs index 746e021..3b60842 100644 --- a/build/rust/tests/test_local_std/main.rs +++ b/build/rust/tests/test_bin_crate/crate/src/more.rs @@ -2,6 +2,4 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -fn main() { - println!("hello world"); -} +pub fn hello() {} diff --git a/build/rust/tests/test_control_flow_guard/BUILD.gn b/build/rust/tests/test_control_flow_guard/BUILD.gn new file mode 100644 index 0000000..202c5b0 --- /dev/null +++ b/build/rust/tests/test_control_flow_guard/BUILD.gn @@ -0,0 +1,14 @@ +# Copyright 2023 The Chromium Authors +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +import("//build/rust/rust_executable.gni") + +rust_executable("test_control_flow_guard") { + allow_unsafe = true + crate_root = "test_control_flow_guard.rs" + sources = [ crate_root ] + + # Used as a data dep by base_unittests. + is_data_dep = true +} diff --git a/build/rust/tests/test_control_flow_guard/test_control_flow_guard.rs b/build/rust/tests/test_control_flow_guard/test_control_flow_guard.rs new file mode 100644 index 0000000..d303d3d --- /dev/null +++ b/build/rust/tests/test_control_flow_guard/test_control_flow_guard.rs @@ -0,0 +1,43 @@ +// Copyright 2023 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +//! To test that CFG is working, build this executable on Windows and run it +//! as: +//! +//! `out\Release\cdb\cdb.exe -G -g -o .\out\Release\test_control_flow_guard.exe` +//! +//! Which should print: +//! ``` +//! (a2d4.bcd8): Security check failure or stack buffer overrun - code c0000409 +//! (!!! second chance !!!) +//! Subcode: 0xa FAST_FAIL_GUARD_ICALL_CHECK_FAILURE +//! ``` +//! +//! If cdb.exe is not present, first run `ninja -C out\Release cdb\cdb.exe`. + +use std::arch::asm; + +#[cfg(any(target_arch = "x86", target_arch = "x86_64"))] +const NOP_INSTRUCTION_SIZE: usize = 1; +#[cfg(target_arch = "aarch64")] +const NOP_INSTRUCTION_SIZE: usize = 4; + +#[inline(never)] +fn nop_sled() { + unsafe { asm!("nop", "nop", "ret",) } +} + +#[inline(never)] +fn indirect_call(func: fn()) { + func(); +} + +fn main() { + let fptr = + unsafe { std::mem::transmute::(nop_sled as usize + NOP_INSTRUCTION_SIZE) }; + // Generates a FAST_FAIL_GUARD_ICALL_CHECK_FAILURE if CFG triggers. + indirect_call(fptr); + // Should only reach here if CFG is disabled. + eprintln!("failed"); +} diff --git a/build/rust/tests/test_cpp_including_rust/BUILD.gn b/build/rust/tests/test_cpp_including_rust/BUILD.gn index 2157b79..3e974fc 100644 --- a/build/rust/tests/test_cpp_including_rust/BUILD.gn +++ b/build/rust/tests/test_cpp_including_rust/BUILD.gn @@ -11,7 +11,7 @@ executable("test_cpp_including_rust") { } test("test_cpp_including_rust_unittests") { - sources = [ "unittests.cc" ] + sources = [ "static_unittests.cc" ] deps = [ "//base", "//base/allocator:buildflags", @@ -21,3 +21,17 @@ test("test_cpp_including_rust_unittests") { "//testing/gtest", ] } + +if (is_component_build) { + test("test_cpp_including_rust_dylib_unittests") { + sources = [ "shared_unittests.cc" ] + deps = [ + "//base", + "//base/allocator:buildflags", + "//base/test:run_all_unittests", + "//build/rust/tests/test_rust_shared_library", + "//testing/gmock", + "//testing/gtest", + ] + } +} diff --git a/build/rust/tests/test_cpp_including_rust/shared_unittests.cc b/build/rust/tests/test_cpp_including_rust/shared_unittests.cc new file mode 100644 index 0000000..b207196 --- /dev/null +++ b/build/rust/tests/test_cpp_including_rust/shared_unittests.cc @@ -0,0 +1,31 @@ +// Copyright 2023 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include + +#include + +#include "base/allocator/buildflags.h" +#include "base/allocator/partition_allocator/address_pool_manager_bitmap.h" +#include "base/allocator/partition_allocator/partition_address_space.h" +#include "build/build_config.h" +#include "build/buildflag.h" +#include "testing/gtest/include/gtest/gtest.h" + +#include "build/rust/tests/test_rust_shared_library/src/lib.rs.h" + +TEST(RustSharedTest, CppCallingIntoRust_BasicFFI) { + EXPECT_EQ(7, add_two_ints_via_rust(3, 4)); +} + +TEST(RustSharedTest, RustComponentUsesPartitionAlloc) { + // Verify that PartitionAlloc is consistently used in C++ and Rust. + auto cpp_allocated_int = std::make_unique(); + SomeStruct* rust_allocated_ptr = allocate_via_rust().into_raw(); + EXPECT_EQ(partition_alloc::IsManagedByPartitionAlloc( + reinterpret_cast(rust_allocated_ptr)), + partition_alloc::IsManagedByPartitionAlloc( + reinterpret_cast(cpp_allocated_int.get()))); + rust::Box::from_raw(rust_allocated_ptr); +} diff --git a/build/rust/tests/test_cpp_including_rust/unittests.cc b/build/rust/tests/test_cpp_including_rust/static_unittests.cc similarity index 87% rename from build/rust/tests/test_cpp_including_rust/unittests.cc rename to build/rust/tests/test_cpp_including_rust/static_unittests.cc index f3b65ad..77efd8d 100644 --- a/build/rust/tests/test_cpp_including_rust/unittests.cc +++ b/build/rust/tests/test_cpp_including_rust/static_unittests.cc @@ -1,4 +1,4 @@ -// Copyright 2021 The Chromium Authors +// Copyright 2023 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -15,11 +15,11 @@ #include "build/rust/tests/test_rust_static_library/src/lib.rs.h" -TEST(RustTest, CppCallingIntoRust_BasicFFI) { +TEST(RustStaticTest, CppCallingIntoRust_BasicFFI) { EXPECT_EQ(7, add_two_ints_via_rust(3, 4)); } -TEST(RustTest, RustComponentUsesPartitionAlloc) { +TEST(RustStaticTest, RustComponentUsesPartitionAlloc) { // Verify that PartitionAlloc is consistently used in C++ and Rust. auto cpp_allocated_int = std::make_unique(); SomeStruct* rust_allocated_ptr = allocate_via_rust().into_raw(); diff --git a/build/rust/tests/test_local_std/BUILD.gn b/build/rust/tests/test_local_std/BUILD.gn deleted file mode 100644 index 6d364c6..0000000 --- a/build/rust/tests/test_local_std/BUILD.gn +++ /dev/null @@ -1,34 +0,0 @@ -# Copyright 2023 The Chromium Authors -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -import("//build/config/rust.gni") -import("//build/rust/rust_executable.gni") -import("//build/rust/rust_static_library.gni") - -assert(local_libstd_supported) - -rust_static_library("test_local_std") { - sources = [ "lib.rs" ] - crate_root = "lib.rs" - build_native_rust_unit_tests = true - - # Override the normal stdlib. - # - # TODO(crbug.com/1368806): add a better switch for using the prebuilt std vs - # locally built std. - no_std = true - deps = [ "//build/rust/std:local_std_for_rustc" ] -} - -rust_executable("test_local_std_exe") { - sources = [ "main.rs" ] - crate_root = "main.rs" - deps = [ ":test_local_std" ] - - # Override the normal stdlib. - # - # TODO(crbug.com/1368806): add a better switch for using the prebuilt std vs - # locally built std. - no_std = true -} diff --git a/build/rust/tests/test_rust_calling_cpp/BUILD.gn b/build/rust/tests/test_rust_calling_cpp/BUILD.gn new file mode 100644 index 0000000..9fdfcd4 --- /dev/null +++ b/build/rust/tests/test_rust_calling_cpp/BUILD.gn @@ -0,0 +1,21 @@ +import("//build/rust/rust_static_library.gni") + +static_library("cpp_library") { + sources = [ + "cpp_library.cc", + "cpp_library.h", + ] +} + +rust_static_library("rust_calling_cpp_rlib") { + sources = [ "rust_calling_cpp_rlib.rs" ] + crate_root = "rust_calling_cpp_rlib.rs" + cxx_bindings = [ "rust_calling_cpp_rlib.rs" ] + allow_unsafe = true + deps = [ ":cpp_library" ] +} + +executable("test_rust_calling_cpp") { + deps = [ ":rust_calling_cpp_rlib" ] + sources = [ "main.cc" ] +} diff --git a/build/rust/tests/test_rust_calling_cpp/cpp_library.cc b/build/rust/tests/test_rust_calling_cpp/cpp_library.cc new file mode 100644 index 0000000..cb0a39c --- /dev/null +++ b/build/rust/tests/test_rust_calling_cpp/cpp_library.cc @@ -0,0 +1,9 @@ +// Copyright 2023 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "build/rust/tests/test_rust_calling_cpp/cpp_library.h" + +int32_t mul_by_2_in_cpp_library(int32_t a) { + return a * 2; +} diff --git a/build/rust/tests/test_rust_calling_cpp/cpp_library.h b/build/rust/tests/test_rust_calling_cpp/cpp_library.h new file mode 100644 index 0000000..b1dcf21 --- /dev/null +++ b/build/rust/tests/test_rust_calling_cpp/cpp_library.h @@ -0,0 +1,12 @@ +// Copyright 2023 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef BUILD_RUST_TESTS_TEST_RUST_CALLING_CPP_CPP_LIBRARY_H_ +#define BUILD_RUST_TESTS_TEST_RUST_CALLING_CPP_CPP_LIBRARY_H_ + +#include + +int32_t mul_by_2_in_cpp_library(int32_t a); + +#endif // BUILD_RUST_TESTS_TEST_RUST_CALLING_CPP_CPP_LIBRARY_H_ diff --git a/build/rust/tests/test_rust_calling_cpp/main.cc b/build/rust/tests/test_rust_calling_cpp/main.cc new file mode 100644 index 0000000..92402a2 --- /dev/null +++ b/build/rust/tests/test_rust_calling_cpp/main.cc @@ -0,0 +1,10 @@ +// Copyright 2023 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "build/rust/tests/test_rust_calling_cpp/rust_calling_cpp_rlib.rs.h" + +int main() { + rust_calling_cpp(); + return 0; +} diff --git a/build/rust/tests/test_rust_calling_cpp/rust_calling_cpp_rlib.rs b/build/rust/tests/test_rust_calling_cpp/rust_calling_cpp_rlib.rs new file mode 100644 index 0000000..9a3bd17 --- /dev/null +++ b/build/rust/tests/test_rust_calling_cpp/rust_calling_cpp_rlib.rs @@ -0,0 +1,22 @@ +// Copyright 2023 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#[allow(unsafe_op_in_unsafe_fn)] +#[cxx::bridge] +mod ffi { + extern "Rust" { + fn rust_calling_cpp(); + } + + unsafe extern "C++" { + include!("build/rust/tests/test_rust_calling_cpp/cpp_library.h"); + + fn mul_by_2_in_cpp_library(a: i32) -> i32; + } +} + +#[no_mangle] +pub fn rust_calling_cpp() { + assert_eq!(ffi::mul_by_2_in_cpp_library(3), 6); +} diff --git a/build/rust/tests/test_rust_metadata/BUILD.gn b/build/rust/tests/test_rust_metadata/BUILD.gn new file mode 100644 index 0000000..95171aa --- /dev/null +++ b/build/rust/tests/test_rust_metadata/BUILD.gn @@ -0,0 +1,81 @@ +# Copyright 2023 The Chromium Authors +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +import("//build/config/rust.gni") +import("//build/rust/rust_executable.gni") +import("//build/rust/rust_static_library.gni") +import("//build/rust/rust_unit_test.gni") + +# This target depends on two variants of the same crate: one directly, and one +# transitively. With correct metadata handling, this will work. +rust_static_library("test_rust_metadata_lib") { + crate_name = "lib" + crate_root = "lib.rs" + sources = [ "lib.rs" ] + deps = [ + ":foo_dependency", + ":transitive_dep_2", + ] + + # Depending on the other variant directly will fail, as expected. rustc + # gives + # + # error[E0464]: multiple candidates for `rlib` dependency `transitive_dep` + # found + # + # deps += [":transitive_dep_1"] + + # We also test this in a C++ binary, so we want a #[no_mangle] fn. This is + # considered unsafe. + allow_unsafe = true +} + +if (can_build_rust_unit_tests) { + # Tests that the different variants return the expected strings. + rust_unit_test("test_rust_metadata_unittests") { + crate_root = "tests.rs" + sources = [ "tests.rs" ] + deps = [ ":test_rust_metadata_lib" ] + } +} + +rust_executable("test_rust_metadata_exe") { + crate_root = "main.rs" + sources = [ "main.rs" ] + deps = [ ":test_rust_metadata_lib" ] +} + +# Check that the metadata handling works when linking into a C++ binary too. +executable("test_rust_metadata_cc_exe") { + sources = [ "main.cc" ] + deps = [ ":test_rust_metadata_lib" ] +} + +# A source file whose behavior depends on cfg options. +rust_static_library("transitive_dep_1") { + crate_name = "transitive_dep" + crate_root = "transitive_dep.rs" + sources = [ "transitive_dep.rs" ] + + rustc_metadata = "foo" +} + +# Build the same source again, but with a feature enabled. The metadata should +# disambiguate the symbols when linking. +rust_static_library("transitive_dep_2") { + crate_name = "transitive_dep" + crate_root = "transitive_dep.rs" + sources = [ "transitive_dep.rs" ] + + rustc_metadata = "bar" + features = [ "bar_feature" ] +} + +# Include one version transitively, since otherwise the names in Rust will +# conflict. +rust_static_library("foo_dependency") { + crate_root = "foo_dependency.rs" + sources = [ "foo_dependency.rs" ] + deps = [ ":transitive_dep_1" ] +} diff --git a/build/rust/tests/test_rust_metadata/foo_dependency.rs b/build/rust/tests/test_rust_metadata/foo_dependency.rs new file mode 100644 index 0000000..9ac78b9 --- /dev/null +++ b/build/rust/tests/test_rust_metadata/foo_dependency.rs @@ -0,0 +1,10 @@ +// Copyright 2023 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Reexporting the function should also work fine. +pub use transitive_dep::say_something as say_foo_directly; + +pub fn say_foo() -> String { + transitive_dep::say_something() +} diff --git a/build/rust/tests/test_rust_metadata/lib.rs b/build/rust/tests/test_rust_metadata/lib.rs new file mode 100644 index 0000000..4081c4d --- /dev/null +++ b/build/rust/tests/test_rust_metadata/lib.rs @@ -0,0 +1,22 @@ +// Copyright 2023 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// The explicit `extern crate` will catch if a GN target specifies conflicting +// dependencies. +// +// When libraries are included implicitly from the command line, rustc seems to +// silently pick the first one that matches. On the other hand with an explicit +// "extern crate" directive, which tells rustc to link a dependency no matter +// what, rustc will see the conflict. +extern crate transitive_dep; + +pub use foo_dependency::say_foo; +pub use foo_dependency::say_foo_directly; +pub use transitive_dep::say_something; + +#[no_mangle] +pub extern "C" fn print_foo_bar() { + println!("{}", foo_dependency::say_foo()); + println!("{}", transitive_dep::say_something()); +} diff --git a/build/rust/tests/test_local_std/lib.rs b/build/rust/tests/test_rust_metadata/main.cc similarity index 68% rename from build/rust/tests/test_local_std/lib.rs rename to build/rust/tests/test_rust_metadata/main.cc index 6328cf4..911dc87 100644 --- a/build/rust/tests/test_local_std/lib.rs +++ b/build/rust/tests/test_rust_metadata/main.cc @@ -2,7 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#[test] -fn test_test() { - assert_eq!(1, 1); +extern "C" void print_foo_bar(); + +int main() { + print_foo_bar(); } diff --git a/build/rust/tests/test_rust_metadata/main.rs b/build/rust/tests/test_rust_metadata/main.rs new file mode 100644 index 0000000..a0d3866 --- /dev/null +++ b/build/rust/tests/test_rust_metadata/main.rs @@ -0,0 +1,8 @@ +// Copyright 2023 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +fn main() { + lib::print_foo_bar(); + println!("{} from re-exported function", lib::say_foo_directly()); +} diff --git a/build/rust/tests/test_rust_metadata/tests.rs b/build/rust/tests/test_rust_metadata/tests.rs new file mode 100644 index 0000000..2652ce0 --- /dev/null +++ b/build/rust/tests/test_rust_metadata/tests.rs @@ -0,0 +1,10 @@ +// Copyright 2023 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#[test] +fn test_expected_outputs() { + assert_eq!(lib::say_foo(), "foo"); + assert_eq!(lib::say_foo_directly(), "foo"); + assert_eq!(lib::say_something(), "bar"); +} diff --git a/build/rust/tests/test_rust_metadata/transitive_dep.rs b/build/rust/tests/test_rust_metadata/transitive_dep.rs new file mode 100644 index 0000000..b00ec10 --- /dev/null +++ b/build/rust/tests/test_rust_metadata/transitive_dep.rs @@ -0,0 +1,14 @@ +// Copyright 2023 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +pub fn say_something() -> String { + #[cfg(feature = "bar_feature")] + { + "bar".to_string() + } + #[cfg(not(feature = "bar_feature"))] + { + "foo".to_string() + } +} diff --git a/build/rust/tests/test_rust_shared_library/BUILD.gn b/build/rust/tests/test_rust_shared_library/BUILD.gn index 550011e..f2396c7 100644 --- a/build/rust/tests/test_rust_shared_library/BUILD.gn +++ b/build/rust/tests/test_rust_shared_library/BUILD.gn @@ -5,6 +5,7 @@ import("//build/rust/rust_shared_library.gni") rust_shared_library("test_rust_shared_library") { + allow_unsafe = true sources = [ "src/lib.rs" ] cxx_bindings = [ "src/lib.rs" ] build_native_rust_unit_tests = true diff --git a/build/rust/tests/test_rust_shared_library/src/lib.rs b/build/rust/tests/test_rust_shared_library/src/lib.rs index 54788b6..2fa77c3 100644 --- a/build/rust/tests/test_rust_shared_library/src/lib.rs +++ b/build/rust/tests/test_rust_shared_library/src/lib.rs @@ -2,6 +2,10 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +// Requires this allow since cxx generates unsafe code. +// +// TODO(crbug.com/1422745): patch upstream cxx to generate compatible code. +#[allow(unsafe_op_in_unsafe_fn)] #[cxx::bridge] mod ffi { pub struct SomeStruct { @@ -30,8 +34,8 @@ pub fn add_two_ints_via_rust(x: i32, y: i32) -> i32 { x + y } -// The next function is used from the -// AllocatorTest.RustComponentUsesPartitionAlloc unit test. +// The next function is used from the RustComponentUsesPartitionAlloc unit +// tests. pub fn allocate_via_rust() -> Box { Box::new(ffi::SomeStruct { a: 43 }) } diff --git a/build/rust/tests/test_rust_static_library/BUILD.gn b/build/rust/tests/test_rust_static_library/BUILD.gn index 39ccbb4..28a48cb 100644 --- a/build/rust/tests/test_rust_static_library/BUILD.gn +++ b/build/rust/tests/test_rust_static_library/BUILD.gn @@ -5,6 +5,7 @@ import("//build/rust/rust_static_library.gni") rust_static_library("test_rust_static_library") { + allow_unsafe = true sources = [ "src/lib.rs" ] cxx_bindings = [ "src/lib.rs" ] build_native_rust_unit_tests = true diff --git a/build/rust/tests/test_rust_static_library/src/lib.rs b/build/rust/tests/test_rust_static_library/src/lib.rs index 9fd9fe7..1fcabe3 100644 --- a/build/rust/tests/test_rust_static_library/src/lib.rs +++ b/build/rust/tests/test_rust_static_library/src/lib.rs @@ -2,6 +2,10 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +// Requires this allow since cxx generates unsafe code. +// +// TODO(crbug.com/1422745): patch upstream cxx to generate compatible code. +#[allow(unsafe_op_in_unsafe_fn)] #[cxx::bridge] mod ffi { pub struct SomeStruct { diff --git a/build/rust/tests/test_serde_json_lenient/BUILD.gn b/build/rust/tests/test_serde_json_lenient/BUILD.gn index 0f0da7a..dbc954e 100644 --- a/build/rust/tests/test_serde_json_lenient/BUILD.gn +++ b/build/rust/tests/test_serde_json_lenient/BUILD.gn @@ -7,6 +7,7 @@ import("//testing/test.gni") rust_static_library("test_serde_json_lenient_rs") { crate_root = "lib.rs" + allow_unsafe = true sources = [ "lib.rs" ] cxx_bindings = [ "lib.rs" ] deps = [ "//third_party/rust/serde_json_lenient/v0_1:lib" ] diff --git a/build/rust/tests/test_simple_rust_exe/BUILD.gn b/build/rust/tests/test_simple_rust_exe/BUILD.gn index 3248f29..9f6ee20 100644 --- a/build/rust/tests/test_simple_rust_exe/BUILD.gn +++ b/build/rust/tests/test_simple_rust_exe/BUILD.gn @@ -8,5 +8,6 @@ # //build/rust/rust_executable.gni. executable("test_simple_rust_exe") { crate_root = "main.rs" - deps = [ "//build/rust/std:prebuilt_std_for_rustc" ] + sources = [ crate_root ] + deps = [ "//build/rust/std:stdlib_for_rustc" ] } diff --git a/build/sanitizers/asan_suppressions.cc b/build/sanitizers/asan_suppressions.cc index 9fbcd8f..32027dd 100644 --- a/build/sanitizers/asan_suppressions.cc +++ b/build/sanitizers/asan_suppressions.cc @@ -15,6 +15,10 @@ // // http://crbug.com/178677 // "interceptor_via_lib:libsqlite3.so\n" char kASanDefaultSuppressions[] = + // https://crbug.com/1471542 false positive odr violations from Rust code. + "odr_violation:^core::\n" + "odr_violation:^object::\n" + "odr_violation:^std::panicking::\n" // End of suppressions. // PLEASE READ ABOVE BEFORE ADDING NEW SUPPRESSIONS. diff --git a/build/sanitizers/lsan_suppressions.cc b/build/sanitizers/lsan_suppressions.cc index 05459c0..5589208 100644 --- a/build/sanitizers/lsan_suppressions.cc +++ b/build/sanitizers/lsan_suppressions.cc @@ -23,6 +23,7 @@ char kLSanDefaultSuppressions[] = // False positives in libfontconfig. http://crbug.com/39050 "leak:libfontconfig\n" + "leak:libthird_party_fontconfig\n" // eglibc-2.19/string/strdup.c creates false positive leak errors because of // the same reason as crbug.com/39050. The leak error stack trace, when // unwind on malloc, includes a call to libfontconfig. But the default stack @@ -30,7 +31,7 @@ char kLSanDefaultSuppressions[] = // suppression works. http://crbug.com/605286 "leak:__strdup\n" - // Leaks in Nvidia's GL and Vulkan drivers. + // Leaks in GL and Vulkan drivers and system libraries on Linux NVIDIA "leak:libGL.so\n" "leak:libGLX_nvidia.so\n" "leak:libnvidia-cbl.so\n" @@ -39,6 +40,7 @@ char kLSanDefaultSuppressions[] = "leak:libnvidia-rtcore.so\n" "leak:nvidia0\n" "leak:nvidiactl\n" + "leak:libdbus-1.so\n" // XRandR has several one time leaks. "leak:libxrandr\n" @@ -62,6 +64,9 @@ char kLSanDefaultSuppressions[] = // Suppress leaks from unknown third party modules. http://anglebug.com/6937 "leak:\n" + // Suppress leaks from temporary files. http://crbug.com/1433299 + "leak:(deleted)\n" + // ================ Leaks in Chromium code ================ // PLEASE DO NOT ADD SUPPRESSIONS FOR NEW LEAKS. // Instead, commits that introduce memory leaks should be reverted. @@ -69,9 +74,6 @@ char kLSanDefaultSuppressions[] = // impossible, i.e. when enabling leak detection for the first time for a // test target with pre-existing leaks. - // https://crbug.com/755670 - "leak:third_party/yasm/\n" - // v8 leaks caused by weak ref not call "leak:blink::DOMWrapperWorld::Create\n" "leak:blink::ScriptState::Create\n" @@ -103,6 +105,14 @@ char kLSanDefaultSuppressions[] = // Suppress leak in DelayedCallbackGroup test. crbug.com/1279563 "leak:DelayedCallbackGroup_TimeoutAndRun_Test\n" #endif +#if BUILDFLAG(IS_MAC) + // These are caused by the system, but not yet clear if they are false + // positives or bugs in the Mac LSAN runtime. Suppress while investigating. + // TODO(https://crbug.com/1320449): Remove these if/when fixed in macOS + // or the runtime. + "leak:_ensureAuxServiceAwareOfHostApp\n" + "leak:cssmErrorString\n" +#endif // PLEASE READ ABOVE BEFORE ADDING NEW SUPPRESSIONS. diff --git a/build/sanitizers/tsan_suppressions.cc b/build/sanitizers/tsan_suppressions.cc index 4b9acab..d90546e 100644 --- a/build/sanitizers/tsan_suppressions.cc +++ b/build/sanitizers/tsan_suppressions.cc @@ -30,32 +30,13 @@ char kTSanDefaultSuppressions[] = // Intentional race in ToolsSanityTest.DataRace in base_unittests. "race:base/tools_sanity_unittest.cc\n" - // Data race on WatchdogCounter [test-only]. - "race:base/threading/watchdog_unittest.cc\n" - // Data race caused by swapping out the network change notifier with a mock // [test-only]. http://crbug.com/927330. "race:content/browser/net_info_browsertest.cc\n" - // http://crbug.com/120808 - "race:base/threading/watchdog.cc\n" - - // http://crbug.com/157586 - "race:third_party/libvpx/source/libvpx/vp8/decoder/threading.c\n" - // http://crbug.com/244856 "race:libpulsecommon*.so\n" - // http://crbug.com/268924 - "race:base::g_power_monitor\n" - "race:base::PowerMonitor::PowerMonitor\n" - "race:base::PowerMonitor::AddObserver\n" - "race:base::PowerMonitor::RemoveObserver\n" - "race:base::PowerMonitor::IsOnBatteryPower\n" - - // http://crbug.com/308590 - "race:CustomThreadWatcher::~CustomThreadWatcher\n" - // http://crbug.com/476529 "deadlock:cc::VideoLayerImpl::WillDraw\n" @@ -71,14 +52,6 @@ char kTSanDefaultSuppressions[] = // http://crbug.com/380554 "deadlock:g_type_add_interface_static\n" - // http://crbug.com/397022 - "deadlock:" - "base::trace_event::TraceEventTestFixture_ThreadOnceBlocking_Test::" - "TestBody\n" - - // http://crbug.com/415472 - "deadlock:base::trace_event::TraceLog::GetCategoryGroupEnabled\n" - // Lock inversion in third party code, won't fix. // https://crbug.com/455638 "deadlock:dbus::Bus::ShutdownAndBlock\n" @@ -86,9 +59,6 @@ char kTSanDefaultSuppressions[] = // https://crbug.com/459429 "race:randomnessPid\n" - // http://crbug.com/633145 - "race:third_party/libjpeg_turbo/simd/jsimd_x86_64.c\n" - // http://crbug.com/691029 "deadlock:libGLX.so*\n" @@ -102,17 +72,6 @@ char kTSanDefaultSuppressions[] = // http://crbug.com/927330 "race:net::(anonymous namespace)::g_network_change_notifier\n" - // https://crbug.com/977085 - "race:vp3_update_thread_context\n" - - // Benign data race in libjpeg-turbo, won't fix - // (https://github.com/libjpeg-turbo/libjpeg-turbo/issues/87). - // https://crbug.com/1056011 - "race:third_party/libjpeg_turbo/simd/x86_64/jsimd.c\n" - - // https://crbug.com/1158622 - "race:absl::synchronization_internal::Waiter::Post\n" - // Harmless data races, see WTF::StringImpl::Release code comments. "race:scoped_refptr::AddRef\n" "race:scoped_refptr::Release\n" @@ -122,9 +81,9 @@ char kTSanDefaultSuppressions[] = "race:ipcz::BlockAllocator::Allocate\n" // https://crbug.com/1405439 - "race:perfetto::perfetto_track_event::internal::g_category_state_storage\n" + "race:*::perfetto_track_event::internal::g_category_state_storage\n" "race:perfetto::DataSource*::static_state_\n" - "race:perfetto::Tracing::ResetForTesting\n" + "race:perfetto::*::ResetForTesting\n" // In V8 each global safepoint might lock isolate mutexes in a different // order. This is allowed in this context as it is always guarded by a diff --git a/build/skia_gold_common/PRESUBMIT.py b/build/skia_gold_common/PRESUBMIT.py index f3cc772..2a57eae 100644 --- a/build/skia_gold_common/PRESUBMIT.py +++ b/build/skia_gold_common/PRESUBMIT.py @@ -7,7 +7,6 @@ for more details on the presubmit API built into depot_tools. """ -USE_PYTHON3 = True PRESUBMIT_VERSION = '2.0.0' @@ -29,9 +28,7 @@ def CheckSkiaGoldCommonUnittests(input_api, output_api): input_api, output_api, input_api.PresubmitLocalPath(), [r'^.+_unittest\.py$'], - env=_GetSkiaGoldEnv(input_api), - run_on_python2=False, - skip_shebang_check=True) + env=_GetSkiaGoldEnv(input_api)) def CheckPylint(input_api, output_api): diff --git a/build/skia_gold_common/output_managerless_skia_gold_session.py b/build/skia_gold_common/output_managerless_skia_gold_session.py index c91222a..bf1f6be 100644 --- a/build/skia_gold_common/output_managerless_skia_gold_session.py +++ b/build/skia_gold_common/output_managerless_skia_gold_session.py @@ -11,18 +11,12 @@ import time from typing import List, Tuple -import six - from skia_gold_common import skia_gold_session class OutputManagerlessSkiaGoldSession(skia_gold_session.SkiaGoldSession): def RunComparison(self, *args, **kwargs) -> skia_gold_session.StepRetVal: - # Passing True for the output manager is a bit of a hack, as we don't - # actually need an output manager and just need to get past the truthy - # check. assert 'output_manager' not in kwargs, 'Cannot specify output_manager' - kwargs['output_manager'] = True return super().RunComparison(*args, **kwargs) def _CreateDiffOutputDir(self, name: str) -> str: @@ -49,14 +43,13 @@ def _StoreDiffLinks(self, image_name: str, _, output_dir: str) -> None: elif f == 'diff.png': results.local_diff_diff_image = file_url + def _RequiresOutputManager(self) -> bool: + return False + @staticmethod def _RunCmdForRcAndOutput(cmd: List[str]) -> Tuple[int, str]: try: - output = subprocess.check_output(cmd, - stderr=subprocess.STDOUT).decode('utf-8') + output = subprocess.check_output(cmd, stderr=subprocess.STDOUT, text=True) return 0, output except subprocess.CalledProcessError as e: - output = e.output - if not isinstance(output, six.string_types): - output = output.decode('utf-8') - return e.returncode, output + return e.returncode, e.output diff --git a/build/skia_gold_common/output_managerless_skia_gold_session_unittest.py b/build/skia_gold_common/output_managerless_skia_gold_session_unittest.py index 11e8763..b2a16da 100755 --- a/build/skia_gold_common/output_managerless_skia_gold_session_unittest.py +++ b/build/skia_gold_common/output_managerless_skia_gold_session_unittest.py @@ -11,13 +11,7 @@ import tempfile from typing import Any import unittest - -import six - -if six.PY2: - import mock -else: - import unittest.mock as mock +import unittest.mock as mock from pyfakefs import fake_filesystem_unittest @@ -88,10 +82,7 @@ def test_explicitLocalPngDirectory(self, cmd_mock: mock.MagicMock, _) -> None: self._json_keys, '', '') _, _ = session.Diff('name', '', None) self.assertEqual(cmd_mock.call_count, 1) - if six.PY3: - call_args = cmd_mock.call_args.args[0] - else: - call_args = cmd_mock.call_args[0][0] + call_args = cmd_mock.call_args.args[0] self.assertIn('--out-dir', call_args) output_dir = call_args[call_args.index('--out-dir') + 1] # Directory should be a subdirectory of the directory we gave and be made diff --git a/build/skia_gold_common/skia_gold_properties.py b/build/skia_gold_common/skia_gold_properties.py index 91a24cb..feaf2cb 100644 --- a/build/skia_gold_common/skia_gold_properties.py +++ b/build/skia_gold_common/skia_gold_properties.py @@ -13,29 +13,41 @@ import logging import optparse import os -from typing import Union +import subprocess +import sys +from typing import Optional, Union + +CHROMIUM_SRC_DIR = os.path.realpath( + os.path.join(os.path.dirname(__file__), '..', '..')) ParsedCmdArgs = Union[argparse.Namespace, optparse.Values] +def _IsWin() -> bool: + return sys.platform == 'win32' + + class SkiaGoldProperties(): def __init__(self, args: ParsedCmdArgs): - """Abstract class to validate and store properties related to Skia Gold. + """Class to validate and store properties related to Skia Gold. + + The base implementation is usable on its own, but is meant to be overridden + as necessary. Args: args: The parsed arguments from an argparse.ArgumentParser. """ - self._git_revision = None - self._issue = None - self._patchset = None - self._job_id = None - self._local_pixel_tests = None - self._no_luci_auth = None - self._service_account = None - self._bypass_skia_gold_functionality = None - self._code_review_system = None - self._continuous_integration_system = None - self._local_png_directory = None + self._git_revision: Optional[str] = None + self._issue: Optional[int] = None + self._patchset: Optional[int] = None + self._job_id: Optional[str] = None + self._local_pixel_tests: Optional[bool] = None + self._no_luci_auth: Optional[bool] = None + self._service_account: Optional[str] = None + self._bypass_skia_gold_functionality: Optional[bool] = None + self._code_review_system: Optional[str] = None + self._continuous_integration_system: Optional[str] = None + self._local_png_directory: Optional[str] = None self._InitializeProperties(args) @@ -55,11 +67,11 @@ def git_revision(self) -> str: return self._GetGitRevision() @property - def issue(self) -> int: + def issue(self) -> Optional[int]: return self._issue @property - def job_id(self) -> str: + def job_id(self) -> Optional[str]: return self._job_id @property @@ -67,28 +79,36 @@ def local_pixel_tests(self) -> bool: return self._IsLocalRun() @property - def local_png_directory(self) -> str: + def local_png_directory(self) -> Optional[str]: return self._local_png_directory @property - def no_luci_auth(self) -> bool: + def no_luci_auth(self) -> Optional[bool]: return self._no_luci_auth @property - def service_account(self) -> str: + def service_account(self) -> Optional[str]: return self._service_account @property - def patchset(self) -> int: + def patchset(self) -> Optional[int]: return self._patchset @property - def bypass_skia_gold_functionality(self) -> bool: + def bypass_skia_gold_functionality(self) -> Optional[bool]: return self._bypass_skia_gold_functionality - @staticmethod - def _GetGitOriginMainHeadSha1() -> str: - raise NotImplementedError() + def _GetGitOriginMainHeadSha1(self) -> Optional[str]: + try: + return subprocess.check_output( + ['git', 'rev-parse', 'origin/main'], + shell=_IsWin(), + cwd=self._GetGitRepoDirectory()).decode('utf-8').strip() + except subprocess.CalledProcessError: + return None + + def _GetGitRepoDirectory(self) -> str: + return CHROMIUM_SRC_DIR def _GetGitRevision(self) -> str: if not self._git_revision: diff --git a/build/skia_gold_common/skia_gold_session.py b/build/skia_gold_common/skia_gold_session.py index b0b54a2..ff4ff2e 100644 --- a/build/skia_gold_common/skia_gold_session.py +++ b/build/skia_gold_common/skia_gold_session.py @@ -3,6 +3,7 @@ # found in the LICENSE file. """Class for interacting with the Skia Gold image diffing service.""" +import enum import logging import os import platform @@ -12,6 +13,8 @@ import time from typing import Any, Dict, List, Optional, Tuple +import dataclasses # Built-in, but pylint gives an ordering false positive. + from skia_gold_common import skia_gold_properties CHROMIUM_SRC = os.path.realpath( @@ -34,7 +37,8 @@ class SkiaGoldSession(): - class StatusCodes(): + @enum.unique + class StatusCodes(enum.IntEnum): """Status codes for RunComparison.""" SUCCESS = 0 AUTH_FAILURE = 1 @@ -44,16 +48,15 @@ class StatusCodes(): LOCAL_DIFF_FAILURE = 5 NO_OUTPUT_MANAGER = 6 + @dataclasses.dataclass class ComparisonResults(): """Struct-like object for storing results of an image comparison.""" - - def __init__(self): - self.public_triage_link: Optional[str] = None - self.internal_triage_link: Optional[str] = None - self.triage_link_omission_reason: Optional[str] = None - self.local_diff_given_image: Optional[str] = None - self.local_diff_closest_image: Optional[str] = None - self.local_diff_diff_image: Optional[str] = None + public_triage_link: Optional[str] = None + internal_triage_link: Optional[str] = None + triage_link_omission_reason: Optional[str] = None + local_diff_given_image: Optional[str] = None + local_diff_closest_image: Optional[str] = None + local_diff_diff_image: Optional[str] = None def __init__(self, working_dir: str, @@ -90,8 +93,8 @@ def __init__(self, dir=working_dir, delete=False) as triage_link_file: self._triage_link_file = triage_link_file.name - # A map of image name (string) to ComparisonResults for that image. - self._comparison_results = {} + # A map of image name to ComparisonResults for that image. + self._comparison_results: Dict[str, SkiaGoldSession.ComparisonResults] = {} self._authenticated = False self._initialized = False @@ -103,7 +106,7 @@ def __init__(self, def RunComparison(self, name: str, png_file: str, - output_manager: Any, + output_manager: Optional[Any] = None, inexact_matching_args: Optional[List[str]] = None, use_luci: bool = True, service_account: Optional[str] = None, @@ -163,7 +166,7 @@ def RunComparison(self, if not self._gold_properties.local_pixel_tests: return self.StatusCodes.COMPARISON_FAILURE_REMOTE, compare_stdout - if not output_manager: + if self._RequiresOutputManager() and not output_manager: return (self.StatusCodes.NO_OUTPUT_MANAGER, 'No output manager for local diff images') @@ -562,6 +565,10 @@ def _StoreDiffLinks(self, image_name: str, output_manager: Any, """ raise NotImplementedError() + def _RequiresOutputManager(self) -> bool: + """Whether this session implementation requires an output manager.""" + return True + @staticmethod def _RunCmdForRcAndOutput(cmd: List[str]) -> Tuple[int, str]: """Runs |cmd| and returns its returncode and output. diff --git a/build/skia_gold_common/skia_gold_session_manager.py b/build/skia_gold_common/skia_gold_session_manager.py index 976a72e..6d70ed9 100644 --- a/build/skia_gold_common/skia_gold_session_manager.py +++ b/build/skia_gold_common/skia_gold_session_manager.py @@ -5,22 +5,35 @@ import json import tempfile -from typing import Optional, Type, Union +from typing import Dict, Optional, Type, Union +from skia_gold_common import output_managerless_skia_gold_session from skia_gold_common import skia_gold_properties from skia_gold_common import skia_gold_session KeysInputType = Union[dict, str] +# { +# instance: { +# corpus: { +# keys_string: SkiaGoldSession, +# }, +# }, +# } +SessionMapType = Dict[str, Dict[str, Dict[str, + skia_gold_session.SkiaGoldSession]]] class SkiaGoldSessionManager(): def __init__(self, working_dir: str, gold_properties: skia_gold_properties.SkiaGoldProperties): - """Abstract class to manage one or more skia_gold_session.SkiaGoldSessions. + """Class to manage one or more skia_gold_session.SkiaGoldSessions. A separate session is required for each instance/corpus/keys_file combination, so this class will lazily create them as necessary. + The base implementation is usable on its own, but is meant to be overridden + as necessary. + Args: working_dir: The working directory under which each individual SkiaGoldSessions' working directory will be created. @@ -29,13 +42,14 @@ def __init__(self, working_dir: str, """ self._working_dir = working_dir self._gold_properties = gold_properties - self._sessions = {} - - def GetSkiaGoldSession(self, - keys_input: KeysInputType, - corpus: Optional[str] = None, - instance: Optional[str] = None, - bucket: Optional[str] = None): + self._sessions: SessionMapType = {} + + def GetSkiaGoldSession( + self, + keys_input: KeysInputType, + corpus: Optional[str] = None, + instance: Optional[str] = None, + bucket: Optional[str] = None) -> skia_gold_session.SkiaGoldSession: """Gets a SkiaGoldSession for the given arguments. Lazily creates one if necessary. @@ -86,7 +100,7 @@ def GetSessionClass() -> Type[skia_gold_session.SkiaGoldSession]: Returns: A reference to a SkiaGoldSession class. """ - raise NotImplementedError + return output_managerless_skia_gold_session.OutputManagerlessSkiaGoldSession def _GetKeysAsDict(keys_input: KeysInputType) -> dict: diff --git a/build/skia_gold_common/unittest_utils.py b/build/skia_gold_common/unittest_utils.py index 4fe23a9..d611350 100644 --- a/build/skia_gold_common/unittest_utils.py +++ b/build/skia_gold_common/unittest_utils.py @@ -8,37 +8,23 @@ import typing from typing import Optional -_SkiaGoldArgs = collections.namedtuple('_SkiaGoldArgs', [ - 'local_pixel_tests', - 'no_luci_auth', - 'service_account', - 'code_review_system', - 'continuous_integration_system', - 'git_revision', - 'gerrit_issue', - 'gerrit_patchset', - 'buildbucket_id', - 'bypass_skia_gold_functionality', - 'skia_gold_local_png_write_directory', -]) +import dataclasses # Built-in, but pylint gives an ordering false positive. -def createSkiaGoldArgs(local_pixel_tests: Optional[bool] = None, - no_luci_auth: Optional[bool] = None, - service_account: Optional[str] = None, - code_review_system: Optional[str] = None, - continuous_integration_system: Optional[str] = None, - git_revision: Optional[str] = None, - gerrit_issue: Optional[int] = None, - gerrit_patchset: Optional[int] = None, - buildbucket_id: Optional[int] = None, - bypass_skia_gold_functionality: Optional[bool] = None, - skia_gold_local_png_write_directory: Optional[str] = None - ) -> argparse.Namespace: - return typing.cast( - argparse.Namespace, - _SkiaGoldArgs(local_pixel_tests, no_luci_auth, service_account, - code_review_system, continuous_integration_system, - git_revision, gerrit_issue, gerrit_patchset, buildbucket_id, - bypass_skia_gold_functionality, - skia_gold_local_png_write_directory)) +@dataclasses.dataclass +class _SkiaGoldArgs(): + local_pixel_tests: Optional[bool] = None + no_luci_auth: Optional[bool] = None + service_account: Optional[str] = None + code_review_system: Optional[str] = None + continuous_integration_system: Optional[str] = None + git_revision: Optional[str] = None + gerrit_issue: Optional[int] = None + gerrit_patchset: Optional[int] = None + buildbucket_id: Optional[int] = None + bypass_skia_gold_functionality: Optional[bool] = None + skia_gold_local_png_write_directory: Optional[str] = None + + +def createSkiaGoldArgs(*args, **kwargs): + return typing.cast(argparse.Namespace, _SkiaGoldArgs(*args, **kwargs)) diff --git a/build/toolchain/android/BUILD.gn b/build/toolchain/android/BUILD.gn index 20257d9..cf347f4 100644 --- a/build/toolchain/android/BUILD.gn +++ b/build/toolchain/android/BUILD.gn @@ -20,41 +20,16 @@ template("android_clang_toolchain") { assert(defined(invoker.toolchain_args), "toolchain_args must be defined for android_clang_toolchain()") - # Android toolchains need to declare .dwp files as outputs, so need to know - # the value of "use_debug_fission" when defining them. - # The derived value of "use_debug_fission" varies based on current_os, but - # toolchain definitions are evaluated under the default toolchain. - # Rather than computing the value under current_os="android", just disable - # it if target_os != "android". - _use_debug_fission = use_debug_fission && target_os == "android" - toolchain_args = { forward_variables_from(invoker.toolchain_args, "*") current_os = "android" - use_debug_fission = _use_debug_fission + use_debug_fission = false } # Output linker map files for binary size analysis. enable_linker_map = true strip = rebase_path("$clang_base_path/bin/llvm-strip", root_build_dir) - if (_use_debug_fission) { - # llvm-dwp does not work with thin lto, so use binutils one. - # https://crbug.com/1264130 - if (toolchain_args.current_cpu == "arm") { - _dwp = "arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-dwp" - } else if (toolchain_args.current_cpu == "arm64") { - _dwp = "aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin/aarch64-linux-android-dwp" - } else if (toolchain_args.current_cpu == "x86") { - _dwp = "x86-4.9/prebuilt/linux-x86_64/bin/i686-linux-android-dwp" - } else if (toolchain_args.current_cpu == "x64") { - _dwp = "x86_64-4.9/prebuilt/linux-x86_64/bin/x86_64-linux-android-dwp" - } else { - _dwp = "llvm/prebuilt/linux-x86_64/bin/llvm-dwp" - } - - dwp = rebase_path("$android_ndk_root/toolchains/$_dwp", root_build_dir) - } use_unstripped_as_runtime_outputs = android_unstripped_runtime_outputs @@ -74,12 +49,6 @@ android_clang_toolchain("android_clang_x86") { toolchain_args = { current_cpu = "x86" - # We lack the libclang_rt.profile library for x86 and x86_64, so we cannot - # link any binaries that are generated with coverage instrumentation. - # Therefore we need to turn off 'use_clang_coverage' for this toolchain. - # TODO(crbug.com/865376) - use_clang_coverage = false - # This turns off all of the LaCrOS-specific flags. A LaCrOS related build # may use |ash_clang_x64| or |lacros_clang_x64| toolchain, which are # chromeos toolchains, to build Ash-Chrome or Lacros-Chrome in a @@ -110,12 +79,6 @@ android_clang_toolchain("android_clang_x64") { toolchain_args = { current_cpu = "x64" - # We lack the libclang_rt.profile library for x86 and x86_64, so we cannot - # link any binaries that are generated with coverage instrumentation. - # Therefore we need to turn off 'use_clang_coverage' for this toolchain. - # TODO(crbug.com/865376) - use_clang_coverage = false - # This turns off all of the LaCrOS-specific flags. A LaCrOS related build # may use |ash_clang_x64| or |lacros_clang_x64| toolchain, which are # chromeos toolchains, to build Ash-Chrome or Lacros-Chrome in a @@ -150,6 +113,13 @@ android_clang_toolchain("android_clang_mips64el") { } } +# Placeholder for riscv64 support, not tested since the toolchain is not ready. +android_clang_toolchain("android_clang_riscv64") { + toolchain_args = { + current_cpu = "riscv64" + } +} + # Toolchain for creating native libraries that can be used by # robolectric_binary targets. It does not emulate NDK APIs nor make available # NDK header files. diff --git a/build/toolchain/apple/linker_driver.py b/build/toolchain/apple/linker_driver.py index 9827770..0632230 100755 --- a/build/toolchain/apple/linker_driver.py +++ b/build/toolchain/apple/linker_driver.py @@ -6,13 +6,20 @@ import os import os.path +import re import shutil import subprocess import sys import tempfile +# The path to `whole_archive`. +sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), '..')) + +import whole_archive + # Prefix for all custom linker driver arguments. LINKER_DRIVER_ARG_PREFIX = '-Wcrl,' +LINKER_DRIVER_COMPILER_ARG_PREFIX = '-Wcrl,driver,' # Linker action to create a directory and pass it to the linker as # `-object_path_lto`. Special-cased since it has to run before the link. OBJECT_PATH_LTO = 'object_path_lto' @@ -20,16 +27,21 @@ # The linker_driver.py is responsible for forwarding a linker invocation to # the compiler driver, while processing special arguments itself. # -# Usage: linker_driver.py clang++ main.o -L. -llib -o prog -Wcrl,dsym,out +# Usage: linker_driver.py -Wcrl,driver,clang++ main.o -L. -llib -o prog \ +# -Wcrl,dsym,out # # On Mac, the logical step of linking is handled by three discrete tools to # perform the image link, debug info link, and strip. The linker_driver.py # combines these three steps into a single tool. # -# The command passed to the linker_driver.py should be the compiler driver -# invocation for the linker. It is first invoked unaltered (except for the -# removal of the special driver arguments, described below). Then the driver -# performs additional actions, based on these arguments: +# The compiler driver invocation for the linker is specified by the following +# required argument. +# +# -Wcrl,driver, +# Specifies the path to the compiler driver. +# +# After running the compiler driver, the script performs additional actions, +# based on these arguments: # # -Wcrl,installnametoolpath, # Sets the path to the `install_name_tool` to run with @@ -63,19 +75,8 @@ # -Wcrl,strippath, # Sets the path to the strip to run with -Wcrl,strip, in which case # `xcrun` is not used to invoke it. -# TODO(crbug.com/1337780): Remove 'persist' when iOS no longer builds universal -# binaries. -# -Wcrl,object_path_lto,(optional) -# Creates temporary directory for LTO object files. If `persist` is passed -# the directory is named after the linker output and it's expected that a -# later invocation will pass `-Wcrl,clean_objects,` to clean it -# up. Otherwise, the temp directory is deleted at the end of this run. -# TODO(crbug.com/1337780): Remove this action when iOS no longer builds -# universal binaries. -# -Wcrl,clean_objects, -# Cleans up LTO object file directories for the targets in arguments. -# For each argument, looks for and deletes a directory at -# "{argument}.lto_objects" +# -Wcrl,object_path_lto +# Creates temporary directory for LTO object files. class LinkerDriver(object): @@ -85,8 +86,6 @@ def __init__(self, args): Args: args: list of string, Arguments to the script. """ - if len(args) < 2: - raise RuntimeError("Usage: linker_driver.py [linker-invocation]") self._args = args # List of linker driver actions. **The sort order of this list affects @@ -101,10 +100,10 @@ def __init__(self, args): ('unstripped,', self.run_save_unstripped), ('strippath,', self.set_strip_path), ('strip,', self.run_strip), - ('clean_objects', self.run_clean_objects), ] # Linker driver actions can modify the these values. + self._driver_path = None # Must be specified on the command line. self._install_name_tool_cmd = ['xcrun', 'install_name_tool'] self._dsymutil_cmd = ['xcrun', 'dsymutil'] self._strip_cmd = ['xcrun', 'strip'] @@ -113,10 +112,6 @@ def __init__(self, args): self._linker_output = None # The temporary directory for intermediate LTO object files. If it # exists, it will clean itself up on script exit. - self._object_path_lto_temp = None - # The path for intermediate LTO object files. This is either the name - # of `self._object_path_lto_temp` or a named directory that will be - # cleaned up in a future invocation. self._object_path_lto = None def run(self): @@ -130,21 +125,42 @@ def run(self): linker_driver_actions = {} compiler_driver_args = [] for index, arg in enumerate(self._args[1:]): - if arg.startswith(LINKER_DRIVER_ARG_PREFIX): + if arg.startswith(LINKER_DRIVER_COMPILER_ARG_PREFIX): + assert not self._driver_path + self._driver_path = arg[len(LINKER_DRIVER_COMPILER_ARG_PREFIX + ):] + elif arg.startswith(LINKER_DRIVER_ARG_PREFIX): # Convert driver actions into a map of name => lambda to invoke. driver_action = self._process_driver_arg(arg) assert driver_action[0] not in linker_driver_actions linker_driver_actions[driver_action[0]] = driver_action[1] else: - compiler_driver_args.append(arg) + # TODO(crbug.com/1446796): On Apple, the linker command line + # produced by rustc for LTO includes these arguments, but the + # Apple linker doesn't accept them. + # Upstream bug: https://github.com/rust-lang/rust/issues/60059 + BAD_RUSTC_ARGS = '-Wl,-plugin-opt=O[0-9],-plugin-opt=mcpu=.*' + if not re.match(BAD_RUSTC_ARGS, arg): + compiler_driver_args.append(arg) + + if not self._driver_path: + raise RuntimeError( + "Usage: linker_driver.py -Wcrl,driver, " + "[linker-args]...") if self._object_path_lto is not None: compiler_driver_args.append('-Wl,-object_path_lto,{}'.format( - self._object_path_lto)) + os.path.relpath(self._object_path_lto.name))) if self._get_linker_output() is None: raise ValueError( 'Could not find path to linker output (-o or --output)') + # We want to link rlibs as --whole-archive if they are part of a unit + # test target. This is determined by switch + # `-LinkWrapper,add-whole-archive`. + compiler_driver_args = whole_archive.wrap_with_whole_archive( + compiler_driver_args, is_apple=True) + linker_driver_outputs = [self._get_linker_output()] try: @@ -153,7 +169,8 @@ def run(self): env = os.environ.copy() env['ZERO_AR_DATE'] = '1' # Run the linker by invoking the compiler driver. - subprocess.check_call(compiler_driver_args, env=env) + subprocess.check_call([self._driver_path] + compiler_driver_args, + env=env) # Run the linker driver actions, in the order specified by the # actions list. @@ -199,17 +216,8 @@ def _process_driver_arg(self, arg): # TODO(lgrey): Remove if/when we start running `dsymutil` # through the clang driver. See https://crbug.com/1324104 if sub_arg == OBJECT_PATH_LTO: - self._object_path_lto_temp = tempfile.TemporaryDirectory( + self._object_path_lto = tempfile.TemporaryDirectory( dir=os.getcwd()) - self._object_path_lto = self._object_path_lto_temp.name - return (OBJECT_PATH_LTO, lambda: []) - elif sub_arg.startswith(OBJECT_PATH_LTO): - assert sub_arg[len(OBJECT_PATH_LTO):] == ',persist' - output = self._get_linker_output() - assert output - self._object_path_lto = output + '.lto_objects' - _remove_path(self._object_path_lto) - os.mkdir(self._object_path_lto) return (OBJECT_PATH_LTO, lambda: []) for driver_action in self._actions: @@ -354,25 +362,6 @@ def set_strip_path(self, strip_path): self._strip_cmd = [strip_path] return [] - def run_clean_objects(self, args_string): - """Linker driver action for -Wcrl,clean_objects,. - - For each argument, looks for a directory called "${argument}.lto_objects - and deletes it. - - Args: - arguments: string, Comma-separated prefixes of LTO object - directories to clean up - - Returns: - No output - """ - for output in args_string.lstrip(',').split(','): - name = output + '.lto_objects' - assert os.path.isdir(name) - shutil.rmtree(name) - return [] - def _find_tools_paths(full_args): """Finds all paths where the script should look for additional tools.""" diff --git a/build/toolchain/apple/toolchain.gni b/build/toolchain/apple/toolchain.gni index b1d4aa8..bdc8eda 100644 --- a/build/toolchain/apple/toolchain.gni +++ b/build/toolchain/apple/toolchain.gni @@ -23,6 +23,7 @@ import("//build_overrides/build.gni") # once the support is available. if (is_ios) { import("//build/config/ios/config.gni") + import("//build/config/ios/ios_sdk.gni") } assert((target_os == "ios" && host_os == "mac") || host_os != "win") @@ -45,12 +46,14 @@ _can_use_hermetic_swift = build_with_chromium && is_ios && target_environment != "catalyst" if (swift_toolchain_path == -1) { - if (_can_use_hermetic_swift) { + # TODO(crbug.com/1451611) The custom swift toolchain not does currently work + # with Xcode 15 beta 1. + if (_can_use_hermetic_swift && !(is_ios && xcode_version_int >= 1500)) { # Version of the hermetic compiler. Needs to be updated when a new version of # the compiler is rolled to ensure that all outputs are regenerated. It must # be kept in sync with the `version` of `third_party/swift-toolchain` in # //DEPS. - swiftc_version = "swift-5.7-release" + swiftc_version = "swift-5.8-release" # Use the hermetic swift toolchain. swift_toolchain_path = "//third_party/swift-toolchain/" @@ -87,8 +90,8 @@ tool_versions = # Shared toolchain definition. Invocations should set current_os to set the # build args in this definition. This is titled "single_apple_toolchain" # because it makes exactly one toolchain. Callers will normally want to -# invoke instead "apple_toolchain" which may make an additional toolchain -# without sanitizers. +# invoke instead "apple_toolchain" which makes an additional toolchain for +# Rust targets that are build-time artificts such as proc macros. template("single_apple_toolchain") { toolchain(target_name) { # When invoking this toolchain not as the default one, these args will be @@ -104,10 +107,6 @@ template("single_apple_toolchain") { # ensure that it's always the same, regardless of the values that may be # set on those toolchains. host_toolchain = host_toolchain - - # Similarly for the host toolchain which can be used to make .dylibs - # that will successfully load into prebuilt tools. - host_toolchain_no_sanitizers = host_toolchain_no_sanitizers } # When the invoker has explicitly overridden use_goma or cc_wrapper in the @@ -226,26 +225,17 @@ template("single_apple_toolchain") { cxx = "$python_path $_coverage_wrapper ${cxx}" } + linker_driver_env = "TOOL_VERSION=${tool_versions.linker_driver}" linker_driver = - "TOOL_VERSION=${tool_versions.linker_driver} " + rebase_path("//build/toolchain/apple/linker_driver.py", root_build_dir) + linker_driver_args = "-Wcrl,driver,$ld" # Specify an explicit path for the strip binary. _strippath = invoker.bin_path + "strip" _installnametoolpath = invoker.bin_path + "install_name_tool" - linker_driver += " -Wcrl,strippath,${_strippath} -Wcrl,installnametoolpath,${_installnametoolpath}" - - # On iOS, the final applications are assembled using lipo (to support fat - # builds). The correct flags are passed to the linker_driver.py script - # directly during the lipo call. The test is against the target_os because - # there is no need to create .dSYMs for targets compiled for the host. - if (defined(invoker.strip_with_lipo) && invoker.strip_with_lipo) { - _enable_dsyms = false - _save_unstripped_output = false - } else { - _enable_dsyms = enable_dsyms - _save_unstripped_output = save_unstripped_output - } + linker_driver_args += " -Wcrl,strippath,${_strippath} -Wcrl,installnametoolpath,${_installnametoolpath}" + _enable_dsyms = enable_dsyms + _save_unstripped_output = save_unstripped_output # Make these apply to all tools below. lib_switch = "-l" @@ -283,66 +273,136 @@ template("single_apple_toolchain") { if (!defined(rust_compiler_prefix)) { rust_compiler_prefix = "" } - rustc_bin = rebase_path("${rust_sysroot}/bin/rustc", root_build_dir) + rust_sysroot_relative = rebase_path(rust_sysroot, root_build_dir) + rustc_bin = "$rust_sysroot_relative/bin/rustc" rustc = "$rust_compiler_prefix${rustc_bin}" - rust_sysroot_relative_to_out = rebase_path(rust_sysroot, root_out_dir) - rustc_wrapper = rebase_path("//build/rust/rustc_wrapper.py") + rustc_wrapper = + rebase_path("//build/rust/rustc_wrapper.py", root_build_dir) tool("rust_staticlib") { - rust_outfile = "{{output_dir}}/{{target_output_name}}.a" - depfile = "{{output}}.d" - rspfile = "$rust_outfile.rsp" - rspfile_content = "{{rustdeps}} {{externs}}" - command = "$python_path \"$rustc_wrapper\" --rustc=$rustc --depfile=$depfile --rsp=$rspfile -- -Clinker=\"$_cxx\" $rustc_common_args --emit=dep-info=$depfile,link -o $rust_outfile LDFLAGS RUSTENV {{rustenv}}" - description = "RUST $rust_outfile" - rust_sysroot = rust_sysroot_relative_to_out - outputs = [ rust_outfile ] + libname = "{{output_dir}}/{{target_output_name}}{{output_extension}}" + rspfile = "$libname.rsp" + depfile = "$libname.d" + + default_output_extension = ".a" + output_prefix = "lib" + default_output_dir = "{{root_out_dir}}" + description = "RUST(STATICLIB) {{output}}" + outputs = [ libname ] + + # TODO(danakj): When `!toolchain_uses_lld` do we need to specify a path + # to libtool like the "alink" rule? + + rspfile_content = "{{rustdeps}} {{externs}} SOURCES {{sources}}" + command = "\"$python_path\" \"$rustc_wrapper\" --rustc=$rustc --depfile=$depfile --rsp=$rspfile -- -Clinker=\"$_cxx\" $rustc_common_args --emit=dep-info=$depfile,link -o $libname LDFLAGS RUSTENV {{rustenv}}" + rust_sysroot = rust_sysroot_relative } tool("rust_rlib") { - rust_outfile = "{{output_dir}}/lib{{target_output_name}}.rlib" - depfile = "{{output}}.d" - - # Do not use rsp files in this (common) case because they occupy the - # ninja main thread, and {{rlibs}} have shorter command lines than - # fully linked targets. - command = "$python_path \"$rustc_wrapper\" --rustc=$rustc --depfile=$depfile -- -Clinker=\"$_cxx\" $rustc_common_args {{rustdeps}} {{externs}} --emit=dep-info=$depfile,link -o $rust_outfile LDFLAGS RUSTENV {{rustenv}}" - description = "RUST $rust_outfile" - rust_sysroot = rust_sysroot_relative_to_out - outputs = [ rust_outfile ] + # We must always prefix with `lib` even if the library already starts + # with that prefix or else our stdlib is unable to find libc.rlib (or + # actually liblibc.rlib). + rlibname = + "{{output_dir}}/lib{{target_output_name}}{{output_extension}}" + rspfile = "$rlibname.rsp" + depfile = "$rlibname.d" + + default_output_extension = ".rlib" + + # This is prefixed unconditionally in `rlibname`. + # output_prefix = "lib" + default_output_dir = "{{root_out_dir}}" + description = "RUST {{output}}" + outputs = [ rlibname ] + + rspfile_content = "{{rustdeps}} {{externs}} SOURCES {{sources}}" + command = "\"$python_path\" \"$rustc_wrapper\" --rustc=$rustc --depfile=$depfile --rsp=$rspfile -- -Clinker=\"$_cxx\" $rustc_common_args {{rustdeps}} {{externs}} --emit=dep-info=$depfile,link -o $rlibname LDFLAGS RUSTENV {{rustenv}}" + rust_sysroot = rust_sysroot_relative } tool("rust_bin") { - rust_outfile = "{{root_out_dir}}/{{target_output_name}}" - depfile = "{{output}}.d" - rspfile = "$rust_outfile.rsp" - rspfile_content = "{{rustdeps}} {{externs}}" - command = "$python_path \"$rustc_wrapper\" --rustc=$rustc --depfile=$depfile --rsp=$rspfile -- -Clinker=\"${_cxx}\" $rustc_common_args --emit=dep-info=$depfile,link -o $rust_outfile LDFLAGS {{ldflags}} RUSTENV {{rustenv}}" - description = "RUST $rust_outfile" - rust_sysroot = rust_sysroot_relative_to_out - outputs = [ rust_outfile ] + exename = "{{output_dir}}/{{target_output_name}}{{output_extension}}" + rspfile = "$exename.rsp" + depfile = "$exename.d" + pool = "//build/toolchain:link_pool($default_toolchain)" + + # TODO(danakj): solink can generate TOC files for re-exporting library + # symbols, and we should do the same here. + + default_output_dir = "{{root_out_dir}}" + description = "RUST(BIN) {{output}}" + outputs = [ exename ] + + # TODO(danakj): Support dsym_switch like C++ targets. + # link_command += dsym_switch + # if (_enable_dsyms) { + # outputs += dsym_output + # } + # if (_save_unstripped_output) { + # outputs += [ _unstripped_output ] + # } + + rspfile_content = "{{rustdeps}} {{externs}} SOURCES {{sources}}" + command = "$linker_driver_env \"$python_path\" \"$rustc_wrapper\" --rustc=$rustc --depfile=$depfile --rsp=$rspfile -- -Clinker=\"$linker_driver\" $rustc_common_args --emit=dep-info=$depfile,link -o $exename LDFLAGS $linker_driver_args {{ldflags}} RUSTENV {{rustenv}}" + rust_sysroot = rust_sysroot_relative } tool("rust_cdylib") { - rust_outfile = "{{output_dir}}/lib{{target_output_name}}.dylib" - depfile = "{{output}}.d" - rspfile = "$rust_outfile.rsp" - rspfile_content = "{{rustdeps}} {{externs}}" - command = "$python_path \"$rustc_wrapper\" --rustc=$rustc --depfile=$depfile --rsp=$rspfile -- -Clinker=\"${_cxx}\" $rustc_common_args --emit=dep-info=$depfile,link -o $rust_outfile LDFLAGS {{ldflags}} RUSTENV {{rustenv}}" - description = "RUST $rust_outfile" - rust_sysroot = rust_sysroot_relative_to_out - outputs = [ rust_outfile ] + dllname = "{{output_dir}}/{{target_output_name}}{{output_extension}}" + rspfile = "$dllname.rsp" + depfile = "$dllname.d" + pool = "//build/toolchain:link_pool($default_toolchain)" + + # TODO(danakj): solink can generate TOC files for re-exporting library + # symbols, and we should do the same here. + + default_output_extension = ".dylib" + output_prefix = "lib" + default_output_dir = "{{root_out_dir}}" + description = "RUST(CDYLIB) {{output}}" + outputs = [ dllname ] + + # TODO(danakj): Support dsym_switch like C++ targets. + # link_command += dsym_switch + # if (_enable_dsyms) { + # outputs += dsym_output + # } + # if (_save_unstripped_output) { + # outputs += [ _unstripped_output ] + # } + + rspfile_content = "{{rustdeps}} {{externs}} SOURCES {{sources}}" + command = "$linker_driver_env \"$python_path\" \"$rustc_wrapper\" --rustc=$rustc --depfile=$depfile --rsp=$rspfile -- -Clinker=\"$linker_driver\" $rustc_common_args --emit=dep-info=$depfile,link -o $dllname LDFLAGS $linker_driver_args {{ldflags}} RUSTENV {{rustenv}}" + rust_sysroot = rust_sysroot_relative } tool("rust_macro") { - rust_outfile = "{{output_dir}}/lib{{target_output_name}}.dylib" - depfile = "{{output}}.d" - rspfile = "$rust_outfile.rsp" - rspfile_content = "{{rustdeps}} {{externs}}" - command = "$python_path \"$rustc_wrapper\" --rustc=$rustc --depfile=$depfile --rsp=$rspfile -- -Clinker=\"${_cxx}\" $rustc_common_args --emit=dep-info=$depfile,link -o $rust_outfile LDFLAGS {{ldflags}} RUSTENV {{rustenv}}" - description = "RUST $rust_outfile" - rust_sysroot = rust_sysroot_relative_to_out - outputs = [ rust_outfile ] + dllname = "{{output_dir}}/{{target_output_name}}{{output_extension}}" + rspfile = "$dllname.rsp" + depfile = "$dllname.d" + pool = "//build/toolchain:link_pool($default_toolchain)" + + # TODO(danakj): solink can generate TOC files for re-exporting library + # symbols, and we should do the same here. + + default_output_extension = ".dylib" + output_prefix = "lib" + default_output_dir = "{{root_out_dir}}" + description = "RUST(MACRO) {{output}}" + outputs = [ dllname ] + + # TODO(danakj): Support dsym_switch like C++ targets. + # link_command += dsym_switch + # if (_enable_dsyms) { + # outputs += dsym_output + # } + # if (_save_unstripped_output) { + # outputs += [ _unstripped_output ] + # } + + rspfile_content = "{{rustdeps}} {{externs}} SOURCES {{sources}}" + command = "\"$python_path\" \"$rustc_wrapper\" --rustc=$rustc --depfile=$depfile --rsp=$rspfile -- -Clinker=\"${_cxx}\" $rustc_common_args --emit=dep-info=$depfile,link -o $dllname LDFLAGS {{ldflags}} RUSTENV {{rustenv}}" + rust_sysroot = rust_sysroot_relative } } @@ -449,19 +509,21 @@ template("single_apple_toolchain") { does_reexport_command = "[ ! -e \"$dylib\" -o ! -e \"$tocname\" ] || $otool -l \"$dylib\" | grep -q LC_REEXPORT_DYLIB" - link_command = "$linker_driver $ld -shared " + link_command = + "$linker_driver_env $linker_driver $linker_driver_args -shared " if (toolchain_is_component_build) { link_command += " -Wl,-install_name,@rpath/\"{{target_output_name}}{{output_extension}}\" " } link_command += dsym_switch - link_command += "{{ldflags}} -o \"$dylib\" \"@$rspfile\"" + link_command += "{{ldflags}} -o \"$dylib\" \"@$rspfile\" {{rlibs}}" replace_command = "if ! cmp -s \"$temporary_tocname\" \"$tocname\"; then mv \"$temporary_tocname\" \"$tocname\"" extract_toc_command = "{ $otool -l \"$dylib\" | grep LC_ID_DYLIB -A 5; $nm -gPp \"$dylib\" | cut -f1-2 -d' ' | grep -v U\$\$; true; }" command = "if $does_reexport_command ; then $link_command && $extract_toc_command > \"$tocname\"; else $link_command && $extract_toc_command > \"$temporary_tocname\" && $replace_command ; fi; fi" - rspfile_content = "{{inputs}} {{frameworks}} {{swiftmodules}} {{solibs}} {{libs}} {{rlibs}}" + rspfile_content = + "{{inputs}} {{frameworks}} {{swiftmodules}} {{solibs}} {{libs}}" description = "SOLINK {{output}}" @@ -501,12 +563,12 @@ template("single_apple_toolchain") { rspfile = sofile + ".rsp" pool = "//build/toolchain:link_pool($default_toolchain)" - link_command = - "$linker_driver $ld -bundle {{ldflags}} -o \"$sofile\" \"@$rspfile\"" + link_command = "$linker_driver_env $linker_driver $linker_driver_args -bundle {{ldflags}} -o \"$sofile\" \"@$rspfile\" {{rlibs}}" link_command += dsym_switch command = link_command - rspfile_content = "{{inputs}} {{frameworks}} {{swiftmodules}} {{solibs}} {{libs}} {{rlibs}}" + rspfile_content = + "{{inputs}} {{frameworks}} {{swiftmodules}} {{solibs}} {{libs}}" description = "SOLINK_MODULE {{output}}" @@ -531,9 +593,10 @@ template("single_apple_toolchain") { rspfile = "$outfile.rsp" pool = "//build/toolchain:link_pool($default_toolchain)" - command = "$linker_driver $ld $dsym_switch {{ldflags}} -o \"$outfile\" \"@$rspfile\"" + command = "$linker_driver_env $linker_driver $linker_driver_args $dsym_switch {{ldflags}} -o \"$outfile\" \"@$rspfile\" {{rlibs}}" description = "LINK $outfile" - rspfile_content = "{{inputs}} {{frameworks}} {{swiftmodules}} {{solibs}} {{libs}} {{rlibs}}" + rspfile_content = + "{{inputs}} {{frameworks}} {{swiftmodules}} {{solibs}} {{libs}}" outputs = [ outfile ] if (_enable_dsyms) { @@ -570,7 +633,7 @@ template("single_apple_toolchain") { if (host_os == "mac") { command = "rm -rf {{output}} && /bin/cp -Rc {{source}} {{output}}" } else { - command = "rm -rf {{output}} && /bin/cp -Rl {{source}} {{output}}" + command = "rm -rf {{output}} && /bin/cp -Rld {{source}} {{output}}" } description = "COPY_BUNDLE_DATA {{source}} {{output}}" pool = "//build/toolchain/apple:bundle_pool($default_toolchain)" @@ -706,7 +769,6 @@ template("single_apple_toolchain") { "-module-path {{target_gen_dir}}/{{module_name}}.swiftmodule " + "-header-path {{target_gen_dir}}/{{target_output_name}}.h " + "-depfile {{target_out_dir}}/{{module_name}}.d " + - "-depfile-filter {{target_gen_dir}}/{{module_name}}.swiftmodule " + "-bridge-header {{bridge_header}} $_extra_flags " + "{{swiftflags}} {{include_dirs}} {{module_dirs}} {{inputs}}" } @@ -744,8 +806,9 @@ template("single_apple_toolchain") { } } -# Makes a single Apple toolchain, or possibly two if we need a -# sanitizer-free equivalent. +# Makes an Apple toolchain for the target, and an equivalent toolchain with the +# prebuilt Rust stdlib for building proc macros (and other for-build-use +# artifacts). template("apple_toolchain") { single_apple_toolchain(target_name) { assert(defined(invoker.toolchain_args), @@ -761,9 +824,16 @@ template("apple_toolchain") { # toolchains, but presubmit checks require that we explicitly exclude them } - if (using_sanitizer) { - # Make an additional toolchain with no sanitizers. - single_apple_toolchain("${target_name}_no_sanitizers") { + if (enable_rust && current_toolchain == default_toolchain) { + # Make an additional toolchain which is used for making tools that are run + # on the host machine as part of the build process (such as proc macros + # and Cargo build scripts). This toolchain uses the prebuilt stdlib that + # comes with the compiler, so it doesn't have to wait for the stdlib to be + # built before building other stuff. And this ensures its proc macro + # outputs have the right ABI to be loaded by the compiler, and it can be + # used to compile build scripts that are part of the stdlib that is built + # for the default toolchain. + single_apple_toolchain("${target_name}_for_rust_host_build_tools") { assert(defined(invoker.toolchain_args), "Toolchains must declare toolchain_args") forward_variables_from(invoker, @@ -776,7 +846,16 @@ template("apple_toolchain") { toolchain_args = { # Populate toolchain args from the invoker. forward_variables_from(invoker.toolchain_args, "*") - toolchain_disables_sanitizers = true + toolchain_for_rust_host_build_tools = true + + # The host build tools are static release builds to make the Chromium + # build faster. They do not need PGO etc, so no official builds. + is_debug = false + is_component_build = false + is_official_build = false + use_clang_coverage = false + use_sanitizer_coverage = false + generate_linker_map = false } } } diff --git a/build/toolchain/clang_code_coverage_wrapper.py b/build/toolchain/clang_code_coverage_wrapper.py index 5c90901..5490582 100755 --- a/build/toolchain/clang_code_coverage_wrapper.py +++ b/build/toolchain/clang_code_coverage_wrapper.py @@ -44,8 +44,13 @@ Example usage: clang_code_coverage_wrapper.py \\ --files-to-instrument=coverage_instrumentation_input.txt -""" +Siso implements the same logic in +build/config/siso/clang_code_coverage_wrapper.star, which avoids the wrapper +invocations for remote execution and performance improvement. +Please update the Siso starlark file when updating this file. +""" +# LINT.IfChange import argparse import os @@ -67,13 +72,7 @@ ] # Files that should not be built with coverage flags by default. -_DEFAULT_COVERAGE_EXCLUSION_LIST = [ - # TODO(crbug.com/1051561): angle_unittests affected by coverage. - '../../base/message_loop/message_pump_default.cc', - '../../base/message_loop/message_pump_libevent.cc', - '../../base/message_loop/message_pump_win.cc', - '../../base/task/sequence_manager/thread_controller_with_message_pump_impl.cc', #pylint: disable=line-too-long -] +_DEFAULT_COVERAGE_EXCLUSION_LIST = [] # Map of exclusion lists indexed by target OS. # If no target OS is defined, or one is defined that doesn't have a specific @@ -100,11 +99,6 @@ '../../components/media_router/common/providers/cast/channel/cast_message_util.cc', #pylint: disable=line-too-long '../../components/media_router/common/providers/cast/cast_media_source.cc', #pylint: disable=line-too-long '../../ui/events/keycodes/dom/keycode_converter.cc', - # TODO(crbug.com/1051561): angle_unittests affected by coverage. - '../../base/message_loop/message_pump_default.cc', - '../../base/message_loop/message_pump_libevent.cc', - '../../base/message_loop/message_pump_win.cc', - '../../base/task/sequence_manager/thread_controller_with_message_pump_impl.cc', #pylint: disable=line-too-long ], 'chromeos': [ # These files caused clang to crash while compiling them. They are @@ -113,18 +107,6 @@ '../../third_party/icu/source/common/uts46.cpp', '../../third_party/icu/source/common/ucnvmbcs.cpp', '../../base/android/android_image_reader_compat.cc', - # TODO(crbug.com/1051561): angle_unittests affected by coverage. - '../../base/message_loop/message_pump_default.cc', - '../../base/message_loop/message_pump_libevent.cc', - '../../base/message_loop/message_pump_win.cc', - '../../base/task/sequence_manager/thread_controller_with_message_pump_impl.cc', #pylint: disable=line-too-long - ], - 'win': [ - # TODO(crbug.com/1051561): angle_unittests affected by coverage. - '../../base/message_loop/message_pump_default.cc', - '../../base/message_loop/message_pump_libevent.cc', - '../../base/message_loop/message_pump_win.cc', - '../../base/task/sequence_manager/thread_controller_with_message_pump_impl.cc', #pylint: disable=line-too-long ], } @@ -238,3 +220,5 @@ def main(): if __name__ == '__main__': sys.exit(main()) + +# LINT.ThenChange(/build/config/siso/clang_code_coverage_wrapper.star) diff --git a/build/toolchain/cros/BUILD.gn b/build/toolchain/cros/BUILD.gn index c815e1a..12b82ee 100644 --- a/build/toolchain/cros/BUILD.gn +++ b/build/toolchain/cros/BUILD.gn @@ -134,6 +134,7 @@ cros_toolchain("nacl_bootstrap") { cc = cros_nacl_helper_arm32_cc cxx = cros_nacl_helper_arm32_cxx ld = cros_nacl_helper_arm32_ld + # Avoid accidental use of Arm64 sysroot because of SYSROOT # env variable set in ChromeOS builds. toolchain_args.sysroot = cros_nacl_helper_arm32_sysroot @@ -278,6 +279,12 @@ if (also_build_lacros_chrome_for_architecture != "") { also_build_lacros_chrome_for_architecture = "" chromeos_is_browser_only = true use_clang_coverage = false + + # Do not propagate AFDO settings from Ash build to Lacros build. + # Specifically, Lacros uses PGO by default, so this would + # conflict. + clang_use_default_sample_profile = false + clang_sample_profile_path = "" } if (!lacros_use_chromium_toolchain) { # These are args for the template. diff --git a/build/toolchain/gcc_toolchain.gni b/build/toolchain/gcc_toolchain.gni index 713c1b9..20c1066 100644 --- a/build/toolchain/gcc_toolchain.gni +++ b/build/toolchain/gcc_toolchain.gni @@ -108,9 +108,9 @@ if (enable_resource_allowlist_generation) { # all shared libraries and executables as they are built. The pre-stripped # artifacts will be put in lib.unstripped/ and exe.unstripped/. # -# Callers will normally want to invoke "gcc_toolchain" instead, which makes -# a toolchain just like this but may additionally create an extra toolchain -# without sanitizers for host-side tools. +# Callers will normally want to invoke "gcc_toolchain" instead, which makes an +# additional toolchain for Rust targets that are build-time artificts such as +# proc macros. template("single_gcc_toolchain") { toolchain(target_name) { assert(defined(invoker.ar), "gcc_toolchain() must specify a \"ar\" value") @@ -149,10 +149,6 @@ template("single_gcc_toolchain") { # set on those toolchains. host_toolchain = host_toolchain - # The same applies to the toolchain we use to build Rust procedural - # macros, which is probably the same but might have sanitizers disabled. - host_toolchain_no_sanitizers = host_toolchain_no_sanitizers - if (!defined(invoker_toolchain_args.v8_current_cpu)) { v8_current_cpu = invoker_toolchain_args.current_cpu } @@ -240,18 +236,14 @@ template("single_gcc_toolchain") { # number of jobs, but this results in too low a value on # Chrome OS builders. So we pass in an explicit value. link_prefix = - "$python_path " + + "\"$python_path\" " + rebase_path("//tools/clang/scripts/remote_ld.py", root_build_dir) + - " --wrapper ${goma_path} --jobs 200 -- " + " --wrapper ${goma_path} --jobs 200 --ar-path ${invoker.ar} -- " } else { link_prefix = "" not_needed([ "goma_path" ]) } - # Create a distinct variable for "asm", since coverage runs pass a bunch of - # flags to clang/clang++ that are nonsensical on assembler runs. - asm_prefix = compiler_prefix - # A specific toolchain may wish to avoid coverage instrumentation, so we # allow the global "use_clang_coverage" arg to be overridden. if (defined(toolchain_args.use_clang_coverage)) { @@ -291,12 +283,16 @@ template("single_gcc_toolchain") { rebase_path(toolchain_coverage_instrumentation_input_file, root_build_dir) } - compiler_prefix = "$python_path ${_coverage_wrapper} " + compiler_prefix + compiler_prefix = + "\"$python_path\" ${_coverage_wrapper} " + compiler_prefix } cc = compiler_prefix + invoker.cc cxx = compiler_prefix + invoker.cxx - asm = asm_prefix + invoker.cc + # "asm" doesn't support any of toolchain_cc_wrapper, toolchain_uses_goma and + # toolchain_uses_remoteexec. The coverage flags are also nonsensical on + # assembler runs. + asm = invoker.cc ar = invoker.ar ld = link_prefix + invoker.ld if (defined(invoker.readelf)) { @@ -423,7 +419,7 @@ template("single_gcc_toolchain") { if (host_os == "win") { tool_wrapper_path = rebase_path("//build/toolchain/win/tool_wrapper.py", root_build_dir) - command = "cmd /c $python_path $tool_wrapper_path delete-file {{output}} && $command" + command = "cmd /s /c \"\"$python_path\" $tool_wrapper_path delete-file {{output}} && $command\"" } else { command = "rm -f {{output}} && $command" } @@ -494,7 +490,7 @@ template("single_gcc_toolchain") { # (skipped on Aix) solink_extra_flags = "--partitioned-library" } - command = "$python_path \"$solink_wrapper\" --readelf=\"$readelf\" --nm=\"$nm\" $strip_switch$dwp_switch --sofile=\"$unstripped_sofile\" --tocfile=\"$tocfile\"$map_switch --output=\"$sofile\" -- $link_command $solink_extra_flags" + command = "\"$python_path\" \"$solink_wrapper\" --readelf=\"$readelf\" --nm=\"$nm\" $strip_switch$dwp_switch --sofile=\"$unstripped_sofile\" --tocfile=\"$tocfile\"$map_switch --output=\"$sofile\" -- $link_command $solink_extra_flags" if (target_cpu == "mipsel" && is_component_build && is_android) { rspfile_content = "-Wl,--start-group -Wl,--whole-archive {{inputs}} {{solibs}} -Wl,--no-whole-archive {{libs}} -Wl,--end-group" @@ -654,7 +650,7 @@ template("single_gcc_toolchain") { link_wrapper = rebase_path("//build/toolchain/gcc_link_wrapper.py", root_build_dir) - command = "$python_path \"$link_wrapper\" --output=\"$outfile\"$strip_switch$map_switch$dwp_switch -- $link_command" + command = "\"$python_path\" \"$link_wrapper\" --output=\"$outfile\"$strip_switch$map_switch$dwp_switch -- $link_command" description = "LINK $outfile" @@ -706,67 +702,99 @@ template("single_gcc_toolchain") { if (!defined(rust_compiler_prefix)) { rust_compiler_prefix = "" } - rustc_bin = rebase_path("${rust_sysroot}/bin/rustc", root_build_dir) + rust_sysroot_relative = rebase_path(rust_sysroot, root_build_dir) + rustc_bin = "$rust_sysroot_relative/bin/rustc" rustc = "$rust_compiler_prefix${rustc_bin}" - rust_sysroot_relative_to_out = rebase_path(rust_sysroot, root_out_dir) - rustc_wrapper = rebase_path("//build/rust/rustc_wrapper.py") + rustc_wrapper = + rebase_path("//build/rust/rustc_wrapper.py", root_build_dir) # RSP manipulation due to https://bugs.chromium.org/p/gn/issues/detail?id=249 tool("rust_staticlib") { - rust_outfile = "{{output_dir}}/{{target_output_name}}.a" - depfile = "{{output}}.d" - rspfile = "$rust_outfile.rsp" - rspfile_content = "{{rustdeps}} {{externs}}" - command = "$python_path \"$rustc_wrapper\" --rustc=$rustc --depfile=$depfile --rsp=$rspfile -- -Clinker=\"${invoker.cxx}\" $rustc_common_args --emit=dep-info=$depfile,link -o $rust_outfile LDFLAGS RUSTENV {{rustenv}}" - description = "RUST $rust_outfile" - rust_sysroot = rust_sysroot_relative_to_out - outputs = [ rust_outfile ] + libname = "{{output_dir}}/{{target_output_name}}{{output_extension}}" + rspfile = "$libname.rsp" + depfile = "$libname.d" + + default_output_extension = ".a" + output_prefix = "lib" + default_output_dir = "{{root_out_dir}}" + description = "RUST(STATICLIB) {{output}}" + outputs = [ libname ] + + rspfile_content = "{{rustdeps}} {{externs}} SOURCES {{sources}}" + command = "\"$python_path\" \"$rustc_wrapper\" --rustc=$rustc --depfile=$depfile --rsp=$rspfile -- -Clinker=\"${invoker.cxx}\" $rustc_common_args --emit=dep-info=$depfile,link -o $libname LDFLAGS RUSTENV {{rustenv}}" + rust_sysroot = rust_sysroot_relative } tool("rust_rlib") { - rust_outfile = "{{output_dir}}/lib{{target_output_name}}.rlib" - depfile = "{{output}}.d" + # We must always prefix with `lib` even if the library already starts + # with that prefix or else our stdlib is unable to find libc.rlib (or + # actually liblibc.rlib). + rlibname = + "{{output_dir}}/lib{{target_output_name}}{{output_extension}}" + rspfile = "$rlibname.rsp" + depfile = "$rlibname.d" - # Do not use rsp files in this (common) case because they occupy the - # ninja main thread, and {{rlibs}} have shorter command lines than - # fully linked targets. - command = "$python_path \"$rustc_wrapper\" --rustc=$rustc --depfile=$depfile -- -Clinker=\"${invoker.cxx}\" $rustc_common_args {{rustdeps}} {{externs}} --emit=dep-info=$depfile,link -o $rust_outfile LDFLAGS RUSTENV {{rustenv}}" - description = "RUST $rust_outfile" - rust_sysroot = rust_sysroot_relative_to_out - outputs = [ rust_outfile ] + default_output_extension = ".rlib" + + # This is prefixed unconditionally in `rlibname`. + # output_prefix = "lib" + default_output_dir = "{{root_out_dir}}" + description = "RUST {{output}}" + outputs = [ rlibname ] + + rspfile_content = "{{rustdeps}} {{externs}} SOURCES {{sources}}" + command = "\"$python_path\" \"$rustc_wrapper\" --rustc=$rustc --depfile=$depfile --rsp=$rspfile -- -Clinker=\"${invoker.cxx}\" $rustc_common_args --emit=dep-info=$depfile,link -o $rlibname LDFLAGS RUSTENV {{rustenv}}" + rust_sysroot = rust_sysroot_relative } tool("rust_bin") { - rust_outfile = "{{root_out_dir}}/{{target_output_name}}" - depfile = "{{output}}.d" - rspfile = "$rust_outfile.rsp" - rspfile_content = "{{rustdeps}} {{externs}}" - command = "$python_path \"$rustc_wrapper\" --rustc=$rustc --depfile=$depfile --rsp=$rspfile -- -Clinker=\"${invoker.cxx}\" $rustc_common_args --emit=dep-info=$depfile,link -o $rust_outfile LDFLAGS {{ldflags}} ${extra_ldflags} RUSTENV {{rustenv}}" - description = "RUST $rust_outfile" - rust_sysroot = rust_sysroot_relative_to_out - outputs = [ rust_outfile ] + exename = "{{output_dir}}/{{target_output_name}}{{output_extension}}" + depfile = "$exename.d" + rspfile = "$exename.rsp" + pool = "//build/toolchain:link_pool($default_toolchain)" + + default_output_extension = default_executable_extension + default_output_dir = "{{root_out_dir}}" + description = "RUST(BIN) {{output}}" + outputs = [ exename ] + + rspfile_content = "{{rustdeps}} {{externs}} SOURCES {{sources}}" + command = "\"$python_path\" \"$rustc_wrapper\" --rustc=$rustc --depfile=$depfile --rsp=$rspfile -- -Clinker=\"${invoker.cxx}\" $rustc_common_args --emit=dep-info=$depfile,link -o $exename LDFLAGS {{ldflags}} ${extra_ldflags} RUSTENV {{rustenv}}" + rust_sysroot = rust_sysroot_relative } tool("rust_cdylib") { - rust_outfile = "{{output_dir}}/lib{{target_output_name}}.so" - depfile = "{{output}}.d" - rspfile = "$rust_outfile.rsp" - rspfile_content = "{{rustdeps}} {{externs}}" - command = "$python_path \"$rustc_wrapper\" --rustc=$rustc --depfile=$depfile --rsp=$rspfile -- -Clinker=\"${invoker.cxx}\" $rustc_common_args --emit=dep-info=$depfile,link -o $rust_outfile LDFLAGS {{ldflags}} ${extra_ldflags} RUSTENV {{rustenv}}" - description = "RUST $rust_outfile" - rust_sysroot = rust_sysroot_relative_to_out - outputs = [ rust_outfile ] + dllname = "{{output_dir}}/{{target_output_name}}{{output_extension}}" + depfile = "$dllname.d" + rspfile = "$dllname.rsp" + pool = "//build/toolchain:link_pool($default_toolchain)" + + default_output_extension = default_shlib_extension + output_prefix = "lib" + default_output_dir = "{{root_out_dir}}${default_shlib_subdir}" + description = "RUST(CDYLIB) {{output}}" + outputs = [ dllname ] + + rspfile_content = "{{rustdeps}} {{externs}} SOURCES {{sources}}" + command = "\"$python_path\" \"$rustc_wrapper\" --rustc=$rustc --depfile=$depfile --rsp=$rspfile -- -Clinker=\"${invoker.cxx}\" $rustc_common_args --emit=dep-info=$depfile,link -o $dllname LDFLAGS {{ldflags}} ${extra_ldflags} RUSTENV {{rustenv}}" + rust_sysroot = rust_sysroot_relative } tool("rust_macro") { - rust_outfile = "{{output_dir}}/lib{{target_output_name}}.so" - depfile = "{{output}}.d" - rspfile = "$rust_outfile.rsp" - rspfile_content = "{{rustdeps}} {{externs}}" - command = "$python_path \"$rustc_wrapper\" --rustc=$rustc --depfile=$depfile --rsp=$rspfile -- -Clinker=\"${invoker.cxx}\" $rustc_common_args --emit=dep-info=$depfile,link -o $rust_outfile LDFLAGS {{ldflags}} ${extra_ldflags} RUSTENV {{rustenv}}" - description = "RUST $rust_outfile" - rust_sysroot = rust_sysroot_relative_to_out - outputs = [ rust_outfile ] + dllname = "{{output_dir}}/{{target_output_name}}{{output_extension}}" + depfile = "$dllname.d" + rspfile = "$dllname.rsp" + pool = "//build/toolchain:link_pool($default_toolchain)" + + default_output_extension = default_shlib_extension + output_prefix = "lib" + default_output_dir = "{{root_out_dir}}${default_shlib_subdir}" + description = "RUST(MACRO) {{output}}" + outputs = [ dllname ] + + rspfile_content = "{{rustdeps}} {{externs}} SOURCES {{sources}}" + command = "\"$python_path\" \"$rustc_wrapper\" --rustc=$rustc --depfile=$depfile --rsp=$rspfile -- -Clinker=\"${invoker.cxx}\" $rustc_common_args --emit=dep-info=$depfile,link -o $dllname LDFLAGS {{ldflags}} ${extra_ldflags} RUSTENV {{rustenv}}" + rust_sysroot = rust_sysroot_relative } } @@ -778,8 +806,9 @@ template("single_gcc_toolchain") { } } -# Makes a single GCC toolchain, or possibly two if we need -# an equivalent toolchain without sanitizers. +# Makes a GCC toolchain for the target, and an equivalent toolchain with the +# prebuilt Rust stdlib for building proc macros (and other for-build-use +# artifacts). template("gcc_toolchain") { single_gcc_toolchain(target_name) { assert(defined(invoker.toolchain_args), @@ -795,9 +824,16 @@ template("gcc_toolchain") { # toolchains, but presubmit checks require that we explicitly exclude them } - if (using_sanitizer) { - # Make an additional toolchain with no sanitizers. - single_gcc_toolchain("${target_name}_no_sanitizers") { + if (enable_rust && current_toolchain == default_toolchain) { + # Make an additional toolchain which is used for making tools that are run + # on the host machine as part of the build process (such as proc macros + # and Cargo build scripts). This toolchain uses the prebuilt stdlib that + # comes with the compiler, so it doesn't have to wait for the stdlib to be + # built before building other stuff. And this ensures its proc macro + # outputs have the right ABI to be loaded by the compiler, and it can be + # used to compile build scripts that are part of the stdlib that is built + # for the default toolchain. + single_gcc_toolchain("${target_name}_for_rust_host_build_tools") { assert(defined(invoker.toolchain_args), "Toolchains must declare toolchain_args") forward_variables_from(invoker, @@ -810,8 +846,21 @@ template("gcc_toolchain") { toolchain_args = { # Populate toolchain args from the invoker. forward_variables_from(invoker.toolchain_args, "*") - toolchain_disables_sanitizers = true + toolchain_for_rust_host_build_tools = true + + # The host build tools are static release builds to make the Chromium + # build faster. + is_debug = false + is_component_build = false + is_official_build = false + use_clang_coverage = false + use_sanitizer_coverage = false + generate_linker_map = false } + + # When cross-compiling we don't want to use the target platform's file + # extensions. + shlib_extension = host_shlib_extension } } } diff --git a/build/toolchain/ios/BUILD.gn b/build/toolchain/ios/BUILD.gn index cfcbdc6..349f8ce 100644 --- a/build/toolchain/ios/BUILD.gn +++ b/build/toolchain/ios/BUILD.gn @@ -18,7 +18,6 @@ template("ios_toolchain") { deployment_target = ios_deployment_target target_environment = target_environment bin_path = ios_bin_path - strip_with_lipo = true toolchain_args = { forward_variables_from(invoker.toolchain_args, "*") @@ -28,73 +27,85 @@ template("ios_toolchain") { } } -ios_toolchain("ios_clang_arm64") { - toolchain_args = { - current_cpu = "arm64" +# Specialisation of the ios_toolchain template to declare the toolchain +# and its tools to build application extension for iOS platform. +template("ios_app_ext_toolchain") { + assert(defined(invoker.toolchain_args), + "Toolchains must declare toolchain_args") + + ios_toolchain(target_name) { + forward_variables_from(invoker, "*", [ "toolchain_args" ]) + + toolchain_args = { + forward_variables_from(invoker.toolchain_args, "*") + + ios_is_app_extension = true + + # Those variables are defined outside of //build and thus only exists + # when used as part of Chromium. Use build_with_chromium to check if + # they can be overridden safely. This prevents breaking third-party + # projects such as WebRTC that only uses //build but not //base. + if (build_with_chromium) { + use_partition_alloc = false + ios_partition_alloc_enabled = false + } + } } } -ios_toolchain("ios_clang_arm64_13_4") { +ios_toolchain("ios_clang_arm64") { toolchain_args = { current_cpu = "arm64" - ios_deployment_target = "13.4" } } -ios_toolchain("ios_clang_arm64_fat_arm") { +ios_toolchain("ios_clang_arm") { toolchain_args = { current_cpu = "arm" - is_fat_secondary_toolchain = true - primary_fat_toolchain_name = "//build/toolchain/ios:ios_clang_arm64" } } -ios_toolchain("ios_clang_arm") { +ios_toolchain("ios_clang_x64") { toolchain_args = { - current_cpu = "arm" + current_cpu = "x64" } } -ios_toolchain("ios_clang_x64") { +ios_toolchain("ios_clang_x86") { toolchain_args = { - current_cpu = "x64" + current_cpu = "x86" } } -ios_toolchain("ios_clang_x64_fat_arm64") { +ios_app_ext_toolchain("ios_clang_arm64_app_ext") { toolchain_args = { current_cpu = "arm64" - is_fat_secondary_toolchain = true - primary_fat_toolchain_name = "//build/toolchain/ios:ios_clang_x64" } } -ios_toolchain("ios_clang_x64_13_4") { +ios_app_ext_toolchain("ios_clang_arm64_app_ext_13_4") { toolchain_args = { - current_cpu = "x64" + current_cpu = "arm64" ios_deployment_target = "13.4" } } -ios_toolchain("ios_clang_x64_13_4_fat_arm64") { +ios_app_ext_toolchain("ios_clang_x64_app_ext") { toolchain_args = { - current_cpu = "arm64" - is_fat_secondary_toolchain = true - primary_fat_toolchain_name = "//build/toolchain/ios:ios_clang_x64_13_4" - ios_deployment_target = "13.4" + current_cpu = "x64" } } -ios_toolchain("ios_clang_x64_fat_x86") { +ios_app_ext_toolchain("ios_clang_x64_app_ext_13_4") { toolchain_args = { - current_cpu = "x86" - is_fat_secondary_toolchain = true - primary_fat_toolchain_name = "//build/toolchain/ios:ios_clang_x64" + current_cpu = "x64" + ios_deployment_target = "13.4" } } -ios_toolchain("ios_clang_x86") { +ios_toolchain("ios_clang_arm64_blink") { toolchain_args = { - current_cpu = "x86" + current_cpu = "arm64" + use_blink = true } } diff --git a/build/toolchain/ios/swiftc.py b/build/toolchain/ios/swiftc.py index 8c7779f..87071aa 100644 --- a/build/toolchain/ios/swiftc.py +++ b/build/toolchain/ios/swiftc.py @@ -1,4 +1,4 @@ -# Copyright 2020 The Chromium Authors +# Copyright 2023 The Chromium Authors # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. @@ -27,8 +27,8 @@ def fix_module_imports(header_path, output_path): header_contents = [] with open(header_path, 'r') as header_file: for line in header_file: - if line == '#if __has_feature(modules)\n': - header_contents.append('#if 1 // #if __has_feature(modules)\n') + if line == '#if __has_feature(objc_modules)\n': + header_contents.append('#if 1 // #if __has_feature(objc_modules)\n') nesting_level = 1 for line in header_file: if line == '#endif\n': @@ -242,12 +242,8 @@ def compile_module(module, sources, settings, extras, tmpdir): path = os.path.relpath(path, out_dir) depfile_content[key].add(path) - if not settings.depfile_filter: - keys = depfile_content.keys() - else: - keys = (key for key in settings.depfile_filter if key in depfile_content) - with open(settings.depfile, 'w') as depfile: + keys = sorted(depfile_content.keys()) for key in sorted(keys): depfile.write('%s : %s\n' % (key, ' '.join(sorted(depfile_content[key])))) @@ -279,9 +275,6 @@ def main(args): parser.add_argument('-depfile', help='path to the generated depfile') parser.add_argument('-swift-version', help='version of Swift language to support') - parser.add_argument('-depfile-filter', - action='append', - help='limit depfile to those files') parser.add_argument('-target', action='store', help='generate code for the given target ') diff --git a/build/toolchain/linux/BUILD.gn b/build/toolchain/linux/BUILD.gn index 5851d26..2eefac5 100644 --- a/build/toolchain/linux/BUILD.gn +++ b/build/toolchain/linux/BUILD.gn @@ -181,6 +181,7 @@ clang_v8_toolchain("clang_x64_v8_loong64") { # In a LaCrOS build, this toolchain is intended to be used as an alternate # toolchain to build Ash-Chrome in a subdirectory. +# This is a test-only toolchain. clang_toolchain("ash_clang_x64") { toolchain_args = { # This turns the toolchain into the "Linux ChromeOS" build @@ -202,6 +203,7 @@ clang_toolchain("ash_clang_x64") { # In an ash build, this toolchain is intended to be used as an alternate # toolchain to build lacros-Chrome in a subdirectory. +# This is a test-only toolchain. clang_toolchain("lacros_clang_x64") { toolchain_args = { # This turns the toolchain into the "Lacros" build @@ -213,8 +215,6 @@ clang_toolchain("lacros_clang_x64") { also_build_lacros_chrome = false chromeos_is_browser_only = true use_clang_coverage = false - dcheck_always_on = false - symbol_level = 1 } } diff --git a/build/toolchain/mac/BUILD.gn b/build/toolchain/mac/BUILD.gn index 387d9c1..ce3a31a 100644 --- a/build/toolchain/mac/BUILD.gn +++ b/build/toolchain/mac/BUILD.gn @@ -3,6 +3,7 @@ # found in the LICENSE file. import("//build/config/mac/mac_sdk.gni") +import("//build/config/v8_target_cpu.gni") import("//build/toolchain/apple/toolchain.gni") import("//build_overrides/build.gni") @@ -42,6 +43,10 @@ template("mac_toolchain") { # not supported by the Chromium mac_clang_x64 toolchain on iOS # distribution. use_sanitizer_coverage = false + + # iOS supports being build with or without blink, but macOS requires + # it to be enabled, even if iOS build force disable it in args.gn. + use_blink = true } } } @@ -74,49 +79,42 @@ mac_toolchain("clang_x86") { mac_toolchain("clang_x86_v8_arm") { toolchain_args = { current_cpu = "x86" - - if (defined(v8_current_cpu)) { - v8_current_cpu = "arm" - } + v8_current_cpu = "arm" } } mac_toolchain("clang_x86_v8_mipsel") { toolchain_args = { current_cpu = "x86" - - if (defined(v8_current_cpu)) { - v8_current_cpu = "mipsel" - } + v8_current_cpu = "mipsel" } } mac_toolchain("clang_x64_v8_arm64") { toolchain_args = { current_cpu = "x64" - - if (defined(v8_current_cpu)) { - v8_current_cpu = "arm64" - } + v8_current_cpu = "arm64" } } mac_toolchain("clang_x64_v8_mips64el") { toolchain_args = { current_cpu = "x64" - - if (defined(v8_current_cpu)) { - v8_current_cpu = "mips64el" - } + v8_current_cpu = "mips64el" } } mac_toolchain("clang_arm64_v8_x64") { toolchain_args = { current_cpu = "arm64" + v8_current_cpu = "x64" + } +} - if (defined(v8_current_cpu)) { - v8_current_cpu = "x64" - } +# Needed to run v8 on the host during a arm64 -> x86_64 cross-build +mac_toolchain("clang_arm64_v8_arm64") { + toolchain_args = { + current_cpu = "arm64" + v8_current_cpu = "arm64" } } diff --git a/build/toolchain/nacl/BUILD.gn b/build/toolchain/nacl/BUILD.gn index 00f7189..2f159a1 100644 --- a/build/toolchain/nacl/BUILD.gn +++ b/build/toolchain/nacl/BUILD.gn @@ -262,6 +262,43 @@ template("nacl_irt_toolchain") { } } +# This is essentially a clone of nacl_irt_toolchain above, except it uses the +# standard ld. This toolchain can be used to build regular nexes for NaCl +# browser tests. +template("nacl_test_irt_toolchain") { + toolchain_cpu = target_name + assert(defined(invoker.toolchain_tuple), "Must define toolchain_tuple") + + toolchain_package = "saigo_newlib" + toolchain_revision = saigo_newlib_rev + toolprefix = rebase_path("${nacl_toolchain_dir}/${toolchain_package}/bin/" + + invoker.toolchain_tuple + "-", + root_build_dir) + + if (host_os == "win") { + # Flip the slashes so that copy/paste of the commands works. + # This is also done throughout build\toolchain\win\BUILD.gn + toolprefix = string_replace(toolprefix, "/", "\\") + } + + nacl_toolchain("test_irt_" + toolchain_cpu) { + cc = toolprefix + "clang" + toolsuffix + cxx = toolprefix + "clang++" + toolsuffix + ar = toolprefix + "ar" + toolsuffix + ld = cxx + readelf = toolprefix + "readelf" + toolsuffix + nm = toolprefix + "nm" + toolsuffix + strip = toolprefix + "strip" + toolsuffix + + toolchain_args = { + current_cpu = toolchain_cpu + is_clang = true + use_lld = false + is_nacl_saigo = true + } + } +} + template("nacl_clang_toolchains") { assert(defined(invoker.toolchain_tuple), "Must define toolchain_tuple") nacl_clang_toolchain(target_name) { @@ -270,6 +307,9 @@ template("nacl_clang_toolchains") { nacl_irt_toolchain(target_name) { toolchain_tuple = invoker.toolchain_tuple } + nacl_test_irt_toolchain(target_name) { + toolchain_tuple = invoker.toolchain_tuple + } } nacl_clang_toolchains("x86") { diff --git a/build/toolchain/nacl_toolchain.gni b/build/toolchain/nacl_toolchain.gni index 1a5bf7f..cfa820a 100644 --- a/build/toolchain/nacl_toolchain.gni +++ b/build/toolchain/nacl_toolchain.gni @@ -64,6 +64,14 @@ template("nacl_toolchain") { rbe_cc_cfg_file = "${rbe_cfg_dir}/nacl/rewrapper_linux.cfg" } } + + if (use_remoteexec_links) { + rbe_link_cfg_file = "${rbe_cfg_dir}/nacl/rewrapper_linux_link.cfg" + } + + # TODO(b/282032209): Re-enable remote nacl links once mismatches due to + # linking with absolute paths has been fixed. + use_remoteexec_links = false } } } diff --git a/build/toolchain/rbe.gni b/build/toolchain/rbe.gni index 2519f22..cd86e22 100644 --- a/build/toolchain/rbe.gni +++ b/build/toolchain/rbe.gni @@ -3,13 +3,13 @@ # The directory where the re-client tooling binaries are. rbe_bin_dir = rebase_path("//buildtools/reclient", root_build_dir) -# Execution root - this should be the root of the source tree. -# This is defined here instead of in the config file because -# this will vary depending on where the user has placed the -# chromium source on their system. -rbe_exec_root = rebase_path("//") - declare_args() { + # Execution root - this should be the root of the source tree. + # This is defined here instead of in the config file because + # this will vary depending on where the user has placed the + # chromium source on their system. + rbe_exec_root = rebase_path("//") + # Set to true to enable remote compilation using reclient. use_remoteexec = false diff --git a/build/toolchain/siso.gni b/build/toolchain/siso.gni new file mode 100644 index 0000000..c7b2dc4 --- /dev/null +++ b/build/toolchain/siso.gni @@ -0,0 +1,7 @@ +# Defines the configuration of siso (next-gen build system) + +declare_args() { + # Placeholder to allow having use_siso in args.gn files and to disable + # precompiled headers in siso builds. + use_siso = false +} diff --git a/build/toolchain/toolchain.gni b/build/toolchain/toolchain.gni index a1ec3f3..1ab0622 100644 --- a/build/toolchain/toolchain.gni +++ b/build/toolchain/toolchain.gni @@ -24,10 +24,10 @@ declare_args() { # Used for binary size analysis. generate_linker_map = is_android && is_official_build - # Whether this toolchain should avoid building any sanitizer support - # because it's a host toolchain where we aim to make shared objects that may - # be loaded by prebuilt binaries without sanitizer support. - toolchain_disables_sanitizers = false + # Whether this toolchain is to be used for building host tools that are + # consumed during the build process. That includes proc macros and Cargo build + # scripts. + toolchain_for_rust_host_build_tools = false } if (generate_linker_map) { @@ -42,7 +42,12 @@ if (generate_linker_map) { } declare_args() { - clang_version = "17" + if (llvm_force_head_revision) { + clang_version = "18" + } else { + # TODO(crbug.com/1467585): Remove in the next clang roll + clang_version = "17" + } } # Extension for shared library files (including leading dot). @@ -60,6 +65,18 @@ if (is_apple) { assert(false, "Platform not supported") } +# Same extension but for the host platform. We have significantly fewer host +# platforms. +if (host_os == "mac") { + host_shlib_extension = ".dylib" +} else if (host_os == "win") { + host_shlib_extension = ".dll" +} else if (host_os == "linux" || host_os == "aix") { + host_shlib_extension = ".so" +} else { + assert(false, "Host platform not supported") +} + # Prefix for shared library files. if (is_posix || is_fuchsia) { shlib_prefix = "lib" @@ -87,17 +104,12 @@ if (host_os == "win") { rebase_path("//build/toolchain/win/tool_wrapper.py", root_build_dir) stamp_command = "cmd /c type nul > \"{{output}}\"" - copy_command = - "$python_path $_tool_wrapper_path recursive-mirror {{source}} {{output}}" + copy_command = "\"$python_path\" $_tool_wrapper_path recursive-mirror {{source}} {{output}}" } else { stamp_command = "touch {{output}}" copy_command = "ln -f {{source}} {{output}} 2>/dev/null || (rm -rf {{output}} && cp -af {{source}} {{output}})" } -if (!defined(toolchain_disables_sanitizers)) { - toolchain_disables_sanitizers = false -} - # This variable is true if the current toolchain is one of the target # toolchains, i.e. a toolchain which is being used to build the main Chrome # binary. This generally means "not the host toolchain", but in the case where diff --git a/build/toolchain/whole_archive.py b/build/toolchain/whole_archive.py new file mode 100644 index 0000000..2a15989 --- /dev/null +++ b/build/toolchain/whole_archive.py @@ -0,0 +1,57 @@ +# Copyright 2023 The Chromium Authors +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +import re + + +def wrap_with_whole_archive(command, is_apple=False): + """Modify and return `command` such that -LinkWrapper,add-whole-archive=X + becomes a linking inclusion X (-lX) but wrapped in whole-archive + modifiers.""" + + # We want to link rlibs as --whole-archive if they are part of a unit test + # target. This is determined by switch `-LinkWrapper,add-whole-archive`. + # + # TODO(danakj): If the linking command line gets too large we could move + # {{rlibs}} into the rsp file, but then this script needs to modify the rsp + # file instead of the command line. + def extract_libname(s): + m = re.match(r'-LinkWrapper,add-whole-archive=(.+)', s) + return m.group(1) + + # The set of libraries we want to apply `--whole-archive`` to. + whole_archive_libs = [ + extract_libname(x) for x in command + if x.startswith("-LinkWrapper,add-whole-archive=") + ] + + # Remove the arguments meant for consumption by this LinkWrapper script. + command = [x for x in command if not x.startswith("-LinkWrapper,")] + + def has_any_suffix(string, suffixes): + for suffix in suffixes: + if string.endswith(suffix): + return True + return False + + def wrap_libs_with(command, libnames, before, after): + out = [] + for arg in command: + # The arg is a full path to a library, we look if the the library name (a + # suffix of the full arg) is one of `libnames`. + if has_any_suffix(arg, libnames): + out.extend([before, arg]) + if after: + out.append(after) + else: + out.append(arg) + return out + + if is_apple: + # Apply -force_load to the libraries that desire it. + return wrap_libs_with(command, whole_archive_libs, "-Wl,-force_load", None) + else: + # Apply --whole-archive to the libraries that desire it. + return wrap_libs_with(command, whole_archive_libs, "-Wl,--whole-archive", + "-Wl,--no-whole-archive") diff --git a/build/toolchain/win/BUILD.gn b/build/toolchain/win/BUILD.gn index 6129385..fe09790 100644 --- a/build/toolchain/win/BUILD.gn +++ b/build/toolchain/win/BUILD.gn @@ -65,6 +65,11 @@ win_toolchains("nacl_win64") { if (target_os == "winuwp") { assert(target_cpu == "x64" || target_cpu == "x86" || target_cpu == "arm" || target_cpu == "arm64") + + # Note that //build/toolchain/win/win_toolchain_data.gni collects the output + # of setup_toolchain.py, however it's not compatible with the UWP toolchain, + # as the UWP toolchain requires the `environment.store_$CPU` variable, instead + # of the usual `environment.$CPU`. store_cpu_toolchain_data = exec_script("//build/toolchain/win/setup_toolchain.py", [ diff --git a/build/toolchain/win/rc/linux64/rc.sha1 b/build/toolchain/win/rc/linux64/rc.sha1 index 0d132a0..d7fb0a4 100644 --- a/build/toolchain/win/rc/linux64/rc.sha1 +++ b/build/toolchain/win/rc/linux64/rc.sha1 @@ -1 +1 @@ -1ca25446f5eed4151dc9b43c2a9182433e8f83c0 \ No newline at end of file +e8c939754f74d1951680597386a062323ce9a215 \ No newline at end of file diff --git a/build/toolchain/win/rc/mac/rc.sha1 b/build/toolchain/win/rc/mac/rc.sha1 index cd9deb9..c815ed7 100644 --- a/build/toolchain/win/rc/mac/rc.sha1 +++ b/build/toolchain/win/rc/mac/rc.sha1 @@ -1 +1 @@ -95e7af85589f1102667fc07efe488fd426c483e8 \ No newline at end of file +059087bd43540dee5a42ac9040c9a877e12e939d \ No newline at end of file diff --git a/build/toolchain/win/rc/win/rc.exe.sha1 b/build/toolchain/win/rc/win/rc.exe.sha1 index 30c641e..3e13e41 100644 --- a/build/toolchain/win/rc/win/rc.exe.sha1 +++ b/build/toolchain/win/rc/win/rc.exe.sha1 @@ -1 +1 @@ -7d3a485bb5bae0cf3c6b8af95d21f36aa7d02832 \ No newline at end of file +6f85dcbb9eb8e31022cf3064dc7f1d129a8f0ad7 \ No newline at end of file diff --git a/build/toolchain/win/toolchain.gni b/build/toolchain/win/toolchain.gni index 67f20f2..b296cfb 100644 --- a/build/toolchain/win/toolchain.gni +++ b/build/toolchain/win/toolchain.gni @@ -11,6 +11,7 @@ import("//build/toolchain/cc_wrapper.gni") import("//build/toolchain/goma.gni") import("//build/toolchain/rbe.gni") import("//build/toolchain/toolchain.gni") +import("//build/toolchain/win/win_toolchain_data.gni") assert(is_win, "Should only be running on Windows") @@ -26,9 +27,7 @@ if (host_os == "win") { _clang_bin_path = rebase_path("$clang_base_path/bin", root_build_dir) -# Makes a single MSVC toolchain. Callers should normally instead invoke -# "msvc_toolchain" which might make an additional toolchain available -# without sanitizers if required. +# Makes a single MSVC toolchain. # # Parameters: # environment: File name of environment file. @@ -36,7 +35,7 @@ _clang_bin_path = rebase_path("$clang_base_path/bin", root_build_dir) # You would also define a toolchain_args variable with at least these set: # current_cpu: current_cpu to pass as a build arg # current_os: current_os to pass as a build arg -template("single_msvc_toolchain") { +template("msvc_toolchain") { toolchain(target_name) { # When invoking this toolchain not as the default one, these args will be # passed to the build. They are ignored when this is the default toolchain. @@ -46,9 +45,6 @@ template("single_msvc_toolchain") { # This value needs to be passed through unchanged. host_toolchain = host_toolchain - - # This value needs to be passed through unchanged. - host_toolchain_no_sanitizers = host_toolchain_no_sanitizers } if (defined(toolchain_args.is_clang)) { @@ -116,6 +112,10 @@ template("single_msvc_toolchain") { # lld-link includes a replacement for lib.exe that can produce thin # archives and understands bitcode (for lto builds). link = "${_clang_bin_path}/lld-link${_exe}" + cc_linkflags = "" + if (toolchain_has_rust) { + rust_linkflags = "" + } if (host_os == "win") { # Flip the slashes so that copy/paste of the commands works. link = string_replace(link, "/", "\\") @@ -123,11 +123,18 @@ template("single_msvc_toolchain") { lib = "$link /lib" if (host_os != "win") { # See comment adding --rsp-quoting to $cl above for more information. - link = "$link --rsp-quoting=posix" + cc_linkflags += " --rsp-quoting=posix" + if (toolchain_has_rust) { + rust_linkflags += " -Clink-arg=--rsp-quoting=posix" + } } } else { lib = "lib.exe" link = "link.exe" + cc_linkflags = "" + if (toolchain_has_rust) { + rust_linkflags = "" + } } # If possible, pass system includes as flags to the compiler. When that's @@ -147,13 +154,31 @@ template("single_msvc_toolchain") { if (host_os != "win" || (use_lld && defined(invoker.sys_lib_flags))) { linker_wrapper = "" - sys_lib_flags = "${invoker.sys_lib_flags} " # Note trailing space. + sys_lib_flags = "${invoker.sys_lib_flags}" + + # TODO(thakis): Remove once crbug.com/1300005 is fixed + assert(toolchain_args.current_cpu == "x64" || + toolchain_args.current_cpu == "x86" || + toolchain_args.current_cpu == "arm" || + toolchain_args.current_cpu == "arm64", + "Only supports x64, x86, arm and arm64 CPUs") + if (toolchain_args.current_cpu == "x64") { + sys_lib_flags += " /MACHINE:X64" + } else if (toolchain_args.current_cpu == "x86") { + sys_lib_flags += " /MACHINE:X86" + } else if (toolchain_args.current_cpu == "arm") { + sys_lib_flags += " /MACHINE:ARM" + } else if (toolchain_args.current_cpu == "arm64") { + sys_lib_flags += " /MACHINE:ARM64" + } + + sys_lib_flags += " " # Note trailing space. } else { # link.exe must be run under a wrapper to set up the environment # (it needs %LIB% set to find libraries), and to work around its bugs. # Note trailing space: linker_wrapper = - "$python_path $_tool_wrapper_path link-wrapper $env False " + "\"$python_path\" $_tool_wrapper_path link-wrapper $env False " sys_lib_flags = "" } @@ -184,7 +209,7 @@ template("single_msvc_toolchain") { rebase_path(toolchain_coverage_instrumentation_input_file, root_build_dir) } - coverage_wrapper = "$python_path " + coverage_wrapper + " " + coverage_wrapper = "\"$python_path\" " + coverage_wrapper + " " } else { coverage_wrapper = "" } @@ -234,7 +259,7 @@ template("single_msvc_toolchain") { } tool("rc") { - command = "$python_path $_tool_wrapper_path rc-wrapper $env rc.exe /nologo $sys_include_flags{{defines}} {{include_dirs}} /fo{{output}} {{source}}" + command = "\"$python_path\" $_tool_wrapper_path rc-wrapper $env rc.exe /nologo $sys_include_flags{{defines}} {{include_dirs}} /fo{{output}} {{source}}" depsformat = "msvc" outputs = [ "$object_subdir/{{source_name_part}}.res" ] description = "RC {{output}}" @@ -245,7 +270,7 @@ template("single_msvc_toolchain") { if (toolchain_args.current_cpu == "arm64") { if (toolchain_is_clang) { - ml = "${cl_prefix}${_clang_bin_path}/clang-cl${_exe} --target=arm64-windows" + ml = "${cl_prefix}${_clang_bin_path}/clang-cl${_exe} --target=aarch64-pc-windows" if (host_os == "win") { # Flip the slashes so that copy/paste of the command works. ml = string_replace(ml, "/", "\\") @@ -288,17 +313,17 @@ template("single_msvc_toolchain") { # It's lld only because the script zaps obj Timestamp which # link.exe /incremental looks at. ml_py = rebase_path("//build/toolchain/win/ml.py", root_build_dir) - ml = "$python_path $ml_py $ml" + ml = "\"$python_path\" $ml_py $ml" } } if (toolchain_args.current_cpu != "arm64" || toolchain_is_clang) { # TODO(thakis): Stop using asm-wrapper when using clang. - command = "$python_path $_tool_wrapper_path asm-wrapper $env $ml {{defines}} {{include_dirs}} {{asmflags}} {{source}}" + command = "\"$python_path\" $_tool_wrapper_path asm-wrapper $env $ml {{defines}} {{include_dirs}} {{asmflags}} {{source}}" } else { # armasm64.exe does not support definitions passed via the command # line. (Fortunately, they're not needed for compiling the V8 # snapshot, which is the only time this assembler is required.) - command = "$python_path $_tool_wrapper_path asm-wrapper $env $ml {{include_dirs}} {{asmflags}} {{source}}" + command = "\"$python_path\" $_tool_wrapper_path asm-wrapper $env $ml {{include_dirs}} {{asmflags}} {{source}}" } description = "ASM {{output}}" @@ -306,73 +331,149 @@ template("single_msvc_toolchain") { } if (toolchain_has_rust) { - rustc_wrapper = rebase_path("//build/rust/rustc_wrapper.py") - rustc = rebase_path("${rust_sysroot}/bin/rustc", root_build_dir) - rust_sysroot_relative_to_out = rebase_path(rust_sysroot, root_out_dir) - rustc_windows_args = " -Clinker=$link $rustc_common_args" + rust_sysroot_relative = rebase_path(rust_sysroot, root_build_dir) + rustc = "$rust_sysroot_relative/bin/rustc" + rustc_wrapper = + rebase_path("//build/rust/rustc_wrapper.py", root_build_dir) + rustc_windows_args = " -Clinker=$link$rust_linkflags $rustc_common_args" tool("rust_staticlib") { - rust_outfile = "{{output_dir}}/{{target_output_name}}.lib" - depfile = "{{output}}.d" - rspfile = "$rust_outfile.rsp" - rspfile_content = "{{rustdeps}} {{externs}}" - command = "$python_path \"$rustc_wrapper\" --rustc=$rustc --depfile=$depfile --rsp=$rspfile -- $rustc_windows_args --emit=dep-info=$depfile,link -o $rust_outfile LDFLAGS RUSTENV {{rustenv}}" - description = "RUST $rust_outfile" - rust_sysroot = rust_sysroot_relative_to_out - outputs = [ rust_outfile ] + libname = "{{output_dir}}/{{target_output_name}}{{output_extension}}" + rspfile = "$libname.rsp" + depfile = "$libname.d" + + default_output_extension = ".lib" + output_prefix = "lib" + default_output_dir = "{{root_out_dir}}" + description = "RUST(STATICLIB) {{output}}" + outputs = [ libname ] + + rspfile_content = "{{rustdeps}} {{externs}} SOURCES {{sources}}" + command = "\"$python_path\" \"$rustc_wrapper\" --target-windows --rustc=$rustc --depfile=$depfile --rsp=$rspfile -- $rustc_windows_args --emit=dep-info=$depfile,link -o $libname LDFLAGS RUSTENV {{rustenv}}" + rust_sysroot = rust_sysroot_relative } tool("rust_rlib") { - rust_outfile = "{{output_dir}}/lib{{target_output_name}}.rlib" - depfile = "{{output}}.d" - - # Do not use rsp files in this (common) case because they occupy the - # ninja main thread, and {{rlibs}} have shorter command lines than - # fully linked targets. - command = "$python_path \"$rustc_wrapper\" --rustc=$rustc --depfile=$depfile -- $rustc_windows_args --emit=dep-info=$depfile,link -o $rust_outfile {{rustdeps}} {{externs}} LDFLAGS RUSTENV {{rustenv}}" - description = "RUST $rust_outfile" - rust_sysroot = rust_sysroot_relative_to_out - outputs = [ rust_outfile ] + # We must always prefix with `lib` even if the library already starts + # with that prefix or else our stdlib is unable to find libc.rlib (or + # actually liblibc.rlib). + rlibname = + "{{output_dir}}/lib{{target_output_name}}{{output_extension}}" + rspfile = "$rlibname.rsp" + depfile = "$rlibname.d" + + default_output_extension = ".rlib" + + # This is prefixed unconditionally in `rlibname`. + # output_prefix = "lib" + default_output_dir = "{{root_out_dir}}" + description = "RUST {{output}}" + outputs = [ rlibname ] + + rspfile_content = "{{rustdeps}} {{externs}} SOURCES {{sources}}" + command = "\"$python_path\" \"$rustc_wrapper\" --target-windows --rustc=$rustc --depfile=$depfile --rsp=$rspfile -- $rustc_windows_args --emit=dep-info=$depfile,link -o $rlibname {{rustdeps}} {{externs}} LDFLAGS RUSTENV {{rustenv}}" + rust_sysroot = rust_sysroot_relative } tool("rust_bin") { - rust_outfile = "{{root_out_dir}}/{{target_output_name}}.exe" - depfile = "{{output}}.d" - rspfile = "$rust_outfile.rsp" - rspfile_content = "{{rustdeps}} {{externs}}" - command = "$python_path \"$rustc_wrapper\" --rustc=$rustc --depfile=$depfile --rsp=$rspfile -- $rustc_windows_args --emit=dep-info=$depfile,link -o $rust_outfile LDFLAGS {{ldflags}} $sys_lib_flags RUSTENV {{rustenv}}" - description = "RUST $rust_outfile" - rust_sysroot = rust_sysroot_relative_to_out - outputs = [ rust_outfile ] + exename = "{{output_dir}}/{{target_output_name}}{{output_extension}}" + pdbname = "$exename.pdb" + rspfile = "$exename.rsp" + depfile = "$exename.d" + pool = "//build/toolchain:link_pool($default_toolchain)" + + default_output_extension = ".exe" + default_output_dir = "{{root_out_dir}}" + description = "RUST(BIN) {{output}}" + outputs = [ + # The first entry here is used for dependency tracking. + exename, + pdbname, + ] + runtime_outputs = outputs + + rspfile_content = "{{rustdeps}} {{externs}} SOURCES {{sources}}" + dynamic_link_switch = "" + command = "\"$python_path\" \"$rustc_wrapper\" --target-windows --rustc=$rustc --depfile=$depfile --rsp=$rspfile -- $rustc_windows_args --emit=dep-info=$depfile,link -o $exename LDFLAGS {{ldflags}} $sys_lib_flags /PDB:$pdbname RUSTENV {{rustenv}}" + rust_sysroot = rust_sysroot_relative } tool("rust_cdylib") { - rust_outfile = "{{output_dir}}/lib{{target_output_name}}.dll" - depfile = "{{output}}.d" - rspfile = "$rust_outfile.rsp" - rspfile_content = "{{rustdeps}} {{externs}}" - command = "$python_path \"$rustc_wrapper\" --rustc=$rustc --depfile=$depfile --rsp=$rspfile -- $rustc_windows_args --emit=dep-info=$depfile,link -o $rust_outfile LDFLAGS {{ldflags}} $sys_lib_flags RUSTENV {{rustenv}}" - description = "RUST $rust_outfile" - rust_sysroot = rust_sysroot_relative_to_out - outputs = [ rust_outfile ] + # E.g. "foo.dll": + dllname = "{{output_dir}}/{{target_output_name}}{{output_extension}}" + libname = "$dllname.lib" # e.g. foo.dll.lib + pdbname = "$dllname.pdb" + rspfile = "$dllname.rsp" + depfile = "$dllname.d" + pool = "//build/toolchain:link_pool($default_toolchain)" + + default_output_extension = ".dll" + default_output_dir = "{{root_out_dir}}" + description = "RUST(CDYLIB) {{output}}" + outputs = [ + # The first entry here is used for dependency tracking. Dylibs are + # linked into other targets and that linking must be done through + # the .lib file, not the .dll file. So the .lib file is the primary + # output here. + libname, + dllname, + pdbname, + ] + runtime_outputs = [ + dllname, + pdbname, + ] + + rspfile_content = "{{rustdeps}} {{externs}} SOURCES {{sources}}" + dynamic_link_switch = "" + command = "\"$python_path\" \"$rustc_wrapper\" --target-windows --rustc=$rustc --depfile=$depfile --rsp=$rspfile -- $rustc_windows_args --emit=dep-info=$depfile,link -o $dllname LDFLAGS {{ldflags}} $sys_lib_flags /PDB:$pdbname /IMPLIB:$libname RUSTENV {{rustenv}}" + rust_sysroot = rust_sysroot_relative + + # Since the above commands only updates the .lib file when it changes, + # ask Ninja to check if the timestamp actually changed to know if + # downstream dependencies should be recompiled. + restat = true } tool("rust_macro") { - rust_outfile = "{{output_dir}}/{{target_output_name}}.dll" - depfile = "{{output}}.d" - rspfile = "$rust_outfile.rsp" - rspfile_content = "{{rustdeps}} {{externs}}" - command = "$python_path \"$rustc_wrapper\" --rustc=$rustc --depfile=$depfile --rsp=$rspfile -- $rustc_windows_args --emit=dep-info=$depfile,link -o $rust_outfile LDFLAGS {{ldflags}} $sys_lib_flags RUSTENV {{rustenv}}" - description = "RUST $rust_outfile" - rust_sysroot = rust_sysroot_relative_to_out - outputs = [ rust_outfile ] + # E.g. "foo.dll": + dllname = "{{output_dir}}/{{target_output_name}}{{output_extension}}" + pdbname = "$dllname.pdb" + rspfile = "$dllname.rsp" + depfile = "$dllname.d" + pool = "//build/toolchain:link_pool($default_toolchain)" + + default_output_extension = ".dll" + default_output_dir = "{{root_out_dir}}" + description = "RUST(MACRO) {{output}}" + outputs = [ + # The first entry here is used for dependency tracking. Proc macros + # are consumed as dlls directly, loaded a runtime, so the dll is the + # primary output here. If we make a .lib file the primary output, we + # end up trying to load the .lib file as a procmacro which fails. + # + # Since depending on a macro target for linking would fail (it would + # try to link primary .dll target) we omit the .lib here entirely. + dllname, + pdbname, + ] + runtime_outputs = outputs + + rspfile_content = "{{rustdeps}} {{externs}} SOURCES {{sources}}" + dynamic_link_switch = "" + command = "\"$python_path\" \"$rustc_wrapper\" --target-windows --rustc=$rustc --depfile=$depfile --rsp=$rspfile -- $rustc_windows_args --emit=dep-info=$depfile,link -o $dllname LDFLAGS {{ldflags}} $sys_lib_flags /PDB:$pdbname RUSTENV {{rustenv}}" + rust_sysroot = rust_sysroot_relative + + # Since the above commands only updates the .lib file when it changes, + # ask Ninja to check if the timestamp actually changed to know if + # downstream dependencies should be recompiled. + restat = true } } tool("alink") { rspfile = "{{output}}.rsp" - command = - "$linker_wrapper$lib /OUT:{{output}} /nologo {{arflags}} @$rspfile" + command = "$linker_wrapper$lib \"/OUT:{{output}}\" /nologo {{arflags}} \"@$rspfile\"" description = "LIB {{output}}" outputs = [ # Ignore {{output_extension}} and always use .lib, there's no reason to @@ -395,7 +496,7 @@ template("single_msvc_toolchain") { rspfile = "${dllname}.rsp" pool = "//build/toolchain:link_pool($default_toolchain)" - command = "$linker_wrapper$link /OUT:$dllname /nologo ${sys_lib_flags}/IMPLIB:$libname /DLL /PDB:$pdbname @$rspfile" + command = "$linker_wrapper$link$cc_linkflags \"/OUT:$dllname\" /nologo ${sys_lib_flags} \"/IMPLIB:$libname\" /DLL \"/PDB:$pdbname\" \"@$rspfile\"" default_output_extension = ".dll" default_output_dir = "{{root_out_dir}}" @@ -430,7 +531,7 @@ template("single_msvc_toolchain") { rspfile = "${dllname}.rsp" pool = "//build/toolchain:link_pool($default_toolchain)" - command = "$linker_wrapper$link /OUT:$dllname /nologo ${sys_lib_flags}/DLL /PDB:$pdbname @$rspfile" + command = "$linker_wrapper$link$cc_linkflags \"/OUT:$dllname\" /nologo ${sys_lib_flags} /DLL \"/PDB:$pdbname\" \"@$rspfile\"" default_output_extension = ".dll" default_output_dir = "{{root_out_dir}}" @@ -453,7 +554,7 @@ template("single_msvc_toolchain") { rspfile = "$exename.rsp" pool = "//build/toolchain:link_pool($default_toolchain)" - command = "$linker_wrapper$link /OUT:$exename /nologo ${sys_lib_flags} /PDB:$pdbname @$rspfile" + command = "$linker_wrapper$link$cc_linkflags \"/OUT:$exename\" /nologo ${sys_lib_flags} \"/PDB:$pdbname\" \"@$rspfile\"" default_output_extension = ".exe" default_output_dir = "{{root_out_dir}}" @@ -490,58 +591,79 @@ template("single_msvc_toolchain") { } } -# Makes a single MSVC toolchain, or possibly two if we -# need an additional toolchain without sanitizers enabled. -template("msvc_toolchain") { - single_msvc_toolchain(target_name) { - assert(defined(invoker.toolchain_args), - "Toolchains must declare toolchain_args") - forward_variables_from(invoker, - "*", - [ - "visibility", - "test_only", - ]) - - # No need to forward visibility and test_only as they apply to targets not - # toolchains, but presubmit checks require that we explicitly exclude them - } - - if (using_sanitizer) { - # Make an additional toolchain with no sanitizers. - single_msvc_toolchain("${target_name}_no_sanitizers") { - assert(defined(invoker.toolchain_args), - "Toolchains must declare toolchain_args") +template("msvc_rust_host_build_tools_toolchain") { + assert(defined(invoker.toolchain_args)) + if (enable_rust) { + msvc_toolchain("${target_name}_for_rust_host_build_tools") { forward_variables_from(invoker, "*", [ "toolchain_args", "visibility", - "test_only", + "testonly", ]) toolchain_args = { # Populate toolchain args from the invoker. forward_variables_from(invoker.toolchain_args, "*") - toolchain_disables_sanitizers = true + toolchain_for_rust_host_build_tools = true + + # The host build tools are static release builds to make the Chromium + # build faster. They do not need PGO etc, so no official builds. + is_debug = false + is_component_build = false + is_official_build = false + use_clang_coverage = false + use_sanitizer_coverage = false + generate_linker_map = false } } + } else { + not_needed(invoker, "*") + not_needed([ "target_name" ]) } } template("win_toolchains") { + # On Windows, cross-compile for x86 changes the `host_toolchain` + # into x86 too so as to avoid compiling things twice (see + # //build/config/BUILDCONFIG.gn). But the prebuilt stdlib does not + # exist for Windows x86 and it's exceedingly difficult to get it + # built from a single build_rust.py invocation. So we just don't follow + # along in the `msvc_rust_host_build_tools_toolchain` toolchains, and + # always use the host cpu type (which will be x64 in that case). Things + # built with these toolchains are never built for the target_cpu anyhow, + # so the optimization there does not benefit them. + # + # Thus, in msvc_rust_host_build_tools_toolchain: + # * Use `rust_host_toolchain_arch` instead of `toolchain_arch`. + # * Use `rust_host_win_toolchain_data` instead of `win_toolchain_data`. + assert(defined(invoker.toolchain_arch)) toolchain_arch = invoker.toolchain_arch + rust_host_toolchain_arch = host_cpu + + # The toolchain data for `msvc_toolchain()`. + if (toolchain_arch == "x86") { + win_toolchain_data = win_toolchain_data_x86 + } else if (toolchain_arch == "x64") { + win_toolchain_data = win_toolchain_data_x64 + } else if (toolchain_arch == "arm64") { + win_toolchain_data = win_toolchain_data_arm64 + } else { + error("Unsupported toolchain_arch, add it to win_toolchain_data.gni") + } - win_toolchain_data = exec_script("//build/toolchain/win/setup_toolchain.py", - [ - visual_studio_path, - windows_sdk_path, - visual_studio_runtime_dirs, - "win", - toolchain_arch, - "environment." + toolchain_arch, - ], - "scope") + # The toolchain data for `msvc_rust_host_build_tools_toolchain()`. + if (rust_host_toolchain_arch == "x86") { + rust_host_win_toolchain_data = win_toolchain_data_x86 + } else if (rust_host_toolchain_arch == "x64") { + rust_host_win_toolchain_data = win_toolchain_data_x64 + } else if (rust_host_toolchain_arch == "arm64") { + rust_host_win_toolchain_data = win_toolchain_data_arm64 + } else { + error( + "Unsupported rust_host_toolchain_arch, add it to win_toolchain_data.gni") + } # The toolchain using MSVC only makes sense when not doing cross builds. # Chromium exclusively uses the win_clang_ toolchain below, but V8 and @@ -566,6 +688,20 @@ template("win_toolchains") { current_cpu = toolchain_arch } } + msvc_rust_host_build_tools_toolchain(cl_toolchain_prefix + target_name) { + environment = "environment." + rust_host_toolchain_arch + cl = "\"${rust_host_win_toolchain_data.vc_bin_dir}/cl.exe\"" + + toolchain_args = { + if (defined(invoker.toolchain_args)) { + forward_variables_from(invoker.toolchain_args, "*") + } + is_clang = false + use_clang_coverage = false + current_os = "win" + current_cpu = rust_host_toolchain_arch + } + } } if (defined(invoker.clang_toolchain_prefix)) { @@ -573,35 +709,42 @@ template("win_toolchains") { } else { clang_toolchain_prefix = "win_clang_" } + + _clang_lib_dir = + rebase_path("$clang_base_path/lib/clang/$clang_version/lib/windows", + root_build_dir) + if (host_os == "win") { + # And to match the other -libpath flags. + _clang_lib_dir = string_replace(_clang_lib_dir, "/", "\\") + } + msvc_toolchain(clang_toolchain_prefix + target_name) { environment = "environment." + toolchain_arch cl = "${_clang_bin_path}/clang-cl${_exe}" - _clang_lib_dir = - rebase_path("$clang_base_path/lib/clang/$clang_version/lib/windows", - root_build_dir) - if (host_os == "win") { - # And to match the other -libpath flags. - _clang_lib_dir = string_replace(_clang_lib_dir, "/", "\\") - } sys_include_flags = "${win_toolchain_data.include_flags_imsvc}" if (use_lld) { - sys_lib_flags = - "-libpath:$_clang_lib_dir ${win_toolchain_data.libpath_lldlink_flags}" + sys_lib_flags = "-libpath:$_clang_lib_dir " + + "${win_toolchain_data.libpath_lldlink_flags}" + } - # TODO(thakis): Remove once crbug.com/1300005 is fixed - assert(toolchain_arch == "x64" || toolchain_arch == "x86" || - toolchain_arch == "arm" || toolchain_arch == "arm64", - "Only supports x64, x86, arm and arm64 CPUs") - if (toolchain_arch == "x64") { - sys_lib_flags += " /MACHINE:X64" - } else if (toolchain_arch == "x86") { - sys_lib_flags += " /MACHINE:X86" - } else if (toolchain_arch == "arm") { - sys_lib_flags += " /MACHINE:ARM" - } else if (toolchain_arch == "arm64") { - sys_lib_flags += " /MACHINE:ARM64" + toolchain_args = { + if (defined(invoker.toolchain_args)) { + forward_variables_from(invoker.toolchain_args, "*") } + is_clang = true + current_os = "win" + current_cpu = toolchain_arch + } + } + msvc_rust_host_build_tools_toolchain(clang_toolchain_prefix + target_name) { + environment = "environment." + rust_host_toolchain_arch + cl = "${_clang_bin_path}/clang-cl${_exe}" + + sys_include_flags = "${rust_host_win_toolchain_data.include_flags_imsvc}" + if (use_lld) { + sys_lib_flags = "-libpath:$_clang_lib_dir " + + "${rust_host_win_toolchain_data.libpath_lldlink_flags}" } toolchain_args = { @@ -610,7 +753,7 @@ template("win_toolchains") { } is_clang = true current_os = "win" - current_cpu = toolchain_arch + current_cpu = rust_host_toolchain_arch } } } diff --git a/build/toolchain/win/win_toolchain_data.gni b/build/toolchain/win/win_toolchain_data.gni new file mode 100644 index 0000000..a6e8328 --- /dev/null +++ b/build/toolchain/win/win_toolchain_data.gni @@ -0,0 +1,44 @@ +# Copyright 2023 The Chromium Authors +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +import("//build/config/win/visual_studio_version.gni") + +declare_args() { + win_toolchain_data_x86 = + exec_script("//build/toolchain/win/setup_toolchain.py", + [ + visual_studio_path, + windows_sdk_path, + visual_studio_runtime_dirs, + "win", + "x86", + "environment.x86", + ], + "scope") + + win_toolchain_data_x64 = + exec_script("//build/toolchain/win/setup_toolchain.py", + [ + visual_studio_path, + windows_sdk_path, + visual_studio_runtime_dirs, + "win", + "x64", + "environment.x64", + ], + "scope") + if (target_cpu == "arm64" || host_cpu == "arm64") { + win_toolchain_data_arm64 = + exec_script("//build/toolchain/win/setup_toolchain.py", + [ + visual_studio_path, + windows_sdk_path, + visual_studio_runtime_dirs, + "win", + "arm64", + "environment.arm64", + ], + "scope") + } +} diff --git a/build/toolchain/wrapper_utils.py b/build/toolchain/wrapper_utils.py index 5c62b6a..f01e159 100644 --- a/build/toolchain/wrapper_utils.py +++ b/build/toolchain/wrapper_utils.py @@ -13,6 +13,8 @@ import sys import threading +import whole_archive + _BAT_PREFIX = 'cmd /c call ' @@ -72,43 +74,7 @@ def RunLinkWithOptionalMapFile(command, env=None, map_file=None): # We want to link rlibs as --whole-archive if they are part of a unit test # target. This is determined by switch `-LinkWrapper,add-whole-archive`. - # - # TODO(danakj): If the linking command line gets too large we could move - # {{rlibs}} into the rsp file, but then this script needs to modify the rsp - # file instead of the command line. - def extract_libname(s): - m = re.match(r'-LinkWrapper,add-whole-archive=(.+)', s) - return m.group(1) + ".rlib" - - # The set of libraries we want to apply `--whole-archive`` to. - whole_archive_libs = [ - extract_libname(x) for x in command - if x.startswith("-LinkWrapper,add-whole-archive=") - ] - - # Remove the arguments meant for consumption by this LinkWrapper script. - command = [x for x in command if not x.startswith("-LinkWrapper,")] - - def has_any_suffix(string, suffixes): - for suffix in suffixes: - if string.endswith(suffix): - return True - return False - - def wrap_libs_with(command, libnames, before, after): - out = [] - for arg in command: - # The arg is a full path to a library, we look if the the library name (a - # suffix of the full arg) is one of `libnames`. - if has_any_suffix(arg, libnames): - out.extend([before, arg, after]) - else: - out.append(arg) - return out - - # Apply --whole-archive to the libraries that desire it. - command = wrap_libs_with(command, whole_archive_libs, "-Wl,--whole-archive", - "-Wl,--no-whole-archive") + command = whole_archive.wrap_with_whole_archive(command) result = subprocess.call(command, env=env) diff --git a/build/util/LASTCHANGE b/build/util/LASTCHANGE index 597ce3f..b842661 100644 --- a/build/util/LASTCHANGE +++ b/build/util/LASTCHANGE @@ -1,2 +1,2 @@ -LASTCHANGE=a90a506555c938a18b63b27b61d0eaa53effaaa2-refs/branch-heads/5518@{#1} +LASTCHANGE=2d662a1dbdfff9eb44e08ea4c93b31d25e5557be-refs/branch-heads/5949@{#1} LASTCHANGE_YEAR=2023 diff --git a/build/util/LASTCHANGE.committime b/build/util/LASTCHANGE.committime index 685aac6..4281dca 100644 --- a/build/util/LASTCHANGE.committime +++ b/build/util/LASTCHANGE.committime @@ -1 +1 @@ -1672805694 \ No newline at end of file +1692068681 \ No newline at end of file diff --git a/build/util/PRESUBMIT.py b/build/util/PRESUBMIT.py index 88fd9bf..22376c3 100644 --- a/build/util/PRESUBMIT.py +++ b/build/util/PRESUBMIT.py @@ -6,7 +6,6 @@ """Presubmit for build/util""" -USE_PYTHON3 = True def _GetFilesToSkip(input_api): @@ -40,10 +39,7 @@ def _GetPythonUnitTests(input_api, output_api): output_api, input_api.PresubmitLocalPath(), files_to_check=['.*_test\\.py$'], - files_to_skip=files_to_skip, - run_on_python2=False, - run_on_python3=True, - skip_shebang_check=True) + files_to_skip=files_to_skip) def CommonChecks(input_api, output_api): diff --git a/build/util/android_chrome_version.py b/build/util/android_chrome_version.py index 876f485..16cf8d0 100755 --- a/build/util/android_chrome_version.py +++ b/build/util/android_chrome_version.py @@ -91,6 +91,16 @@ ('WEBVIEW_DEV', 'WEBVIEW_DEV', '32'), ], '64': [ + ('CHROME', 'CHROME', '64'), + ('CHROME_MODERN', 'CHROME_MODERN', '64'), + ('MONOCHROME', 'MONOCHROME', '64'), + ('TRICHROME', 'TRICHROME', '64'), + ('TRICHROME_BETA', 'TRICHROME_BETA', '64'), + ('WEBVIEW_STABLE', 'WEBVIEW_STABLE', '64'), + ('WEBVIEW_BETA', 'WEBVIEW_BETA', '64'), + ('WEBVIEW_DEV', 'WEBVIEW_DEV', '64'), + ], + 'hybrid': [ ('CHROME', 'CHROME', '64'), ('CHROME_MODERN', 'CHROME_MODERN', '64'), ('MONOCHROME', 'MONOCHROME', '32_64'), @@ -104,16 +114,14 @@ ('TRICHROME_64_32', 'TRICHROME', '64_32'), ('TRICHROME_64_32_HIGH', 'TRICHROME', '64_32_high'), ('TRICHROME_64', 'TRICHROME', '64'), - ('TRICHROME_64_HIGH', 'TRICHROME', '64_32_high'), # Deprecated. ('TRICHROME_AUTO_64_32', 'TRICHROME_AUTO', '64_32'), + ('TRICHROME_AUTO_64_32_HIGH', 'TRICHROME_AUTO', '64_32_high'), ('TRICHROME_BETA', 'TRICHROME_BETA', '32_64'), ('TRICHROME_32_BETA', 'TRICHROME_BETA', '32'), ('TRICHROME_32_64_BETA', 'TRICHROME_BETA', '32_64'), ('TRICHROME_64_32_BETA', 'TRICHROME_BETA', '64_32'), ('TRICHROME_64_32_HIGH_BETA', 'TRICHROME_BETA', '64_32_high'), ('TRICHROME_64_BETA', 'TRICHROME_BETA', '64'), - # Deprecated - ('TRICHROME_64_HIGH_BETA', 'TRICHROME_BETA', '64_32_high'), ('WEBVIEW_STABLE', 'WEBVIEW_STABLE', '32_64'), ('WEBVIEW_BETA', 'WEBVIEW_BETA', '32_64'), ('WEBVIEW_DEV', 'WEBVIEW_DEV', '32_64'), @@ -129,9 +137,12 @@ # Splits input build config architecture to manufacturer and bitness. _ARCH_TO_MFG_AND_BITNESS = { 'arm': ('arm', '32'), - 'arm64': ('arm', '64'), + 'arm64': ('arm', 'hybrid'), + # Until riscv64 needs a unique version code to ship APKs to the store, + # point to the 'arm' bitmask. + 'riscv64': ('arm', '64'), 'x86': ('intel', '32'), - 'x64': ('intel', '64'), + 'x64': ('intel', 'hybrid'), } # Expose the available choices to other scripts. @@ -175,21 +186,55 @@ version needs to be a higher versionCode, as otherwise a 64-bit device would prefer the 32-bit version that does not include any 64-bit code, and fail. """ -_ABIS_TO_DIGIT_MASK = { - 'arm': { - '32': 0, - '32_64': 3, - '64_32': 4, - '64': 5, - '64_32_high': 9, - }, - 'intel': { - '32': 1, - '32_64': 6, - '64_32': 7, - '64': 8, - }, -} + + +def _GetAbisToDigitMask(build_number, patch_number): + """Return the correct digit mask based on build number. + + Updated from build 5750: Some intel devices advertise support for arm, + so arm codes must be lower than x86 codes to prevent providing an + arm-optimized build to intel devices. + + Returns: + A dictionary of architecture mapped to bitness + mapped to version code suffix. + """ + # Scheme change was made directly to M113 and M114 branches. + use_new_scheme = (build_number >= 5750 + or (build_number == 5672 and patch_number >= 176) + or (build_number == 5735 and patch_number >= 53)) + if use_new_scheme: + return { + 'arm': { + '32': 0, + '32_64': 1, + '64_32': 2, + '64_32_high': 3, + '64': 4, + }, + 'intel': { + '32': 6, + '32_64': 7, + '64_32': 8, + '64': 9, + }, + } + return { + 'arm': { + '32': 0, + '32_64': 3, + '64_32': 4, + '64': 5, + '64_32_high': 9, + }, + 'intel': { + '32': 1, + '32_64': 6, + '64_32': 7, + '64': 8, + }, + } + VersionCodeComponents = namedtuple('VersionCodeComponents', [ 'build_number', @@ -249,7 +294,8 @@ def TranslateVersionCode(version_code, is_webview=False): package_name = package break - for arch, bitness_to_number in _ABIS_TO_DIGIT_MASK.items(): + for arch, bitness_to_number in (_GetAbisToDigitMask(build_number, + patch_number).items()): for bitness, number in bitness_to_number.items(): if abi_digit == number: abi = arch if arch != 'intel' else 'x86' @@ -285,8 +331,9 @@ def GenerateVersionCodes(version_values, arch, is_next_build): Thus, this method is responsible for the final two digits of versionCode. """ - base_version_code = int( - '%s%03d00' % (version_values['BUILD'], int(version_values['PATCH']))) + build_number = int(version_values['BUILD']) + patch_number = int(version_values['PATCH']) + base_version_code = (build_number * 1000 + patch_number) * 100 if is_next_build: base_version_code += _NEXT_BUILD_VERSION_CODE_DIFF @@ -295,10 +342,11 @@ def GenerateVersionCodes(version_values, arch, is_next_build): version_codes = {} + abi_to_digit_mask = _GetAbisToDigitMask(build_number, patch_number) for apk, package, abis in _APKS[bitness]: if abis == '64_32_high' and arch != 'arm64': continue - abi_part = _ABIS_TO_DIGIT_MASK[mfg][abis] + abi_part = abi_to_digit_mask[mfg][abis] package_part = _PACKAGE_NAMES[package] version_code_name = apk + '_VERSION_CODE' diff --git a/build/util/android_chrome_version_test.py b/build/util/android_chrome_version_test.py index f1f7505..a28e5c6 100644 --- a/build/util/android_chrome_version_test.py +++ b/build/util/android_chrome_version_test.py @@ -14,6 +14,13 @@ 'PATCH': '0', } +EXAMPLE_GROUPED_VERSION_VALUES = { + 'MAJOR': '99', + 'MINOR': '0', + 'BUILD': '5750', + 'PATCH': '0', +} + class _VersionTest(unittest.TestCase): """Unittests for the android_chrome_version module. @@ -170,7 +177,7 @@ def testGenerateVersionCodesAndroidArchArm64Variants(self): arch_trichrome_32_64_version_code = output['TRICHROME_32_64_VERSION_CODE'] arch_trichrome_64_32_version_code = output['TRICHROME_64_32_VERSION_CODE'] arch_trichrome_64_32_high_version_code = output[ - 'TRICHROME_64_HIGH_VERSION_CODE'] + 'TRICHROME_64_32_HIGH_VERSION_CODE'] arch_trichrome_64_version_code = output['TRICHROME_64_VERSION_CODE'] arch_trichrome_auto_64_32_version_code = output[ 'TRICHROME_AUTO_64_32_VERSION_CODE'] @@ -340,6 +347,396 @@ def testGenerateVersionCodesTrichromeChannelOrderBeta(self): trichrome_stable_version_code) +class _VersionGroupedTest(unittest.TestCase): + """Unittests for the android_chrome_version module (grouped). + """ + def testGenerateVersionCodesAndroidChrome(self): + """Assert it gives correct values for standard/example inputs""" + output = GenerateVersionCodes(EXAMPLE_GROUPED_VERSION_VALUES, + arch='arm', + is_next_build=False) + + chrome_version_code = output['CHROME_VERSION_CODE'] + + self.assertEqual(chrome_version_code, '575000000') + + def testGenerateVersionCodesAndroidChromeModern(self): + """Assert it gives correct values for standard/example inputs""" + output = GenerateVersionCodes(EXAMPLE_GROUPED_VERSION_VALUES, + arch='arm', + is_next_build=False) + + chrome_modern_version_code = output['CHROME_MODERN_VERSION_CODE'] + + self.assertEqual(chrome_modern_version_code, '575000010') + + def testGenerateVersionCodesAndroidMonochrome(self): + """Assert it gives correct values for standard/example inputs""" + output = GenerateVersionCodes(EXAMPLE_GROUPED_VERSION_VALUES, + arch='arm', + is_next_build=False) + + monochrome_version_code = output['MONOCHROME_VERSION_CODE'] + + self.assertEqual(monochrome_version_code, '575000020') + + def testGenerateVersionCodesAndroidTrichrome(self): + """Assert it gives correct values for standard/example inputs""" + output = GenerateVersionCodes(EXAMPLE_GROUPED_VERSION_VALUES, + arch='arm', + is_next_build=False) + + trichrome_version_code = output['TRICHROME_VERSION_CODE'] + + self.assertEqual(trichrome_version_code, '575000030') + + def testGenerateVersionCodesAndroidWebviewStable(self): + """Assert it gives correct values for standard/example inputs""" + output = GenerateVersionCodes(EXAMPLE_GROUPED_VERSION_VALUES, + arch='arm', + is_next_build=False) + + webview_stable_version_code = output['WEBVIEW_STABLE_VERSION_CODE'] + + self.assertEqual(webview_stable_version_code, '575000000') + + def testGenerateVersionCodesAndroidWebviewBeta(self): + """Assert it gives correct values for standard/example inputs""" + output = GenerateVersionCodes(EXAMPLE_GROUPED_VERSION_VALUES, + arch='arm', + is_next_build=False) + + webview_beta_version_code = output['WEBVIEW_BETA_VERSION_CODE'] + + self.assertEqual(webview_beta_version_code, '575000010') + + def testGenerateVersionCodesAndroidWebviewDev(self): + """Assert it gives correct values for standard/example inputs""" + output = GenerateVersionCodes(EXAMPLE_GROUPED_VERSION_VALUES, + arch='arm', + is_next_build=False) + + webview_dev_version_code = output['WEBVIEW_DEV_VERSION_CODE'] + + self.assertEqual(webview_dev_version_code, '575000020') + + def testGenerateVersionCodesAndroidNextBuild(self): + """Assert it handles "next" builds correctly""" + output = GenerateVersionCodes(EXAMPLE_GROUPED_VERSION_VALUES, + arch='arm', + is_next_build=True) + + # Get just a sample of values + chrome_version_code = output['CHROME_VERSION_CODE'] + monochrome_version_code = output['MONOCHROME_VERSION_CODE'] + webview_stable_version_code = output['WEBVIEW_STABLE_VERSION_CODE'] + webview_beta_version_code = output['WEBVIEW_BETA_VERSION_CODE'] + + self.assertEqual(chrome_version_code, '575050000') + self.assertEqual(monochrome_version_code, '575050020') + self.assertEqual(webview_stable_version_code, '575050000') + self.assertEqual(webview_beta_version_code, '575050010') + + def testGenerateVersionCodesAndroidArchArm(self): + """Assert it handles different architectures correctly. + + Version codes for different builds need to be distinct and maintain a + certain ordering. + See docs in android_chrome_version._ABIS_TO_BIT_MASK for + reasoning. + """ + output = GenerateVersionCodes(EXAMPLE_GROUPED_VERSION_VALUES, + arch='arm', + is_next_build=False) + arch_chrome_version_code = output['CHROME_VERSION_CODE'] + + self.assertEqual(arch_chrome_version_code, '575000000') + + def testGenerateVersionCodesAndroidArchX86(self): + """Assert it handles different architectures correctly. + + Version codes for different builds need to be distinct and maintain a + certain ordering. + See docstring on android_chrome_version._ABIS_TO_BIT_MASK for + reasoning. + """ + output = GenerateVersionCodes(EXAMPLE_GROUPED_VERSION_VALUES, + arch='x86', + is_next_build=False) + arch_chrome_version_code = output['CHROME_VERSION_CODE'] + + self.assertEqual(arch_chrome_version_code, '575000006') + + def testGenerateVersionCodesAndroidArchArm64(self): + """Assert it handles different architectures correctly. + + Version codes for different builds need to be distinct and maintain a + certain ordering. + See docstring on android_chrome_version._ABIS_TO_BIT_MASK for + reasoning. + """ + output = GenerateVersionCodes(EXAMPLE_GROUPED_VERSION_VALUES, + arch='arm64', + is_next_build=False) + arch_chrome_version_code = output['CHROME_VERSION_CODE'] + + self.assertEqual(arch_chrome_version_code, '575000004') + + def testGenerateVersionCodesAndroidArchArm64Variants(self): + """Assert it handles 64-bit-specific additional version codes correctly. + + Some additional version codes are generated for 64-bit architectures. + See docstring on android_chrome_version.ARCH64_APK_VARIANTS for more info. + """ + output = GenerateVersionCodes(EXAMPLE_GROUPED_VERSION_VALUES, + arch='arm64', + is_next_build=False) + arch_monochrome_version_code = output['MONOCHROME_VERSION_CODE'] + arch_monochrome_32_version_code = output['MONOCHROME_32_VERSION_CODE'] + arch_monochrome_32_64_version_code = output['MONOCHROME_32_64_VERSION_CODE'] + arch_monochrome_64_32_version_code = output['MONOCHROME_64_32_VERSION_CODE'] + arch_monochrome_64_version_code = output['MONOCHROME_64_VERSION_CODE'] + arch_trichrome_version_code = output['TRICHROME_VERSION_CODE'] + arch_trichrome_32_version_code = output['TRICHROME_32_VERSION_CODE'] + arch_trichrome_32_64_version_code = output['TRICHROME_32_64_VERSION_CODE'] + arch_trichrome_64_32_version_code = output['TRICHROME_64_32_VERSION_CODE'] + arch_trichrome_64_32_high_version_code = output[ + 'TRICHROME_64_32_HIGH_VERSION_CODE'] + arch_trichrome_64_version_code = output['TRICHROME_64_VERSION_CODE'] + arch_trichrome_auto_64_32_version_code = output[ + 'TRICHROME_AUTO_64_32_VERSION_CODE'] + arch_trichrome_auto_64_32_high_version_code = output[ + 'TRICHROME_AUTO_64_32_HIGH_VERSION_CODE'] + + self.assertEqual(arch_monochrome_32_version_code, '575000020') + self.assertEqual(arch_monochrome_32_64_version_code, '575000021') + self.assertEqual(arch_monochrome_version_code, '575000021') + self.assertEqual(arch_monochrome_64_32_version_code, '575000022') + self.assertEqual(arch_monochrome_64_version_code, '575000024') + self.assertEqual(arch_trichrome_32_version_code, '575000030') + self.assertEqual(arch_trichrome_32_64_version_code, '575000031') + self.assertEqual(arch_trichrome_version_code, '575000031') + self.assertEqual(arch_trichrome_64_32_version_code, '575000032') + self.assertEqual(arch_trichrome_64_32_high_version_code, '575000033') + self.assertEqual(arch_trichrome_64_version_code, '575000034') + self.assertEqual(arch_trichrome_auto_64_32_version_code, '575000052') + self.assertEqual(arch_trichrome_auto_64_32_high_version_code, '575000053') + + def testGenerateVersionCodesAndroidArchX64(self): + """Assert it handles different architectures correctly. + + Version codes for different builds need to be distinct and maintain a + certain ordering. + See docstring on android_chrome_version._ABIS_TO_BIT_MASK for + reasoning. + """ + output = GenerateVersionCodes(EXAMPLE_GROUPED_VERSION_VALUES, + arch='x64', + is_next_build=False) + arch_chrome_version_code = output['CHROME_VERSION_CODE'] + + self.assertEqual(arch_chrome_version_code, '575000009') + + def testGenerateVersionCodesAndroidArchX64Variants(self): + """Assert it handles 64-bit-specific additional version codes correctly. + + Some additional version codes are generated for 64-bit architectures. + See docstring on android_chrome_version.ARCH64_APK_VARIANTS for more info. + """ + output = GenerateVersionCodes(EXAMPLE_GROUPED_VERSION_VALUES, + arch='x64', + is_next_build=False) + arch_monochrome_32_version_code = output['MONOCHROME_32_VERSION_CODE'] + arch_monochrome_32_64_version_code = output['MONOCHROME_32_64_VERSION_CODE'] + arch_monochrome_version_code = output['MONOCHROME_VERSION_CODE'] + arch_monochrome_64_32_version_code = output['MONOCHROME_64_32_VERSION_CODE'] + arch_monochrome_64_version_code = output['MONOCHROME_64_VERSION_CODE'] + arch_trichrome_32_version_code = output['TRICHROME_32_VERSION_CODE'] + arch_trichrome_32_64_version_code = output['TRICHROME_32_64_VERSION_CODE'] + arch_trichrome_version_code = output['TRICHROME_VERSION_CODE'] + arch_trichrome_64_32_version_code = output['TRICHROME_64_32_VERSION_CODE'] + arch_trichrome_64_version_code = output['TRICHROME_64_VERSION_CODE'] + arch_trichrome_auto_64_32_version_code = output[ + 'TRICHROME_AUTO_64_32_VERSION_CODE'] + + self.assertEqual(arch_monochrome_32_version_code, '575000026') + self.assertEqual(arch_monochrome_32_64_version_code, '575000027') + self.assertEqual(arch_monochrome_version_code, '575000027') + self.assertEqual(arch_monochrome_64_32_version_code, '575000028') + self.assertEqual(arch_monochrome_64_version_code, '575000029') + self.assertEqual(arch_trichrome_32_version_code, '575000036') + self.assertEqual(arch_trichrome_32_64_version_code, '575000037') + self.assertEqual(arch_trichrome_version_code, '575000037') + self.assertEqual(arch_trichrome_64_32_version_code, '575000038') + self.assertEqual(arch_trichrome_64_version_code, '575000039') + self.assertEqual(arch_trichrome_auto_64_32_version_code, '575000058') + + def testGenerateVersionCodesAndroidArchRiscv64(self): + """Assert it handles different architectures correctly. + + Version codes for different builds need to be distinct and maintain a + certain ordering. + See docs in android_chrome_version._ABIS_TO_BIT_MASK for + reasoning. + """ + output = GenerateVersionCodes(EXAMPLE_GROUPED_VERSION_VALUES, + arch='riscv64', + is_next_build=False) + arch_chrome_version_code = output['CHROME_VERSION_CODE'] + + self.assertEqual(arch_chrome_version_code, '575000004') + + def testGenerateVersionCodesAndroidArchRiscv64Variants(self): + """Assert it handles 64-bit-specific additional version codes correctly. + + Some additional version codes are generated for 64-bit architectures. + See docstring on android_chrome_version.ARCH64_APK_VARIANTS for more info. + """ + output = GenerateVersionCodes(EXAMPLE_GROUPED_VERSION_VALUES, + arch='riscv64', + is_next_build=False) + arch_chrome_version_code = output['CHROME_VERSION_CODE'] + arch_chrome_modern_version_code = output['CHROME_MODERN_VERSION_CODE'] + arch_monochrome_version_code = output['MONOCHROME_VERSION_CODE'] + arch_trichrome_version_code = output['TRICHROME_VERSION_CODE'] + arch_trichrome_beta_version_code = output['TRICHROME_BETA_VERSION_CODE'] + arch_webview_stable_version_code = output['WEBVIEW_STABLE_VERSION_CODE'] + arch_webview_beta_version_code = output['WEBVIEW_BETA_VERSION_CODE'] + arch_webview_dev_version_code = output['WEBVIEW_DEV_VERSION_CODE'] + + self.assertEqual(arch_chrome_version_code, '575000004') + self.assertEqual(arch_chrome_modern_version_code, '575000014') + self.assertEqual(arch_monochrome_version_code, '575000024') + self.assertFalse('MONOCHROME_32_VERSION_CODE' in output) + self.assertFalse('MONOCHROME_32_64_VERSION_CODE' in output) + self.assertFalse('MONOCHROME_64_32_VERSION_CODE' in output) + self.assertFalse('MONOCHROME_64_VERSION_CODE' in output) + self.assertEqual(arch_trichrome_version_code, '575000034') + self.assertFalse('TRICHROME_32_VERSION_CODE' in output) + self.assertFalse('TRICHROME_32_64_VERSION_CODE' in output) + self.assertFalse('TRICHROME_64_32_VERSION_CODE' in output) + self.assertFalse('TRICHROME_64_32_HIGH_VERSION_CODE' in output) + self.assertFalse('TRICHROME_AUTO_64_32_VERSION_CODE' in output) + self.assertFalse('TRICHROME_64_VERSION_CODE' in output) + self.assertEqual(arch_trichrome_beta_version_code, '575000044') + self.assertFalse('TRICHROME_32_BETA_VERSION_CODE' in output) + self.assertFalse('TRICHROME_32_64_BETA_VERSION_CODE' in output) + self.assertFalse('TRICHROME_64_32_BETA_VERSION_CODE' in output) + self.assertFalse('TRICHROME_64_32_HIGH_BETA_VERSION_CODE' in output) + self.assertFalse('TRICHROME_64_BETA_VERSION_CODE' in output) + self.assertEqual(arch_webview_stable_version_code, '575000004') + self.assertEqual(arch_webview_beta_version_code, '575000014') + self.assertEqual(arch_webview_dev_version_code, '575000024') + self.assertFalse('WEBVIEW_64_STABLE_VERSION_CODE' in output) + self.assertFalse('WEBVIEW_64_BETA_VERSION_CODE' in output) + self.assertFalse('WEBVIEW_64_DEV_VERSION_CODE' in output) + self.assertFalse('WEBVIEW_32_STABLE_VERSION_CODE' in output) + self.assertFalse('WEBVIEW_32_BETA_VERSION_CODE' in output) + self.assertFalse('WEBVIEW_32_DEV_VERSION_CODE' in output) + + def testGenerateVersionCodesAndroidArchOrderArm(self): + """Assert it handles different architectures correctly. + + Version codes for different builds need to be distinct and maintain a + certain ordering. + See docstring on android_chrome_version._ABIS_TO_BIT_MASK for + reasoning. + + Test arm-related values. + """ + arm_output = GenerateVersionCodes(EXAMPLE_GROUPED_VERSION_VALUES, + arch='arm', + is_next_build=False) + arm64_output = GenerateVersionCodes(EXAMPLE_GROUPED_VERSION_VALUES, + arch='arm64', + is_next_build=False) + + arm_chrome_version_code = arm_output['CHROME_VERSION_CODE'] + arm64_chrome_version_code = arm64_output['CHROME_VERSION_CODE'] + + self.assertLess(arm_chrome_version_code, arm64_chrome_version_code) + + def testGenerateVersionCodesAndroidArchOrderX86(self): + """Assert it handles different architectures correctly. + + Version codes for different builds need to be distinct and maintain a + certain ordering. + See docstring on android_chrome_version._ABIS_TO_BIT_MASK for + reasoning. + + Test x86-related values. + """ + x86_output = GenerateVersionCodes(EXAMPLE_GROUPED_VERSION_VALUES, + arch='x86', + is_next_build=False) + x64_output = GenerateVersionCodes(EXAMPLE_GROUPED_VERSION_VALUES, + arch='x64', + is_next_build=False) + + x86_chrome_version_code = x86_output['CHROME_VERSION_CODE'] + x64_chrome_version_code = x64_output['CHROME_VERSION_CODE'] + + self.assertLess(x86_chrome_version_code, x64_chrome_version_code) + + def testGenerateVersionCodesAndroidWebviewChannelOrderBeta(self): + """Assert webview beta channel is higher than stable. + + The channel-specific version codes for standalone webview needs to follow + the order stable < beta < dev. + + This allows that if a user opts into beta track, they will always have the + beta apk, including any finch experiments targeted at beta users, even when + beta and stable channels are otherwise on the same version. + """ + output = GenerateVersionCodes(EXAMPLE_GROUPED_VERSION_VALUES, + arch='arm', + is_next_build=False) + + webview_stable_version_code = output['WEBVIEW_STABLE_VERSION_CODE'] + webview_beta_version_code = output['WEBVIEW_BETA_VERSION_CODE'] + + self.assertGreater(webview_beta_version_code, webview_stable_version_code) + + def testGenerateVersionCodesAndroidWebviewChannelOrderDev(self): + """Assert webview dev channel is higher than beta. + + The channel-specific version codes for standalone webview needs to follow + the order stable < beta < dev. + + This allows that if a user opts into dev track, they will always have the + dev apk, including any finch experiments targeted at dev users, even when + dev and beta channels are otherwise on the same version. + """ + output = GenerateVersionCodes(EXAMPLE_GROUPED_VERSION_VALUES, + arch='arm', + is_next_build=False) + + webview_beta_version_code = output['WEBVIEW_BETA_VERSION_CODE'] + webview_dev_version_code = output['WEBVIEW_DEV_VERSION_CODE'] + + self.assertGreater(webview_dev_version_code, webview_beta_version_code) + + def testGenerateVersionCodesTrichromeChannelOrderBeta(self): + """Assert Trichrome beta channel is higher than stable. + + When Trichrome channels are compiled to use the stable channel's package + name, their version codes need to follow the order stable < beta. + + This allows that if a user opts into beta track, they will always have the + beta apk, including any finch experiments targeted at beta users, even when + beta and stable channels are otherwise on the same version. + """ + output = GenerateVersionCodes(EXAMPLE_GROUPED_VERSION_VALUES, + arch='arm', + is_next_build=False) + + trichrome_stable_version_code = output['TRICHROME_VERSION_CODE'] + trichrome_beta_version_code = output['TRICHROME_BETA_VERSION_CODE'] + + self.assertGreater(trichrome_beta_version_code, + trichrome_stable_version_code) + + class _VersionCodeTest(unittest.TestCase): def testGenerateThenTranslate(self): """Assert it gives correct values for a version code that we generated.""" @@ -437,6 +834,17 @@ def testArm_Auto_64_32Translate(self): self.assertEqual(abi, 'arm_64_32') self.assertEqual(is_next_build, False) + + def testArm_Auto_64_32HighTranslate(self): + """Test for an auto build with Trichrome and arm_64_32_high.""" + build, patch, package, abi, is_next_build = TranslateVersionCode( + '584500053') + self.assertEqual(build, 5845) + self.assertEqual(patch, 0) + self.assertEqual(package, 'TRICHROME_AUTO') + self.assertEqual(abi, 'arm_64_32_high') + self.assertEqual(is_next_build, False) + def testArm_64_32HighTranslate(self): """Test for a build with Trichrome and arm_64_32_high.""" build, patch, package, abi, is_next_build = TranslateVersionCode( @@ -447,6 +855,26 @@ def testArm_64_32HighTranslate(self): self.assertEqual(abi, 'arm_64_32_high') self.assertEqual(is_next_build, False) + def testArm_64_32HighTranslateM113(self): + """Test for a build with Trichrome and arm_64_32_high.""" + build, patch, package, abi, is_next_build = TranslateVersionCode( + '567217639') + self.assertEqual(abi, 'x86_64') + + build, patch, package, abi, is_next_build = TranslateVersionCode( + '567217539') + self.assertEqual(abi, 'arm_64_32_high') + + def testArm_64_32HighTranslateM114(self): + """Test for a build with Trichrome and arm_64_32_high.""" + build, patch, package, abi, is_next_build = TranslateVersionCode( + '573505339') + self.assertEqual(abi, 'x86_64') + + build, patch, package, abi, is_next_build = TranslateVersionCode( + '573505239') + self.assertEqual(abi, 'arm_64_32_high') + def testX86_64Translate(self): """Test for a build with x86_64.""" build, patch, package, abi, is_next_build = TranslateVersionCode( @@ -498,5 +926,133 @@ def testWebviewTranslate(self): self.assertEqual(is_next_build, False) +class _VersionCodeGroupedTest(unittest.TestCase): + def testGenerateThenTranslate(self): + """Assert it gives correct values for a version code that we generated.""" + output = GenerateVersionCodes(EXAMPLE_GROUPED_VERSION_VALUES, + arch='arm', + is_next_build=False) + + version_code = output['MONOCHROME_VERSION_CODE'] + + build, patch, package, abi, is_next_build = TranslateVersionCode( + version_code) + self.assertEqual(build, int(EXAMPLE_GROUPED_VERSION_VALUES['BUILD'])) + self.assertEqual(patch, int(EXAMPLE_GROUPED_VERSION_VALUES['PATCH'])) + self.assertEqual(package, 'MONOCHROME') + self.assertEqual(abi, 'arm') + self.assertEqual(is_next_build, False) + + def testNextBuildTranslate(self): + """Test for a build with next.""" + build, patch, package, abi, is_next_build = TranslateVersionCode( + '575061210') + self.assertEqual(build, 5750) + self.assertEqual(patch, 112) + self.assertEqual(package, 'CHROME_MODERN') + self.assertEqual(abi, 'arm') + self.assertEqual(is_next_build, True) + + def testArm_64BuildTranslate(self): + """Test for a build with arm_64.""" + build, patch, package, abi, is_next_build = TranslateVersionCode( + '575011214') + self.assertEqual(build, 5750) + self.assertEqual(patch, 112) + self.assertEqual(package, 'CHROME_MODERN') + self.assertEqual(abi, 'arm_64') + self.assertEqual(is_next_build, False) + + def testArm_32_64Translate(self): + """Test for a build with arm_32_64.""" + build, patch, package, abi, is_next_build = TranslateVersionCode( + '575000011') + self.assertEqual(build, 5750) + self.assertEqual(patch, 0) + self.assertEqual(package, 'CHROME_MODERN') + self.assertEqual(abi, 'arm_32_64') + self.assertEqual(is_next_build, False) + + def testArm_64_32Translate(self): + """Test for a build with Trichrome and arm_64_32.""" + build, patch, package, abi, is_next_build = TranslateVersionCode( + '575000032') + self.assertEqual(build, 5750) + self.assertEqual(patch, 0) + self.assertEqual(package, 'TRICHROME') + self.assertEqual(abi, 'arm_64_32') + self.assertEqual(is_next_build, False) + + def testArm_Auto_64_32Translate(self): + """Test for an auto build with Trichrome and arm_64_32.""" + build, patch, package, abi, is_next_build = TranslateVersionCode( + '575000052') + self.assertEqual(build, 5750) + self.assertEqual(patch, 0) + self.assertEqual(package, 'TRICHROME_AUTO') + self.assertEqual(abi, 'arm_64_32') + self.assertEqual(is_next_build, False) + + def testArm_64_32HighTranslate(self): + """Test for a build with Trichrome and arm_64_32_high.""" + build, patch, package, abi, is_next_build = TranslateVersionCode( + '534613739') + self.assertEqual(build, 5346) + self.assertEqual(patch, 137) + self.assertEqual(package, 'TRICHROME') + self.assertEqual(abi, 'arm_64_32_high') + self.assertEqual(is_next_build, False) + + def testX86_64Translate(self): + """Test for a build with x86_64.""" + build, patch, package, abi, is_next_build = TranslateVersionCode( + '575000019') + self.assertEqual(build, 5750) + self.assertEqual(patch, 0) + self.assertEqual(package, 'CHROME_MODERN') + self.assertEqual(abi, 'x86_64') + self.assertEqual(is_next_build, False) + + def testX86_32_64Translate(self): + """Test for a build with x86_32_64.""" + build, patch, package, abi, is_next_build = TranslateVersionCode( + '575000017') + self.assertEqual(build, 5750) + self.assertEqual(patch, 0) + self.assertEqual(package, 'CHROME_MODERN') + self.assertEqual(abi, 'x86_32_64') + self.assertEqual(is_next_build, False) + + def testX86_64_32Translate(self): + """Test for a build with x86_64_32.""" + build, patch, package, abi, is_next_build = TranslateVersionCode( + '575000018') + self.assertEqual(build, 5750) + self.assertEqual(patch, 0) + self.assertEqual(package, 'CHROME_MODERN') + self.assertEqual(abi, 'x86_64_32') + self.assertEqual(is_next_build, False) + + def testX86_Auto_64_32Translate(self): + """Test for an auto build with x86_64_32.""" + build, patch, package, abi, is_next_build = TranslateVersionCode( + '575000058') + self.assertEqual(build, 5750) + self.assertEqual(patch, 0) + self.assertEqual(package, 'TRICHROME_AUTO') + self.assertEqual(abi, 'x86_64_32') + self.assertEqual(is_next_build, False) + + def testWebviewTranslate(self): + """Test for a build with Webview.""" + build, patch, package, abi, is_next_build = TranslateVersionCode( + '575000000', is_webview=True) + self.assertEqual(build, 5750) + self.assertEqual(patch, 0) + self.assertEqual(package, 'WEBVIEW_STABLE') + self.assertEqual(abi, 'arm') + self.assertEqual(is_next_build, False) + + if __name__ == '__main__': unittest.main() diff --git a/build/util/lib/common/PRESUBMIT.py b/build/util/lib/common/PRESUBMIT.py index b0477fd..28d0cf3 100644 --- a/build/util/lib/common/PRESUBMIT.py +++ b/build/util/lib/common/PRESUBMIT.py @@ -3,17 +3,11 @@ # found in the LICENSE file. -USE_PYTHON3 = True def _RunTests(input_api, output_api): return (input_api.canned_checks.RunUnitTestsInDirectory( - input_api, - output_api, - '.', - files_to_check=[r'.+_test.py$'], - run_on_python2=False, - skip_shebang_check=True)) + input_api, output_api, '.', files_to_check=[r'.+_test.py$'])) def CheckChangeOnUpload(input_api, output_api): diff --git a/build/util/lib/common/chrome_test_server_spawner.py b/build/util/lib/common/chrome_test_server_spawner.py index 62788f2..9c00e07 100644 --- a/build/util/lib/common/chrome_test_server_spawner.py +++ b/build/util/lib/common/chrome_test_server_spawner.py @@ -18,9 +18,10 @@ import sys import threading import time +import urllib -from six.moves import BaseHTTPServer, urllib - +from http.server import BaseHTTPRequestHandler +from http.server import HTTPServer SERVER_TYPES = { 'http': '', @@ -303,7 +304,7 @@ def Stop(self): self.wait_event.wait() -class SpawningServerRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler): +class SpawningServerRequestHandler(BaseHTTPRequestHandler): """A handler used to process http GET/POST request.""" def _SendResponse(self, response_code, response_reason, additional_headers, @@ -444,8 +445,8 @@ class SpawningServer(object): """The class used to start/stop a http server.""" def __init__(self, test_server_spawner_port, port_forwarder, max_instances): - self.server = BaseHTTPServer.HTTPServer(('', test_server_spawner_port), - SpawningServerRequestHandler) + self.server = HTTPServer(('', test_server_spawner_port), + SpawningServerRequestHandler) self.server_port = self.server.server_port _logger.info('Started test server spawner on port: %d.', self.server_port) diff --git a/build/util/lib/results/result_sink.py b/build/util/lib/results/result_sink.py index 3996b65..e825954 100644 --- a/build/util/lib/results/result_sink.py +++ b/build/util/lib/results/result_sink.py @@ -7,11 +7,14 @@ import logging import os -import six - import requests # pylint: disable=import-error from lib.results import result_types +HTML_SUMMARY_MAX = 4096 + +_HTML_SUMMARY_ARTIFACT = '' +_TEST_LOG_ARTIFACT = '' + # Maps result_types to the luci test-result.proto. # https://godoc.org/go.chromium.org/luci/resultdb/proto/v1#TestStatus RESULT_MAP = { @@ -80,7 +83,8 @@ def Post(self, variant=None, artifacts=None, failure_reason=None, - html_artifact=None): + html_artifact=None, + tags=None): """Uploads the test result to the ResultSink server. This assumes that the rdb stream has been called already and that @@ -101,6 +105,8 @@ def Post(self, html_artifact: An optional html-formatted string to prepend to the test's log. Useful to encode click-able URL links in the test log, since that won't be formatted in the test_log. + tags: An optional list of tuple of key name and value to prepend to the + test's tags. Returns: N/A @@ -132,16 +138,33 @@ def Post(self, } } + if tags: + tr['tags'].extend({ + 'key': key_name, + 'value': value + } for (key_name, value) in tags) + if variant: tr['variant'] = {'def': variant} artifacts = artifacts or {} tr['summaryHtml'] = html_artifact if html_artifact else '' + + # If over max supported length of html summary, replace with artifact + # upload. + if (test_log + and len(tr['summaryHtml']) + len(_TEST_LOG_ARTIFACT) > HTML_SUMMARY_MAX + or len(tr['summaryHtml']) > HTML_SUMMARY_MAX): + b64_summary = base64.b64encode(tr['summaryHtml'].encode()).decode() + artifacts.update({'HTML Summary': {'contents': b64_summary}}) + tr['summaryHtml'] = _HTML_SUMMARY_ARTIFACT + if test_log: # Upload the original log without any modifications. - b64_log = six.ensure_str(base64.b64encode(six.ensure_binary(test_log))) + b64_log = base64.b64encode(test_log.encode()).decode() artifacts.update({'Test Log': {'contents': b64_log}}) - tr['summaryHtml'] += '' + tr['summaryHtml'] += _TEST_LOG_ARTIFACT + if artifacts: tr['artifacts'] = artifacts if failure_reason: diff --git a/build/util/lib/results/result_sink_test.py b/build/util/lib/results/result_sink_test.py index 7d65677..9025ed7 100755 --- a/build/util/lib/results/result_sink_test.py +++ b/build/util/lib/results/result_sink_test.py @@ -8,10 +8,7 @@ import sys import unittest -# The following non-std imports are fetched via vpython. See the list at -# //.vpython3 -import mock # pylint: disable=import-error -import six +from unittest import mock _BUILD_UTIL_PATH = os.path.abspath( os.path.join(os.path.dirname(__file__), '..', '..')) @@ -39,11 +36,7 @@ def testBasicClient(self): luci_context_json = { 'result_sink': _FAKE_CONTEXT, } - if six.PY2: - open_builtin_path = '__builtin__.open' - else: - open_builtin_path = 'builtins.open' - with mock.patch(open_builtin_path, + with mock.patch('builtins.open', mock.mock_open(read_data=json.dumps(luci_context_json))): client = result_sink.TryInitClient() self.assertEqual( @@ -103,6 +96,47 @@ def testPostFailingTest(self, mock_post): data['testResults'][0]['failureReason']['primaryErrorMessage'], 'omg test failure') + @mock.patch('requests.Session.post') + def testPostWithTestLogAndHTMLSummary(self, mock_post): + # This is under max length, but will be over when test log + # artifact is included. + test_artifact = '' % 'b' * ( + result_sink.HTML_SUMMARY_MAX - 35) + self.client.Post('some-test', + result_types.PASS, + 0, + 'some-test-log', + '//some/test.cc', + html_artifact=test_artifact) + data = json.loads(mock_post.call_args[1]['data']) + self.assertIsNotNone(data['testResults'][0]['summaryHtml']) + self.assertTrue( + len(data['testResults'][0]['summaryHtml']) < + result_sink.HTML_SUMMARY_MAX) + self.assertTrue(result_sink._HTML_SUMMARY_ARTIFACT in data['testResults'][0] + ['summaryHtml']) + self.assertTrue( + result_sink._TEST_LOG_ARTIFACT in data['testResults'][0]['summaryHtml']) + + @mock.patch('requests.Session.post') + def testPostWithTooLongSummary(self, mock_post): + # This will be over max length. + test_artifact = ('' % 'b' * + result_sink.HTML_SUMMARY_MAX) + self.client.Post('some-test', + result_types.PASS, + 0, + 'some-test-log', + '//some/test.cc', + html_artifact=test_artifact) + data = json.loads(mock_post.call_args[1]['data']) + self.assertIsNotNone(data['testResults'][0]['summaryHtml']) + self.assertTrue( + len(data['testResults'][0]['summaryHtml']) < + result_sink.HTML_SUMMARY_MAX) + self.assertTrue(result_sink._HTML_SUMMARY_ARTIFACT in data['testResults'][0] + ['summaryHtml']) + @mock.patch('requests.Session.post') def testPostWithTestFile(self, mock_post): self.client.Post('some-test', result_types.PASS, 0, 'some-test-log', @@ -133,6 +167,24 @@ def testPostWithVariant(self, mock_post): 'key2': 'value2' }}) + @mock.patch('requests.Session.post') + def testPostWithTags(self, mock_post): + self.client.Post('some-test', + result_types.PASS, + 0, + 'some-test-log', + None, + tags=[('key1', 'value1'), ('key2', 'value2')]) + data = json.loads(mock_post.call_args[1]['data']) + self.assertIn({ + 'key': 'key1', + 'value': 'value1' + }, data['testResults'][0]['tags']) + self.assertIn({ + 'key': 'key2', + 'value': 'value2' + }, data['testResults'][0]['tags']) + if __name__ == '__main__': unittest.main() diff --git a/build/util/version_test.py b/build/util/version_test.py index f0869da..f9b468f 100644 --- a/build/util/version_test.py +++ b/build/util/version_test.py @@ -40,7 +40,6 @@ class _VersionTest(unittest.TestCase): _ANDROID_CHROME_VARS = [ 'chrome_version_code', - 'chrome_modern_version_code', 'monochrome_version_code', 'trichrome_version_code', 'webview_stable_version_code', @@ -106,7 +105,6 @@ def testBuildOutputAndroid(self): contents = output['contents'] self.assertRegex(contents, r'\bchrome_version_code = "\d+"\s') - self.assertRegex(contents, r'\bchrome_modern_version_code = "\d+"\s') self.assertRegex(contents, r'\bmonochrome_version_code = "\d+"\s') self.assertRegex(contents, r'\btrichrome_version_code = "\d+"\s') self.assertRegex(contents, r'\bwebview_stable_version_code = "\d+"\s') diff --git a/build/vs_toolchain.py b/build/vs_toolchain.py index 7e9307b..e3ee25b 100755 --- a/build/vs_toolchain.py +++ b/build/vs_toolchain.py @@ -17,7 +17,7 @@ from gn_helpers import ToGNString -# VS 2022 x.x with 10.0.22621.0 SDK with ARM64 libraries and UWP support. +# VS 2022 17.4 with 10.0.22621.0 SDK with ARM64 libraries and UWP support. # See go/chromium-msvc-toolchain for instructions about how to update the # toolchain. # @@ -33,6 +33,8 @@ # Affects the availability of APIs in the toolchain headers. # * //docs/windows_build_instructions.md mentions of VS or Windows SDK. # Keeps the document consistent with the toolchain version. +# * //tools/win/setenv.py +# Add/remove VS versions when upgrading to a new VS version. # * MSVC_TOOLSET_VERSION in this file # Maps between Visual Studio version and MSVC toolset # * MSVS_VERSIONS in this file @@ -398,6 +400,15 @@ def CopyDlls(target_dir, configuration, target_cpu): if configuration == 'Debug': _CopyRuntime(target_dir, runtime_dir, target_cpu, debug=True) _CopyDebugger(target_dir, target_cpu) + if target_cpu == 'arm64': + target_dir = os.path.join(target_dir, 'win_clang_x64') + target_cpu = 'x64' + runtime_dir = x64_runtime + os.makedirs(target_dir, exist_ok=True) + _CopyRuntime(target_dir, runtime_dir, target_cpu, debug=False) + if configuration == 'Debug': + _CopyRuntime(target_dir, runtime_dir, target_cpu, debug=True) + _CopyDebugger(target_dir, target_cpu) def _CopyDebugger(target_dir, target_cpu): diff --git a/build/xcode_binaries.yaml b/build/xcode_binaries.yaml index b9069f4..6619757 100644 --- a/build/xcode_binaries.yaml +++ b/build/xcode_binaries.yaml @@ -22,6 +22,8 @@ root: "xcode_binaries" data: - dir: Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/ - dir: Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/share/bison + - dir: Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/metal/macos + - file: Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/air-lld - file: Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/bison - file: Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/gm4 - file: Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/gperf @@ -33,6 +35,8 @@ data: - file: Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/llvm-objdump - file: Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/llvm-otool - file: Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/llvm-size + - file: Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/metal + - file: Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/metallib - file: Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/mig - file: Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/nm - file: Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/otool diff --git a/build/zip_helpers.py b/build/zip_helpers.py new file mode 100644 index 0000000..b8ab9dd --- /dev/null +++ b/build/zip_helpers.py @@ -0,0 +1,238 @@ +# Copyright 2023 The Chromium Authors +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. +"""Helper functions for dealing with .zip files.""" + +import os +import pathlib +import posixpath +import stat +import time +import zipfile + +_FIXED_ZIP_HEADER_LEN = 30 + + +def _set_alignment(zip_obj, zip_info, alignment): + """Sets a ZipInfo's extra field such that the file will be aligned. + + Args: + zip_obj: The ZipFile object that is being written. + zip_info: The ZipInfo object about to be written. + alignment: The amount of alignment (e.g. 4, or 4*1024). + """ + header_size = _FIXED_ZIP_HEADER_LEN + len(zip_info.filename) + pos = zip_obj.fp.tell() + header_size + padding_needed = (alignment - (pos % alignment)) % alignment + + # Python writes |extra| to both the local file header and the central + # directory's file header. Android's zipalign tool writes only to the + # local file header, so there is more overhead in using Python to align. + zip_info.extra = b'\0' * padding_needed + + +def _hermetic_date_time(timestamp=None): + if not timestamp: + return (2001, 1, 1, 0, 0, 0) + utc_time = time.gmtime(timestamp) + return (utc_time.tm_year, utc_time.tm_mon, utc_time.tm_mday, utc_time.tm_hour, + utc_time.tm_min, utc_time.tm_sec) + + +def add_to_zip_hermetic(zip_file, + zip_path, + *, + src_path=None, + data=None, + compress=None, + alignment=None, + timestamp=None): + """Adds a file to the given ZipFile with a hard-coded modified time. + + Args: + zip_file: ZipFile instance to add the file to. + zip_path: Destination path within the zip file (or ZipInfo instance). + src_path: Path of the source file. Mutually exclusive with |data|. + data: File data as a string. + compress: Whether to enable compression. Default is taken from ZipFile + constructor. + alignment: If set, align the data of the entry to this many bytes. + timestamp: The last modification date and time for the archive member. + """ + assert (src_path is None) != (data is None), ( + '|src_path| and |data| are mutually exclusive.') + if isinstance(zip_path, zipfile.ZipInfo): + zipinfo = zip_path + zip_path = zipinfo.filename + else: + zipinfo = zipfile.ZipInfo(filename=zip_path) + zipinfo.external_attr = 0o644 << 16 + + zipinfo.date_time = _hermetic_date_time(timestamp) + + if alignment: + _set_alignment(zip_file, zipinfo, alignment) + + # Filenames can contain backslashes, but it is more likely that we've + # forgotten to use forward slashes as a directory separator. + assert '\\' not in zip_path, 'zip_path should not contain \\: ' + zip_path + assert not posixpath.isabs(zip_path), 'Absolute zip path: ' + zip_path + assert not zip_path.startswith('..'), 'Should not start with ..: ' + zip_path + assert posixpath.normpath(zip_path) == zip_path, ( + f'Non-canonical zip_path: {zip_path} vs: {posixpath.normpath(zip_path)}') + assert zip_path not in zip_file.namelist(), ( + 'Tried to add a duplicate zip entry: ' + zip_path) + + if src_path and os.path.islink(src_path): + zipinfo.external_attr |= stat.S_IFLNK << 16 # mark as a symlink + zip_file.writestr(zipinfo, os.readlink(src_path)) + return + + # Maintain the executable bit. + if src_path: + st = os.stat(src_path) + for mode in (stat.S_IXUSR, stat.S_IXGRP, stat.S_IXOTH): + if st.st_mode & mode: + zipinfo.external_attr |= mode << 16 + + if src_path: + with open(src_path, 'rb') as f: + data = f.read() + + # zipfile will deflate even when it makes the file bigger. To avoid + # growing files, disable compression at an arbitrary cut off point. + if len(data) < 16: + compress = False + + # None converts to ZIP_STORED, when passed explicitly rather than the + # default passed to the ZipFile constructor. + compress_type = zip_file.compression + if compress is not None: + compress_type = zipfile.ZIP_DEFLATED if compress else zipfile.ZIP_STORED + zip_file.writestr(zipinfo, data, compress_type) + + +def add_files_to_zip(inputs, + output, + *, + base_dir=None, + compress=None, + zip_prefix_path=None, + timestamp=None): + """Creates a zip file from a list of files. + + Args: + inputs: A list of paths to zip, or a list of (zip_path, fs_path) tuples. + output: Path, fileobj, or ZipFile instance to add files to. + base_dir: Prefix to strip from inputs. + compress: Whether to compress + zip_prefix_path: Path prepended to file path in zip file. + timestamp: Unix timestamp to use for files in the archive. + """ + if base_dir is None: + base_dir = '.' + input_tuples = [] + for tup in inputs: + if isinstance(tup, str): + src_path = tup + zip_path = os.path.relpath(src_path, base_dir) + # Zip files always use / as path separator. + if os.path.sep != posixpath.sep: + zip_path = str(pathlib.Path(zip_path).as_posix()) + tup = (zip_path, src_path) + input_tuples.append(tup) + + # Sort by zip path to ensure stable zip ordering. + input_tuples.sort(key=lambda tup: tup[0]) + + out_zip = output + if not isinstance(output, zipfile.ZipFile): + out_zip = zipfile.ZipFile(output, 'w') + + try: + for zip_path, fs_path in input_tuples: + if zip_prefix_path: + zip_path = posixpath.join(zip_prefix_path, zip_path) + add_to_zip_hermetic(out_zip, + zip_path, + src_path=fs_path, + compress=compress, + timestamp=timestamp) + finally: + if output is not out_zip: + out_zip.close() + + +def zip_directory(output, base_dir, **kwargs): + """Zips all files in the given directory.""" + inputs = [] + for root, _, files in os.walk(base_dir): + for f in files: + inputs.append(os.path.join(root, f)) + + add_files_to_zip(inputs, output, base_dir=base_dir, **kwargs) + + +def merge_zips(output, input_zips, path_transform=None, compress=None): + """Combines all files from |input_zips| into |output|. + + Args: + output: Path, fileobj, or ZipFile instance to add files to. + input_zips: Iterable of paths to zip files to merge. + path_transform: Called for each entry path. Returns a new path, or None to + skip the file. + compress: Overrides compression setting from origin zip entries. + """ + assert not isinstance(input_zips, str) # Easy mistake to make. + if isinstance(output, zipfile.ZipFile): + out_zip = output + out_filename = output.filename + else: + assert isinstance(output, str), 'Was: ' + repr(output) + out_zip = zipfile.ZipFile(output, 'w') + out_filename = output + + # Include paths in the existing zip here to avoid adding duplicate files. + crc_by_name = {i.filename: (out_filename, i.CRC) for i in out_zip.infolist()} + + try: + for in_file in input_zips: + with zipfile.ZipFile(in_file, 'r') as in_zip: + for info in in_zip.infolist(): + # Ignore directories. + if info.filename[-1] == '/': + continue + if path_transform: + dst_name = path_transform(info.filename) + if dst_name is None: + continue + else: + dst_name = info.filename + + data = in_zip.read(info) + + # If there's a duplicate file, ensure contents is the same and skip + # adding it multiple times. + if dst_name in crc_by_name: + orig_filename, orig_crc = crc_by_name[dst_name] + new_crc = zipfile.crc32(data) + if new_crc == orig_crc: + continue + msg = f"""File appeared in multiple inputs with differing contents. +File: {dst_name} +Input1: {orig_filename} +Input2: {in_file}""" + raise Exception(msg) + + if compress is not None: + compress_entry = compress + else: + compress_entry = info.compress_type != zipfile.ZIP_STORED + add_to_zip_hermetic(out_zip, + dst_name, + data=data, + compress=compress_entry) + crc_by_name[dst_name] = (in_file, out_zip.getinfo(dst_name).CRC) + finally: + if output is not out_zip: + out_zip.close() diff --git a/build/zip_helpers_unittest.py b/build/zip_helpers_unittest.py new file mode 100755 index 0000000..1900027 --- /dev/null +++ b/build/zip_helpers_unittest.py @@ -0,0 +1,58 @@ +#!/usr/bin/env python3 +# Copyright 2023 The Chromium Authors +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +import os +import pathlib +import shutil +import sys +import tempfile +import unittest +import zipfile + +import zip_helpers + + +def _make_test_zips(tmp_dir, create_conflct=False): + zip1 = os.path.join(tmp_dir, 'A.zip') + zip2 = os.path.join(tmp_dir, 'B.zip') + with zipfile.ZipFile(zip1, 'w') as z: + z.writestr('file1', 'AAAAA') + z.writestr('file2', 'BBBBB') + with zipfile.ZipFile(zip2, 'w') as z: + z.writestr('file2', 'ABABA' if create_conflct else 'BBBBB') + z.writestr('file3', 'CCCCC') + return zip1, zip2 + + +class ZipHelpersTest(unittest.TestCase): + def test_merge_zips__identical_file(self): + with tempfile.TemporaryDirectory() as tmp_dir: + zip1, zip2 = _make_test_zips(tmp_dir) + + merged_zip = os.path.join(tmp_dir, 'merged.zip') + zip_helpers.merge_zips(merged_zip, [zip1, zip2]) + + with zipfile.ZipFile(merged_zip) as z: + self.assertEqual(z.namelist(), ['file1', 'file2', 'file3']) + + def test_merge_zips__conflict(self): + with tempfile.TemporaryDirectory() as tmp_dir: + zip1, zip2 = _make_test_zips(tmp_dir, create_conflct=True) + + merged_zip = os.path.join(tmp_dir, 'merged.zip') + with self.assertRaises(Exception): + zip_helpers.merge_zips(merged_zip, [zip1, zip2]) + + def test_merge_zips__conflict_with_append(self): + with tempfile.TemporaryDirectory() as tmp_dir: + zip1, zip2 = _make_test_zips(tmp_dir, create_conflct=True) + + with self.assertRaises(Exception): + with zipfile.ZipFile(zip1, 'a') as dst_zip: + zip_helpers.merge_zips(dst_zip, [zip2]) + + +if __name__ == '__main__': + unittest.main() diff --git a/buildtools/third_party/libc++/BUILD.gn b/buildtools/third_party/libc++/BUILD.gn index 21421aa..448459e 100644 --- a/buildtools/third_party/libc++/BUILD.gn +++ b/buildtools/third_party/libc++/BUILD.gn @@ -70,64 +70,86 @@ target(_libcxx_target_type, "libc++") { inputs = [ "__config_site" ] + # TODO(crbug.com/1458042): Move this build file to third_party/libc++/BUILD.gn once submodule migration is done sources = [ - "trunk/src/algorithm.cpp", - "trunk/src/any.cpp", - "trunk/src/atomic.cpp", - "trunk/src/barrier.cpp", - "trunk/src/bind.cpp", - "trunk/src/charconv.cpp", - "trunk/src/chrono.cpp", - "trunk/src/condition_variable.cpp", - "trunk/src/condition_variable_destructor.cpp", - "trunk/src/exception.cpp", - "trunk/src/format.cpp", - "trunk/src/functional.cpp", - "trunk/src/future.cpp", - "trunk/src/hash.cpp", - "trunk/src/ios.cpp", - "trunk/src/ios.instantiations.cpp", - "trunk/src/iostream.cpp", - "trunk/src/legacy_pointer_safety.cpp", - "trunk/src/locale.cpp", - "trunk/src/memory.cpp", - "trunk/src/mutex.cpp", - "trunk/src/mutex_destructor.cpp", - "trunk/src/new.cpp", - "trunk/src/optional.cpp", - "trunk/src/random.cpp", - "trunk/src/random_shuffle.cpp", - "trunk/src/regex.cpp", - "trunk/src/ryu/d2fixed.cpp", - "trunk/src/ryu/d2s.cpp", - "trunk/src/ryu/f2s.cpp", - "trunk/src/shared_mutex.cpp", - "trunk/src/stdexcept.cpp", - "trunk/src/string.cpp", - "trunk/src/strstream.cpp", - "trunk/src/system_error.cpp", - "trunk/src/thread.cpp", - "trunk/src/typeinfo.cpp", - "trunk/src/utility.cpp", - "trunk/src/valarray.cpp", - "trunk/src/variant.cpp", - "trunk/src/vector.cpp", - "trunk/src/verbose_abort.cpp", + "//third_party/libc++/src/src/algorithm.cpp", + "//third_party/libc++/src/src/any.cpp", + "//third_party/libc++/src/src/atomic.cpp", + "//third_party/libc++/src/src/barrier.cpp", + "//third_party/libc++/src/src/bind.cpp", + "//third_party/libc++/src/src/charconv.cpp", + "//third_party/libc++/src/src/chrono.cpp", + "//third_party/libc++/src/src/condition_variable.cpp", + "//third_party/libc++/src/src/condition_variable_destructor.cpp", + "//third_party/libc++/src/src/exception.cpp", + "//third_party/libc++/src/src/filesystem/directory_iterator.cpp", + "//third_party/libc++/src/src/filesystem/filesystem_error.cpp", + "//third_party/libc++/src/src/filesystem/operations.cpp", + "//third_party/libc++/src/src/filesystem/path.cpp", + "//third_party/libc++/src/src/functional.cpp", + "//third_party/libc++/src/src/future.cpp", + "//third_party/libc++/src/src/hash.cpp", + "//third_party/libc++/src/src/ios.cpp", + "//third_party/libc++/src/src/ios.instantiations.cpp", + "//third_party/libc++/src/src/iostream.cpp", + "//third_party/libc++/src/src/legacy_pointer_safety.cpp", + "//third_party/libc++/src/src/locale.cpp", + "//third_party/libc++/src/src/memory.cpp", + "//third_party/libc++/src/src/mutex.cpp", + "//third_party/libc++/src/src/mutex_destructor.cpp", + "//third_party/libc++/src/src/new_handler.cpp", + "//third_party/libc++/src/src/new_helpers.cpp", + "//third_party/libc++/src/src/optional.cpp", + "//third_party/libc++/src/src/random.cpp", + "//third_party/libc++/src/src/random_shuffle.cpp", + "//third_party/libc++/src/src/regex.cpp", + "//third_party/libc++/src/src/ryu/d2fixed.cpp", + "//third_party/libc++/src/src/ryu/d2s.cpp", + "//third_party/libc++/src/src/ryu/f2s.cpp", + "//third_party/libc++/src/src/shared_mutex.cpp", + "//third_party/libc++/src/src/stdexcept.cpp", + "//third_party/libc++/src/src/string.cpp", + "//third_party/libc++/src/src/strstream.cpp", + "//third_party/libc++/src/src/system_error.cpp", + "//third_party/libc++/src/src/thread.cpp", + "//third_party/libc++/src/src/typeinfo.cpp", + "//third_party/libc++/src/src/valarray.cpp", + "//third_party/libc++/src/src/variant.cpp", + "//third_party/libc++/src/src/vector.cpp", + "//third_party/libc++/src/src/verbose_abort.cpp", ] + if (is_apple || (!is_asan && !is_tsan && !is_msan)) { + # In {a,t,m}san configurations, operator new and operator delete will be + # provided by the sanitizer runtime library. Since libc++ defines these + # symbols with weak linkage, and the *san runtime uses strong linkage, it + # should technically be OK to include this file, but it's removed to be + # explicit. + sources += [ "//third_party/libc++/src/src/new.cpp" ] + } + + if (is_linux) { + # These sources are necessary for the Centipede fuzzer, + # which currently only needs to run on Linux. + sources += [ + "//third_party/libc++/src/src/filesystem/directory_entry.cpp", + "//third_party/libc++/src/src/filesystem/filesystem_clock.cpp", + ] + } + if (enable_iterator_debugging) { sources += [ - "trunk/src/debug.cpp", - "trunk/src/legacy_debug_handler.cpp", + "//third_party/libc++/src/src/debug.cpp", + "//third_party/libc++/src/src/legacy_debug_handler.cpp", ] } - include_dirs = [ "trunk/src" ] + include_dirs = [ "//third_party/libc++/src/src" ] if (is_win) { sources += [ - "trunk/src/support/win32/locale_win32.cpp", - "trunk/src/support/win32/support.cpp", - "trunk/src/support/win32/thread_win32.cpp", + "//third_party/libc++/src/src/support/win32/locale_win32.cpp", + "//third_party/libc++/src/src/support/win32/support.cpp", + "//third_party/libc++/src/src/support/win32/thread_win32.cpp", ] configs -= [ "//build/config/win:winver" ] configs += [ ":winver" ] @@ -196,13 +218,6 @@ target(_libcxx_target_type, "libc++") { ] } } - if (!is_apple && (is_asan || is_tsan || is_msan)) { - # In {a,t,m}san configurations, operator new and operator delete will be - # provided by the sanitizer runtime library. Since libc++ defines these - # symbols with weak linkage, and the *san runtime uses strong linkage, it - # should technically be OK to omit this, but it's added to be explicit. - defines += [ "_LIBCPP_DISABLE_NEW_DELETE_DEFINITIONS" ] - } if (!is_win) { defines += [ "LIBCXX_BUILDING_LIBCXXABI" ] diff --git a/buildtools/third_party/libc++/OWNERS b/buildtools/third_party/libc++/OWNERS index 52faa91..9a192b4 100644 --- a/buildtools/third_party/libc++/OWNERS +++ b/buildtools/third_party/libc++/OWNERS @@ -1,2 +1,3 @@ +hans@chromium.org thakis@chromium.org thomasanderson@chromium.org diff --git a/buildtools/third_party/libc++/__config_site b/buildtools/third_party/libc++/__config_site index 4ac81de..54e6b7e 100644 --- a/buildtools/third_party/libc++/__config_site +++ b/buildtools/third_party/libc++/__config_site @@ -11,7 +11,7 @@ // on Windows, the increase is great enough that we go above the 4GB size // limit for PDBs (https://crbug.com/1327710#c5). To fix this, we set // _LIBCPP_ABI_NAMESPACE to a shorter value. -#define _LIBCPP_ABI_NAMESPACE Cr +#define _LIBCPP_ABI_NAMESPACE __Cr #define _LIBCPP_ABI_VERSION 2 /* #undef _LIBCPP_ABI_FORCE_ITANIUM */ @@ -27,12 +27,16 @@ #define _LIBCPP_HAS_NO_VENDOR_AVAILABILITY_ANNOTATIONS /* #undef _LIBCPP_NO_VCRUNTIME */ /* #undef _LIBCPP_TYPEINFO_COMPARISON_IMPLEMENTATION */ -/* #undef _LIBCPP_HAS_NO_FILESYSTEM_LIBRARY */ +/* #undef _LIBCPP_HAS_NO_FILESYSTEM */ /* #undef _LIBCPP_HAS_PARALLEL_ALGORITHMS */ /* #undef _LIBCPP_HAS_NO_RANDOM_DEVICE */ /* #undef _LIBCPP_HAS_NO_LOCALIZATION */ /* #undef _LIBCPP_HAS_NO_WIDE_CHARACTERS */ +// PSTL backends +/* #undef _LIBCPP_PSTL_CPU_BACKEND_SERIAL */ +#define _LIBCPP_PSTL_CPU_BACKEND_THREAD + // Settings below aren't part of __config_site upstream. // We set them here since we want them to take effect everywhere, // unconditionally. @@ -45,9 +49,20 @@ #define _LIBCPP_REMOVE_TRANSITIVE_INCLUDES +// Don't add ABI tags to libc++ symbols. ABI tags increase mangled name sizes. +// This only exists to allow multiple // libc++ versions to be linked into a +// binary, which Chrome doesn't do. +#define _LIBCPP_NO_ABI_TAG + // Explicitly define _LIBCPP_VERBOSE_ABORT(...) to call the termination // function because by default, this macro will does not call the verbose // termination function on Apple platforms. #define _LIBCPP_VERBOSE_ABORT(...) ::std::__libcpp_verbose_abort(__VA_ARGS__) +// TODO(crbug.com/1455923) Link against compiler-rt's builtins library to +// enable 128-arithmetic. +#if defined(_WIN32) +#define _LIBCPP_HAS_NO_INT128 +#endif + #endif // _LIBCPP_CONFIG_SITE diff --git a/buildtools/third_party/libc++/trunk b/buildtools/third_party/libc++/trunk deleted file mode 160000 index 6f4617b..0000000 --- a/buildtools/third_party/libc++/trunk +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 6f4617b9efc36525e030ec9855114f3c93550ec1 diff --git a/buildtools/third_party/libc++abi/BUILD.gn b/buildtools/third_party/libc++abi/BUILD.gn index 4e1e334..b5c15a0 100644 --- a/buildtools/third_party/libc++abi/BUILD.gn +++ b/buildtools/third_party/libc++abi/BUILD.gn @@ -2,7 +2,9 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. +import("//build/config/android/config.gni") import("//build/config/c++/c++.gni") +import("//build/config/unwind.gni") source_set("libc++abi") { if (export_libcxxabi_from_executables) { @@ -14,33 +16,34 @@ source_set("libc++abi") { # Fuchsia builds don't link against any libraries that provide stack # unwinding symbols, unlike Linux does with glibc (same applies for Android). # Build and link against libunwind manually to get this functionality. - if (is_fuchsia || is_android) { + if (use_custom_libunwind) { deps = [ "//buildtools/third_party/libunwind" ] } + # TODO(crbug.com/1458042): Move this build file to third_party/libc++/BUILD.gn once submodule migration is done sources = [ - "trunk/src/abort_message.cpp", - "trunk/src/cxa_aux_runtime.cpp", - "trunk/src/cxa_default_handlers.cpp", - "trunk/src/cxa_exception.cpp", - "trunk/src/cxa_exception_storage.cpp", - "trunk/src/cxa_handlers.cpp", + "//third_party/libc++abi/src/src/abort_message.cpp", + "//third_party/libc++abi/src/src/cxa_aux_runtime.cpp", + "//third_party/libc++abi/src/src/cxa_default_handlers.cpp", + "//third_party/libc++abi/src/src/cxa_exception.cpp", + "//third_party/libc++abi/src/src/cxa_exception_storage.cpp", + "//third_party/libc++abi/src/src/cxa_handlers.cpp", # This file is supposed to be used in fno-exception builds of # libc++abi. We build lib++/libc++abi with exceptions enabled. - #"trunk/src/cxa_noexception.cpp", - "trunk/src/cxa_personality.cpp", - "trunk/src/cxa_vector.cpp", - "trunk/src/cxa_virtual.cpp", - "trunk/src/fallback_malloc.cpp", - "trunk/src/private_typeinfo.cpp", - "trunk/src/stdlib_exception.cpp", - "trunk/src/stdlib_stdexcept.cpp", - "trunk/src/stdlib_typeinfo.cpp", + #"//third_party/libc++abi/src/src/cxa_noexception.cpp", + "//third_party/libc++abi/src/src/cxa_personality.cpp", + "//third_party/libc++abi/src/src/cxa_vector.cpp", + "//third_party/libc++abi/src/src/cxa_virtual.cpp", + "//third_party/libc++abi/src/src/fallback_malloc.cpp", + "//third_party/libc++abi/src/src/private_typeinfo.cpp", + "//third_party/libc++abi/src/src/stdlib_exception.cpp", + "//third_party/libc++abi/src/src/stdlib_stdexcept.cpp", + "//third_party/libc++abi/src/src/stdlib_typeinfo.cpp", ] if (!is_tsan) { - sources += [ "trunk/src/cxa_guard.cpp" ] + sources += [ "//third_party/libc++abi/src/src/cxa_guard.cpp" ] } # See the comment in cxa_demangle_stub.cc for why we don't use LLVM's @@ -50,14 +53,22 @@ source_set("libc++abi") { if (is_android) { sources += [ "cxa_demangle_stub.cc" ] } else { - sources += [ "trunk/src/cxa_demangle.cpp" ] + sources += [ "//third_party/libc++abi/src/src/cxa_demangle.cpp" ] } + defines = [ "LIBCXXABI_SILENT_TERMINATE" ] + if (is_fuchsia || (is_posix && !is_apple)) { - sources += [ "trunk/src/cxa_thread_atexit.cpp" ] - } + sources += [ "//third_party/libc++abi/src/src/cxa_thread_atexit.cpp" ] - defines = [ "LIBCXXABI_SILENT_TERMINATE" ] + # Android's bionic libc added support for '__cxa_thread_atexit_impl' as of + # API level 23. + if (is_android && + ((!android_64bit_target_cpu && android32_ndk_api_level >= 23) || + (android_64bit_target_cpu && android64_ndk_api_level >= 23))) { + defines += [ "HAVE___CXA_THREAD_ATEXIT_IMPL" ] + } + } configs -= [ "//build/config/compiler:chromium_code", @@ -86,5 +97,5 @@ source_set("libc++abi") { } # libc++abi depends on libc++ internals. - include_dirs = [ "../libc++/trunk/src" ] + include_dirs = [ "//third_party/libc++/src/src" ] } diff --git a/buildtools/third_party/libc++abi/trunk b/buildtools/third_party/libc++abi/trunk deleted file mode 160000 index f7460fc..0000000 --- a/buildtools/third_party/libc++abi/trunk +++ /dev/null @@ -1 +0,0 @@ -Subproject commit f7460fc60ab56553f0b3b0853f1ea60aa51b9478 diff --git a/buildtools/third_party/libunwind/BUILD.gn b/buildtools/third_party/libunwind/BUILD.gn index a8287bf..ff1517d 100644 --- a/buildtools/third_party/libunwind/BUILD.gn +++ b/buildtools/third_party/libunwind/BUILD.gn @@ -19,31 +19,29 @@ config("libunwind_config") { ] } +# TODO(crbug.com/1458042): Move this build file to third_party/libc++/BUILD.gn once submodule migration is done source_set("libunwind") { - visibility = [] - if (is_fuchsia) { - visibility += [ "//buildtools/third_party/libc++abi" ] - } else if (is_android) { - visibility += [ "//buildtools/third_party/libc++abi" ] + visibility = [ "//buildtools/third_party/libc++abi" ] + if (is_android) { visibility += [ "//services/tracing/public/cpp" ] } if (!is_component_build) { defines = [ "_LIBUNWIND_DISABLE_VISIBILITY_ANNOTATIONS" ] } - include_dirs = [ "//buildtools/third_party/libunwind/trunk/include" ] + include_dirs = [ "//third_party/libunwind/src/include" ] sources = [ # C++ sources - "trunk/src/Unwind-EHABI.cpp", - "trunk/src/libunwind.cpp", + "//third_party/libunwind/src/src/Unwind-EHABI.cpp", + "//third_party/libunwind/src/src/libunwind.cpp", # C sources - "trunk/src/Unwind-sjlj.c", - "trunk/src/UnwindLevel1-gcc-ext.c", - "trunk/src/UnwindLevel1.c", + "//third_party/libunwind/src/src/Unwind-sjlj.c", + "//third_party/libunwind/src/src/UnwindLevel1-gcc-ext.c", + "//third_party/libunwind/src/src/UnwindLevel1.c", # ASM sources - "trunk/src/UnwindRegistersRestore.S", - "trunk/src/UnwindRegistersSave.S", + "//third_party/libunwind/src/src/UnwindRegistersRestore.S", + "//third_party/libunwind/src/src/UnwindRegistersSave.S", ] configs -= [ "//build/config/compiler:chromium_code", diff --git a/buildtools/third_party/libunwind/trunk b/buildtools/third_party/libunwind/trunk deleted file mode 160000 index c4ed9cb..0000000 --- a/buildtools/third_party/libunwind/trunk +++ /dev/null @@ -1 +0,0 @@ -Subproject commit c4ed9cba55ce96b94a1f676890dcac8673cdedfd diff --git a/scripts/create_dist.js b/scripts/create_dist.js index d080df3..97b955b 100755 --- a/scripts/create_dist.js +++ b/scripts/create_dist.js @@ -32,19 +32,19 @@ const gnzip = new JSZip() const files = searchFiles('build_overrides').concat( searchFiles('build')).concat( - searchFiles('buildtools/third_party/libc++/trunk/src')).concat( - searchFiles('buildtools/third_party/libc++/trunk/include')).concat( - searchFiles('buildtools/third_party/libc++abi/trunk/src')).concat( - searchFiles('buildtools/third_party/libc++abi/trunk/include')).concat( - searchFiles('buildtools/third_party/libunwind/trunk/src')).concat( - searchFiles('buildtools/third_party/libunwind/trunk/include')).concat( searchFiles('testing')).concat( searchFiles('tools/cfi')).concat( searchFiles('tools/clang/scripts')).concat( searchFiles('tools/win')).concat( searchFiles('third_party/catapult')).concat( searchFiles('third_party/depot_tools')).concat( - searchFiles('third_party/googletest')) + searchFiles('third_party/googletest')).concat( + searchFiles('third_party/libc++/src/src')).concat( + searchFiles('third_party/libc++/src/include')).concat( + searchFiles('third_party/libc++abi/src/src')).concat( + searchFiles('third_party/libc++abi/src/include')).concat( + searchFiles('third_party/libunwind/src/src')).concat( + searchFiles('third_party/libunwind/src/include')) addFileToZip(gnzip, 'buildtools/deps_revisions.gni', '.') addFileToZip(gnzip, 'buildtools/third_party/eu-strip/bin/eu-strip', '.') addFileToZip(gnzip, 'buildtools/third_party/libc++/__config_site', '.') diff --git a/third_party/libc++/OWNERS b/third_party/libc++/OWNERS new file mode 100644 index 0000000..9a192b4 --- /dev/null +++ b/third_party/libc++/OWNERS @@ -0,0 +1,3 @@ +hans@chromium.org +thakis@chromium.org +thomasanderson@chromium.org diff --git a/buildtools/third_party/libc++/README.chromium b/third_party/libc++/README.chromium similarity index 81% rename from buildtools/third_party/libc++/README.chromium rename to third_party/libc++/README.chromium index 0c6fbee..235c7d6 100644 --- a/buildtools/third_party/libc++/README.chromium +++ b/third_party/libc++/README.chromium @@ -3,8 +3,9 @@ Short Name: libc++ URL: http://libcxx.llvm.org/ Version: 1.0 License: MIT, University of Illinois/NCSA Open Source License -License File: trunk/LICENSE.TXT +License File: src/LICENSE.TXT Security Critical: yes +Shipped: yes Description: diff --git a/third_party/libc++/README.md b/third_party/libc++/README.md new file mode 100644 index 0000000..1714baf --- /dev/null +++ b/third_party/libc++/README.md @@ -0,0 +1,4 @@ +The chromium build files for source files in third_party/libc++/src are in /buildtools/third_party/libc++ + +TODO(crbug.com/1458042): After chromium/src is on Git Submodules, the builds files should be moved +to this directory. diff --git a/third_party/libc++/src b/third_party/libc++/src new file mode 160000 index 0000000..84fb809 --- /dev/null +++ b/third_party/libc++/src @@ -0,0 +1 @@ +Subproject commit 84fb809dd6dae36d556dc0bb702c6cc2ce9d4b80 diff --git a/third_party/libc++abi/OWNERS b/third_party/libc++abi/OWNERS new file mode 100644 index 0000000..52faa91 --- /dev/null +++ b/third_party/libc++abi/OWNERS @@ -0,0 +1,2 @@ +thakis@chromium.org +thomasanderson@chromium.org diff --git a/buildtools/third_party/libc++abi/README.chromium b/third_party/libc++abi/README.chromium similarity index 82% rename from buildtools/third_party/libc++abi/README.chromium rename to third_party/libc++abi/README.chromium index a57429e..6cf9a70 100644 --- a/buildtools/third_party/libc++abi/README.chromium +++ b/third_party/libc++abi/README.chromium @@ -3,9 +3,8 @@ Short Name: libc++abi URL: http://libcxxabi.llvm.org/ Version: 1.0 License: MIT, University of Illinois/NCSA Open Source License -License File: trunk/LICENSE.TXT +License File: src/LICENSE.TXT Security Critical: yes - +Shipped: yes Description: - libc++abi for Chromium. diff --git a/third_party/libc++abi/README.md b/third_party/libc++abi/README.md new file mode 100644 index 0000000..fcc6ebd --- /dev/null +++ b/third_party/libc++abi/README.md @@ -0,0 +1,4 @@ +The chromium build files for source files in third_party/libc++abi/src are /buildtools/third_party/libc++abi/. + +TODO(crbug.com/1458042): After chromium/src is on Git Submodules, the builds files should be moved +to this directory. diff --git a/third_party/libc++abi/src b/third_party/libc++abi/src new file mode 160000 index 0000000..6a8358a --- /dev/null +++ b/third_party/libc++abi/src @@ -0,0 +1 @@ +Subproject commit 6a8358a1423aa37f33d87b300b634c067b2741c1 diff --git a/third_party/libunwind/OWNERS b/third_party/libunwind/OWNERS new file mode 100644 index 0000000..52faa91 --- /dev/null +++ b/third_party/libunwind/OWNERS @@ -0,0 +1,2 @@ +thakis@chromium.org +thomasanderson@chromium.org diff --git a/buildtools/third_party/libunwind/README.chromium b/third_party/libunwind/README.chromium similarity index 75% rename from buildtools/third_party/libunwind/README.chromium rename to third_party/libunwind/README.chromium index 303e148..344659c 100644 --- a/buildtools/third_party/libunwind/README.chromium +++ b/third_party/libunwind/README.chromium @@ -1,9 +1,10 @@ Name: libunwind URL: https://chromium.googlesource.com/external/github.com/llvm/llvm-project/libunwind.git -Version: ToT (Top of the Tree, the mirror is kept in sync with the upstream project) +Version: unknown License: MIT, University of Illinois/NCSA Open Source License -License File: trunk/LICENSE.TXT +License File: src/LICENSE.TXT Security Critical: yes +Shipped: yes Description: diff --git a/third_party/libunwind/README.md b/third_party/libunwind/README.md new file mode 100644 index 0000000..53b3894 --- /dev/null +++ b/third_party/libunwind/README.md @@ -0,0 +1,4 @@ +The chromium build files for source files in third_party/libunwind/src are /buildtools/third_party/libunwind/. + +TODO(crbug.com/1458042): After chromium/src is on Git Submodules, the builds files should be moved +to this directory. diff --git a/third_party/libunwind/src b/third_party/libunwind/src new file mode 160000 index 0000000..76e621a --- /dev/null +++ b/third_party/libunwind/src @@ -0,0 +1 @@ +Subproject commit 76e621a89787516da745489245d8b65a48ad60d8 diff --git a/tools/clang/scripts/update.py b/tools/clang/scripts/update.py index 4fcaaab..82f9c4f 100755 --- a/tools/clang/scripts/update.py +++ b/tools/clang/scripts/update.py @@ -35,11 +35,12 @@ # https://chromium.googlesource.com/chromium/src/+/main/docs/updating_clang.md # Reverting problematic clang rolls is safe, though. # This is the output of `git describe` and is usable as a commit-ish. -CLANG_REVISION = 'llvmorg-17-init-2387-g68e81d7e' -CLANG_SUB_REVISION = 1 +CLANG_REVISION = 'llvmorg-17-init-16420-g0c545a44' +CLANG_SUB_REVISION = 8 PACKAGE_VERSION = '%s-%s' % (CLANG_REVISION, CLANG_SUB_REVISION) RELEASE_VERSION = '17' +# TODO(crbug.com/1467585): Bump to 18 in next Clang roll. CDS_URL = os.environ.get('CDS_CLANG_BUCKET_OVERRIDE', 'https://commondatastorage.googleapis.com/chromium-browser-clang') @@ -60,6 +61,11 @@ def RmTree(dir): """Delete dir.""" + if sys.platform == 'win32': + # Avoid problems with paths longer than MAX_PATH + # https://learn.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-limitation + dir = f'\\\\?\\{dir}' + def ChmodAndRetry(func, path, _): # Subversion can leave read-only files around. if not os.access(path, os.W_OK): @@ -95,7 +101,7 @@ def DownloadUrl(url, output_file): while True: try: - sys.stdout.write('Downloading %s ' % url) + sys.stdout.write(f'Downloading {url} ') sys.stdout.flush() request = urllib.request.Request(url) request.add_header('Accept-Encoding', 'gzip') @@ -127,8 +133,8 @@ def DownloadUrl(url, output_file): sys.stdout.flush() dots_printed = num_dots if total_size is not None and bytes_done != total_size: - raise urllib.error.URLError("only got %d of %d bytes" % - (bytes_done, total_size)) + raise urllib.error.URLError( + f'only got {bytes_done} of {total_size} bytes') if is_gzipped: output_file.write(gzip_decode.flush()) print(' Done.') @@ -142,7 +148,7 @@ def DownloadUrl(url, output_file): num_retries -= 1 output_file.seek(0) output_file.truncate() - print('Retrying in %d s ...' % retry_wait_s) + print(f'Retrying in {retry_wait_s} s ...') sys.stdout.flush() time.sleep(retry_wait_s) retry_wait_s *= 2 @@ -232,21 +238,20 @@ def DownloadAndUnpackClangWinRuntime(output_dir): sys.exit(1) -def UpdatePackage(package_name, host_os): +def UpdatePackage(package_name, host_os, dir=LLVM_BUILD_DIR): stamp_file = None package_file = None - stamp_file = os.path.join(LLVM_BUILD_DIR, package_name + '_revision') + stamp_file = os.path.join(dir, package_name + '_revision') if package_name == 'clang': stamp_file = STAMP_FILE package_file = 'clang' elif package_name == 'coverage_tools': - stamp_file = os.path.join(LLVM_BUILD_DIR, 'cr_coverage_revision') + stamp_file = os.path.join(dir, 'cr_coverage_revision') package_file = 'llvm-code-coverage' elif package_name == 'objdump': package_file = 'llvmobjdump' - elif package_name in ['clang-libs', 'clang-tidy', 'clangd', 'libclang', - 'translation_unit']: + elif package_name in ['clang-tidy', 'clangd', 'libclang', 'translation_unit']: package_file = package_name else: print('Unknown package: "%s".' % package_name) @@ -278,17 +283,17 @@ def UpdatePackage(package_name, host_os): # Updating the main clang package nukes the output dir. Any other packages # need to be updated *after* the clang package. - if package_name == 'clang' and os.path.exists(LLVM_BUILD_DIR): - RmTree(LLVM_BUILD_DIR) + if package_name == 'clang' and os.path.exists(dir): + RmTree(dir) - DownloadAndUnpackPackage(package_file, LLVM_BUILD_DIR, host_os) + DownloadAndUnpackPackage(package_file, dir, host_os) if package_name == 'clang' and 'mac' in target_os: - DownloadAndUnpackClangMacRuntime(LLVM_BUILD_DIR) + DownloadAndUnpackClangMacRuntime(dir) if package_name == 'clang' and 'win' in target_os: # When doing win/cross builds on other hosts, get the Windows runtime # libraries, and llvm-symbolizer.exe (needed in asan builds). - DownloadAndUnpackClangWinRuntime(LLVM_BUILD_DIR) + DownloadAndUnpackClangWinRuntime(dir) WriteStampFile(expected_stamp, stamp_file) return 0 @@ -330,6 +335,11 @@ def main(): help='Verify that clang has the passed-in version.') args = parser.parse_args() + # TODO(crbug.com/1467585): Remove in next Clang roll. + if args.llvm_force_head_revision: + global RELEASE_VERSION + RELEASE_VERSION = '18' + if args.verify_version and args.verify_version != RELEASE_VERSION: print('RELEASE_VERSION is %s but --verify-version argument was %s.' % ( RELEASE_VERSION, args.verify_version)) @@ -340,10 +350,11 @@ def main(): print(RELEASE_VERSION) return 0 + output_dir = LLVM_BUILD_DIR if args.output_dir: - global LLVM_BUILD_DIR, STAMP_FILE - LLVM_BUILD_DIR = os.path.abspath(args.output_dir) - STAMP_FILE = os.path.join(LLVM_BUILD_DIR, 'cr_build_revision') + global STAMP_FILE + output_dir = os.path.abspath(args.output_dir) + STAMP_FILE = os.path.join(output_dir, 'cr_build_revision') if args.print_revision: if args.llvm_force_head_revision: @@ -368,7 +379,7 @@ def main(): print('--llvm-force-head-revision can only be used for --print-revision') return 1 - return UpdatePackage(args.package, args.host_os) + return UpdatePackage(args.package, args.host_os, output_dir) if __name__ == '__main__': diff --git a/tools/gn b/tools/gn index d750800..e96b1bb 160000 --- a/tools/gn +++ b/tools/gn @@ -1 +1 @@ -Subproject commit d7508000ba66841a9170999bdb358d4c6987a0a0 +Subproject commit e96b1bb71f81a65b00ad1736154aa71b12744a08