Merge "Migrate to cargo_embargo." into main am: 0e411603ce am: c01715ae95 am: 46352499b2

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

Change-Id: I97d951dcaa57f94c29037ce5058cc193153729fb
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
diff --git a/Android.bp b/Android.bp
index ecbb83f..ec19374 100644
--- a/Android.bp
+++ b/Android.bp
@@ -1,4 +1,4 @@
-// This file is generated by cargo2android.py --config cargo2android.json.
+// This file is generated by cargo_embargo.
 // Do not modify this file as changes will be overridden on upgrade.
 
 package {
@@ -43,19 +43,14 @@
     min_sdk_version: "29",
 }
 
-rust_defaults {
-    name: "libquiche_defaults",
-    stem: "libquiche",
+rust_library {
+    name: "libquiche",
     host_supported: true,
     crate_name: "quiche",
     cargo_env_compat: true,
+    cargo_pkg_version: "0.17.1",
     srcs: ["src/lib.rs"],
     edition: "2018",
-    features: [
-        "boringssl",
-        "default",
-    ],
-    // Link all crates statically to create a self-contained .so library.
     rlibs: [
         "liblazy_static",
         "liblibc",
@@ -67,57 +62,96 @@
         "libsmallvec",
     ],
     prefer_rlib: true,
-    // For DnsResolver (Mainline module introduced in Q).
+    shared_libs: [
+        "libcrypto",
+        "libssl",
+    ],
     apex_available: [
         "//apex_available:platform",
         "com.android.resolv",
     ],
+    product_available: true,
+    vendor_available: true,
     min_sdk_version: "29",
 }
 
 rust_ffi {
     name: "libquiche_ffi",
-    defaults: ["libquiche_defaults"],
-    shared_libs: [
-        "libcrypto",
-        "libssl",
-    ],
-    apex_available: [
-        "//apex_available:platform",
-        "com.android.resolv",
-    ],
-    min_sdk_version: "29",
-}
-
-rust_library {
-    name: "libquiche",
-    defaults: ["libquiche_defaults"],
-    shared_libs: [
-        "libcrypto",
-        "libssl",
-    ],
-}
-
-// This target is used by doh_unit_test to prevent compatibility issues
-// because doh_unit_test needs to be run on the R platform.
-rust_library_rlib {
-    name: "libquiche_static",
-    defaults: ["libquiche_defaults"],
-    static_libs: [
-        "libcrypto_static",
-        "libssl",
-    ],
-    apex_available: [
-        "//apex_available:platform",
-        "com.android.resolv",
-    ],
-    min_sdk_version: "29",
-}
-
-rust_defaults {
-    name: "quiche_test_defaults",
+    host_supported: true,
     crate_name: "quiche",
     cargo_env_compat: true,
+    cargo_pkg_version: "0.17.1",
+    srcs: ["src/lib.rs"],
+    edition: "2018",
+    rlibs: [
+        "liblazy_static",
+        "liblibc",
+        "liblibm",
+        "liblog_rust",
+        "liboctets",
+        "libring",
+        "libslab",
+        "libsmallvec",
+    ],
+    prefer_rlib: true,
+    shared_libs: [
+        "libcrypto",
+        "libssl",
+    ],
+    apex_available: [
+        "//apex_available:platform",
+        "com.android.resolv",
+    ],
+    product_available: true,
+    vendor_available: true,
+    min_sdk_version: "29",
+}
+
+rust_test_host {
+    name: "quiche_host_test_src_lib",
+    crate_name: "quiche",
+    cargo_env_compat: true,
+    cargo_pkg_version: "0.17.1",
+    srcs: ["src/lib.rs"],
+    test_suites: ["general-tests"],
+    auto_gen_config: true,
+    test_options: {
+        unit_test: true,
+    },
+    edition: "2018",
+    features: [
+        "boringssl-vendored",
+        "default",
+    ],
+    rustlibs: [
+        "liblazy_static",
+        "liblibc",
+        "liblibm",
+        "liblog_rust",
+        "libmio",
+        "liboctets",
+        "libring",
+        "libslab",
+        "libsmallvec",
+        "liburl",
+    ],
+    shared_libs: [
+        "libcrypto",
+        "libssl",
+    ],
+    data: [
+        "examples/cert.crt",
+        "examples/cert.key",
+        "examples/cert-big.crt",
+        "examples/rootca.crt",
+    ],
+}
+
+rust_test {
+    name: "quiche_device_test_src_lib",
+    crate_name: "quiche",
+    cargo_env_compat: true,
+    cargo_pkg_version: "0.17.1",
     srcs: ["src/lib.rs"],
     test_suites: ["general-tests"],
     auto_gen_config: true,
@@ -138,6 +172,10 @@
         "libsmallvec",
         "liburl",
     ],
+    static_libs: [
+        "libcrypto_static",
+        "libssl",
+    ],
     data: [
         "examples/cert.crt",
         "examples/cert.key",
@@ -146,25 +184,33 @@
     ],
 }
 
