.PHONY: all clean

.DEFAULT_GOAL = all

# --------------------------------------------------------------------------
# Zu uebersetzende Quelldateien (Wichtig: vor common.mk definieren!)
C_SOURCES = $(shell find . -name "*.c")
CC_SOURCES = $(shell find . -name "*.cc")

# --------------------------------------------------------------------------
# Globale Variablen und Standard-Rezepte einbinden
VERBOSE = @
OBJDIR = ./build
DEPDIR = ./dep
CXX = g++
CC = gcc

WARNFLAGS = -Wall -Wextra -Werror
OPTFLAGS = -O3
#OPTFLAGS = -Og -g
CXXFLAGS = -I. -Iinclude $(OPTFLAGS) $(WARNFLAGS)
CCFLAGS = -I. -Iinclude $(OPTFLAGS) $(WARNFLAGS)

# Namen der Unterverzeichnisse mit den Quelltexten
VPATH = $(sort $(dir $(C_SOURCES) $(CC_SOURCES)))

# -------------------------------------------------------------------------
# Listen mit den Objektdateien, die beim Kompilieren entstehen:
# (Die Eingabevariablen werden vom eigentlichen Makefile zwar erst spaeter
# definiert, sind aber zum Auswertezeitpunkt *dieser* Variablen schon
# verfuegbar.)
OBJECTS = $(notdir $(CC_SOURCES:.cc=.o)) $(notdir $(C_SOURCES:.c=.o))
DEP_FILES = $(patsubst %.o,$(DEPDIR)/%.d,$(OBJECTS))
OBJPRE = $(addprefix $(OBJDIR)/,$(OBJECTS))
MAKEFILE_LIST = Makefile

all: $(OBJDIR)/lwt.a

$(OBJDIR)/lwt.a: $(OBJDIR)/init.o $(OBJDIR)/scheduler.o $(OBJDIR)/die.o
	$(VERBOSE) ar rcs $@ $^

$(DEPDIR)/%.d : %.c $(MAKEFILE_LIST)
	@echo "DEP		$@"
	@if test \( ! \( -d $(@D) \) \) ;then mkdir -p $(@D);fi
	$(VERBOSE) $(CXX) $(CXXFLAGS) -MM -MT $(OBJDIR)/$*.o -MF $@ $<

$(DEPDIR)/%.d : %.cc $(MAKEFILE_LIST)
	@echo "DEP		$@"
	@if test \( ! \( -d $(@D) \) \) ;then mkdir -p $(@D);fi
	$(VERBOSE) $(CXX) $(CXXFLAGS) -MM -MT $(OBJDIR)/$*.o -MF $@ $<

$(OBJDIR)/%.o : %.c $(MAKEFILE_LIST)
	@echo "CXX		$@"
	@if test \( ! \( -d $(@D) \) \) ;then mkdir -p $(@D);fi
	$(VERBOSE) $(CC) -c $(CCFLAGS) -o $@ $<

$(OBJDIR)/%.o : %.cc $(MAKEFILE_LIST)
	@echo "CXX		$@"
	@if test \( ! \( -d $(@D) \) \) ;then mkdir -p $(@D);fi
	$(VERBOSE) $(CXX) -c $(CXXFLAGS) -o $@ $<


clean:	
	@echo "rm		$(OBJDIR)"
	$(VERBOSE) rm -rf $(OBJDIR)
	@echo "rm		$(DEPDIR)"
	$(VERBOSE) rm -rf $(DEPDIR)



ifneq ($(MAKECMDGOALS),clean)
-include $(DEP_FILES)
endif


