When generating a config file from a commandline, cargo2android.py
should not dump the --config argument, as the point of the dump is to
generate a config file to use. This would not normally matter, but it
could help in scripts.
Test: Run and do not see --config in the dumped file.
Change-Id: Idc2911ba674e67272c9cf836c89607e10ca0dddd
We no longer use the --dependencies argument, but it is still used in
a number of places. Let's remove its functionality but keep the
command-line option as a no-op so we can remove the uses over time.
Test: Run on crate that uses the option.
Change-Id: I954f68faf11d1a926f0ccf070afa8332385e3671
Only run cargo metadata on the main crate, not all of its dependencies.
Pass it the --format-version argument to avoid a warning and be
future-proof.
Test: Run.
Change-Id: Icdf88bc3b633d18266772ae813fc04b529b95765
Older versions of Python's subprocess do not have capture_output, so
just get stdout directly.
Also pass the full path to cargo in case it is not on PATH.
Test: Run
Change-Id: I368e905a93b344bca6635c6ab7a60def809e88d5
If there are multiple packages present in the workspace, attempt
to determine what the current package is by checking the emitted
crate_name value against the package name. If this still fails, a new
`--no-pkg-vers` flag is added to skip this behavior.
Bug: 196803495
Test: New logic finds package if package.name is used for crate_name
Test: New flag prevents emitting the pkg version.
Change-Id: I152e94a0520f09f37622a6cec340ae35842d56ea
This parses a module's Cargo.toml file for package version number,
setting it to cargo_pkg_version. Also sets cargo_env_compat true by
default.
Bug: 171011485
Test: generated Android.bp includes cargo_env_compat, cargo_pkg_version.
Change-Id: Ibb8021633719650e2021b90806374a5d3c6a161a
Some tests load data from files. These files thus need to be copied
to the correct location on the host/device so that the tests can
access them. This adds an option to cargo2android.py so that it can
generate these data properties.
Bug: 171710847
Test: Use for a crate.
Change-Id: I14a1ad8aca4625cc5f09807d19ffd7499fcf3689
Adds flags to emit vendor_available and vendor_ramdisk_available flags
to generated modules.
Bug: 194078853
Test: Calling script with new flags generates intended properties.
Change-Id: I4f7a6870b4f210b6627054c98962f50e98bc3e03
The test blocklist was failing when multiple tests were merged into
one. To fix this, when merging tests we prefer ones that are not
blocklisted.
Fixes: 193790055
Test: Run on the previously failing crate and another.
Change-Id: I53d1179bebef824ce80ac4f977015b04a26f8607
This patch ensures that rust_defaults for tests have _tests in the
name. This can make the Android.bp file a bit more readable.
Test: Run on a crate and build it.
Change-Id: I5d034c456052b892bd01c3c041b2572bc9364692
Do not generate TEST_MAPPING when running cargo2android.py. Still accept
the command line argument so current users/wrappers continue working.
Bug: 192348260
Test: Run cargo2android.py manually on ahash
Change-Id: I1975119f8fdd3ae850649b105678dec92fa67518
You can either add the blocks to the toplevel of the file or into the
main module. The blocks are given in separate files.
Test: Use both for some crates.
Change-Id: I74204867d4e348c83c7adc2a833be166956bfb7e
This allows you to give cargo2android.py a list of test files to ignore.
Test: Use on a couple crates.
Change-Id: Id9422c496de6693029754f32d9805f1cb92d33cb
A few crates have patches that manually remove a dependency that
cargo2android.py adds. This option can allow us to remove those
patches.
Test: Use when running on a few crates.
Change-Id: Ie8337789ab232fb726ccfe361df489acfdd31b20
This allows the external_updater to understand that an error occurred.
The pre-patched version of the file will still exist.
Test: Run when a patch fails.
Change-Id: I59cc12eeaa751b5e3e2956060f58981d27875748
Currently if cargo produces an error it's not obvious how to debug it.
Add a message telling the user to look at the cargo.out file, which
has its output.
Test: Ran on crates with and without errors
Change-Id: Ib681a8e87f60467c7425aed5f7e5277a0603bcc8
This option is only intended to be temporary, so if it is used it
should not "propagate" itself by being added to the Android.bp header
or the config file.
Test: Do not see it in the header or config file.
Change-Id: Ibb18c76bdab26aa47b38ac75ea3c410ddc612856
This commit adds an --apex-available option to cargo2android.py. It
takes in multiple strings that are included in the generated block.
It also adds --min-sdk-version.
Test: Use flags.
Change-Id: I319a32fc5e8be11015ba4484b0ab1665ee457326
The command-line options to c2a are already long and will only get
longer as new arguments are added. This allows it to load them from a
config file. For simplicity of implementation, the config file
supplements the command-line arguments and uses the same format they
do, although it ideally will replace them over time.
This also adds an option to dump the current set of command-line
arguments to a config file and exit. This is intended to ease
migration over to the config file: for a given crate, we can call c2a
with its command-line arguments plus this new flag to generate the
config file and then use just that instead.
Test: Dump and load some config files.
Change-Id: I63b29dd20bcff5d5832dbd380d7c6eb273547ed0
Generating a TEST_MAPPING file uses Bazel, which can be quite slow
(multiple minutes). Add a flag to allow skipping it. This is off by
default as it ideally will only be used for debugging.
Test: Run all four configurations of --tests and this flag.
Change-Id: I08bde29ea298fcf677addd86f6d953b6695e147f
The code that preserves license blocks currently also preserves
genrules if they come before a rust_ rule, causing them to be
duplicated. Let's fix that.
Test: Upgrade some crates
Change-Id: Ie4f62cd04c2f1dd0de788db0ca5e77502fb3b4c8
Allow this script to accept a path to the crate being updated.
This allows it to be run separately from cargo2android.
Also, fail gracefully on error. TEST_MAPPING update failures should
not block crate updates.
Test: tools/external_updater/updater.sh update rust/crates/libc
Bug: 179132533
Change-Id: I3a4229f479ab3d2793df16b470f0a0632b9ee495
This is important because:
1. Some crates do not have their own tests enabled in presubmit.
2. As much as possible, we try to stick with one version of each
crate. This often results in using different versions of
dependencies than a crate has specified in its Cargo.toml.
Ensuring that a crate's tests continue to pass when its dependencies
are upgraded improves our confidence that the update is safe.
The underlying implementation uses the new Bazel queryview
to query modules and reverse dependencies.
Bug: 168167373
Test: Run cargo2android.py on a number of crates including rusqlite,
scopeguard, lock_api.
Change-Id: Id24f2d3267cf8d5e0369ece2442f8971d4ab1343
Followup to aosp/1548356 to remove the now unused host parameter to add_test.
Test: Manually run script and verify the output.
Change-Id: Id00e56a2dc5523a44dc3cb473702c1ae8785d3db
Instead of generating TEST_MAPPING entries for host tests, we add a
test_options section to its Android.bp entry.
Fixes: 176097100
Test: Manually run cargo2android on a few crates and verify the output
Change-Id: Ia57a53dad6910410c7e7aab6d592fba79720f998
We no longer have the rust_library_shared and rust_library_static module
types. They've been renamed to rust_ffi_* instead. This brings
cargo2android.py up to date.
Bug: 175155132
Test: cargo2android's Android.bp for libquiche contains rust_ffi modules
Change-Id: I01bb8b4e56c41d36481ffd363f96aecb770d7cb8
"host: true" entry should go before "name:" to match the output of
json writers which sort by alphabetical order. This will help and
avoid unnecesary changes when adding new tests to TEST_MAPPING - e.g.
aosp/1488728
Bug: 168167373
Test: cargo2android.py --run --tests
verify output
Change-Id: Id346a7f8a2cd910115e7fcc448c589363209bee9
* Suggest --copy-out if it is not used, cargo output files are found,
and env!("CARGO_OUT") is found in .rs files.
* Expect to see this warning for libsqlite3-sys and grpcio-sys,
which fit to the use case of --copy-out but they have locally
defined .bp files and non-original output files.
* Fix one pylint warning of extra long line.
Bug: 172299436
Test: run cargo with same flags for all rust/crates/*
Test: run cargo without --copy-out for anyhow, protobuf, clang-sys, etc.
Change-Id: Ic346c8e1146b1bb77e63c4cb12947f202b0f458e
* The given patch file will be applied to ./Android.bp.
* Use --ignore-cargo-errors when it is impossible to
use the patch file to fix the error messages in Android.bp.
Bug: 172093078
Test: apply on external/rust/crates/*, some with this flag
Change-Id: Ibca2fd4c63e46a32f32c61afedbba960a684f5d7
* Save Cargo.lock before calling cargo, and restore it after the run.
* Use the --use-cargo-lock flag if the latest dependent crates failed
to build the current crate. In this case, the published Cargo.lock
will be used, but the generated .bp might not work with the other
latest dependent crates in external/rust/crates.
* Fix one gpylint warning.
Bug: 172016745
Test: run through all external/rust/crates/*
Change-Id: I1874a706ac15b74c1dd5a606983b107284d9b28a
* When --copy-out is used:
* copy build.rs output files to ./out
* add a genrule module to copy ./out/* files to its output dir
* add this copy-out genrule module into the srcs list
This makes include! with $OUT_DIR path work without local patch.
This only works for the root directory (package).
* Upgrade to python3 for some required shutil and glob functions.
* Unified dump_srcs_list for defaults and non-defaults modules.
* dump_android_property_list output only one line for a single item list.
Bug: 171659849
Test: regenerate all .bp files in rust/crates/*
Change-Id: Ia7dde0ccede2bcc068f23a046e85304c6f50b0b0
* Now a host cargo build uses the same --target flag as a default
device build.
* When --device is given without --no-host or other device flag,
we can use one cargo build to get the required rustc flags for
both host and device builds.
* We still need merge_host_device because cargo build --test could
recompile a library and create duplicated calls to rustc.
* Fix a gpylint warning missing-function-docstring.
* This change also detected a bug in
external/rust/crates/structopt-derive/Android.bp
The cargo build --tests for device was optimized out
and the device test module was missing in Android.bp.
Bug: 169872957
Test: regenerate all .bp files in external/rust/crates
Change-Id: Ieabdc5a99534a60e4d459c9a966f7a867104c785