Skip to content

🏭 BUILD INFRASTRUCTURE - GUÍA MAESTRA

Sistema de ConstrucciΓ³n para AudioLab

"Un build system transforma potencial (cΓ³digo fuente) en realidad (software ejecutable)"


πŸ“– TABLA DE CONTENIDOS

  1. VisiΓ³n General
  2. Quick Start
  3. Rutas de Aprendizaje
  4. Estructura de DocumentaciΓ³n
  5. Scripts de Build
  6. Troubleshooting
  7. Recursos

🎯 VISIΓ“N GENERAL

Este directorio contiene la infraestructura completa para construir proyectos AudioLab. No es solo "cΓ³mo compilar"β€”es un sistema completo de transformaciΓ³n de cΓ³digo a software distribuible.

πŸŽ“ ΒΏQuΓ© AprenderΓ‘s AquΓ­?

πŸ“š NIVEL 1: Fundamentos
   └─ ΒΏQuΓ© es un build? ΒΏPor quΓ© es complejo?

πŸ“š NIVEL 2: Herramientas
   └─ CMake, compiladores, linkers, toolchains

πŸ“š NIVEL 3: OptimizaciΓ³n
   └─ LTO, PGO, SIMD, compilation speeds

πŸ“š NIVEL 4: Cross-Platform
   └─ Windows, macOS, Linux builds unificados

πŸ“š NIVEL 5: Troubleshooting
   └─ Diagnosticar y resolver errores de build

πŸ—οΈ Pipeline de Build

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                                                         β”‚
β”‚  πŸ“ CΓ³digo C++         β†’  πŸ”„ TransformaciΓ³n            β”‚
β”‚     (.cpp, .h)              (build system)             β”‚
β”‚                                 ↓                       β”‚
β”‚                          1️⃣ Preprocessing               β”‚
β”‚                          2️⃣ Compilation                 β”‚
β”‚                          3️⃣ Linking                     β”‚
β”‚                          4️⃣ Post-processing             β”‚
β”‚                                 ↓                       β”‚
β”‚  🎯 Software           ←  πŸ“¦ Empaquetado               β”‚
β”‚     (.exe, .vst3)          (deployment)                β”‚
β”‚                                                         β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

πŸš€ QUICK START

Para Usuarios (Solo quiero compilar)

# 1. Clonar el repositorio
git clone https://github.com/audiolab/audio-lab.git
cd audio-lab

# 2. Build rΓ‘pido
./2 - FOUNDATION/03_INFRA/03_02_build_infrastructure/03_02_03_build_scripts/build.sh
# Windows: .\build.ps1

# 3. Ejecutar
./build/Debug/bin/your-app

ΒΏProblemas? β†’ Ver QUICK_START.md

Para Desarrolladores (Quiero entender)

# 1. Leer filosofΓ­a (30 min)
BUILD_SYSTEMS_PHILOSOPHY.md

# 2. Tutorial prΓ‘ctico (1 hora)
QUICK_START.md

# 3. Cheat sheet de comandos
CMAKE_CHEAT_SHEET.md

# 4. Configurar tu entorno
03_02_01_toolchains/TOOLCHAIN_PHILOSOPHY.md

πŸ›€οΈ RUTAS DE APRENDIZAJE

🌱 RUTA 1: PRINCIPIANTE (Nunca usé CMake)

Objetivo: Poder compilar proyectos existentes

Secuencia (4-6 horas):

  1. QUICK_START.md (1 hora)
  2. 🎯 Tu primer build exitoso
  3. Entender quΓ© hace cada paso
  4. Resolver problemas bΓ‘sicos

  5. BUILD_SYSTEMS_PHILOSOPHY.md - CapΓ­tulos 1-2 (1 hora)

  6. πŸ“– Lee: La naturaleza de la transformaciΓ³n
  7. πŸ“– Lee: ΒΏPor quΓ© CMake?
  8. 🎯 Objetivo: Entender QUΓ‰ es un build

  9. CMAKE_CHEAT_SHEET.md (30 min)

  10. πŸ“– Bookmarkea este archivo
  11. 🎯 Objetivo: Comandos esenciales a mano

  12. Scripts de Build (30 min)

  13. πŸ“– Lee: 03_02_03_build_scripts/README.md
  14. 🎯 Objetivo: Usar scripts sin pensar en CMake

  15. Troubleshooting BΓ‘sico (1 hora)

  16. πŸ“– Lee: 03_02_05_troubleshooting/build_issues.md
  17. 🎯 Objetivo: Resolver errores comunes

