Bring back upstream support for no_std in Android am: e2e12f853d am: 320bea9721

Original change: https://android-review.googlesource.com/c/platform/external/rust/crates/memoffset/+/2952668

Change-Id: Ic32a5419ab3666bf8f941ce70f80fe1f7fca20a5
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
diff --git a/Android.bp b/Android.bp
index c2f83d7..b617d11 100644
--- a/Android.bp
+++ b/Android.bp
@@ -25,7 +25,7 @@
     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 @@
         "raw_ref_macros",
         "stable_const",
         "tuple_ty",
+        "aosp_force_use_std",
     ],
     apex_available: [
         "//apex_available:platform",
@@ -56,7 +57,7 @@
     test_options: {
         unit_test: true,
     },
-    edition: "2015",
+    edition: "2018",
     features: ["default"],
     cfgs: [
         "allow_clippy",
@@ -65,5 +66,6 @@
         "raw_ref_macros",
         "stable_const",
         "tuple_ty",
+        "aosp_force_use_std",
     ],
 }
diff --git a/Cargo.toml b/Cargo.toml
index 77fe68f..bc62b4a 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -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
diff --git a/src/lib.rs b/src/lib.rs
index f0aab7b..8d65d9a 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -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 @@
 #[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 @@
 
 #[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() {