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)
11 KiB
11 KiB
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
# 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) orLinux - 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
- Only
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.tomlaffects 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:
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/debugvs2.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
- If Mac shows
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
- macOS:
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!
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
# 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
# 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
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:
# 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!