Rules now expand the source DBD files directly in to the target. Also removed the makeIncludeDbd.pl script which is no longer needed.
400 lines
12 KiB
Plaintext
400 lines
12 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 file LICENSE that is included with this distribution.
|
|
#*************************************************************************
|
|
#RULES.Db
|
|
|
|
##################################################### vpath
|
|
|
|
vpath %.dbd $(USR_VPATH) $(GENERIC_SRC_DIRS) $(dir $(DBD))
|
|
vpath %.db $(USR_VPATH) $(GENERIC_SRC_DIRS) $(dir $(DB))
|
|
vpath %.vdb $(USR_VPATH) $(GENERIC_SRC_DIRS) $(dir $(DB))
|
|
vpath %.substitutions $(USR_VPATH) $(GENERIC_SRC_DIRS) $(COMMON_DIR)
|
|
vpath %.template $(USR_VPATH) $(GENERIC_SRC_DIRS) $(COMMON_DIR)
|
|
vpath bpt%.data $(USR_VPATH) $(GENERIC_SRC_DIRS) $(COMMON_DIR)
|
|
vpath %.acf $(USR_VPATH) $(GENERIC_SRC_DIRS) $(COMMON_DIR)
|
|
vpath %.acs $(USR_VPATH) $(GENERIC_SRC_DIRS) $(COMMON_DIR)
|
|
|
|
##################################################### dbflags dbdflags
|
|
|
|
DBD_SEARCH_DIRS = . .. $(COMMON_DIR) $(SRC_DIRS) $(INSTALL_DBD) $(RELEASE_DBD_DIRS)
|
|
DB_SEARCH_DIRS = . .. $(COMMON_DIR) $(SRC_DIRS) $(INSTALL_DB) $(RELEASE_DB_DIRS)
|
|
|
|
DBDFLAGS = $(USR_DBDFLAGS) $(addprefix -I,$(DBD_SEARCH_DIRS))
|
|
DBFLAGS = $($*_DBFLAGS) $(USR_DBFLAGS) $(addprefix -I,$(DB_SEARCH_DIRS))
|
|
REGRDDFLAGS = $(DBDFLAGS) $($*_REGRDDFLAGS) $(USR_REGRDDFLAGS)
|
|
|
|
##################################################### Targets
|
|
|
|
# ---------------------------------------------------
|
|
# To allow os specific dbd files AND have the -j option work properly,
|
|
|
|
CROSS_TARGET_OS_TYPES = $(sort $(foreach target, \
|
|
$(EPICS_HOST_ARCH) $(CROSS_COMPILER_TARGET_ARCHS),$(firstword $(subst -, ,$(target)))))
|
|
DBD += $(foreach type, $(CROSS_TARGET_OS_TYPES), $(DBD_$(type)))
|
|
|
|
# Users add os specific dbd files to a Makefile as follows
|
|
#
|
|
# DBD_vxWorks += abcVx.dbd
|
|
# DBD_RTEMS += abcRTEMS.dbd
|
|
# DBD_solaris += abcSolaris.dbd
|
|
#
|
|
# ---------------------------------------------------
|
|
|
|
DBDINC_NAME = $(patsubst %.h,%,$(patsubst %.dbd,%,$(DBDINC)))
|
|
DBD += $(addsuffix .dbd,$(DBDINC_NAME))
|
|
INC += $(addsuffix .h,$(DBDINC_NAME))
|
|
|
|
INSTALL_DBDS += $(addprefix $(INSTALL_DBD)/,$(notdir $(DBD)))
|
|
|
|
COMMON_DBDS += $(filter $(COMMON_DIR)/%, $(foreach file, $(DBD), \
|
|
$(firstword $(SOURCE_DBD) $(COMMON_DIR)/$(file) ) ) )
|
|
SOURCE_DBD = $(wildcard $(file) $(SOURCE_DBD_bbb) )
|
|
SOURCE_DBD_bbb = $(foreach dir, $(GENERIC_SRC_DIRS), $(SOURCE_DBD_aaa) )
|
|
SOURCE_DBD_aaa = $(addsuffix /$(file), $(dir) )
|
|
|
|
INSTALL_DBS += $(addprefix $(INSTALL_DB)/,$(notdir $(DB)))
|
|
|
|
COMMON_DBS += $(filter $(COMMON_DIR)/%, $(foreach file, $(DB), \
|
|
$(firstword $(SOURCE_DB) $(COMMON_DIR)/$(file) ) ) )
|
|
SOURCE_DB = $(wildcard $(file) $(SOURCE_DB_bbb) )
|
|
SOURCE_DB_bbb = $(foreach dir, $(GENERIC_SRC_DIRS), $(SOURCE_DB_aaa) )
|
|
SOURCE_DB_aaa = $(addsuffix /$(file), $(dir) )
|
|
|
|
COMMONS = $(COMMON_DIR)/*.dbd $(COMMON_DIR)/*.db $(COMMON_DIR)/*.h \
|
|
$(COMMON_DIR)/*.substitutions $(COMMON_DIR)/*.template
|
|
|
|
# Remove trailing numbers (to 99) on stem
|
|
TEMPLATE1=$(patsubst %0,%,$(patsubst %1,%,$(patsubst %2,%,$(patsubst %3,%,$(patsubst %4,%, \
|
|
$(patsubst %5,%,$(patsubst %6,%,$(patsubst %7,%,$(patsubst %8,%,$(patsubst %9,%, \
|
|
$*))))))))))
|
|
TEMPLATE2=$(patsubst %0,%,$(patsubst %1,%,$(patsubst %2,%,$(patsubst %3,%,$(patsubst %4,%, \
|
|
$(patsubst %5,%,$(patsubst %6,%,$(patsubst %7,%,$(patsubst %8,%,$(patsubst %9,%, \
|
|
$(TEMPLATE1)))))))))))
|
|
TEMPLATE3=$(addsuffix .template,$(addprefix ../,$(TEMPLATE2)))
|
|
TEMPLATE_FILENAME=$(firstword $(wildcard $($*_TEMPLATE) $(addprefix ../,$($*_TEMPLATE)) ../$*.template $(TEMPLATE3) ../template))
|
|
|
|
# dbst based database optimization
|
|
ifeq '$(DB_OPT)' 'YES'
|
|
RAW=.raw
|
|
DBS = $(filter %.db,$(DB)) $(addsuffix $(RAW),$(filter %.db,$(DB)))
|
|
COMMON_DBS = $(addprefix $(COMMON_DIR)/,$(DBS))
|
|
endif
|
|
|
|
INSTALL_DB_INSTALLS = $(addprefix $(INSTALL_DB)/,$(notdir $(DB_INSTALLS)))
|
|
INSTALL_DBD_INSTALLS = $(addprefix $(INSTALL_DBD)/,$(notdir $(DBD_INSTALLS)))
|
|
|
|
COMMONDEP_TARGET = $(COMMON_DIR)/$(basename $@)
|
|
|
|
##################################################### acf files
|
|
# An access security configuration file, *.acf, can be created from
|
|
# an *.acs file (has format of acf file plus #include "filename" lines)
|
|
|
|
# flags for GNU compiler
|
|
ACF_CPPFLAGS_YES = -undef -nostdinc
|
|
ACF_CPPFLAGS = $(ACF_CPPFLAGS_$(GNU))
|
|
|
|
ACF_INCLUDES = -I. $(TARGET_INCLUDES) $(USR_INCLUDES)\
|
|
$(SRC_INCLUDES) -I$(INSTALL_DB)
|
|
ACFDEPENDS_CMD = $(MKMF) -m $@ $(ACF_INCLUDES) $(COMMONDEP_TARGET) $<
|
|
ACF_CMD = $(CPP) $(ACF_CPPFLAGS) $(ACF_INCLUDES) $< > $@
|
|
|
|
##################################################### dependancies
|
|
|
|
HINC += $(addsuffix .h,$(DBDINC_NAME))
|
|
COMMON_DBDINC += $(addprefix $(COMMON_DIR)/,$(HINC))
|
|
|
|
DBDDEPENDS_FILES += $(addsuffix $(DEP),$(HINC) \
|
|
$(patsubst $(COMMON_DIR)/%,%,$(COMMON_DBS)) \
|
|
$(patsubst $(COMMON_DIR)/%,%, \
|
|
$(filter-out $(COMMON_DIR)/bpt%.dbd,$(COMMON_DBDS))))
|
|
|
|
#####################################################
|
|
|
|
ifndef T_A
|
|
|
|
COMMON_DIR = .
|
|
INSTALL_DBDS =
|
|
INSTALL_DBS =
|
|
COMMON_DBDS = $(DBD)
|
|
COMMON_DBS = $(DB)
|
|
COMMONS = $(DBD) $(DB)
|
|
|
|
ACTIONS = inc
|
|
ACTIONS += build
|
|
ACTIONS += install
|
|
ACTIONS += buildInstall
|
|
ACTIONS += browse
|
|
ACTIONS += runtests tapfiles
|
|
|
|
actionArchTargets = $(foreach x, $(ACTIONS),\ $(foreach arch,$(BUILD_ARCHS), $(x)$(DIVIDER)$(arch)))
|
|
|
|
cleanArchTargets = $(foreach arch,$(BUILD_ARCHS), clean$(DIVIDER)$(arch))
|
|
-include $(TOP)/configure/CONFIG_APP_INCLUDE
|
|
|
|
all: install
|
|
|
|
install: buildInstall
|
|
|
|
buildInstall : build
|
|
|
|
rebuild: clean install
|
|
|
|
.PHONY: all $(ACTIONS)
|
|
|
|
$(actionArchTargets) $(BUILD_ARCHS): install
|
|
$(cleanArchTargets): clean
|
|
|
|
.PHONY: $(BUILD_ARCHS) $(actionArchTargets) $(cleanArchTargets)
|
|
|
|
endif # T_A defined
|
|
|
|
ifneq (,$(strip $(DBDDEPENDS_FILES)))
|
|
-include $(DBDDEPENDS_FILES)
|
|
endif
|
|
|
|
##################################################### build dependancies, clean rule
|
|
|
|
inc : $(COMMON_INC) $(INSTALL_INC)
|
|
|
|
build : $(COMMON_DBDS) $(COMMON_DBS) \
|
|
$(INSTALL_DBDS) $(INSTALL_DBS) \
|
|
$(DBDDEPENDS_FILES) $(TARGETS) \
|
|
$(INSTALL_DB_INSTALLS) $(INSTALL_DBD_INSTALLS)
|
|
|
|
clean: db_clean
|
|
|
|
db_clean :
|
|
@$(RM) $(COMMONS) $(DBDDEPENDS_FILES)
|
|
@$(RM) *_registerRecordDeviceDriver.cpp
|
|
@$(RM) $(TARGETS)
|
|
|
|
.PHONY : db_clean
|
|
|
|
realclean: clean
|
|
|
|
##################################################### Dependency files
|
|
|
|
%Record.h$(DEP): $(COMMON_DIR)/%Record.dbd
|
|
@$(RM) $@
|
|
@$(DBTORECORDTYPEH) -D $(DBDFLAGS) -o $(COMMONDEP_TARGET) $< > $@
|
|
@echo "$(COMMONDEP_TARGET): ../Makefile" >> $@
|
|
|
|
%Record.h$(DEP): %Record.dbd
|
|
@$(RM) $@
|
|
@$(DBTORECORDTYPEH) -D $(DBDFLAGS) -o $(COMMONDEP_TARGET) $< > $@
|
|
@echo "$(COMMONDEP_TARGET): ../Makefile" >> $@
|
|
|
|
menu%.h$(DEP): $(COMMON_DIR)/menu%.dbd
|
|
@$(RM) $@
|
|
@$(DBTOMENUH) -D $(DBDFLAGS) -o $(COMMONDEP_TARGET) $< > $@
|
|
@echo "$(COMMONDEP_TARGET): ../Makefile" >> $@
|
|
|
|
menu%.h$(DEP): menu%.dbd
|
|
@$(RM) $@
|
|
@$(DBTOMENUH) -D $(DBDFLAGS) -o $(COMMONDEP_TARGET) $< > $@
|
|
@echo "$(COMMONDEP_TARGET): ../Makefile" >> $@
|
|
|
|
%.dbd$(DEP): %Include.dbd
|
|
@$(RM) $@
|
|
@$(DBEXPAND) -D $(DBDFLAGS) -o $(COMMONDEP_TARGET) $< > $@
|
|
@echo "$(COMMONDEP_TARGET): ../Makefile" >> $@
|
|
|
|
%.dbd$(DEP):
|
|
@$(RM) $@
|
|
@$(DBEXPAND) -D $(DBDFLAGS) -o $(COMMONDEP_TARGET) $($*_DBD) > $@
|
|
@echo "$(COMMONDEP_TARGET): ../Makefile" >> $@
|
|
|
|
%.db$(RAW)$(DEP): %.substitutions
|
|
@$(RM) $@
|
|
$(MKMF) -m$@ $(DBFLAGS) $(COMMONDEP_TARGET) $< $(TEMPLATE_FILENAME)
|
|
@echo "$(COMMONDEP_TARGET): $(TEMPLATE_FILENAME)" >> $@
|
|
@echo "$@: $(TEMPLATE_FILENAME)" >> $@
|
|
|
|
%.db$(RAW)$(DEP): %.template
|
|
@$(RM) $@
|
|
$(MKMF) -m$@ $(DBFLAGS) $(COMMONDEP_TARGET) $<
|
|
|
|
%.acf$(DEP): %.acs
|
|
@$(RM) $@
|
|
@$(ACFDEPENDS_CMD)
|
|
|
|
##################################################### CapFast filter
|
|
|
|
$(COMMON_DIR)/%.edf: ../%.sch $(DEPSCHS)
|
|
@$(RM) $@
|
|
@if [ ! -f cad.rc -a -r ../cad.rc ] ; then ln -s ../cad.rc ; fi
|
|
$(SCH2EDIF) $(SCH2EDIF_SYSFLAGS) $(SCH2EDIF_FLAGS) -o $@ $<
|
|
|
|
##################################################### Substitution files
|
|
|
|
# WARNING: CREATESUBSTITUTIONS script needs output dir on command line
|
|
|
|
ifdef CREATESUBSTITUTIONS
|
|
$(COMMON_DIR)/%.substitutions:
|
|
$(ECHO) "Create substitutions"
|
|
@$(RM) $@
|
|
$(CREATESUBSTITUTIONS) $@
|
|
endif
|
|
|
|
$(INSTALL_DB)/%.substitutions: %.substitutions
|
|
$(ECHO) "Installing db file $@"
|
|
@$(INSTALL) -d -m $(INSTALL_PERMISSIONS) $< $(@D)
|
|
|
|
.PRECIOUS: $(COMMON_DIR)/%.substitutions
|
|
|
|
##################################################### Template files
|
|
|
|
$(COMMON_DIR)/%.template: $(COMMON_DIR)/%.edf
|
|
@$(RM) $@
|
|
$(E2DB) $(E2DB_SYSFLAGS) $(E2DB_FLAGS) -n $@.VAR $<
|
|
@$(REPLACEVAR) < $@.VAR > $@
|
|
@$(RM) $@.VAR
|
|
|
|
$(INSTALL_DB)/%.template: %.template
|
|
$(ECHO) "Installing db file $@"
|
|
@$(INSTALL) -d -m $(INSTALL_PERMISSIONS) $< $(@D)
|
|
|
|
.PRECIOUS: $(COMMON_DIR)/%.template
|
|
|
|
##################################################### INC files
|
|
|
|
$(COMMON_DIR)/%Record.h: $(COMMON_DIR)/%Record.dbd
|
|
@$(RM) $(notdir $@)
|
|
$(DBTORECORDTYPEH) $(DBDFLAGS) -o $(notdir $@) $<
|
|
@$(MV) $(notdir $@) $@
|
|
|
|
$(COMMON_DIR)/%Record.h: %Record.dbd
|
|
@$(RM) $(notdir $@)
|
|
$(DBTORECORDTYPEH) $(DBDFLAGS) -o $(notdir $@) $<
|
|
@$(MV) $(notdir $@) $@
|
|
|
|
$(COMMON_DIR)/menu%.h: $(COMMON_DIR)/menu%.dbd
|
|
@$(RM) $(notdir $@)
|
|
$(DBTOMENUH) $(DBDFLAGS) -o $(notdir $@) $<
|
|
@$(MV) $(notdir $@) $@
|
|
|
|
$(COMMON_DIR)/menu%.h: menu%.dbd
|
|
@$(RM) $(notdir $@)
|
|
$(DBTOMENUH) $(DBDFLAGS) -o $(notdir $@) $<
|
|
@$(MV) $(notdir $@) $@
|
|
|
|
.PRECIOUS: $(COMMON_DIR)/%.h
|
|
|
|
##################################################### DBD files
|
|
|
|
$(COMMON_DIR)/bpt%.dbd: bpt%.data
|
|
@$(RM) $(notdir $@)
|
|
$(MAKEBPT) $< $(notdir $@)
|
|
@$(MV) $(notdir $@) $@
|
|
|
|
$(COMMON_DIR)/%.dbd: %Include.dbd
|
|
$(ECHO) "Expanding dbd file $<"
|
|
@$(RM) $(notdir $@)
|
|
$(DBEXPAND) $(DBDFLAGS) -o $(notdir $@) $<
|
|
@$(MV) $(notdir $@) $@
|
|
|
|
$(COMMON_DIR)/%.dbd:
|
|
$(ECHO) "Creating dbd file $(notdir $<)"
|
|
@$(RM) $(notdir $@)
|
|
$(DBEXPAND) $(DBDFLAGS) -o $(notdir $@) $($*_DBD)
|
|
@$(MV) $(notdir $@) $@
|
|
|
|
$(INSTALL_DBD)/%: $(COMMON_DIR)/%
|
|
$(ECHO) "Installing created dbd file $@"
|
|
@$(INSTALL) -d -m $(INSTALL_PERMISSIONS) $< $(@D)
|
|
|
|
$(INSTALL_DBD)/%: %
|
|
$(ECHO) "Installing dbd file $@"
|
|
@$(INSTALL) -d -m $(INSTALL_PERMISSIONS) $< $(@D)
|
|
|
|
define DBD_INSTALLS_template
|
|
$$(INSTALL_DBD)/$$(notdir $(1)) : $(1)
|
|
$(ECHO) "Installing $$@"
|
|
@$$(INSTALL) -d -m $$(INSTALL_PERMISSIONS) $$^ $$(INSTALL_DBD)
|
|
endef
|
|
$(foreach file, $(DBD_INSTALLS), $(eval $(call DBD_INSTALLS_template, $(file))))
|
|
|
|
.PRECIOUS: $(COMMON_DBDS) $(COMMON_DIR)/%Include.dbd
|
|
|
|
##################################################### DB files
|
|
|
|
$(COMMON_DIR)/%.db$(RAW): $(COMMON_DIR)/%.edf
|
|
$(E2DB) $(E2DB_SYSFLAGS) $(E2DB_FLAGS) -n $*.VAR $<
|
|
@$(REPLACEVAR) < $*.VAR > $@
|
|
@$(RM) $*.VAR
|
|
|
|
$(COMMON_DIR)/%.db$(RAW): %.substitutions
|
|
$(ECHO) "Inflating database from $< $(TEMPLATE_FILENAME)"
|
|
@$(RM) $@ $*.tmp
|
|
$(MSI) $(DBFLAGS) -S$< $(TEMPLATE_FILENAME) > $*.tmp
|
|
$(MV) $*.tmp $@
|
|
|
|
$(COMMON_DIR)/%.db$(RAW): %.template
|
|
$(ECHO) "Inflating database from $<"
|
|
@$(RM) $@ $*.tmp
|
|
$(MSI) $(DBFLAGS) $< > $*.tmp
|
|
$(MV) $*.tmp $@
|
|
|
|
$(COMMON_DIR)/%.acf: %.acs
|
|
$(ECHO) "Creating acf file $@"
|
|
@$(RM) $@
|
|
$(ACF_CMD)
|
|
|
|
.PRECIOUS: $(COMMON_DIR)/%.acf
|
|
|
|
# dbst based database optimization
|
|
ifeq '$(DB_OPT)' 'YES'
|
|
|
|
$(COMMON_DIR)/%.db$(RAW): ../%.db
|
|
@$(RM) $@
|
|
$(CP) $< $@
|
|
|
|
$(COMMON_DIR)/%.db: $(COMMON_DIR)/%.db$(RAW)
|
|
$(ECHO) "Optimizing database $@"
|
|
@$(RM) $@
|
|
$(DBST) . $< -d > $@
|
|
|
|
.PRECIOUS: $(COMMON_DIR)/%.db
|
|
.PRECIOUS: $(DB:%=$(COMMON_DIR)/%$(RAW))
|
|
else
|
|
|
|
$(INSTALL_DB)/%: %
|
|
$(ECHO) "Installing db file $@"
|
|
@$(INSTALL) -d -m $(INSTALL_PERMISSIONS) $< $(@D)
|
|
endif
|
|
|
|
$(INSTALL_DB)/%.db: $(COMMON_DIR)/%.db
|
|
$(ECHO) "Installing created db file $@"
|
|
@$(INSTALL) -d -m $(INSTALL_PERMISSIONS) $< $(@D)
|
|
|
|
define DB_INSTALLS_template
|
|
$$(INSTALL_DB)/$$(notdir $(1)) : $(1)
|
|
$(ECHO) "Installing $$@"
|
|
@$$(INSTALL) -d -m $$(INSTALL_PERMISSIONS) $$^ $$(INSTALL_DB)
|
|
endef
|
|
$(foreach file, $(DB_INSTALLS), $(eval $(call DB_INSTALLS_template, $(file))))
|
|
|
|
.PRECIOUS: $(COMMON_DIR)/%.edf
|
|
.PRECIOUS: $(COMMON_DBS)
|
|
|
|
##################################################### register record,device,driver support
|
|
|
|
IOC_INST_TOP := $(shell $(PERL) $(TOOLS)/fullPathName.pl $(IOCS_APPL_TOP) )
|
|
|
|
%_registerRecordDeviceDriver.cpp: $(COMMON_DIR)/%.dbd
|
|
@$(RM) $@
|
|
$(REGISTERRECORDDEVICEDRIVER) $(REGRDDFLAGS) -o $@ $< $(basename $@) $(IOC_INST_TOP)
|
|
|
|
%_registerRecordDeviceDriver.cpp: %.dbd
|
|
@$(RM) $@
|
|
$(REGISTERRECORDDEVICEDRIVER) $(REGRDDFLAGS) -o $@ $< $(basename $@) $(IOC_INST_TOP)
|
|
|
|
.PRECIOUS: %_registerRecordDeviceDriver.cpp
|
|
|
|
##################################################### END OF FILE
|