mirror of
https://github.com/RTimothyEdwards/magic.git
synced 2026-09-05 00:50:50 +02:00
The pieces that make Magic actually buildable as a WASM library.
* magic/magicWasm.c — new headless entry point exporting four
functions used by the JS wrapper:
- magic_wasm_init() idempotent initialisation
- magic_wasm_run_command(s) dispatch one Magic command
- magic_wasm_source_file(p) execute a script from the VFS
- magic_wasm_update() drive a display-update cycle
Sets CAD_ROOT=/ if unset, so embedded technology files under
/magic/sys/ resolve correctly. Centers the command point inside
GrScreenRect so commands route to the layout window client
rather than the border/window-management client.
* utils/main.c, utils/main.h — split magicMain() into magicMainInit()
+ the dispatch loop. magicMainInit is idempotent (a static flag
guards against re-initialisation) so JS callers can call any of
the four wasm entry points first without sequencing.
* magic/Makefile — adds the WASM link target, gated by MAKE_WASM=1
set from toolchains/emscripten/defs.mak. Conditionally compiles
magicWasm.c into the main binary, links to magic.js and runs
post-build.sh on the result.
* toolchains/emscripten/defs.mak — Emscripten linker flags (WASM=1,
MODULARIZE, EXPORT_ES6, ALLOW_MEMORY_GROWTH, INITIAL_MEMORY=32M,
STACK_SIZE=5M), the four EXPORTED_FUNCTIONS, and the embed-file
bindings for the technology files under /magic/sys/.
* toolchains/emscripten/post-build.sh — patches Emscripten's ESM
output so it works in pure Node.js ESM: aliases require()
through createRequire, injects __filename / __dirname shims,
and resyncs the ___emscripten_embedded_file_data constant from
the wasm global section if Emscripten emitted a stale value.
Idempotent and pinned to emsdk 3.1.56 (see WARNING in the
header).
* toolchains/emscripten/README.md — full build documentation:
quick-start via npm/build.sh, manual build, list of embedded
files, exported C API, JavaScript usage example, and notes on
CAD_ROOT, DISPLAY_SUSPEND, and the signal-API stubs.
* .gitignore — adds the WASM artefacts (magic.js, magic.wasm,
magic.symbols), tightens the editor/OS cruft list, and keeps
toolchains/emscripten/defs.mak tracked despite the `defs.mak`
ignore rule.
96 lines
3.2 KiB
Makefile
96 lines
3.2 KiB
Makefile
#
|
|
# rcsid $Header: /usr/cvsroot/magic-8.0/magic/Makefile,v 1.1.1.1 2008/02/03 20:43:50 tim Exp $
|
|
#
|
|
|
|
MODULE = magic
|
|
MAGICDIR = ..
|
|
|
|
include ${MAGICDIR}/defs.mak
|
|
|
|
SRCS = magicTop.c
|
|
ifeq (${MAKE_WASM},1)
|
|
SRCS += magicWasm.c
|
|
endif
|
|
|
|
EXTRA_LIBS = ${MAGICDIR}/bplane/libbplane.o \
|
|
${MAGICDIR}/cmwind/libcmwind.o \
|
|
${MAGICDIR}/commands/libcommands.o \
|
|
${MAGICDIR}/database/libdatabase.o \
|
|
${MAGICDIR}/dbwind/libdbwind.o \
|
|
${MAGICDIR}/drc/libdrc.o \
|
|
${MAGICDIR}/debug/libdebug.o \
|
|
${MAGICDIR}/extract/libextract.o \
|
|
${MAGICDIR}/graphics/libgraphics.o \
|
|
${MAGICDIR}/select/libselect.o \
|
|
${MAGICDIR}/textio/libtextio.o \
|
|
${MAGICDIR}/tiles/libtiles.o \
|
|
${MAGICDIR}/windows/libwindows.o \
|
|
${MAGICDIR}/wiring/libwiring.o \
|
|
${MAGICDIR}/resis/libresis.o \
|
|
${MAGICDIR}/sim/libsim.o \
|
|
${MAGICDIR}/netmenu/libnetmenu.o \
|
|
${MAGICDIR}/plow/libplow.o \
|
|
${MAGICDIR}/utils/libutils.o \
|
|
${MAIN_EXTRA_LIBS}
|
|
|
|
BITMAPS = up.gif down.gif left.gif right.gif zoom.gif lock.xbm
|
|
DEST_XBM = $(BITMAPS:%=$(DESTDIR)${INSTALL_TCLDIR}/bitmaps/%)
|
|
|
|
# DFLAGS += -DCAD_DIR="${LIBDIR}"
|
|
LIBS += ${GR_LIBS} ${READLINE_LIBS} -lm ${LD_EXTRA_LIBS} \
|
|
${OA_LIBS} ${ZLIB_FLAG} ${TOP_EXTRA_LIBS}
|
|
CLEANS += tclmagic${SHDLIB_EXT} libtclmagic${SHDLIB_EXT}.a proto.magicrc
|
|
|
|
ifeq (${MAKE_WASM},1)
|
|
magic: magic.js
|
|
magic.js: lib${MODULE}.o ${EXTRA_LIBS}
|
|
@echo --- building main magic WASM
|
|
${RM} magic.js magic.wasm
|
|
${CC} ${CFLAGS} ${CPPFLAGS} ${DFLAGS} lib${MODULE}.o ${EXTRA_LIBS} -o magic.js ${LIBS}
|
|
endif
|
|
|
|
main: magic proto.magicrc
|
|
ifeq (${MAKE_WASM},1)
|
|
@bash ${MAGICDIR}/toolchains/emscripten/post-build.sh magic.js magic.wasm
|
|
endif
|
|
|
|
tcl-main: tclmagic${SHDLIB_EXT} proto.magicrc
|
|
|
|
tclmagic${SHDLIB_EXT}: ${EXTRA_LIBS}
|
|
@echo --- making magic Tcl library \(tclmagic${SHDLIB_EXT}\)
|
|
${RM} tclmagic${SHDLIB_EXT}
|
|
${CC} ${CFLAGS} ${CPPFLAGS} -o $@ ${LDDL_FLAGS} ${LD_RUN_PATH} \
|
|
${EXTRA_LIBS} ${LD_EXTRA_LIBS} \
|
|
-lc ${LIBS} ${LIB_SPECS} ${LDFLAGS}
|
|
|
|
proto.magicrc: proto.magicrc.in
|
|
${MCPP} ${GR_DFLAGS} ${DFLAGS} proto.magicrc.in > proto.magicrc
|
|
|
|
install: $(DESTDIR)${INSTALL_BINDIR}/${MODULE}${EXEEXT} $(DESTDIR)${INSTALL_SYSDIR}/.magicrc \
|
|
$(DESTDIR)${INSTALL_SYSDIR}/magicps.pro
|
|
|
|
install-tcl: $(DESTDIR)${INSTALL_TCLDIR}/tclmagic${SHDLIB_EXT} $(DESTDIR)${INSTALL_SYSDIR}/.magicrc \
|
|
$(DESTDIR)${INSTALL_SYSDIR}/.initrc $(DESTDIR)${INSTALL_SYSDIR}/magicps.pro ${DEST_XBM}
|
|
|
|
$(DESTDIR)${INSTALL_TCLDIR}/tclmagic${SHDLIB_EXT}: tclmagic${SHDLIB_EXT}
|
|
${RM} $(DESTDIR)${INSTALL_TCLDIR}/tclmagic${SHDLIB_EXT}
|
|
${CP} tclmagic${SHDLIB_EXT} $(DESTDIR)${INSTALL_TCLDIR}/tclmagic${SHDLIB_EXT}
|
|
|
|
$(DESTDIR)${INSTALL_TCLDIR}/bitmaps/%: bitmaps/%
|
|
${RM} $(DESTDIR)${INSTALL_TCLDIR}/bitmaps/$*
|
|
${CP} bitmaps/$* $(DESTDIR)${INSTALL_TCLDIR}/bitmaps/$*
|
|
|
|
$(DESTDIR)${INSTALL_SYSDIR}/.magicrc: proto.magicrc
|
|
${RM} $(DESTDIR)${INSTALL_SYSDIR}/.magicrc
|
|
${CP} proto.magicrc $(DESTDIR)${INSTALL_SYSDIR}/.magicrc
|
|
|
|
$(DESTDIR)${INSTALL_SYSDIR}/.initrc: proto.initrc
|
|
${RM} $(DESTDIR)${INSTALL_SYSDIR}/.initrc
|
|
${CP} proto.initrc $(DESTDIR)${INSTALL_SYSDIR}/.initrc
|
|
|
|
$(DESTDIR)${INSTALL_SYSDIR}/magicps.pro: magicps.pro
|
|
${RM} $(DESTDIR)${INSTALL_SYSDIR}/magicps.pro
|
|
${CP} magicps.pro $(DESTDIR)${INSTALL_SYSDIR}/magicps.pro
|
|
|
|
include ${MAGICDIR}/rules.mak
|