#vim: set ft=make: 

CXX=@CXX@
CXXFLAGS=@CXXFLAGS@
srcdir=@srcdir@
VPATH=${srcdir}
TOOLS=${srcdir}/../build
CXXVENDOR=@CXXVENDOR@
PLATFORM="@PLATFORM@"
NULL =

INCLUDES += 
CXXFLAGS += $(INCLUDES)
BASECXXFLAGS = -Wall -Werror -Wno-null-arithmetic -Wno-invalid-offsetof -g3 -O0

CPPSRCS = \
	Array.cpp                  \
	BytecodeCompiler.cpp       \
	BytecodeEmitter.cpp	   \
	CompileContext.cpp         \
        Exception.cpp              \
        FixedArray.cpp             \
        Functions.cpp              \
	Heap.cpp                   \
        Interpreter.cpp            \
	Modules.cpp                \
	NameBinding.cpp            \
	Parser.cpp                 \
	Opcodes.cpp                \
	PoolAllocator.cpp          \
	Reference.cpp              \
	RootScopes.cpp             \
	Scanner.cpp                \
	Scopes.cpp                 \
	SemanticAnalysis.cpp       \
	Spaces.cpp                 \
	Stack.cpp                  \
	TypeManager.cpp            \
	Types.cpp                  \
	Zone.cpp                   \
	main.cpp                   \
	$(NULL)

ifeq ("darwin", $(PLATFORM))
CPPSRCS += \
	Platform-Posix.cpp         \
	$(NULL)
endif
ifeq ("linux", $(PLATFORM))
CPPSRCS += \
	Platform-Posix.cpp         \
	$(NULL)
endif

default: all

OBJECTS := $(CPPSRCS:%.cpp=%.o)

ifeq ($(CXXVENDOR), microsoft)

CXXFLAGS += /DWIN32 /D_WINDOWS

%.o: %.cpp
	$(CXX) $(CXXFLAGS) /Fo$@ /c /TP /nologo $<
else

%.o: %.cpp
	$(CXX) $(BASECXXFLAGS) $(CXXFLAGS) -c -o $@ -Wp,-MD,.deps/$(patsubst %.o,%.d,$@) $<

endif

#$(CXX) $(BASECXXFLAGS) $(CXXFLAGS) -c -o $@ -Wp,-MD,.deps/$(basename $(@F)).pp $<

DEPEND_FILES := $(strip $(wildcard .deps/*.d))

ifneq (,$(DEPEND_FILES))
DEPEND_RESULTS = $(shell $(TOOLS)/mddepend.pl - $(DEPEND_FILES))
$(eval $(DEPEND_RESULTS))
endif

all: foobar

foobar: libfoobar.a main.o
	$(CXX) main.o libfoobar.a -lpthread -o foobar

libfoobar.a: $(OBJECTS)
	$(AR) -crs libfoobar.a $(OBJECTS)

FORCE:

clean:
	rm -f .deps/*.d
	rm -f *.o
	rm -f libfoobar.a
	rm -f foobar

