Commit Graph

386 Commits

Author SHA1 Message Date
Krzysztof Kosiński
b136111f17 Upgrade the 'stack' script to python3.
Also hook up the test to Android.bp.

Test: unit test
Test: Ran with a tombstone file as parameter.
Test: Ran pasting in stack to stdin.
Change-Id: I25f40569cc49b7487553611bcc25d061179bfa8d
2021-04-09 13:21:32 -07:00
Thiébaud Weksteen
a5a728b4c8 cargo2android: Use cfgs property
Test: Run cargo2android on multiple crates, verify Android.bp
Bug: 183727250
Change-Id: I087ffb0de33db7a09735d2e9c668d991c9f5bb49
2021-04-08 14:23:49 +02:00
Treehugger Robot
ad8e4d2a7e Merge "NFC: Refactor a string so we can add a comment to it." 2021-04-07 22:15:50 +00:00
Joel Galenson
4d82acfeee Merge "Add a cargo2android flag to disable generating TEST_MAPPING." 2021-04-07 21:41:15 +00:00
Treehugger Robot
dddc6e0873 Merge "Fix cargo2android's license block preservation" 2021-04-07 21:39:51 +00:00
Joel Galenson
3f42f80970 NFC: Refactor a string so we can add a comment to it.
Test: Run cargo2android.py
Change-Id: Id833bd3292a4cd9f8c348aee9725e0924d826d97
2021-04-07 12:42:17 -07:00
Joel Galenson
cf4ebb00a6 Add a cargo2android flag to disable generating TEST_MAPPING.
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
2021-04-07 08:39:51 -07:00
Joel Galenson
d9d13b8309 Fix cargo2android's license block preservation
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
2021-04-07 08:20:58 -07:00
Treehugger Robot
dbde427be6 Merge "Add Ring test timeout." 2021-04-06 20:55:52 +00:00
Joel Galenson
4f9d11f6b1 Sort Rust TEST_MAPPING tests.
We currently seem to emit TEST_MAPPING files in an arbitrary order,
which causes diffs to look confusing even when nothing has changed.
Let's sort them by the test name, which is both stable and easier to
read.

Test: Run cargo2android multiple times and see no TEST_MAPPING diff.
Change-Id: I398aa84a4891380e4292223445bd53959c024421
2021-04-06 10:18:21 -07:00
Joel Galenson
a0d4c5e5a5 Add Ring test timeout.
This test looks like it basically never passed without this.

Test: Run cargo2android.py and see timeout.
Change-Id: Ic7ef5576efb84d78130dd45db67e50ebe41f6d9a
2021-04-06 09:36:47 -07:00
Pirama Arumuga Nainar
c41549f3d2 Add acov-llvm.py script
Bug: http://b/160401633

This is a tool for gathering coverage information from a device and
generating an LLVM coverage report from that information.  See top of
the file for usage instructions.

Also redirect acov users to acov-llvm when CLANG_COVERAGE is set.

Test: acov-llvm.py wih clean-device, flush and report subcommands.

Change-Id: I5dba3a669bb6ac2797093903536f346228625c05
2021-03-30 14:58:06 -07:00
Haibo Huang
0f72c95e70 [cargo2android.py] Reserve all lines before the first rust_* rule
Change-Id: Ic3cffcc7f34d878b7cc627f10361d42271b12f1e
2021-03-19 15:17:42 -07:00
Krzysztof Kosiński
dd45e18f94 Make the "stack" script work for device tests.
The path where the tests are uploaded by atest differs from the
path to unstripped binaries in the out directory. As a result,
the script can't symbolize the parts of the stack trace that
correspond to code in the test binary. Add a fixup to use the
correct path.

Test: Used the script on example crashes in framework and vendor
device tests - appears to work and give correct line numbers.

Change-Id: I5470e6342afb801ac596cbc0c0bf067850b1e09a
2021-03-11 18:09:15 -08:00
Thiébaud Weksteen
8da491134a Update add3prf.py
Change the license detection logic to return if a dual-license was
found. Update the metadata comment as discussed in b/179902335.
Add unit tests for add_module_license and decide_license_type.

Bug: 179902335
Test: atest --host add3prf_test; manually run add3prf.py in {ahash,
  libloading, parking_lot, ring}
