56 lines
2.5 KiB
Makefile
56 lines
2.5 KiB
Makefile
# Part of JoeyLib, Copyright (c) 2026 Scott Duensing, under the MIT License.
|
|
# See LICENSE.md for license information.
|
|
# SPDX-License-Identifier: MIT
|
|
#
|
|
# Web build rules: JoeyLib programs as web pages, through the hosted core and
|
|
# the same SDL3 backend the native SDL3 port uses (src/hosted,
|
|
# src/hosted/sdl3), compiled to WebAssembly with Emscripten. The rules are
|
|
# make/hosted.mk's; this file says what is the web's. A project reaches it
|
|
# through make/project.mk.
|
|
#
|
|
# A program is a folder of its own, bin/NAME/: NAME.html (the page, from
|
|
# make/support/web/shell.html), NAME.js and NAME.wasm, and NAME.data, its
|
|
# DATA folder packed in (Emscripten's --preload-file: the program finds it
|
|
# at /DATA, its current directory being /). Serve the folder over HTTP and
|
|
# open NAME.html; joey-run --port web does both.
|
|
#
|
|
# A JoeyLib program owns its loop and blocks in jlWaitVBL, which a browser
|
|
# does not allow, so programs are built with ASYNCIFY: the backend's waits
|
|
# hand the browser its turn (emscripten_sleep) and the program carries on
|
|
# where it was, unmodified.
|
|
|
|
PLATFORM := web
|
|
include $(dir $(lastword $(MAKEFILE_LIST)))/common.mk
|
|
|
|
$(call requireTool,$(EMCC),toolchain:web)
|
|
SDL3_WEB_LIB := $(SDL3_WEB_DIR)/lib/libSDL3.a
|
|
$(call requireTool,$(SDL3_WEB_LIB),toolchain:web)
|
|
$(call requireTool,$(LIBXMP_DIR)/include/libxmp-lite/xmp.h,toolchain:web)
|
|
|
|
# Emscripten's own environment (where its config and cache are), for every
|
|
# recipe.
|
|
export EM_CONFIG
|
|
export EM_CACHE
|
|
|
|
WEB_SHELL := $(REPO_DIR)/make/support/web/shell.html
|
|
|
|
# The asyncify unwind stack: deep enough for a wait inside a program's
|
|
# own call chain several levels down.
|
|
WEB_ASYNCIFY_STACK := 65536
|
|
|
|
HOSTED_CC := $(EMCC)
|
|
HOSTED_AR := $(dir $(EMCC))emar
|
|
HOSTED_BACKEND := sdl3
|
|
HOSTED_DEFINES := -DJOEYLIB_PLATFORM_HOSTED -DJOEYLIB_HOSTED_SDL3
|
|
HOSTED_SDK_CFLAGS := -I$(SDL3_WEB_DIR)/include
|
|
HOSTED_LINK := $(SDL3_WEB_LIB) -sASYNCIFY -sASYNCIFY_STACK_SIZE=$(WEB_ASYNCIFY_STACK) -sALLOW_MEMORY_GROWTH=1 -lidbfs.js -sEXPORTED_RUNTIME_METHODS=FS,ENV --shell-file $(WEB_SHELL)
|
|
PROGRAM_EXT := .html
|
|
# A program's page is rebuilt when the shell or SDL changes.
|
|
HOSTED_PROGRAM_DEPS := $(WEB_SHELL) $(SDL3_WEB_LIB)
|
|
|
|
# Every program in a folder of its own, with only its own DATA beside it:
|
|
# the DATA folder is packed into the program.
|
|
programDir = $(or $(call programVar,$(1),BINDIR),$(BINDIR))/$(call programName,$(1))
|
|
HOSTED_LINK_DATA = $(if $(call programVar,$(1),DATA),--preload-file $(call programDataDir,$(1))@/DATA)
|
|
|
|
include $(REPO_DIR)/make/hosted.mk
|