2025-11-09 11:50:18 +09:00
|
|
|
|
#!/usr/bin/env bash
|
2025-11-09 16:49:34 +09:00
|
|
|
|
# build.sh - Unified build wrapper (Phase 7 + Pool TLS) with discoverable help
|
|
|
|
|
|
#
|
|
|
|
|
|
# Quick use:
|
|
|
|
|
|
# ./build.sh bench_pool_tls_hakmem # Recommended target
|
|
|
|
|
|
# ./build.sh help # Show usage/hints/ENV
|
|
|
|
|
|
# ./build.sh verify bench_pool_tls_hakmem # Check freshness
|
|
|
|
|
|
#
|
|
|
|
|
|
# Notes:
|
|
|
|
|
|
# - Flags are pinned to avoid drift (see below). You can pass extra make flags via
|
|
|
|
|
|
# EXTRA_MAKEFLAGS, e.g. EXTRA_MAKEFLAGS="HAKMEM_DEBUG_VERBOSE=1" ./build.sh <target>
|
|
|
|
|
|
# - Arena ENV (Pool TLS): HAKMEM_POOL_TLS_ARENA_MB_INIT/MAX/GROWTH_LEVELS
|
|
|
|
|
|
# - See also: docs/BUILDING_QUICKSTART.md
|
|
|
|
|
|
|
2025-11-09 11:50:18 +09:00
|
|
|
|
set -euo pipefail
|
|
|
|
|
|
|
|
|
|
|
|
TARGET="${1:-bench_mid_large_mt_hakmem}"
|
|
|
|
|
|
|
2025-11-09 16:49:34 +09:00
|
|
|
|
usage() {
|
|
|
|
|
|
cat <<'USAGE'
|
|
|
|
|
|
=========================================
|
|
|
|
|
|
HAKMEM Build Script (help)
|
|
|
|
|
|
=========================================
|
|
|
|
|
|
Usage:
|
|
|
|
|
|
./build.sh <target>
|
|
|
|
|
|
./build.sh help # Show this help
|
|
|
|
|
|
./build.sh list # Show common targets
|
|
|
|
|
|
./build.sh verify <bin> # Verify binary freshness
|
|
|
|
|
|
|
|
|
|
|
|
Common targets (curated):
|
|
|
|
|
|
- bench_random_mixed_hakmem
|
|
|
|
|
|
- bench_pool_tls_hakmem
|
|
|
|
|
|
- bench_mid_large_mt_hakmem
|
|
|
|
|
|
- larson_hakmem
|
|
|
|
|
|
|
|
|
|
|
|
Pinned build flags (by default):
|
|
|
|
|
|
POOL_TLS_PHASE1=1 HEADER_CLASSIDX=1 AGGRESSIVE_INLINE=1 PREWARM_TLS=1 POOL_TLS_PREWARM=1
|
|
|
|
|
|
|
|
|
|
|
|
Extra flags (optional):
|
|
|
|
|
|
Use environment var EXTRA_MAKEFLAGS, e.g.:
|
|
|
|
|
|
EXTRA_MAKEFLAGS="HAKMEM_DEBUG_VERBOSE=1" ./build.sh bench_pool_tls_hakmem
|
|
|
|
|
|
EXTRA_MAKEFLAGS="HAKMEM_TINY_SAFE_FREE=1" ./build.sh bench_random_mixed_hakmem
|
|
|
|
|
|
|
|
|
|
|
|
Pool TLS Arena ENV (A/B friendly):
|
|
|
|
|
|
export HAKMEM_POOL_TLS_ARENA_MB_INIT=2 # default 1
|
|
|
|
|
|
export HAKMEM_POOL_TLS_ARENA_MB_MAX=16 # default 8
|
|
|
|
|
|
export HAKMEM_POOL_TLS_ARENA_GROWTH_LEVELS=4 # default 3
|
|
|
|
|
|
|
|
|
|
|
|
Verify & perf tips:
|
|
|
|
|
|
make print-flags
|
|
|
|
|
|
./verify_build.sh <bin>
|
|
|
|
|
|
perf stat -e cycles,instructions,branches,branch-misses,cache-misses -r 3 -- ./<bin> ...
|
|
|
|
|
|
strace -e trace=mmap,madvise,munmap -c ./<bin> ...
|
|
|
|
|
|
USAGE
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
list_targets() {
|
|
|
|
|
|
cat <<'LIST'
|
|
|
|
|
|
Common build targets:
|
|
|
|
|
|
bench_random_mixed_hakmem # Tiny 1T mixed
|
|
|
|
|
|
bench_pool_tls_hakmem # Pool TLS (8–52KB)
|
|
|
|
|
|
bench_mid_large_mt_hakmem # Mid-Large MT (8–32KB)
|
|
|
|
|
|
larson_hakmem # Larson mixed
|
|
|
|
|
|
bench_random_mixed_system # glibc baseline
|
|
|
|
|
|
bench_pool_tls_system # glibc baseline (PoolTLS workload)
|
|
|
|
|
|
bench_mid_large_mt_system # glibc baseline (Mid-Large workload)
|
|
|
|
|
|
LIST
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if [[ "${TARGET}" == "help" || "${TARGET}" == "-h" || "${TARGET}" == "--help" ]]; then
|
|
|
|
|
|
usage
|
|
|
|
|
|
exit 0
|
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
if [[ "${TARGET}" == "list" ]]; then
|
|
|
|
|
|
list_targets
|
|
|
|
|
|
exit 0
|
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
if [[ "${TARGET}" == "verify" ]]; then
|
|
|
|
|
|
BIN="${2:-}"
|
|
|
|
|
|
if [[ -z "${BIN}" ]]; then
|
|
|
|
|
|
echo "Usage: ./build.sh verify <binary>" >&2
|
|
|
|
|
|
exit 2
|
|
|
|
|
|
fi
|
|
|
|
|
|
./verify_build.sh "${BIN}"
|
|
|
|
|
|
exit 0
|
|
|
|
|
|
fi
|
|
|
|
|
|
|
2025-11-09 11:50:18 +09:00
|
|
|
|
echo "========================================="
|
|
|
|
|
|
echo " HAKMEM Build Script"
|
|
|
|
|
|
echo " Target: ${TARGET}"
|
2025-11-09 16:49:34 +09:00
|
|
|
|
echo " Flags: POOL_TLS_PHASE1=1 POOL_TLS_PREWARM=1 HEADER_CLASSIDX=1 AGGRESSIVE_INLINE=1 PREWARM_TLS=1 ${EXTRA_MAKEFLAGS:-}"
|
2025-11-09 11:50:18 +09:00
|
|
|
|
echo "========================================="
|
|
|
|
|
|
|
|
|
|
|
|
# Always clean to avoid stale objects when toggling flags
|
|
|
|
|
|
make clean >/dev/null 2>&1 || true
|
|
|
|
|
|
|
2025-11-09 16:49:34 +09:00
|
|
|
|
# Phase 7 + Pool TLS defaults (pinned) + user extras
|
2025-11-09 11:50:18 +09:00
|
|
|
|
make \
|
|
|
|
|
|
POOL_TLS_PHASE1=1 \
|
|
|
|
|
|
POOL_TLS_PREWARM=1 \
|
|
|
|
|
|
HEADER_CLASSIDX=1 \
|
|
|
|
|
|
AGGRESSIVE_INLINE=1 \
|
|
|
|
|
|
PREWARM_TLS=1 \
|
2025-11-09 16:49:34 +09:00
|
|
|
|
${EXTRA_MAKEFLAGS:-} \
|
2025-11-09 11:50:18 +09:00
|
|
|
|
"${TARGET}"
|
|
|
|
|
|
|
|
|
|
|
|
echo ""
|
|
|
|
|
|
echo "========================================="
|
|
|
|
|
|
echo " ✅ Build successful"
|
|
|
|
|
|
echo " Run: ./${TARGET}"
|
2025-11-09 16:49:34 +09:00
|
|
|
|
echo " Tip: ./build.sh help # flags, ENV, targets"
|
2025-11-09 11:50:18 +09:00
|
|
|
|
echo "========================================="
|