Blame | Last modification | View Log | Download
## Supported environments:# * GNU/Linux.## Allowed but not tested environments:# * Windows NT (Cygwin/MinGW).## Dependencies (for this Makefile):# * GNU make;# * GNU core utilities.## Dependencies for native compilation:# * GNU C compiler.## Dependencies for cross-compilation:# * GNU C compiler (MinGW target).## Default valuesdestdir ?= ../buildTARGET ?= nativeDEBUG ?= 0ifeq ($(DEBUG),0)BUILDDIR := $(destdir)/releaseelseBUILDDIR := $(destdir)/debugendifGCC_CFLAGS_DEBUG = -gGCC_CFLAGS_RELEASE = -O2ifeq ($(OS),Windows_NT)$(warning BUILD PROCESS IS NOT TESTED FOR OS='$(OS)' !)ifeq ($(TARGET),native)BUILDDIR := $(BUILDDIR)/windowsCC ?= gccCFLAGS = -mconsoleifeq ($(DEBUG),0)CFLAGS += $(GCC_CFLAGS_RELEASE)elseCFLAGS += $(GCC_CFLAGS_DEBUG)endifelse ifeq ($(TARGET),mingw32)BUILDDIR := $(BUILDDIR)/windows-mingw32CC = i686-w64-mingw32-gccCFLAGS = -mconsoleifeq ($(DEBUG),0)CFLAGS += $(GCC_CFLAGS_RELEASE)elseCFLAGS += $(GCC_CFLAGS_DEBUG)endifelse ifeq ($(TARGET),mingw64)BUILDDIR := $(BUILDDIR)/windows-mingw64CC = x86_64-w64-mingw32-gccCFLAGS = -mconsoleifeq ($(DEBUG),0)CFLAGS += $(GCC_CFLAGS_RELEASE)elseCFLAGS += $(GCC_CFLAGS_DEBUG)endifelse$(error Unknown target '$(TARGET)')endifEXECEXT = .exeelseifeq ($(TARGET),native)BUILDDIR := $(BUILDDIR)/linuxCC ?= gccCFLAGS =EXECEXT =ifeq ($(DEBUG),0)CFLAGS += $(GCC_CFLAGS_RELEASE)elseCFLAGS += $(GCC_CFLAGS_DEBUG)endifelse ifeq ($(TARGET),mingw32)BUILDDIR := $(BUILDDIR)/linux-mingw32CC = i686-w64-mingw32-gccCFLAGS = -mconsoleEXECEXT = .exeifeq ($(DEBUG),0)CFLAGS += $(GCC_CFLAGS_RELEASE)elseCFLAGS += $(GCC_CFLAGS_DEBUG)endifelse ifeq ($(TARGET),mingw64)BUILDDIR := $(BUILDDIR)/linux-mingw64CC = x86_64-w64-mingw32-gccCFLAGS = -mconsoleEXECEXT = .exeifeq ($(DEBUG),0)CFLAGS += $(GCC_CFLAGS_RELEASE)elseCFLAGS += $(GCC_CFLAGS_DEBUG)endifelse$(error Unknown target '$(TARGET)')endifendifMAINSRC = main.cMAINEXEC = aspp$(EXECEXT)SRCS = asmfile.c debug.c l_err.c l_ifile.c l_inc.c l_isrc.c l_list.c l_pre.c l_src.c l_tgt.c parser.c platform.cCFLAGS += -Wall -DDEBUG=$(DEBUG)DEPCC = $(CC)DEPCFLAGS = -MMDEPEXT = d# All targetsTARGETS=native mingw32 mingw64.PHONY: empty all clean.DEFAULT_GOAL = emptyempty:@echo 'Usage:'@echo ' make [ destdir=<path> ] [ TARGET=<TARGET> ] [ DEBUG=<0|1> ]'@echo ' [ all | clean ]'@echo 'where:'@echo ' <TARGET> is one of: $(TARGETS)'# Clear listsDEPS=OBJS=# $1=source .c file namedefine compile_c_o_rule =# Put dependency file in $(BUILDDIR)/$(BUILDDIR)/$(patsubst %$(suffix $(1)),%.$(DEPEXT),$(1)): $(1)@mkdir -p $$(@D)$$(DEPCC) $$(DEPCFLAGS) -MF $$@ -MT $$@ -MT $(BUILDDIR)/$(patsubst %$(suffix $(1)),%.o,$(1)) $(1)DEPS+=$(BUILDDIR)/$(patsubst %$(suffix $(1)),%.$(DEPEXT),$(1))# Put object file in $(BUILDDIR)/$(BUILDDIR)/$(patsubst %$(suffix $(1)),%.o,$(1)): $(1)@mkdir -p $$(@D)$$(CC) $$(CFLAGS) -c -o $$@ $(1)OBJS+=$(BUILDDIR)/$(patsubst %$(suffix $(1)),%.o,$(1))endef$(foreach f,$(SRCS),$(eval $(call compile_c_o_rule,$(f))))# Put dependency file in $(BUILDDIR)/$(BUILDDIR)/$(patsubst %$(suffix $(MAINSRC)),%.$(DEPEXT),$(MAINSRC)): $(MAINSRC)@mkdir -p $(@D)$(DEPCC) $(DEPCFLAGS) -MF $@ -MT $@ -MT $(BUILDDIR)/$(MAINEXEC) $(MAINSRC)DEPS+=$(BUILDDIR)/$(patsubst %$(suffix $(MAINSRC)),%.$(DEPEXT),$(MAINSRC))# Put executable file in $(BUILDDIR)/$(BUILDDIR)/$(MAINEXEC): $(MAINSRC) $(OBJS)@mkdir -p $(@D)$(CC) $(CFLAGS) -o $@ $(MAINSRC) $(OBJS)ifeq ($(DEBUG),0)strip $@endif########### all ###########all: $(BUILDDIR)/$(MAINEXEC)############# clean #############clean:$(RM) $(DEPS) $(OBJS) $(BUILDDIR)/$(MAINEXEC)# unsafe if BUILDDIR is source directory:# test -d $(BUILDDIR) && $(RM) -r $(BUILDDIR) || true#################### Dependencies ####################ifneq ($(MAKECMDGOALS),)ifeq ($(sort \$(filter empty,$(MAKECMDGOALS)) \$(filter clean,$(MAKECMDGOALS)) \),)include $(DEPS)endifendif