[workspace]
resolver = "2"

members = [
	"bin/node-template/node",
	"bin/node-template/pallets/template",
	"bin/node-template/runtime",
	"bin/node/bench",
	"bin/node/cli",
	"bin/node/executor",
	"bin/node/primitives",
	"bin/node/rpc",
	"bin/node/runtime",
	"bin/node/testing",
	"bin/utils/chain-spec-builder",
	"bin/utils/subkey",
	"client/api",
	"client/authority-discovery",
	"client/basic-authorship",
	"client/beefy",
	"client/beefy/rpc",
	"client/block-builder",
	"client/chain-spec",
	"client/chain-spec/derive",
	"client/cli",
	"client/consensus/aura",
	"client/consensus/babe",
	"client/consensus/babe/rpc",
	"client/consensus/common",
	"client/consensus/epochs",
	"client/consensus/manual-seal",
	"client/consensus/pow",
	"client/consensus/slots",
	"client/consensus/uncles",
	"client/db",
	"client/executor",
	"client/executor/common",
	"client/executor/runtime-test",
	"client/executor/wasmi",
	"client/executor/wasmtime",
	"client/finality-grandpa",
	"client/informant",
	"client/keystore",
	"client/network",
	"client/network-gossip",
	"client/network/test",
	"client/offchain",
	"client/peerset",
	"client/allocator",
	"client/proposer-metrics",
	"client/rpc",
	"client/rpc-api",
	"client/rpc-servers",
	"client/service",
	"client/service/test",
	"client/state-db",
	"client/sync-state-rpc",
	"client/telemetry",
	"client/tracing",
	"client/tracing/proc-macro",
	"client/transaction-pool",
	"client/transaction-pool/api",
	"client/utils",
	"frame/assets",
	"frame/atomic-swap",
	"frame/aura",
	"frame/authority-discovery",
	"frame/authorship",
	"frame/babe",
	"frame/bags-list",
	"frame/bags-list/fuzzer",
	"frame/bags-list/remote-tests",
	"frame/balances",
	"frame/beefy",
	"frame/beefy-mmr",
	"frame/beefy-mmr/primitives",
	"frame/benchmarking",
	"frame/bounties",
	"frame/child-bounties",
	"frame/collective",
	"frame/contracts",
	"frame/contracts/rpc",
	"frame/contracts/rpc/runtime-api",
	"frame/conviction-voting",
	"frame/democracy",
	"frame/try-runtime",
	"frame/election-provider-multi-phase",
	"frame/election-provider-support",
	"frame/examples/basic",
	"frame/examples/offchain-worker",
	"frame/examples/parallel",
	"frame/executive",
	"frame/gilt",
	"frame/grandpa",
	"frame/identity",
	"frame/im-online",
	"frame/indices",
	"frame/lottery",
	"frame/membership",
	"frame/merkle-mountain-range",
	"frame/merkle-mountain-range/primitives",
	"frame/merkle-mountain-range/rpc",
	"frame/multisig",
	"frame/nicks",
	"frame/node-authorization",
	"frame/offences",
	"frame/preimage",
	"frame/proxy",
	"frame/randomness-collective-flip",
	"frame/recovery",
	"frame/referenda",
	"frame/scheduler",
	"frame/scored-pool",
	"frame/session",
	"frame/session/benchmarking",
	"frame/society",
	"frame/staking",
	"frame/staking/reward-curve",
	"frame/staking/reward-fn",
	"frame/sudo",
	"frame/support",
	"frame/support/procedural",
	"frame/support/procedural/tools",
	"frame/support/procedural/tools/derive",
	"frame/support/test",
	"frame/support/test/compile_pass",
	"frame/system",
	"frame/system/benchmarking",
	"frame/system/rpc/runtime-api",
	"frame/timestamp",
	"frame/transaction-payment",
	"frame/transaction-payment/asset-tx-payment",
	"frame/transaction-payment/rpc",
	"frame/transaction-payment/rpc/runtime-api",
	"frame/transaction-storage",
	"frame/treasury",
	"frame/tips",
	"frame/uniques",
	"frame/utility",
	"frame/vesting",
	"primitives/api",
	"primitives/api/proc-macro",
	"primitives/api/test",
	"primitives/application-crypto",
	"primitives/application-crypto/test",
	"primitives/arithmetic",
	"primitives/arithmetic/fuzzer",
	"primitives/authority-discovery",
	"primitives/authorship",
	"primitives/beefy",
	"primitives/block-builder",
	"primitives/blockchain",
	"primitives/consensus/aura",
	"primitives/consensus/babe",
	"primitives/consensus/common",
	"primitives/consensus/pow",
	"primitives/consensus/vrf",
	"primitives/core",
	"primitives/core/hashing",
	"primitives/core/hashing/proc-macro",
	"primitives/database",
	"primitives/debug-derive",
	"primitives/externalities",
	"primitives/finality-grandpa",
	"primitives/inherents",
	"primitives/io",
	"primitives/keyring",
	"primitives/keystore",
	"primitives/maybe-compressed-blob",
	"primitives/npos-elections",
	"primitives/npos-elections/solution-type",
	"primitives/npos-elections/fuzzer",
	"primitives/offchain",
	"primitives/panic-handler",
	"primitives/rpc",
	"primitives/runtime",
	"primitives/runtime-interface",
	"primitives/runtime-interface/proc-macro",
	"primitives/runtime-interface/test",
	"primitives/runtime-interface/test-wasm",
	"primitives/runtime-interface/test-wasm-deprecated",
	"primitives/sandbox",
	"primitives/serializer",
	"primitives/session",
	"primitives/staking",
	"primitives/state-machine",
	"primitives/std",
	"primitives/storage",
	"primitives/tasks",
	"primitives/test-primitives",
	"primitives/timestamp",
	"primitives/tracing",
	"primitives/transaction-pool",
	"primitives/transaction-storage-proof",
	"primitives/trie",
	"primitives/version",
	"primitives/version/proc-macro",
	"primitives/wasm-interface",
	"test-utils/client",
	"test-utils/derive",
	"test-utils/runtime",
	"test-utils/runtime/client",
	"test-utils/runtime/transaction-pool",
	"test-utils/test-crate",
	"utils/build-script-utils",
	"utils/fork-tree",
	"utils/frame/benchmarking-cli",
	"utils/frame/remote-externalities",
	"utils/frame/frame-utilities-cli",
	"utils/frame/try-runtime/cli",
	"utils/frame/rpc/support",
	"utils/frame/rpc/system",
	"utils/frame/generate-bags",
	"utils/frame/generate-bags/node-runtime",
	"utils/prometheus",
	"utils/wasm-builder",
]

