From daf9f65b9fb9822bc3bc80d63b66a612e085802a Mon Sep 17 00:00:00 2001 From: inmarket Date: Sun, 28 Sep 2014 01:42:30 +1000 Subject: New makefile structure. Also OSX board defintion --- tools/gmake_scripts/compiler_gcc.mk | 155 ++++++++++++++++++++++++++++++++++++ tools/gmake_scripts/library_ugfx.mk | 20 +++++ tools/gmake_scripts/readme.txt | 60 ++++++++++++++ 3 files changed, 235 insertions(+) create mode 100644 tools/gmake_scripts/compiler_gcc.mk create mode 100644 tools/gmake_scripts/library_ugfx.mk create mode 100644 tools/gmake_scripts/readme.txt (limited to 'tools/gmake_scripts') diff --git a/tools/gmake_scripts/compiler_gcc.mk b/tools/gmake_scripts/compiler_gcc.mk new file mode 100644 index 00000000..eed78e82 --- /dev/null +++ b/tools/gmake_scripts/compiler_gcc.mk @@ -0,0 +1,155 @@ +# See readme.txt for the make API + +# Add ARCH to each of the compiler programs +ifeq ($(XCC),) + XCC = $(ARCH)gcc +endif +ifeq ($(XCXX),) + XCXX = $(ARCH)g++ +endif +ifeq ($(XAS),) + XAS = $(ARCH)gcc -x assembler-with-cpp +endif +ifeq ($(XLD),) + XLD = $(ARCH)gcc +endif + +# Default project name is the project directory name +ifeq ($(PROJECT),) + PROJECT := $(notdir $(patsubst %/,%,$(dir $(abspath $(firstword $(MAKEFILE_LIST)))))) +endif + +# Output directory and files +ifeq ($(BUILDDIR),) + ifeq ($(MAKECMDGOALS),Debug) + BUILDDIR = bin/Debug + else ifeq ($(MAKECMDGOALS),Release) + BUILDDIR = bin/Release + else ifeq ($(MAKECMDGOALS),cleanDebug) + BUILDDIR = bin/Debug + else ifeq ($(MAKECMDGOALS),cleanRelease) + BUILDDIR = bin/Release + else + BUILDDIR = .build + endif +endif + +OBJDIR = $(BUILDDIR)/obj +DEPDIR = $(BUILDDIR)/dep + +SRCFILE = $< +OBJFILE = $@ +LSTFILE = $(@:.o=.lst) +MAPFILE = $(BUILDDIR)/$(PROJECT).map +ifeq ($(OPT_NATIVEOS),win32) + EXEFILE = $(BUILDDIR)/$(PROJECT).exe +else + EXEFILE = $(BUILDDIR)/$(PROJECT) +endif + +SRCFLAGS += -I. $(patsubst %,-I%,$(INCPATH)) $(patsubst %,-D%,$(patsubst -D%,%,$(DEFS))) +LDFLAGS += $(patsubst %,-L%,$(LIBPATH)) $(patsubst %,-l%,$(patsubst -l%,%,$(LIBS))) +OBJS = $(addprefix $(OBJDIR)/,$(subst ../,_dot_dot/,$(addsuffix .o,$(basename $(SRC))))) + +ifeq ($(OPT_GENERATE_MAP),yes) + LDFLAGS += -Wl,-Map=$(MAPFILE),--cref,--no-warn-mismatch +endif +ifeq ($(OPT_GENERATE_LISTINGS),yes) + CFLAGS += -Wa,-alms=$(LSTFILE) + CXXFLAGS += -Wa,-alms=$(LSTFILE) + ASFLAGS += -Wa,-amhls=$(LSTFILE) +endif + +# Generate dependency information +SRCFLAGS += -MMD -MP -MF $(DEPDIR)/$(@F).d + +# +# makefile rules +# + +.PHONY: builddirs fakefile.o all clean Debug Release cleanDebug cleanRelease + +Debug Release: all +cleanDebug cleanRelease: clean + +all: builddirs fakefile.o $(EXEFILE) + +builddirs: + @mkdir -p $(BUILDDIR) + @mkdir -p $(OBJDIR) + @mkdir -p $(DEPDIR) + +fakefile.o: +ifneq ($(OPT_VERBOSE_COMPILE),yes) + @echo Compiler Options - $(XCC) -c $(CPPFLAGS) $(CFLAGS) $(SRCFLAGS) fakefile.c -o $(OBJDIR)/$@ + @echo +endif + +.SECONDEXPANSION: +$(OBJDIR)/%.o : $$(subst _dot_dot/,../,%.c) + @mkdir -p $(dir $@) +ifeq ($(OPT_VERBOSE_COMPILE),yes) + @echo + $(XCC) -c $(CPPFLAGS) $(CFLAGS) $(SRCFLAGS) $< -o $@ +else + @echo Compiling $< + @$(XCC) -c $(CPPFLAGS) $(CFLAGS) $(SRCFLAGS) $< -o $@ +endif + +$(OBJDIR)/%.o : $$(subst _dot_dot/,../,%.cpp) + @mkdir -p $(dir $@) +ifeq ($(OPT_VERBOSE_COMPILE),yes) + @echo + $(XCXX) -c $(CPPFLAGS) $(CXXFLAGS) $(SRCFLAGS) $< -o $@ +else + @echo Compiling $< + @$(XCXX) -c $(CPPFLAGS) $(CXXFLAGS) $(SRCFLAGS) $< -o $@ +endif + +$(OBJDIR)/%.o : $$(subst _dot_dot/,../,%.c++) + @mkdir -p $(dir $@) +ifeq ($(OPT_VERBOSE_COMPILE),yes) + @echo + $(XCXX) -c $(CPPFLAGS) $(CXXFLAGS) $(SRCFLAGS) $< -o $@ +else + @echo Compiling $< + @$(XCXX) -c $(CPPFLAGS) $(CXXFLAGS) $(SRCFLAGS) $< -o $@ +endif + +$(OBJDIR)/%.o : $$(subst _dot_dot/,../,%.s) + @mkdir -p $(dir $@) +ifeq ($(OPT_VERBOSE_COMPILE),yes) + @echo + $(XAS) -c $(CPPFLAGS) $(ASFLAGS) $(SRCFLAGS) $< -o $@ +else + @echo Compiling $< + @$(XAS) -c $(CPPFLAGS) $(ASFLAGS) $(SRCFLAGS) $< -o $@ +endif + +$(EXEFILE): $(OBJS) + @mkdir -p $(dir $@) +ifeq ($(OPT_VERBOSE_COMPILE),yes) + @echo + $(XLD) $(OBJS) $(LDFLAGS) -o $@ +else + @echo Linking $@ + @$(XLD) $(OBJS) $(LDFLAGS) -o $@ +endif +ifeq ($(OPT_COPY_EXE),yes) + @cp $(EXEFILE) . +endif + +gcov: + -mkdir gcov + $(COV) -u $(subst /,\,$(SRC)) + -mv *.gcov ./gcov + +# +# Include the dependency files, should be the last of the makefile except for clean +# +-include $(shell mkdir -p $(DEPDIR) 2>/dev/null) $(wildcard $(DEPDIR)/*) + +clean: + -rm -fR $(BUILDDIR) + +# *** EOF *** diff --git a/tools/gmake_scripts/library_ugfx.mk b/tools/gmake_scripts/library_ugfx.mk new file mode 100644 index 00000000..7dbf9d99 --- /dev/null +++ b/tools/gmake_scripts/library_ugfx.mk @@ -0,0 +1,20 @@ +# See readme.txt for the make API + +# Requirements: +# +# GFXLIB: The location of the uGFX code eg GFXLIB=../ugfx +# + +# Optional: +# +# GFXBOARD: The uGFX Board to include eg GFXBOARD=Win32 +# GFXDRIVERS: The uGFX Drivers to include - separate multiple drivers with spaces eg GFXDRIVERS=multiple/uGFXnet +# GFXDEMO: Compile a uGFX standard demo? If blank you need to include your own project files. eg GFXDEMO=modules/gwin/widgets +# + + +include $(GFXLIB)/gfx.mk +SRC += $(GFXSRC) +DEFS += $(GFXDEFS) +INCPATH += $(GFXINC) +LIBS += $(GFXLIBS) diff --git a/tools/gmake_scripts/readme.txt b/tools/gmake_scripts/readme.txt new file mode 100644 index 00000000..d7389e1c --- /dev/null +++ b/tools/gmake_scripts/readme.txt @@ -0,0 +1,60 @@ +All make script files in this directory apply the following rules and assumptions: + +- The scripts are written using gmake syntax +- They assume access to the following unix utilities + rm, cp, mv, mkdir, sh +- They use and implement the following make variables + +Input Variables (all optional unless otherwise specified) +---------------------------- + +OPT_VERBOSE_COMPILE=no|yes - Turn on full compile messages - default no +OPT_GENERATE_LISTINGS=no|yes - Generate listing files - default no +OPT_GENERATE_MAP=no|yes - Generate a map file - default no +OPT_COPY_EXE=no|yes - Copy the final program to the local project directory - default no +OPT_NATIVEOS=win32|linux|osx|chibios|freertos|ecos|raw32|rawrtos - Mandatory: The real operating system of the machine +OPT_OS=win32|linux|osx|chibios|freertos|ecos|raw32|rawrtos - Mandatory: Should be the same as OPT_NATIVEOS except when running an OS simulator + +BUILDDIR - Build Directory - default is ".build" or "bin/Debug" or "bin/Release" depending on the target +PROJECT - Project Name - default is the name of the project directory + +ARCH - Architecture - default is "" +XCC - C compiler - default is "$(ARCH)gcc" +XCXX - C++ compiler - default is "$(ARCH)g++" +XAS - Assembler - default is "$(ARCH)gcc -x assembler-with-cpp" +XLD - Linker - default is "$(ARCH)gcc" + +SRCFLAGS - Compiler defines for c, c++ and assembler files - default is "" +CFLAGS - C specific compiler defines - default is "" +CXXFLAGS - C++ specific compiler flags - default is "" +CPPFLAGS - C Preprocessor flags for c, c++ and assembler files - default is "" +ASFLAGS - Assembler specific compiler flags - default is "" +LDFLAGS - Linker flags - default is "" + +The following variables are a list of space separated values. In some cases an optional prefix (if specified) will be stripped off +the variables for compatibility with old definitions. + +INCPATH - List of header include directories - default is "" +LIBPATH - List of library include directories - default is "" +DEFS - List of preprocessor defines (any -D prefix is ignored) - default is "" +LIBS - List of libraries (any -l prefix is ignored) - default is "" +SRC - List of c, c++ and assembler source files - default is "" + +Variables for use in variable defintions +---------------------------------------- + +SRCFILE - The original source file +OBJFILE - The output object file +LSTFILE - The listing file +MAPFILE - The map file +EXEFILE - The final project output file + +Targets +---------------------------- + +all +clean +Debug +cleanDebug +Release +cleanRelease -- cgit v1.2.3