syntaxis/docs/howto/bash-commands-reference.md
Jesús Pérez 9cef9b8d57 refactor: consolidate configuration directories
Merge _configs/ into config/ for single configuration directory.
Update all path references.

Changes:
- Move _configs/* to config/
- Update .gitignore for new patterns
- No code references to _configs/ found

Impact: -1 root directory (layout_conventions.md compliance)
2025-12-26 18:36:23 +00:00

387 lines
11 KiB
Markdown

# Bash Commands Reference - Target Selection Investigation
Complete reference of all bash commands used to understand how syntaxis installer selects correct targets.
## Quick Start: 5 Essential Commands
```bash
# 1. See your OS and architecture
uname -s && uname -m
# 2. See what Rust target triple you have (THE KEY)
rustc --print host-tuple
# 3. See what targets you can compile for
rustup target list | grep installed
# 4. See every command cargo executes
cargo build --release -v
# 5. Verify the compiled binary matches your architecture
file target/release/workspace
```
---
## Category 1: System Detection
### `uname -s`
- **Purpose:** Detect operating system
- **Output:** `Darwin` (macOS) or `Linux`
- **Used by:** install.sh to choose how to install dependencies
### `uname -m`
- **Purpose:** Detect processor architecture
- **Output:** `arm64`, `x86_64`, `aarch64`
- **Used by:** install.sh to understand CPU type
### `uname -a`
- **Purpose:** Complete system information
- **Output:** Full kernel, hostname, architecture details
- **Used by:** Debugging, comprehensive system check
---
## Category 2: Rust Information (The Critical Ones)
### `rustc --version`
- **Purpose:** Check installed Rust version
- **Output:** `rustc 1.91.1 (ed61e7d7e 2025-11-07)`
- **Why:** Verify compatibility (needs 1.75+)
### ⭐ `rustc --print host-tuple` ⭐
- **Purpose:** Get the host target triple - THIS IS THE KEY
- **Output Examples:**
- `aarch64-apple-darwin` (Mac M1/M2/M3)
- `x86_64-apple-darwin` (Mac Intel)
- `aarch64-unknown-linux-gnu` (Linux ARM64)
- `x86_64-unknown-linux-gnu` (Linux Intel x86)
- **Why:** This is EXACTLY what Cargo uses to decide what to compile
### `rustc --print cfg`
- **Purpose:** See CPU features Rust detects
- **Output:** `target_arch="aarch64"`, `target_os="macos"`, etc.
- **Why:** Developers use `#[cfg(...)]` directives based on this
### `rustc --version --verbose`
- **Purpose:** Detailed Rust information including LLVM
- **Used by:** Debugging compatibility issues
---
## Category 3: Rustup Toolchain Manager
### `rustup default`
- **Purpose:** See default toolchain
- **Output:** `stable-aarch64-apple-darwin (default)`
- **Why:** Verify correct toolchain is active
### `rustup toolchain list`
- **Purpose:** List all installed toolchains
- **Output:** Multiple toolchain versions and variants
- **Why:** Check if you have multiple Rust versions
### `rustup target list | grep installed`
- **Purpose:** List INSTALLED targets for compilation
- **Output Examples:**
```
aarch64-apple-darwin (installed)
x86_64-apple-darwin (installed)
x86_64-unknown-linux-gnu (installed)
```
- **Why:** Determines if cross-compilation is possible
- Only `aarch64-apple-darwin` = can only compile for Mac ARM
- Multiple targets = can cross-compile
### `rustup which rustc`
- **Purpose:** Find where rustc is installed
- **Output:** `/Users/.../stable-aarch64-apple-darwin/bin/rustc`
- **Why:** Verify installation paths are correct
### `rustup target add x86_64-unknown-linux-gnu`
- **Purpose:** Install a new target for cross-compilation
- **Used by:** Setting up cross-compilation capability
---
## Category 4: Advanced Rust Information
### `rustc --print sysroot`
- **Purpose:** Find standard library and installed targets location
- **Output:** `/Users/.../.rustup/toolchains/stable-aarch64-apple-darwin`
- **Why:** Verify library paths and installed targets
### `rustc --print sysroot | xargs -I {} ls {}/lib/rustlib/`
- **Purpose:** List all targets available in this Rust installation
- **Output:**
```
aarch64-apple-darwin
aarch64-apple-ios
x86_64-apple-darwin
x86_64-unknown-linux-gnu
```
- **Why:** See exactly what you can compile for
### `rustc --print target-list | head -20`
- **Purpose:** List ALL targets Rust theoretically supports (100+)
- **Used by:** Research, seeing all possible options
---
## Category 5: Cargo Information
### `cargo --version`
- **Purpose:** Check Cargo version
- **Output:** `cargo 1.91.1`
- **Why:** Verify compatibility
### `cargo metadata --format-version=1 --no-deps`
- **Purpose:** Get JSON information about workspace
- **Used by:** Automated scripts, parsing crate information
### `cargo build --release --dry-run`
- **Purpose:** See what would compile WITHOUT compiling
- **Used by:** Safe preview before long compilation
### `cargo build --release -v`
- **Purpose:** Verbose mode - show every command cargo executes
- **Output:** Each rustc command, linker flags, etc.
- **Used by:** Understanding exactly what cargo does
---
## Category 6: Project Investigation
### `ls -la .cargo/`
- **Purpose:** Check if custom cargo config exists
- **Why:** `.cargo/config.toml` affects how cargo compiles
### `cat .cargo/config.toml`
- **Purpose:** View custom compilation configuration
- **Contains:** Build settings, target-specific flags, cross-compilation config
- **Why:** Cargo uses this for special compilation modes
### `grep -A 10 "\[profile.release\]" Cargo.toml`
- **Purpose:** See release build optimizations
- **Output Examples:**
```toml
opt-level = 3
lto = true
codegen-units = 1
strip = true
```
- **Why:** Understand how binaries are optimized
### `cat Cargo.toml | grep resolver`
- **Purpose:** Check workspace resolver version
- **Output:** `resolver = "2"`
- **Why:** Affects dependency resolution behavior
---
## Category 7: Target Directory Inspection
### `du -sh target/debug target/release`
- **Purpose:** Compare debug vs release build sizes
- **Output:** `12G target/debug` vs `2.4G target/release`
- **Why:** Understand space usage difference
### `cat target/.rustc_info.json`
- **Purpose:** View cached host information from previous build
- **Contains:** Target triple, CPU features, compiler info
- **Why:** Understand what cargo detected
### `ls -lh target/release/deps/ | head`
- **Purpose:** View compiled artifacts (.rlib, .dylib, .o files)
- **Used by:** Verifying compilation succeeded
### `ls -lh target/release/`
- **Purpose:** List generated executables
- **Output:** `workspace`, `syntaxis-tui`, `syntaxis-dashboard`
- **Why:** Verify binaries were created
### ⭐ `file target/release/workspace` ⭐
- **Purpose:** Check architecture of compiled binary - VERIFICATION
- **Output Examples:**
- `Mach-O 64-bit executable arm64` (Mac ARM64 - correct)
- `ELF 64-bit LSB pie executable, x86-64` (Linux Intel - correct)
- **Why:** CONFIRM binary was compiled for correct architecture
- If Mac shows `x86-64` = PROBLEM
- If Linux shows `arm64` = PROBLEM
---
## Category 8: Cross-Compilation
### `rustup target add x86_64-unknown-linux-gnu`
- **Purpose:** Install capability to compile for a different target
- **Used by:** Setting up cross-compilation from macOS to Linux
### `cargo build --release --target x86_64-unknown-linux-gnu`
- **Purpose:** Explicitly compile for a different target
- **Result:** Creates `target/x86_64-unknown-linux-gnu/release/`
- **Why:** Compile binaries for different OS/architecture
### `ls -lh target/x86_64-unknown-linux-gnu/release/`
- **Purpose:** View cross-compiled binaries for different target
- **Used by:** Verify cross-compilation worked
---
## Category 9: Binary Analysis
### `file target/release/workspace`
- **Purpose:** Check binary format and architecture
- **Most Important For:** Verifying correct architecture
- **Output:**
- macOS: `Mach-O 64-bit executable arm64`
- Linux: `ELF 64-bit LSB pie executable, x86-64`
### `nm target/release/workspace | head`
- **Purpose:** View symbols in binary
- **Output:** Function names (empty if stripped)
- **Used by:** Debug if suspicious of compilation issues
### `ldd target/release/workspace` (Linux only)
- **Purpose:** Show dynamic library dependencies
- **Output:** `libstdc++.so.6`, `libc.so.6`, etc.
- **Why:** Verify runtime dependencies
---
## Category 10: Build and Compilation
### `cargo build --workspace`
- **Purpose:** Quick debug build for development
- **Speed:** Fast (no optimizations)
### `cargo build --release --workspace`
- **Purpose:** Optimized production build
- **Speed:** Slow (maximum optimization with LTO)
### `cargo check --workspace`
- **Purpose:** Fast error checking without generating binaries
- **Speed:** Fastest (no codegen)
- **Used by:** Quick feedback during development
### `cargo test --workspace --lib --release`
- **Purpose:** Run tests with optimized binaries
- **Used by:** Validation before release
---
## How The System Works
### The Selection Flow
```
1. User runs: cargo build --release
2. Cargo queries: rustc --print host-tuple
3. Rustc responds: aarch64-apple-darwin
4. Cargo creates: target/release/
5. For each source file:
- rustc compiles → .o file (object file for aarch64)
- Links .o files → .rlib or executable
6. Result: Binary for aarch64-apple-darwin
```
### Key Insight
**Cargo automatically detects the correct target.** No manual configuration needed for native compilation!
```bash
cargo build --release
# ✓ On Mac M1: automatically compiles for aarch64-apple-darwin
# ✓ On Mac Intel: automatically compiles for x86_64-apple-darwin
# ✓ On Linux ARM: automatically compiles for aarch64-unknown-linux-gnu
```
---
## Troubleshooting Guide
### Problem: "Binary won't run on my system"
**Solution:** Check architecture
```bash
# See what target your system is
rustc --print host-tuple
# Check what was compiled
file target/release/workspace
# They must match!
```
### Problem: "Want to compile for a different OS"
**Solution:** Use cross-compilation
```bash
# Check available targets
rustup target list | grep installed
# Install new target if needed
rustup target add x86_64-unknown-linux-gnu
# Build for specific target
cargo build --release --target x86_64-unknown-linux-gnu
# Verify
file target/x86_64-unknown-linux-gnu/release/workspace
```
### Problem: "Build seems wrong or slow"
**Solution:** Check with verbose mode
```bash
cargo build --release -v
```
---
## Summary Table
| Command | Purpose | Critical? |
|---------|---------|-----------|
| `uname -s && uname -m` | See your system | Yes |
| `rustc --print host-tuple` | See your target | **YES** |
| `rustup target list \| grep installed` | See possible targets | Yes |
| `cargo build --release -v` | See build details | No |
| `file target/release/workspace` | Verify architecture | **YES** |
| `rustup target add TARGET` | Install new target | Only for cross-compile |
| `cargo build --target TARGET` | Build for different target | Only for cross-compile |
---
## For install.sh Context
The `install.sh` script uses:
```bash
# Phase 1: Detect system
OS=$(detect_os) # Uses: uname -s
ARCH=$(detect_arch) # Uses: uname -m
# Phase 2-7: Install and build
cargo build --release --workspace
# Cargo internally uses: rustc --print host-tuple
# Result: Builds for detected target automatically
# Phase 5: Install binaries
cargo install --path core/crates/syntaxis-cli
# Installs to ~/.cargo/bin/workspace
# Binary is for the target detected in Phase 4
```
**The key:** Once Cargo knows the host target (via rustc), it handles everything automatically!
---
## References
- [Rust Platform Support](https://forge.rust-lang.org/release/platform-support.html)
- [Cargo Documentation](https://doc.rust-lang.org/cargo/)
- [Cross-compilation Guide](https://rust-lang.github.io/rustup/cross-compilation.html)