vx-scheme/src/Makefile

180 lines
5.4 KiB
Makefile
Executable File

VERSION = 0.7
PKG = vx-scheme-$(VERSION)
OBJ = cell.o ctx.o subr.o io.o symtab.o
# Three flavors
INTERP_OBJ = $(OBJ) interp.o
BOOTSTRAP_OBJ = $(OBJ) interp.o vm.o
VM_OBJ = $(OBJ) vm.o lib.o _library.o
VM_COMP_OBJ = $(VM_OBJ) _compiler.o
#
UNIX_OBJ = u-main.o
PROGRAM = vx-scheme
DEFVER = -DVERSION=$(VERSION)
CFLAGS = -ansi -g -O2 -fno-exceptions -fno-rtti -Wall $(DEFVER)
CC = gcc
TC = ../testcases
all: vxs-interp vx-scheme
vxs-interp: $(INTERP_OBJ) $(UNIX_OBJ)
$(CC) $(CFLAGS) -o $@ $^ -lstdc++ -lc -lm
vxs-bootstrap: $(BOOTSTRAP_OBJ) $(UNIX_OBJ)
$(CC) $(CFLAGS) -o $@ $^ -lstdc++ -lc -lm
vx-scheme: $(VM_COMP_OBJ) $(UNIX_OBJ)
$(CC) $(CFLAGS) -o $@ $^ -lstdc++ -lc -lm
_library.cpp _compiler.cpp: compiler.scm bootstrap.scm library.scm vxs-bootstrap
./vxs-bootstrap . < bootstrap.scm
# Build the standalone scheme compiler. This runs the compile-file.scm
# script on itself, producing c code, which is then compiled and linked.
scheme-compiler: $(VM_COMP_OBJ) $(UNIX_OBJ) compile-file.scm vx-scheme
./vx-scheme ./compile-file.scm < compile-file.scm \
> _compile-file.cpp
$(CC) $(CFLAGS) -c _compile-file.cpp
$(CC) $(CFLAGS) -o $@ $(VM_COMP_OBJ) $(UNIX_OBJ) \
_compile-file.o -lstdc++ -lm
# Precompiled objects! Run the scheme-compiler to produce bytecode in
# C++ format, compile and link. The result is a standalone executable
# with no compiler, just the raw bytecode and the VM. This rule will
# build a standalone executable for anything in the testcases
# directory. Example: "make pi".
%: ../testcases/%.scm scheme-compiler
./scheme-compiler $< > _$(basename $(notdir $<)).cpp
$(CC) $(CFLAGS) -c _$(basename $(notdir $<)).cpp
$(CC) $(CFLAGS) -o $@ $(VM_OBJ) $(UNIX_OBJ) \
_$(basename $(notdir $<)).o -lstdc++ -lm
# Standard object compilation rule
%.o: %.cpp
$(CC) $(CFLAGS) -c $<
# warning: this clean is pretty thorough!
clean:
rm -f *.o *.a *.exe vxs-interp vxs-bootstrap vx-scheme
rm -f scheme-compiler
rm -f _compile-file.cpp _*.cpp
find .. -name '*~' -print | xargs rm -f
find .. -name '#*#' -print | xargs rm -f
find .. -name '.#*' -print | xargs rm -f
rm -rf $(TC)/*.out $(TC)/tmp[123]
rm -rf *.core *.stackdump $(TC)/*.core $(TC)/*.stackdump
rm -rf ../tornado/target-shell/default/*
rm -f ../tornado/target-shell/Makefile
rm -rf ../tornado/vx-scheme/SIMNTgnu/*
rm -rf ../tornado/vx-scheme/SIMNTgnu/.*.swp
rm -f ../tornado/vx-scheme/Makefile
rm -f ../lib/slib_* ../lib/slibcat
rm -f core core.*
# We don't want to distribute any Wind River simulator binary--just
# the project files. So we clean before rolling a distro. We nuke
# the tornado makefiles so that the dependencies will be generated
# with the correct absolute pathnames.
distro: clean
(cd ../..; tar czhf $(PKG).tgz $(PKG)/)
(cd ../..; zip -q -r $(PKG).zip $(PKG)/)
# Testing: run the test suite. If SLIB is installed, smoke-test it.
test: test-interp test-compile
TESTARENA = SLABSIZE=1000000
test-interp: vxs-interp
@echo '========== TESTING INTERPRETER =========='
@if [ -d /usr/share/slib ]; then \
(cd ../lib; ../src/vxs-interp < vx-slib-test.scm); \
fi
@(cd ../testcases; $(TESTARENA) ../src/vxs-interp < vx-test.scm)
test-compile: vx-scheme
@echo '========== TESTING COMPILER =========='
@if [ -d /usr/share/slib ]; then \
(cd ../lib; ../src/vx-scheme < vx-slib-test.scm); \
fi
@(cd ../testcases; $(TESTARENA) ../src/vx-scheme < vx-test.scm)
#----------------------------------------------------------------------
#
# OS Adaptations (Don't try these, you don't have the right compiler.
# For VxWorks architectures, create new builds in the Tornado project.
#
OUT = scheme.out
VX_CFLAGS = $(CFLAGS) -DVXWORKS -I/w/gnu-t3/target/h
$(ARCH)-OBJ = $(OBJ:%=obj-$(ARCH)/%) obj-$(ARCH)/vx-main.o
$(ARCH)-ALLOBJ = $($(ARCH)-OBJ) obj-$(ARCH)/_ctdt.o
obj-$(ARCH):
mkdir $@
obj-$(ARCH)/%.o: %.cpp
$($(ARCH)-GC++) $(VX_CFLAGS) -c $^ -o $@
obj-$(ARCH)/_ctdt.o: obj-$(ARCH)/_ctdt.c
$($(ARCH)-GCC) -o $@ -c $^
obj-$(ARCH)/_ctdt.c: $($(ARCH)-OBJ)
$($(ARCH)-NM) $($(ARCH)-OBJ) | $(MUNCH) > $@
obj-$(ARCH)/$(OUT): obj-$(ARCH) $($(ARCH)-ALLOBJ)
$($(ARCH)-LD) -r -o $@ $($(ARCH)-ALLOBJ)
obj-$(ARCH)/size.out: obj-$(ARCH)/$(OUT) $($(ARCH)-ALLOBJ)
$($(ARCH)-SIZE) $^ | tee $@
$(ARCH)-GC++ = $($(ARCH)-GC)-c++
$(ARCH)-GCC = $($(ARCH)-GC)-gcc
$(ARCH)-LD = $($(ARCH)-GC)-ld
$(ARCH)-NM = $($(ARCH)-GC)-nm
$(ARCH)-SIZE = $($(ARCH)-GC)-size
MUNCH = tclsh8.3 /w/gnu-t3/host/src/hutils/munch.tcl
GCC_BASE = /w/gnu-t3/host/x86-freebsd/bin
#-----------------------------------------------------------------------
#
# Architecture-specific material
#
simpc-GC = $(GCC_BASE)/i386-pc-mingw32
simpc:
$(MAKE) ARCH=simpc obj-simpc/$(OUT)
arm-GC = $(GCC_BASE)/arm-wrs-vxworks
arm:
$(MAKE) ARCH=arm obj-arm/$(OUT)
ppc-GC = $(GCC_BASE)/powerpc-wrs-vxworks
ppc:
$(MAKE) ARCH=ppc obj-ppc/$(OUT)
m68k-GC = $(GCC_BASE)/m68k-wrs-vxworks
m68k:
$(MAKE) ARCH=m68k obj-m68k/$(OUT)
#------------------------------------------------------------------------
#
# Dependencies
#
cell.o: cell.cpp vx-scheme.h
vm.o: vm.cpp vx-scheme.h
subr.o: subr.cpp vx-scheme.h
io.o: io.cpp vx-scheme.h
lib.o: lib.cpp vx-scheme.h
interp.o: interp.cpp vx-scheme.h
symtab.o: symtab.cpp vx-scheme.h
u-main.o: u-main.cpp vx-scheme.h
vx-main.o: vx-main.cpp vx-scheme.h
_compiler.o: _compiler.cpp
#------------------------------------------------------------------------