lily/build
2025-03-08 16:53:24 +00:00

64 lines
2.2 KiB
Bash
Executable file

#!/bin/sh
set -u
# shellcheck disable=SC2155
readonly LILY_SCRIPT_DIR="$(CDPATH='' cd -- "$(dirname -- "$0")" && pwd)"
readonly LILY_SRC_DIR="${LILY_SRC_DIR:-$LILY_SCRIPT_DIR/src}"
readonly LILY_TEST_DIR="${LILY_TEST_DIR:-$LILY_SCRIPT_DIR/test}"
readonly LILY_BUILD_DIR="${LILY_BUILD_DIR:-$LILY_SCRIPT_DIR/out}"
readonly HBLANG_GIT="https://git.ablecorp.us/mlokis/hblang"
readonly HBLANG_COMMIT="fcbcaac67dd47887fef81bc62d4b66a6cf071f8c"
readonly HBLANG_BRANCH="main"
readonly HBLANG_CFLAGS="--path-projection lily $LILY_SRC_DIR/lib.hb ${HBLANG_CFLAGS:-}"
die() { error "$2" && exit "$1"; }
error() { printf "\033[31mERROR\033[0m: %s\n" "$1" 1>&2; }
log() { printf "\033[32mINFO\033[0m: %s\n" "$1"; }
warn() { printf "\033[33mWARN\033[0m: %s\n" "$1"; }
fetch_step() {
command -v zig >/dev/null 2>&1 || die 101 "'zig' binary not found in PATH"
command -v git >/dev/null 2>&1 || die 101 "'git' binary not found in PATH"
if [ -d "$LILY_BUILD_DIR/hblang" ]; then
cd "$LILY_BUILD_DIR/hblang" || die 1 "cd to $LILY_BUILD_DIR/hblang failed"
CURR_BRANCH=$(git rev-parse --abbrev-ref HEAD >/dev/null 2>&1)
[ "$CURR_BRANCH" = "$HBLANG_BRANCH" ] || git checkout "$HBLANG_BRANCH" >/dev/null 2>&1
CURR_COMMIT=$(git rev-parse HEAD >/dev/null 2>&1)
[ "$CURR_COMMIT" = "$HBLANG_COMMIT" ] || git checkout "$HBLANG_COMMIT" >/dev/null 2>&1
else
mkdir -p "$LILY_BUILD_DIR/hblang"
git clone "$HBLANG_GIT" "$LILY_BUILD_DIR/hblang" --branch "$HBLANG_BRANCH"
cd "$LILY_BUILD_DIR/hblang" || die 1 "cd to $LILY_BUILD_DIR/hblang failed"
git checkout "$HBLANG_COMMIT" >/dev/null 2>&1
fi
zig build install
PATH="$LILY_BUILD_DIR/hblang/zig-out/bin:$PATH"
cd "$LILY_SCRIPT_DIR" || die 1 "cd to $LILY_SCRIPT_DIR failed"
}
main() {
mkdir -p "$LILY_BUILD_DIR" || die 1 "can't create build dir"
fetch_step
inp="${1:-main.hb}"
[ -z "$inp" ] || [ ! -e "$inp" ] && die 1 "source file '$inp' does not exist"
# shellcheck disable=SC2086
{
hblang $HBLANG_CFLAGS $inp
# todo: dont do this second compile if first fails
hblang $HBLANG_CFLAGS $inp --fmt >/dev/null 2>&1
}
}
main "$@"