magic/magic/Makefile

124 lines
4.6 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)
# magicWasm.c bootstraps the embedded Tcl interp by calling Tcl_CreateInterp /
# Tcl_Init before tclStubsPtr is initialised. With -DUSE_TCL_STUBS those calls
# expand to (*tclStubsPtr->...)() and dereference a NULL stubs pointer; so
# this one file must be compiled with DFLAGS_NOSTUB (= DFLAGS without
# -DUSE_TCL_STUBS). All other files keep using stubs.
magicWasm.o: magicWasm.c
@echo --- compiling magic/magicWasm.o '(no Tcl stubs)'
${RM} magicWasm.o
${CC} ${CFLAGS} ${CPPFLAGS} ${DFLAGS_NOSTUB} -c $< -o $@
magic.js: lib${MODULE}.o ${EXTRA_LIBS}
@echo --- building main magic WASM
${RM} magic.js magic.wasm
ifneq (${TCL_LIB_DIR},)
# TCL variant: pull in the main TCL archive (LIB_SPECS_NOSTUB → -ltcl9.x) and
# the stub-bootstrap archive (-ltclstub). Both are required: magic's objects
# use USE_TCL_STUBS macros (resolved by tclStubsPtr from libtclstub.a), and
# tclStubsPtr itself must point into the real TCL implementation (libtcl9.x.a).
${CC} ${CFLAGS} ${CPPFLAGS} ${DFLAGS} ${LDFLAGS} lib${MODULE}.o ${EXTRA_LIBS} -o magic.js ${LIBS} ${LIB_SPECS_NOSTUB} -L${TCL_LIB_DIR} -ltclstub
else
${CC} ${CFLAGS} ${CPPFLAGS} ${DFLAGS} ${LDFLAGS} lib${MODULE}.o ${EXTRA_LIBS} -o magic.js ${LIBS}
endif
endif
main: magic proto.magicrc
ifeq (${MAKE_WASM},1)
@bash ${MAGICSRC}/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 $@ ${LDFLAGS} ${LDDL_FLAGS} ${LD_RUN_PATH} \
${LD_FIRST_LIBS} ${EXTRA_LIBS} ${LD_EXTRA_LIBS} \
-lc ${LIBS} ${LIB_SPECS}
proto.magicrc: proto.magicrc.in
${MCPP} ${GR_DFLAGS} ${DFLAGS} $< > 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} $< $(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} $< $(DESTDIR)${INSTALL_SYSDIR}/.initrc
$(DESTDIR)${INSTALL_SYSDIR}/magicps.pro: magicps.pro
${RM} $(DESTDIR)${INSTALL_SYSDIR}/magicps.pro
${CP} $< $(DESTDIR)${INSTALL_SYSDIR}/magicps.pro
include ${MAGICDIR}/rules.mak
ifeq (${MAKE_WASM},1)
# rules.mak defines `${MODULE}` (= `magic`) with a recipe that links a native
# executable without the TCL libraries. For the WASM build the real artifact
# is `magic.js` (+ `magic.wasm`), so override the target to be a phony alias
# that just rebuilds magic.js. Must come after the include so make uses this
# recipe instead of rules.mak's.
.PHONY: magic
magic: magic.js
@:
endif