This commit makes it possible to successfully run "make all" against ytools' again, with TARGET_TUPLE set to i686-ms-w64-mingw. Lots of minor and major tweaks here and there.
The biggest diff is a move of the architecture-related definitions into platform.mk. The are needed pretty early on, so that seems reasonable.
Making this work again is part of the larger effort to support cross buildchains in a more concise way, i.e. without so many if ($(TARGET),mingw)) all over the place. TARGET's relevance should dwindle, until it's finally taken over by the TARGET_XXX variables extracted from TARGET_TUPLE or TARGET_TRIPLET.
This commit tries to remove the necessity to call projects.py from $(TOPDIR) to speed up recursive builds over all projects yet again. This is a major undertaking. There are two variables which are filled py projects.py in $(TOPDIR): PREREQ and PREREQ_DIRS. Sadly, the latter is a path relative to $(TOPDIR)/make, so this is kind of pointless. Unless the cache is maintained in $(TOPDIR), a thing I tried to avoid. So this commit is only able to cache $(PREREQ), not $(PREREQ_DIRS), which still is a hassle. Introduced defs-dirs.mk for that, to make it accessible to make.mk, and modified all the other parts of the machinery, too.
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
C++ definitions are numerous, and they shouldn't pollute variable space and performance outside of directories containing C++ files. This commit pushes them into a defs-cpp.mk file.
Many external commands are called unnecessarily often, because either there's a GNU Make internal alternative, or because they are invoked from within a recursively defined variable. This patch adresses that and lessens make invocation time per directory by factor 3.
proj_query based commands run projects.py, which needs $(TOPDIR), which in turn is undefined, notably for standalone-exe.mk. This commit avoids related warnings.
Order is now: $(LOCAL_CFLAGS) $(PROJECT_CFLAGS) $(COMPLILER_CFLAGS) which resulted in header files specified in $(LOCAL_CFLAGS) found after those of $(PROJECT_CFLAGS).
Still not optimal, as this way other general flags, e.g. optimization flags, override more specialized ones. Maybe use INCLUDES instead.
The attempt to have local include directory with HDRDIR_SCOPE_SUFFIX pointing to the working directory failed the last time around. This commit tries to fix that.
wd-upload doesn\'t work at all, because it clashed with rpmdist.mk defining stuff used by the upload-*.mk files. The RPM-side of things is left untested.
Ditch the old and mostly dysfunctional contents of srcdist.mk and refill it with rules to generate a source code tarball containing version control meta files.
Add support for GNUmakefile, where originally only Makefile was supported. Not done everywhere, as some of the code involving makefiles is dead anyway.