#-----[ Directory ]----------------------------------------

DIR_LIB				= ./lib
DIR_CACHE			= ./Cache
DIR_DATA			= ./Data
DIR_ENDIANNESS			= ./Endianness
DIR_QUEUE			= ./Queue
DIR_RAMLOCK			= ./RamLock
DIR_SIM2OS			= ./Sim2OS
DIR_TTY   			= ./TTY

#-----[ Variable ]-----------------------------------------
ENTITY                         ?=	Environment

LIBRARY_NAME			= Environment
LIBRARY_FILE			= $(DIR_LIB)/lib$(LIBRARY_NAME).a

OBJECTS_DEPS			= 	$(patsubst $(DIR_CACHE)/$(DIR_SRC)/%.cpp,$(DIR_CACHE)/$(DIR_OBJ)/%.o,$(wildcard $(DIR_CACHE)/$(DIR_SRC)/*.cpp))			\
					$(patsubst $(DIR_DATA)/$(DIR_SRC)/%.cpp,$(DIR_DATA)/$(DIR_OBJ)/%.o,$(wildcard $(DIR_DATA)/$(DIR_SRC)/*.cpp))			\
					$(patsubst $(DIR_DATA)/$(DIR_SRC)/%.c,$(DIR_DATA)/$(DIR_OBJ)/%.o,$(wildcard $(DIR_DATA)/$(DIR_SRC)/*.c))			\
					$(patsubst $(DIR_ENDIANNESS)/$(DIR_SRC)/%.cpp,$(DIR_ENDIANNESS)/$(DIR_OBJ)/%.o,$(wildcard $(DIR_ENDIANNESS)/$(DIR_SRC)/*.cpp))	\
					$(patsubst $(DIR_QUEUE)/$(DIR_SRC)/%.cpp,$(DIR_QUEUE)/$(DIR_OBJ)/%.o,$(wildcard $(DIR_QUEUE)/$(DIR_SRC)/*.cpp))			\
					$(patsubst $(DIR_RAMLOCK)/$(DIR_SRC)/%.cpp,$(DIR_RAMLOCK)/$(DIR_OBJ)/%.o,$(wildcard $(DIR_RAMLOCK)/$(DIR_SRC)/*.cpp))		\
					$(patsubst $(DIR_SIM2OS)/$(DIR_SRC)/%.cpp,$(DIR_SIM2OS)/$(DIR_OBJ)/%.o,$(wildcard $(DIR_SIM2OS)/$(DIR_SRC)/*.cpp)) 		\
					$(patsubst $(DIR_TTY)/$(DIR_SRC)/%.cpp,$(DIR_TTY)/$(DIR_OBJ)/%.o,$(wildcard $(DIR_TTY)/$(DIR_SRC)/*.cpp))			


#-----[ Rules ]--------------------------------------------

all				: a b c d e f g
				@\
				$(MAKE) all_environment; \
				$(MAKE) $(LIBRARY_FILE);

a				:
				@\
				$(MAKE) --directory=$(DIR_CACHE)      all;

b				:
				@\
				$(MAKE) --directory=$(DIR_DATA)       all;

c				:
				@\
				$(MAKE) --directory=$(DIR_ENDIANNESS) all;

d				:
				@\
				$(MAKE) --directory=$(DIR_QUEUE)      all;

e				:
				@\
				$(MAKE) --directory=$(DIR_RAMLOCK)    all;

f				:
				@\
				$(MAKE) --directory=$(DIR_SIM2OS)     all;

g				:
				@\
				$(MAKE) --directory=$(DIR_TTY)        all;


$(LIBRARY_FILE)			: $(OBJECTS_DEPS) $(OBJECTS) $(DIR_LIB)
				@\
				$(ECHO) "Archive            : $@";\
				$(AR)  -r $@ $(OBJECTS_DEPS) $(OBJECTS);\
				$(RANLIB) $@;

$(DIR_LIB)			:
				@\
				$(ECHO) "Create directory   : $@";\
				$(MKDIR) $@;

exe_all				:
				@\
				$(MAKE) --directory=$(DIR_CACHE)      exe; \
				$(MAKE) --directory=$(DIR_DATA)       exe; \
				$(MAKE) --directory=$(DIR_ENDIANNESS) exe; \
				$(MAKE) --directory=$(DIR_QUEUE)      exe; \
				$(MAKE) --directory=$(DIR_RAMLOCK)    exe; \
				$(MAKE) --directory=$(DIR_SIM2OS)     exe; \
				$(MAKE) --directory=$(DIR_TTY)        exe; \
				$(MAKE) exe; \

clean				:
				@\
				$(MAKE) --directory=$(DIR_CACHE)      clean; \
				$(MAKE) --directory=$(DIR_DATA)       clean; \
				$(MAKE) --directory=$(DIR_ENDIANNESS) clean; \
				$(MAKE) --directory=$(DIR_QUEUE)      clean; \
				$(MAKE) --directory=$(DIR_RAMLOCK)    clean; \
				$(MAKE) --directory=$(DIR_SIM2OS)     clean; \
				$(MAKE) --directory=$(DIR_TTY)        clean; \
				$(MAKE) environment_clean; \
				$(RM) tty_*;

clean_all			: clean
				@\
				$(RM) $(DIR_LIB);

help				:
				@$(MAKE) environment_help

include                         Makefile.Environment
