#!/usr/bin/env bash # ============================================================================ # WARLOCK'S STAVE PRODUCTION COMPILATION PIPELINE (v7.0) # ============================================================================ set -euo pipefail log_step() { echo -e "\n [BUILD] $1"; } log_step "Detecting host environment..." if [ -f /etc/arch-release ]; then echo " Profile: Arch Linux" elif [ -f /etc/debian_version ]; then echo " Profile: Debian/Ubuntu" else echo " Profile: Unknown (proceeding anyway)" fi log_step "Validating dependency tooling..." cargo check log_step "Compiling core library (release)..." cargo build --release log_step "Compiling embedded eBPF bytecode..." mkdir -p ebpf_bin if command -v clang &> /dev/null; then cat << 'EOF' > ebpf_bin/stave_probe.c #include #include SEC("tracepoint/syscalls/sys_enter_connect") int trace_sys_connect(void *ctx) { return 0; } char _license[] SEC("license") = "GPL"; EOF clang -O2 -target bpf -c ebpf_bin/stave_probe.c -o ebpf_bin/stave_probe.o echo " eBPF binary assembled: ebpf_bin/stave_probe.o" else echo " Warning: clang missing. Creating stub eBPF object..." touch ebpf_bin/stave_probe.o fi if command -v x86_64-w64-mingw32-g++ &> /dev/null; then log_step "Cross-compiling Wine plugin bridge..." x86_64-w64-mingw32-g++ -shared -static -O3 \ -o bridges/warlock_bridge.dp64 bridges/stave_stub.cpp -lkernel32 echo " Plugin output: bridges/warlock_bridge.dp64" else echo " Info: MinGW not found. Skipping Wine plugin build." fi log_step "Build complete. Warlock's Stave v7.0 is ready." # --------------------------------------------------------------------------- # Optional post-build steps (do not run automatically) # --------------------------------------------------------------------------- TARGET_LIB="./target/release/libstave_core.so" if [ -f "$TARGET_LIB" ]; then echo "" echo " Optional: To enable kernel-level eBPF tracing, run:" echo " sudo setcap cap_net_admin,cap_perfmon+ep $TARGET_LIB" echo "" echo " This grants the library permission to attach eBPF probe programs." echo " It is NOT required for FFI, JNI, IPC, or UI-only usage." fi