| 1 | # Copyright 2018 The Fuchsia Authors |
| 2 | # |
| 3 | # Licensed under a BSD-style license <LICENSE-BSD>, Apache License, Version 2.0 |
| 4 | # <LICENSE-APACHE or https://www.apache.org/licenses/LICENSE-2.0>, or the MIT |
| 5 | # license <LICENSE-MIT or https://opensource.org/licenses/MIT>, at your option. |
| 6 | # This file may not be copied, modified, or distributed except according to |
| 7 | # those terms. |
| 8 | |
| 9 | # Put both crates in a single workspace so that `trybuild` compiler errors have |
| 10 | # paths that are stable regardless of the path to the repository root. This |
| 11 | # avoids issues like: |
| 12 | # https://github.com/dtolnay/trybuild/issues/207#issuecomment-131227.594 |
| 13 | [workspace] |
| 14 | |
| 15 | [package] |
| 16 | edition = "2021" |
| 17 | name = "zerocopy" |
| 18 | version = "0.8.17" |
| 19 | authors = ["Joshua Liebow-Feeser <joshlf@google.com>" ] |
| 20 | description = "Zerocopy makes zero-cost memory manipulation effortless. We write \"unsafe\" so you don't have to." |
| 21 | categories = ["embedded" , "encoding" , "no-std::no-alloc" , "parsing" , "rust-patterns" ] |
| 22 | keywords = ["cast" , "convert" , "transmute" , "transmutation" , "type-punning" ] |
| 23 | license = "BSD-2-Clause OR Apache-2.0 OR MIT" |
| 24 | repository = "https://github.com/google/zerocopy" |
| 25 | rust-version = "1.56.0" |
| 26 | |
| 27 | exclude = [".*" ] |
| 28 | |
| 29 | [package.metadata.build-rs] |
| 30 | # These key/value pairs are parsed by `build.rs`. Each entry names a `--cfg` |
| 31 | # which will be emitted if zerocopy is built with a toolchain version at least |
| 32 | # as high as the specified version. In the emitted `--cfg`, dashes are replaced |
| 33 | # by underscores. |
| 34 | # |
| 35 | # Each name is suffixed with the version it corresponds to. This is a convention |
| 36 | # used in the codebase to make it less likely for us to make mistakes when |
| 37 | # writing `doc_cfg` attributes. |
| 38 | |
| 39 | # From 1.81.0, Rust supports the `core::error::Error` trait. |
| 40 | zerocopy-core-error-1-81-0 = "1.81.0" |
| 41 | |
| 42 | # From 1.78.0, Rust supports the `#[diagnostic::on_unimplemented]` attribute. |
| 43 | zerocopy-diagnostic-on-unimplemented-1-78-0 = "1.78.0" |
| 44 | |
| 45 | # From 1.61.0, Rust supports generic types with trait bounds in `const fn`. |
| 46 | zerocopy-generic-bounds-in-const-fn-1-61-0 = "1.61.0" |
| 47 | |
| 48 | # From 1.60.0, Rust supports `cfg(target_has_atomics)`, which allows us to |
| 49 | # detect whether a target supports particular sets of atomics. |
| 50 | zerocopy-target-has-atomics-1-60-0 = "1.60.0" |
| 51 | |
| 52 | # When the "simd" feature is enabled, include SIMD types from the |
| 53 | # `core::arch::aarch64` module, which was stabilized in 1.59.0. On earlier Rust |
| 54 | # versions, these types require the "simd-nightly" feature. |
| 55 | zerocopy-aarch64-simd-1-59-0 = "1.59.0" |
| 56 | |
| 57 | # Permit panicking in `const fn`s and calling `Vec::try_reserve`. |
| 58 | zerocopy-panic-in-const-and-vec-try-reserve-1-57-0 = "1.57.0" |
| 59 | |
| 60 | [package.metadata.ci] |
| 61 | # The versions of the stable and nightly compiler toolchains to use in CI. |
| 62 | pinned-stable = "1.84.1" |
| 63 | pinned-nightly = "nightly-2024-11-06" |
| 64 | |
| 65 | [package.metadata.docs.rs] |
| 66 | all-features = true |
| 67 | rustdoc-args = ["--cfg" , "doc_cfg" , "--generate-link-to-definition" ] |
| 68 | |
| 69 | [package.metadata.playground] |
| 70 | features = ["__internal_use_only_features_that_work_on_stable" ] |
| 71 | |
| 72 | [features] |
| 73 | alloc = [] |
| 74 | derive = ["zerocopy-derive" ] |
| 75 | simd = [] |
| 76 | simd-nightly = ["simd" ] |
| 77 | float-nightly = [] |
| 78 | std = ["alloc" ] |
| 79 | # This feature depends on all other features that work on the stable compiler. |
| 80 | # We make no stability guarantees about this feature; it may be modified or |
| 81 | # removed at any time. |
| 82 | __internal_use_only_features_that_work_on_stable = ["alloc" , "derive" , "simd" , "std" ] |
| 83 | |
| 84 | [dependencies] |
| 85 | zerocopy-derive = { version = "=0.8.17" , path = "zerocopy-derive" , optional = true } |
| 86 | |
| 87 | # The "associated proc macro pattern" ensures that the versions of zerocopy and |
| 88 | # zerocopy-derive remain equal, even if the 'derive' feature isn't used. |
| 89 | # See: https://github.com/matklad/macro-dep-test |
| 90 | [target.'cfg(any())'.dependencies] |
| 91 | zerocopy-derive = { version = "=0.8.17" , path = "zerocopy-derive" } |
| 92 | |
| 93 | [dev-dependencies] |
| 94 | itertools = "0.11" |
| 95 | rand = { version = "0.8.5" , default-features = false, features = ["small_rng" ] } |
| 96 | rustversion = "1.0" |
| 97 | static_assertions = "1.1" |
| 98 | testutil = { path = "testutil" } |
| 99 | # Pinned to a specific version so that the version used for local development |
| 100 | # and the version used in CI are guaranteed to be the same. Future versions |
| 101 | # sometimes change the output format slightly, so a version mismatch can cause |
| 102 | # CI test failures. |
| 103 | trybuild = { version = "=1.0.89" , features = ["diff" ] } |
| 104 | # In tests, unlike in production, zerocopy-derive is not optional |
| 105 | zerocopy-derive = { version = "=0.8.17" , path = "zerocopy-derive" } |
| 106 | # TODO(#381) Remove this dependency once we have our own layout gadgets. |
| 107 | elain = "0.3.0" |
| 108 | |