Change-Id: I3184b5cf0955d124170b9e5987308507bdef6e9a
2021-02-19 12:20:34 +01:00
Joel Galenson
56446748cf Have cargo2android put warning not to modify Android.bp files
Test: Run cargo2android
Test: Run upgrader script
Change-Id: Idd9fc9b8ad7a7c4fb3da954178d0221c95132fd3
2021-02-18 09:36:53 -08:00
Bob Badour
f7cf305656 [LSC] Add LOCAL_LICENSE_KINDS to development
Added SPDX-license-identifier-Apache-2.0 to:
  apps/BluetoothDebug/Android.bp
  apps/BuildWidget/Android.bp
  apps/CustomLocale/Android.bp
  apps/DevelopmentSettings/Android.bp
  apps/Fallback/Android.bp
  apps/GestureBuilder/Android.bp
  apps/NinePatchLab/Android.bp
  apps/OBJViewer/Android.bp
  apps/PushApiAuthenticator/Android.bp
  apps/PushApiTestAppOne/Android.bp
  apps/PushApiTestAppTwo/Android.bp
  apps/SdkSetup/Android.bp
  apps/SettingInjectorSample/Android.bp
  apps/WidgetPreview/Android.bp
  apps/launchperf/Android.bp
  cmds/monkey/Android.mk
  gsi/gsi_util/Android.bp
  gsi/repack_super_image/Android.bp
  host/windows/Android.bp
  python-packages/Android.bp
  samples/AccelerometerPlay/Android.bp
  samples/AdaptiveIconSample/Android.bp
  samples/AliasActivity/Android.bp
  samples/AndroidBeamDemo/Android.bp
  samples/AppNavigation/Android.bp
  samples/AutofillKeyboard/Android.bp
  samples/BackupRestore/Android.bp
  samples/BasicGLSurfaceView/Android.bp
  samples/BluetoothChat/Android.bp
  samples/BrokenKeyDerivation/Android.bp
  samples/BrokenKeyDerivation/tests/Android.bp
  samples/BusinessCard/Android.bp
  samples/Compass/Android.bp
  samples/ContactManager/Android.bp
  samples/CubeLiveWallpaper/Android.bp
  samples/DataWiper/Android.bp
  samples/DeviceAdminWhitelistedAccount/Android.bp
  samples/FixedGridLayout/Android.bp
  samples/HeavyWeight/Android.bp
  samples/HelloActivity/Android.bp
  samples/HelloActivity/tests/Android.bp
  samples/HelloEffects/Android.bp
  samples/Home/Android.bp
  samples/HoneycombGallery/Android.bp
  samples/InlineFillService/Android.bp
  samples/JetBoy/Android.bp
  samples/LceDemo/Android.bp
  samples/LunarLander/Android.bp
  samples/LunarLander/tests/Android.bp
  samples/MultiResolution/Android.bp
  samples/MultiWindow/Android.bp
  samples/MySampleRss/Android.bp
  samples/NotePad/Android.bp
  samples/Obb/Android.bp
  samples/RSSReader/Android.bp
  samples/ReceiveShareDemo/Android.bp
  samples/SampleSyncAdapter/Android.bp
  samples/SimpleJNI/Android.bp
  samples/SimpleJNI/jni/Android.bp
  samples/SipDemo/Android.bp
  samples/SkeletonApp/Android.bp
  samples/SkeletonApp/tests/Android.bp
  samples/Snake/Android.bp
  samples/Snake/tests/Android.bp
  samples/SoftKeyboard/Android.bp
  samples/SpellChecker/HelloSpellChecker/Android.bp
  samples/SpellChecker/SampleSpellCheckerService/Android.bp
  samples/StackWidget/Android.bp
  samples/ThemedNavBarKeyboard/Android.bp
  samples/ToyVpn/Android.bp
  samples/TtsEngine/Android.bp
  samples/USB/AdbTest/Android.bp
  samples/USB/MissileLauncher/Android.bp
  samples/UiAutomator/Android.mk
  samples/Vault/Android.bp
  samples/Vault/tests/Android.bp
  samples/VoiceRecognitionService/Android.bp
  samples/VoicemailProviderDemo/Android.bp
  samples/WeatherListWidget/Android.bp
  samples/WiFiDirectDemo/Android.bp
  samples/WiFiDirectServiceDiscovery/Android.bp
  samples/Wiktionary/Android.bp
  samples/WiktionarySimple/Android.bp
  samples/XmlAdapters/Android.bp
  samples/apkcachetest/Android.bp
  samples/training/NsdChat/Android.bp
  scripts/Android.bp
  testrunner/Android.mk
  testrunner/tests/Android_native.mk
  tools/apkcheck/Android.bp
  tools/bugreport/Android.bp
  tools/etc1tool/Android.bp
  tools/idegen/Android.bp
  tools/mkstubs/Android.bp
  tools/rmtypedefs/Android.bp
  vndk/Android.bp
  vndk/tools/Android.bp
  vndk/tools/elfcheck/Android.bp
  vndk/tools/header-checker/Android.bp
  vndk/tools/header-checker/src/repr/protobuf/proto/Android.bp
  vndk/tools/header-checker/tests/integration/ifunc/Android.bp
  vndk/tools/header-checker/tests/integration/version_script_example/Android.bp
  vndk/tools/image-diff-tool/Android.bp

