mononix/Mononix/Index.md

59 lines
1.6 KiB
Markdown

Tools for running builds using Nix in a monorepo.
Goal: Using one coherent build tool, I can develop multiple projects with common dependencies.
# Background
# Requirements
- select the toolchains and versions thereof for the project
- configure cross-compilation
- allow multiple languages
- co-exist with language ecosystems. For example, rust-analyzer needs cargo in order to understand Cargo.toml. However, it should be easier to fully build the project with Nix
- every module is compiled into a derivation that downstream modules can import. Each module derivation is cached separately so that Nix only rebuilds the changed module.
- Nix can generate a closure for an executable, even a cross-compiled one, to copy to the remote system
# Languages and Bindings
Languages:
- C
- Rust
- Typescript
- Javascript
Bindings:
- C -> Rust
- Rust -> Typescript
- Rust -> Javascript
Backends
| | Linux x86 | Linux ARM | WASM | AVR | ESP32 |
| ---------- | --------- | --------- | ---- | --- | ----- |
| C | yes | yes | | yes | |
| Rust | yes | yes | yes | yes | yes |
| Typescript | | | yes | | |
| Javascript | | | yes | | |
- [[Mononix, C library]]
- [[Mononix, Rust library]]
# Build targets
- build
- run
- tests
- code coverage profiling
- linting
- performance testing
Each of these is a separate Nix command that builds or runs the desired result.
---
- [[Nix Monorepos]]
- [[Nix For Development]]
- [[Cross-compiling]]
- [[Scaling Rust Builds with Bazel]]
- [[Makefiles and Monorepos]]