OBJDIR=obj .DEFAULT_GOAL=all _DEPFILES=$(addprefix $(OUT)/.deps/, $(OBJ:.o=.d)) _PCHDRS=$(shell [ -z "$(PCPKGS)" ] || pkg-config --cflags $(PCPKGS)) _PCLIBS=$(shell [ -z "$(PCPKGS)" ] ||pkg-config --libs $(PCPKGS)) _LIBSRCHPATHS=$(addprefix -L, $(dir $(DEP))) _LIBINCPATHS=$(addprefix -I, $(dir $(DEP))) $(_PCHDRS) _LIBPATHS=$(addprefix -l, $(patsubst lib%.a,%,$(notdir $(DEP)))) $(_PCLIBS) CFLAGS ?= -g -Og CFLAGS += -Wall -Werror -Wno-unused-parameter -Wno-missing-field-initializers -Wno-sign-compare -Wno-char-subscripts CFLAGS += -MMD -MP -MF $(OUT)/.deps/$(subst /,-,$*).d CXXFLAGS += -std=c++14 $(CFLAGS) LDFLAGS += -pthread -lm OUT ?= obj LIB ?= $(INSTLIB) BIN ?= $(INSTBIN) ifdef SOLIB CFLAGS += -fPIC else CFLAGS += -fPIE endif Q=@ # disable implicit rules. .SUFFIXES: .SECONDARY: .PHONY: clean .PHONY: all _modversions all: _modversions $(SOLIB:%=$(OUT)/%) $(BIN:%=$(OUT)/%) $(LIB:%=$(OUT)/%) $(EXTRA) pkg: all if [ -n "$(BIN)" ]; then \ ../../buildscripts/mkpkg.sh -o $(BIN).$(ABI).mpkg -a apply.sh obj.$(ABI)/$(BIN) sv.$(BIN); \ fi $(OUT)/$(SOLIB): $(OBJ:%.o=$(OUT)/%.o) $(EXTRADEP) $(DEP) @echo SO $@ $(Q)$(CC) -fPIC -shared -o $@ $(OBJ:%.o=$(OUT)/%.o) $(_LIBSRCHPATHS) $(_LIBPATHS) $(LDFLAGS) $(OUT)/$(LIB): $(OBJ:%.o=$(OUT)/%.o) $(EXTRADEP) $(DEP) @echo AR $@ $(Q)$(AR) -rcs $@ $(OBJ:%.o=$(OUT)/%.o) $(OUT)/$(BIN): $(OBJ:%=$(OUT)/%) $(EXTRADEP) $(DEP) @echo LD $@ $(Q)$(CC) -o $@ -fPIE -pie $(OBJ:%.o=$(OUT)/%.o) $(_LIBSRCHPATHS) $(_LIBPATHS) $(LDFLAGS) $(STATIC) $(DEP): @cd $(dir $@) && $(MAKE) clean: $(EXTRACLEAN) $(GENSRC) $(GENHDR) rm -rf $(OUT) rm -f $(EXTRACLEAN) $(OUT)/%.o: ./%.c $(OUT)/.stamp $(GENHDR) @echo CC $@ $(Q)mkdir -p $$(dirname $@) $(Q)$(CC) -o $@ -c $(CFLAGS) $(_LIBINCPATHS) $< $(OUT)/%.o: ./%.cpp $(OUT)/.stamp $(GENHDR) @echo CX $@ $(Q)mkdir -p $$(dirname $@) $(Q)$(CXX) -o $@ -c $(CXXFLAGS) $(_LIBINCPATHS) $< $(OUT)/%.o: ./%.cc $(OUT)/.stamp $(GENHDR) @echo CC $@ $(Q)mkdir -p $$(dirname $@) $(Q)$(CXX) -o $@ -c $(CXXFLAGS) $(_LIBINCPATHS) $< .deps/stamp: $(OUT)/.stamp: mkdir -p $(OUT)/.deps && touch $(OUT)/.stamp mkdir -p .deps && touch .deps/.stamp config.mk: configure ./configure --redo _modversions: $(Q)[ -z "$(PCPKGS)" ] || pkg-config --modversion $(PCPKGS) > /dev/null -include $(_DEPFILES)