Added SPDX-license-identifier-Apache-2.0 SPDX-license-identifier-BSD
    SPDX-license-identifier-CPL-1.0 SPDX-license-identifier-MIT
    SPDX-license-identifier-Unicode-DFS SPDX-license-identifier-W3C
    legacy_restricted legacy_unencumbered
to:
  Android.bp

Added SPDX-license-identifier-Apache-2.0 SPDX-license-identifier-CPL-1.0
to:
  samples/SearchableDictionary/Android.bp

Added SPDX-license-identifier-Apache-2.0 legacy_unencumbered
to:
  tools/Android.bp

Added SPDX-license-identifier-BSD SPDX-license-identifier-CPL-1.0
    SPDX-license-identifier-MIT SPDX-license-identifier-Unicode-DFS
    SPDX-license-identifier-W3C
to:
  sdk/Android.bp

Added legacy_restricted
to:
  samples/KeyChainDemo/Android.bp
  tools/line_endings/Android.bp
  vndk/tools/definition-tool/datasets/Android.bp

Bug: 68860345
Bug: 151177513
Bug: 151953481

Test: m all

Exempt-From-Owner-Approval: janitorial work
Change-Id: I9847e00fb4278bc083b4debbc751003c995ea45c
2021-02-12 17:13:45 -08:00
Jeff Vander Stoep
82ee11ae77 update_crate_tests.py: don't use sys.exit()
If the TEST_MAPPING cannot be generated, print the reason, but
exit without error. It's not uncommon for the output of cargo2android
to fail to build e.g. if a new depencency is not satisfied, so we can
fall back to the previous TEST_MAPPING, or run update_crate_tests
locally once all dependencies are present.

Bug: 179132533
Test: tools/external_updater/updater.sh update rust/crates/textwrap
Test: tools/external_updater/updater.sh update rust/crates/libc
Change-Id: I4802c77332d1ab1d6604d48c47365f40bdbd1122
2021-02-04 12:10:39 +01:00
Jeff Vander Stoep
1b24dc3f71 update_crate_tests: fail gracefully
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
2021-02-03 21:42:40 +01:00
Jeff Vander Stoep
0b0e24f201 update_crate_tests.py: allow excluding tests by name or path
The aidl tests and ChromeOS tests are not intended to be run in
presubmit, so exclude them.

Test: run cargo2android in external/rust/crates/libc.
Change-Id: I1ed92ed6e88886e3fea38612325ce5349db0fb69
2021-01-24 22:19:50 +01:00
Jeff Vander Stoep
cec8bac2cb Cargo2Android: add rdep tests to TEST_MAPPING
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
2021-01-15 20:56:59 +01:00
Treehugger Robot
169b7827ed Merge "Cleanup cargo2android.py." 2021-01-13 20:47:40 +00:00
Joel Galenson
4319a7e8a5 Cleanup cargo2android.py.
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
2021-01-13 08:36:31 -08:00
Treehugger Robot
a727e45813 Merge "Do not generate TEST_MAPPINGs for host tests" 2021-01-13 16:20:27 +00:00
Joel Galenson
e261a15598 Do not generate TEST_MAPPINGs for host tests
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
2021-01-12 11:31:53 -08:00
Ivan Lozano
5b757feed9 Merge "rust: Use rust_ffi for Rust generated C libraries." 2021-01-09 03:31:19 +00:00
Stephen Hines
013e0ed53e Update Rust OWNERS.
Test: N/A
Change-Id: I1cef9c237479dc289ff57148ce901f4f522a5465
2021-01-08 17:38:34 -08:00
Alex Light
a8f224d606 lldb-vscode
Add support for using lldb with vscode.

Test: lldbclient.py --setup-forwarding vscode -r dalvikvm
Bug: 176158605

