diff options
Diffstat (limited to 'Makefile')
-rw-r--r-- | Makefile | 271 |
1 files changed, 271 insertions, 0 deletions
diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..7b28a1a --- /dev/null +++ b/Makefile @@ -0,0 +1,271 @@ +# ------------------------------------------------------------------------------
+#
+# Generic Makefile
+#
+# Copyright Marco Paland 2007 - 2017
+# Distributed under the MIT License
+#
+# ------------------------------------------------------------------------------
+
+# ------------------------------------------------------------------------------
+# Paths
+# ------------------------------------------------------------------------------
+PATH_TOOLS_CC = /usr/bin/
+PATH_TOOLS_CC_LIB = /usr/lib/
+PATH_TOOLS_UTIL =
+
+PATH_BIN = bin
+PATH_TMP = tmp
+PATH_NUL = /dev/null
+PATH_OBJ = $(PATH_TMP)/obj
+PATH_LST = $(PATH_TMP)/lst
+PATH_ERR = $(PATH_TMP)/err
+PATH_PRE = $(PATH_TMP)/pre
+PATH_COV = $(PATH_TMP)/cov
+
+
+# ------------------------------------------------------------------------------
+# Application to build
+# ------------------------------------------------------------------------------
+
+APP = test_suite
+
+
+# -----------------------------------------------------------------------------
+# Project file list
+# Format is:
+# FILES_PRJ = file1 \
+# foo/file2 \
+# bar/file3
+# -----------------------------------------------------------------------------
+
+FILES_PRJ = test/test_suite
+
+
+# ------------------------------------------------------------------------------
+# Additional include files and compiler defines
+# Format is:
+# C_INCLUDES = -Iinclude_path1 \
+# -Iinclude_path2 \
+# -Iinclude_path3 \
+# ------------------------------------------------------------------------------
+
+C_INCLUDES =
+
+C_DEFINES =
+
+
+# ------------------------------------------------------------------------------
+# The target name and location
+# ------------------------------------------------------------------------------
+TRG = $(PATH_BIN)/$(APP)
+
+
+# ------------------------------------------------------------------------------
+# object files
+# ------------------------------------------------------------------------------
+FILES_TMP = $(FILES_PRJ)
+FILES_O = $(addsuffix .o, $(FILES_TMP))
+
+
+# ------------------------------------------------------------------------------
+# VPATH definition
+#
+# VPATH is required for the maker to find the C-/ASM-Source files.
+# Extract the directory/module names from the file list with the dir
+# command and remove the duplicated directory names with the sort command.
+# FILES_PRJ is listed first to make sure that the source files in the project
+# directory are searched first.
+# ------------------------------------------------------------------------------
+VPATH := $(sort $(dir $(FILES_TMP)))
+
+
+# ------------------------------------------------------------------------------
+# Development tools
+# ------------------------------------------------------------------------------
+AR = $(PATH_TOOLS_CC)ar
+AS = $(PATH_TOOLS_CC)g++
+CC = $(PATH_TOOLS_CC)g++
+CL = $(PATH_TOOLS_CC)g++
+NM = $(PATH_TOOLS_CC)nm
+GCOV = $(PATH_TOOLS_CC)gcov
+OBJDUMP = $(PATH_TOOLS_CC)objdump
+OBJCOPY = $(PATH_TOOLS_CC)objcopy
+READELF = $(PATH_TOOLS_CC)readelf
+SIZE = $(PATH_TOOLS_CC)size
+
+ECHO = $(PATH_TOOLS_UTIL)echo
+MAKE = $(PATH_TOOLS_UTIL)make
+MKDIR = $(PATH_TOOLS_UTIL)mkdir
+RM = $(PATH_TOOLS_UTIL)rm
+SED = $(PATH_TOOLS_UTIL)sed
+
+
+# ------------------------------------------------------------------------------
+# Compiler flags for the target architecture
+# ------------------------------------------------------------------------------
+
+GCCFLAGS = $(C_INCLUDES) \
+ $(C_DEFINES) \
+ -std=c++11 \
+ -g \
+ -Wall \
+ -pedantic \
+ -Wmain \
+ -Wundef \
+ -Wsign-conversion \
+ -Wuninitialized \
+ -Wshadow \
+ -Wunreachable-code \
+ -Wswitch-default \
+ -Wswitch \
+ -Wcast-align \
+ -Wmissing-include-dirs \
+ -Winit-self \
+ -Wdouble-promotion \
+ -gdwarf-2 \
+ -fno-exceptions \
+ -O2 \
+ -ffunction-sections \
+ -ffat-lto-objects \
+ -fdata-sections \
+ -fverbose-asm \
+ -Wextra \
+ -Wunused-parameter \
+ -Wfloat-equal
+
+CFLAGS = $(GCCFLAGS) \
+ -Wunsuffixed-float-constants \
+ -x c \
+ -std=c99
+
+CPPFLAGS = $(GCCFLAGS) \
+ -x c++ \
+ -fno-rtti \
+ -fstrict-enums \
+ -fno-use-cxa-atexit \
+ -fno-use-cxa-get-exception-ptr \
+ -fno-nonansi-builtins \
+ -fno-threadsafe-statics \
+ -fno-enforce-eh-specs \
+ -ftemplate-depth-64 \
+ -fexceptions
+
+AFLAGS = $(GCCFLAGS) \
+ -x assembler
+
+LFLAGS = $(GCCFLAGS) \
+ -x none \
+ -Wl,--gc-sections
+
+# ------------------------------------------------------------------------------
+# Targets
+# ------------------------------------------------------------------------------
+
+# ------------------------------------------------------------------------------
+# Main-Dependencies (app: all)
+# ------------------------------------------------------------------------------
+.PHONY: all
+all: clean_prj $(TRG) $(TRG)_nm.txt
+
+
+# ------------------------------------------------------------------------------
+# Main-Dependencies (app: rebuild)
+# ------------------------------------------------------------------------------
+.PHONY: rebuild
+rebuild: clean $(TRG) $(TRG)_nm.txt
+
+
+# ------------------------------------------------------------------------------
+# clean project
+# ------------------------------------------------------------------------------
+.PHONY: clean_prj
+clean_prj:
+ @-$(ECHO) +++ cleaning project
+ @-$(RM) -rf $(PATH_BIN) 2> $(PATH_NUL)
+ @-$(MKDIR) -p $(PATH_BIN)
+ @-$(MKDIR) -p $(PATH_OBJ)
+ @-$(MKDIR) -p $(PATH_ERR)
+ @-$(MKDIR) -p $(PATH_LST)
+ @-$(MKDIR) -p $(PATH_PRE)
+ @-$(MKDIR) -p $(PATH_COV)
+
+
+# ------------------------------------------------------------------------------
+# clean all
+# ------------------------------------------------------------------------------
+.PHONY: clean
+clean:
+ @-$(ECHO) +++ cleaning all
+ @-$(RM) -rf $(PATH_BIN) 2> $(PATH_NUL)
+ @-$(RM) -rf $(PATH_TMP) 2> $(PATH_NUL)
+ @-$(MKDIR) -p $(PATH_BIN)
+ @-$(MKDIR) -p $(PATH_OBJ)
+ @-$(MKDIR) -p $(PATH_ERR)
+ @-$(MKDIR) -p $(PATH_LST)
+ @-$(MKDIR) -p $(PATH_COV)
+
+
+# ------------------------------------------------------------------------------
+# print the GNUmake version and the compiler version
+# ------------------------------------------------------------------------------
+.PHONY: version
+version:
+ # Print the GNU make version and the compiler version
+ @$(ECHO) GNUmake version:
+ @$(MAKE) --version
+ @$(ECHO) GCC version:
+ @$(CL) -v
+
+
+# ------------------------------------------------------------------------------
+# Rules
+# ------------------------------------------------------------------------------
+
+# ------------------------------------------------------------------------------
+# Link/locate application
+# ------------------------------------------------------------------------------
+$(TRG) : $(FILES_O)
+ @-$(ECHO) +++ linkink application to generate: $(TRG)
+ @-$(CL) $(LFLAGS) -L. -lc $(PATH_OBJ)/*.o -Wl,-Map,$(TRG).map -o $(TRG)
+ # profiling
+ @-$(CL) $(LFLAGS) -L. -lc $(PATH_COV)/*.o --coverage -o $(PATH_COV)/$(APP)
+
+
+# ------------------------------------------------------------------------------
+# parse the object files to obtain symbol information, and create a size summary
+# ------------------------------------------------------------------------------
+$(TRG)_nm.txt : $(TRG)
+ @-$(ECHO) +++ parsing symbols with nm to generate: $(TRG)_nm.txt
+ @-$(NM) --numeric-sort --print-size $(TRG) > $(TRG)_nm.txt
+ @-$(ECHO) +++ demangling symbols with c++filt to generate: $(TRG)_cppfilt.txt
+ @-$(NM) --numeric-sort --print-size $(TRG) | $(CPPFILT) > $(TRG)_cppfilt.txt
+ @-$(ECHO) +++ creating size summary table with size to generate: $(TRG)_size.txt
+ @-$(SIZE) -A -t $(TRG) > $(TRG)_size.txt
+
+
+%.o : %.cpp
+ @$(ECHO) +++ compile: $<
+ # Compile the source file
+ # ...and Reformat (using sed) any possible error/warning messages for the VisualStudio(R) output window
+ # ...and Create an assembly listing using objdump
+ # ...and Generate a dependency file (using the -MM flag)
+ @-$(CL) $(CPPFLAGS) $< -E -o $(PATH_PRE)/$(basename $(@F)).pre
+ @-$(CL) $(CPPFLAGS) $< -c -o $(PATH_OBJ)/$(basename $(@F)).o 2> $(PATH_ERR)/$(basename $(@F)).err
+ @-$(SED) -e 's|.h:\([0-9]*\),|.h(\1) :|' -e 's|:\([0-9]*\):|(\1) :|' $(PATH_ERR)/$(basename $(@F)).err
+ @-$(OBJDUMP) --disassemble --line-numbers -S $(PATH_OBJ)/$(basename $(@F)).o > $(PATH_LST)/$(basename $(@F)).lst
+ @-$(CL) $(CPPFLAGS) $< -MM > $(PATH_OBJ)/$(basename $(@F)).d
+ # profiling
+ @-$(CL) $(CPPFLAGS) -O0 --coverage $< -c -o $(PATH_COV)/$(basename $(@F)).o 2> $(PATH_NUL)
+
+%.o : %.c
+ @$(ECHO) +++ compile: $<
+ # Compile the source file
+ # ...and Reformat (using sed) any possible error/warning messages for the VisualStudio(R) output window
+ # ...and Create an assembly listing using objdump
+ # ...and Generate a dependency file (using the -MM flag)
+ @-$(CL) $(CFLAGS) $< -E -o $(PATH_PRE)/$(basename $(@F)).pre
+ @-$(CC) $(CFLAGS) $< -c -o $(PATH_OBJ)/$(basename $(@F)).o 2> $(PATH_ERR)/$(basename $(@F)).err
+ @-$(SED) -e 's|.h:\([0-9]*\),|.h(\1) :|' -e 's|:\([0-9]*\):|(\1) :|' $(PATH_ERR)/$(basename $(@F)).err
+ @-$(OBJDUMP) -S $(PATH_OBJ)/$(basename $(@F)).o > $(PATH_LST)/$(basename $(@F)).lst
+ @-$(CC) $(CFLAGS) $< -MM > $(PATH_OBJ)/$(basename $(@F)).d
|