# # $Id$ # # EPICS RULES_ARCH # by Matthew Needes and Mike Bordua and Janet Andersoni and Jeff Hill # all:: install ACTIONS += inc ACTIONS += build ACTIONS += install ACTIONS += depends actionPart = $(word 1, $(subst $(DIVIDER), ,$@)) archPart = $(word 2, $(subst $(DIVIDER), ,$@)) # # hostActionArchTargets # ifeq (Makefile.$(BUILD_TYPE), $(wildcard Makefile.$(BUILD_TYPE))) hostArchs = $(HOST_ARCH) $(filter-out $(HOST_ARCH),$(CROSS_COMPILER_HOST_ARCHS)) hostDirs = $(addprefix O.,$(hostArchs)) hostActionArchTargets = $(foreach x, $(ACTIONS),\ $(foreach arch,$(hostArchs), $(x)$(DIVIDER)$(arch))) $(hostActionArchTargets) : $(hostDirs) $(MAKE) -C O.$(archPart) -f ../Makefile.$(BUILD_TYPE) T_A=$(archPart) $(actionPart) endif # # crossActionArchTargets # ifeq (Makefile.Vx, $(wildcard Makefile.Vx)) crossArchs = $(CROSS_COMPILER_TARGET_ARCHS) crossDirs = $(addprefix O.,$(crossArchs)) crossActionArchTargets = $(foreach x, $(ACTIONS), \ $(foreach arch, $(CROSS_COMPILER_TARGET_ARCHS), $(x)$(DIVIDER)$(arch))) $(crossActionArchTargets) : $(crossDirs) $(MAKE) -C O.$(archPart) -f ../Makefile.Vx T_A=$(archPart) $(actionPart) endif $(hostDirs) : $(MKDIR) $@ echo "T_A=$(subst O.,,$@)" > $@/Makefile echo "include ../Makefile.$(BUILD_TYPE)" >> $@/Makefile $(crossDirs) : $(MKDIR) $@ echo "T_A=$(subst O.,,$@)" > $@/Makefile echo "include ../Makefile.Vx" >> $@/Makefile # # host/cross action targets # $(ACTIONS) clean : % : %$(DIVIDER)host %$(DIVIDER)cross HostActionTargets = $(foreach x, $(ACTIONS) clean, $(x)$(DIVIDER)host) CrossActionTargets = $(foreach x, $(ACTIONS) clean, $(x)$(DIVIDER)cross) $(HostActionTargets) : %$(DIVIDER)host : $(addprefix %$(DIVIDER), $(hostArchs)) $(CrossActionTargets) : %$(DIVIDER)cross : $(addprefix %$(DIVIDER), $(crossArchs)) # # arch targets # host : $(hostArchs) cross : $(crossArchs) $(hostArchs) : % : O.% $(MAKE) -C O.$@ -f ../Makefile.$(BUILD_TYPE) T_A=$@ $(crossArchs) : % : O.% $(MAKE) -C O.$@ -f ../Makefile.Vx T_A=$@ # # special clean rule # clean$(DIVIDER)% : $(RMDIR) O.$* .PHONY : $(HostActionTargets) .PHONY : $(CrossActionTargets) .PHONY : $(crossActionArchTargets) .PHONY : $(hostActionArchTargets) .PHONY : $(hostArchs) $(crossArchs) .PHONY : $(ACTIONS) clean all host cross