warlocks-stave/build.sh

63 lines
2.2 KiB
Bash
Executable File

#!/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 <linux/bpf.h>
#include <bpf/bpf_helpers.h>
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