# common definition
include			Makefile.morpheo

#-----[ Directory ]---------------------------------------------------------------
DIR_SRC			= ./src
DIR_C			= $(DIR_SRC)/c
DIR_ASM			= $(DIR_SRC)/asm
DIR_SYS			= $(DIR_SRC)/sys
DIR_INC       		= $(DIR_C)/include

DIR_OBJ			= obj
DIR_BIN			= bin

EXE			= soft

#-----[ Files ]-------------------------------------------------------------------
OBJ_ASM			= $(patsubst $(DIR_ASM)/%.s,$(DIR_OBJ)/%.o,$(wildcard $(DIR_ASM)/*.s))
OBJ_SYS			= $(patsubst $(DIR_SYS)/%.s,$(DIR_OBJ)/%.o,$(wildcard $(DIR_SYS)/*.s))
OBJ_C           	= $(patsubst $(DIR_C)/%.c,$(DIR_OBJ)/%.o,$(wildcard $(DIR_C)/*.c))

OBJ			= $(OBJ_SYS) $(OBJ_ASM) $(OBJ_C)

#-----[ Rules ]-------------------------------------------------------------------
.PRECIOUS		: $(DIR_BIN)/%.x $(DIR_OBJ)/%.o $(DIR_OBJ)/%.a

all 			: test_env $(DIR_BIN)/$(EXE).x.txt

$(DIR_BIN)/%.x.txt	: $(DIR_BIN)/%.x
			@\
			$(ECHO) "List symbols        of $*";\
			$(NM)      $(NM_OPT)      $^ > $@.nm;\
			$(ECHO) "Display information of $*";\
			$(OBJDUMP) $(OBJDUMP_OPT) $^ > $@;

$(DIR_BIN)/%.x		: $(OBJ_SYS) $(OBJ) 
			@\
			$(ECHO) "Linkage             of $*";\
			$(LD) -o $@ $^ $(LD_OPT);

$(DIR_OBJ)/%.o		: $(DIR_ASM)/%.s	
			@\
			$(ECHO) "Compile             of $*";\
			$(CC) $(CC_OPT) -I$(DIR_INC)    -o $@   -c $^ ;\
			$(CC) $(CC_OPT) -I$(DIR_INC) -S -o $@.s -c $^ ;
#			@$(AS) $(AS_OPT) $^ -o $@

$(DIR_OBJ)/%.o		: $(DIR_SYS)/%.s	
			@\
			$(ECHO) "Compile             of $*";\
			$(CC) $(CC_OPT) -I$(DIR_INC)    -o $@   -c $^ ;\
			$(CC) $(CC_OPT) -I$(DIR_INC) -S -o $@.s -c $^ ;
#			@$(AS) $(AS_OPT) $^ -o $@

$(DIR_OBJ)/%.o		: $(DIR_C)/%.c
			@\
			$(ECHO) "Compile             of $*";\
			$(CC) $(CC_OPT) -I$(DIR_INC)    -o $@   -c $^ ;\
			$(CC) $(CC_OPT) -I$(DIR_INC) -S -o $@.s -c $^ ;

#-----[ Environement ]------------------------------------------------------------
test_env		:
# ifeq ($(origin TOOLS), undefined)
# 			$(error "variable TOOLS is undefined");
# endif
# ifeq ($(origin SOFT), undefined)
# 			$(error "variable SOFT  is undefined");
# endif
			@$(MKDIR) $(DIR_OBJ) $(DIR_BIN)

#-----[ Maintenance ]-------------------------------------------------------------
clean 			:
			@\
			$(ECHO) "Delete     temporary files              "`$(PWD)`;\
			$(RM) $(DIR_OBJ) $(DIR_BIN);\
			$(MAKE) clean_rec DIR_CLEAN=.;

#Clean recursive
clean_rec		:
			@\
			$(ECHO) "Delete     temporary files in directory $(DIR_CLEAN)";\
			$(RM) -f $(DIR_CLEAN)/*~;\
			for files in `$(LS) $(DIR_CLEAN)`; do					\
			    	if $(TEST) -d $(DIR_CLEAN)/$$files; 				\
				then 								\
					$(MAKE) clean_rec DIR_CLEAN=$(DIR_CLEAN)/$$files;	\
				fi; 								\
			done;

#-----[ Help ]--------------------------------------------------------------------
help			:
			@\
			$(ECHO) "";\
			$(ECHO) "List of directive   : ";\
			$(ECHO) " * make             : Compile the software";\
			$(ECHO) " * make clean       : Erase all files generates";\
			$(ECHO) "";
