
noinst_PROGRAMS = eviction_macro sr tiny
nodist_sr_SOURCES = sr.c
nodist_tiny_SOURCES = tiny.c

GEN4ASM_FLAGS = -g6 -a -b
ASM_CPPFLAGS = 				\
	-x assembler-with-cpp 		\
	-P -DGEN_ASM -DSANDYBRIDGE 	\
	-I$(top_srcdir)/lib 		\
	-I$(builddir)

evict.h : eviction_macro
	$(builddir)/eviction_macro > evict.h

sr.cpp : sr.g4a
	$(srcdir)/pre_cpp.py $(srcdir)/sr.g4a > $@.tmp && mv $@.tmp $@
sr.asm : sr.cpp evict.h
	$(CPP) $(ASM_CPPFLAGS) -o $@ sr.cpp
sr.c: sr.asm
	$(GEN4ASM) $(GEN4ASM_FLAGS) sr.asm -o $@
sr.o : sr.c
	$(CC) -c -o $@ sr.c
sr$(EXEEXT) : sr.o
	$(OBJCOPY) -O binary -K gen_eu_bytes sr.o $@

# Test.g4a is the simplest possible system routine we can run on the GPU
# without actually hanging the system. The system routine kernel is very
# simple and doesn't depend on any external communication to run.
tiny.cpp : test.g4a
	$(srcdir)/pre_cpp.py $(srcdir)/test.g4a > $@.tmp && mv $@.tmp $@
tiny.asm : tiny.cpp
	$(CPP) $(ASM_CPPFLAGS) -o $@ tiny.cpp
tiny.c: tiny.asm
	$(GEN4ASM) $(GEN4ASM_FLAGS) tiny.asm -o $@
tiny.o : tiny.c
	$(CC) -c -o $@ tiny.c
tiny$(EXEEXT) : tiny.o
	$(OBJCOPY) -O binary -K gen_eu_bytes tiny.o $@

CLEANFILES = evict.h sr.cpp sr.asm sr.c tiny.cpp tiny.asm tiny.c
EXTRA_DIST = pre_cpp.py sr.g4a test.g4a
