content: # Copyright (c) Microsoft Corporation.
  # Licensed under the MIT license.
  
  [package]
  name = "demikernel"
  version = "1.5.13"
  authors = ["Microsoft Corporation"]
  edition = "2021"
  description = "Kernel-Bypass LibOS Architecture"
  readme = "README.md"
  homepage = "https://aka.ms/demikernel"
  repository = "https://github.com/demikernel/demikernel"
  license-file = "LICENSE.txt"
  
  [dependencies]
  # Third-party crates.
  anyhow = "1.0.89"
  arrayvec = "0.7.6"
  async-trait = "0.1.83"
  bit-iter = "1.2.0"
  cfg-if = "1.0.0"
  clap = "4.5.18"
  crc = "3.2.1"
  crossbeam-channel = "0.5.13"
  eui48 = "1.1.0"
  flexi_logger = "0.29.0"
  futures = "0.3.30"
  histogram = "0.11.0"
  libc = "0.2.159"
  log = "0.4.22"
  mimalloc = { version = "0.1.43", default-features = false }
  rand = { version = "0.8.5", features = ["small_rng"] }
  slab = "0.4.9"
  socket2 = "0.5.7"
  x86 = "0.52.0"
  yaml-rust = "0.4.5"
  
  # Demikernel crates (published on crates.io).
  demikernel-dpdk-bindings = { version = "1.1.8", optional = true }
  demikernel-network-simulator = { version = "0.1.0" }
  
  # Windows-specific dependencies.
  [target.'cfg(windows)'.dependencies]
  # libc implementation in Rust is quite different for Windows and Linux. This library provides the relevant networking
  # constants and data structures for Windows.
  windows = { version = "0.57.0", features = [
      "Win32_Foundation",
      "Win32_Networking_WinSock",
      "Win32_Security",
      "Win32_Storage_FileSystem",
      "Win32_System_IO",
      "Win32_System_Pipes",
      "Win32_System_SystemInformation",
      "Win32_System_Threading",
  ] }
  demikernel-xdp-bindings = { version = "1.0.1", optional = true }
  # for interacting with socket2.
  windows-sys = { version = "0.52.0", features = ["Win32_Networking_WinSock"] }
  
  # Targets
  [lib]
  crate-type = ["cdylib", "rlib"]
  path = "src/lib.rs"
  
  [[test]]
  name = "tcp-tests"
  path = "tests/rust/tcp-tests/main.rs"
  harness = false
  
  [[test]]
  name = "udp-tests"
  path = "tests/rust/udp-tests/main.rs"
  harness = false
  
  [[test]]
  name = "tcp"
  path = "tests/rust/tcp.rs"
  
  [[test]]
  name = "udp"
  path = "tests/rust/udp.rs"
  
  [[test]]
  name = "sga"
  path = "tests/rust/sga.rs"
  
  [[example]]
  name = "udp-dump"
  path = "examples/rust/udp-dump.rs"
  
  [[example]]
  name = "udp-echo"
  path = "examples/rust/udp-echo.rs"
  
  [[example]]
  name = "udp-pktgen"
  path = "examples/rust/udp-pktgen.rs"
  
  [[example]]
  name = "udp-relay"
  path = "examples/rust/udp-relay.rs"
  
  [[example]]
  name = "udp-push-pop"
  path = "examples/rust/udp-push-pop.rs"
  
  [[example]]
  name = "udp-ping-pong"
  path = "examples/rust/udp-ping-pong.rs"
  
  [[example]]
  name = "tcp-dump"
  path = "examples/rust/tcp-dump.rs"
  
  [[example]]
  name = "tcp-pktgen"
  path = "examples/rust/tcp-pktgen.rs"
  
  [[example]]
  name = "tcp-push-pop"
  path = "examples/rust/tcp-push-pop.rs"
  
  [[example]]
  name = "tcp-ping-pong"
  path = "examples/rust/tcp-ping-pong.rs"
  
  [features]
  default = ["catnap-libos"]
  catnap-libos = []
  catpowder-libos = []
  catnip-libos = ["libdpdk"]
  libdpdk = ["demikernel-dpdk-bindings"]
  libxdp = ["demikernel-xdp-bindings"]
  mlx4 = ["demikernel-dpdk-bindings/mlx4"]
  mlx5 = ["demikernel-dpdk-bindings/mlx5"]
  profiler = []
  direct-mapping = []
  
  
  [profile.release]
  opt-level = 3            # Enable all compiler optimizations.
  debug = false            # Do not include any debug info in the binary.
  debug-assertions = false # Do not include any debug assertions in the binary.
  overflow-checks = false  # Do not check for overflows at runtime.
  lto = "fat"              # Perform link time optimizations across all dependencies (overridden).
  panic = "abort"          # Terminate the process upon panic (overridden).
  incremental = false      # Disable incremental compilation.
  codegen-units = 1        # Produce a single code generation unit (overridden).
  rpath = false            # Disable runtime search path.
  
  [profile.dev]
  opt-level = 0           # Disable all compiler optimizations.
  debug = true            # Output full debug info in the binary.
  debug-assertions = true # Include debug assertions in the binary.
  overflow-checks = true  # Check for overflows at runtime.
  lto = "off"             # Disable link time optimization (overridden).
  panic = 'unwind'        # Unwind the stack upon panic.
  incremental = true      # Incremental build.
  codegen-units = 256     # Produce multiple code generation units.
  rpath = false           # Disable runtime search path.
  