# Copyright (c) 2006 The Regents of The University of Michigan
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
# met: redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer;
# redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution;
# neither the name of the copyright holders nor the names of its
# contributors may be used to endorse or promote products derived from
# this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
# Authors: Nathan Binkert
#          Steve Reinhardt

CC?= gcc
CXX?= g++
PYTHON?=/usr/bin/env python

CURDIR?= $(shell /bin/pwd)
SRCDIR?= $(CURDIR)/..

CCFLAGS= -g -O0 -MMD -I. -I$(SRCDIR) -I- -DTRACING_ON=0
MYSQL= -I/usr/include/mysql -L/usr/lib/mysql -lmysqlclient

VPATH=$(SRCDIR):$(CURDIR)

default:
	@echo "You must specify a target"

base/traceflags.cc base/traceflags.hh: $(SRCDIR)/base/traceflags.py
	mkdir -p base; \
	cd base; \
	$(PYTHON) $<

bitvectest: test/bitvectest.cc
	$(CXX) $(CCFLAGS) -o $@ $^

circletest: test/circletest.cc base/circlebuf.cc
	$(CXX) $(CCFLAGS) -o $@ $^

cprintftest: test/cprintftest.cc base/cprintf.cc
	$(CXX) $(CCFLAGS) -o $@ $^

initest: test/initest.cc base/str.cc base/inifile.cc base/cprintf.cc
	$(CXX) $(CCFLAGS) -o $@ $^

lrutest: test/lru_test.cc
	$(CXX) $(CCFLAGS) -o $@ $^

nmtest: test/nmtest.cc base/output.cc base/hostinfo.cc base/cprintf.cc base/misc.cc base/loader/object_file.cc base/loader/symtab.cc base/misc.cc base/str.cc base/loader/aout_object.cc base/loader/ecoff_object.cc base/loader/elf_object.cc
	$(CXX) $(CCFLAGS) -I/n/ziff/z/binkertn/build/work/ALPHA_FS -lelf -o $@ $^

offtest: test/offtest.cc
	$(CXX) $(CCFLAGS) -o $@ $^

rangetest: test/rangetest.cc base/range.cc base/str.cc
	$(CXX) $(CCFLAGS) -o $@ $^

STATTEST+= base/cprintf.cc base/hostinfo.cc base/misc.cc base/mysql.cc
STATTEST+= base/python.cc base/str.cc base/time.cc 
STATTEST+= base/statistics.cc base/stats/mysql.cc base/stats/python.cc
STATTEST+= base/stats/statdb.cc base/stats/text.cc base/stats/visit.cc
STATTEST+= test/stattest.cc 
stattest: $(STATTEST)
	$(CXX) $(CCFLAGS) $(MYSQL) -o $@ $^ 

strnumtest: test/strnumtest.cc base/str.cc
	$(CXX) $(CCFLAGS) -o $@ $^

symtest: test/symtest.cc base/misc.cc base/symtab.cc base/str.cc
	$(CXX) $(CCFLAGS) -o $@ $^

tokentest: test/tokentest.cc base/str.cc
	$(CXX) $(CCFLAGS) -o $@ $^

TRACE+=test/tracetest.cc base/trace.cc base/trace_flags.cc base/cprintf.cc
TRACE+=base/str.cc base/misc.cc
tracetest: $(TRACE)
	$(CXX) $(CCFLAGS) -o $@ $^

clean:
	@rm -rf *test *~ .#* *.core core base
.PHONY: clean
