diff options
author | Pierre-Clément Tosi <ptosi@google.com> | 2024-01-25 17:59:54 +0000 |
---|---|---|
committer | Pierre-Clément Tosi <ptosi@google.com> | 2024-02-07 18:35:49 +0000 |
commit | e2e12f853d3b318b44795b6a2b45f925e71bce54 (patch) | |
tree | 5fbd5ddd8774ca28a9cc56a7d1fb7d518207542c | |
parent | 69cdbdb960e3a869213c773eb16ceb8af72eca38 (diff) | |
download | memoffset-e2e12f853d3b318b44795b6a2b45f925e71bce54.tar.gz |
Bring back upstream support for no_std in Android
As the upstream crate was designed to be no_std (therefore uses core)
and as the Soong targets need to build a dylib (which requires std), the
crate source was being patched to remove the no_std crate attribute.
In turn, as the crate doesn't define a Rust edition, Cargo (and
therefore cargo_embargo) defaults to 2015, which requires explicitly
importing the core crate in no-no_std environments so the code was
further patched to use std modules in place of the corresponding core
modules.
Instead, patch the Cargo.toml to use Rust 2018 (which implicitly imports
core, even in no-no_std) and wrap the no_std in a AOSP-only cfg that we
enable when building Soong targets that include dylib variants.
Enable that cfg from the Android.bp & cargo_embargo.json.
Bug: 324074084
Test: external_updater/updater.sh update --force rust/crates/memoffset
Test: cargo_embargo generate cargo_embargo.json
Test: m libmemoffset libintrusive_collections
Change-Id: Id76df918c0ec89651c4b84402967570e52ae1058
-rw-r--r-- | Android.bp | 6 | ||||
-rw-r--r-- | Cargo.toml | 1 | ||||
-rw-r--r-- | cargo_embargo.json | 3 | ||||
-rw-r--r-- | patches/std.diff | 43 | ||||
-rw-r--r-- | src/lib.rs | 7 | ||||
-rw-r--r-- | src/span_of.rs | 3 |
6 files changed, 24 insertions, 39 deletions
@@ -25,7 +25,7 @@ rust_library { cargo_env_compat: true, cargo_pkg_version: "0.9.0", srcs: ["src/lib.rs"], - edition: "2015", + edition: "2018", features: ["default"], cfgs: [ "allow_clippy", @@ -34,6 +34,7 @@ rust_library { "raw_ref_macros", "stable_const", "tuple_ty", + "aosp_force_use_std", ], apex_available: [ "//apex_available:platform", @@ -56,7 +57,7 @@ rust_test { test_options: { unit_test: true, }, - edition: "2015", + edition: "2018", features: ["default"], cfgs: [ "allow_clippy", @@ -65,5 +66,6 @@ rust_test { "raw_ref_macros", "stable_const", "tuple_ty", + "aosp_force_use_std", ], } @@ -10,6 +10,7 @@ # See Cargo.toml.orig for the original contents. [package] +edition = "2018" # ANDROID: Required to build dylib in no_std. name = "memoffset" version = "0.9.0" authors = ["Gilad Naaman <gilad.naaman@gmail.com>"] diff --git a/cargo_embargo.json b/cargo_embargo.json index c458c58..0ff27f0 100644 --- a/cargo_embargo.json +++ b/cargo_embargo.json @@ -9,6 +9,9 @@ "variants": [ { "min_sdk_version": "29", + "extra_cfg": [ + "aosp_force_use_std" + ], "tests": true } ] diff --git a/patches/std.diff b/patches/std.diff index fc4bdbc..034f559 100644 --- a/patches/std.diff +++ b/patches/std.diff @@ -1,40 +1,21 @@ +diff --git a/Cargo.toml b/Cargo.toml +index 77fe68f..bc62b4a 100644 +--- a/Cargo.toml ++++ b/Cargo.toml +@@ -10,4 +10,5 @@ + # See Cargo.toml.orig for the original contents. + + [package] ++edition = "2018" # ANDROID: Required to build dylib in no_std. + name = "memoffset" diff --git a/src/lib.rs b/src/lib.rs index c85fb01..25b0444 100644 --- a/src/lib.rs +++ b/src/lib.rs -@@ -56,7 +56,8 @@ +@@ -55,5 +55,5 @@ //! let checksum = crc16(checksum_range); //! ``` -#![no_std] -+// ANDROID: include standard library to build as a dylib -+//#![no_std] ++#![cfg_attr(not(aosp_force_use_std), no_std)] #![cfg_attr( - feature = "unstable_const", - feature( -@@ -78,9 +79,9 @@ - #[doc(hidden)] - pub mod __priv { - #[doc(hidden)] -- pub use core::mem; -+ pub use std::mem; // ANDROID: use std instead of core, since we're not building with no-std. - #[doc(hidden)] -- pub use core::ptr; -+ pub use std::ptr; // ANDROID: use std instead of core, since we're not building with no-std. - - /// Use type inference to obtain the size of the pointee (without actually using the pointer). - #[doc(hidden)] -diff --git a/src/span_of.rs b/src/span_of.rs -index 0592dbd..369e5c6 100644 ---- a/src/span_of.rs -+++ b/src/span_of.rs -@@ -155,7 +155,8 @@ macro_rules! span_of { - - #[cfg(test)] - mod tests { -- use core::mem; -+ // ANDROID: use std instead of core, since we're not building wiht no-std. -+ use std::mem; - - #[test] - fn span_simple() {
\ No newline at end of file @@ -55,8 +55,7 @@ //! let checksum = crc16(checksum_range); //! ``` -// ANDROID: include standard library to build as a dylib -//#![no_std] +#![cfg_attr(not(aosp_force_use_std), no_std)] #![cfg_attr( all(feature = "unstable_const", not(stable_const)), feature(const_ptr_offset_from) @@ -76,9 +75,9 @@ doctest!("../README.md"); #[doc(hidden)] pub mod __priv { #[doc(hidden)] - pub use std::mem; // ANDROID: use std instead of core, since we're not building with no-std. + pub use core::mem; #[doc(hidden)] - pub use std::ptr; // ANDROID: use std instead of core, since we're not building with no-std. + pub use core::ptr; /// Use type inference to obtain the size of the pointee (without actually using the pointer). #[doc(hidden)] diff --git a/src/span_of.rs b/src/span_of.rs index c2030b7..89fccce 100644 --- a/src/span_of.rs +++ b/src/span_of.rs @@ -155,8 +155,7 @@ macro_rules! span_of { #[cfg(test)] mod tests { - // ANDROID: use std instead of core, since we're not building wiht no-std. - use std::mem; + use core::mem; #[test] fn span_simple() { |