107 lines
1.9 KiB
Makefile
107 lines
1.9 KiB
Makefile
|
#!/usr/bin/make -f
|
||
|
## ---
|
||
|
## Project: Vhex - On-calc debugger
|
||
|
## Author: yann.magnin@epitech.eu
|
||
|
## ---
|
||
|
include ../../global.mk
|
||
|
|
||
|
##---
|
||
|
## Static variables
|
||
|
##--
|
||
|
HEADER := -I../../include -I../../include/user
|
||
|
LIBS := -L../lib/ -l_unistd -l_stdio -l_string -l_display
|
||
|
BUILD := ../../build/user
|
||
|
DEBUG := ../../debug
|
||
|
OUTPUT := ../../output
|
||
|
|
||
|
NAME := shell
|
||
|
EXEC := $(OUTPUT)/$(NAME).elf
|
||
|
LDFLAG := -T $(NAME).ld
|
||
|
MEMORY_MAP := $(DEBUG)/$(NAME).map
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
##---
|
||
|
## Automated variables
|
||
|
##---
|
||
|
SRC :=
|
||
|
DIRECTORY := $(shell find shell -not -path "*/\.*" -type d)
|
||
|
# Get all source files
|
||
|
$(foreach path,$(DIRECTORY),$(eval \
|
||
|
SRC += $(wildcard $(path)/*.c) \
|
||
|
$(wildcard $(path)/*.S) \
|
||
|
$(wildcard $(path)/*.s) \
|
||
|
))
|
||
|
# Geneate all object files
|
||
|
OBJ := $(patsubst %,$(BUILD)/%.o,$(subst /,_,$(subst src/,,$(basename $(SRC)))))
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
##---
|
||
|
## General rules
|
||
|
##---
|
||
|
all: | $(BUILD) $(DEBUG) $(EXEC)
|
||
|
|
||
|
$(EXEC): $(OBJ)
|
||
|
$(CC) -Wl,-M $(LDFLAG) $(CFLAGS) -o $(DEBUG)/$(NAME).elf.big $(OBJ) $(HEADER) $(LIBS) -lgcc > $(MEMORY_MAP)
|
||
|
$(OBJCOPY) -S $(DEBUG)/$(NAME).elf.big $@
|
||
|
rm -f $(DEBUG)/$(NAME).elf.big
|
||
|
|
||
|
$(BUILD) $(DEBUG):
|
||
|
@ printf "Create $(blue)$@$(nocolor) directory\n"
|
||
|
@ mkdir -p $@
|
||
|
|
||
|
install: $(EXEC)
|
||
|
sudo p7 send --force -d VHEX $^
|
||
|
|
||
|
check:
|
||
|
@ echo 'src: $(SRC)'
|
||
|
@ echo 'obj: $(OBJ)'
|
||
|
@ echo 'directory: $(DIRECTORY)'
|
||
|
|
||
|
asm:
|
||
|
@ $(OBJDUMP) -D $(DEBUG)/$(NAME).elf | less
|
||
|
|
||
|
map:
|
||
|
@ cat $(MEMORY_MAP) | less
|
||
|
|
||
|
sec:
|
||
|
@ $(OBJDUMP) -h $(DEBUG)/$(NAME).elf
|
||
|
|
||
|
|
||
|
##---
|
||
|
## Automated rules
|
||
|
##---
|
||
|
define rule-src
|
||
|
$(patsubst %,$(BUILD)/%.o,$(subst /,_,$(subst src/,,$(basename $1)))): $1
|
||
|
@ printf "compiling $(white)$$<$(nocolor)..."
|
||
|
@ $(CC) $(CFLAGS) -o $$@ -c $$< $(HEADER) -lgcc
|
||
|
@ printf "$(green)[ok]$(nocolor)\n"
|
||
|
endef
|
||
|
|
||
|
$(foreach source,$(SRC),$(eval \
|
||
|
$(call rule-src,$(source))) \
|
||
|
)
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
##---
|
||
|
## Cleaning rules
|
||
|
##---
|
||
|
clean:
|
||
|
rm -rf $(BUILD)
|
||
|
rm -rf $(DEBUG)
|
||
|
|
||
|
fclean: clean
|
||
|
rm -f $(EXEC)
|
||
|
|
||
|
re: fclean all
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
.PHONY: re fclean clean all install
|