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