100 lines
1.9 KiB
Makefile
100 lines
1.9 KiB
Makefile
#!/usr/bin/make -f
|
|
# ---
|
|
# Project: Vhex - Librairies part.
|
|
# Author: yann.magnin@epitech.eu
|
|
# ---
|
|
include ../../global.mk
|
|
|
|
|
|
|
|
|
|
#------- --------#
|
|
# Generic variables #
|
|
#------- --------#
|
|
HEADER := -I../../include
|
|
BUILD := ../../build/lib/
|
|
TARGET-MODULES := stdio string unistd display
|
|
|
|
|
|
|
|
|
|
#------- --------#
|
|
# Automated variables #
|
|
#------- --------#
|
|
$(foreach mod,$(TARGET-MODULES),$(eval \
|
|
target-$(mod)-src := $$(wildcard $(mod)/*.c) $n\
|
|
target-$(mod)-src += $$(wildcard $(mod)/*.s) $n\
|
|
target-$(mod)-src += $$(wildcard $(mod)/*.S) $n\
|
|
target-$(mod)-obj := $$(subst /,_,$$(basename $$(target-$(mod)-src))) $n\
|
|
target-$(mod)-obj := $$(patsubst %,$(BUILD)%.o,$$(target-$(mod)-obj)) $n\
|
|
))
|
|
TARGET-LIBS := $(patsubst %,lib_%.a,$(TARGET-MODULES))
|
|
|
|
|
|
|
|
|
|
#------- --------#
|
|
# Generic rules #
|
|
#------- --------#
|
|
all: | $(BUILD) $(TARGET-LIBS)
|
|
|
|
$(BUILD):
|
|
@ printf "Create $(blue)$@$(nocolor) directory\n"
|
|
@ mkdir -p $@
|
|
|
|
debug:
|
|
@ echo 'lib: $(TARGET-LIBS)'
|
|
@ echo 'src: $(target-stdio-src)'
|
|
@ echo 'obj: $(target-stdio-obj)'
|
|
@ echo 'directory: $(TARGET-MODULES)'
|
|
@ echo 'debug: $(BUILD)'
|
|
|
|
|
|
|
|
|
|
#------- --------#
|
|
# Rule functions #
|
|
#------- --------#
|
|
define rule-src
|
|
$(patsubst %,$(BUILD)%.o,$(subst /,_,$(basename $1))): $1
|
|
@ printf "compiling $(white)$$<$(nocolor)..."
|
|
@ $(CC) $(CFLAGS) -c $$< -o $$@ $(HEADER)
|
|
@ printf "$(green)[ok]$(nocolor)\n"
|
|
endef
|
|
define rule-link
|
|
$(patsubst %,lib_%.a,$1): $2
|
|
@ printf "Link $(green)$$@$(nocolor) lib\n"
|
|
$(AR) crs $$@ $$^
|
|
endef
|
|
|
|
|
|
|
|
|
|
#------- --------#
|
|
# Automated rules #
|
|
#------- --------#
|
|
$(foreach mod,$(TARGET-MODULES), \
|
|
$(foreach source,$(target-$(mod)-src), \
|
|
$(eval $(call rule-src,$(source),$(mod)))) \
|
|
$(eval $(call rule-link,$(mod),$(target-$(mod)-obj))) \
|
|
)
|
|
|
|
|
|
|
|
|
|
#------- --------#
|
|
# Clean rules #
|
|
#------- --------#
|
|
clean:
|
|
rm -rf $(BUILD)
|
|
|
|
fclean: clean
|
|
rm -f $(TARGET-LIBS)
|
|
|
|
re: fclean all
|
|
|
|
|
|
|
|
|
|
.PHONY: re clean fclean all debug
|