include Makefile.common

HEADERS =

# HEADERS = ansiwrapper.h  dllist.h       localheap.h    oneheap.h         selectfree.h       mmapheap.h    \
          bysizeheap.h   freesllist.h   lockedheap.h   onepageheap.h     storebysizeheap.h  threadheap.h  \
          combineheap.h  hoardheap.h    mulpageheap.h  ownerheap.h       semilockedheap.h   zoneheap.h    \
          cpuinfo.h      nullheap.h     spinlock.h     segregatedheap.h  sanitycheckheap.h  logheap.h     \
	  statsheap.h    storeheap.h

SRCS = mallocwrap.cpp threadheap.cpp processheap.cpp superblock.cpp wrapper.cpp hoardheap.cpp arch-specific.cpp dlmalloc.c benchmarks/testmymalloc/testmymalloc.cpp benchmarks/threadtest/threadtest.cpp

ifdef WINDOWS
TARGETS = libhoard.dll
else
TARGETS = libhoard.so
endif

.INTERMEDIATE: libhoard.o libhoard.obj

ifdef WINDOWS
OBJSUFFIX = obj
else
OBJSUFFIX = o
endif

OBJS = threadheap.$(OBJSUFFIX) processheap.$(OBJSUFFIX) superblock.$(OBJSUFFIX) hoardheap.$(OBJSUFFIX) arch-specific.$(OBJSUFFIX) dlmalloc.$(OBJSUFFIX)

ifeq ($(WORKSHOP),1)
arch-specific.o: arch-specific.cpp sparc-interchange.il $(SRCS)
	$(CXX) $(CXXFLAGS) sparc-interchange.il -c $< -o $@
endif

ifeq ($(UNIX),1)
OBJS += mallocwrap.$(OBJSUFFIX)
libhoard.so: libhoard.o $(OBJS)
	$(LIBSO) libhoard.o $(OBJS) -o $@ $(LIBS)

libhoard.o: libhoard.cpp $(SRCS)
	$(CXX) $(CXXFLAGS) -c $< -o $@
endif

ifeq ($(WINDOWS),1)
libhoard.def:	libhoard.cpp $(SRCS)
	$(CXX) $(CXXFLAGS) /c $<
	cmd /c filter libhoard.def

libhoard.dll:	libhoard.cpp libhoard.def $(SRCS) $(OBJS)
#	$(CXX) $(CXXFLAGS) /c $<
	$(LIBSO) $(CXXFLAGS) $< $(OBJS) /link /dll /def:libhoard.def /force:multiple
endif
