| # SPDX-License-Identifier: GPL-2.0 | |
| # Copyright (c) 1999, 2001-2003 Silicon Graphics, Inc. All Rights Reserved. | |
| # | |
| ifndef _BUILDRULES_INCLUDED_ | |
| _BUILDRULES_INCLUDED_ = 1 | |
| include $(TOPDIR)/include/builddefs | |
| clean clobber : $(addsuffix -clean,$(SUBDIRS)) | |
| @rm -f $(DIRT) .ltdep .dep | |
| @rm -fr $(DIRDIRT) | |
| %-clean: | |
| @echo "Cleaning $*" | |
| $(Q)$(MAKE) $(MAKEOPTS) -C $* clean | |
| ifdef HDR_SUBDIRS | |
| .PHONY: .xfs | |
| headers: $(addsuffix -headers, $(HDR_SUBDIRS)) | |
| %-headers: .xfs | |
| @echo " [HEADERS] $*" | |
| $(Q)$(MAKE) $(MAKEOPTS) -C $* NODEP=1 install-headers | |
| .xfs: | |
| @mkdir -p include/xfs | |
| endif | |
| # Never blow away subdirs | |
| ifdef SUBDIRS | |
| .PRECIOUS: $(SUBDIRS) | |
| .PHONY: $(SUBDIRS) | |
| $(SUBDIRS): | |
| @echo "Building $@" | |
| $(Q)$(MAKE) $(MAKEOPTS) -q -C $@ || $(MAKE) $(MAKEOPTS) -C $@ | |
| endif | |
| ifndef CHECK_CMD | |
| CHECK_CMD = @true | |
| endif | |
| # | |
| # Standard targets | |
| # | |
| ifeq ($(CHECKSRC),2) | |
| # Check every .c file with sparse CHECK_CMD, do not call compiler | |
| $(LTCOMMAND) $(LTLIBRARY) : $(SUBDIRS) $(OBJECTS) | |
| .PHONY: $(LTCOMMAND) $(LTLIBRARY) | |
| %.lo %.o : %.c FORCE | |
| @echo " [CHECK] $<" | |
| $(Q)$(CHECK_CMD) $(CFLAGS) $< | |
| FORCE: | |
| else | |
| # Regular build, possibly calling sparse CHECK_CMD as well | |
| ifdef LTCOMMAND | |
| $(LTCOMMAND) : $(SUBDIRS) $(OBJECTS) $(LTDEPENDENCIES) | |
| @echo " [LD] $@" | |
| $(Q)$(LTLINK) -o $@ $(LDFLAGS) $(OBJECTS) $(LDLIBS) | |
| endif | |
| ifdef LTLIBRARY | |
| $(LTLIBRARY) : $(SUBDIRS) $(LTOBJECTS) | |
| @echo " [LD] $@" | |
| $(Q)$(LTLINK) $(LTLDFLAGS) -o $(LTLIBRARY) $(LTOBJECTS) $(LTLIBS) | |
| %.lo: %.c | |
| @echo " [CC] $@" | |
| $(Q)$(LTCOMPILE) -c $< | |
| $(Q)$(CHECK_CMD) $(CFLAGS) $< | |
| else | |
| %.o: %.c | |
| @echo " [CC] $@" | |
| $(Q)$(CC) $(CFLAGS) -c $< | |
| $(Q)$(CHECK_CMD) $(CFLAGS) $< | |
| endif | |
| endif | |
| ifdef POTHEAD | |
| $(POTHEAD): $(XGETTEXTFILES) | |
| @echo " [GETTXT] $@" | |
| $(Q)$(XGETTEXT) --language=C --keyword=_ --keyword=N_ -o $@ $(XGETTEXTFILES) | |
| # Update translations | |
| update-po: $(POTHEAD) $(wildcard $(TOPDIR)/po/*.po) | |
| catalogs="$(wildcard $(TOPDIR)/po/*.po)"; \ | |
| for cat in $$catalogs; do \ | |
| lang=`basename $$cat .po`; \ | |
| mv $$lang.po $$lang.old.po; \ | |
| echo "$$lang:"; \ | |
| if $(MSGMERGE) $$lang.old.po $(POTHEAD) -o $$lang.po; then \ | |
| rm -f $$lang.old.po; \ | |
| else \ | |
| echo "msgmerge for $$lang failed!"; \ | |
| rm -f $$lang.po; \ | |
| mv $$lang.old.po $$lang.po; \ | |
| fi; \ | |
| done | |
| %.mo: %.po | |
| @echo " [MSGFMT] $@" | |
| $(Q)$(MSGFMT) -c --statistics -o $@ $< | |
| endif | |
| endif # _BUILDRULES_INCLUDED_ | |
| $(_FORCE): | |
| # dependency build is automatic, relies on gcc -MM to generate. | |
| # | |
| # This is a bit messy. It regenerates the dependencies on each build so | |
| # that we catch files being added and removed. There are other ways of doing | |
| # this (e.g. per-file dependency files) but that requires more in-depth changes | |
| # to the build system. Compile time is not an issue for us, so the | |
| # rebuild on every make invocation isn't a problem we need to care about. Just | |
| # do it silently so it doesn't make the build unnecessarily noisy. | |
| .PHONY : depend ltdepend | |
| MAKEDEP := $(MAKEDEPEND) $(CFLAGS) | |
| ltdepend: rmltdep .ltdep | |
| rmltdep: | |
| $(Q)rm -f .ltdep | |
| .ltdep: $(CFILES) $(HFILES) | |
| $(Q)$(MAKEDEP) $(CFILES) | $(SED) -e 's,^\([^:]*\)\.o,\1.lo,' > .ltdep | |
| depend: rmdep .dep | |
| rmdep: | |
| $(Q)rm -f .dep | |
| .dep: $(CFILES) $(HFILES) | |
| $(Q)$(MAKEDEP) $(CFILES) > .dep |