Files
InstanceBrick--nightcap/Makefile
T

165 lines
6.5 KiB
Makefile

# Modified by vii from komaruworld/mocktail. See README "About this fork".
.DEFAULT_GOAL := all
.PHONY: all build release debug test apk install register-url-handler release-runtime portable portable-test standalone appimage flatpak run-flatpak run run-smoke run-unlimited run-game run-input run-resize run-network auto-run run-gles run-angle update-roblox update-auto update-auto-launch payload-status payload-rollback support-bundle clean submodules help
BUILD_DIR := build
BINARY := $(BUILD_DIR)/mocktail
JOBS := $(shell nproc)
BUILD_TYPE ?= Release
LIBC ?= auto
MODE ?= standalone
CMAKE_TOOLCHAIN_FILE ?=
CMAKE_SYSROOT ?=
RELEASE_BUILD_DIR ?=
PORTABLE_MODE ?= standalone
PORTABLE_CANONICAL_MODE := $(if $(filter dynamic minimal,$(PORTABLE_MODE)),thin,$(if $(filter full static,$(PORTABLE_MODE)),standalone,$(PORTABLE_MODE)))
PORTABLE_DIR ?= dist/mocktail-linux-x86_64-glibc-$(PORTABLE_CANONICAL_MODE)
APPIMAGE ?= dist/Mocktail-x86_64.AppImage
APPIMAGE_FORMAT ?= classic
ANYLINUX_PACKAGER ?= quick-sharun
ANYLINUX_APPIMAGETOOL ?= appimagetool
PREFIX ?= /usr
FLATPAK_BUILD_DIR ?= build-flatpak
FLATPAK_MANIFEST ?= packaging/flatpak/io.github.CoderDayton.nightcap.json
FLATPAK_JOBS ?= 2
define build_native_runtime
@git submodule update --init --recursive
@cmake -S . -B "$(BUILD_DIR)" \
-DCMAKE_BUILD_TYPE="$(1)" \
-DBUILD_TESTING="$(2)" \
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
$(if $(strip $(CMAKE_TOOLCHAIN_FILE)),-DCMAKE_TOOLCHAIN_FILE="$(CMAKE_TOOLCHAIN_FILE)") \
$(if $(strip $(CMAKE_SYSROOT)),-DCMAKE_SYSROOT="$(CMAKE_SYSROOT)")
@cmake --build "$(BUILD_DIR)" -j"$(JOBS)"
endef
all: build ## Dynamic Release build
build: ## Build the dynamic Release runtime in build/
$(call build_native_runtime,$(BUILD_TYPE),OFF)
release: ## Build AppImage (LIBC=auto|glibc|musl MODE=standalone|thin)
@MOCKTAIL_BUILD_JOBS="$(JOBS)" \
MOCKTAIL_BUILD_TYPE="$(BUILD_TYPE)" \
MOCKTAIL_RELEASE_BUILD_DIR="$(RELEASE_BUILD_DIR)" \
CMAKE_TOOLCHAIN_FILE="$(CMAKE_TOOLCHAIN_FILE)" \
CMAKE_SYSROOT="$(CMAKE_SYSROOT)" \
./scripts/build_release.sh --libc "$(LIBC)" --mode "$(MODE)"
debug: ## Debug build
$(call build_native_runtime,Debug,OFF)
install: ## Install an already-built dynamic runtime (use: sudo make install)
@cmake --install "$(BUILD_DIR)" --prefix "$(PREFIX)"
register-url-handler: build ## Select this build for Roblox website links
@./scripts/register_url_handler.sh --set-default \
--executable "$(abspath $(BINARY))" \
--desktop-file "$(abspath packaging/io.github.CoderDayton.nightcap.desktop)"
test: ## Build and run all unit tests
$(call build_native_runtime,Debug,ON)
@ctest --test-dir "$(BUILD_DIR)" --output-on-failure -j"$(JOBS)"
apk: ## Extract libroblox.so and build (usage: make apk APK=/path/to/roblox.apk)
ifndef APK
$(error APK variable not set. Usage: make apk APK=/path/to/roblox-x86_64.apk)
endif
@./scripts/build.sh --apk "$(APK)" --build-type $(BUILD_TYPE) --jobs $(JOBS)
release-runtime: build
portable: appimage ## Build the portable AppImage
portable-test: release-runtime ## Verify portable packaging and relocation
@./tests/portable_packaging_test.sh
standalone: appimage ## Build the standalone x86-64 AppImage
appimage: release-runtime ## Build AppImage (APPIMAGE_FORMAT=classic|anylinux)
@MOCKTAIL_APPIMAGE_FORMAT="$(APPIMAGE_FORMAT)" \
MOCKTAIL_ANYLINUX_PACKAGER="$(ANYLINUX_PACKAGER)" \
MOCKTAIL_ANYLINUX_APPIMAGETOOL="$(ANYLINUX_APPIMAGETOOL)" \
./scripts/package_portable.sh --build-dir "$(BUILD_DIR)" \
--libc glibc --output "$(PORTABLE_DIR)" --mode "$(PORTABLE_MODE)" \
--appimage "$(APPIMAGE)"
flatpak: ## Build and install the local x86-64 Flatpak
@./scripts/build_flatpak.sh \
--build-dir "$(FLATPAK_BUILD_DIR)" \
--manifest "$(FLATPAK_MANIFEST)" \
--jobs "$(FLATPAK_JOBS)"
run-flatpak: ## Run the installed Flatpak
@flatpak run io.github.CoderDayton.nightcap
run: export MOCKTAIL_AUTO_EXIT_AFTER_PRESENT_MS = 0
run: build ## Run the native binary interactively until the window is closed
@$(BINARY)
run-smoke: export MOCKTAIL_AUTO_EXIT_AFTER_PRESENT_MS = 3000
run-smoke: release-runtime ## Run the short Vulkan lifecycle readiness gate
@./scripts/real_bringup_smoke.sh C
run-unlimited: export MOCKTAIL_FRAME_RATE_LIMIT = unlimited
run-unlimited: export MOCKTAIL_VSYNC = off
run-unlimited: export MOCKTAIL_AUTO_EXIT_AFTER_PRESENT_MS = 5000
run-unlimited: release-runtime ## Run 240-FPS/unthrottled Vulkan diagnostic mode
@./scripts/real_bringup_smoke.sh C
run-game: release-runtime ## Run local UGCGame/Vulkan gate (not an authenticated join)
@./scripts/real_bringup_smoke.sh GAME
run-input: release-runtime ## Run local GAME gate and route SDL mouse/touch through native input
@./scripts/real_bringup_smoke.sh INPUT
run-resize: release-runtime ## Run real SDL compositor resize and typed JNI surface-rebind gate
@./scripts/real_bringup_smoke.sh RESIZE
run-network: export MOCKTAIL_PLACE_ID = $(PLACE_ID)
run-network: release-runtime ## Run authenticated public-place gate (usage: make run-network PLACE_ID=...)
ifndef PLACE_ID
$(error PLACE_ID variable not set. Usage: make run-network PLACE_ID=positive-place-id)
endif
@./scripts/real_bringup_smoke.sh NETWORK
auto-run: ## Build/run loop with crash summaries
@./scripts/auto_runtime_loop.sh
run-gles: build ## Run strict system EGL/OpenGL ES 3 without Vulkan fallback
@$(BINARY) --graphics opengl
run-angle: build ## Run with ANGLE/Vulkan compatibility backend
@$(BINARY) --graphics angle-vulkan
update-roblox: ## Validate and import the current x86_64 Roblox bundle cached by Sober
@./scripts/update_roblox_payload.sh
update-auto: build ## Download latest Roblox, derive its ABI, run two canaries, then activate
@./$(BUILD_DIR)/mocktail_updater update
update-auto-launch: build ## Update Roblox and launch the verified current payload
@./$(BUILD_DIR)/mocktail_updater update
@./$(BINARY)
payload-status: build ## Show current and previous-good immutable payloads
@./$(BUILD_DIR)/mocktail_updater status
payload-rollback: build ## Atomically restore the previous-good payload
@./$(BUILD_DIR)/mocktail_updater rollback
support-bundle: ## Create a private sanitized diagnostics archive
@./scripts/collect_support_bundle.sh --context manual --reason manual-request
submodules: ## Initialise git submodules (libjnivm, mcpelauncher-linker)
@./scripts/add_submodules.sh
clean: ## Remove the build directory
rm -rf $(BUILD_DIR)
@echo "Build directory removed."
help: ## Show available targets
@grep -E '^[a-zA-Z_-]+:.*##' $(MAKEFILE_LIST) \
| awk 'BEGIN {FS = ":.*## "}; {printf " \033[36m%-14s\033[0m %s\n", $$1, $$2}'