[[bin]]
name = "polkadot"
path = "src/main.rs"

[package]
name = "polkadot"
description = "Implementation of a `https://polkadot.network` node in Rust based on the Substrate framework."
license = "GPL-3.0-only"
version = "0.9.22"
authors = ["Parity Technologies <admin@parity.io>"]
edition = "2021"
rust-version = "1.57.0" # custom profiles
readme = "README.md"

[dependencies]
polkadot-cli = { path = "cli", features = [ "kusama-native", "westend-native", "rococo-native" ]  }
color-eyre = { version = "0.6.1", default-features = false }
parity-util-mem = { version = "0.11.0", default-features = false, features = ["jemalloc-global"] }

[dev-dependencies]
assert_cmd = "2.0.4"
nix = "0.24.1"
tempfile = "3.2.0"
tokio = "1.18.2"
remote-externalities = { git = "https://github.com/paritytech/substrate", branch = "master" }
polkadot-core-primitives = { path = "core-primitives" }

[workspace]
members = [
	"cli",
	"core-primitives",
	"erasure-coding",
	"primitives",
	"primitives/test-helpers",
	"runtime/common",
	"runtime/common/slot_range_helper",
	"runtime/metrics",
	"runtime/parachains",
	"runtime/polkadot",
	"runtime/polkadot/constants",
	"runtime/kusama",
	"runtime/kusama/constants",
	"runtime/rococo",
	"runtime/rococo/constants",
	"runtime/westend",
	"runtime/westend/constants",
	"runtime/test-runtime",
	"runtime/test-runtime/constants",
	"statement-table",
	"xcm",
	"xcm/xcm-builder",
	"xcm/xcm-executor",
	"xcm/xcm-executor/integration-tests",
	"xcm/xcm-simulator",
	"xcm/xcm-simulator/example",
	"xcm/xcm-simulator/fuzzer",
	"xcm/pallet-xcm",
	"xcm/pallet-xcm-benchmarks",
	"xcm/procedural",
	"node/client",
	"node/collation-generation",
	"node/core/approval-voting",
	"node/core/av-store",
	"node/core/backing",
	"node/core/bitfield-signing",
	"node/core/candidate-validation",
	"node/core/chain-api",
	"node/core/chain-selection",
	"node/core/dispute-coordinator",
	"node/core/parachains-inherent",
	"node/core/provisioner",
	"node/core/pvf",
	"node/core/pvf-checker",
	"node/core/runtime-api",
	"node/network/approval-distribution",
	"node/network/bridge",
	"node/network/protocol",
	"node/network/statement-distribution",
	"node/network/bitfield-distribution",
	"node/network/availability-distribution",
	"node/network/availability-recovery",
	"node/network/collator-protocol",
	"node/network/gossip-support",
	"node/network/dispute-distribution",
	"node/overseer",
	"node/orchestra",
	"node/orchestra/proc-macro",
	"node/malus",
	"node/primitives",
	"node/service",
	"node/subsystem",
	"node/subsystem-types",
	"node/subsystem-test-helpers",
	"node/subsystem-util",
	"node/jaeger",
	"node/gum",
	"node/gum/proc-macro",
	"node/metrics",
	"node/metered-channel",
	"node/test/client",
	"node/test/performance-test",
	"node/test/service",
	"node/zombienet-backchannel",
	"rpc",
	"parachain",
	"parachain/test-parachains",
	"parachain/test-parachains/adder",
	"parachain/test-parachains/adder/collator",
	"parachain/test-parachains/halt",
	"parachain/test-parachains/undying",
	"parachain/test-parachains/undying/collator",
	"utils/staking-miner",
	"utils/remote-ext-tests/bags-list",
	"utils/generate-bags",
]

# We want to be able to build the bridge relayer without pulling it (and all of its
# dependencies into the Polkadot workspace)
exclude = ["bridges/relays/bin-substrate", "bridges/bin/rialto/runtime", "bridges/bin/millau/runtime"]

[badges]
maintenance = { status = "actively-developed" }

# 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.
#
# 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]
blake2b_simd = { opt-level = 3 }
blake2 = { opt-level = 3 }
blake2-rfc = { 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_core = { opt-level = 3 }
parking_lot = { opt-level = 3 }
percent-encoding = { opt-level = 3 }
primitive-types = { opt-level = 3 }
reed-solomon-novelpoly = { 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]
# Polkadot runtime requires unwinding.
panic = "unwind"
opt-level = 3

# make sure dev builds with backtrace do
# not slow us down
[profile.dev.package.backtrace]
inherits = "release"

[profile.production]
inherits = "release"
lto = true
codegen-units = 1

[profile.testnet]
inherits = "release"
debug = 1 # debug symbols are useful for profilers
debug-assertions = true
overflow-checks = true

[features]
runtime-benchmarks= [ "polkadot-cli/runtime-benchmarks" ]
try-runtime = [ "polkadot-cli/try-runtime" ]
fast-runtime = [ "polkadot-cli/fast-runtime" ]
runtime-metrics = [ "polkadot-cli/runtime-metrics" ]
pyroscope = ["polkadot-cli/pyroscope"]
staging-client = ["polkadot-cli/staging-client"]

# Configuration for building a .deb package - for use with `cargo-deb`
[package.metadata.deb]
name = "polkadot"
extended-description = "Implementation of a https://polkadot.network node in Rust based on the Substrate framework."
section = "misc"
maintainer = "martin@parity.io"
license-file = ["LICENSE", "0"]
# https://www.debian.org/doc/debian-policy/ch-maintainerscripts.html
maintainer-scripts = "scripts/packaging/deb-maintainer-scripts"
assets = [
	["target/release/polkadot", "/usr/bin/", "755"],
	["scripts/packaging/polkadot.service", "/lib/systemd/system/", "644"]
]
conf-files = [
	"/etc/default/polkadot"
]

# Configuration for building an .rpm package - for use with `cargo-rpm`
[package.metadata.rpm]
package = "polkadot"

[package.metadata.rpm.cargo]
buildflags = ["--release"]

[package.metadata.rpm.targets]
polkadot = { path = "/usr/bin/polkadot" }

[package.metadata.rpm.files]
"../scripts/packaging/polkadot.service" = { path = "/usr/lib/systemd/system/polkadot.service", mode = "644" }

[package.metadata.spellcheck]
config = "./scripts/ci/gitlab/spellcheck.toml"