# Comandos Bash Usados para Investigar Target Selection

## 1. DETECTAR INFORMACIÓN DEL SISTEMA

### 1.1 Detectar el OS
```bash
uname -s
```
**Para qué:** Identifica el sistema operativo
**Resultado posible:** "Darwin" (macOS) o "Linux"

### 1.2 Detectar la Arquitectura
```bash
uname -m
```
**Para qué:** Identifica la arquitectura del procesador
**Resultado posible:** "arm64" (Apple Silicon), "x86_64" (Intel), "aarch64" (Linux ARM)

### 1.3 Información Completa del Sistema
```bash
uname -a
```
**Para qué:** Muestra toda la información: kernel, nombre host, procesador, etc.
**Ejemplo:** "Darwin MacBook.local 25.1.0 Darwin Kernel Version 25.1.0"

---

## 2. INFORMACIÓN DE RUST Y CARGO

### 2.1 Versión de Rustc
```bash
rustc --version
```
**Para qué:** Verificar versión instalada de Rust
**Resultado:** "rustc 1.91.1 (ed61e7d7e 2025-11-07)"

### 2.2 Información Detallada de Rustc
```bash
rustc --version --verbose
```
**Para qué:** Ver detalles incluyendo LLVM version
**Muestra:** 
- release
- commit-hash
- commit-date
- host (target del sistema)
- LLVM version

### 2.3 El Target Host (LA CLAVE)
```bash
rustc --print host-triple
```
**Para qué:** Obtener el "triple" del sistema actual
**Resultado en M1 Mac:** "aarch64-apple-darwin"
**Resultado en Intel Mac:** "x86_64-apple-darwin"
**Resultado en Linux ARM:** "aarch64-unknown-linux-gnu"

### 2.4 Información del Toolchain
```bash
rustup toolchain list
```
**Para qué:** Ver qué toolchains están instalados
**Resultado:** "stable-aarch64-apple-darwin (default)"

### 2.5 Ruta del Toolchain
```bash
rustup which rustc
```
**Para qué:** Saber dónde está instalado rustc
**Resultado:** "/Users/jesusperezlorenzo/.rustup/toolchains/stable-aarch64-apple-darwin/bin/rustc"

### 2.6 Versión de Cargo
```bash
cargo --version
```
**Para qué:** Verificar versión de cargo
**Resultado:** "cargo 1.91.1"

---

## 3. INFORMACIÓN DE RUST AVANZADA

### 3.1 Features/Capacidades del CPU
```bash
rustc --print cfg
```
**Para qué:** Ver qué características del CPU detecta Rust
**Muestra:** target_arch, target_os, target_vendor, etc.
**Ejemplo:**
```
target_arch="aarch64"
target_os="macos"
target_vendor="apple"
target_pointer_width="64"
target_endian="little"
target_family="unix"
```

### 3.2 Todos los Targets Disponibles
```bash
rustc --print sysroot | xargs -I {} ls {}/lib/rustlib/
```
**Para qué:** Ver qué targets tiene instalados
**Ejemplo:**
```
aarch64-apple-darwin
aarch64-apple-ios
x86_64-apple-darwin
aarch64-unknown-linux-gnu
```

### 3.3 Target Triples Soportados
```bash
rustc --print target-list | head -20
```
**Para qué:** Ver todos los targets que Rust puede soportar (no solo instalados)

---

## 4. INVESTIGACIÓN DEL PROYECTO

### 4.1 Listar Estructura del Proyecto
```bash
ls -la
```
**Para qué:** Ver archivos en directorio actual
**Muestra:** Cargo.toml, scripts/, etc.

### 4.2 Verificar Config de Cargo Personalizada
```bash
cat .cargo/config.toml
```
**Para qué:** Ver si hay configuración especial de compilación
**En este proyecto:** No existe (usa valores por defecto)

### 4.3 Ver Configuración de Build en Cargo.toml
```bash
grep -A 10 "\[profile.release\]" Cargo.toml
```
**Para qué:** Ver las optimizaciones del release build
**Muestra:**
```toml
opt-level = 3
lto = true
codegen-units = 1
strip = true
```

### 4.4 Verificar Workspace Members
```bash
cargo metadata --format-version=1 --no-deps | grep -o '"name":"[^"]*"' | head -15
```
**Para qué:** Ver todos los crates en el workspace
**Muestra 14 crates diferentes**

---

## 5. BUILD Y COMPILACIÓN

### 5.1 Hacer un Dry-Run (sin compilar)
```bash
cargo build --release --dry-run --workspace
```
**Para qué:** Ver qué se compilaría sin hacerlo realmente

### 5.2 Compilar con Output Detallado
```bash
cargo build --release --workspace -v
```
**Para qué:** Ver cada comando que cargo ejecuta
**Muestra:** rustc flags, linker commands, etc.

### 5.3 Compilar Solo Debug
```bash
cargo build --workspace
```
**Para qué:** Compilación rápida para desarrollo

### 5.4 Compilar Release
```bash
cargo build --release --workspace
```
**Para qué:** Compilación optimizada para producción

---

## 6. INSPECCIÓN DEL TARGET DIRECTORY

### 6.1 Ver Tamaño de Builds
```bash
du -sh target/debug target/release
```
**Para qué:** Comparar tamaño de debug vs release
**Resultado:**
```
12G     target/debug
2.4G    target/release
```

