make/[Makefile|*.mk): Improve variable caching

This commit aims at improving speed by using better caching.

- Makefile, cache.mk: Split .cache.mk up

To allow caching of runtime path variables which are project-specific, split .cache.mk up in .cache-project.mk and .cache-projects.mk

- ldlibpath.mk: Cache ldlibpath, exepath and pythonpath

Place the output of $(call proj_query ldlibpath), $(call proj_query, exepath) and $(call proj_query pythonpath) in JW_PKG_LD_LIBRARY_PATH, JW_PKG_EXE_PATH, and JW_PKG_PYTHON_PATH respectively, and cache the variables in make/.project-cache.mk.

- cache.mk: Use = instead of :=

Recursively expanded variables are nearly as fast as := variables if the assigned value is a fixed string. And sometimes it's not, rightly so, because variables get assigned below, as with JW_PKG_XXX for instance.

- cache.mk: Use $(TOPDIR) as variable values

Replace absolute references to project's topdir by $(TOPDIR) with sed. As soon as the project queries produce absolute paths, they will be transformed into relative paths which allow the code base to be moved to a different location and still remain functional without a rebuild.
Signed-off-by: Jan Lindemann <jan@janware.com>
This commit is contained in:
Jan Lindemann 2026-01-22 14:12:58 +01:00
commit f05e1ee0e3
8 changed files with 64 additions and 40 deletions

View file

@ -1,17 +1,25 @@
# jan's utility modules
# (c) 2001-2005 jannet it services
# contact@jannet.de
# $Id$
LD_LIB_PATH_ENV := $(LD_LIBRARY_PATH)
EXE_SEARCH_PATH_ENV := $(PATH)
LD_LIB_PATH_LDFLAGS = $(shell echo $(FINAL_LDFLAGS) | $(SED) 's/^-[^L] *[^ ]*/ /g; s/[ ]-[^L] *[^ ]*/ /g; s/-L[ ]*\([^ ]*\)[ ]*/\1:/g')
# == System environment variables
# -- LD_LIBRARY_PATH
LD_LIBRARY_PATH_ENV = $(shell echo $(FINAL_LDFLAGS) | $(SED) 's/^-[^L] *[^ ]*/ /g; s/[ ]-[^L] *[^ ]*/ /g; s/-L[ ]*\([^ ]*\)[ ]*/\1:/g')
ifndef JW_PKG_LD_LIBRARY_PATH
JW_PKG_LD_LIBRARY_PATH := $(call proj_query, ldlibpath $(PROJECT) $(PREREQ_BUILD))
endif
export LD_LIBRARY_PATH := $(JW_PKG_LD_LIBRARY_PATH)
ifeq ($(TARGET),mingw)
DLL_PATH = $(shell echo $(LD_LIBRARY_PATH) | $(SED) 's/:/;/g');$(CROSS_TOOL_DIR)/bin
DLL_PATH = $(shell echo $(LD_LIBRARY_PATH) | $(SED) 's/:/;/g');$(CROSS_TOOL_DIR)/bin
endif
#export LD_LIBRARY_PATH = $(shell echo $(strip $(LD_LIB_PATH_LDFLAGS):$(LD_LIB_PATH):$(LD_LIB_PATH_ENV)) | $(SED) 's/ /:/g; s/::/:/g')
LD_LIBRARY_PATH := $(call proj_query, ldlibpath $(PROJECT) $(PREREQ_BUILD))
export LD_LIBRARY_PATH
export PATH := $(call proj_query, exepath $(PROJECT) $(PREREQ_BUILD)):$(EXE_SEARCH_PATH_ENV)
# -- PATH
EXE_SEARCH_PATH_ENV := $(PATH)
ifndef JW_PKG_EXE_PATH
JW_PKG_EXE_PATH := $(call proj_query, exepath $(PROJECT) $(PREREQ_BUILD)):$(EXE_SEARCH_PATH_ENV)
endif
export PATH := $(JW_PKG_EXE_PATH)
# -- PYTHONPATH
PYTHONPATH_ENV := $(PYTHONPATH)
ifndef JW_PKG_PYTHON_PATH
JW_PKG_PYTHON_PATH := $(call proj_query, pythonpath $(PROJECT))
endif
export PYTHONPATH := $(JW_PKG_PYTHON_PATH)