Files
InstanceBrick--nightcap/Makefile
T
vii 349e314850 feat(packaging): rename app ID to io.github.CoderDayton.nightcap and publish Flatpak
Rename the desktop entry, metainfo, icons, Flatpak manifest, and SDL app
identity so Nightcap installs side by side with upstream. Build a signed
Flatpak on v* tags, publish the OSTree repo and landing page to GitHub
Pages, and attach the bundle to the release. Release creation tolerates
the AppImage and Flatpak workflows racing on the same tag.
2026-09-15 07:10:26 -05:00

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 ?= 4
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: ## Run with ANGLE/Vulkan compatibility backend
@MOCKTAIL_GRAPHICS_BACKEND=angle-vulkan ./scripts/run_sober.sh
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}'