make: Further improve build time

This commit sees several improvements to the build performance:

- Introduce cache.mk, which creates makefiles caching often used
  variables, per tree and per project.
- Define more variables with := enclosed in condistions, instead of
  defining them with ?=, because the RHS of ?= is expanded deferredly.
- Add more definitions for executables.
- Move some more specialized definitions out into specialized makefiles,
  notably htdocs.mk and tmpl.mk

Signed-off-by: Jan Lindemann <jan@janware.com>
This commit is contained in:
Jan Lindemann 2019-02-28 13:22:12 +00:00
commit 9e245c986e
7 changed files with 176 additions and 109 deletions

View file

@ -7,51 +7,85 @@ JW_BUILD_DEF_MK_INCLUDED = true
MAKEFLAGS += -r
-include $(MODDIR)/make/.cache.mk
-include $(TOPDIR)/make/.cache.mk
include $(MODDIR)/make/platform.mk
include $(MODDIR)/make/projects.mk
ifeq ($(MAKE_BENCHMARK),true)
SHELL := /bin/bash $(MOD_SCRIPT_DIR)/timed-make-shell.sh
export SHELL := /bin/bash $(MOD_SCRIPT_DIR)/timed-make-shell.sh
else
export SHELL := /bin/bash
endif
# ----- pre-local.mk
ifneq ($(wildcard $(MODDIR)/make/pre-local.mk),)
include $(MODDIR)/make/pre-local.mk
endif
ifneq ($(wildcard $(TOPDIR)/make/pre-local.mk),)
include $(TOPDIR)/make/pre-local.mk
endif
ifneq ($(wildcard pre-local.mk),)
include pre-local.mk
endif
-include $(MODDIR)/make/pre-local.mk
-include $(TOPDIR)/make/pre-local.mk
-include pre-local.mk
# ----- executables
WHICH := $(firstword $(wildcard /usr/bin/which) $(shell which which))
SED := $(shell $(WHICH) sed)
CAT := /bin/cat
#ifeq ($(SHELL),)
export SHELL := /bin/bash
ifndef WHICH
WHICH := $(firstword $(wildcard /usr/bin/which) $(shell which which))
endif
ifndef GREP
GREP := $(shell $(WHICH) grep)
endif
ifndef SED
SED := $(shell $(WHICH) sed)
endif
CAT := $(shell $(WHICH) cat)
ifndef BROWSER
BROWSER := $(shell $(WHICH) xdg-open)
endif
ifeq ($(origin RM),default)
RM := $(shell $(WHICH) rm)
endif
ifndef AR
AR = $(shell $(WHICH) ar)
endif
#ifndef PWD
PWD := $(shell $(WHICH) pwd)
#endif
BROWSER ?= xdg-open
RM := $(shell $(WHICH) rm)
AR = /usr/bin/ar
PWD := $(shell $(WHICH) pwd)
CWD := $(shell $(PWD))
BIN_INSTALL := /usr/bin/install
SUDO ?= /usr/bin/sudo
MY_SHELL := /bin/bash
GET_OS_SH := $(SHELL) $(MOD_SCRIPT_DIR)/get-os.sh
ID := $(shell $(WHICH) id)
CUT := $(shell $(WHICH) cut)
TR := $(shell $(WHICH) tr)
AWK := $(shell $(WHICH) awk)
GETENT := $(shell $(WHICH) getent)
XARGS := $(shell $(WHICH) xargs)
FIND := $(shell $(WHICH) find)
PRINTF := $(shell $(WHICH) printf)
ifndef CWD
CWD := $(shell $(PWD))
endif
ifndef BIN_INSTALL
BIN_INSTALL := $(shell $(WHICH) install)
endif
ifndef SUDO
SUDO := $(shell $(WHICH) sudo)
endif
ifndef MY_SHELL
MY_SHELL := /bin/bash
endif
ifndef GET_OS_SH
GET_OS_SH := $(SHELL) $(MOD_SCRIPT_DIR)/get-os.sh
endif
ifndef ID
ID := $(shell $(WHICH) id)
endif
ifndef CUT
CUT := $(shell $(WHICH) cut)
endif
ifndef TR
TR := $(shell $(WHICH) tr)
endif
ifndef AWK
AWK := $(shell $(WHICH) awk)
endif
ifndef GETENT
GETENT := $(shell $(WHICH) getent)
endif
ifndef XARGS
XARGS := $(shell $(WHICH) xargs)
endif
ifndef FIND
FIND := $(shell $(WHICH) find)
endif
ifndef PRINTF
PRINTF := $(shell $(WHICH) printf)
endif
# makefile helpers
FIND_SUBDIRS := $(filter-out . .. nomake CVS $(IGNORE_SUBDIRS),\
@ -147,27 +181,27 @@ ifeq ($(OS_TUPLE),)
endif
ifneq ($(TARGET_TUPLE),)
TARGET_TUPLE_WORDS ?= $(subst -, ,$(TARGET_TUPLE))
TARGET_ARCH ?= $(word 1,$(TARGET_TUPLE_WORDS))
TARGET_VENDOR ?= $(word 2,$(TARGET_TUPLE_WORDS))
TARGET_OS ?= $(word 3,$(TARGET_TUPLE_WORDS))
TARGET_ABI ?= $(word 4,$(TARGET_TUPLE_WORDS))
TARGET_TRIPLET ?= $(TARGET_ARCH)-$(TARGET_OS)-$(TARGET_ABI)
TARGET_TUPLE_WORDS := $(subst -, ,$(TARGET_TUPLE))
TARGET_ARCH := $(word 1,$(TARGET_TUPLE_WORDS))
TARGET_VENDOR := $(word 2,$(TARGET_TUPLE_WORDS))
TARGET_OS := $(word 3,$(TARGET_TUPLE_WORDS))
TARGET_ABI := $(word 4,$(TARGET_TUPLE_WORDS))
TARGET_TRIPLET := $(TARGET_ARCH)-$(TARGET_OS)-$(TARGET_ABI)
else ifneq ($(TARGET_TRIPLET),)
TARGET_TRIPLET_WORDS ?= $(subst -, ,$(TARGET_TRIPLET))
TARGET_ARCH ?= $(word 1,$(TARGET_TRIPLET_WORDS))
TARGET_VENDOR ?= unknown
TARGET_OS ?= $(word 2,$(TARGET_TRIPLET_WORDS))
TARGET_ABI ?= $(word 3,$(TARGET_TRIPLET_WORDS))
TARGET_TUPLE ?= $(TARGET_ARCH)-$(TARGET_VENDOR)-$(TARGET_OS)-$(TARGET_ABI)
TARGET_TRIPLET_WORDS := $(subst -, ,$(TARGET_TRIPLET))
TARGET_ARCH := $(word 1,$(TARGET_TRIPLET_WORDS))
TARGET_VENDOR := unknown
TARGET_OS := $(word 2,$(TARGET_TRIPLET_WORDS))
TARGET_ABI := $(word 3,$(TARGET_TRIPLET_WORDS))
TARGET_TUPLE := $(TARGET_ARCH)-$(TARGET_VENDOR)-$(TARGET_OS)-$(TARGET_ABI)
else
TARGET_TUPLE ?= $(OS_TUPLE)
TARGET_TUPLE_WORDS ?= $(subst -, ,$(TARGET_TUPLE))
TARGET_ARCH ?= $(word 1,$(TARGET_TUPLE_WORDS))
TARGET_VENDOR ?= $(word 2,$(TARGET_TUPLE_WORDS))
TARGET_OS ?= $(word 3,$(TARGET_TUPLE_WORDS))
TARGET_ABI ?= $(word 4,$(TARGET_TUPLE_WORDS))
TARGET_TRIPLET ?= $(TARGET_ARCH)-$(TARGET_OS)-$(TARGET_ABI)
TARGET_TUPLE := $(OS_TUPLE)
TARGET_TUPLE_WORDS := $(subst -, ,$(TARGET_TUPLE))
TARGET_ARCH := $(word 1,$(TARGET_TUPLE_WORDS))
TARGET_VENDOR := $(word 2,$(TARGET_TUPLE_WORDS))
TARGET_OS := $(word 3,$(TARGET_TUPLE_WORDS))
TARGET_ABI := $(word 4,$(TARGET_TUPLE_WORDS))
TARGET_TRIPLET := $(TARGET_ARCH)-$(TARGET_OS)-$(TARGET_ABI)
endif
#ifeq ($(TARGET_TUPLE),)
@ -246,12 +280,12 @@ ifeq ($(PKG_FORMAT),debian)
RPM_SUFFIX ?= deb
else
RPM ?= /bin/rpm
RPM_ARCH ?= $(ARCH)
RPM_ARCH ?= $(TARGET_ARCH)
RPM_SUFFIX ?= rpm
endif
ifeq ($(PKG_FORMAT),debian)
export INCLUDE_REV_IN_VERSIONS = true
export INCLUDE_REV_IN_VERSIONS = true
endif
PROJECT_DESCR_FILE ?= $(wildcard $(TOPDIR)/make/project.conf)
@ -262,9 +296,9 @@ PROJECT_SUMMARY ?= $(PROJECT_DESCR)
CUSTOMER ?= jannet
ifneq ($(PROJECT_DESCR_FILE),)
ifeq ($(shell grep "^ *subpackages *=.*devel" $(PROJECT_DESCR_FILE)),)
CREATE_DEVEL = false
endif
ifeq ($(shell $(GREP) "^ *subpackages *=.*devel" $(PROJECT_DESCR_FILE)),)
CREATE_DEVEL = false
endif
endif
ifeq ($(VERSION),)
@ -410,34 +444,6 @@ INSTALL_CGIDIR = $(CGI_DIR)
BUILD_CGI += $(addprefix $(BUILD_CGIDIR)/,$(EXE_CGI))
INSTALLED_CGI += $(addprefix $(INSTALL_CGIDIR)/,$(EXE_CGI))
# -- HTML
INSTALLATION_FILE_TYPES += HTML
BUILD_HTMLDIR = $(TOPDIR)/htdocs
LOCAL_HTML += $(filter-out $(DONT_INSTALL),$(wildcard *.html *.css *.php *.js) $(FONTS) $(IMAGES))
ifeq ($(HTML_SUBDIR),)
HTML_SUBDIR := $(shell $(PWD) | $(SED) '/.*\/htdocs\(\/\|$$\)/!d; s%.*/htdocs\(/\|$$\)%%')
endif
ifeq ($(HTML_SUBDIR),)
INSTALL_HTMLDIR ?= $(PROJECT_HTMLDIR)
else
INSTALL_HTMLDIR ?= $(PROJECT_HTMLDIR)/$(HTML_SUBDIR)
endif
INSTALLED_HTML += $(addprefix $(INSTALL_HTMLDIR)/,$(LOCAL_HTML))
# -- TMPL
INSTALLATION_FILE_TYPES += TMPL
BUILD_TMPLDIR = $(TOPDIR)/tmpl
LOCAL_TMPL += $(filter-out $(DONT_INSTALL),$(wildcard *.tmpl))
ifndef TMPL_SUBDIR
TMPL_SUBDIR := $(shell $(PWD) | $(SED) '/.*\/tmpl\(\/\|$$\)/!d; s%.*/tmpl\(/\|$$\)%%')
endif
ifeq ($(TMPL_SUBDIR),)
INSTALL_TMPLDIR = $(PROJECT_TMPLDIR)
else
INSTALL_TMPLDIR = $(PROJECT_TMPLDIR)/$(TMPL_SUBDIR)
endif
INSTALLED_TMPL += $(addprefix $(INSTALL_TMPLDIR)/,$(LOCAL_TMPL))
# -- SYSTEMD
INSTALLATION_FILE_TYPES += SYSTEMD
BUILD_SYSTEMDDIR = $(TOPDIR)/bin/systemd
@ -562,17 +568,9 @@ INSTALL_DIR ?= $(INSTALL)
# ----- local.mk
ifneq ($(wildcard $(MODDIR)/make/local.mk),)
include $(MODDIR)/make/local.mk
endif
ifneq ($(wildcard $(TOPDIR)/make/local.mk),)
include $(TOPDIR)/make/local.mk
endif
ifneq ($(wildcard local.mk),)
include local.mk
endif
-include $(MODDIR)/make/local.mk
-include $(TOPDIR)/make/local.mk
-include local.mk
BTOOLS_DIR ?= $(call proj_dir, dspider-btools)
#DSPCD_DIR ?= $(call proj_dir, dspcd)
@ -598,4 +596,4 @@ doc-module:
doc-project:
$(BROWSER) $(JANWARE_URL_DOC_PROJECT)
endif
endif # ifndef JW_BUILD_DEF_MK_INCLUDED