### 6.2 Ver Archivos de Cache de Rustc
```bash
cat target/.rustc_info.json
```
**Para qué:** Ver información cacheada del host
**Contiene:** target_arch, target_os, CPU features, etc.

### 6.3 Listar Binarios Compilados
```bash
ls -lh target/release | grep -v "^d"
```
**Para qué:** Ver qué ejecutables se generaron

### 6.4 Ver Artifacts en target/release/deps
```bash
ls -lh target/release/deps/ | head -20
```
**Para qué:** Ver archivos objeto, librerías estáticas y dinámicas

---

## 7. CROSS-COMPILATION (EJEMPLO)

### 7.1 Listar Targets Instalados
```bash
rustup target list | grep installed
```
**Para qué:** Ver qué targets están disponibles

### 7.2 Instalar Nuevo Target
```bash
rustup target add x86_64-unknown-linux-gnu
```
**Para qué:** Agregar capacidad de compilar para Linux desde macOS

### 7.3 Compilar para Target Específico
```bash
cargo build --release --target x86_64-unknown-linux-gnu
```
**Para qué:** Cross-compile para otro sistema

### 7.4 Ver Binarios Para Diferentes Targets
```bash
ls -lh target/x86_64-unknown-linux-gnu/release/ | head -10
```
**Para qué:** Ver binarios compilados para Linux

---

## 8. VERIFICACIÓN Y TESTING

### 8.1 Verificar Compilación (sin compilar completo)
```bash
cargo check --workspace
```
**Para qué:** Verificación rápida de errores sin generar binarios

### 8.2 Ejecutar Tests
```bash
cargo test --workspace --release
```
**Para qué:** Correr todos los tests del proyecto

### 8.3 Ejecutar Tests de Librería Solo
```bash
cargo test --workspace --lib --release
```
**Para qué:** Tests sin incluir integration tests

### 8.4 Ver Qué se Compilará
```bash
cargo build --workspace --dry-run 2>&1 | head -50
```
**Para qué:** Preview sin compilar realmente

---

## 9. ANÁLISIS DE BINARIOS

### 9.1 Ver Info de Ejecutable (macOS)
```bash
file target/release/workspace
```
**Para qué:** Ver arquitectura del binario compilado
**Resultado:**
```
Mach-O 64-bit executable arm64
```

### 9.2 Ver Info de Ejecutable (Linux)
```bash
file target/release/workspace
```
**Para qué:** En Linux, muestra si es x86_64 o aarch64
**Resultado:**
```
ELF 64-bit LSB pie executable, x86-64
```

### 9.3 Ver Símbolos en Binario
```bash
nm target/release/workspace | head -20
```
**Para qué:** Ver funciones y símbolos (vacío si está stripped)

### 9.4 Ver Tamaño de Binarios
```bash
ls -lh target/release/{workspace,syntaxis-tui,syntaxis-dashboard}
```
**Para qué:** Comparar tamaños de cada binario

---

## 10. SETUP DE TOOLCHAIN

### 10.1 Ver Versión Default
```bash
rustup default
```
**Para qué:** Saber qué toolchain se usa por defecto

### 10.2 Cambiar Versión Default
```bash
rustup default stable
```
**Para qué:** Usar la versión stable actual

### 10.3 Actualizar Rust
```bash
rustup update
```
**Para qué:** Actualizar todo el toolchain a versiones más nuevas

### 10.4 Ver Sysroot (ubicación de librerías std)
```bash
rustc --print sysroot
```
**Para qué:** Donde está instalada la librería estándar de Rust

---

## RESUMEN DE COMANDOS MÁS IMPORTANTES

Para investigar **target selection**, estos fueron los CRÍTICOS:

```bash
# 1. Detectar el sistema
uname -s              # OS
uname -m              # Arquitectura

# 2. Saber qué target usa Rust
rustc --print host-triple

# 3. Ver qué se puede compilar
rustc --print cfg    # Features del CPU
rustc --print target-list | grep -i linux

# 4. Verificar el proyecto
cargo metadata --format-version=1 --no-deps

# 5. Ver cómo se compila
cargo build --release -v

# 6. Verificar binarios generados
file target/release/workspace
ls -lh target/release/
```

---

## FLUJO COMPLETO DE INVESTIGACIÓN

1. **Entender el Sistema Host**
   ```bash
   uname -s && uname -m
   ```

2. **Ver qué Target Usa Rust**
   ```bash
   rustc --print host-triple
   ```

3. **Inspeccionar El Proyecto**
   ```bash
   cat Cargo.toml | grep -E "\[package\]|\[workspace\]"
   ```

4. **Ver Config de Cargo**
   ```bash
   ls -la .cargo/
   cat .cargo/config.toml 2>/dev/null || echo "No custom config"
   ```

5. **Compilar y Verificar**
   ```bash
   cargo build --release -v 2>&1 | head -50
   file target/release/workspace
   ```

6. **Investigar Cache**
   ```bash
   cat target/.rustc_info.json | python -m json.tool
   ```

7. **Ver Cross-Compilation Posible**
   ```bash
   rustup target list | grep installed
   rustc --print sysroot | xargs -I {} ls {}/lib/rustlib/
   ```

