116 lines
4.1 KiB
Plaintext
116 lines
4.1 KiB
Plaintext
#*************************************************************************
|
|
# Copyright (c) 2011 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.
|
|
#*************************************************************************
|
|
|
|
# RULES_EXPAND
|
|
|
|
vpath %@ $(USR_VPATH) $(ALL_SRC_DIRS)
|
|
|
|
#---------------------------------------------------------------
|
|
# Template variable expansion
|
|
|
|
# This feature allows you to instantiate simple template files at
|
|
# build-time, replacing macros spelled @NAME@ with values provided
|
|
# by the Makefile. The template filename must end with an @ sign,
|
|
# which is removed to create the expanded filename.
|
|
|
|
# Makefiles can use this variable expansion as follows:
|
|
#
|
|
# 1. Add the template filename (with the trailing @ sign) to either
|
|
# the EXPAND or EXPAND_COMMON variable, for example:
|
|
# EXPAND_COMMON += myVersion.h@
|
|
# Use EXPAND_COMMON for templates that don't depend on the
|
|
# target architecture (these will be generated in O.Common).
|
|
# 2. There are 2 ways of defining template macros. The simplest
|
|
# is to add a NAME=VALUE string to the EXPAND_VARS variable for
|
|
# the desired macros, e.g.:
|
|
# EXPAND_VARS += MY_MAJOR_VERSION=$(MY_MAJOR_VERSION)
|
|
# EXPAND_VARS += MY_MINOR_VERSION=$(MY_MINOR_VERSION)
|
|
# These values may not contain spaces, even if inside quotes.
|
|
# 3. A better way in the above case is to add the names of any
|
|
# Makefile variables that should be provided as macros to the
|
|
# variable EXPAND_ME, like this:
|
|
# EXPAND_ME += MY_MAJOR_VERSION
|
|
# EXPAND_ME += MY_MINOR_VERSION
|
|
# The values of these variables may contain spaces.
|
|
# 4. The macros TOP and ARCH will be set by the build system.
|
|
# TOP is the value of $(INSTALL_LOCATION) for this module.
|
|
# ARCH is the target architecture $(T_A), but is only set
|
|
# while expanding files in EXPAND
|
|
# 5. Add the expanded filename to some other variable that will
|
|
# cause it to be created and used, such as INC here:
|
|
# INC += myVersion.h
|
|
|
|
# Default settings
|
|
EXPAND_TOOL ?= $(PERL) $(TOOLS)/expandVars.pl $(QUIET_FLAG)
|
|
|
|
EXPANDARCH = -a $(T_A)
|
|
EXPANDFLAGS += -t $(INSTALL_LOCATION)
|
|
EXPANDFLAGS += $(addprefix -D ,$(EXPAND_VARS) $($@_EXPAND_VARS))
|
|
EXPANDFLAGS += $(foreach var, $(EXPAND_ME) $($@_EXPAND_ME), \
|
|
-D$(var)="$(strip $($(var)))")
|
|
|
|
# Output files
|
|
EXPANDED = $(EXPAND:%@=%)
|
|
EXPANDED_COMMON = $(EXPAND_COMMON:%@=$(COMMON_DIR)/%)
|
|
|
|
$(EXPANDED): %: %@
|
|
$(ECHO) "Expanding $< to $@"
|
|
$(EXPAND_TOOL) $(EXPANDARCH) $(EXPANDFLAGS) $($@_EXPANDFLAGS) $< $@
|
|
|
|
$(EXPANDED_COMMON): $(COMMON_DIR)/%: %@
|
|
$(ECHO) "Expanding $< to $(COMMON_DIR)/$@"
|
|
$(EXPAND_TOOL) $(EXPANDFLAGS) $($@_EXPANDFLAGS) $< $@
|
|
|
|
clean: expand_clean
|
|
|
|
expand_clean:
|
|
@$(RM) $(EXPANDED) $(EXPANDED_COMMON)
|
|
|
|
.PRECIOUS: $(EXPANDED) $(EXPANDED_COMMON)
|
|
.PHONY: expand_clean
|
|
|
|
#---------------------------------------------------------------
|
|
# Assemblies (files assembled from snippets)
|
|
|
|
ASSEMBLE_TOOL ?= $(PERL) $(TOOLS)/assembleSnippets.pl
|
|
|
|
define COMMON_ASSEMBLY_template
|
|
ifneq '$$($1_PATTERN)' ''
|
|
$1_SNIPPETS += $$(foreach dir, .. $$(SRC_DIRS), \
|
|
$$(wildcard $$(dir)/$$($1_PATTERN)))
|
|
endif
|
|
$(COMMON_DIR)/$1: $$($1_SNIPPETS)
|
|
$(ECHO) "Assembling common file $$@ from snippets"
|
|
@$(RM) $1
|
|
$(ASSEMBLE_TOOL) -o $1 $$^
|
|
@$(MV) $1 $$@
|
|
endef
|
|
$(foreach asy, $(COMMON_ASSEMBLIES), \
|
|
$(eval $(call COMMON_ASSEMBLY_template,$(strip $(asy)))))
|
|
|
|
define ASSEMBLY_template
|
|
ifneq '$$($1_PATTERN)' ''
|
|
$1_SNIPPETS += $$(foreach dir, .. $$(SRC_DIRS), \
|
|
$$(wildcard $$(dir)/$$($1_PATTERN)))
|
|
endif
|
|
$1: $$($1_SNIPPETS)
|
|
$(ECHO) "Assembling file $$@ from snippets"
|
|
@$(RM) $$@
|
|
$(ASSEMBLE_TOOL) -o $$@ $$^
|
|
endef
|
|
$(foreach asy, $(ASSEMBLIES), \
|
|
$(eval $(call ASSEMBLY_template,$(strip $(asy)))))
|
|
|
|
define ASSEMBLY_DEP_template
|
|
$1$(DEP):
|
|
@echo $1: > $$@
|
|
endef
|
|
$(foreach asy, $(sort $(COMMON_ASSEMBLIES) $(ASSEMBLIES)), \
|
|
$(eval $(call ASSEMBLY_DEP_template,$(strip $(asy)))))
|