|
- RELEASE ?= 0 # default debug
- UNICODE ?= 0 # default ansi
- VERSION ?= 0
- FILENAME ?= 1
- ARCHBITS ?= # 32/64 bits
-
- ifeq ($(shell uname -m), x86_64)
- ARCHBITS = 64
- else ifeq ($(shell getconf LONG_BIT), 64)
- ARCHBITS = 64
- else ifeq ($(shell arch), x86_64)
- ARCHBITS = 64
- endif
-
- ifdef PLATFORM
- CROSS:=$(PLATFORM)-
- else
- CROSS:=
- PLATFORM:=linux$(ARCHBITS)
- endif
-
- ifeq ($(RELEASE),1)
- BUILD:=release
- else
- BUILD:=debug
- endif
-
- KERNEL := $(shell uname -s)
- ifeq ($(KERNEL),Linux)
- DEFINES += OS_LINUX
- endif
- ifeq ($(KERNEL),Darwin)
- DEFINES += OS_MAC
- endif
-
- #--------------------------------Compile-----------------------------
- #
- #--------------------------------------------------------------------
- AR := $(CROSS)ar
- CC := $(CROSS)gcc
- CXX := $(CROSS)g++
- CFLAGS += -Wall -fPIC
- CXXFLAGS += -Wall
-
- ifeq ($(RELEASE),1)
- CFLAGS += -Wall -O2
- CXXFLAGS += $(CFLAGS)
- DEFINES += NDEBUG
- else
- CFLAGS += -g -Wall
- # CFLAGS += -fsanitize=address
- CXXFLAGS += $(CFLAGS)
- DEFINES += DEBUG _DEBUG
- endif
-
- ifeq ($(FILENAME),1)
- CFLAGS += -Wno-builtin-macro-redefined -D'__FILE_NAME__="$(notdir $<)"'
- endif
-
- ifeq ($(VERSION),1)
- VERSIONFILE = version.o
- endif
-
- # default don't export anything
- CFLAGS += -fvisibility=hidden
-
- COMPILE.CC = $(CC) $(addprefix -I,$(INCLUDES)) $(addprefix -D,$(DEFINES)) $(CFLAGS)
- COMPILE.CXX = $(CXX) $(addprefix -I,$(INCLUDES)) $(addprefix -D,$(DEFINES)) $(CXXFLAGS)
-
- #-------------------------Link---------------------------
- #
- #--------------------------------------------------------------------
- ifeq ($(STATIC_LINK),1)
- LDFLAGS += -static
- endif
-
- #-------------------------Compile Output---------------------------
- #
- #--------------------------------------------------------------------
- ifeq ($(UNICODE),1)
- OUTPATH += unicode.$(BUILD).$(PLATFORM)
- else
- OUTPATH += $(BUILD).$(PLATFORM)
- endif
- OBJSPATH = $(OUTPATH)/objs
-
- OBJECT_FILES := $(patsubst %.c,%.o,$(patsubst %.cpp,%.o,$(SOURCE_FILES)))
- OBJECT_FILES := $(addprefix $(OBJSPATH)/,$(OBJECT_FILES))
- DEPENDENCE_FILES := $(OBJECT_FILES:%.o=%.d)
- MKDIR = @mkdir -p $(dir $@)
-
- #--------------------------Makefile Rules----------------------------
- #
- #--------------------------------------------------------------------
- $(OUTPATH)/$(OUTFILE): $(OBJECT_FILES) $(STATIC_LIBS) $(VERSIONFILE)
- ifeq ($(OUTTYPE),0)
- $(CXX) -o $@ -Wl,-rpath=. $(LDFLAGS) $^ $(addprefix -L,$(LIBPATHS)) $(addprefix -l,$(LIBS))
- else
- ifeq ($(OUTTYPE),1)
- $(CXX) -o $@ -shared -fPIC -rdynamic -Wl,-rpath=. $(LDFLAGS) $^ $(addprefix -L,$(LIBPATHS)) $(addprefix -l,$(LIBS))
- else
- @echo -e "\033[35m AR $(notdir $@)\033[0m"
- @$(AR) -rc $@ $^
- endif
- endif
- @echo make ok, output: $(OUTPATH)/$(OUTFILE)
-
- $(OBJSPATH)/%.o : %.c
- $(MKDIR)
- @$(COMPILE.CC) -c -o $@ $<
- @echo -e "\033[35m CC $(notdir $@)\033[0m"
-
- $(OBJSPATH)/%.o : %.cpp
- $(MKDIR)
- @$(COMPILE.CXX) -c -o $@ $<
- @echo -e "\033[35m CXX $(notdir $@)\033[0m"
-
- $(OBJSPATH)/%.d: %.c
- $(MKDIR)
- @echo -e "\033[32m CREATE $(notdir $@)\033[0m"
- @rm -f $@; \
- $(COMPILE.CC) -MM $(CFLAGS) $< > $@.$$$$; \
- sed 's,\($(notdir $*)\)\.o[ :]*,$*\.o $@ : ,g' < $@.$$$$ > $@; \
- rm -f $@.$$$$
- $(OBJSPATH)/%.d: %.cpp
- $(MKDIR)
- @echo -e "\033[32m CREATE $(notdir $@)\033[0m"
- @rm -f $@; \
- $(COMPILE.CXX) -MM $(CXXFLAGS) $< > $@.$$$$; \
- sed 's,\($(notdir $*)\)\.o[ :]*,$*\.o $@ : ,g' < $@.$$$$ > $@; \
- rm -f $@.$$$$
-
- ifeq ($(MAKECMDGOALS), clean)
- else ifeq ($(MAKECMDGOALS), debug)
- else
- sinclude $(DEPENDENCE_FILES)
- endif
-
- version.o: version.ver $(OBJECT_FILES) $(STATIC_LIBS)
- $(ROOT)/gitver.sh version.ver version.c
- @$(COMPILE.CXX) -c -o $@ version.c
-
- .PHONY: clean
- clean:
- @echo -e "\033[35m rm -rf *.o *.d version.h $(OUTPATH)/$(OUTFILE) \033[0m"
- @rm -f $(OBJECT_FILES) $(OUTPATH)/$(OUTFILE) $(DEPENDENCE_FILES)
- @rm -f version.c version.o
-
- debug:
- echo $(OUTPATH)/$(OUTFILE)
- echo $(OBJECT_FILES)
- echo $(DEPENDENCE_FILES)
|