[workspace] members = [ "rakc", "ide/src-tauri", "stdlib", "rakpkg", "rak-setup", ] resolver = "2" [workspace.package] version = "0.8.4" edition = "2021" authors = ["Ryuzaki"] license = "MIT OR Apache-2.0" repository = "https://github.com/ryuzaki/rak" [workspace.dependencies] # Common dependencies across crates thiserror = "1.0" anyhow = "1.0" serde = { version = "1.0", features = ["derive"] } tokio = { version = "1", features = ["full"] } tracing = "0.1" tracing-subscriber = "0.3" # Compiler specific logos = "0.14" # Lexer generator # inkwell = { version = "0.2", features = ["llvm15-0"] } # LLVM backend (optional) # IDE / Tauri tauri = { version = "1.6", features = ["shell-open"] } serde_json = "1.0" tower-lsp = "0.20" # LSP server implementation tokio-util = "0.7" # Release hardening. These are the compiler-level defenses Rak can actually # make about itself; they do not replace the missing control-flow integrity # support noted in docs/V8-ROADMAP.md. # # lto + codegen-units=1 whole-program optimisation, so a bounds check in # one crate can be folded against a caller in another # instead of living behind an opaque call # overflow-checks=true keep arithmetic overflow panicking in release. The # default is `false`, which silently wraps and turns # a length calculation into a heap overflow # panic=abort no unwinding through the FFI trampolines # strip no symbols to attach a debugger to by accident [profile.release] lto = "fat" codegen-units = 1 overflow-checks = true panic = "abort" strip = "symbols" # The fuzzing crate and the IDE both want a usable panic message, so they get # their own profile rather than inheriting `panic = "abort"`. [profile.release.package."*"] opt-level = 2