-rust_test_host {
-    name: "quiche_host_test_src_lib",
-    defaults: ["quiche_test_defaults"],
-    test_options: {
-        unit_test: true,
-    },
-    shared_libs: [
-        "libcrypto",
-        "libssl",
+rust_library_rlib {
+    name: "libquiche_static",
+    host_supported: true,
+    crate_name: "quiche",
+    cargo_env_compat: true,
+    cargo_pkg_version: "0.17.1",
+    srcs: ["src/lib.rs"],
+    edition: "2018",
+    rustlibs: [
+        "liblazy_static",
+        "liblibc",
+        "liblibm",
+        "liblog_rust",
+        "liboctets",
+        "libring",
+        "libslab",
+        "libsmallvec",
     ],
-}
-
-rust_test {
-    name: "quiche_device_test_src_lib",
-    defaults: ["quiche_test_defaults"],
-    // To run this test in R platform, it's required to statically link
-    // libcrypto and libssl.
     static_libs: [
         "libcrypto_static",
         "libssl",
     ],
+    apex_available: [
+        "//apex_available:platform",
+        "com.android.resolv",
+    ],
+    product_available: true,
+    vendor_available: true,
+    min_sdk_version: "29",
 }
diff --git a/cargo2android.json b/cargo2android.json
deleted file mode 100644
index 1317ea7..0000000
--- a/cargo2android.json
+++ /dev/null
@@ -1,19 +0,0 @@
-{
-  "apex-available": [
-    "//apex_available:platform",
-    "com.android.resolv"
-  ],
-  "dependencies": true,
-  "device": true,
-  "min-sdk-version": "29",
-  "no-pkg-vers": true,
-  "patch": "patches/Android.bp.patch",
-  "run": true,
-  "test-data": [
-    "src/lib.rs=examples/cert.crt",
-    "src/lib.rs=examples/cert.key",
-    "src/lib.rs=examples/cert-big.crt",
-    "src/lib.rs=examples/rootca.crt"
-  ],
-  "tests": true
-}
diff --git a/cargo_embargo.json b/cargo_embargo.json
new file mode 100644
index 0000000..e589563
--- /dev/null
+++ b/cargo_embargo.json
@@ -0,0 +1,78 @@
+{
+  "apex_available": [
+    "//apex_available:platform",
+    "com.android.resolv"
+  ],
+  "min_sdk_version": "29",
+  "package": {
+    "quiche": {
+      "patch": "patches/Android.bp.patch",
+      "test_data": {
+        "src/lib.rs": [
+          "examples/cert.crt",
+          "examples/cert.key",
+          "examples/cert-big.crt",
+          "examples/rootca.crt"
+        ]
+      }
+    }
+  },
+  "variants": [
+    {
+      "module_blocklist": [
+        "libquiche_static"
+      ],
+      "module_name_overrides": {
+        "libquiche_shared": "libquiche_ffi"
+      }
+    },
+    {
+      "module_blocklist": [
+        "libquiche",
+        "libquiche_shared",
+        "libquiche_static"
+      ],
+      "module_name_overrides": {
+        "quiche_test_src_lib": "quiche_host_test_src_lib"
+      },
+      "tests": true,
+      "package": {
+        "quiche": {
+          "device_supported": false
+        }
+      }
+    },
+    {
+      "module_blocklist": [
+        "libquiche",
+        "libquiche_shared",
+        "libquiche_static"
+      ],
+      "module_name_overrides": {
+        "libcrypto": "libcrypto_static",
+        "quiche_test_src_lib": "quiche_device_test_src_lib"
+      },
+      "tests": true,
+      "package": {
+        "quiche": {
+          "host_supported": false
+        }
+      }
+    },
+    {
+      "module_blocklist": [
+        "libquiche_shared",
+        "libquiche_static"
+      ],
+      "module_name_overrides": {
+        "libcrypto": "libcrypto_static",
+        "libquiche": "libquiche_static"
+      },
+      "package": {
+        "quiche": {
+          "force_rlib": true
+        }
+      }
+    }
+  ]
+}
diff --git a/patches/Android.bp.patch b/patches/Android.bp.patch
index a1b4bf2..f635789 100644
--- a/patches/Android.bp.patch
+++ b/patches/Android.bp.patch
@@ -1,189 +1,79 @@
 diff --git a/Android.bp b/Android.bp
-index 884af0e..ecbb83f 100644
+index a810b69..ec19374 100644
 --- a/Android.bp
 +++ b/Android.bp
-@@ -43,8 +43,8 @@ cc_library_headers {
-     min_sdk_version: "29",
- }
- 
--rust_ffi_shared {
--    name: "libquiche_shared",
-+rust_defaults {
-+    name: "libquiche_defaults",
-     stem: "libquiche",
-     host_supported: true,
-     crate_name: "quiche",
-@@ -52,10 +52,11 @@ rust_ffi_shared {
+@@ -51,11 +51,7 @@ rust_library {
+     cargo_pkg_version: "0.17.1",
      srcs: ["src/lib.rs"],
      edition: "2018",
-     features: [
+-    features: [
 -        "boringssl-vendored",
-+        "boringssl",
-         "default",
-     ],
+-        "default",
+-    ],
 -    rustlibs: [
-+    // Link all crates statically to create a self-contained .so library.
 +    rlibs: [
          "liblazy_static",
          "liblibc",
          "liblibm",
-@@ -65,41 +66,19 @@ rust_ffi_shared {
+@@ -65,7 +61,8 @@ rust_library {
          "libslab",
          "libsmallvec",
      ],
 -    static_libs: [
--        "libcrypto",
--        "libssl",
--    ],
 +    prefer_rlib: true,
-+    // For DnsResolver (Mainline module introduced in Q).
-     apex_available: [
-         "//apex_available:platform",
-         "com.android.resolv",
-     ],
--    product_available: true,
--    vendor_available: true,
-     min_sdk_version: "29",
- }
- 
--rust_library {
--    name: "libquiche",
--    host_supported: true,
--    crate_name: "quiche",
--    cargo_env_compat: true,
--    srcs: ["src/lib.rs"],
--    edition: "2018",
--    features: [
--        "boringssl-vendored",
--        "default",
--    ],
--    rustlibs: [
--        "liblazy_static",
--        "liblibc",
--        "liblibm",
--        "liblog_rust",
--        "liboctets",
--        "libring",
--        "libslab",
--        "libsmallvec",
--    ],
--    static_libs: [
-+rust_ffi {
-+    name: "libquiche_ffi",
-+    defaults: ["libquiche_defaults"],
 +    shared_libs: [
          "libcrypto",
          "libssl",
      ],
-@@ -107,57 +86,41 @@ rust_library {
-         "//apex_available:platform",
-         "com.android.resolv",
-     ],
--    product_available: true,
--    vendor_available: true,
+@@ -78,7 +75,7 @@ rust_library {
      min_sdk_version: "29",
  }
  
--rust_ffi_static {
--    name: "libquiche_static",
--    stem: "libquiche",
--    host_supported: true,
--    crate_name: "quiche",
--    cargo_env_compat: true,
--    srcs: ["src/lib.rs"],
--    edition: "2018",
+-rust_ffi_shared {
++rust_ffi {
+     name: "libquiche_ffi",
+     host_supported: true,
+     crate_name: "quiche",
+@@ -86,11 +83,7 @@ rust_ffi_shared {
+     cargo_pkg_version: "0.17.1",
+     srcs: ["src/lib.rs"],
+     edition: "2018",
 -    features: [
 -        "boringssl-vendored",
 -        "default",
 -    ],
 -    rustlibs: [
--        "liblazy_static",
--        "liblibc",
--        "liblibm",
--        "liblog_rust",
--        "liboctets",
--        "libring",
--        "libslab",
--        "libsmallvec",
-+rust_library {
-+    name: "libquiche",
-+    defaults: ["libquiche_defaults"],
-+    shared_libs: [
-+        "libcrypto",
-+        "libssl",
++    rlibs: [
+         "liblazy_static",
+         "liblibc",
+         "liblibm",
+@@ -100,7 +93,8 @@ rust_ffi_shared {
+         "libslab",
+         "libsmallvec",
      ],
-+}
-+
-+// This target is used by doh_unit_test to prevent compatibility issues
-+// because doh_unit_test needs to be run on the R platform.
-+rust_library_rlib {
-+    name: "libquiche_static",
-+    defaults: ["libquiche_defaults"],
-     static_libs: [
--        "libcrypto",
-+        "libcrypto_static",
+-    static_libs: [
++    prefer_rlib: true,
++    shared_libs: [
+         "libcrypto",
          "libssl",
      ],
-     apex_available: [
-         "//apex_available:platform",
-         "com.android.resolv",
-     ],
--    product_available: true,
--    vendor_available: true,
-     min_sdk_version: "29",
- }
- 
--rust_test {
--    name: "quiche_test_src_lib",
--    host_supported: true,
-+rust_defaults {
-+    name: "quiche_test_defaults",
-     crate_name: "quiche",
-     cargo_env_compat: true,
-     srcs: ["src/lib.rs"],
-     test_suites: ["general-tests"],
-     auto_gen_config: true,
--    test_options: {
--        unit_test: true,
--    },
-     edition: "2018",
-     features: [
-         "boringssl-vendored",
-@@ -175,10 +138,6 @@ rust_test {
+@@ -141,7 +135,7 @@ rust_test_host {
          "libsmallvec",
          "liburl",
      ],
 -    static_libs: [
--        "libcrypto",
--        "libssl",
--    ],
-     data: [
-         "examples/cert.crt",
-         "examples/cert.key",
-@@ -186,3 +145,26 @@ rust_test {
-         "examples/rootca.crt",
-     ],
- }
-+
-+rust_test_host {
-+    name: "quiche_host_test_src_lib",
-+    defaults: ["quiche_test_defaults"],
-+    test_options: {
-+        unit_test: true,
-+    },
 +    shared_libs: [
-+        "libcrypto",
-+        "libssl",
-+    ],
-+}
-+
-+rust_test {
-+    name: "quiche_device_test_src_lib",
-+    defaults: ["quiche_test_defaults"],
-+    // To run this test in R platform, it's required to statically link
-+    // libcrypto and libssl.
-+    static_libs: [
-+        "libcrypto_static",
-+        "libssl",
-+    ],
-+}
+         "libcrypto",
+         "libssl",
+     ],
+@@ -198,10 +192,6 @@ rust_library_rlib {
+     cargo_pkg_version: "0.17.1",
+     srcs: ["src/lib.rs"],
+     edition: "2018",
+-    features: [
+-        "boringssl-vendored",
+-        "default",
+-    ],
+     rustlibs: [
+         "liblazy_static",
+         "liblibc",