103 lines
3.7 KiB
Plaintext
103 lines
3.7 KiB
Plaintext
#*************************************************************************
|
|
# Copyright (c) 2006 UChicago Argonne LLC, as Operator of Argonne
|
|
# National Laboratory.
|
|
# Copyright (c) 2002 The Regents of the University of California, as
|
|
# Operator of Los Alamos National Laboratory.
|
|
# EPICS BASE is distributed subject to a Software License Agreement found
|
|
# in the file LICENSE that is included with this distribution.
|
|
#*************************************************************************
|
|
|
|
ARCHS += $(BUILD_ARCHS)
|
|
ACTIONS += inc build install buildInstall clean realclean archclean
|
|
ACTIONS += runtests tapfiles clean-tests test-results junitfiles
|
|
|
|
dirActionArchTargets = $(foreach dir, $(DIRS), \
|
|
$(foreach action, $(ACTIONS), \
|
|
$(foreach arch, $(ARCHS), \
|
|
$(dir)$(DIVIDER)$(action)$(DIVIDER)$(arch))))
|
|
dirArchTargets += $(foreach dir, $(DIRS), \
|
|
$(foreach arch, $(ARCHS), \
|
|
$(dir)$(DIVIDER)$(arch)))
|
|
dirActionTargets += $(foreach dir, $(DIRS), \
|
|
$(foreach action, $(ACTIONS), \
|
|
$(dir)$(DIVIDER)$(action)))
|
|
actionArchTargets = $(foreach action, $(ACTIONS), \
|
|
$(foreach arch, $(ARCHS), \
|
|
$(action)$(DIVIDER)$(arch)))
|
|
|
|
all: install
|
|
host: install$(DIVIDER)$(EPICS_HOST_ARCH)
|
|
|
|
# Include <top>/cfg/DIR_RULES* files from tops defined in RELEASE* files
|
|
# Do this here so they can add ACTIONS
|
|
#
|
|
RELEASE_CFG_DIR_RULES = $(foreach top, $(RELEASE_TOPS), \
|
|
$(wildcard $($(top))/cfg/DIR_RULES*))
|
|
ifneq ($(RELEASE_CFG_DIR_RULES),)
|
|
include $(RELEASE_CFG_DIR_RULES)
|
|
endif
|
|
|
|
# Allows rebuild to work with parallel builds option, -j.
|
|
ifeq (rebuild,$(filter rebuild,$(MAKECMDGOALS)))
|
|
$(foreach dir, $(DIRS), $(dir)$(DIVIDER)install): \
|
|
$(foreach dir, $(DIRS), $(dir)$(DIVIDER)clean)
|
|
rebuild: $(foreach dir, $(DIRS), $(dir)$(DIVIDER)install)
|
|
endif
|
|
|
|
# Create directory dependancies lines for GNU make -j option
|
|
# Only works with GNU make 3.81 or later (uses eval function)
|
|
define DEP_template1
|
|
$(1): $$($(1)_DEPEND_DIRS)
|
|
endef
|
|
$(foreach dir, $(DIRS), \
|
|
$(eval $(call DEP_template1,$(dir))))
|
|
|
|
define DEP_template2
|
|
$(1)$$(DIVIDER)$(2) : $$(foreach ddir, $$($(1)_DEPEND_DIRS), \
|
|
$$(addsuffix $$(DIVIDER)$(2),$$(ddir))) | before-$(2)
|
|
endef
|
|
$(foreach action, $(ACTIONS), \
|
|
$(foreach dir, $(DIRS), \
|
|
$(eval $(call DEP_template2,$(dir),$(action)))))
|
|
|
|
define DEP_template3
|
|
$(1)$$(DIVIDER)$(2) : $$(foreach ddir, $$($(1)_DEPEND_DIRS), \
|
|
$$(addsuffix $$(DIVIDER)$(2),$$(ddir)))
|
|
endef
|
|
$(foreach arch, $(ARCHS), \
|
|
$(foreach dir, $(DIRS), \
|
|
$(eval $(call DEP_template3,$(dir),$(arch)))))
|
|
|
|
define DEP_template4
|
|
$(1)$$(DIVIDER)$(2)$$(DIVIDER)$(3) : $$(foreach ddir, $$($(1)_DEPEND_DIRS), \
|
|
$$(addsuffix $$(DIVIDER)$(2)$$(DIVIDER)$(3),$$(ddir)))
|
|
endef
|
|
$(foreach arch, $(ARCHS), \
|
|
$(foreach action, $(ACTIONS), \
|
|
$(foreach dir, $(DIRS), \
|
|
$(eval $(call DEP_template4,$(dir),$(action),$(arch))))))
|
|
|
|
dirPart = $(join $(dir $@), $(word 1, $(subst $(DIVIDER), ,$(notdir $@))))
|
|
actionArchPart = $(join $(word 2, $(subst $(DIVIDER), ,$(notdir $@))), \
|
|
$(addprefix $(DIVIDER),$(word 3, $(subst $(DIVIDER), ,$(notdir $@)))))
|
|
|
|
$(DIRS) $(dirActionTargets) $(dirArchTargets) $(dirActionArchTargets):
|
|
$(MAKE) -C $(dirPart) $(actionArchPart)
|
|
|
|
# before-action rules are run once prior to recursing through the
|
|
# list of subdirectories and running the action rule in each one.
|
|
# See DEP_template2 above for how that rule ordering is achieved.
|
|
beforeActions = $(addprefix before-,$(ACTIONS))
|
|
$(beforeActions):
|
|
|
|
$(ARCHS) $(ACTIONS) $(actionArchTargets) :%: \
|
|
$(foreach dir, $(DIRS), $(dir)$(DIVIDER)%)
|
|
|
|
.PHONY : $(DIRS) all host rebuild
|
|
.PHONY : $(ARCHS) $(ACTIONS) $(beforeActions)
|
|
.PHONY : $(dirActionTargets) $(dirArchTargets)
|
|
.PHONY : $(dirActionArchTargets)
|
|
.PHONY : $(actionArchTargets)
|
|
|
|
include $(CONFIG)/RULES_COMMON
|