Files

141 lines
3.2 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
# For xnvme support, meson build system is required
# https://github.com/xnvme/xnvme
# Rebuilds a static Linux AMD64 fio binary with io_uring support.
# Output binary path: ./fio
# Directory where this script is located
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
TARGET_DIR="$SCRIPT_DIR/../../"
lastWORK_DIR=''
WORK_DIR=''
cd "$TARGET_DIR"
source "${TARGET_DIR}/lib/trim.sh"
createOrSetWorkDir()
{
# Check if previous WORK_DIR already set
if [ -f ".WORK_DIR" ]; then
lastWORK_DIR=$(cat .WORK_DIR)
fi
if [ ! -d "$lastWORK_DIR" ]; then
lastWORK_DIR=""
fi
# Either we don't have a previous WORK_DIR or it doesn't exist
if [ "$lastWORK_DIR" == "" ]; then
# printf "%-8s [CREATE]"
# Create one
declare -g WORK_DIR="$(mktemp -d)"
#printf "$WORK_DIR" > .WORK_DIR
else
# printf "%-8s [OK]"
declare -g WORK_DIR="$lastWORK_DIR"
fi
cd "$WORK_DIR"
}
ispinner "Setting up build environment..." &
createOrSetWorkDir
sleep 1
SPIN_PID=$!
kill $SPIN_PID
# echo "[OK]"
printf "\b\b\b\b[%s]\n" "" "OK"
printf "%-4s WORKDR_DIR: %s\n" "" "$WORK_DIR"
printf "%-4s We will now build fio in $WORK_DIR\n" ""
printf "%-4s Intermediate files will be deleted on completion\n" ""
printf "%-4s and binaries will be deposited in ./%s" " " $(basename "$SCRIPT_DIR")
# Delete the WORK_DIR on exit, so we don't leave a mess
trap 'rm -rf "$WORK_DIR"' EXIT
need_cmd() {
if ! command -v "$1" >/dev/null 2>&1; then
printf 'error: required command not found: %s\n' "$1" >&2
exit 1
fi
}
need_cmd git
need_cmd make
need_cmd gcc
need_cmd pkg-config
need_cmd file
need_cmd ldd
liburing_prefix="$WORK_DIR/liburing-static"
git clone --depth=1 https://github.com/axboe/liburing.git "$WORK_DIR/liburing"
# If we don't change into the directory, the stuff ends up directly in $WORK_DIR
cd "$WORK_DIR/liburing"
"$WORK_DIR/liburing/configure" --prefix="$liburing_prefix"
make -C "$WORK_DIR/liburing" -j"$(nproc)"
# There is no actual need to install it
# make -C "$WORK_DIR/liburing" install
printf "Status: %s\n" "$?"
echo "Finished building liburing?"
# exit
cd "$WORK_DIR"
git clone --depth=1 https://github.com/axboe/fio.git "$WORK_DIR/fio-src"
cd "$WORK_DIR/fio-src"
export PKG_CONFIG_PATH="${liburing_prefix}/lib/pkgconfig"
export PKG_CONFIG="pkg-config --static"
EXTFLAGS="-static" "$WORK_DIR/fio-src/configure" --disable-native --build-static
make -C "$WORK_DIR/fio-src" -j"$(nproc)"
printf "Status: %s\n" "$?"
cp "$WORK_DIR/fio-src/fio" "${TARGET_DIR}/fio-io_uring"
cd "$TARGET_DIR"
printf 'Verifying static linkage...\n'
file ./fio-io_uring
ldd ./fio-io_uring || true
printf 'Verifying io_uring engine...\n'
./fio-io_uring --enghelp | grep -E '(^|[[:space:]])io_uring([[:space:]]|$)'
printf 'Done. Rebuilt binary at %s/fio-io_uring\n' "${TARGET_DIR}"
# # Fetching libaio
# git clone https://github.com/anlongfei/libaio
# cd libaio
# make prefix=../build ENABLE_SHARED=false
# make prefix=../build ENABLE_SHARED=false install
# cd ../fio-src/
# export PKG_CONFIG_PATH="../build/lib/pkgconfig"
# export PKG_CONFIG="pkg-config --static"
# EXTFLAGS="-static" ./configure" --disable-native --build-static