# Build platform (use one of AUTO, Unix, OSX_Universal, MSVC, Cygwin, MinGW) ifeq ($(BUILD_ENV),AUTO) uname = $(shell uname) ifeq ($(uname),windows32) BUILD_ENV_ := MSVC else ifeq ($(filter-out MINGW32_%, $(uname)),) BUILD_ENV_ := MinGW else ifeq ($(filter-out CYGWIN_%, $(uname)),) BUILD_ENV_ := Cygwin else BUILD_ENV_ := Unix endif else BUILD_ENV_ := $(BUILD_ENV) endif ifeq ($(filter-out Unix MinGW OSX_Universal,$(BUILD_ENV_)),) # Linux etc. LIBEXT = .a OBJEXT = .o EXEEXT = CFLAGS ?= -Wall -O2 CXXFLAGS ?= -Wall -O2 CP_CFLAGS = -MMD CP_CXXFLAGS = -MMD -DSTL_HASH_TR1 #LINKFLAGS = -static ifeq ($(BUILD_ENV_),OSX_Universal) # MacOS Fat Binaries CP_CXXFLAGS += -force_cpusubtype_ALL -arch i386 -arch ppc -arch x86_64 CP_CFLAGS += -force_cpusubtype_ALL -arch i386 -arch ppc -arch x86_64 LINKFLAGS += -force_cpusubtype_ALL -arch i386 -arch ppc -arch x86_64 endif LINKLIB = ld -r -o $@ $^ LINKBIN = $(CXX) $(LINKFLAGS) -o $@ $^ $(LIBS) ifeq ($(origin CC),default) CC = gcc #CC = icc endif ifeq ($(origin CXX),default) CXX = g++ #CXX = icpc endif ifeq ($(origin YACC),default) YACC = bison -y endif YFLAGS ?= -v ifeq ($(origin LEX),default) LEX = flex endif else ifeq ($(BUILD_ENV_),Cygwin) # use these for Cygwin: LIBEXT = .a OBJEXT = .o EXEEXT = CFLAGS ?= -Wall -O2 CXXFLAGS ?= -Wall -O2 CP_CFLAGS = -MMD -mno-cygwin CP_CXXFLAGS = -MMD -DSTL_HASH_GNU -mno-cygwin LINKFLAGS = -static -mno-cygwin LINKLIB = ld -r -o $@ $^ LINKBIN = $(CXX) $(LINKFLAGS) -o $@ $^ $(LIBS) ifeq ($(origin CC),default) CC = gcc #GCC 4.5.3 is broken #CC = i686-pc-mingw32-gcc endif ifeq ($(origin CXX),default) CXX = g++ #GCC 4.5.3 is broken #CXX = i686-pc-mingw32-g++ endif ifeq ($(origin YACC),default) YACC = bison -y endif YFLAGS ?= -v ifeq ($(origin LEX),default) LEX = flex endif else ifeq ($(BUILD_ENV_),MSVC) # use these for Visual Studio: LIBEXT = .lib OBJEXT = .obj EXEEXT = .exe CFLAGS ?= /O2 /GF CXXFLAGS ?= /O2 /GF CP_CFLAGS = CP_CXXFLAGS = -DSTL_HASH_TR1 LINKLIB = lib /NOLOGO /OUT:$@ $^ LINKBIN = $(CXX) $(LINKFLAGS) /Fe$@ $^ $(LIBS) ifeq ($(origin CC),default) CC = cl endif ifeq ($(origin CXX),default) CXX = cl endif ifeq ($(origin YACC),default) YACC = bison -y endif YFLAGS ?= -v ifeq ($(origin LEX),default) LEX = flex endif else $(error Invalid setting for BUILD_ENV: $(BUILD_ENV_)) endif first_target: all CP_CFLAGS += $(CFLAGS) $(INCLUDES) CP_CXXFLAGS += $(CXXFLAGS) $(INCLUDES) OBJ += $(patsubst %.cpp, %$(OBJEXT), $(filter %.cpp, $(SRC))) OBJ += $(patsubst %.cc, %$(OBJEXT), $(filter %.cc, $(SRC))) .SUFFIXES: .cc .d .cpp %.o:%.cpp $(CXX) -c $(CP_CXXFLAGS) -o $@ $< %.o:%.cc $(CXX) -c $(CP_CXXFLAGS) -o $@ $< %.o:%.c $(CC) -c $(CP_CFLAGS) -o $@ $< # this one is for Visual Studio's compiler: %.obj:%.cpp $(CXX) $(CP_CXXFLAGS) /nologo /c /EHsc $< /Fo$@ %.obj:%.cc $(CXX) $(CP_CXXFLAGS) /nologo /c /EHsc $< /Fo$@ %.obj:%.c $(CC) $(CP_CFLAGS) /nologo /c /EHsc $< /Fo$@ clean: $(RM) $(patsubst %.cpp, %$(OBJEXT), $(filter %.cpp, $(SRC))) \ $(patsubst %.cpp, %.d, $(filter %.cpp, $(SRC))) \ $(patsubst %.cc, %$(OBJEXT), $(filter %.cc, $(SRC))) \ $(patsubst %.cc, %.d, $(filter %.cc, $(SRC))) \ $(CLEANFILES) .PHONY: first_target clean all # # include a dependency file if one exists # # ifeq (.depend,$(wildcard .depend)) # include .depend # endif D_FILES1 = $(SRC:.c=.d) D_FILES = $(D_FILES1:.cpp=.d) -include $(D_FILES)