* 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
* Handle lower case file names like LICENSE-Apache.
* Use "license" key value in Cargo.toml if LICENSE-* files are missing.
* Recognize license type: ISC
* Improve readability of a sequence of if-statements.
Bug: 170254513
Test: get_rust_pkg.py --add3prf time-macros-impl
Test: run add3prf.py in current rust/crates/* projects
Change-Id: I9642f52090b20922302513a94fa97d41277f9762
* add3prf.py can be called in existing rust package directories
to normalize METADATA, OWNERS, and other LICENSE* files.
* Add option in get_rust_pkg.py to call add3prt.py and add
required files for 3rd party reviews.
Bug: 170254513
Test: call add3prf.py in external/rust/crates/*
Test: get_rust_pkg.py --add3prf quote remain paste
Change-Id: I70ed5942847716af2ca740a91e7ecde50543b7a0
* 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
Binaries built from RBE are using a source path under /b/f/w. Also map that to local source path.
Test: lldbclient.py -r /system/bin/ls
Change-Id: I02a90a9c827189a14b2d83485ed2abda68f9e084
ro.product.name can be individual device name and not the lunch target
name.
466e289dc8 removed this check but we
still need this.
Bug: 166071019
Test: gdbclient.py -n vold # on eve
Change-Id: I60fc20e6cc02ca6dd01fef609c7f60e76c580876
* Problem to solve:
When cargo2android.py is run under external/crosvm,
it does not generate .bp file in some subdirectories like kvm.
* Use --add_workspace flag to append [workspace] in Cargo.toml
temporarily to generate correct relative source file paths.
Otherwise, the path will be based on parent/root package
such as external/crosvm.
* Use --global_defaults=default_name flag to insert a global
default module name like "crosvm_defaults" in every module.
* Use --no-subdir flag to generate .bp file in one directory,
and skip all changes to subdirectories.
* Sort the option names so they show up in order with --help.
* Use relative path for local dependent packages.
* Example: run in external/crosvm with flags;
--run --tests --dependencies --no-subdir
fix-up external/crosvm/Android.bp file,
and then run in each subdirectory with flags:
--run --tests --dependencies --add_workspace
--global_defaults=crosvm_defaults
* Add rename mapping:
libminijail ==> libminijail_rust
Bug: 161716839
Test: regen .bp files in external/crosvm subdirectories
Test: make && atest -m -c --include-subdirs external/crosvm
Change-Id: I0c08d358cc2f88f66e99b59032613d2a5b4ea5eb
* Accept both "-C flag" and "-Cflag" syntax.
* Newer cargo uses "-Cembed-bitcode=no".
* Some -C flags are filtered out, not used in .bp file,
because they are meaningless in .bp file build system.
* Remaining -C flags are passed to rustc in .bp files,
which was missing before this change.
* Look up cargo in the prebuilts directory.
* Now limit this script to run only on linux.
* Try to find cargo/rust version from
build/soong/rust/config/global.go first.
* Otherwise, use the latest (largest) version in prebuilt.
* Add a new --cargo_bin flag to use any user-selected cargo.
* Add the selected cargo directory to PATH before calling cargo,
so it can find rustc in the same directory.
Bug: 161825397
Bug: 161927172
Test: regenerate and check .bp files in external/rust/crates
Change-Id: Ica46f536c2b37b62238d1245ced59685deebad33
* Share srcs in rust_defaults if len(srcs) is 1.
Test: regenerate .bp and TEST_MAPPING files in external/rust/crates
Test: make
Test: atest -c --include-subdirs external/rust/crates
Bug: 161259631
Change-Id: I22a1d567ccabcd945e4cac870049ac3ce7a3049a
* protobuf_bin_gen_rust_do_not_use is in EXCLUDED_CRATES
* build_default_name returns a short and readable name
for a rust_defaults module, from the following choices:
(1) root_pkg + '_defaults',
(2) root_pkg + '_defaults_' + crate_name
(3) root_pkg + '_defaults_' + main_src_basename_path
(4) root_pkg + '_defaults_' + a_positive_sequence_number
Test: regen external/rust/crates/*/Android.bp
Change-Id: I6aa16a8a6c7ea05744a31a9d4ff0c4524ef91fea
* Add a --no-host option.
* Add a --host-first-multilib option.
* Add special renaming for protoc_gen_rust.
* Dump a rust_defaults module to be shared by rust_test modules.
* Every test source file is in a rust_test module.
* Add RENAME_DEFAULTS_MAP for altered rust_defaults names.
* Suppress old error message on --extern proc_macro.
Test: regenerate Android.bp files and check differences
Bug: 161090277
Bug: 161089524
Change-Id: I8c70f568facf58d282ea2a2e72b60c8a2972b27d
* The old deny_warnings is replaced with a comment to remind the users.
Test: regenerate Android.bp files and check differences
Bug: 161001041
Bug: 161001220
Change-Id: I96c43cff83edcb7b50e6beee972c9157d20c8dc9
This makes it clear exactly how a build file was generated and how to
reproduce it.
Bug: 158290206
Change-Id: Icf28a66bf0da708a3fcd0fe3d49893191fb1a8f1
1. Sets up source mapping so that people can run from other directories.
2. Removes PYTHONHOME. It is embedded into the binary.
Change-Id: Ic7a7f1483dc645d890b7e0f3dcbb0ebb169794ac
* Do not emit relative_install_path;
use default unique module name.
* Copy errors in cargo output to Android.bp.
Some Rust packages are incomplete at crates.io
and fail to run through cargo test.
* Apply pyformat.
Bug: 156014698
Test: in external/rust/crates/*, cargo2android.py --run --tests
Change-Id: Ide77ca34e47048a8bc03b18eebbe92fb17666784
* Call print with flush=True to get immediate output to piped files.
* Simplify code with functools.reduce or for-loops.
* Clarify error handling and messages.
* Skip output of empty dependent lists.
* Suppress output of repeated dependent lists.
* Move "revisit" logic from recursive add_non_dev_dependencies to
a while loop in add_indirect_build_deps.
This is less efficient, but more complete and easier to understand.
* Align table captions to something like:
build_deps[k] = # of non-dev-dependent packages of pkg[k]
dev_deps[k] = # of all dependent packages of pkg[k]
all_build_deps[k] = # of non-dev-dependent ... of pkg[1] to pkg[k]
all_dev_deps[k] = # of all dependent ... of pkg[1] to pkg[k]
Test: get_rust_pkg.py -h
Test: get_rust_pkg.py -v -show remain syn quote
Test: get_rust_pkg.py -v -show glob libloading
Change-Id: I6171b6be8806bcdd1129f52e7e5ccf7b274e2e8c
* With flag "-show" and a list of package names,
call crates.io api to count dependent packages.
* The packages are NOT fetched.
* Optional dependent packages are not counted.
* Indirect non-dev dependent packages are counted.
* Finally all non-dev dependent packages are also
included in the report.
* The report is a table like this:
build_deps[k] = # of non-dev-dependent packages of pkg[k]
dev_deps[k] = # of all dependent packages of pkg[k]
all_build_deps[k] = # of non-dev-dependent ... of pkg[1] to pkg[k]
all_dev_deps[k] = # of all dependent ... of pkg[1] to pkg[k]
k pkg build_deps dev_deps all_build_deps all_dev_deps
1 unicode-xid 0 0 0 0
2 proc-macro2 1 3 0 1
3 syn 2 107 0 104
4 quote 2 18 0 107
5 remain 4 18 0 107
Packages are sorted topologically by the non-dev-dependencies.
The column all_build_deps should be 0 if the topological sort
did not find cyclic dependency.
* Simplify find_dl_path with a crates.io api call to get max_version.
* Handle urllib.error.HTTPError exception
* Formatted by pyformat.
Test: get_rust_pkg.py -h
Test: get_rust_pkg.py -show syn remain quote
Test: get_rust_pkg.py -v -show remain syn quote
Change-Id: Ib4ece8dd391558fb5fd866b153f30cd2ef59f6b3
* Duplicated package names are skipped.
* A package name can be a simple base name like 'syn',
or with version number like 'syn-1.0.5'.
Test: get_rust_pkg.py -h
Test: get_rust_pkg.py pkg1 pkg2 pkg3
Test: get_rust_pkg.py -o tmp -v pkg1 pkg2 pkg1
Change-Id: I5757f20c9a7cb244dc4b06113e28fcf4585c0703
* Change crate_type string to crate_types list.
In dump_android_module, iterate over crate_types and
call dump_one_android_module for each crate type.
* In decide_one_module_type, add mapping of Rust crate types:
lib => rlib (no change)
rlib => rlib (new)
dylib => dylib (new)
cdylib => shared (changed)
staticlib => static (new)
Maybe we should change and map 'lib' to 'lib',
but before that, crate_types should not contain
both 'lib' and 'rlib'.
* Accept new cargo output format, which can
call rustc with the main source file name after
other flags, not always after the "--crate-name" flag.
* Work around duplicated test module name problem;
call self.runner.claim_module_name for every named test module.
Bug: 153118477
Test: fetch quiche-0.3.0, bindgen-0.53.2 and other Rust crates
Test: cargo2android.py --run --vv --device --tests
Change-Id: Id65c3929b5c593df73f26f1510ad7e89194b209e
* crates.io keeps yanked packages with the "yanked" attribute.
For example, log-0.4.9 and log-0.4.10 were yanked so
"get_rust_pkg log" should skip them.
* Compare version numbers before the publish id number.
For example, lazy_static-1.1.1 was published after lazy_static-1.4.0,
but "get_rust_pkg lazy_static" should fetch 1.4.0.
Test: get_rust_pkg.py -v log # get log.0.4.8
Test: get_rust_pkg.py -v log-0.4.10 # get log.0.4.10
Test: get_rust_pkg.py -v lazy_static # get lazy_static-1.4.0
Change-Id: Id005a91b75c0885285a76136bd6de19d0dafa5c1
* When --features is specified,
pass --no-default-features to cargo.
* When a dependent Rust package is imported to AOSP,
if not all "default" features are needed, run
cargo2android.py with empty or a list of specific features.
Test: cargo2android.py --run # use default features
Test: cargo2android.py --run --features='' # no default
Test: cargo2android.py --run --features='default,std'
Change-Id: I854f1ecb7d7466490ff34e229ec14a07c1273c6d