

CROSS = 
CC = $(CROSS)gcc
CXX = $(CROSS)g++

DEBUG = 
CFLAGS = $(DEBUG) -Wall -c -Wno-comment
LDFLAGS = -lm
MV = mv -f
RM = rm -rf
LN = ln -sf

TARGET = imlib_base_test


TOP_PATH = $(shell pwd)
SRC_PATH = $(TOP_PATH)

INC_PATH = 
INC_PATH += -I$(TOP_PATH)/../include 



MOD_PATH = $(TOP_PATH)/..
MOD_LIB_PATH = $(MOD_PATH)/lib
MOD_INC_PATH = $(MOD_PATH)/include

SRC_PATH +=  $(MOD_PATH)/src
DIRS = $(shell find $(SRC_PATH) -maxdepth 3 -type d)
FILES = $(foreach dir, $(DIRS), $(wildcard $(dir)/*.cpp))


##########################################################
# modules
##########################################################
modules = 
MODULES_PATH = $(foreach m, $(modules), $(MOD_PATH)/$(m))


##########################################################
# srcs
##########################################################
SRCS_CPP += $(foreach dir, $(DIRS), $(wildcard $(dir)/*.cpp))
SRCS_CC += $(foreach dir, $(DIRS), $(wildcard $(dir)/*.cc))
SRCS_C += $(foreach dir, $(DIRS), $(wildcard $(dir)/*.c))


##########################################################
# objs
##########################################################
OBJS_CPP = $(patsubst %.cpp, %.o, $(SRCS_CPP))
OBJS_CC = $(patsubst %.cc, %.o, $(SRCS_CC))
OBJS_C = $(patsubst %.c, %.o, $(SRCS_C))

##########################################################
# paths
##########################################################
INC_PATH += -I$(MOD_INC_PATH)
INC_PATH += -I$(MOD_PATH)
LIB_PATH += -L$(TOP_PATH)/lib
LIB_PATH += -L$(MOD_LIB_PATH)

##########################################################
# libs
##########################################################

##########################################################
# building
##########################################################
all:$(TARGET) 

$(TARGET) : $(OBJS_CPP) $(OBJS_CC) $(OBJS_C)
	@ for i in $(MODULES_PATH); \
	do \
	make -C $$i; \
	done

	$(CXX) $^ -o $@ $(LIB_PATH) $(LIBS) $(LDFLAGS)
	# $(AR) -r libimlib.a $(OBJS_C) 
	@ echo Create $(TARGET) ok...

$(OBJS_CPP):%.o : %.cpp
	$(CXX) $(CFLAGS) $< -o $@ $(INC_PATH)

$(OBJS_CC):%.o : %.cc
	$(CC) $(CFLAGS) $< -o $@ $(INC_PATH)

$(OBJS_C):%.o : %.c
	$(CC) $(CFLAGS) $< -o $@ $(INC_PATH)

.PHONY : clean
clean:
	@ $(RM) $(TARGET) $(OBJS_CPP) $(OBJS_CC) $(OBJS_C)
	# @ $(RM) libimlib.a
	@ for i in $(MODULES_PATH); \
	do \
	make clean -C $$i; \
	done
	@echo clean all...

clean_o:
	@ $(RM) $(OBJS_CPP) $(OBJS_CC) $(OBJS_C)
	@echo clean all...

rebuild :
	make clean
	make