# 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) ""