From daf9f65b9fb9822bc3bc80d63b66a612e085802a Mon Sep 17 00:00:00 2001 From: inmarket Date: Sun, 28 Sep 2014 01:42:30 +1000 Subject: [PATCH] New makefile structure. Also OSX board defintion --- boards/base/Linux-Framebuffer/board.mk | 1 + .../base/Linux-Framebuffer/example/Makefile | 234 ++------------- boards/base/Linux/board.mk | 1 + boards/base/Linux/example/Makefile | 234 ++------------- boards/base/OSX/board.mk | 7 + boards/base/OSX/example/Makefile | 47 +++ boards/base/OSX/example/readme.txt | 5 + boards/base/OSX/readme.txt | 7 + boards/base/Win32/board.mk | 4 +- boards/base/Win32/example/Makefile | 274 ++++-------------- drivers/gaudio/Win32/driver.mk | 2 +- drivers/multiple/Win32/driver.mk | 5 +- drivers/multiple/X/driver.mk | 1 + drivers/multiple/uGFXnet/driver.mk | 4 + gfx.mk | 30 ++ tools/gmake_scripts/compiler_gcc.mk | 155 ++++++++++ tools/gmake_scripts/library_ugfx.mk | 20 ++ tools/gmake_scripts/readme.txt | 60 ++++ 18 files changed, 456 insertions(+), 635 deletions(-) create mode 100644 boards/base/OSX/board.mk create mode 100644 boards/base/OSX/example/Makefile create mode 100644 boards/base/OSX/example/readme.txt create mode 100644 boards/base/OSX/readme.txt 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 diff --git a/boards/base/Linux-Framebuffer/board.mk b/boards/base/Linux-Framebuffer/board.mk index 69be7ac1..a9acce0a 100644 --- a/boards/base/Linux-Framebuffer/board.mk +++ b/boards/base/Linux-Framebuffer/board.mk @@ -1,5 +1,6 @@ GFXINC += $(GFXLIB)/boards/base/Linux-Framebuffer GFXSRC += GFXDEFS += -DGFX_USE_OS_LINUX=TRUE +GFXLIBS += rt include $(GFXLIB)/drivers/gdisp/framebuffer/driver.mk diff --git a/boards/base/Linux-Framebuffer/example/Makefile b/boards/base/Linux-Framebuffer/example/Makefile index d5032f57..29b0a266 100644 --- a/boards/base/Linux-Framebuffer/example/Makefile +++ b/boards/base/Linux-Framebuffer/example/Makefile @@ -1,220 +1,44 @@ -# -# !!!! Do NOT edit this makefile with an editor which replace tabs by spaces !!!! -# -############################################################################################## -# -# On command line: -# -# make all = Create project -# -# make clean = Clean project files. -# -# To rebuild project do "make clean" and "make all". -# +# Possible Targets: all clean Debug cleanDebug Release cleanRelease ############################################################################################## -# Start of make control +# Settings # -# Verbose compiling? -USE_VERBOSE_COMPILE=no +# See $(GFXLIB)/tools/gmake_scripts/readme.txt for the meaning of these variables +OPT_VERBOSE_COMPILE = no +OPT_GENERATE_LISTINGS = yes +OPT_GENERATE_MAP = yes +OPT_COPY_EXE = no +OPT_NATIVEOS = linux +OPT_OS = linux -# Generate listing files? -USE_LISTING=no - -# Your project name and executable file name - Optional, defaults to the project directory name -#PROJECT=uGFX +# See $(GFXLIB)/tools/gmake_scripts/library_ugfx.mk for the meaning of these variables +GFXLIB = ../uGFX +GFXBOARD = Linux-Framebuffer +#GFXDRIVERS = multiple/uGFXnet +GFXDEMO = modules/gdisp/basics ############################################################################################## -# Start of default section +# Set these for your project # -TRGT = -CC = $(TRGT)gcc -AS = $(TRGT)gcc -x assembler-with-cpp +ARCH = +SRCFLAGS = -m32 -ggdb -O0 -fomit-frame-pointer -Wall -Wextra -Wstrict-prototypes -fverbose-asm +CFLAGS = +CXXFLAGS = +ASFLAGS = +LDFLAGS = -pthread -# List all default C defines here, like -D_DEBUG=1 -DDEFS = - -# List all default ASM defines here, like -D_DEBUG=1 -DADEFS = - -# List all default directories to look for include files here -DINCDIR = - -# List the default directory to look for the libraries here -DLIBDIR = - -# List all default libraries here -DLIBS = -lrt - -# -# End of default section -############################################################################################## +SRC = +DEFS = +LIBS = +INCPATH = +LIBPATH = ############################################################################################## -# Start of user section +# These should be at the end # -# Default project name is the project directory name -ifeq ($(PROJECT),) - PROJECT := $(notdir $(patsubst %/,%,$(dir $(abspath $(firstword $(MAKEFILE_LIST)))))) -endif - -# Imported source files and paths for uGFX -GFXLIB = ../ugfx -include ${GFXLIB}/gfx.mk -include ${GFXLIB}/boards/base/Linux-Framebuffer/board.mk - -# Where is our source code - alter these for your project. -# Either just include the demo makefile or add your own definitions -include $(GFXLIB)/demos/modules/gdisp/basics/demo.mk -#MYFILES = my-project-directory -#MYCSRC = $(MYFILES)/main.c -#MYDEFS = - -# List all user C define here, like -D_DEBUG=1 -UDEFS = $(MYDEFS) $(GFXDEFS) - -# Define ASM defines here -UADEFS = - -# List C source files here -SRC = $(GFXSRC) \ - $(MYCSRC) - -# List ASM source files here -ASRC = - -# List all user directories here -UINCDIR = $(MYFILES) $(GFXINC) - -# List the user directory to look for the libraries here -ULIBDIR = - -# List all user libraries here -ULIBS = - -# Define optimisation level here -OPT = -ggdb -O0 -fomit-frame-pointer - -# -# End of user defines -############################################################################################## - -I# Output directory and files -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 ifeq ($(BUILDDIR),) - BUILDDIR = .build -else ifeq ($(BUILDDIR),.) - BUILDDIR = .build -endif - -OBJDIR = $(BUILDDIR)/obj -LSTDIR = $(BUILDDIR)/lst -MAPDIR = $(BUILDDIR)/map -DEPDIR = .dep - -INCDIR = $(patsubst %,-I%,$(DINCDIR) $(UINCDIR)) -LIBDIR = $(patsubst %,-L%,$(DLIBDIR) $(ULIBDIR)) -DEFS = $(DDEFS) $(UDEFS) -ADEFS = $(DADEFS) $(UADEFS) -COBJ = $(addprefix $(OBJDIR)/, $(subst ../,_dot_dot/,$(SRC:.c=.o))) -AOBJ = $(addprefix $(OBJDIR)/, $(subst ../,_dot_dot/,$(ASRC:.s=.o))) -OBJS = $(AOBJ) $(COBJ) -LIBS = $(DLIBS) $(ULIBS) - -ASFLAGS = $(ADEFS) -CPFLAGS = $(OPT) -Wall -Wextra -Wstrict-prototypes -fverbose-asm $(DEFS) -LDFLAGS = -Wl,-Map=$(MAPDIR)/$(PROJECT).map,--cref,--no-warn-mismatch $(LIBDIR) -ifeq ($(USE_LISTING),yes) - ASFLAGS += -Wa,-amhls=$(LSTDIR)/$(subst ../,_dot_dot/,$(<:.s=.lst)) - CPFLAGS += -Wa,-alms=$(LSTDIR)/$(subst ../,_dot_dot/,$(<:.c=.lst)) -endif - -ifeq ($(HOST_OSX),yes) - ifeq ($(OSX_SDK),) - OSX_SDK = /Developer/SDKs/MacOSX10.7.sdk - endif - ifeq ($(OSX_ARCH),) - OSX_ARCH = -mmacosx-version-min=10.3 -arch i386 - endif - - LIBS += $(OSX_ARCH) - CPFLAGS += -isysroot $(OSX_SDK) $(OSX_ARCH) - LDFLAGS = -Wl -Map=$(MAPDIR)/$(PROJECT).map,-syslibroot,$(OSX_SDK),$(LIBDIR) -else - # Linux, or other - CPFLAGS += -m32 -endif - -# Generate dependency information -CPFLAGS += -MD -MP -MF $(DEPDIR)/$(@F).d - -# -# makefile rules -# - -Debug Release: all - -cleanDebug cleanRelease: clean - -all: $(BUILDDIR) $(OBJS) $(PROJECT) - -$(BUILDDIR) $(OBJDIR) $(LSTDIR) $(MAPDIR): - mkdir -p $(OBJDIR) - mkdir -p $(MAPDIR) -ifeq ($(USE_LISTING),yes) - mkdir -p $(LSTDIR) -endif -ifneq ($(USE_VERBOSE_COMPILE),yes) - @echo Compiler Options - $(CC) -c $(CPFLAGS) -I. $(INCDIR) main.c -o $(OBJDIR)/main.o - @echo -endif - -.SECONDEXPANSION: -$(OBJDIR)/%.o : $$(subst _dot_dot/,../,%.c) - @mkdir -p $(dir $@) -ifeq ($(USE_VERBOSE_COMPILE),yes) - @echo - $(CC) -c $(CPFLAGS) -I. $(INCDIR) $< -o $@ -else - @echo Compiling $< - @$(CC) -c $(CPFLAGS) -I. $(INCDIR) $< -o $@ -endif - -$(OBJDIR)/%.o : $$(subst _dot_dot/,../,%.s) - @mkdir -p $(dir $@) -ifeq ($(USE_VERBOSE_COMPILE),yes) - @echo - $(AS) -c $(ASFLAGS) -I. $(INCDIR) $< -o $@ -else - @echo Compiling $< - @$(AS) -c $(ASFLAGS) -I. $(INCDIR) $< -o $@ -endif - -$(PROJECT): $(OBJS) - $(CC) $(OBJS) $(LDFLAGS) $(LIBS) -o $@ - -gcov: - -mkdir gcov - $(COV) -u $(subst /,\,$(SRC)) - -mv *.gcov ./gcov - -clean: - -rm -fR $(BUILDDIR) - -rm -fR $(DEPDIR) - -# -# Include the dependency files, should be the last of the makefile -# --include $(shell mkdir $(DEPDIR) 2>/dev/null) $(wildcard $(DEPDIR)/*) - +include $(GFXLIB)/tools/gmake_scripts/library_ugfx.mk +include $(GFXLIB)/tools/gmake_scripts/compiler_gcc.mk # *** EOF *** diff --git a/boards/base/Linux/board.mk b/boards/base/Linux/board.mk index 4334c2fc..49004bdd 100644 --- a/boards/base/Linux/board.mk +++ b/boards/base/Linux/board.mk @@ -1,6 +1,7 @@ GFXINC += $(GFXLIB)/boards/base/Linux GFXSRC += GFXDEFS += -DGFX_USE_OS_LINUX=TRUE +GFXLIBS += rt include $(GFXLIB)/drivers/multiple/X/driver.mk diff --git a/boards/base/Linux/example/Makefile b/boards/base/Linux/example/Makefile index 21343755..87b80434 100644 --- a/boards/base/Linux/example/Makefile +++ b/boards/base/Linux/example/Makefile @@ -1,220 +1,44 @@ -# -# !!!! Do NOT edit this makefile with an editor which replace tabs by spaces !!!! -# -############################################################################################## -# -# On command line: -# -# make all = Create project -# -# make clean = Clean project files. -# -# To rebuild project do "make clean" and "make all". -# +# Possible Targets: all clean Debug cleanDebug Release cleanRelease ############################################################################################## -# Start of make control +# Settings # -# Verbose compiling? -USE_VERBOSE_COMPILE=no +# See $(GFXLIB)/tools/gmake_scripts/readme.txt for the meaning of these variables +OPT_VERBOSE_COMPILE = no +OPT_GENERATE_LISTINGS = yes +OPT_GENERATE_MAP = yes +OPT_COPY_EXE = no +OPT_NATIVEOS = linux +OPT_OS = linux -# Generate listing files? -USE_LISTING=no - -# Your project name and executable file name - Optional, defaults to the project directory name -#PROJECT=uGFX +# See $(GFXLIB)/tools/gmake_scripts/library_ugfx.mk for the meaning of these variables +GFXLIB = ../uGFX +GFXBOARD = Linux +#GFXDRIVERS = multiple/uGFXnet +GFXDEMO = modules/gdisp/basics ############################################################################################## -# Start of default section +# Set these for your project # -TRGT = -CC = $(TRGT)gcc -AS = $(TRGT)gcc -x assembler-with-cpp +ARCH = +SRCFLAGS = -m32 -ggdb -O0 -fomit-frame-pointer -Wall -Wextra -Wstrict-prototypes -fverbose-asm +CFLAGS = +CXXFLAGS = +ASFLAGS = +LDFLAGS = -pthread -# List all default C defines here, like -D_DEBUG=1 -DDEFS = - -# List all default ASM defines here, like -D_DEBUG=1 -DADEFS = - -# List all default directories to look for include files here -DINCDIR = - -# List the default directory to look for the libraries here -DLIBDIR = - -# List all default libraries here -DLIBS = -lX11 -pthread -lrt - -# -# End of default section -############################################################################################## +SRC = +DEFS = +LIBS = +INCPATH = +LIBPATH = ############################################################################################## -# Start of user section +# These should be at the end # -# Default project name is the project directory name -ifeq ($(PROJECT),) - PROJECT := $(notdir $(patsubst %/,%,$(dir $(abspath $(firstword $(MAKEFILE_LIST)))))) -endif - -# Imported source files and paths for uGFX -GFXLIB = ../ugfx -include ${GFXLIB}/gfx.mk -include ${GFXLIB}/boards/base/Linux/board.mk - -# Where is our source code - alter these for your project. -# Either just include the demo makefile or add your own definitions -include $(GFXLIB)/demos/modules/gdisp/basics/demo.mk -#MYFILES = my-project-directory -#MYCSRC = $(MYFILES)/main.c -#MYDEFS = - -# List all user C define here, like -D_DEBUG=1 -UDEFS = $(MYDEFS) $(GFXDEFS) - -# Define ASM defines here -UADEFS = - -# List C source files here -SRC = $(GFXSRC) \ - $(MYCSRC) - -# List ASM source files here -ASRC = - -# List all user directories here -UINCDIR = $(MYFILES) $(GFXINC) - -# List the user directory to look for the libraries here -ULIBDIR = - -# List all user libraries here -ULIBS = - -# Define optimisation level here -OPT = -ggdb -O0 -fomit-frame-pointer - -# -# End of user defines -############################################################################################## - -# Output directory and files -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 ifeq ($(BUILDDIR),) - BUILDDIR = .build -else ifeq ($(BUILDDIR),.) - BUILDDIR = .build -endif - -OBJDIR = $(BUILDDIR)/obj -LSTDIR = $(BUILDDIR)/lst -MAPDIR = $(BUILDDIR)/map -DEPDIR = .dep - -INCDIR = $(patsubst %,-I%,$(DINCDIR) $(UINCDIR)) -LIBDIR = $(patsubst %,-L%,$(DLIBDIR) $(ULIBDIR)) -DEFS = $(DDEFS) $(UDEFS) -ADEFS = $(DADEFS) $(UADEFS) -COBJ = $(addprefix $(OBJDIR)/, $(subst ../,_dot_dot/,$(SRC:.c=.o))) -AOBJ = $(addprefix $(OBJDIR)/, $(subst ../,_dot_dot/,$(ASRC:.s=.o))) -OBJS = $(AOBJ) $(COBJ) -LIBS = $(DLIBS) $(ULIBS) - -ASFLAGS = $(ADEFS) -CPFLAGS = $(OPT) -Wall -Wextra -Wstrict-prototypes -fverbose-asm $(DEFS) -LDFLAGS = -Wl,-Map=$(MAPDIR)/$(PROJECT).map,--cref,--no-warn-mismatch $(LIBDIR) -ifeq ($(USE_LISTING),yes) - ASFLAGS += -Wa,-amhls=$(LSTDIR)/$(subst ../,_dot_dot/,$(<:.s=.lst)) - CPFLAGS += -Wa,-alms=$(LSTDIR)/$(subst ../,_dot_dot/,$(<:.c=.lst)) -endif - -ifeq ($(HOST_OSX),yes) - ifeq ($(OSX_SDK),) - OSX_SDK = /Developer/SDKs/MacOSX10.7.sdk - endif - ifeq ($(OSX_ARCH),) - OSX_ARCH = -mmacosx-version-min=10.3 -arch i386 - endif - - LIBS += $(OSX_ARCH) - CPFLAGS += -isysroot $(OSX_SDK) $(OSX_ARCH) - LDFLAGS = -Wl -Map=$(MAPDIR)/$(PROJECT).map,-syslibroot,$(OSX_SDK),$(LIBDIR) -else - # Linux, or other - CPFLAGS += -m32 -endif - -# Generate dependency information -CPFLAGS += -MD -MP -MF $(DEPDIR)/$(@F).d - -# -# makefile rules -# - -Debug Release: all - -cleanDebug cleanRelease: clean - -all: $(BUILDDIR) $(OBJS) $(PROJECT) - -$(BUILDDIR) $(OBJDIR) $(LSTDIR) $(MAPDIR): - mkdir -p $(OBJDIR) - mkdir -p $(MAPDIR) -ifeq ($(USE_LISTING),yes) - mkdir -p $(LSTDIR) -endif -ifneq ($(USE_VERBOSE_COMPILE),yes) - @echo Compiler Options - $(CC) -c $(CPFLAGS) -I. $(INCDIR) main.c -o $(OBJDIR)/main.o - @echo -endif - -.SECONDEXPANSION: -$(OBJDIR)/%.o : $$(subst _dot_dot/,../,%.c) - @mkdir -p $(dir $@) -ifeq ($(USE_VERBOSE_COMPILE),yes) - @echo - $(CC) -c $(CPFLAGS) -I. $(INCDIR) $< -o $@ -else - @echo Compiling $< - @$(CC) -c $(CPFLAGS) -I. $(INCDIR) $< -o $@ -endif - -$(OBJDIR)/%.o : $$(subst _dot_dot/,../,%.s) - @mkdir -p $(dir $@) -ifeq ($(USE_VERBOSE_COMPILE),yes) - @echo - $(AS) -c $(ASFLAGS) -I. $(INCDIR) $< -o $@ -else - @echo Compiling $< - @$(AS) -c $(ASFLAGS) -I. $(INCDIR) $< -o $@ -endif - -$(PROJECT): $(OBJS) - $(CC) $(OBJS) $(LDFLAGS) $(LIBS) -o $@ - -gcov: - -mkdir gcov - $(COV) -u $(subst /,\,$(SRC)) - -mv *.gcov ./gcov - -clean: - -rm -fR $(BUILDDIR) - -rm -fR $(DEPDIR) - -# -# Include the dependency files, should be the last of the makefile -# --include $(shell mkdir $(DEPDIR) 2>/dev/null) $(wildcard $(DEPDIR)/*) - +include $(GFXLIB)/tools/gmake_scripts/library_ugfx.mk +include $(GFXLIB)/tools/gmake_scripts/compiler_gcc.mk # *** EOF *** diff --git a/boards/base/OSX/board.mk b/boards/base/OSX/board.mk new file mode 100644 index 00000000..0d7da3f8 --- /dev/null +++ b/boards/base/OSX/board.mk @@ -0,0 +1,7 @@ +GFXINC += $(GFXLIB)/boards/base/OSX +GFXSRC += +GFXDEFS += -DGFX_USE_OS_OSX=TRUE +GFXLIBS += rt + +include $(GFXLIB)/drivers/multiple/X/driver.mk + diff --git a/boards/base/OSX/example/Makefile b/boards/base/OSX/example/Makefile new file mode 100644 index 00000000..d3502528 --- /dev/null +++ b/boards/base/OSX/example/Makefile @@ -0,0 +1,47 @@ +# Possible Targets: all clean Debug cleanDebug Release cleanRelease + +############################################################################################## +# Settings +# + +# See $(GFXLIB)/tools/gmake_scripts/readme.txt for the meaning of these variables +OPT_VERBOSE_COMPILE = no +OPT_GENERATE_LISTINGS = yes +OPT_GENERATE_MAP = yes +OPT_COPY_EXE = no +OPT_NATIVEOS = osx +OPT_OS = osx + +# See $(GFXLIB)/tools/gmake_scripts/library_ugfx.mk for the meaning of these variables +GFXLIB = ../uGFX +GFXBOARD = OSX +#GFXDRIVERS = multiple/uGFXnet +GFXDEMO = modules/gdisp/basics + +############################################################################################## +# Set these for your project +# + +OSX_SDK = /Developer/SDKs/MacOSX10.7.sdk +OSX_ARCH = -mmacosx-version-min=10.3 -arch i386 + +ARCH = +SRCFLAGS = -m32 -ggdb -O0 -fomit-frame-pointer -Wall -Wextra -Wstrict-prototypes -fverbose-asm -isysroot $(OSX_SDK) $(OSX_ARCH) +CFLAGS = +CXXFLAGS = +ASFLAGS = +LDFLAGS = -pthread -Wl,-syslibroot,$(OSX_SDK) $(OSX_ARCH) + +SRC = +DEFS = +LIBS = +INCPATH = +LIBPATH = + +############################################################################################## +# These should be at the end +# + +include $(GFXLIB)/tools/gmake_scripts/library_ugfx.mk +include $(GFXLIB)/tools/gmake_scripts/compiler_gcc.mk +# *** EOF *** diff --git a/boards/base/OSX/example/readme.txt b/boards/base/OSX/example/readme.txt new file mode 100644 index 00000000..aff58bb1 --- /dev/null +++ b/boards/base/OSX/example/readme.txt @@ -0,0 +1,5 @@ +Copy these files into your own project directory and alter them to suite. + +Notes: + +1/ Look at the MYFILES definition and the MYCSRC definition. diff --git a/boards/base/OSX/readme.txt b/boards/base/OSX/readme.txt new file mode 100644 index 00000000..df033cbe --- /dev/null +++ b/boards/base/OSX/readme.txt @@ -0,0 +1,7 @@ +This directory contains the interface for OSX using X. + +On this board uGFX currently supports: + - GDISP via the X driver + - GINPUT-touch via the X driver + +There is an example Makefile and project in the examples directory. diff --git a/boards/base/Win32/board.mk b/boards/base/Win32/board.mk index 69d09100..adcbaeaf 100644 --- a/boards/base/Win32/board.mk +++ b/boards/base/Win32/board.mk @@ -1,5 +1,5 @@ -GFXINC += $(GFXLIB)/boards/base/Win32 +GFXINC += GFXSRC += - +GFXLIBS += include $(GFXLIB)/drivers/multiple/Win32/driver.mk include $(GFXLIB)/drivers/gaudio/Win32/driver.mk diff --git a/boards/base/Win32/example/Makefile b/boards/base/Win32/example/Makefile index 7d54ac02..502cf1ac 100644 --- a/boards/base/Win32/example/Makefile +++ b/boards/base/Win32/example/Makefile @@ -1,239 +1,73 @@ -# -# !!!! Do NOT edit this makefile with an editor which replace tabs by spaces !!!! -# -############################################################################################## -# -# On command line: -# -# make all = Create project -# -# make clean = Clean project files. -# -# To rebuild project do "make clean" and "make all". -# +# Possible Targets: all clean Debug cleanDebug Release cleanRelease ############################################################################################## -# Start of make control +# Settings # -# Turn ChibiOS simimulator on or off? -USE_CHIBIOS=no +# See $(GFXLIB)/tools/gmake_scripts/readme.txt for the meaning of these variables +OPT_VERBOSE_COMPILE = no +OPT_GENERATE_LISTINGS = yes +OPT_GENERATE_MAP = yes +OPT_COPY_EXE = no +OPT_NATIVEOS = win32 +OPT_OS = win32 -# Verbose compiling? -USE_VERBOSE_COMPILE=no - -# Generate listing files? -USE_LISTING=no - -# Your project name and executable file name - Optional, defaults to the project directory name -#PROJECT=uGFX - -# -# End of make control -############################################################################################## - -############################################################################################## -# Start of default section -# - -CC = i686-pc-mingw32-gcc -g - -# List all default C defines here, like -D_DEBUG=1 -DDEFS = - -# List all default directories to look for include files here -DINCDIR = - -# List the default directory to look for the libraries here -DLIBDIR = - -# List all default libraries here -DLIBS = -lws2_32 -lgdi32 -lwinmm - -# Make sure this empty for now -SRC = - -# -# End of default section -############################################################################################## - -############################################################################################## -# Start of user section -# - -# Imported source files and paths for uGFX +# See $(GFXLIB)/tools/gmake_scripts/library_ugfx.mk for the meaning of these variables GFXLIB = ../uGFX -include $(GFXLIB)/gfx.mk -include $(GFXLIB)/boards/base/Win32/board.mk +GFXBOARD = Win32 +#GFXDRIVERS = multiple/uGFXnet +GFXDEMO = modules/gdisp/basics -# Imported source files and paths for ChibiOS -ifeq ($(USE_CHIBIOS),yes) +# Win32 - ChibiOS simulator +ifeq ($(OPT_OS),chibios) + # Required: Location of the ChibiOS code CHIBIOS = ../ChibiOS - include $(CHIBIOS)/boards/simulator/board.mk - include ${CHIBIOS}/os/hal/hal.mk - include ${CHIBIOS}/os/hal/platforms/Win32/platform.mk - include ${CHIBIOS}/os/ports/GCC/SIMIA32/port.mk - include ${CHIBIOS}/os/kernel/kernel.mk - DDEFS += -DSIMULATOR -DSHELL_USE_IPRINTF=FALSE - UINCDIR += $(PORTINC) $(KERNINC) $(TESTINC) \ - $(HALINC) $(PLATFORMINC) $(BOARDINC) - # ${CHIBIOS}/os/various - SRC += ${PORTSRC} \ - ${KERNSRC} \ - ${TESTSRC} \ - ${HALSRC} \ - ${PLATFORMSRC} \ - $(BOARDSRC) - GFXDEFS += -DGFX_USE_OS_CHIBIOS=TRUE -else - GFXDEFS += -DGFX_USE_OS_WIN32=TRUE endif -# Where is our source code - alter these for your project. -# Either just include the demo makefile or add your own definitions -include $(GFXLIB)/demos/modules/gdisp/basics/demo.mk -#MYFILES = my-project-directory -#MYCSRC = $(MYFILES)/main.c -#MYDEFS = -# List C source files here -SRC += ${GFXSRC} \ - ${MYCSRC} - -# List all user C define here, like -D_DEBUG=1 -UDEFS = ${GFXDEFS} - -# List all user directories here -UINCDIR = ${GFXINC} \ - ${MYFILES} - -# List the user directory to look for the libraries here -ULIBDIR = - -# List all user libraries here -ULIBS = - -# Define optimisation level here -#OPT = -ggdb -O2 -fomit-frame-pointer -OPT = -ggdb -O0 -fomit-frame-pointer - -# -# End of user defines ############################################################################################## - - -# Default project name is the project directory name -ifeq ($(PROJECT),) - PROJECT := $(notdir $(patsubst %/,%,$(dir $(abspath $(firstword $(MAKEFILE_LIST)))))) -endif - -# Output directory and files -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 ifeq ($(BUILDDIR),) - BUILDDIR = .build -else ifeq ($(BUILDDIR),.) - BUILDDIR = .build -endif - -OBJDIR = $(BUILDDIR)/obj -LSTDIR = $(BUILDDIR)/lst -MAPDIR = $(BUILDDIR)/map -DEPDIR = .dep - -INCDIR = $(patsubst %,-I%,$(DINCDIR) $(UINCDIR)) -LIBDIR = $(patsubst %,-L%,$(DLIBDIR) $(ULIBDIR)) -DEFS = $(DDEFS) $(UDEFS) -ADEFS = $(DADEFS) $(UADEFS) -COBJ = $(addprefix $(OBJDIR)/, $(subst ../,_dot_dot/,$(SRC:.c=.o))) -AOBJ = $(addprefix $(OBJDIR)/, $(subst ../,_dot_dot/,$(ASRC:.s=.o))) -OBJS = $(AOBJ) $(COBJ) -LIBS = $(DLIBS) $(ULIBS) - -LDFLAGS = -Wl,-Map=$(MAPDIR)/$(PROJECT).map,--cref,--no-warn-mismatch $(LIBDIR) -CPFLAGS = $(OPT) -Wall -Wextra -Wstrict-prototypes -fverbose-asm $(DEFS) -ifeq ($(USE_LISTING),yes) - CPFLAGS += -Wa,-alms=$(LSTDIR)/$(<:.c=.lst) -endif - -# Generate dependency information -CPFLAGS += -MD -MP -MF $(DEPDIR)/$(@F).d - -# -# makefile rules +# Set these for your project # -Debug Release: all +ARCH = i686-pc-mingw32- +SRCFLAGS = -ggdb -O0 -fomit-frame-pointer -Wall -Wextra -Wstrict-prototypes -fverbose-asm +CFLAGS = +CXXFLAGS = +ASFLAGS = +LDFLAGS = -cleanDebug cleanRelease: clean - -all: $(BUILDDIR) $(OBJS) $(BUILDDIR)/$(PROJECT).exe MAKE_ALL_RULE_HOOK -#all: main.cp - -main.cp: $(MYCSRC) - $(CC) -c $(CPFLAGS) -E -P -I. $(INCDIR) $< -o $@ - -MAKE_ALL_RULE_HOOK: - -$(BUILDDIR) $(OBJDIR) $(LSTDIR): - mkdir -p $(OBJDIR) - mkdir -p $(MAPDIR) -ifeq ($(USE_LISTING),yes) - mkdir -p $(LSTDIR) -endif -ifneq ($(USE_VERBOSE_COMPILE),yes) - @echo Compiler Options - $(CC) -c $(CPFLAGS) -I. $(INCDIR) main.c -o $(OBJDIR)/main.o - @echo -endif - -.SECONDEXPANSION: -$(OBJDIR)/%.o : $$(subst _dot_dot/,../,%.c) - @mkdir -p $(dir $@) -ifeq ($(USE_VERBOSE_COMPILE),yes) - @echo - $(CC) -c $(CPFLAGS) -I. $(INCDIR) $< -o $@ -else - @echo Compiling $< - @$(CC) -c $(CPFLAGS) -I. $(INCDIR) $< -o $@ -endif - -$(OBJDIR)/%.o : $$(subst _dot_dot/,../,%.s) - @mkdir -p $(dir $@) -ifeq ($(USE_VERBOSE_COMPILE),yes) - @echo - $(AS) -c $(ASFLAGS) -I. $(INCDIR) $< -o $@ -else - @echo Compiling $< - @$(AS) -c $(ASFLAGS) -I. $(INCDIR) $< -o $@ -endif - -%.exe: $(OBJS) -ifeq ($(USE_VERBOSE_COMPILE),yes) - @echo - $(CC) $(OBJS) $(LDFLAGS) $(LIBS) -o $@ -else - @echo Linking $@ - @$(CC) $(OBJS) $(LDFLAGS) $(LIBS) -o $@ -endif - -gcov: - -mkdir gcov - $(COV) -u $(subst /,\,$(SRC)) - -mv *.gcov ./gcov - -clean: - -rm -fR $(BUILDDIR) - -rm -fR $(DEPDIR) +SRC = +DEFS = +LIBS = +INCPATH = +LIBPATH = +############################################################################################## +# Optional: Win32 - ChibiOS Simulator # -# Include the dependency files, should be the last of the makefile -# --include $(shell mkdir $(DEPDIR) 2>/dev/null) $(wildcard $(DEPDIR)/*) +ifeq ($(OPT_OS),chibios) + include $(CHIBIOS)/boards/simulator/board.mk + include $(CHIBIOS)/os/hal/hal.mk + include $(CHIBIOS)/os/hal/platforms/Win32/platform.mk + include $(CHIBIOS)/os/ports/GCC/SIMIA32/port.mk + include $(CHIBIOS)/os/kernel/kernel.mk + DEFS += SIMULATOR SHELL_USE_IPRINTF=FALSE + INCPATH += $(PORTINC) $(KERNINC) $(TESTINC) \ + $(HALINC) $(PLATFORMINC) $(BOARDINC) + # $(CHIBIOS)/os/various + SRC += $(PORTSRC) \ + $(KERNSRC) \ + $(TESTSRC) \ + $(HALSRC) \ + $(PLATFORMSRC) \ + $(BOARDSRC) +endif + +############################################################################################## +# These should be at the end +# + +include $(GFXLIB)/tools/gmake_scripts/library_ugfx.mk +include $(GFXLIB)/tools/gmake_scripts/compiler_gcc.mk # *** EOF *** diff --git a/drivers/gaudio/Win32/driver.mk b/drivers/gaudio/Win32/driver.mk index 1ea338d5..f959279f 100644 --- a/drivers/gaudio/Win32/driver.mk +++ b/drivers/gaudio/Win32/driver.mk @@ -2,5 +2,5 @@ GFXSRC += $(GFXLIB)/drivers/gaudio/Win32/gaudio_record_lld.c \ $(GFXLIB)/drivers/gaudio/Win32/gaudio_play_lld.c -# Required include directories GFXINC += $(GFXLIB)/drivers/gaudio/Win32 +GFXLIBS += winmm diff --git a/drivers/multiple/Win32/driver.mk b/drivers/multiple/Win32/driver.mk index d9654dfe..cde5d93f 100644 --- a/drivers/multiple/Win32/driver.mk +++ b/drivers/multiple/Win32/driver.mk @@ -1,2 +1,3 @@ -GFXINC += $(GFXLIB)/drivers/multiple/Win32 -GFXSRC += $(GFXLIB)/drivers/multiple/Win32/gdisp_lld_Win32.c +GFXINC += $(GFXLIB)/drivers/multiple/Win32 +GFXSRC += $(GFXLIB)/drivers/multiple/Win32/gdisp_lld_Win32.c +GFXLIBS += gdi32 diff --git a/drivers/multiple/X/driver.mk b/drivers/multiple/X/driver.mk index 572a5b7d..e7255307 100644 --- a/drivers/multiple/X/driver.mk +++ b/drivers/multiple/X/driver.mk @@ -1,2 +1,3 @@ GFXINC += $(GFXLIB)/drivers/multiple/X GFXSRC += $(GFXLIB)/drivers/multiple/X/gdisp_lld_X.c +GFXLIBS += X11 diff --git a/drivers/multiple/uGFXnet/driver.mk b/drivers/multiple/uGFXnet/driver.mk index 89bd7cf2..c9d2749c 100644 --- a/drivers/multiple/uGFXnet/driver.mk +++ b/drivers/multiple/uGFXnet/driver.mk @@ -1,2 +1,6 @@ GFXINC += $(GFXLIB)/drivers/multiple/uGFXnet GFXSRC += $(GFXLIB)/drivers/multiple/uGFXnet/gdisp_lld_uGFXnet.c + +ifeq($(OPT_NATIVEOS),win32) + GFXLIBS += ws2_32 +endif diff --git a/gfx.mk b/gfx.mk index d3dbdbed..a0f27c53 100644 --- a/gfx.mk +++ b/gfx.mk @@ -13,3 +13,33 @@ include $(GFXLIB)/src/gadc/sys_make.mk include $(GFXLIB)/src/gaudio/sys_make.mk include $(GFXLIB)/src/gmisc/sys_make.mk include $(GFXLIB)/src/gfile/sys_make.mk + +# Include the boards and drivers +ifneq ($(GFXBOARD),) + include $(GFXLIB)/boards/base/$(GFXBOARD)/board.mk +endif +ifneq ($(GFXDRIVERS),) + include $(patsubst %,$(GFXLIB)/drivers/%/driver.mk,$(GFXDRIVERS)) +endif +ifneq ($(GFXDEMO),) + include $(GFXLIB)/demos/$(GFXDEMO)/demo.mk +endif + +# Include the operating system define +ifeq ($(OPT_OS),win32) + GFXDEFS += GFX_USE_OS_WIN32=TRUE +else ifeq ($(OPT_OS),linux) + GFXDEFS += GFX_USE_OS_LINUX=TRUE +else ifeq ($(OPT_OS),osx) + GFXDEFS += GFX_USE_OS_OSX=TRUE +else ifeq ($(OPT_OS),chibios) + GFXDEFS += GFX_USE_OS_CHIBIOS=TRUE +else ifeq ($(OPT_OS),freertos) + GFXDEFS += GFX_USE_OS_FREERTOS=TRUE +else ifeq ($(OPT_OS),ecos) + GFXDEFS += GFX_USE_OS_ECOS=TRUE +else ifeq ($(OPT_OS),rawrtos) + GFXDEFS += GFX_USE_OS_RAWRTOS=TRUE +else ifeq ($(OPT_OS),raw32) + GFXDEFS += GFX_USE_OS_RAW32=TRUE +endif 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