# The list of dependencies below (which can be both direct and indirect dependencies) are crates
# that are suspected to be CPU-intensive, and that are unlikely to require debugging (as some of
# their debug info might be missing) or to require to be frequently recompiled. We compile these
# dependencies with `opt-level=3` even in "dev" mode in order to make "dev" mode more usable.
# The majority of these crates are cryptographic libraries.
#
# Note that this does **not** affect crates that depend on Substrate. In other words, if you add
# a dependency on Substrate, you have to copy-paste this list in your own `Cargo.toml` (assuming
# that you want the same list). This list is only relevant when running `cargo build` from within
# the Substrate workspace.
#
# If you see an error mentioning "profile package spec ... did not match any packages", it
# probably concerns this list.
#
# This list is ordered alphabetically.
[profile.dev.package]
blake2 = { opt-level = 3 }
blake2-rfc = { opt-level = 3 }
blake2b_simd = { opt-level = 3 }
chacha20poly1305 = { opt-level = 3 }
cranelift-codegen = { opt-level = 3 }
cranelift-wasm = { opt-level = 3 }
crc32fast = { opt-level = 3 }
crossbeam-deque = { opt-level = 3 }
crypto-mac = { opt-level = 3 }
curve25519-dalek = { opt-level = 3 }
ed25519-dalek = { opt-level = 3 }
flate2 = { opt-level = 3 }
futures-channel = { opt-level = 3 }
hashbrown = { opt-level = 3 }
hash-db = { opt-level = 3 }
hmac = { opt-level = 3 }
httparse = { opt-level = 3 }
integer-sqrt = { opt-level = 3 }
keccak = { opt-level = 3 }
libm = { opt-level = 3 }
librocksdb-sys = { opt-level = 3 }
libsecp256k1 = { opt-level = 3 }
libz-sys = { opt-level = 3 }
mio = { opt-level = 3 }
nalgebra = { opt-level = 3 }
num-bigint = { opt-level = 3 }
parking_lot = { opt-level = 3 }
parking_lot_core = { opt-level = 3 }
percent-encoding = { opt-level = 3 }
primitive-types = { opt-level = 3 }
ring = { opt-level = 3 }
rustls = { opt-level = 3 }
sha2 = { opt-level = 3 }
sha3 = { opt-level = 3 }
smallvec = { opt-level = 3 }
snow = { opt-level = 3 }
twox-hash = { opt-level = 3 }
uint = { opt-level = 3 }
wasmi = { opt-level = 3 }
x25519-dalek = { opt-level = 3 }
yamux = { opt-level = 3 }
zeroize = { opt-level = 3 }

[profile.release]
# Substrate runtime requires unwinding.
panic = "unwind"

[profile.production]
inherits = "release"

# Sacrifice compile speed for execution speed by using optimization flags:

# https://doc.rust-lang.org/rustc/linker-plugin-lto.html
lto = "fat"
# https://doc.rust-lang.org/rustc/codegen-options/index.html#codegen-units
codegen-units = 1
