aboutsummaryrefslogtreecommitdiffstats
path: root/tools/gmake_scripts/compiler_gcc.mk
diff options
context:
space:
mode:
Diffstat (limited to 'tools/gmake_scripts/compiler_gcc.mk')
-rw-r--r--tools/gmake_scripts/compiler_gcc.mk155
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 ***