Bob/Reference/BUILD.md

4.4 KiB

Bob Language - Build Guide

This guide describes how to build the Bob language interpreter using CMake + Ninja across different platforms.

🚀 Quick Start

Prerequisites

  • CMake 3.20 or later
  • Ninja build system
  • C++17 compatible compiler

Platform-Specific Setup

🍎 macOS

# Install via Homebrew
brew install cmake ninja

# Or via MacPorts
sudo port install cmake ninja

🐧 Linux

Ubuntu/Debian:

sudo apt update
sudo apt install cmake ninja-build build-essential

RHEL/CentOS/Fedora:

# RHEL/CentOS
sudo yum install cmake ninja-build gcc-c++

# Fedora
sudo dnf install cmake ninja-build gcc-c++

Arch Linux:

sudo pacman -S cmake ninja gcc

🪟 Windows

Option 1: Visual Studio (Recommended)

  • Install Visual Studio 2019+ with C++ workload
  • Install CMake via Visual Studio Installer
  • Install Ninja: winget install Ninja-build.Ninja

Option 2: MSYS2/MinGW

# In MSYS2 terminal
pacman -S mingw-w64-x86_64-cmake mingw-w64-x86_64-ninja mingw-w64-x86_64-gcc

Option 3: Chocolatey

# In Administrator PowerShell
choco install cmake ninja visualstudio2022buildtools

🔨 Build Commands

Standard Build

Release Build (Optimized):

cmake -G Ninja -B build -DCMAKE_BUILD_TYPE=Release
ninja -C build

Debug Build (Development):

cmake -G Ninja -B build -DCMAKE_BUILD_TYPE=Debug
ninja -C build

Platform-Specific Examples

macOS/Linux

# Configure and build
cmake -G Ninja -B build -DCMAKE_BUILD_TYPE=Release
ninja -C build

# Run interpreter
./build/bin/bob

# Run test suite
./build/bin/bob test_bob_language.bob

# Run with custom script
./build/bin/bob your_script.bob

Windows (PowerShell/CMD)

# Configure and build
cmake -G Ninja -B build -DCMAKE_BUILD_TYPE=Release
ninja -C build

# Run interpreter
.\build\bin\bob.exe

# Run test suite
.\build\bin\bob.exe test_bob_language.bob

# Run with custom script
.\build\bin\bob.exe your_script.bob

Windows (MSYS2/Git Bash)

# Same as macOS/Linux
cmake -G Ninja -B build -DCMAKE_BUILD_TYPE=Release
ninja -C build
./build/bin/bob.exe test_bob_language.bob

🧪 Testing

Automated Testing

All Platforms:

# Build first
ninja -C build

# Run tests via CTest
cd build
ctest --output-on-failure

# Or run tests verbosely
ctest --verbose

Windows PowerShell:

ninja -C build
cd build
ctest --output-on-failure

Manual Testing

Interactive Mode:

# Unix-like systems
./build/bin/bob

# Windows
.\build\bin\bob.exe

Script Execution:

# Unix-like systems  
./build/bin/bob examples/hello.bob

# Windows
.\build\bin\bob.exe examples\hello.bob

Performance

CMake + Ninja provides fast, cross-platform builds with excellent incremental compilation.

🔧 Advanced Configuration

Custom Install Location

Unix-like:

cmake -G Ninja -B build \
  -DCMAKE_BUILD_TYPE=Release \
  -DCMAKE_INSTALL_PREFIX=/opt/bob
ninja -C build install

Windows:

cmake -G Ninja -B build `
  -DCMAKE_BUILD_TYPE=Release `
  -DCMAKE_INSTALL_PREFIX="C:\Program Files\Bob"
ninja -C build install

Compiler Selection

GCC:

cmake -G Ninja -B build \
  -DCMAKE_CXX_COMPILER=g++ \
  -DCMAKE_BUILD_TYPE=Release

Clang:

cmake -G Ninja -B build \
  -DCMAKE_CXX_COMPILER=clang++ \
  -DCMAKE_BUILD_TYPE=Release

MSVC (Windows):

cmake -G Ninja -B build `
  -DCMAKE_CXX_COMPILER=cl `
  -DCMAKE_BUILD_TYPE=Release

🐛 Troubleshooting

Common Issues

CMake not found:

  • macOS: brew install cmake
  • Ubuntu: sudo apt install cmake
  • Windows: Install via Visual Studio or winget

Ninja not found:

  • macOS: brew install ninja
  • Ubuntu: sudo apt install ninja-build
  • Windows: winget install Ninja-build.Ninja

Compiler errors:

  • Ensure C++17 compiler is installed
  • Linux: sudo apt install build-essential
  • Windows: Install Visual Studio Build Tools

Permission denied (Windows):

  • Run PowerShell as Administrator for system-wide installs

Build Cache Issues

Clean build:

# Remove build directory
rm -rf build          # Unix-like
rmdir /s build        # Windows CMD
Remove-Item -Recurse build  # PowerShell

# Reconfigure
cmake -G Ninja -B build -DCMAKE_BUILD_TYPE=Release
ninja -C build