180 lines
5.4 KiB
Makefile
Executable File
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
|
|
|
|
#------------------------------------------------------------------------
|
|
|
|
|
|
|