warfactoryracine/scripts/setup_advanced_tools.sh
StillHammer 5bdd072117 Complete 10-engine architecture with CMake build system
 All 10 engines now build successfully:
- Designer, Economy, Event, Factory, Intelligence
- Logistic, MacroEntity, Map, Operation, War

🚀 Features implemented:
- FAST_BUILD vs FULL_BUILD presets for efficient development
- Comprehensive defensive programming (sanitizers, contracts)
- 16 C++ libraries integrated via FetchContent
- GCC-compatible configuration with stack protection
- Unified CMake system across all engines

🛠️ Build commands:
- Fast: cmake -DFAST_BUILD=ON .. && make claude-workflow-fast
- Full: cmake .. && make (all sanitizers + validation)
- Single engine: make economy-engine

🔧 Development workflow optimized for daily iteration.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-19 14:19:25 +08:00

261 lines
8.2 KiB
Bash

#!/bin/bash
# Script d'installation pour tous les outils avancés Warfactory
# Installe fuzzing, formal verification, concurrency analysis, etc.
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
echo "🔧 Setting up Warfactory Advanced Tools..."
echo ""
# Detect OS
if [[ "$OSTYPE" == "linux-gnu"* ]]; then
OS="linux"
DISTRO=$(lsb_release -si 2>/dev/null || echo "Unknown")
elif [[ "$OSTYPE" == "darwin"* ]]; then
OS="macos"
else
echo "❌ Unsupported OS: $OSTYPE"
exit 1
fi
echo "🖥️ Detected OS: $OS"
echo ""
# =============================================================================
# FUZZING TOOLS
# =============================================================================
echo "🔍 Installing Fuzzing Tools..."
# AFL++
if ! command -v afl-fuzz &> /dev/null; then
echo " Installing AFL++..."
if [[ "$OS" == "linux" ]]; then
if [[ "$DISTRO" == "Ubuntu" ]] || [[ "$DISTRO" == "Debian" ]]; then
sudo apt-get update
sudo apt-get install -y afl++
elif [[ "$DISTRO" == "Fedora" ]] || [[ "$DISTRO" == "CentOS" ]]; then
sudo dnf install -y afl
else
# Build from source
git clone https://github.com/AFLplusplus/AFLplusplus.git /tmp/aflplusplus
cd /tmp/aflplusplus
make all
sudo make install
fi
elif [[ "$OS" == "macos" ]]; then
brew install afl++
fi
echo " ✓ AFL++ installed"
else
echo " ✓ AFL++ already installed"
fi
# honggfuzz
if ! command -v honggfuzz &> /dev/null; then
echo " Installing honggfuzz..."
if [[ "$OS" == "linux" ]]; then
if [[ "$DISTRO" == "Ubuntu" ]] || [[ "$DISTRO" == "Debian" ]]; then
sudo apt-get install -y honggfuzz
else
# Build from source
git clone https://github.com/google/honggfuzz.git /tmp/honggfuzz
cd /tmp/honggfuzz
make
sudo make install
fi
elif [[ "$OS" == "macos" ]]; then
brew install honggfuzz
fi
echo " ✓ honggfuzz installed"
else
echo " ✓ honggfuzz already installed"
fi
# =============================================================================
# FORMAL VERIFICATION TOOLS
# =============================================================================
echo ""
echo "🔬 Installing Formal Verification Tools..."
# CBMC
if ! command -v cbmc &> /dev/null; then
echo " Installing CBMC..."
if [[ "$OS" == "linux" ]]; then
if [[ "$DISTRO" == "Ubuntu" ]] || [[ "$DISTRO" == "Debian" ]]; then
sudo apt-get install -y cbmc
else
# Download binary release
CBMC_VERSION="5.95.1"
wget "https://github.com/diffblue/cbmc/releases/download/cbmc-${CBMC_VERSION}/cbmc-${CBMC_VERSION}-linux-64.tgz" -O /tmp/cbmc.tgz
cd /tmp
tar -xzf cbmc.tgz
sudo cp cbmc-*/bin/* /usr/local/bin/
fi
elif [[ "$OS" == "macos" ]]; then
brew install cbmc
fi
echo " ✓ CBMC installed"
else
echo " ✓ CBMC already installed"
fi
# KLEE (plus complexe, nécessite LLVM)
if ! command -v klee &> /dev/null; then
echo " Installing KLEE..."
if [[ "$OS" == "linux" ]]; then
# KLEE is complex to build, use Docker image instead
echo " 📦 KLEE will use Docker image (recommended)"
echo " Run: docker pull klee/klee"
echo " Usage: docker run --rm -v \$(pwd):/tmp klee/klee klee /tmp/your_file.bc"
elif [[ "$OS" == "macos" ]]; then
echo " 📦 KLEE installation on macOS requires manual setup"
echo " See: https://klee.github.io/build-llvm9/"
fi
else
echo " ✓ KLEE already installed"
fi
# =============================================================================
# STATIC ANALYSIS TOOLS
# =============================================================================
echo ""
echo "🔍 Installing Static Analysis Tools..."
# Cppcheck
if ! command -v cppcheck &> /dev/null; then
echo " Installing Cppcheck..."
if [[ "$OS" == "linux" ]]; then
if [[ "$DISTRO" == "Ubuntu" ]] || [[ "$DISTRO" == "Debian" ]]; then
sudo apt-get install -y cppcheck
elif [[ "$DISTRO" == "Fedora" ]] || [[ "$DISTRO" == "CentOS" ]]; then
sudo dnf install -y cppcheck
fi
elif [[ "$OS" == "macos" ]]; then
brew install cppcheck
fi
echo " ✓ Cppcheck installed"
else
echo " ✓ Cppcheck already installed"
fi
# ABI compliance checker
if ! command -v abi-compliance-checker &> /dev/null; then
echo " Installing ABI Compliance Checker..."
if [[ "$OS" == "linux" ]]; then
if [[ "$DISTRO" == "Ubuntu" ]] || [[ "$DISTRO" == "Debian" ]]; then
sudo apt-get install -y abi-compliance-checker
else
# Install from source
git clone https://github.com/lvc/abi-compliance-checker.git /tmp/abi-checker
cd /tmp/abi-checker
sudo make install prefix=/usr/local
fi
elif [[ "$OS" == "macos" ]]; then
# Build from source
git clone https://github.com/lvc/abi-compliance-checker.git /tmp/abi-checker
cd /tmp/abi-checker
sudo make install prefix=/usr/local
fi
echo " ✓ ABI Compliance Checker installed"
else
echo " ✓ ABI Compliance Checker already installed"
fi
# =============================================================================
# CONCURRENCY ANALYSIS TOOLS
# =============================================================================
echo ""
echo "🧵 Installing Concurrency Analysis Tools..."
# Valgrind
if ! command -v valgrind &> /dev/null; then
echo " Installing Valgrind..."
if [[ "$OS" == "linux" ]]; then
if [[ "$DISTRO" == "Ubuntu" ]] || [[ "$DISTRO" == "Debian" ]]; then
sudo apt-get install -y valgrind
elif [[ "$DISTRO" == "Fedora" ]] || [[ "$DISTRO" == "CentOS" ]]; then
sudo dnf install -y valgrind
fi
elif [[ "$OS" == "macos" ]]; then
brew install --HEAD valgrind
fi
echo " ✓ Valgrind installed"
else
echo " ✓ Valgrind already installed"
fi
# =============================================================================
# GUIDELINES SUPPORT LIBRARY
# =============================================================================
echo ""
echo "📋 Setting up Guidelines Support Library..."
GSL_DIR="$PROJECT_ROOT/third_party/gsl"
if [[ ! -d "$GSL_DIR" ]]; then
echo " Cloning Microsoft GSL..."
git clone https://github.com/microsoft/GSL.git "$GSL_DIR"
echo " ✓ GSL cloned to third_party/gsl"
else
echo " ✓ GSL already available"
fi
# =============================================================================
# VERIFICATION
# =============================================================================
echo ""
echo "✅ Verifying installations..."
TOOLS=(
"afl-fuzz:AFL++"
"honggfuzz:honggfuzz"
"cbmc:CBMC"
"cppcheck:Cppcheck"
"valgrind:Valgrind"
"abi-compliance-checker:ABI Checker"
"clang:Clang (for libFuzzer)"
"llvm-profdata:LLVM tools"
)
for tool_info in "${TOOLS[@]}"; do
tool="${tool_info%:*}"
name="${tool_info#*:}"
if command -v "$tool" &> /dev/null; then
echo "$name: $(which $tool)"
else
echo "$name: not found"
fi
done
echo ""
echo "🎯 Setup complete!"
echo ""
echo "📖 Usage examples:"
echo " mkdir build && cd build"
echo " cmake -DCMAKE_BUILD_TYPE=Debug -DENABLE_ADVANCED_TOOLS=ON .."
echo " make economy-engine"
echo ""
echo "🔍 Run fuzzing:"
echo " make economy-engine_fuzz_all"
echo ""
echo "🔬 Run formal verification:"
echo " make economy-engine_cbmc"
echo ""
echo "🧵 Run concurrency analysis:"
echo " make economy-engine_helgrind"
echo ""
echo "📊 Generate coverage report:"
echo " make economy-engine_coverage_run"
echo ""
echo "🔗 Check ABI compatibility:"
echo " make economy-engine_abi_check"