Files
VoxelForge/Standalone/BuildLinux.sh
T
Fr0zkaandClaude Opus 5.5 9898e057fd wip(assembler): rounds L5+L6 -- Linux far-terrain captures and screen-space gate (world unchanged)
Linux offscreen capture (EGL/GLES pbuffer; llvmpipe in the sandbox) and an opt-in screen-space gate
for LOD>=3 (normal distance projected at each LOD's closest display distance, 1 px at 1440p =
0.61 mrad). The gate rejects the S13 octave-drop and stride-2 controls, fault injections, and a
vertical-vs-screen control. Finding: today's far meshes differ from the field by up to 92 px, and
LOD swaps snap mesa rims by tens of px (p50 0 px), a silhouette effect of plain LOD switching. The
octave cutoff was dropped: nothing qualified, and octaves are a small share of far time. Off-path
cost: reviewer interleaved W12 within noise vs L4 (+0.6% median). Hashes = L4.
Largest far lever measured: column work outside noise, 34% of far worker time (duplicate XY across tiles).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01ED33VnqepD4YY6gDAAA832
2026-10-19 21:10:08 +02:00

129 lines
4.5 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
if [[ "${VOXELFORGE_LIMITED_BUILD:-0}" != "1" ]]; then
exec taskset -c 0-11 prlimit --as=6442450944 -- env VOXELFORGE_LIMITED_BUILD=1 "$0" "$@"
fi
SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"
ROOT="$SCRIPT_DIR"
COMPILER="clang++-19"
VARIANT="clang19"
FP_CONTRACT="off"
JOBS=12
while (($#)); do
case "$1" in
--compiler=*) COMPILER="${1#*=}" ;;
--variant=*) VARIANT="${1#*=}" ;;
--fp-contract=*) FP_CONTRACT="${1#*=}" ;;
--jobs=*) JOBS="${1#*=}" ;;
*) printf 'Unknown build option: %s\n' "$1" >&2; exit 2 ;;
esac
shift
done
if [[ ! "$JOBS" =~ ^[0-9]+$ ]] || ((JOBS < 1 || JOBS > 12)); then
printf 'jobs must be from 1 to 12\n' >&2
exit 2
fi
if [[ "$FP_CONTRACT" != "default" && "$FP_CONTRACT" != "off" && "$FP_CONTRACT" != "on" && "$FP_CONTRACT" != "fast" ]]; then
printf 'fp-contract must be default, off, on, or fast\n' >&2
exit 2
fi
command -v "$COMPILER" >/dev/null || { printf 'Compiler not found: %s\n' "$COMPILER" >&2; exit 2; }
command -v ar >/dev/null || { printf 'ar not found\n' >&2; exit 2; }
command -v pkg-config >/dev/null || { printf 'pkg-config not found\n' >&2; exit 2; }
pkg-config --exists egl glesv2 libpng || { printf 'EGL, GLESv2, and libpng development files are required\n' >&2; exit 2; }
BUILD_DIR="$ROOT/Build/linux-$VARIANT"
BIN_DIR="$ROOT/bin/linux"
mkdir -p "$BUILD_DIR/wrappers" "$BUILD_DIR/objects" "$BIN_DIR"
INCLUDES=(
"-I$ROOT/Core/include"
"-I$ROOT/Core/src"
"-I$ROOT/Compat"
"-I$ROOT/Source"
"-I$ROOT/Source/VoxelForge/Public"
"-I$ROOT/Source/VoxelForge/Private"
)
FLAGS=(
-std=c++20 -O2 -mavx2 -mfma -fno-fast-math
-fexceptions -pthread "${INCLUDES[@]}"
)
if [[ "$FP_CONTRACT" != "default" ]]; then
FLAGS+=("-ffp-contract=$FP_CONTRACT")
fi
if [[ "$($COMPILER --version | head -n 1)" == *clang* ]]; then
FLAGS+=(-Wno-c++11-narrowing)
else
FLAGS+=(-Wno-narrowing)
fi
CORE_OBJECTS=()
LEGACY_OBJECTS=()
PIDS=()
wait_oldest() {
local pid="${PIDS[0]}"
wait "$pid"
PIDS=("${PIDS[@]:1}")
}
compile_background() {
local source="$1" output="$2"
"$COMPILER" "${FLAGS[@]}" -c "$source" -o "$output" &
PIDS+=("$!")
if ((${#PIDS[@]} >= JOBS)); then wait_oldest; fi
}
while IFS= read -r source_name || [[ -n "$source_name" ]]; do
source_name="${source_name%%#*}"
source_name="${source_name//[[:space:]]/}"
[[ -z "$source_name" ]] && continue
source_path="$ROOT/$source_name"
[[ -f "$source_path" ]] || { printf 'Missing source from core_sources.txt: %s\n' "$source_name" >&2; exit 2; }
if [[ "$source_name" == "Core/src/VoxelForgeCore.cpp" ]]; then
object="$BUILD_DIR/objects/VoxelForgeCore.o"
compile_background "$source_path" "$object"
CORE_OBJECTS+=("$object")
continue
fi
wrapper_name="vfcore_${source_name//[^A-Za-z0-9]/_}"
wrapper="$BUILD_DIR/wrappers/$wrapper_name.cpp"
cat > "$wrapper" <<WRAPPER
#include "CoreNamespacePreamble.h"
namespace vfcore::detail
{
#include "$source_path"
}
WRAPPER
object="$BUILD_DIR/objects/$wrapper_name.o"
compile_background "$wrapper" "$object"
CORE_OBJECTS+=("$object")
# The same copied compatibility implementations are also needed by the standalone owner
# loader/mesher host. They are compiled globally for that reference layer, as in Build.ps1.
legacy_object="$BUILD_DIR/objects/legacy_${wrapper_name}.o"
compile_background "$source_path" "$legacy_object"
LEGACY_OBJECTS+=("$legacy_object")
done < "$ROOT/Core/core_sources.txt"
headless_object="$BUILD_DIR/objects/StreamBenchmarkHeadless.o"
compile_background "$ROOT/Source/StreamBenchmarkHeadless.cpp" "$headless_object"
LEGACY_OBJECTS+=("$headless_object")
for pid in "${PIDS[@]}"; do wait "$pid"; done
PIDS=()
CORE_LIBRARY="$BUILD_DIR/libVoxelForgeCore.a"
"$(command -v ar)" rcs "$CORE_LIBRARY" "${CORE_OBJECTS[@]}"
OUTPUT="$BIN_DIR/VoxelForgeCoreHeadless-$VARIANT"
"$COMPILER" -pthread "${LEGACY_OBJECTS[@]}" "$CORE_LIBRARY" -o "$OUTPUT"
CAPTURE_OUTPUT="$BIN_DIR/VoxelForgeOffscreenCapture-$VARIANT"
"$COMPILER" -std=c++20 -O2 -fno-fast-math -pthread \
"$ROOT/Source/LinuxOffscreenCapture.cpp" -o "$CAPTURE_OUTPUT" \
$(pkg-config --cflags --libs egl glesv2 libpng)
printf 'Built Core library: %s\nBuilt headless benchmark: %s\n' "$CORE_LIBRARY" "$OUTPUT"
printf 'Built EGL offscreen capture: %s\n' "$CAPTURE_OUTPUT"
printf 'Compiler: %s | variant: %s | fp-contract: %s | jobs: %s\n' "$COMPILER" "$VARIANT" "$FP_CONTRACT" "$JOBS"