From 1ddad54310bd1521aacddc2a669d5cd2bed33b54 Mon Sep 17 00:00:00 2001 From: tritao Date: Wed, 4 Feb 2026 21:45:23 +0000 Subject: [PATCH 1/6] Add offline Makefile build scripts --- .gitignore | 3 +++ Makefile | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++ tools/build.sh | 39 +++++++++++++++++++++++++++++++++++ tools/run.sh | 22 ++++++++++++++++++++ 4 files changed, 120 insertions(+) create mode 100644 Makefile create mode 100644 tools/build.sh create mode 100644 tools/run.sh diff --git a/.gitignore b/.gitignore index e1327be2..2b6ebff8 100644 --- a/.gitignore +++ b/.gitignore @@ -101,6 +101,9 @@ fabric.properties *.tar.gz *.rar +# local build output +/build/ + # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml hs_err_pid* diff --git a/Makefile b/Makefile new file mode 100644 index 00000000..4e6c9ba8 --- /dev/null +++ b/Makefile @@ -0,0 +1,56 @@ +SHELL := bash + +SRC_DIR ?= client/src +BUILD_DIR ?= build +CLASSES_DIR ?= $(BUILD_DIR)/classes +SOURCES_FILE ?= $(BUILD_DIR)/sources.txt + +LIBS ?= libs/clientlibs.jar +MAIN_CLASS ?= Loader +OUT_JAR ?= $(BUILD_DIR)/void-client.jar + +ifdef JAVA_HOME +JAVA := $(JAVA_HOME)/bin/java +JAVAC := $(JAVA_HOME)/bin/javac +JAR := $(JAVA_HOME)/bin/jar +else +JAVA ?= java +JAVAC ?= javac +JAR ?= jar +endif + +.PHONY: help sources compile jar run clean + +help: + @echo "Targets:" + @echo " make sources - write $(SOURCES_FILE)" + @echo " make compile - compile $(SRC_DIR) into $(CLASSES_DIR)" + @echo " make jar - build runnable jar at $(OUT_JAR) (Main-Class: $(MAIN_CLASS))" + @echo " make run - run $(MAIN_CLASS) using $(OUT_JAR) + $(LIBS)" + @echo " make clean - remove $(BUILD_DIR)" + @echo "" + @echo "Vars:" + @echo " JAVA_HOME=/path/to/jdk (use a specific JDK)" + @echo " LIBS=libs/clientlibs.jar (classpath deps)" + +sources: + @mkdir -p "$(BUILD_DIR)" + @find "$(SRC_DIR)" -maxdepth 1 -name '*.java' -print | sort > "$(SOURCES_FILE)" + @echo "Wrote $(SOURCES_FILE) ($$(wc -l < "$(SOURCES_FILE)") files)" + +compile: sources + @mkdir -p "$(CLASSES_DIR)" + @echo "Compiling with: $(JAVAC)" + @"$(JAVAC)" -Xlint:none -cp "$(LIBS)" -d "$(CLASSES_DIR)" @"$(SOURCES_FILE)" + +jar: compile + @mkdir -p "$(BUILD_DIR)" + @echo "Jarring to: $(OUT_JAR)" + @"$(JAR)" cfe "$(OUT_JAR)" "$(MAIN_CLASS)" -C "$(CLASSES_DIR)" . + +run: jar + @"$(JAVA)" -cp "$(OUT_JAR):$(LIBS)" "$(MAIN_CLASS)" + +clean: + rm -rf "$(BUILD_DIR)" + diff --git a/tools/build.sh b/tools/build.sh new file mode 100644 index 00000000..f8ee670c --- /dev/null +++ b/tools/build.sh @@ -0,0 +1,39 @@ +#!/usr/bin/env bash +set -euo pipefail + +ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" + +SRC_DIR="${SRC_DIR:-"$ROOT_DIR/client/src"}" +BUILD_DIR="${BUILD_DIR:-"$ROOT_DIR/build"}" +CLASSES_DIR="${CLASSES_DIR:-"$BUILD_DIR/classes"}" +SOURCES_FILE="${SOURCES_FILE:-"$BUILD_DIR/sources.txt"}" + +LIBS="${LIBS:-"$ROOT_DIR/libs/clientlibs.jar"}" +MAIN_CLASS="${MAIN_CLASS:-Loader}" +OUT_JAR="${OUT_JAR:-"$BUILD_DIR/void-client.jar"}" + +JAVA_BIN="${JAVA_HOME:+$JAVA_HOME/bin/}java" +JAVAC_BIN="${JAVA_HOME:+$JAVA_HOME/bin/}javac" +JAR_BIN="${JAVA_HOME:+$JAVA_HOME/bin/}jar" + +EXCLUDE_REGEX="${EXCLUDE_REGEX:-}" + +mkdir -p "$BUILD_DIR" "$CLASSES_DIR" + +find "$SRC_DIR" -maxdepth 1 -name '*.java' -print | sort > "$SOURCES_FILE" +if [[ -n "$EXCLUDE_REGEX" ]]; then + grep -Ev "$EXCLUDE_REGEX" "$SOURCES_FILE" > "$SOURCES_FILE.tmp" + mv "$SOURCES_FILE.tmp" "$SOURCES_FILE" +fi + +echo "Sources: $(wc -l < "$SOURCES_FILE") ($SOURCES_FILE)" +echo "JAVAC: $JAVAC_BIN" + +"$JAVAC_BIN" -Xlint:none -cp "$LIBS" -d "$CLASSES_DIR" @"$SOURCES_FILE" + +echo "JAR: $OUT_JAR" +"$JAR_BIN" cfe "$OUT_JAR" "$MAIN_CLASS" -C "$CLASSES_DIR" . + +echo "Done. Run with:" +echo " $JAVA_BIN -cp $OUT_JAR:$LIBS $MAIN_CLASS" + diff --git a/tools/run.sh b/tools/run.sh new file mode 100644 index 00000000..8ce79262 --- /dev/null +++ b/tools/run.sh @@ -0,0 +1,22 @@ +#!/usr/bin/env bash +set -euo pipefail + +ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" + +BUILD_DIR="${BUILD_DIR:-"$ROOT_DIR/build"}" +LIBS="${LIBS:-"$ROOT_DIR/libs/clientlibs.jar"}" +MAIN_CLASS="${MAIN_CLASS:-Loader}" +OUT_JAR="${OUT_JAR:-"$BUILD_DIR/void-client.jar"}" + +JAVA_BIN="${JAVA_HOME:+$JAVA_HOME/bin/}java" + +if [[ ! -f "$OUT_JAR" ]]; then + echo "Missing $OUT_JAR. Build first with:" + echo " make jar" + echo "or" + echo " tools/build.sh" + exit 1 +fi + +exec "$JAVA_BIN" -cp "$OUT_JAR:$LIBS" "$MAIN_CLASS" "$@" + From f4c45c99589098768b9aeb3971d1d34b050986d3 Mon Sep 17 00:00:00 2001 From: tritao Date: Wed, 4 Feb 2026 21:51:30 +0000 Subject: [PATCH 2/6] Add repo-local JDK bootstrap script --- .gitignore | 3 +++ Makefile | 4 ++- tools/bootstrap-jdk.sh | 59 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 65 insertions(+), 1 deletion(-) create mode 100644 tools/bootstrap-jdk.sh diff --git a/.gitignore b/.gitignore index 2b6ebff8..4bba564b 100644 --- a/.gitignore +++ b/.gitignore @@ -104,6 +104,9 @@ fabric.properties # local build output /build/ +# local JDK installs (bootstrapped) +/.jdk/ + # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml hs_err_pid* diff --git a/Makefile b/Makefile index 4e6c9ba8..b206a9c1 100644 --- a/Makefile +++ b/Makefile @@ -32,6 +32,9 @@ help: @echo "Vars:" @echo " JAVA_HOME=/path/to/jdk (use a specific JDK)" @echo " LIBS=libs/clientlibs.jar (classpath deps)" + @echo "" + @echo "Tip:" + @echo " tools/bootstrap-jdk.sh 8 (downloads a repo-local JDK into .jdk/)" sources: @mkdir -p "$(BUILD_DIR)" @@ -53,4 +56,3 @@ run: jar clean: rm -rf "$(BUILD_DIR)" - diff --git a/tools/bootstrap-jdk.sh b/tools/bootstrap-jdk.sh new file mode 100644 index 00000000..ced530cb --- /dev/null +++ b/tools/bootstrap-jdk.sh @@ -0,0 +1,59 @@ +#!/usr/bin/env bash +set -euo pipefail + +ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" + +JDK_MAJOR="${1:-8}" + +case "${JDK_MAJOR}" in + 8|11|17|21) ;; + *) + echo "Usage: tools/bootstrap-jdk.sh {8|11|17|21}" + echo "Downloads an Eclipse Temurin JDK into $ROOT_DIR/.jdk/temurin (no Gradle, no system install)." + exit 2 + ;; +esac + +OS="linux" +ARCH_RAW="$(uname -m)" +case "$ARCH_RAW" in + x86_64|amd64) ARCH="x64" ;; + aarch64|arm64) ARCH="aarch64" ;; + *) + echo "Unsupported arch: $ARCH_RAW" + exit 2 + ;; +esac + +DEST_DIR="$ROOT_DIR/.jdk/temurin${JDK_MAJOR}" +TMP_DIR="${DEST_DIR}.tmp.$$" +ARCHIVE="/tmp/temurin${JDK_MAJOR}-${OS}-${ARCH}-jdk.tar.gz" + +URL="https://api.adoptium.net/v3/binary/latest/${JDK_MAJOR}/ga/${OS}/${ARCH}/jdk/hotspot/normal/eclipse" + +echo "Downloading Temurin JDK ${JDK_MAJOR} for ${OS}/${ARCH}..." +echo " $URL" +curl -fsSL -o "$ARCHIVE" "$URL" + +rm -rf "$TMP_DIR" +mkdir -p "$TMP_DIR" + +echo "Extracting to $DEST_DIR ..." +tar -xzf "$ARCHIVE" -C "$TMP_DIR" --strip-components=1 + +rm -rf "$DEST_DIR" +mv "$TMP_DIR" "$DEST_DIR" + +cat < Date: Wed, 4 Feb 2026 21:53:04 +0000 Subject: [PATCH 3/6] Makefile: auto-select bootstrapped JDK when needed --- Makefile | 38 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 36 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index b206a9c1..1c1edc2f 100644 --- a/Makefile +++ b/Makefile @@ -9,6 +9,39 @@ LIBS ?= libs/clientlibs.jar MAIN_CLASS ?= Loader OUT_JAR ?= $(BUILD_DIR)/void-client.jar +# Requested JDK major version. Used to validate JAVA_HOME and auto-select a bootstrapped JDK under ./.jdk/. +JDK ?= 8 +BOOTSTRAP_JAVA_HOME ?= $(CURDIR)/.jdk/temurin$(JDK) + +# If JAVA_HOME isn't set (or doesn't match JDK), fall back to a repo-local bootstrapped JDK if present. +JAVA_HOME_BIN_JAVA := $(JAVA_HOME)/bin/java +JAVA_HOME_BIN_JAVAC := $(JAVA_HOME)/bin/javac + +ifdef JAVA_HOME + ifeq ($(wildcard $(JAVA_HOME_BIN_JAVA)),) + ifneq ($(wildcard $(BOOTSTRAP_JAVA_HOME)/bin/java),) + $(warning JAVA_HOME is set but invalid ($(JAVA_HOME_BIN_JAVA) missing); using $(BOOTSTRAP_JAVA_HOME)) + JAVA_HOME := $(BOOTSTRAP_JAVA_HOME) + else + $(warning JAVA_HOME is set but invalid ($(JAVA_HOME_BIN_JAVA) missing); falling back to PATH) + endif + else + JAVA_HOME_MAJOR := $(shell "$(JAVA_HOME_BIN_JAVA)" -version 2>&1 | sed -n '1{s/.*version \"1\.\([0-9][0-9]*\).*/\1/p; s/.*version \"\([0-9][0-9]*\).*/\1/p;}') + ifneq ($(JAVA_HOME_MAJOR),$(JDK)) + ifneq ($(wildcard $(BOOTSTRAP_JAVA_HOME)/bin/java),) + $(warning JAVA_HOME is Java $(JAVA_HOME_MAJOR) but JDK=$(JDK); using $(BOOTSTRAP_JAVA_HOME)) + JAVA_HOME := $(BOOTSTRAP_JAVA_HOME) + else + $(warning JAVA_HOME is Java $(JAVA_HOME_MAJOR) but JDK=$(JDK); continuing with JAVA_HOME) + endif + endif + endif +else + ifneq ($(wildcard $(BOOTSTRAP_JAVA_HOME)/bin/java),) + JAVA_HOME := $(BOOTSTRAP_JAVA_HOME) + endif +endif + ifdef JAVA_HOME JAVA := $(JAVA_HOME)/bin/java JAVAC := $(JAVA_HOME)/bin/javac @@ -30,11 +63,12 @@ help: @echo " make clean - remove $(BUILD_DIR)" @echo "" @echo "Vars:" - @echo " JAVA_HOME=/path/to/jdk (use a specific JDK)" + @echo " JDK=8 (requested major version; default 8)" + @echo " JAVA_HOME=/path/to/jdk (used if compatible with JDK; otherwise ./.jdk/temurin\$$JDK is preferred)" @echo " LIBS=libs/clientlibs.jar (classpath deps)" @echo "" @echo "Tip:" - @echo " tools/bootstrap-jdk.sh 8 (downloads a repo-local JDK into .jdk/)" + @echo " tools/bootstrap-jdk.sh \$$JDK (downloads a repo-local JDK into .jdk/)" sources: @mkdir -p "$(BUILD_DIR)" From 2bc8fd8b0aa0796162193dcce8b28c9b9e4624ec Mon Sep 17 00:00:00 2001 From: tritao Date: Wed, 4 Feb 2026 21:53:39 +0000 Subject: [PATCH 4/6] Makefile: add bootstrap target --- Makefile | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 1c1edc2f..ed97dcfc 100644 --- a/Makefile +++ b/Makefile @@ -52,10 +52,11 @@ JAVAC ?= javac JAR ?= jar endif -.PHONY: help sources compile jar run clean +.PHONY: help bootstrap sources compile jar run clean help: @echo "Targets:" + @echo " make bootstrap - download repo-local JDK (./.jdk/temurin\$$JDK)" @echo " make sources - write $(SOURCES_FILE)" @echo " make compile - compile $(SRC_DIR) into $(CLASSES_DIR)" @echo " make jar - build runnable jar at $(OUT_JAR) (Main-Class: $(MAIN_CLASS))" @@ -70,6 +71,10 @@ help: @echo "Tip:" @echo " tools/bootstrap-jdk.sh \$$JDK (downloads a repo-local JDK into .jdk/)" +bootstrap: + @echo "Bootstrapping Temurin JDK $(JDK) into $(BOOTSTRAP_JAVA_HOME)" + @bash tools/bootstrap-jdk.sh "$(JDK)" + sources: @mkdir -p "$(BUILD_DIR)" @find "$(SRC_DIR)" -maxdepth 1 -name '*.java' -print | sort > "$(SOURCES_FILE)" From 7854e4ee16b472b4484831c1c57d5bdeac97042a Mon Sep 17 00:00:00 2001 From: tritao Date: Wed, 4 Feb 2026 21:56:11 +0000 Subject: [PATCH 5/6] Makefile: avoid recompiling on make run when up-to-date --- Makefile | 27 ++++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/Makefile b/Makefile index ed97dcfc..f7eb3a90 100644 --- a/Makefile +++ b/Makefile @@ -8,6 +8,7 @@ SOURCES_FILE ?= $(BUILD_DIR)/sources.txt LIBS ?= libs/clientlibs.jar MAIN_CLASS ?= Loader OUT_JAR ?= $(BUILD_DIR)/void-client.jar +CLASSES_STAMP ?= $(CLASSES_DIR)/.compiled.stamp # Requested JDK major version. Used to validate JAVA_HOME and auto-select a bootstrapped JDK under ./.jdk/. JDK ?= 8 @@ -75,22 +76,34 @@ bootstrap: @echo "Bootstrapping Temurin JDK $(JDK) into $(BOOTSTRAP_JAVA_HOME)" @bash tools/bootstrap-jdk.sh "$(JDK)" -sources: - @mkdir -p "$(BUILD_DIR)" +JAVA_SOURCES := $(wildcard $(SRC_DIR)/*.java) +LIB_JARS := $(subst :, ,$(LIBS)) + +$(BUILD_DIR): + @mkdir -p "$@" + +$(CLASSES_DIR): + @mkdir -p "$@" + +sources: $(BUILD_DIR) @find "$(SRC_DIR)" -maxdepth 1 -name '*.java' -print | sort > "$(SOURCES_FILE)" @echo "Wrote $(SOURCES_FILE) ($$(wc -l < "$(SOURCES_FILE)") files)" -compile: sources - @mkdir -p "$(CLASSES_DIR)" +$(CLASSES_STAMP): $(JAVA_SOURCES) $(LIB_JARS) | $(CLASSES_DIR) $(BUILD_DIR) @echo "Compiling with: $(JAVAC)" + @find "$(SRC_DIR)" -maxdepth 1 -name '*.java' -print | sort > "$(SOURCES_FILE)" @"$(JAVAC)" -Xlint:none -cp "$(LIBS)" -d "$(CLASSES_DIR)" @"$(SOURCES_FILE)" + @touch "$(CLASSES_STAMP)" + +compile: $(CLASSES_STAMP) -jar: compile - @mkdir -p "$(BUILD_DIR)" +$(OUT_JAR): $(CLASSES_STAMP) | $(BUILD_DIR) @echo "Jarring to: $(OUT_JAR)" @"$(JAR)" cfe "$(OUT_JAR)" "$(MAIN_CLASS)" -C "$(CLASSES_DIR)" . -run: jar +jar: $(OUT_JAR) + +run: $(OUT_JAR) @"$(JAVA)" -cp "$(OUT_JAR):$(LIBS)" "$(MAIN_CLASS)" clean: From 7eadd5ed86592d1cffcdc016bcbb5fde747a06ac Mon Sep 17 00:00:00 2001 From: tritao Date: Thu, 5 Feb 2026 18:04:02 +0000 Subject: [PATCH 6/6] Makefile/run: allow JAVA_ARGS passthrough --- Makefile | 3 ++- tools/run.sh | 6 ++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index f7eb3a90..e00fee3d 100644 --- a/Makefile +++ b/Makefile @@ -9,6 +9,7 @@ LIBS ?= libs/clientlibs.jar MAIN_CLASS ?= Loader OUT_JAR ?= $(BUILD_DIR)/void-client.jar CLASSES_STAMP ?= $(CLASSES_DIR)/.compiled.stamp +JAVA_ARGS ?= # Requested JDK major version. Used to validate JAVA_HOME and auto-select a bootstrapped JDK under ./.jdk/. JDK ?= 8 @@ -104,7 +105,7 @@ $(OUT_JAR): $(CLASSES_STAMP) | $(BUILD_DIR) jar: $(OUT_JAR) run: $(OUT_JAR) - @"$(JAVA)" -cp "$(OUT_JAR):$(LIBS)" "$(MAIN_CLASS)" + @"$(JAVA)" $(JAVA_ARGS) -cp "$(OUT_JAR):$(LIBS)" "$(MAIN_CLASS)" clean: rm -rf "$(BUILD_DIR)" diff --git a/tools/run.sh b/tools/run.sh index 8ce79262..42cf0b82 100644 --- a/tools/run.sh +++ b/tools/run.sh @@ -9,6 +9,9 @@ MAIN_CLASS="${MAIN_CLASS:-Loader}" OUT_JAR="${OUT_JAR:-"$BUILD_DIR/void-client.jar"}" JAVA_BIN="${JAVA_HOME:+$JAVA_HOME/bin/}java" +JAVA_ARGS="${JAVA_ARGS:-}" + +read -r -a JAVA_ARGS_ARR <<<"$JAVA_ARGS" if [[ ! -f "$OUT_JAR" ]]; then echo "Missing $OUT_JAR. Build first with:" @@ -18,5 +21,4 @@ if [[ ! -f "$OUT_JAR" ]]; then exit 1 fi -exec "$JAVA_BIN" -cp "$OUT_JAR:$LIBS" "$MAIN_CLASS" "$@" - +exec "$JAVA_BIN" "${JAVA_ARGS_ARR[@]}" -cp "$OUT_JAR:$LIBS" "$MAIN_CLASS" "$@"