From ac67725422163d8f4fb1bdd23632785eccf7072b Mon Sep 17 00:00:00 2001 From: Matthew Maurer Date: Fri, 13 Aug 2021 15:52:52 -0700 Subject: [PATCH 1/4] cargo2android: Add support for various image types Test: Generated rustc-demangle's Android.bp with it Bug: 178565008 Change-Id: I0877e2d7d9e309105610b4d87f2a6d45ef67903f --- scripts/cargo2android.py | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/scripts/cargo2android.py b/scripts/cargo2android.py index fef1d5116..c5c5d21b4 100755 --- a/scripts/cargo2android.py +++ b/scripts/cargo2android.py @@ -701,10 +701,18 @@ class Crate(object): for apex in self.runner.args.apex_available: self.write(' "%s",' % apex) self.write(' ],') + if self.runner.args.native_bridge_supported: + self.write(' native_bridge_supported: true,') + if self.runner.args.product_available: + self.write(' product_available: true,') + if self.runner.args.recovery_available: + self.write(' recovery_available: true,') if self.runner.args.vendor_available: self.write(' vendor_available: true,') if self.runner.args.vendor_ramdisk_available: self.write(' vendor_ramdisk_available: true,') + if self.runner.args.ramdisk_available: + self.write(' ramdisk_available: true,') if self.runner.args.min_sdk_version and crate_type == 'lib': self.write(' min_sdk_version: "%s",' % self.runner.args.min_sdk_version) if crate_type == 'test' and not self.default_srcs: @@ -1644,6 +1652,21 @@ def get_parser(): '--apex-available', nargs='*', help='Mark the main library as apex_available with the given apexes.') + parser.add_argument( + '--native-bridge-supported', + action='store_true', + default=False, + help='Mark the main library as native_bridge_supported.') + parser.add_argument( + '--product-available', + action='store_true', + default=False, + help='Mark the main library as product_available.') + parser.add_argument( + '--recovery-available', + action='store_true', + default=False, + help='Mark the main library as recovery_available.') parser.add_argument( '--vendor-available', action='store_true', @@ -1654,6 +1677,11 @@ def get_parser(): action='store_true', default=False, help='Mark the main library as vendor_ramdisk_available.') + parser.add_argument( + '--ramdisk-available', + action='store_true', + default=False, + help='Mark the main library as ramdisk_available.') parser.add_argument( '--force-rlib', action='store_true', From 9e4b781de9595db41aabcecedc7dbe9c4c2db7c0 Mon Sep 17 00:00:00 2001 From: Matthew Maurer Date: Mon, 16 Aug 2021 14:21:01 -0700 Subject: [PATCH 2/4] cargo2android: Emit apex_available + min_sdk_version for native libs Previously, we only emitted apex_available + min_sdk_version for 'lib' type crates. That ignored: * Explicit rlib * Explicit dylib * cdylib * staticlib Bug: 178565008 Test: Generated Android.bp for rustc-demangle-capi Change-Id: I19f0abe385b9c13ac731b7f2c978052ffa6b92f7 --- scripts/cargo2android.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/scripts/cargo2android.py b/scripts/cargo2android.py index c5c5d21b4..eb93c46c8 100755 --- a/scripts/cargo2android.py +++ b/scripts/cargo2android.py @@ -127,6 +127,8 @@ WARNING_FILE_PAT = re.compile('^ *--> ([^:]*):[0-9]+') # Rust package name with suffix -d1.d2.d3. VERSION_SUFFIX_PAT = re.compile(r'^(.*)-[0-9]+\.[0-9]+\.[0-9]+$') +# Rust crate_type values that correspond to a library +LIBRARY_CRATE_TYPES = ['lib', 'rlib', 'dylib', 'staticlib', 'cdylib'] def altered_name(name): return RENAME_MAP[name] if (name in RENAME_MAP) else name @@ -696,7 +698,7 @@ class Crate(object): self.dump_edition_flags_libs() if self.runner.args.host_first_multilib and self.host_supported and crate_type != 'test': self.write(' compile_multilib: "first",') - if self.runner.args.apex_available and crate_type == 'lib': + if self.runner.args.apex_available and crate_type in LIBRARY_CRATE_TYPES: self.write(' apex_available: [') for apex in self.runner.args.apex_available: self.write(' "%s",' % apex) @@ -713,7 +715,7 @@ class Crate(object): self.write(' vendor_ramdisk_available: true,') if self.runner.args.ramdisk_available: self.write(' ramdisk_available: true,') - if self.runner.args.min_sdk_version and crate_type == 'lib': + if self.runner.args.min_sdk_version and crate_type in LIBRARY_CRATE_TYPES: self.write(' min_sdk_version: "%s",' % self.runner.args.min_sdk_version) if crate_type == 'test' and not self.default_srcs: self.dump_test_data() From 062709c3b36e1ffcc6847985ff45e106d384c4ba Mon Sep 17 00:00:00 2001 From: Matthew Maurer Date: Tue, 17 Aug 2021 11:27:36 -0700 Subject: [PATCH 3/4] cargo2android: Support exported C headers staticlib and cdylib crate types generally want to export header files for use by C code. Allow the location of these headers to be provided to c2a for inclusion in blueprint. Bug: 178565008 Test: Generate rustc-demangle-capi Change-Id: I0aa9acfb081ea39a7e13315bfc8029d06b8f55d3 --- scripts/cargo2android.py | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/scripts/cargo2android.py b/scripts/cargo2android.py index eb93c46c8..70a4dc3be 100755 --- a/scripts/cargo2android.py +++ b/scripts/cargo2android.py @@ -127,8 +127,12 @@ WARNING_FILE_PAT = re.compile('^ *--> ([^:]*):[0-9]+') # Rust package name with suffix -d1.d2.d3. VERSION_SUFFIX_PAT = re.compile(r'^(.*)-[0-9]+\.[0-9]+\.[0-9]+$') -# Rust crate_type values that correspond to a library -LIBRARY_CRATE_TYPES = ['lib', 'rlib', 'dylib', 'staticlib', 'cdylib'] +# Crate types corresponding to a C ABI library +C_LIBRARY_CRATE_TYPES = ['staticlib', 'cdylib'] +# Crate types corresponding to a Rust ABI library +RUST_LIBRARY_CRATE_TYPES = ['lib', 'rlib', 'dylib'] +# Crate types corresponding to a library +LIBRARY_CRATE_TYPES = C_LIBRARY_CRATE_TYPES + RUST_LIBRARY_CRATE_TYPES def altered_name(name): return RENAME_MAP[name] if (name in RENAME_MAP) else name @@ -698,6 +702,11 @@ class Crate(object): self.dump_edition_flags_libs() if self.runner.args.host_first_multilib and self.host_supported and crate_type != 'test': self.write(' compile_multilib: "first",') + if self.runner.args.exported_c_header_dir and crate_type in C_LIBRARY_CRATE_TYPES: + self.write(' include_dirs: [') + for header_dir in self.runner.args.exported_c_header_dir: + self.write(' "%s",' % header_dir) + self.write(' ],') if self.runner.args.apex_available and crate_type in LIBRARY_CRATE_TYPES: self.write(' apex_available: [') for apex in self.runner.args.apex_available: @@ -1646,6 +1655,11 @@ def get_parser(): default=False, help=('run cargo build with existing Cargo.lock ' + '(used when some latest dependent crates failed)')) + parser.add_argument( + '--exported_c_header_dir', + nargs='*', + help='Directories with headers to export for C usage' + ) parser.add_argument( '--min-sdk-version', type=str, From 70182e44f043c41806f161a4b3db315d4aa48dbe Mon Sep 17 00:00:00 2001 From: Matthew Maurer Date: Tue, 17 Aug 2021 13:53:52 -0700 Subject: [PATCH 4/4] cargo2android: Don't emit image support for tests Image support doesn't make sense for test modules. Bug: 178565008 Test: Generate rustc-demangle-capi Change-Id: Ie5a1d85f9828e0c105c3a3e994b22ef7664fe1db --- scripts/cargo2android.py | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/scripts/cargo2android.py b/scripts/cargo2android.py index 70a4dc3be..36394f036 100755 --- a/scripts/cargo2android.py +++ b/scripts/cargo2android.py @@ -712,18 +712,19 @@ class Crate(object): for apex in self.runner.args.apex_available: self.write(' "%s",' % apex) self.write(' ],') - if self.runner.args.native_bridge_supported: - self.write(' native_bridge_supported: true,') - if self.runner.args.product_available: - self.write(' product_available: true,') - if self.runner.args.recovery_available: - self.write(' recovery_available: true,') - if self.runner.args.vendor_available: - self.write(' vendor_available: true,') - if self.runner.args.vendor_ramdisk_available: - self.write(' vendor_ramdisk_available: true,') - if self.runner.args.ramdisk_available: - self.write(' ramdisk_available: true,') + if crate_type != 'test': + if self.runner.args.native_bridge_supported: + self.write(' native_bridge_supported: true,') + if self.runner.args.product_available: + self.write(' product_available: true,') + if self.runner.args.recovery_available: + self.write(' recovery_available: true,') + if self.runner.args.vendor_available: + self.write(' vendor_available: true,') + if self.runner.args.vendor_ramdisk_available: + self.write(' vendor_ramdisk_available: true,') + if self.runner.args.ramdisk_available: + self.write(' ramdisk_available: true,') if self.runner.args.min_sdk_version and crate_type in LIBRARY_CRATE_TYPES: self.write(' min_sdk_version: "%s",' % self.runner.args.min_sdk_version) if crate_type == 'test' and not self.default_srcs: