diff options
author | inmarket <andrewh@inmarket.com.au> | 2014-09-28 01:42:30 +1000 |
---|---|---|
committer | inmarket <andrewh@inmarket.com.au> | 2014-09-28 01:42:30 +1000 |
commit | daf9f65b9fb9822bc3bc80d63b66a612e085802a (patch) | |
tree | 554493727b03b8dc0277a9f7d5b53e339188a1fd /tools/gmake_scripts/compiler_gcc.mk | |
parent | 2776d00e82b85365efa38d0067b658fd2818ca41 (diff) | |
download | uGFX-daf9f65b9fb9822bc3bc80d63b66a612e085802a.tar.gz uGFX-daf9f65b9fb9822bc3bc80d63b66a612e085802a.tar.bz2 uGFX-daf9f65b9fb9822bc3bc80d63b66a612e085802a.zip |
New makefile structure. Also OSX board defintion
Diffstat (limited to 'tools/gmake_scripts/compiler_gcc.mk')
-rw-r--r-- | tools/gmake_scripts/compiler_gcc.mk | 155 |
1 files changed, 155 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 *** |