mirror of
https://github.com/InstanceBrick/nightcap.git
synced 2026-10-18 19:00:48 +02:00
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.
165 lines
6.5 KiB
Makefile
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}'
|