# ----------------------------------------------- # OPTIONS # ----------------------------------------------- DEBUG ?= 0 STATIC ?= 0 MARCH ?= native MTUNE ?= native # ----------------------------------------------- # TOOLS # ----------------------------------------------- STRIP ?= strip WNDRS ?= windres # ----------------------------------------------- # SYSTEM DETECTION # ----------------------------------------------- OS_TYPE := $(shell $(CXX) -dumpmachine) # ----------------------------------------------- # FILES # ----------------------------------------------- SRCDIR = src RESDIR = res OBJDIR = obj BINDIR = bin LIBDIR = ../libmhash384 SRCFILES = $(wildcard $(SRCDIR)/*.cpp) RESFILES = $(wildcard $(RESDIR)/*.rc) OBJFILES = $(addprefix $(OBJDIR)/,$(patsubst %.cpp,%.o,$(notdir $(SRCFILES)))) ifeq ($(DEBUG),0) EXENAME = mhash384 else EXENAME = mhash384g endif ifeq ($(words $(filter %mingw32 %windows-gnu %cygwin %cygnus,$(OS_TYPE))),0) SUFFIX = run else SUFFIX = exe OBJFILES += $(addprefix $(OBJDIR)/,$(patsubst %.rc, %.o,$(notdir $(RESFILES)))) endif CORFILE = $(LIBDIR)/src/mhash384.cpp RSCFILE = $(OBJDIR)/resource.h EXEFILE = $(BINDIR)/$(EXENAME).$(SUFFIX) TAGFILE = $(BINDIR)/BUILD_TAG.txt # ----------------------------------------------- # FLAGS # ----------------------------------------------- CXXFLAGS += -std=gnu++11 -I$(LIBDIR)/include LDFLAGS += -L$(LIBDIR)/lib ifeq ($(STATIC),1) LDFLAGS += -static endif ifneq ($(words $(filter %w64-mingw32 %w64-windows-gnu,$(OS_TYPE))),0) LDFLAGS += -municode endif ifeq ($(DEBUG),0) ifeq ($(SANITIZE),) CXXFLAGS += -O3 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -DNDEBUG else CXXFLAGS += -O1 -U_FORTIFY_SOURCE -fsanitize=$(SANITIZE) -fno-omit-frame-pointer LDFLAGS += -fsanitize=$(SANITIZE) endif CXXFLAGS += -march=$(MARCH) -mtune=$(MTUNE) LDFLAGS += -lmhash384-2 else CXXFLAGS += -g LDFLAGS += -lmhash384g-2 endif # ----------------------------------------------- # MAKE RULES # ----------------------------------------------- .DELETE_ON_ERROR: .PHONY: all clean all: $(EXEFILE) $(TAGFILE) $(EXEFILE): $(OBJFILES) @mkdir -p $(dir $@) $(CXX) $+ -o $@ $(LDFLAGS) ifeq ($(DEBUG),0) ifeq ($(SANITIZE),) $(STRIP) -s $@ endif endif $(OBJDIR)/%.o: $(SRCDIR)/%.cpp @mkdir -p $(dir $@) $(CXX) $(CXXFLAGS) -o $@ -c $< $(OBJDIR)/%.o: $(RESDIR)/%.rc $(RSCFILE) @mkdir -p $(dir $@) $(WNDRS) -I$(OBJDIR) -o $@ $< $(RSCFILE): $(CORFILE) @mkdir -p $(dir $@) grep -E '^#define[[:space:]]+MHASH384_VERSION' $< > $@ date +'#define MHASH384_VERSION_BUILD %y%W%w' >> $@ $(TAGFILE): $(EXEFILE) @mkdir -p $(dir $@) touch $@ -$< --version > $@ clean: rm -f $(OBJDIR)/*.o rm -f $(OBJDIR)/*.h rm -f $(BINDIR)/*.$(SUFFIX)