✅ 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>
191 lines
6.0 KiB
Bash
191 lines
6.0 KiB
Bash
#!/bin/bash
|
|
|
|
# Script pour appliquer l'automation complète à tous les engines
|
|
# Usage: ./scripts/apply_full_automation.sh
|
|
|
|
set -euo pipefail
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
|
|
|
|
echo "🤖 Applying full automation to all Warfactory engines..."
|
|
|
|
# Liste des engines
|
|
ENGINES=(
|
|
"Designer-Engine"
|
|
"Economy-Engine"
|
|
"Event-Engine"
|
|
"Factory-Engine"
|
|
"Intelligence-Engine"
|
|
"Logistic-Engine"
|
|
"MacroEntity-Engine"
|
|
"Map-Engine"
|
|
"Operation-Engine"
|
|
"War-Engine"
|
|
)
|
|
|
|
# Template pour automation complète
|
|
AUTOMATION_TEMPLATE='# Apply comprehensive Warfactory automation
|
|
warfactory_add_full_automation(ENGINE_NAME)
|
|
|
|
# Engine-specific "No Trust" configuration'
|
|
|
|
for engine in "${ENGINES[@]}"; do
|
|
echo " Processing $engine..."
|
|
|
|
# Nom du target (en minuscules avec tirets)
|
|
target_name=$(echo "$engine" | tr '[:upper:]' '[:lower:]')
|
|
|
|
cmake_file="$PROJECT_ROOT/engines/$engine/CMakeLists.txt"
|
|
|
|
if [[ -f "$cmake_file" ]]; then
|
|
# Remplacer la ligne warfactory_add_defenses par automation complète
|
|
sed -i "s|^warfactory_add_defenses.*|$AUTOMATION_TEMPLATE|" "$cmake_file"
|
|
|
|
# Substituer le nom du target
|
|
sed -i "s/ENGINE_NAME/$target_name/g" "$cmake_file"
|
|
|
|
# Créer répertoires de test et benchmark si ils n'existent pas
|
|
engine_dir="$PROJECT_ROOT/engines/$engine"
|
|
|
|
mkdir -p "$engine_dir/tests"
|
|
mkdir -p "$engine_dir/benchmarks"
|
|
|
|
# Créer exemple de test si pas existant
|
|
test_file="$engine_dir/tests/test_$target_name.cpp"
|
|
if [[ ! -f "$test_file" ]]; then
|
|
cat > "$test_file" << 'EOF'
|
|
#include <catch2/catch_test_macros.hpp>
|
|
#include <warfactory/contracts.hpp>
|
|
|
|
// Tests unitaires automatiques pour ENGINE_NAME
|
|
// Générés par Warfactory automation
|
|
|
|
TEST_CASE("ENGINE_NAME basic functionality", "[ENGINE_NAME]") {
|
|
SECTION("Engine initialization") {
|
|
// TODO: Test engine creation and initialization
|
|
REQUIRE(true); // Placeholder
|
|
}
|
|
|
|
SECTION("Contract validation") {
|
|
// Test des contracts Warfactory
|
|
WARFACTORY_PROPERTY_FINITE_VALUES(42.0);
|
|
REQUIRE(std::isfinite(42.0));
|
|
}
|
|
|
|
SECTION("Error handling") {
|
|
// Test fail-fast patterns
|
|
REQUIRE_NOTHROW(WARFACTORY_REQUIRE(true));
|
|
}
|
|
}
|
|
|
|
TEST_CASE("ENGINE_NAME integration tests", "[ENGINE_NAME][integration]") {
|
|
SECTION("Inter-engine communication") {
|
|
// TODO: Test communication with other engines
|
|
REQUIRE(true); // Placeholder
|
|
}
|
|
|
|
SECTION("Performance requirements") {
|
|
// TODO: Test performance requirements
|
|
REQUIRE(true); // Placeholder
|
|
}
|
|
}
|
|
|
|
TEST_CASE("ENGINE_NAME property-based tests", "[ENGINE_NAME][property]") {
|
|
SECTION("Conservation properties") {
|
|
// Test des propriétés mathématiques
|
|
double input = 100.0;
|
|
double output = input * 0.9; // 10% loss exemple
|
|
|
|
WARFACTORY_PROPERTY_FINITE_VALUES(input);
|
|
WARFACTORY_PROPERTY_FINITE_VALUES(output);
|
|
REQUIRE(output <= input); // Output never exceeds input
|
|
}
|
|
}
|
|
EOF
|
|
# Remplacer ENGINE_NAME par le vrai nom
|
|
sed -i "s/ENGINE_NAME/$target_name/g" "$test_file"
|
|
fi
|
|
|
|
# Créer exemple de benchmark si pas existant
|
|
bench_file="$engine_dir/benchmarks/bench_$target_name.cpp"
|
|
if [[ ! -f "$bench_file" ]]; then
|
|
cat > "$bench_file" << 'EOF'
|
|
#include <benchmark/benchmark.h>
|
|
#include <warfactory/contracts.hpp>
|
|
|
|
// Benchmarks automatiques pour ENGINE_NAME
|
|
// Générés par Warfactory automation
|
|
|
|
static void BM_ENGINE_NAME_BasicOperation(benchmark::State& state) {
|
|
for (auto _ : state) {
|
|
// TODO: Benchmark core operation
|
|
WARFACTORY_PROPERTY_FINITE_VALUES(42.0);
|
|
benchmark::DoNotOptimize(42.0);
|
|
}
|
|
state.SetComplexityN(state.range(0));
|
|
}
|
|
|
|
BENCHMARK(BM_ENGINE_NAME_BasicOperation)
|
|
->Range(8, 8<<10)
|
|
->Complexity(benchmark::oN);
|
|
|
|
static void BM_ENGINE_NAME_MemoryAllocation(benchmark::State& state) {
|
|
for (auto _ : state) {
|
|
// TODO: Benchmark memory operations
|
|
std::vector<double> data(state.range(0));
|
|
benchmark::DoNotOptimize(data);
|
|
}
|
|
state.SetBytesProcessed(int64_t(state.iterations()) *
|
|
int64_t(state.range(0)) * sizeof(double));
|
|
}
|
|
|
|
BENCHMARK(BM_ENGINE_NAME_MemoryAllocation)
|
|
->Range(1<<10, 1<<18)
|
|
->Unit(benchmark::kMillisecond);
|
|
|
|
BENCHMARK_MAIN();
|
|
EOF
|
|
# Remplacer ENGINE_NAME par le vrai nom
|
|
sed -i "s/ENGINE_NAME/$target_name/g" "$bench_file"
|
|
fi
|
|
|
|
echo " ✓ $engine updated with full automation"
|
|
else
|
|
echo " ⚠️ $cmake_file not found"
|
|
fi
|
|
done
|
|
|
|
echo ""
|
|
echo "🤖 Full automation applied to all engines!"
|
|
echo ""
|
|
echo "📋 What was configured:"
|
|
echo " ✓ FetchContent dependency management (Redis++, JSON, spdlog, Catch2)"
|
|
echo " ✓ CTest integration with per-engine test suites"
|
|
echo " ✓ Doxygen documentation generation"
|
|
echo " ✓ Engine export/import system for inter-engine dependencies"
|
|
echo " ✓ Multiple build configurations (Debug, Release, Testing, Profiling)"
|
|
echo " ✓ Precompiled headers for faster compilation"
|
|
echo " ✓ CPack packaging (DEB, RPM, NSIS, etc.)"
|
|
echo " ✓ Automation targets for Claude Code workflow"
|
|
echo " ✓ Test files and benchmark templates generated"
|
|
echo ""
|
|
echo "🚀 Usage examples:"
|
|
echo " mkdir build && cd build"
|
|
echo ""
|
|
echo " # Full automation build:"
|
|
echo " cmake -DCMAKE_BUILD_TYPE=Debug -DENABLE_ADVANCED_TOOLS=ON -DENABLE_BENCHMARKING=ON .."
|
|
echo " make claude-workflow"
|
|
echo ""
|
|
echo " # Testing build:"
|
|
echo " cmake -DCMAKE_BUILD_TYPE=Testing .."
|
|
echo " make test-all-engines"
|
|
echo ""
|
|
echo " # Documentation:"
|
|
echo " make docs-all"
|
|
echo ""
|
|
echo " # Packaging:"
|
|
echo " make package-all"
|
|
echo ""
|
|
echo " # CI/CD simulation:"
|
|
echo " make ci-simulation" |