1# Requirements: GNU Make, GCC 4.0 or later 2# Options: DESTDIR, PREFIX, DATAMODEL(ILP32/LP64) 3 4PROG = ypsilon 5 6CPPFLAGS = -DNDEBUG -DSYSTEM_SHARE_PATH='"$(DESTDIR)$(DATADIR)"' 7 8CXXFLAGS = -x c++ ${CFLAGS} 9 10SRCS = file.cpp main.cpp vm0.cpp object_heap_compact.cpp subr_flonum.cpp vm1.cpp object_set.cpp \ 11 subr_hash.cpp vm2.cpp object_slab.cpp subr_list.cpp interpreter.cpp serialize.cpp \ 12 vm3.cpp port.cpp subr_others.cpp arith.cpp printer.cpp subr_port.cpp subr_r5rs_arith.cpp \ 13 equiv.cpp reader.cpp ffi.cpp subr_base.cpp bag.cpp \ 14 subr_unicode.cpp hash.cpp subr_base_arith.cpp ucs4.cpp ioerror.cpp subr_bitwise.cpp utf8.cpp \ 15 main.cpp subr_bvector.cpp violation.cpp object_factory.cpp \ 16 subr_ffi.cpp object_heap.cpp subr_fixnum.cpp bit.cpp list.cpp fasl.cpp socket.cpp subr_socket.cpp 17 18VPATH = src 19 20UNAME = $(shell uname -a) 21 22ifndef DATAMODEL 23 ifeq (, $(findstring x86_64, $(UNAME))) 24 ifeq (, $(findstring amd64, $(UNAME))) 25 DATAMODEL = ILP32 26 else 27 DATAMODEL = LP64 28 endif 29 else 30 DATAMODEL = LP64 31 endif 32endif 33 34ifneq (, $(findstring Linux, $(UNAME))) 35 ifeq ($(shell $(CXX) -dumpspecs | grep 'march=native'), ) 36 ifeq ($(DATAMODEL), ILP32) 37 CXXFLAGS += -march=i686 38 endif 39 else 40 CXXFLAGS += -march=native 41 endif 42 CXXFLAGS += -msse2 -mfpmath=sse 43 ifeq ($(DATAMODEL), ILP32) 44 CPPFLAGS += -DDEFAULT_HEAP_LIMIT=32 45 CXXFLAGS += -m32 46 LDFLAGS = -m32 47 ASFLAGS = --32 48 SRCS += ffi_stub_linux.s 49 else 50 CPPFLAGS += -DDEFAULT_HEAP_LIMIT=64 51 CXXFLAGS += -m64 52 LDFLAGS = -m64 53 ASFLAGS = --64 54 SRCS += ffi_stub_linux64.s 55 endif 56 LDLIBS = -lpthread -ldl 57endif 58 59ifneq (, $(findstring FreeBSD, $(UNAME))) 60 CPPFLAGS += -D__LITTLE_ENDIAN__ 61 ifeq ($(DATAMODEL), ILP32) 62 CPPFLAGS += -DDEFAULT_HEAP_LIMIT=32 63 CXXFLAGS += -m32 64 LDFLAGS = -m32 65 ASFLAGS = --32 66 SRCS += ffi_stub_freebsd.s 67 else 68 CPPFLAGS += -DDEFAULT_HEAP_LIMIT=64 69 CXXFLAGS += -m64 70 LDFLAGS = -m64 71 ASFLAGS = --64 72 SRCS += ffi_stub_freebsd64.s 73 endif 74 LDLIBS = -pthread 75endif 76 77ifneq (, $(findstring DragonFly, $(UNAME))) 78 CPPFLAGS += -D__LITTLE_ENDIAN__ 79 CPPFLAGS += -DDEFAULT_HEAP_LIMIT=64 80 CXXFLAGS += -m64 81 LDFLAGS = -m64 82 ASFLAGS = --64 83 SRCS += ffi_stub_freebsd64.s 84 LDLIBS = -pthread 85endif 86 87ifneq (, $(findstring OpenBSD, $(UNAME))) 88 ifeq ($(shell $(CXX) -dumpspecs | grep 'march=native'), ) 89 ifeq ($(DATAMODEL), ILP32) 90 CXXFLAGS += -march=i686 91 endif 92 else 93 CXXFLAGS += -march=native 94 endif 95 CPPFLAGS += -D__LITTLE_ENDIAN__ -DNO_TLS 96 CXXFLAGS += -msse2 -mfpmath=sse 97 ifeq ($(DATAMODEL), ILP32) 98 CPPFLAGS += -DDEFAULT_HEAP_LIMIT=32 99 CXXFLAGS += -m32 100 LDFLAGS = -m32 101 ASFLAGS = --32 102 SRCS += ffi_stub_openbsd.s 103 else 104 CPPFLAGS += -DDEFAULT_HEAP_LIMIT=64 105 CXXFLAGS += -m64 106 LDFLAGS = -m64 107 ASFLAGS = --64 108 SRCS += ffi_stub_openbsd64.s 109 endif 110 LDLIBS = -pthread 111endif 112 113ifneq (, $(findstring Darwin, $(UNAME))) 114 CXXFLAGS += -arch i386 -msse2 -mfpmath=sse 115 CPPFLAGS += -DNO_TLS 116 SRCS += ffi_stub_darwin.s 117endif 118 119OBJS = $(patsubst %.cpp, %.o, $(filter %.cpp, $(SRCS))) $(patsubst %.s, %.o, $(filter %.s, $(SRCS))) 120DEPS = $(patsubst %.cpp, %.d, $(filter %.cpp, $(SRCS))) 121 122.PHONY: all install uninstall sitelib stdlib check bench clean distclean 123 124all: $(PROG) 125 126$(PROG): $(OBJS) 127 $(CXX) $(LDFLAGS) $(LDLIBS) -o $@ $^ 128 129vm1.s: vm1.cpp 130 $(CXX) $(CXXFLAGS) $(CPPFLAGS) \ 131 \ 132 -fverbose-asm -S src/vm1.cpp 133 134vm1.o: vm1.cpp 135 $(CXX) $(CXXFLAGS) $(CPPFLAGS) \ 136 \ 137 -c src/vm1.cpp 138 139install: all stdlib sitelib 140 mkdir -p -m755 $(DESTDIR)$(PREFIX)/bin 141 mkdir -p -m755 $(DESTDIR)$(PREFIX)/share/man/man1 142 cp $(PROG) $(DESTDIR)$(PREFIX)/bin/$(PROG) 143 cp $(PROG).1 $(DESTDIR)$(PREFIX)/share/man/man1/$(PROG).1 144 chmod 755 $(DESTDIR)$(PREFIX)/bin/$(PROG) 145 chmod 644 $(DESTDIR)$(PREFIX)/share/man/man1/$(PROG).1 146 147uninstall: 148 -rm -rf $(DESTDIR)$(PREFIX)/share/$(PROG)/stdlib 149 -rm -rf $(DESTDIR)$(PREFIX)/share/$(PROG)/sitelib 150 -rm -f $(DESTDIR)$(PREFIX)/share/man/man1/$(PROG).1 151 -rm -f $(DESTDIR)$(PREFIX)/bin/$(PROG) 152 -rmdir $(DESTDIR)$(PREFIX)/share/$(PROG) 153 154stdlib: 155 mkdir -p -m755 $(DESTDIR)$(PREFIX)/share/$(PROG)/stdlib 156 find stdlib -type f -name '*.scm' | cpio -pdu $(DESTDIR)$(PREFIX)/share/$(PROG) 157 find $(DESTDIR)$(PREFIX)/share/$(PROG)/stdlib -type d -exec chmod 755 {} \; 158 find $(DESTDIR)$(PREFIX)/share/$(PROG)/stdlib -type f -exec chmod 644 {} \; 159 160sitelib: 161 mkdir -p -m755 $(DESTDIR)$(PREFIX)/share/$(PROG)/sitelib 162 find sitelib -type f -name '*.scm' | cpio -pdu $(DESTDIR)$(PREFIX)/share/$(PROG) 163 find $(DESTDIR)$(PREFIX)/share/$(PROG)/sitelib -type d -exec chmod 755 {} \; 164 find $(DESTDIR)$(PREFIX)/share/$(PROG)/sitelib -type f -exec chmod 644 {} \; 165 166check: all 167 @echo '----------------------------------------' 168 @echo 'r4rstest.scm:' 169 @./$(PROG) --heap-limit=128 --acc=/tmp --sitelib=./test:./sitelib:./stdlib ./test/r4rstest.scm 170 @echo '----------------------------------------' 171 @echo 'tspl.scm:' 172 @./$(PROG) --heap-limit=128 --acc=/tmp --sitelib=./test:./sitelib:./stdlib ./test/tspl.scm 173 @echo '----------------------------------------' 174 @echo 'arith.scm:' 175 @./$(PROG) --heap-limit=128 --acc=/tmp --sitelib=./test:./sitelib:./stdlib ./test/arith.scm 176 @echo '----------------------------------------' 177 @echo 'r5rs_pitfall.scm:' 178 @./$(PROG) --heap-limit=128 --acc=/tmp --sitelib=./test:./sitelib:./stdlib ./test/r5rs_pitfall.scm 179 @echo '----------------------------------------' 180 @echo 'syntax-rule-stress-test.scm:' 181 @./$(PROG) --heap-limit=128 --acc=/tmp --sitelib=./test:./sitelib:./stdlib ./test/syntax-rule-stress-test.scm 182 @echo '----------------------------------------' 183 @echo 'r6rs.scm:' 184 @./$(PROG) --heap-limit=128 --acc=/tmp --sitelib=./test:./sitelib:./stdlib ./test/r6rs.scm 185 @echo '----------------------------------------' 186 @echo 'r6rs-lib.scm:' 187 @./$(PROG) --heap-limit=128 --acc=/tmp --sitelib=./test:./sitelib:./stdlib ./test/r6rs-lib.scm 188 @echo '----------------------------------------' 189 @echo 'Passed all tests' 190 @rm -f ./test/tmp* 191 192eval: all 193 ./$(PROG) --heap-limit=128 --acc=/tmp --sitelib=./sitelib:./stdlib 194 195bench: all 196 ./$(PROG) --heap-limit=128 --acc=/tmp --sitelib=./test:./sitelib:./stdlib -- bench/run-ypsilon.scm 197 198clean: 199 rm -f *.o *.d 200 rm -f $(HOME)/.ypsilon/*.cache 201 rm -f $(HOME)/.ypsilon/*.time 202 203distclean: clean 204 rm -f tmp1 tmp2 tmp3 spheres.pgm 205 find . -type f -name .DS_Store -print0 | xargs -0 rm -f 206 find . -type f -name '*~' -print0 | xargs -0 rm -f 207 rm -f ./test/tmp* 208 rm -f ./bench/gambit-benchmarks/tmp* 209 rm -f ./bench/gambit-benchmarks/spheres.pgm 210 rm -f -r ./build/* ./build-win32/* ./setup-win32/Debug ./setup-win32/Release 211 rm -f ./ypsilon.xcodeproj/*.mode1v3 ./ypsilon.xcodeproj/*.pbxuser 212 rm -f ./ypsilon.ncb 213 rm -f ./ypsilon 214 215%.d: %.cpp 216 $(SHELL) -ec '$(CXX) -MM $(CPPFLAGS) $< \ 217 | sed '\''s/\($*\)\.o[ :]*/\1.o $@ : /g'\'' > $@; [ -s $@ ] || rm -f $@' 218 219ifeq ($(findstring clean, $(MAKECMDGOALS)), ) 220 ifeq ($(findstring uninstall, $(MAKECMDGOALS)), ) 221 -include $(DEPS) 222 endif 223endif 224 225 226 227