#----------------------------------------------------------------------------- # Copyright (C) Proxmark3 contributors. See AUTHORS.md for details. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # See LICENSE.txt for the text of the license. #----------------------------------------------------------------------------- # This Makefile might have been called from various subdirs, trying to find our Makefile.defs ifeq ($(DEFSBEENHERE),) -include Makefile.defs endif ifeq ($(DEFSBEENHERE),) -include ../Makefile.defs endif ifeq ($(DEFSBEENHERE),) -include ../../Makefile.defs endif ifeq ($(DEFSBEENHERE),) -include ../../../Makefile.defs endif ifeq ($(DEFSBEENHERE),) $(error Can't find Makefile.defs) endif CFLAGS ?= $(DEFCFLAGS) CFLAGS += $(MYDEFS) $(MYCFLAGS) $(MYINCLUDES) CXXFLAGS ?= $(DEFCXXFLAGS) CXXFLAGS += $(MYDEFS) $(MYCXXFLAGS) $(MYINCLUDES) LDFLAGS ?= $(DEFLDFLAGS) LDFLAGS += $(MYLDFLAGS) LDLIBS += $(MYLDLIBS) vpath %.c $(MYSRCPATHS) # Flags to generate temporary dependency files DEPFLAGS = -MT $@ -MMD -MP -MF $(OBJDIR)/$*.Td # make temporary to final dependency files after successful compilation POSTCOMPILE = $(MV) -f $(OBJDIR)/$*.Td $(OBJDIR)/$*.d && $(TOUCH) $@ BINDIR := . OBJDIR := obj MYOBJS ?= $(MYSRCS:%.c=$(OBJDIR)/%.o) MYCXXOBJS ?= $(MYCXXSRCS:%.cpp=$(OBJDIR)/%.o) CLEAN = $(foreach bin,$(MYLIBS) $(BINS) $(LIB_A),$(BINDIR)/$(bin)) all: $(foreach bin,$(MYLIBS) $(BINS) $(LIB_A),$(BINDIR)/$(bin)) clean: $(Q)$(RM) $(CLEAN) $(Q)$(RMDIR) $(OBJDIR) ifneq (,$(MYCLEANOLDPATH)) $(Q)$(RM) $(foreach f,$(CLEAN),$(MYCLEANOLDPATH)/$(f)) $(Q)$(RMDIR) $(MYCLEANOLDPATH)/$(OBJDIR) $(Q)$(RMDIR_SOFT) $(MYCLEANOLDPATH) 2>/dev/null || true endif install: all ifneq (,$(INSTALLTOOLS)) $(info [@] Installing $(BINS) to $(DESTDIR)$(PREFIX)...) $(Q)$(MKDIR) $(DESTDIR)$(PREFIX)$(PATHSEP)$(INSTALLTOOLSRELPATH) $(Q)$(CP) $(INSTALLTOOLS) $(DESTDIR)$(PREFIX)$(PATHSEP)$(INSTALLTOOLSRELPATH) endif @true uninstall: ifneq (,$(INSTALLTOOLS)) $(info [@] Uninstalling $(BINS) from $(DESTDIR)$(PREFIX)...) $(Q)$(RM) $(foreach tool,$(INSTALLTOOLS),$(DESTDIR)$(PREFIX)$(PATHSEP)$(INSTALLTOOLSRELPATH)$(PATHSEP)$(notdir $(tool))) endif @true .PHONY: all clean install uninstall $(BINDIR)/$(LIB_A): $(MYOBJS) $(MYCXXOBJS) $(info [=] AR $(notdir $@)) $(Q)$(AR) $@ $(MYOBJS) $(MYCXXOBJS) $(Q)$(RANLIB) $@ $(BINDIR)/% : $(OBJDIR)/%.o $(MYOBJS) $(MYCXXOBJS) $(MYLIBS) $(info [=] LD $(notdir $@)) $(Q)$(LD) $(LDFLAGS) $(MYOBJS) $(MYCXXOBJS) $< -o $@ $(MYLIBS) $(MYLDLIBS) %.o: %.c $(OBJDIR)/%.o : %.c $(OBJDIR)/%.d | $(OBJDIR) $(info [-] CC $<) $(Q)$(CC) $(DEPFLAGS) $(CFLAGS) -c -o $@ $< $(Q)$(POSTCOMPILE) %.o: %.cpp $(OBJDIR)/%.o : %.cpp $(OBJDIR)/%.d | $(OBJDIR) $(info [-] CXX $<) $(Q)$(CXX) $(DEPFLAGS) $(CXXFLAGS) -c -o $@ $< $(Q)$(POSTCOMPILE) $(OBJDIR): $(Q)$(MKDIR) $(OBJDIR) DEPENDENCY_FILES = $(MYOBJS:%.o=%.d) $(MYCXXOBJS:%.o=%.d) $(BINS:%=$(OBJDIR)/%.d) $(DEPENDENCY_FILES): ; .PRECIOUS: $(DEPENDENCY_FILES) -include $(DEPENDENCY_FILES)