Change-Id: I92a08b3b02a27a14be586582fe57acdd670a9ada
2020-12-28 11:30:39 -08:00
Ivan Lozano
0c057ade57 rust: Use rust_ffi for Rust generated C libraries.
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
2020-12-15 10:41:26 -05:00
Christopher Ferris
49eda0e908 Remove gcc tools from script.
Replace all references to gcc tools with llvm tools. This change still
uses c++filt until llvm-cxxfilt is put in the prebuilts.

Test: Ran a backtrace through this script and the old script and verified
Test: no major differences.
Test: Ran unittests for symbol.py and stack_core.py.
Change-Id: Ic31c1a0707dae11c5037f9637943cd7932badf46
2020-12-09 14:34:01 -08:00
Victor Hsieh
21bea79f5a cargo2android: map fuse crate in crosvm to libfuse_rust
Test: run cargo2android in external/crosvm/fuse and build
Bug: 174797066
Change-Id: I32d092818164d422e263c10f8bf5b7b50971a515
2020-12-04 11:00:46 -08:00
Treehugger Robot
7534ce72da Merge "cargo2android: reorder TEST_MAPPING statements" 2020-11-05 19:16:05 +00:00
Jeff Vander Stoep
d11be480f3 cargo2android: reorder TEST_MAPPING statements
"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
2020-11-05 16:13:36 +01:00
Chih-Hung Hsieh
60140756b8 Give a warning to use --copy-out
* 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
2020-11-03 15:51:52 -08:00
Chih-Hung Hsieh
ec8846be07 Add --patch and --ignore-cargo-errors options
* 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
2020-11-02 21:55:39 +00:00
Chih-Hung Hsieh
610a894a49 Do not use Cargo.lock during cargo build.
* 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
2020-11-02 21:49:31 +00:00
Chih-Hung Hsieh
e2342bac4b Add a --copy-out flag for build.rs output files.
* 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
2020-10-25 18:06:04 -07:00
Chih-Hung Hsieh
03f14e4b4f Better heuristic to find license types
* 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
2020-10-19 23:15:50 -07:00
Chih-Hung Hsieh
3d24aed831 Add add3prf.py and call it from get_rust_pky.py
* 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
2020-10-13 22:29:07 -07:00
Chih-Hung Hsieh
e1b7bb667b Use x86_64-unknown-linux-gnu for host cargo build
* 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
2020-10-01 16:59:04 -07:00
Haibo Huang
987436c90b Add source map for binaries from RBE
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
2020-09-23 04:03:01 +00:00
Haibo Huang
6a4636a9ef Make lldb default for gdbclient.py
Adds a symlink lldbclient.py that pointing to gdbclient.py

Bug: 168187078
Change-Id: I1831875812d22bb6a264b8396bc9d3b8ed7712e3
2020-09-15 18:55:52 +00:00
Chih-Hung Hsieh
6c13b72f15 Ignore -C codegen-units flag
Test: regenerate .bp files in external/rust/crates/*
Change-Id: I023b0b035d50db9eb7c7462d21beba9b95078378
2020-09-11 21:27:37 -07:00
Treehugger Robot
8240673629 Merge "gdbclient.py: Try ro.build.product also." 2020-09-11 06:13:38 +00:00
Junichi Uekawa
6612c929d7 gdbclient.py: Try ro.build.product also.
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
2020-09-09 00:23:49 +00:00
Xin Li
e3b57410da Merge Android R (rvc-dev-plus-aosp-without-vendor@6692709)
Bug: 166295507
Merged-In: I37a77cdaf905fe0bf58ad8eebcdff36873aec71a
Change-Id: Idac9218a0e169df9d02d9d8d376a6816315a4b28
2020-08-27 10:16:04 -07:00
Chih-Hung Hsieh
63459ed34e Ignore embed-bitcode flag
Bug: 166331593
Test: regenerate .bp files in external/rust/crates
Change-Id: I3051a4d2d4e79b108f44bbed3fb0c51c86b81baf
2020-08-26 11:54:25 -07:00
Andrew Walbran
e51f104b42 libbase from latest crosvm also needs to be renamed.
Bug: 158290206
Test: ran cargo2android.py on latest crosvm
Change-Id: Id6cef5e3af72f7bd8defbc4ed61aa4b5b3729d6b
2020-08-11 16:42:48 +01:00
Chih-Hung Hsieh
07119865a0 Add options to work in a subdirectory.
* 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
2020-07-29 15:23:03 -07:00
Chih-Hung Hsieh
776f6a198c Handle -Cflag syntax and use prebuilt cargo.
* 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
2020-07-23 16:04:58 -07:00