ontoref-code/install/setup-dev.nu

78 lines
2.8 KiB
Text
Raw Permalink Normal View History

#!/usr/bin/env nu
# Generates .cargo/config.toml from config.base.toml + machine-local settings.
# Run once after cloning, and again any time you mount/remount /Volumes/Devel.
def main [
--project: string = "ontoref" # project name (sets /Volumes/Devel/<project>/target)
--sccache-size: string = "30G" # sccache cache size limit
--dry-run # print generated config without writing
] {
let base = ".cargo/config.base.toml"
let out = ".cargo/config.toml"
let sentinel = "/Volumes/Devel/.volume-ok"
if not ($base | path exists) {
error make { msg: $"base config not found: ($base) — is this run from the project root?" }
}
let base_content = open --raw $base
let local_section = if ($sentinel | path exists) {
let target_dir = $"/Volumes/Devel/($project)/target"
let sccache_dir = "/Volumes/Devel/sccache"
mkdir $target_dir
mkdir $sccache_dir
let has_sccache = (which sccache | length) > 0
let wrapper_line = if $has_sccache {
"rustc-wrapper = \"sccache\""
} else {
"# rustc-wrapper = \"sccache\" # install sccache to enable: cargo install sccache"
}
[
""
"# --- machine-local (generated by install/setup-dev.nu) ---"
"# /Volumes/Devel is mounted — using external volume for build artifacts."
""
"[build]"
$"target-dir = \"($target_dir)\""
$wrapper_line
""
"[env]"
$"SCCACHE_DIR = \"($sccache_dir)\""
$"SCCACHE_CACHE_SIZE = \"($sccache_size)\""
] | str join "\n"
} else {
print $"warning: /Volumes/Devel not mounted \(sentinel ($sentinel) missing\)"
print " target-dir not set — builds will use ./target"
print " Mount the volume and re-run this script to enable external target dir."
[
""
"# --- machine-local (generated by install/setup-dev.nu) ---"
"# /Volumes/Devel NOT mounted — using local ./target."
"# Mount volume and run `just setup-dev` to redirect builds to /Volumes/Devel."
] | str join "\n"
}
let generated = $"($base_content)\n($local_section)\n"
if $dry_run {
print $generated
} else {
$generated | save --force $out
print $"wrote ($out)"
if ($sentinel | path exists) {
print $" target-dir = /Volumes/Devel/($project)/target"
print $" SCCACHE_DIR = /Volumes/Devel/sccache"
if (which sccache | length) > 0 {
print " rustc-wrapper = sccache ✓"
} else {
print " rustc-wrapper = (sccache not installed — skipped)"
}
}
}
}