mirror of
https://github.com/ibm-s390-linux/s390-tools.git
synced 2026-08-05 02:14:52 +00:00
Some libraries depend on other libraries, so split the libraries into two groups: base libraries that do not depend on any others, and the remaining libraries, that may depend on the base libraries. Ensure that the base libraries are built first, before starting to build the remaining libraries. The tools are only built once the base libraries and the remaining libraries have been built. This fixes a possible build problem with libseckey when parallel build is used. The libseckey library is used by libekmfweb and the zkey KMIP plugin (zkey-kmip). With parallel build both are built in parallel, and thus both trigger the build of libseckey. This can lead to the situation that libseckey is built twice at the same time, which can lead to build failures (corrupted archive, etc). Signed-off-by: Ingo Franzki <ifranzki@linux.ibm.com> Reviewed-by: Jan Höppner <hoeppner@linux.ibm.com> Signed-off-by: Jan Höppner <hoeppner@linux.ibm.com>
64 lines
2.1 KiB
Makefile
64 lines
2.1 KiB
Makefile
ARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ -e s/arm.*/arm/ -e s/sa110/arm/)
|
|
|
|
# Include common definitions
|
|
include common.mak
|
|
|
|
#
|
|
# BASELIBS: Libraries that have no dependency to other libraries in s390-tools
|
|
# LIBS: Libraries that can have a dependency to base libraries
|
|
# TOOLS: Tools that can have a dependency to base libraries or libraries
|
|
#
|
|
BASELIB_DIRS = libutil libseckey
|
|
LIB_DIRS = libvtoc libzds libdasd libvmdump libccw libvmcp libekmfweb \
|
|
libkmipclient
|
|
TOOL_DIRS = zipl zdump fdasd dasdfmt dasdview tunedasd \
|
|
tape390 osasnmpd qetharp ip_watcher qethconf scripts zconf \
|
|
vmconvert vmcp man mon_tools dasdinfo vmur cpuplugd ipl_tools \
|
|
ziomon iucvterm hyptop cmsfs-fuse qethqoat zfcpdump zdsfs cpumf \
|
|
systemd hmcdrvfs cpacfstats zdev dump2tar zkey netboot etc zpcictl \
|
|
genprotimg lsstp hsci hsavmcore
|
|
|
|
SUB_DIRS = $(BASELIB_DIRS) $(LIB_DIRS) $(TOOL_DIRS)
|
|
|
|
all: $(TOOL_DIRS)
|
|
clean: $(TOOL_DIRS)
|
|
install: $(TOOL_DIRS)
|
|
|
|
#
|
|
# For simple "make" we explicitly set the MAKECMDGOALS to "all".
|
|
#
|
|
ifeq ($(MAKECMDGOALS),)
|
|
MAKECMDGOALS = all
|
|
endif
|
|
|
|
#
|
|
# We have to build the base libraries before the other libraries are built,
|
|
# and then build the other libraries before the tools are built. Otherwise the
|
|
# other libraries and tools would trigger parallel "make -C" builds for the
|
|
# base libraries and the other libraries in case of "make -j".
|
|
#
|
|
# MAKECMDGOALS contains the list of goals, e.g. "clean all". We use
|
|
# "foreach" to generate a ";" separated list of "make -C <target>".
|
|
# For example the the expansion for "make clean all" is:
|
|
#
|
|
# $(MAKE) -C $@ [..] clean ; $(MAKE) -C $@ [...] all ;
|
|
#
|
|
# This ensures that the commandline targets are serialized and also "make -j"
|
|
# works as expected, e.g. "make clean all -j 20".
|
|
#
|
|
|
|
$(TOOL_DIRS): $(LIB_DIRS)
|
|
$(foreach goal,$(MAKECMDGOALS), \
|
|
$(MAKE) -C $@ TOPDIR=$(TOPDIR) ARCH=$(ARCH) $(goal) ;)
|
|
.PHONY: $(TOOL_DIRS)
|
|
|
|
$(LIB_DIRS): $(BASELIB_DIRS)
|
|
$(foreach goal,$(MAKECMDGOALS), \
|
|
$(MAKE) -C $@ TOPDIR=$(TOPDIR) ARCH=$(ARCH) $(goal) ;)
|
|
.PHONY: $(LIB_DIRS)
|
|
|
|
$(BASELIB_DIRS):
|
|
$(foreach goal,$(MAKECMDGOALS), \
|
|
$(MAKE) -C $@ TOPDIR=$(TOPDIR) ARCH=$(ARCH) $(goal) ;)
|
|
.PHONY: $(BASELIB_DIRS)
|