2017-04-25 14:41:48 +02:00
|
|
|
#
|
|
|
|
|
# rcsid $Header: /usr/cvsroot/magic-8.0/tcltk/Makefile,v 1.6 2010/06/24 12:37:56 tim Exp $
|
|
|
|
|
#
|
|
|
|
|
|
|
|
|
|
MODULE = tcltk
|
|
|
|
|
MAGICDIR = ..
|
|
|
|
|
SRCS = tclmagic.c
|
2021-01-04 13:11:21 +01:00
|
|
|
OBJS = $(subst .c,.o,${SRCS})
|
2017-04-25 14:41:48 +02:00
|
|
|
|
|
|
|
|
include ${MAGICDIR}/defs.mak
|
|
|
|
|
|
|
|
|
|
DFLAGS += -DMAGIC_DATE="\"`date`\""
|
2020-03-23 15:19:34 +01:00
|
|
|
CLEANS += magic.sh magic.tcl magicexec magicdnull ext2spice.sh ext2sim.sh
|
2017-04-25 14:41:48 +02:00
|
|
|
|
|
|
|
|
TCL_FILES = \
|
|
|
|
|
tkcon.tcl \
|
|
|
|
|
tkshell.tcl \
|
|
|
|
|
wrapper.tcl \
|
2023-11-18 11:46:49 +01:00
|
|
|
toolbar.tcl \
|
|
|
|
|
reorderLayers.tcl \
|
2017-04-25 14:41:48 +02:00
|
|
|
console.tcl \
|
|
|
|
|
techbuilder.tcl \
|
|
|
|
|
cellmgr.tcl \
|
2019-11-15 16:26:04 +01:00
|
|
|
drcmgr.tcl \
|
2017-08-02 04:14:42 +02:00
|
|
|
libmgr.tcl \
|
2017-04-25 14:41:48 +02:00
|
|
|
texthelper.tcl \
|
|
|
|
|
tools.tcl \
|
|
|
|
|
mazeroute.tcl \
|
|
|
|
|
strip_reflibs.tcl \
|
|
|
|
|
toolkit.tcl \
|
|
|
|
|
toolkit_rev0.tcl \
|
|
|
|
|
bsitools.tcl \
|
|
|
|
|
socketcmd.tcl \
|
2020-05-28 17:46:57 +02:00
|
|
|
readspice.tcl \
|
2017-04-25 14:41:48 +02:00
|
|
|
magic.tcl
|
|
|
|
|
|
|
|
|
|
BIN_FILES = \
|
2020-01-28 16:40:01 +01:00
|
|
|
$(DESTDIR)${INSTALL_BINDIR}/magic.sh \
|
|
|
|
|
$(DESTDIR)${INSTALL_BINDIR}/ext2spice.sh \
|
|
|
|
|
$(DESTDIR)${INSTALL_BINDIR}/ext2sim.sh
|
2017-04-25 14:41:48 +02:00
|
|
|
|
|
|
|
|
tcl-main: magicexec magicdnull magic.tcl magic.sh ext2spice.sh ext2sim.sh
|
|
|
|
|
|
Add TCL-embedded WASM build variant alongside the existing non-TCL build
Bump VERSION to 8.3.645.
magic.wasm can now be built as two variants packaged in the same npm
release: notcl/ (legacy, magic's own parser) and tcl/ (intubun/tcl 9.x
statically linked, commands evaluated by Tcl_EvalEx). The TCL fork is
pinned via npm/tcl.ref and cloned/built by magic itself — the tcl/
checkout is treated as read-only and built out-of-source into
magic/build-tcl-wasm/.
Configure layer:
- New usingTk variable decoupled from usingTcl in scripts/configure.in
+ scripts/configure, so --with-tcl --without-tk is finally a valid
combination. Native Linux Tcl+Tk builds keep their previous behaviour
(both flags default to enabled).
- When usingTk is empty, configure passes -DMAGIC_NO_TK so the small
number of remaining Tk callsites in tcltk/tclmagic.{h,c} compile out,
and TKCOMMON_SRCS / USE_TK_STUBS are omitted from the link.
WASM build orchestration:
- toolchains/emscripten/build-tcl-wasm.sh builds libtcl9.x.a + libtclstub.a
+ tclConfig.sh out-of-source from a pristine intubun/tcl checkout.
- npm/build.sh grew a --variant=<tcl|notcl|both> flag and writes its
outputs into npm/tcl/ and npm/notcl/. It also clones intubun/tcl with
autocrlf=false at the SHA pinned by npm/tcl.ref.
- magic/Makefile (WASM block only): magicWasm.o is now compiled with
DFLAGS_NOSTUB so Tcl_CreateInterp resolves to libtcl9.x directly
before tclStubsPtr is set. magic.js link pulls in LIB_SPECS_NOSTUB
and -ltclstub. After rules.mak include, magic: is a phony alias for
magic.js so the generic ${MODULE} recipe doesn't fight it.
- toolchains/emscripten/defs.mak: add -sUSE_ZLIB=1 (libtcl9 references
zlib), replace -sSTACK_SIZE=N with -Wl,-z,stack-size=N (emcc >=5
rejects the setting form).
- magic/magicWasm.c bootstraps the embedded interp under MAGIC_WRAPPER
(Tcl_CreateInterp -> Tcl_Init -> Tclmagic_Init) and routes
run_command through Tcl_EvalEx.
- magic/magicTop.c: gate MagicVersion/Revision/CompileTime on
!MAGIC_WRAPPER so they don't collide with the copies in
tcltk/tclmagic.c when both objects land in the same wasm binary.
npm package:
- Subpath exports: ".", "./tcl", "./notcl". Default import keeps the
pre-existing non-TCL behaviour for backward compatibility.
- examples/smoke-tcl.mjs exercises the TCL variant.
CI:
- main-wasm.yml clones intubun/tcl at the pinned ref, builds both
variants via npm/build.sh --variant=both, runs the existing notcl
test suite and the new TCL smoke test, and publishes only on a
v<x.y.z>... git tag. Tag name (minus the leading v) becomes the
npm version.
2026-05-17 21:41:03 +02:00
|
|
|
# In the WASM build the tcltk module ships only as libtcltk.o; there is no
|
|
|
|
|
# wish-like launcher binary, no magic.sh, etc. `make mains` iterates over
|
|
|
|
|
# PROGRAMS which now includes tcltk (because --with-tcl is on), so define a
|
|
|
|
|
# no-op `main` to keep that loop happy. The native build still uses tcl-main
|
|
|
|
|
# via `make all` → tcllibrary.
|
|
|
|
|
ifeq (${MAKE_WASM},1)
|
|
|
|
|
main:
|
|
|
|
|
@:
|
|
|
|
|
endif
|
|
|
|
|
|
2017-04-25 14:41:48 +02:00
|
|
|
install-tcl: magicexec magicdnull ${BIN_FILES} ${TCL_FILES}
|
2020-01-28 16:40:01 +01:00
|
|
|
${RM} $(DESTDIR)${INSTALL_TCLDIR}/magicexec
|
|
|
|
|
${CP} magicexec $(DESTDIR)${INSTALL_TCLDIR}/magicexec
|
|
|
|
|
${RM} $(DESTDIR)${INSTALL_TCLDIR}/magicdnull
|
|
|
|
|
${CP} magicdnull $(DESTDIR)${INSTALL_TCLDIR}/magicdnull
|
|
|
|
|
(cd $(DESTDIR)${INSTALL_TCLDIR}; ${RM} ${TCL_FILES})
|
2017-04-25 14:41:48 +02:00
|
|
|
for i in ${TCL_FILES}; do \
|
2020-01-28 16:40:01 +01:00
|
|
|
${CP} $$i $(DESTDIR)${INSTALL_TCLDIR}; done
|
|
|
|
|
(cd $(DESTDIR)${INSTALL_TCLDIR}; chmod 0755 tkcon.tcl tkshell.tcl)
|
2017-04-25 14:41:48 +02:00
|
|
|
|
|
|
|
|
magicexec: magicexec.c ${MAGICDIR}/defs.mak
|
2017-10-13 16:28:07 +02:00
|
|
|
${CC} ${CFLAGS} ${CPPFLAGS} ${DFLAGS_NOSTUB} ${LDFLAGS} magicexec.c \
|
2022-05-28 23:51:20 +02:00
|
|
|
-o magicexec ${LD_RUN_PATH} ${LIB_SPECS_NOSTUB} ${ZLIB_FLAG} \
|
|
|
|
|
${LIBS} ${GR_LIBS}
|
2017-04-25 14:41:48 +02:00
|
|
|
|
|
|
|
|
magicdnull: magicdnull.c ${MAGICDIR}/defs.mak
|
2017-10-13 16:28:07 +02:00
|
|
|
${CC} ${CFLAGS} ${CPPFLAGS} ${DFLAGS_NOSTUB} ${LDFLAGS} magicdnull.c \
|
2022-05-28 23:51:20 +02:00
|
|
|
-o magicdnull ${LD_RUN_PATH} ${LIB_SPECS_GRNULL} ${ZLIB_FLAG} \
|
|
|
|
|
${LIBS}
|
2017-04-25 14:41:48 +02:00
|
|
|
|
2021-01-04 13:11:21 +01:00
|
|
|
magic.tcl: magic.tcl.in ${MAGICDIR}/defs.mak ${MAGICDIR}/VERSION
|
2025-01-08 10:02:35 +01:00
|
|
|
${SED} -e /MAGIC_VERSION/s%MAGIC_VERSION%${MAGIC_VERSION}%g \
|
2017-04-25 14:41:48 +02:00
|
|
|
-e /MAGIC_REVISION/s%MAGIC_REVISION%${MAGIC_REVISION}%g \
|
2022-02-25 15:56:22 +01:00
|
|
|
-e /MAGIC_COMMIT/s%MAGIC_COMMIT%${MAGIC_COMMIT}%g \
|
2021-01-04 15:47:03 +01:00
|
|
|
magic.tcl.in > magic.tcl
|
2017-04-25 14:41:48 +02:00
|
|
|
|
|
|
|
|
magic.sh: magic.sh.in ${MAGICDIR}/defs.mak
|
2025-01-08 10:02:35 +01:00
|
|
|
${SED} -e /TCL_DIR/s%TCL_DIR%${TCLDIR}%g \
|
2017-04-25 14:41:48 +02:00
|
|
|
-e /TCLLIB_DIR/s%TCLLIB_DIR%${TCL_LIB_DIR}%g \
|
|
|
|
|
-e /WISH_EXE/s%WISH_EXE%${WISH_EXE}%g magic.sh.in > magic.sh
|
|
|
|
|
|
|
|
|
|
ext2spice.sh: ext2spice.sh.in ${MAGICDIR}/defs.mak
|
2025-01-08 10:02:35 +01:00
|
|
|
${SED} -e /TCL_DIR/s%TCL_DIR%${TCLDIR}%g \
|
2021-01-04 15:47:03 +01:00
|
|
|
ext2spice.sh.in > ext2spice.sh
|
2017-04-25 14:41:48 +02:00
|
|
|
|
|
|
|
|
ext2sim.sh: ext2sim.sh.in ${MAGICDIR}/defs.mak
|
2025-01-08 10:02:35 +01:00
|
|
|
${SED} -e /TCL_DIR/s%TCL_DIR%${TCLDIR}%g \
|
2021-01-04 15:47:03 +01:00
|
|
|
ext2sim.sh.in > ext2sim.sh
|
2017-04-25 14:41:48 +02:00
|
|
|
|
2020-01-28 16:40:01 +01:00
|
|
|
$(DESTDIR)${INSTALL_TCLDIR}/%: %
|
|
|
|
|
${RM} $(DESTDIR)${INSTALL_TCLDIR}/$*
|
|
|
|
|
${CP} $* $(DESTDIR)${INSTALL_TCLDIR}/$*
|
2017-04-25 14:41:48 +02:00
|
|
|
|
2020-01-28 16:40:01 +01:00
|
|
|
$(DESTDIR)${INSTALL_BINDIR}/magic.sh: magic.sh
|
|
|
|
|
${RM} $(DESTDIR)${INSTALL_BINDIR}/magic.sh $(DESTDIR)${INSTALL_BINDIR}/magic
|
|
|
|
|
${CP} magic.sh $(DESTDIR)${INSTALL_BINDIR}/magic
|
|
|
|
|
(cd $(DESTDIR)${INSTALL_BINDIR}; chmod 0755 magic)
|
2017-04-25 14:41:48 +02:00
|
|
|
|
2020-01-28 16:40:01 +01:00
|
|
|
$(DESTDIR)${INSTALL_BINDIR}/ext2spice.sh: ext2spice.sh
|
|
|
|
|
${RM} $(DESTDIR)${INSTALL_BINDIR}/ext2spice
|
|
|
|
|
${CP} ext2spice.sh $(DESTDIR)${INSTALL_BINDIR}/ext2spice
|
|
|
|
|
(cd $(DESTDIR)${INSTALL_BINDIR}; chmod 0755 ext2spice)
|
2017-04-25 14:41:48 +02:00
|
|
|
|
2020-01-28 16:40:01 +01:00
|
|
|
$(DESTDIR)${INSTALL_BINDIR}/ext2sim.sh: ext2sim.sh
|
|
|
|
|
${RM} $(DESTDIR)${INSTALL_BINDIR}/ext2sim
|
|
|
|
|
${CP} ext2sim.sh $(DESTDIR)${INSTALL_BINDIR}/ext2sim
|
|
|
|
|
(cd $(DESTDIR)${INSTALL_BINDIR}; chmod 0755 ext2sim)
|
2017-04-25 14:41:48 +02:00
|
|
|
|
2021-01-04 13:11:21 +01:00
|
|
|
# An additional dependency on the VERSION file
|
|
|
|
|
${OBJS}: ${MAGICDIR}/VERSION
|
|
|
|
|
|
2017-04-25 14:41:48 +02:00
|
|
|
include ${MAGICDIR}/rules.mak
|