PROGRAMS = m32 m64

LIBRARIES = o32 n32 o64 n64

CC = bin/gcc
CPPFLAGS =
CFLAGS = -g -O2

CFLAGS-old = -mtls-dialect=gnu
CFLAGS-new = -mtls-dialect=gnu2
CFLAGS-m32 = -m32 -march=i686
CFLAGS-m64 = -m64

CFLAGS-o32 = $(CFLAGS-old) $(CFLAGS-m32)
CFLAGS-n32 = $(CFLAGS-new) $(CFLAGS-m32)
CFLAGS-o64 = $(CFLAGS-old) $(CFLAGS-m64)
CFLAGS-n64 = $(CFLAGS-new) $(CFLAGS-m64)

CXX = bin/gcc
CXXFLAGS =
CXXLIB = -Wl,-Bstatic,-lstdc++,-Bdynamic -lm

.PHONY: all clean run32-t run64-t run32-r run64-r
all: $(LIBRARIES) $(PROGRAMS)

$(LIBRARIES) $(PROGRAMS): $(srcdir)hp-timing.h $(srcdir)perf.h

$(PROGRAMS): %: $(srcdir)main.cc
	$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(CFLAGS) $(CFLAGS-$@) \
		$(LDFLAGS) $< -o $@ -ldl -export-dynamic $(LIBS) $(CXXLIB)

LIB_SOURCES = $(srcdir)lib.c
ALL_LIB_SOURCES = $(srcdir)begin.s $(LIB_SOURCES) $(srcdir)end.s

$(LIBRARIES): $(ALL_LIB_SOURCES)
	$(CC) $(CPPFLAGS) $(CFLAGS) $(CFLAGS-$@) \
		$(LDFLAGS) -fPIC -shared $(ALL_LIB_SOURCES) -o $@ $(LIBS)

clean:
	rm -f $(LIBRARIES) $(PROGRAMS)

out = out/$(shell uname -n)-$*$(if $(count),-n$(count),)

run32-r run64-r: run%-r : m% o% n% l%
	mkdir -p out
	$(SHELL) $(srcdir)run-with-lib l$* ./m$* \
		-r $(if $(count),-n $(count),) o$* n$* \
		> $(out)-r.out 2> $(out)-r.log

run32-t run64-t: run%-t : m% o% n% l%
	mkdir -p out
	$(SHELL) $(srcdir)run-with-lib l$* ./m$* \
		-t $(if $(count),-n $(count),) o$* n$* \
		> $(out)-t.out
