
ROOT=../..

include $(ROOT)/Makefile.config

PROJECT=../bin/benchmark

BIN=$(PROJECT)
OBJ=globals.o benchmark.o client.o server.o util.o mcs_lock.o cs.o liblock_cs.o

DEPEND_OPTIONS=-MMD -MP -MF ".$*.d.tmp" -MT "$*.o" -MT ".$*.d"
DOM=then mv -f ".$*.d.tmp" ".$*.d"; else rm -f ".$*.d.tmp"; exit 1; fi

CFLAGS += -std=gnu99 -Wno-format-zero-length -g -Wall -D_GNU_SOURCE -O3

CXXFLAGS += $(CFLAGS)
LDFLAGS  += $(ROOT)/liblock/liblock.so -lm
Echo=@echo [$(PROJECT)]:

ifeq ($(shell uname),SunOS)
    MAKE=gmake
    CFLAGS += -I$(HOME)/usr/include/
    LDFLAGS += -lcpc
    ifeq ($(shell arch),i86pc) # PAPI doesn't support SunOS/i386
		CFLAGS += -DNO_PAPI
    else
		ifeq ($(shell arch),sun4)
            LDFLAGS += $(HOME)/usr/lib/libpapi.so
		endif
    endif
else
    MAKE=make
    LDFLAGS += -lpapi -lpthread -lnuma
endif

ifneq ($(shell arch),sun4)
    CFLAGS += -m64
endif

ifndef VERBOSE
    Verb := @
endif

DEPENDENCIES=$(patsubst %.o, .%.d, $(OBJ))

.PHONY: all bootstrap tidy clean distclean liblock
.SECONDARY:
.SUFFIXES:

all: liblock bootstrap

bootstrap: $(BIN)

# ../liblock/liblock.a

$(BIN): $(OBJ)
	$(Echo) Linking $@
	$(Verb) gcc -o $@ $^ $(LDFLAGS)

liblock:
	$(MAKE) -C $(LIBLOCK)

%.o: %.cc Makefile
	$(Echo) Compiling $<
	$(Verb) if gcc $(CXXFLAGS)  $(DEPEND_OPTIONS) -c "$<" -o "$@"; $(DOM)

%.o: %.cpp Makefile
	$(Echo) Compiling $<
	$(Verb) if gcc $(CXXFLAGS)  $(DEPEND_OPTIONS) -c "$<" -o "$@"; $(DOM)

%.o: %.cxx Makefile
	$(Echo) Compiling $<
	$(Verb) if gcc $(CXXFLAGS)  $(DEPEND_OPTIONS) -c "$<" -o "$@"; $(DOM)

%.o: %.c Makefile
	$(Echo) Compiling $<
	$(Verb) if gcc $(CFLAGS)  $(DEPEND_OPTIONS) -c "$<" -o "$@"; $(DOM)

%.s: %.c Makefile
	$(Echo) "Compiling $< (asm)"
	$(Verb) if gcc $(CFLAGS)  $(DEPEND_OPTIONS) -S "$<" -o "$@"; $(DOM)

tidy:
	rm -f *~ \#*

clean:
	$(Echo) Cleaning compilation files
	$(Verb) rm -f *.o .*.d $(MAIN)

distclean: clean
	$(Echo) Cleaning distribution
	$(Verb) rm -f $(BIN) $(PROJECT).a

ifneq ($(MAKECMDGOALS),tidy)
ifneq ($(MAKECMDGOALS),clean)
ifneq ($(MAKECMDGOALS),distclean)
-include $(DEPENDENCIES)
endif
endif
endif