βœ… Al Completar: Puedes compilar AudioLab en Debug/Release, resolver errores bΓ‘sicos.


🌿 RUTA 2: INTERMEDIO (Sé usar CMake bÑsico)

Objetivo: Configurar builds complejos, cross-platform

Secuencia (8-10 horas):

  1. BUILD_SYSTEMS_PHILOSOPHY.md - Completo (3 horas)
  2. πŸ“– Todos los capΓ­tulos
  3. 🎯 Objetivo: Modelo mental completo del pipeline

  4. CMAKE_ARCHITECTURE_DEEP_DIVE.md (2 horas)

  5. πŸ“– Internals de CMake
  6. 🎯 Objetivo: Entender cómo funciona CMake

  7. TOOLCHAIN_PHILOSOPHY.md (2 horas)

  8. πŸ“– Cross-compilation
  9. πŸ“– Toolchains especΓ­ficos
  10. 🎯 Objetivo: Compilar para otras plataformas

  11. MΓ³dulos CMake (1 hora)

  12. πŸ“– Explora: 03_02_00_build_system/*.cmake
  13. 🎯 Objetivo: Reutilizar módulos en tus proyectos

  14. DEPENDENCY_PHILOSOPHY.md (2 horas)

  15. πŸ“– FetchContent, find_package, vcpkg
  16. 🎯 Objetivo: Gestionar dependencias

βœ… Al Completar: Puedes configurar builds complejos, cross-compile, gestionar dependencias.


🌲 RUTA 3: AVANZADO (Quiero optimizar builds)

Objetivo: Builds rΓ‘pidos, optimizados, CI/CD

Secuencia (10-15 horas):

  1. Optimization Modules (3 horas)
  2. πŸ“– advanced_optimization.cmake - LTO, PGO
  3. πŸ“– simd_detection.cmake - Vectorization
  4. πŸ“– pch_setup.cmake - Precompiled headers
  5. 🎯 Objetivo: Builds 2-5x mÑs rÑpidos

  6. Compiler Deep Dive (2 horas)

  7. πŸ“– compiler_flags.cmake
  8. πŸ“– warning_flags.cmake
  9. 🎯 Objetivo: Fine-tuning de compilación

  10. Sanitizers & Debugging (2 horas)

  11. πŸ“– sanitizers.cmake
  12. 🎯 Objetivo: Detectar bugs en runtime

  13. Advanced Troubleshooting (3 horas)

  14. πŸ“– BUILD_TROUBLESHOOTING_PHILOSOPHY.md - Completo
  15. πŸ“– linker_errors.md
  16. 🎯 Objetivo: Diagnosticar problemas complejos

  17. CI/CD Integration (prΓ‘ctica)

  18. 🎯 Objetivo: Automatizar builds en GitHub Actions

βœ… Al Completar: Puedes diseΓ±ar build systems complejos, optimizar, troubleshoot anything.


🚨 RUTA DE EMERGENCIA: "‘El Build Falló!"

Si estΓ‘s bloqueado:

  1. STOP - No intentes compilar repetidamente sin entender
  2. Identifica la fase donde falla:
    ❌ CMake configuration error   β†’ Configuration time
    ❌ Compiler error (.cpp)        β†’ Compilation time
    ❌ Undefined reference          β†’ Link time
    ❌ Code signing failed          β†’ Post-build
    
  3. Lee el playbook correspondiente:
  4. Configuration β†’ build_issues.md - SecciΓ³n 1
  5. Compilation β†’ BUILD_TROUBLESHOOTING_PHILOSOPHY.md - PHASE 3
  6. Linking β†’ linker_errors.md
  7. Si no resuelves: Pide ayuda en #build-help Slack

πŸ“š ESTRUCTURA DE DOCUMENTACIΓ“N

03_02_build_infrastructure/
β”‚
β”œβ”€β”€ πŸ“„ README.md (este archivo) ⭐
β”œβ”€β”€ πŸ“„ QUICK_START.md ⭐ (tutorial paso a paso)
β”œβ”€β”€ πŸ“„ CMAKE_CHEAT_SHEET.md ⭐ (quick reference)
β”œβ”€β”€ πŸ“„ BUILD_SYSTEMS_PHILOSOPHY.md (fundamentos conceptuales)
β”‚
β”œβ”€β”€ πŸ“ 03_02_00_build_system/
β”‚   β”œβ”€β”€ CMAKE_ARCHITECTURE_DEEP_DIVE.md (internals de CMake)
β”‚   β”œβ”€β”€ advanced_optimization.cmake (LTO, PGO)
β”‚   β”œβ”€β”€ compiler_flags.cmake (flags por compilador)
β”‚   β”œβ”€β”€ lto_config.cmake (Link Time Optimization)
β”‚   β”œβ”€β”€ pch_setup.cmake (Precompiled Headers)
β”‚   β”œβ”€β”€ sanitizers.cmake (ASan, UBSan, TSan)
β”‚   β”œβ”€β”€ simd_detection.cmake (SSE, AVX)
β”‚   └── warning_flags.cmake (warning levels)
β”‚
β”œβ”€β”€ πŸ“ 03_02_00_cmake_foundation/
β”‚   β”œβ”€β”€ AudioLabConfig.cmake (project config)
β”‚   β”œβ”€β”€ AudioLabTargets.cmake (export targets)
β”‚   └── AudioLabUtilities.cmake (helper functions)
β”‚
β”œβ”€β”€ πŸ“ 03_02_01_toolchains/
β”‚   β”œβ”€β”€ TOOLCHAIN_PHILOSOPHY.md (cross-compilation guide)
β”‚   β”œβ”€β”€ windows_msvc.cmake (Windows MSVC)
β”‚   β”œβ”€β”€ linux_gcc.cmake (Linux GCC)
β”‚   β”œβ”€β”€ linux_clang.cmake (Linux Clang)
β”‚   β”œβ”€β”€ macos_universal.cmake (macOS Universal)
β”‚   └── cross_mingw.cmake (Linux β†’ Windows)
β”‚
β”œβ”€β”€ πŸ“ 03_02_02_build_presets/
β”‚   β”œβ”€β”€ README.md (cΓ³mo usar presets)
β”‚   └── CMakePresets.json (presets examples) ⭐
β”‚
β”œβ”€β”€ πŸ“ 03_02_02_dependencies/
β”‚   β”œβ”€β”€ DEPENDENCY_PHILOSOPHY.md (gestiΓ³n de dependencias)
β”‚   β”œβ”€β”€ FetchContent.cmake (fetch external libs)
β”‚   └── FindModules/
β”‚       β”œβ”€β”€ FindIPP.cmake (Intel Performance Primitives)
β”‚       └── FindJUCE.cmake (JUCE framework)
β”‚
β”œβ”€β”€ πŸ“ 03_02_03_build_scripts/
β”‚   β”œβ”€β”€ README.md (guΓ­a de scripts)
β”‚   β”œβ”€β”€ build.sh (Unix/macOS build script) βœ…
β”‚   β”œβ”€β”€ build.ps1 (Windows build script) βœ…
β”‚   β”œβ”€β”€ clean.sh (cleanup script)
β”‚   └── clean.ps1 (Windows cleanup)
β”‚
└── πŸ“ 03_02_05_troubleshooting/
    β”œβ”€β”€ BUILD_TROUBLESHOOTING_PHILOSOPHY.md (troubleshooting completo)
    β”œβ”€β”€ build_issues.md (problemas comunes)
    └── linker_errors.md (errores de linkeo)

⭐ = Documentos esenciales, leer primero


πŸ”¨ SCRIPTS DE BUILD

Scripts Principales

# Unix/macOS
./03_02_03_build_scripts/build.sh [opciones]

# Windows
.\03_02_03_build_scripts\build.ps1 [opciones]

Opciones Comunes

# Configuraciones
--config Debug              # Debug build (default)
--config Release            # Release build (optimizado)
--config RelWithDebInfo     # Release con debug info

# Operaciones
--clean                     # Limpiar antes de compilar
--verbose                   # Output detallado

# Performance
--parallel 8                # 8 jobs paralelos (default: auto)

# Presets
--preset developer          # Usar CMake preset especΓ­fico
--preset ci-linux           # Para CI/CD

Ejemplos PrΓ‘cticos

# Build rΓ‘pido de debug
./build.sh

# Release optimizado con clean
./build.sh --config Release --clean

# Build paralelo mΓ‘ximo
./build.sh --parallel 16

# Usar preset especΓ­fico
./build.sh --preset developer

# Build verboso para debugging
./build.sh --verbose

Scripts de Limpieza

# Limpiar build directory
./03_02_03_build_scripts/clean.sh

# Limpiar TODO (builds + caches)
./03_02_03_build_scripts/clean.sh --all

Ver: 03_02_03_build_scripts/README.md


πŸ”§ CONFIGURACIΓ“N RÁPIDA

Primer Build (5 minutos)

# 1. Verificar requisitos
cmake --version          # MΓ­nimo 3.20
g++ --version            # O clang++, msvc

# 2. Clonar
git clone https://github.com/audiolab/audio-lab.git
cd audio-lab

# 3. Build
./2\ -\ FOUNDATION/03_INFRA/03_02_build_infrastructure/03_02_03_build_scripts/build.sh

# 4. ‘Éxito!
# Binarios en: build/Debug/bin/

ConfiguraciΓ³n Avanzada

# Usar toolchain especΓ­fico
cmake -S . -B build \
      -DCMAKE_TOOLCHAIN_FILE=03_02_01_toolchains/linux_clang.cmake

# Habilitar optimizaciones
cmake -S . -B build \
      -DCMAKE_BUILD_TYPE=Release \
      -DENABLE_LTO=ON \
      -DENABLE_SIMD=ON

# Usar preset
cmake --preset developer
cmake --build --preset developer

Ver: CMAKE_CHEAT_SHEET.md


🚨 TROUBLESHOOTING

DiagnΓ³stico RΓ‘pido

ΒΏDΓ³nde fallΓ³ el build?

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ "CMake Error: Could not find..."   β”‚ β†’ Configuration Error
β”‚                                     β”‚   Ver: build_issues.md #1
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ "error: 'vector' is not defined"   β”‚ β†’ Compilation Error
β”‚                                     β”‚   Ver: BUILD_TROUBLESHOOTING #3
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ "undefined reference to `foo'"     β”‚ β†’ Linker Error
β”‚                                     β”‚   Ver: linker_errors.md
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ "Code signing failed"               β”‚ β†’ Post-build Error
β”‚                                     β”‚   Ver: BUILD_TROUBLESHOOTING #5
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Errores Comunes (Top 5)

  1. CMake no encuentra dependencia

    # SoluciΓ³n: Especificar CMAKE_PREFIX_PATH
    cmake -DCMAKE_PREFIX_PATH=/path/to/libs
    

  2. Compilador no encontrado

    # SoluciΓ³n: Instalar o especificar
    cmake -DCMAKE_CXX_COMPILER=/usr/bin/g++
    

  3. Undefined reference (linker error)

    # Causa: Falta linkear library
    # SoluciΓ³n: Agregar target_link_libraries() en CMakeLists.txt
    

  4. Permission denied (Unix)

    chmod +x build.sh
    

  5. Out of memory durante link

    # SoluciΓ³n: Reducir parallel jobs
    ./build.sh --parallel 2
    

Ver documentaciΓ³n completa: BUILD_TROUBLESHOOTING_PHILOSOPHY.md


πŸ“Š CASOS DE USO

Caso 1: Developer Local Build

# Debug build para desarrollo diario
./build.sh --config Debug

# Con sanitizers para detectar bugs
cmake -S . -B build-debug \
      -DCMAKE_BUILD_TYPE=Debug \
      -DENABLE_ASAN=ON \
      -DENABLE_UBSAN=ON

Caso 2: Release Build para DistribuciΓ³n

# Release optimizado
./build.sh --config Release --clean

# Con todas las optimizaciones
cmake -S . -B build-release \
      -DCMAKE_BUILD_TYPE=Release \
      -DENABLE_LTO=ON \
      -DENABLE_SIMD=ON \
      -DENABLE_STRIP=ON

Caso 3: Cross-Compilation

# Linux β†’ Windows (MinGW)
cmake -S . -B build-windows \
      -DCMAKE_TOOLCHAIN_FILE=03_02_01_toolchains/cross_mingw.cmake

# macOS Universal (Intel + Apple Silicon)
cmake -S . -B build-universal \
      -DCMAKE_TOOLCHAIN_FILE=03_02_01_toolchains/macos_universal.cmake

Caso 4: CI/CD Build

# Build no-interactivo para CI
./build.sh --preset ci-linux --parallel 4

# O directamente CMake
cmake --preset ci-linux
cmake --build --preset ci-linux --target all test

πŸ“– RECURSOS ADICIONALES

AudioLab Interno

Externos Recomendados

Herramientas

  • CMake - Build system generator
  • Ninja - Fast build tool (recomendado)
  • ccache - Compiler cache (acelera rebuilds)
  • sccache - Distributed compiler cache

πŸŽ“ FILOSOFÍA DE AUDIOLAB BUILD

Principios

  1. Reproducibilidad - Mismo cΓ³digo β†’ mismo resultado
  2. Cross-platform - Write once, build anywhere
  3. Performance - Fast builds, fast binaries
  4. Debuggability - Errores claros, fΓ‘cil de troubleshoot
  5. Maintainability - Build system simple y comprensible

Build Philosophy

╔═══════════════════════════════════════════════════════════╗
β•‘                                                           β•‘
β•‘  "El build system es infraestructura invisible que        β•‘
β•‘   permite a developers enfocarse en crear, no compilar."  β•‘
β•‘                                                           β•‘
β•‘  Un buen build system:                                    β•‘
β•‘  β€’ Funciona en primer intento                             β•‘
β•‘  β€’ Falla rΓ‘pido con mensajes claros                       β•‘
β•‘  β€’ Se optimiza solo                                       β•‘
β•‘  β€’ No requiere configuraciΓ³n manual                       β•‘
β•‘                                                           β•‘
β•‘  - AudioLab Build Team                                    β•‘
β•‘                                                           β•‘
β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•

🀝 CONTRIBUCIONES

Mejorar Build System

Si encuentras: - ❌ Build que falla en tu plataforma - πŸ’‘ OptimizaciΓ³n que falta - πŸ“ DocumentaciΓ³n unclear - πŸ› Bug en scripts

Por favor: 1. Crea issue con detalles 2. O haz PR con fix 3. Documenta en troubleshooting si es nuevo error

Maintainer

Build Infrastructure Team Slack: #build-help Email: build-team@audiolab.com


πŸ“ MΓ‰TRICAS DE Γ‰XITO

SabrΓ‘s que dominas el build system cuando:

  • Puedes compilar AudioLab en cualquier plataforma
  • Entiendes cada paso del pipeline de build
  • Puedes diagnosticar errores de compilation/linking
  • Configuras optimizaciones (LTO, SIMD, PCH)
  • Cross-compilas para otras plataformas
  • Troubleshooteas build issues de otros developers
  • DiseΓ±as CMake configs para nuevos proyectos

Última actualización: 2025-10-09 Versión: 1.0.0


Β‘Bienvenido al sistema de build de AudioLab! πŸš€

"De cΓ³digo fuente a plugins de audio en minutos, no horas."