121 lines
3.1 KiB
Makefile
121 lines
3.1 KiB
Makefile
#Makefile taken from Wikipedia.org
|
|
#
|
|
# Specify the main target
|
|
TARGET = libgccvb
|
|
|
|
# Default build type
|
|
#TYPE = debug
|
|
TYPE = release
|
|
#TYPE = preprocessor
|
|
|
|
LIBGCCVB = $(VBDE)/libs/libgccvb
|
|
|
|
# Which directories contain source files
|
|
DIRS := $(shell find $(LIBGCCVB) -type d -print)
|
|
|
|
# Which libraries are linked
|
|
LIBS =
|
|
# Dynamic libraries
|
|
DLIBS =
|
|
|
|
# Obligatory headers
|
|
ESSENTIALS = -include $(LIBGCCVB)/libgccvb.h \
|
|
|
|
# The next blocks change some variables depending on the build type
|
|
ifeq ($(TYPE), debug)
|
|
LDPARAM = -fno-builtin -ffreestanding
|
|
CCPARAM = -nodefaultlibs -mv810 -Wall -O0 -Winline $(ESSENTIALS)
|
|
MACROS = __DEBUG
|
|
endif
|
|
|
|
ifeq ($(TYPE), release)
|
|
LDPARAM =
|
|
CCPARAM = -nodefaultlibs -mv810 -finline-functions -Wall -O3 -Winline $(ESSENTIALS)
|
|
MACROS = NDEBUG
|
|
endif
|
|
|
|
|
|
ifeq ($(TYPE), preprocessor)
|
|
LDPARAM =
|
|
CCPARAM = -nodefaultlibs -mv810 -Wall -O -Winline $(ESSENTIALS) -E -P
|
|
MACROS = __DEBUG
|
|
endif
|
|
|
|
|
|
# Add directories to the include and library paths
|
|
|
|
INCPATH := $(shell find $(LIBGCCVB) -type d -print)
|
|
|
|
|
|
# Which files to add to backups, apart from the source code
|
|
EXTRA_FILES = makefile
|
|
|
|
# The compiler
|
|
GCC = v810-gcc
|
|
OBJCOPY = v810-objcopy
|
|
OBJDUMP = v810-objdump
|
|
AR = v810-ar
|
|
|
|
# Where to store object and dependancy files.
|
|
STORE = .make-$(TYPE)
|
|
|
|
# Makes a list of the source (.cpp) files.
|
|
SOURCE := $(foreach DIR,$(DIRS),$(wildcard $(DIR)/*.c))
|
|
|
|
# List of header files.
|
|
HEADERS := $(foreach DIR,$(DIRS),$(wildcard $(DIR)/*.h))
|
|
|
|
# Makes a list of the object files that will have to be created.
|
|
OBJECTS := $(addprefix $(STORE)/, $(SOURCE:.c=.o))
|
|
|
|
# Same for the .d (dependancy) files.
|
|
DFILES := $(addprefix $(STORE)/,$(SOURCE:.c=.d))
|
|
|
|
# Specify phony rules. These are rules that are not real files.
|
|
.PHONY: clean backup dirs
|
|
|
|
# Main target. The @ in front of a command prevents make from displaying
|
|
# it to the standard output.
|
|
|
|
all: $(TARGET).a
|
|
|
|
$(TARGET).a: dirs $(OBJECTS)
|
|
@echo Config file: $(CONFIG_FILE)
|
|
@echo Creating $(TARGET).a
|
|
@$(AR) rcs $@ $(OBJECTS)
|
|
@echo Done $@
|
|
|
|
# Rule for creating object file and .d file, the sed magic is to add
|
|
# the object path at the start of the file because the files gcc
|
|
# outputs assume it will be in the same dir as the source file.
|
|
$(STORE)/%.o: %.c
|
|
@echo Creating o file for $(TYPE) $*...
|
|
@$(GCC) -Wp,-MD,$(STORE)/$*.dd $(foreach INC,$(INCPATH),-I$(INC))\
|
|
$(foreach MACRO,$(MACROS),-D$(MACRO)) $(CCPARAM) -c $< -o $@
|
|
@sed -e '1s/^\(.*\)$$/$(subst /,\/,$(dir $@))\1/' $(STORE)/$*.dd > $(STORE)/$*.d
|
|
@rm -f $(STORE)/$*.dd
|
|
|
|
# Empty rule to prevent problems when a header is deleted.
|
|
%.h: ;
|
|
|
|
# Cleans up the objects, .d files and executables.
|
|
clean:
|
|
@echo Making clean.
|
|
@-rm -f $(foreach DIR,$(DIRS),$(STORE)/$(DIR)/*.d $(STORE)/$(DIR)/*.o)
|
|
@-rm -Rf $(STORE)
|
|
|
|
# Backup the source files.
|
|
backup:
|
|
@-if [ ! -e .backup ]; then mkdir .backup; fi;
|
|
@zip .backup/backup_`date +%d-%m-%y_%H.%M`.zip $(SOURCE) $(HEADERS) $(EXTRA_FILES)
|
|
|
|
# Create necessary directories
|
|
dirs:
|
|
@-if [ ! -e $(STORE) ]; then mkdir $(STORE); fi;
|
|
@-$(foreach DIR,$(DIRS), if [ ! -e $(STORE)/$(DIR) ]; \
|
|
then mkdir -p $(STORE)/$(DIR); fi; )
|
|
|
|
# Includes the .d files so it knows the exact dependencies for every
|
|
# source.
|
|
-include $(DFILES)
|