aboutsummaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorinmarket <andrewh@inmarket.com.au>2014-09-28 01:42:30 +1000
committerinmarket <andrewh@inmarket.com.au>2014-09-28 01:42:30 +1000
commitdaf9f65b9fb9822bc3bc80d63b66a612e085802a (patch)
tree554493727b03b8dc0277a9f7d5b53e339188a1fd /tools
parent2776d00e82b85365efa38d0067b658fd2818ca41 (diff)
downloaduGFX-daf9f65b9fb9822bc3bc80d63b66a612e085802a.tar.gz
uGFX-daf9f65b9fb9822bc3bc80d63b66a612e085802a.tar.bz2
uGFX-daf9f65b9fb9822bc3bc80d63b66a612e085802a.zip
New makefile structure. Also OSX board defintion
Diffstat (limited to 'tools')
-rw-r--r--tools/gmake_scripts/compiler_gcc.mk155
-rw-r--r--tools/gmake_scripts/library_ugfx.mk20
-rw-r--r--tools/gmake_scripts/readme.txt60
3 files changed, 235 insertions, 0 deletions
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