ifeq ($(origin MORPHEO_PREFIX), undefined)
	$(error "variable MORPHEO_PREFIX   is undefined");
endif

#-----[ Directory ]----------------------------------------
DIR_LIB				= $(MORPHEO_PREFIX)/lib
DIR_ENVIRONMENT			= .
DIR_CACHE			= Cache
DIR_DATA			= Data
DIR_ENDIANNESS			= Endianness
DIR_QUEUE			= Queue
DIR_RAMLOCK			= RamLock
DIR_SIM2OS			= Sim2OS
DIR_TTY   			= TTY

include $(DIR_CACHE)/Makefile.defs
include $(DIR_DATA)/Makefile.defs
include $(DIR_ENDIANNESS)/Makefile.defs
include $(DIR_QUEUE)/Makefile.defs
include $(DIR_RAMLOCK)/Makefile.defs
include $(DIR_SIM2OS)/Makefile.defs
include $(DIR_TTY)/Makefile.defs

#-----[ Variable ]-----------------------------------------

ENTITY                          := Environment
DIR_SRC				 = $(DIR_ENVIRONMENT)/src

include                          $(DIR_ENVIRONMENT)/Makefile.defs

LIBRARY_NAME			:= $(ENTITY)
LIBRARY_FILE			:= $(DIR_LIB)/lib$(LIBRARY_NAME).a

Environment_OBJECTS_DEPS	:= 	$(OBJECTS) \
					$(Cache_OBJECTS_DEPS) \
					$(Data_OBJECTS_DEPS) \
					$(Endianness_OBJECTS_DEPS) \
					$(Queue_OBJECTS_DEPS) \
					$(RamLock_OBJECTS_DEPS) \
					$(Sim2OS_OBJECTS_DEPS) \
					$(TTY_OBJECTS_DEPS)

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

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


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

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

exe_all				:
				@\
				$(MAKE) --directory=$(DIR_CACHE)      clean; \
				$(MAKE) --directory=$(DIR_CACHE)      exe; \
				$(MAKE) --directory=$(DIR_DATA)       clean; \
				$(MAKE) --directory=$(DIR_DATA)       exe; \
				$(MAKE) --directory=$(DIR_ENDIANNESS) clean; \
				$(MAKE) --directory=$(DIR_ENDIANNESS) exe; \
				$(MAKE) --directory=$(DIR_QUEUE)      clean; \
				$(MAKE) --directory=$(DIR_QUEUE)      exe; \
				$(MAKE) --directory=$(DIR_RAMLOCK)    clean; \
				$(MAKE) --directory=$(DIR_RAMLOCK)    exe; \
				$(MAKE) --directory=$(DIR_SIM2OS)     clean; \
				$(MAKE) --directory=$(DIR_SIM2OS)     exe; \
				$(MAKE) --directory=$(DIR_TTY)        clean; \
				$(MAKE) --directory=$(DIR_TTY)        exe; \
				$(MAKE) clean; \
				$(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
