Skip to content
Snippets Groups Projects
Commit 1aee3a96 authored by Simon Rose's avatar Simon Rose
Browse files

Merge branch 'e3-930_clean_up_conda_version' into '3.1.4_conda_fix_epics_7.0.6.1'

E3 930 clean up conda version

See merge request !21
parents eda7fd0d 75a3b082
Branches 3.1.4_conda_fix_epics_7.0.6.1
No related tags found
1 merge request!21E3 930 clean up conda version
...@@ -93,17 +93,17 @@ DOCUEXT += template db dbt subs subst substitutions script ...@@ -93,17 +93,17 @@ DOCUEXT += template db dbt subs subst substitutions script
SHELL = /bin/bash -O extglob SHELL = /bin/bash -O extglob
# Some shell commands: # Some shell commands:
RMDIR = rm -rf
LN = ln -s LN = ln -s
EXISTS = test -e EXISTS = test -e
NM = nm NM = nm
RMDIR = rm -rf
RM = rm -f RM = rm -f
CP = cp CP = cp
MKDIR = mkdir -p -m 775
# Some generated file names: # Some generated file names:
VERSIONFILE = ${PRJ}_version_${LIBVERSION}.c VERSIONFILE = ${PRJ}_version_${LIBVERSION}.c
REGISTRYFILE = ${PRJ}_registerRecordDeviceDriver.cpp REGISTRYFILE = ${PRJ}_registerRecordDeviceDriver.cpp
EXPORTFILE = ${PRJ}_exportAddress.c
SUBFUNCFILE = ${PRJ}_subRecordFunctions.dbd SUBFUNCFILE = ${PRJ}_subRecordFunctions.dbd
DEPFILE = ${PRJ}.dep DEPFILE = ${PRJ}.dep
...@@ -119,13 +119,12 @@ ENV= ...@@ -119,13 +119,12 @@ ENV=
# Don't install anything (different from default EPICS make rules). # Don't install anything (different from default EPICS make rules).
default: build default: build
# Added to follow E3
prebuild: prebuild:
IGNOREFILES = .cvsignore .gitignore IGNOREFILES = .gitignore
%: ${IGNOREFILES} %: ${IGNOREFILES}
${IGNOREFILES}: ${IGNOREFILES}:
@echo -e "O.*\n.cvsignore\n.gitignore" > $@ @echo -e "O.*\n.gitignore" > $@
# Function that removes duplicates without re-ordering (unlike sort): # Function that removes duplicates without re-ordering (unlike sort):
define uniq define uniq
...@@ -138,25 +137,8 @@ ifndef EPICSVERSION ...@@ -138,25 +137,8 @@ ifndef EPICSVERSION
## RUN 1 ## RUN 1
# In source directory # In source directory
##---## In E3, we don't need to check which EPICS BASE
# Find out which EPICS versions to build.
#INSTALLED_EPICS_VERSIONS := $(patsubst ${EPICS_LOCATION}/base-%,%,$(wildcard ${EPICS_LOCATION}/base-*[0-9]))
#EPICS_VERSIONS = $(filter-out ${EXCLUDE_VERSIONS:=%},${DEFAULT_EPICS_VERSION})
#MISSING_EPICS_VERSIONS = $(filter-out ${BUILD_EPICS_VERSIONS},${DEFAULT_EPICS_VERSION})
#BUILD_EPICS_VERSIONS = $(filter ${INSTALLED_EPICS_VERSIONS},${DEFAULT_EPICS_VERSION})
#BUILD_EPICS_VERSIONS = ${DEFAULT_EPICS_VERSION}
$(foreach v,$(sort $(basename ${BUILD_EPICS_VERSIONS})),$(eval EPICS_VERSIONS_$v=$(filter $v.%,${BUILD_EPICS_VERSIONS}))) $(foreach v,$(sort $(basename ${BUILD_EPICS_VERSIONS})),$(eval EPICS_VERSIONS_$v=$(filter $v.%,${BUILD_EPICS_VERSIONS})))
# # Che# ck only version of files needed to build the module. But which are they?
# VERSIONCHECKFILES = $(filter-out /% -none-, $(wildcard *makefile* *Makefile* *.db *.template *.subs *.dbd *.cmd) ${SOURCES} ${DBDS} ${TEMPLATES} ${SCRIPTS} $(foreach v,3.13 3.14 3.15, ${SOURCES_$v} ${DBDS_$v}))
# VERSIONCHECKCMD = ${MAKEHOME}/getVersion.tcl ${VERSIONDEBUGFLAG} ${VERSIONCHECKFILES}
# LIBVERSION = $(or $(filter-out test,$(shell ${VERSIONCHECKCMD} 2>/dev/null)),${USER},test)
# VERSIONDEBUGFLAG = $(if ${VERSIONDEBUG}, -d)
# Set LIBVERSION to dev if not set # Set LIBVERSION to dev if not set
LIBVERSION := $(or $(LIBVERSION),dev) LIBVERSION := $(or $(LIBVERSION),dev)
...@@ -179,27 +161,15 @@ export OS_CLASS_LIST ...@@ -179,27 +161,15 @@ export OS_CLASS_LIST
export ARCH_FILTER export ARCH_FILTER
export EXCLUDE_ARCHS export EXCLUDE_ARCHS
export MAKE_FIRST export MAKE_FIRST
export SUBS
# Some shell commands: export TMPS
RMDIR = rm -rf
LN = ln -s
EXISTS = test -e
NM = nm
RM = rm -f
MKDIR = mkdir -p -m 775
clean:: clean::
$(RMDIR) O.* $(RMDIR) O.*
#clean.%::
# $(RMDIR) $(wildcard O.*${@:clean.%=%}*)
uninstall: uninstall:
$(RMDIR) ${MODULE_LOCATION} $(RMDIR) ${MODULE_LOCATION}
#uninstall.%:
# $(RMDIR) $(wildcard ${MODULE_LOCATION}/R*${@:uninstall.%=%}*)
help: help:
@echo "usage:" @echo "usage:"
@for target in '' build '<EPICS version>' \ @for target in '' build '<EPICS version>' \
...@@ -210,7 +180,6 @@ help: ...@@ -210,7 +180,6 @@ help:
do echo " make $$target"; \ do echo " make $$target"; \
done done
@echo "Makefile variables:(defaults) [comment]" @echo "Makefile variables:(defaults) [comment]"
# @echo " EPICS_VERSIONS (${DEFAULT_EPICS_VERSION})"
@echo " MODULE (${PRJ}) [from current directory name]" @echo " MODULE (${PRJ}) [from current directory name]"
@echo " PROJECT [older name for MODULE]" @echo " PROJECT [older name for MODULE]"
@echo " SOURCES (*.c *.cc *.cpp *.st *.stt *.gt)" @echo " SOURCES (*.c *.cc *.cpp *.st *.stt *.gt)"
...@@ -226,17 +195,9 @@ help: ...@@ -226,17 +195,9 @@ help:
@echo " BUILDCLASSES (Linux)" @echo " BUILDCLASSES (Linux)"
@echo " <module>_VERSION () [build against specific version of other module]" @echo " <module>_VERSION () [build against specific version of other module]"
## "make version" shows the module version and why it is what it is.
# version: ${IGNOREFILES}
# @${VERSIONCHECKCMD}
debug:: debug::
# @echo "INSTALLED_EPICS_VERSIONS = ${INSTALLED_EPICS_VERSIONS}" @echo "===================== Pass 1 ====================="
@echo "BUILD_EPICS_VERSIONS = ${BUILD_EPICS_VERSIONS}" @echo "BUILD_EPICS_VERSIONS = ${BUILD_EPICS_VERSIONS}"
# @echo "MISSING_EPICS_VERSIONS = ${MISSING_EPICS_VERSIONS}"
# @echo "EPICS_VERSIONS_3.13 = ${EPICS_VERSIONS_3.13}"
# @echo "EPICS_VERSIONS_3.14 = ${EPICS_VERSIONS_3.14}"
@echo "EPICS_VERSIONS_3.15 = ${EPICS_VERSIONS_3.15}"
@echo "BUILDCLASSES = ${BUILDCLASSES}" @echo "BUILDCLASSES = ${BUILDCLASSES}"
@echo "LIBVERSION = ${LIBVERSION}" @echo "LIBVERSION = ${LIBVERSION}"
@echo "VERSIONCHECKFILES = ${VERSIONCHECKFILES}" @echo "VERSIONCHECKFILES = ${VERSIONCHECKFILES}"
...@@ -246,16 +207,9 @@ debug:: ...@@ -246,16 +207,9 @@ debug::
# Loop over all EPICS versions for second run. # Loop over all EPICS versions for second run.
MAKEVERSION = ${MAKE} -f ${USERMAKEFILE} LIBVERSION=${LIBVERSION} MAKEVERSION = ${MAKE} -f ${USERMAKEFILE} LIBVERSION=${LIBVERSION}
build install debug:: ${IGNOREFILES} build install debug db_internal:: ${IGNOREFILES}
@+for VERSION in ${BUILD_EPICS_VERSIONS}; do ${MAKEVERSION} EPICSVERSION=$$VERSION $@; done @+for VERSION in ${BUILD_EPICS_VERSIONS}; do ${MAKEVERSION} EPICSVERSION=$$VERSION $@; done
#build: ${IGNOREFILES}
# ${MAKE} -f ${USERMAKEFILE} LIBVERSION=${LIBVERSION} EPICSVERSION=$$DEFAULT_EPICS_VERSION
# ${MAKEVERSION} EPICSVERSION=$${BUILD_EPICS_VERSIONS}
# Handle cases where user requests a group of EPICS versions:
# make <action>.3.13 or make <action>.3.14 instead of make <action> or
# make 3.13 or make 3.14 instead of make.
define VERSIONRULES define VERSIONRULES
$(1): ${IGNOREFILES} $(1): ${IGNOREFILES}
@+for VERSION in $${EPICS_VERSIONS_$(1)}; do $${MAKEVERSION} EPICSVERSION=$$$$VERSION build; done @+for VERSION in $${EPICS_VERSIONS_$(1)}; do $${MAKEVERSION} EPICSVERSION=$$$$VERSION build; done
...@@ -306,19 +260,6 @@ else # EPICSVERSION ...@@ -306,19 +260,6 @@ else # EPICSVERSION
# EPICSVERSION defined # EPICSVERSION defined
# Second or third run (see T_A branch below) # Second or third run (see T_A branch below)
# With conda EPICS_BASE is exported as a global environment variable
#EPICS_BASE=${EPICS_LOCATION}
#/base-${EPICSVERSION}
ifneq ($(filter 3.13.%,$(EPICSVERSION)),)
EPICS_BASETYPE=3.13
CONFIG=${EPICS_BASE}/config
export BUILD_TYPE=Vx
else # 3.14+
EPICS_BASETYPE=3.14
CONFIG=${EPICS_BASE}/configure CONFIG=${EPICS_BASE}/configure
# There is no 64 bit support before 3.14.12 # There is no 64 bit support before 3.14.12
...@@ -331,13 +272,12 @@ USR_LDFLAGS_$(EPICS_HOST_ARCH) += -m32 ...@@ -331,13 +272,12 @@ USR_LDFLAGS_$(EPICS_HOST_ARCH) += -m32
endif endif
endif endif
endif # 3.14+
${CONFIG}/CONFIG: ${CONFIG}/CONFIG:
@echo "ERROR: EPICS release ${EPICSVERSION} not installed on this host." @echo "ERROR: EPICS release ${EPICSVERSION} not installed on this host."
# Some TOP and EPICS_BASE tweeking necessary to work around release check in 3.14.10+. # Some TOP and EPICS_BASE tweeking necessary to work around release check in 3.14.10+.
EB=${EPICS_BASE} EB:=${EPICS_BASE}
TOP:=${EPICS_BASE} TOP:=${EPICS_BASE}
-include ${CONFIG}/CONFIG -include ${CONFIG}/CONFIG
BASE_CPPFLAGS= BASE_CPPFLAGS=
...@@ -356,6 +296,9 @@ CXXCMPLR=ANSI ...@@ -356,6 +296,9 @@ CXXCMPLR=ANSI
G++_ANSI = $(G++) -ansi G++_ANSI = $(G++) -ansi
OBJ=.o OBJ=.o
O.%:
+$(MKDIR) $@
ifndef T_A ifndef T_A
## RUN 2 ## RUN 2
# Target achitecture not yet defined # Target achitecture not yet defined
...@@ -368,12 +311,10 @@ ifndef T_A ...@@ -368,12 +311,10 @@ ifndef T_A
AUTOSRCS := $(filter-out ~%,$(wildcard *.c *.cc *.cpp *.st *.stt *.gt)) AUTOSRCS := $(filter-out ~%,$(wildcard *.c *.cc *.cpp *.st *.stt *.gt))
SRCS = $(if ${SOURCES},$(filter-out -none-,${SOURCES}),${AUTOSRCS}) SRCS = $(if ${SOURCES},$(filter-out -none-,${SOURCES}),${AUTOSRCS})
#SRCS += ${SOURCES_${EPICS_BASETYPE}} # added later by VAR_EXTENSIONS
#SRCS += ${SOURCES_${EPICSVERSION}} #SRCS += ${SOURCES_${EPICSVERSION}}
export SRCS export SRCS
DBD_SRCS = $(if ${DBDS},$(filter-out -none-,${DBDS}),$(wildcard menu*.dbd *Record.dbd) $(strip $(filter-out %Include.dbd dbCommon.dbd %Record.dbd,$(wildcard *.dbd)) ${BPTS})) DBD_SRCS = $(if ${DBDS},$(filter-out -none-,${DBDS}),$(wildcard menu*.dbd *Record.dbd) $(strip $(filter-out %Include.dbd dbCommon.dbd %Record.dbd,$(wildcard *.dbd)) ${BPTS}))
DBD_SRCS += ${DBDS_${EPICS_BASETYPE}}
DBD_SRCS += ${DBDS_${EPICSVERSION}} DBD_SRCS += ${DBDS_${EPICSVERSION}}
export DBD_SRCS export DBD_SRCS
...@@ -391,50 +332,47 @@ BPTS = $(patsubst %.data,%.dbd,$(wildcard bpt*.data)) ...@@ -391,50 +332,47 @@ BPTS = $(patsubst %.data,%.dbd,$(wildcard bpt*.data))
export BPTS export BPTS
HDRS = ${HEADERS} $(addprefix ${COMMON_DIR}/,$(addsuffix Record.h,${RECORDS})) HDRS = ${HEADERS} $(addprefix ${COMMON_DIR}/,$(addsuffix Record.h,${RECORDS}))
HDRS += ${HEADERS_${EPICS_BASETYPE}}
HDRS += ${HEADERS_${EPICSVERSION}} HDRS += ${HEADERS_${EPICSVERSION}}
export HDRS export HDRS
HDR_SUBDIRS = $(KEEP_HEADER_SUBDIRS)
export HDR_SUBDIRS
TEMPLS = $(if ${TEMPLATES},$(filter-out -none-,${TEMPLATES}),$(wildcard *.template *.db *.subs)) TEMPLS = $(if ${TEMPLATES},$(filter-out -none-,${TEMPLATES}),$(wildcard *.template *.db *.subs))
TEMPLS += ${TEMPLATES_${EPICS_BASETYPE}}
TEMPLS += ${TEMPLATES_${EPICSVERSION}} TEMPLS += ${TEMPLATES_${EPICSVERSION}}
TEMPLS += $(wildcard $(COMMON_DIR)/*.db)
export TEMPLS export TEMPLS
SCR = $(if ${SCRIPTS},$(filter-out -none-,${SCRIPTS}),$(wildcard *.cmd *.iocsh)) SCR = $(if ${SCRIPTS},$(filter-out -none-,${SCRIPTS}),$(wildcard *.cmd *.iocsh))
SCR += ${SCRIPTS_${EPICS_BASETYPE}}
SCR += ${SCRIPTS_${EPICSVERSION}} SCR += ${SCRIPTS_${EPICSVERSION}}
export SCR export SCR
DOCUDIR = .
#DOCU = $(foreach DIR,${DOCUDIR},$(wildcard ${DIR}/*README*) $(foreach EXT,${DOCUEXT}, $(wildcard ${DIR}/*.${EXT})))
export DOCU
# Loop over all target architectures for third run.
# Go to O.${T_A} subdirectory because RULES.Vx only work there:
# Filter architectures to build using EXCLUDE_ARCHS and ARCH_FILTER. # Filter architectures to build using EXCLUDE_ARCHS and ARCH_FILTER.
ifneq (${EPICS_BASETYPE},3.13)
CROSS_COMPILER_TARGET_ARCHS := ${EPICS_HOST_ARCH} ${CROSS_COMPILER_TARGET_ARCHS} CROSS_COMPILER_TARGET_ARCHS := ${EPICS_HOST_ARCH} ${CROSS_COMPILER_TARGET_ARCHS}
endif # !3.13
CROSS_COMPILER_TARGET_ARCHS := $(filter-out $(addprefix %,${EXCLUDE_ARCHS}),$(filter-out $(addsuffix %,${EXCLUDE_ARCHS}),$(if ${ARCH_FILTER},$(filter ${ARCH_FILTER},${CROSS_COMPILER_TARGET_ARCHS}),${CROSS_COMPILER_TARGET_ARCHS}))) CROSS_COMPILER_TARGET_ARCHS := $(filter-out $(addprefix %,${EXCLUDE_ARCHS}),$(filter-out $(addsuffix %,${EXCLUDE_ARCHS}),$(if ${ARCH_FILTER},$(filter ${ARCH_FILTER},${CROSS_COMPILER_TARGET_ARCHS}),${CROSS_COMPILER_TARGET_ARCHS})))
# Create build dirs (and links) if necessary.
LINK_eldk52-e500v2 = eldk52-rt-e500v2 eldk52-xenomai-e500v2
define MAKELINKDIRS
LINKDIRS+=O.${EPICSVERSION}_$1
O.${EPICSVERSION}_$1:
$(LN) O.${EPICSVERSION}_$2 O.${EPICSVERSION}_$1
endef
$(foreach a,${CROSS_COMPILER_TARGET_ARCHS},$(foreach l,$(LINK_$a),$(eval $(call MAKELINKDIRS,$l,$a))))
SRCS_Linux = ${SOURCES_Linux} SRCS_Linux = ${SOURCES_Linux}
SRCS_Linux += ${SOURCES_${EPICS_BASETYPE}_Linux}
SRCS_Linux += ${SOURCES_Linux_${EPICS_BASETYPE}}
export SRCS_Linux export SRCS_Linux
SRCS_vxWorks = ${SOURCES_vxWorks}
SRCS_vxWorks += ${SOURCES_${EPICS_BASETYPE}_vxWorks} # Perform default database expansion of .substitions/.templates into $(COMMON_DIR)
SRCS_vxWorks += ${SOURCES_vxWorks_${EPICS_BASETYPE}} db_internal: $(COMMON_DIR)
export SRCS_vxWorks
-include $(COMMON_DIR)/*.db.d
define SUBS_EXPAND
vpath $(notdir $2) $(dir $2)
db_internal: $(COMMON_DIR)/$(notdir $(basename $2).db)
$(COMMON_DIR)/$(notdir $(basename $2).db): $(notdir $2)
@printf "Inflating database ... %44s >>> %40s \n" "$$^" "$$@"
$(QUIET)$(MSI) -D $$(USR_DBFLAGS) -o $(COMMON_DIR)/$$(notdir $$(basename $2).db) $1 $$^ > $(COMMON_DIR)/$$(notdir $$(basename $2).db).d
$(QUIET)$(MSI) $$(USR_DBFLAGS) -o $(COMMON_DIR)/$$(notdir $$(basename $2).db) $1 $$^
endef
$(foreach file,$(SUBS),$(eval $(call SUBS_EXPAND,-S,$(file))))
$(foreach file,$(TMPS),$(eval $(call SUBS_EXPAND,,$(file))))
install build debug:: $(MAKE_FIRST) install build debug:: $(MAKE_FIRST)
@echo "MAKING EPICS VERSION ${EPICSVERSION}" @echo "MAKING EPICS VERSION ${EPICSVERSION}"
...@@ -443,26 +381,20 @@ uninstall:: ...@@ -443,26 +381,20 @@ uninstall::
$(RMDIR) ${INSTALL_REV} $(RMDIR) ${INSTALL_REV}
debug:: debug::
@echo "===================== Pass 2: EPICSVERSION = $(EPICSVERSION) ====================="
@echo "EPICS_BASE = ${EPICS_BASE}" @echo "EPICS_BASE = ${EPICS_BASE}"
@echo "EPICSVERSION = ${EPICSVERSION}"
@echo "EPICS_BASETYPE = ${EPICS_BASETYPE}"
@echo "CROSS_COMPILER_TARGET_ARCHS = ${CROSS_COMPILER_TARGET_ARCHS}" @echo "CROSS_COMPILER_TARGET_ARCHS = ${CROSS_COMPILER_TARGET_ARCHS}"
@echo "EXCLUDE_ARCHS = ${EXCLUDE_ARCHS}" @echo "EXCLUDE_ARCHS = ${EXCLUDE_ARCHS}"
@echo "LIBVERSION = ${LIBVERSION}" @echo "LIBVERSION = ${LIBVERSION}"
install build::
# Delete old build if INSTBASE has changed and module depends on other modules.
@+for ARCH in ${CROSS_COMPILER_TARGET_ARCHS}; do \
echo '$(realpath ${EPICS_MODULES})' | cmp -s O.${EPICSVERSION}_$$ARCH/INSTBASE || \
( grep -qs "^[^#]" O.${EPICSVERSION}_$$ARCH/*.dep && \
(echo "rebuilding $$ARCH"; $(RMDIR) O.${EPICSVERSION}_$$ARCH) ) || true; \
done
# Loop over all architectures. # Loop over all architectures.
install build debug:: install build debug:: $(COMMON_DIR)
@+for ARCH in ${CROSS_COMPILER_TARGET_ARCHS}; do \ @+failed_builds=0; \
umask 002; echo MAKING ARCH $$ARCH; ${MAKE} -f ${USERMAKEFILE} T_A=$$ARCH $@; \ for ARCH in ${CROSS_COMPILER_TARGET_ARCHS}; do \
done umask 002; echo MAKING ARCH $$ARCH; ${MAKE} -f ${USERMAKEFILE} T_A=$$ARCH $@ || ((failed_builds++)); \
done; \
((failed_builds == 0))
else # T_A else # T_A
...@@ -489,9 +421,6 @@ install build: ...@@ -489,9 +421,6 @@ install build:
else else
O.%:
$(MKDIR) $@
ifeq ($(shell echo "${LIBVERSION}" | grep -v -E "^[0-9]+\.[0-9]+\.[0-9]+\$$"),) ifeq ($(shell echo "${LIBVERSION}" | grep -v -E "^[0-9]+\.[0-9]+\.[0-9]+\$$"),)
install:: build install:: build
@test ! -d ${MODULE_LOCATION}/lib/${T_A} || \ @test ! -d ${MODULE_LOCATION}/lib/${T_A} || \
...@@ -529,17 +458,14 @@ else # in O.* ...@@ -529,17 +458,14 @@ else # in O.*
## RUN 4 ## RUN 4
# In O.* directory. # In O.* directory.
# Add macros like USR_CFLAGS_vxWorks. # Add macros like USR_CFLAGS_Linux.
EXTENDED_VARS=INCLUDES CFLAGS CXXFLAGS CPPFLAGS CODE_CXXFLAGS LDFLAGS EXTENDED_VARS=INCLUDES CFLAGS CXXFLAGS CPPFLAGS CODE_CXXFLAGS LDFLAGS
$(foreach v,${EXTENDED_VARS},$(foreach x,${VAR_EXTENSIONS},$(eval $v+=$${$v_$x}) $(eval USR_$v+=$${USR_$v_$x}))) $(foreach v,${EXTENDED_VARS},$(foreach x,${VAR_EXTENSIONS},$(eval $v+=$${$v_$x}) $(eval USR_$v+=$${USR_$v_$x})))
CFLAGS += ${EXTRA_CFLAGS} CFLAGS += ${EXTRA_CFLAGS}
COMMON_DIR_3.14 = ../O.${EPICSVERSION}_Common COMMON_DIR = ../O.${EPICSVERSION}_Common
COMMON_DIR_3.13 = .
COMMON_DIR = ${COMMON_DIR_${EPICS_BASETYPE}}
# Remove include directory for this module from search path. # Remove include directory for this module from search path.
# 3.13 and 3.14 use different variables
INSTALL_INCLUDES = INSTALL_INCLUDES =
EPICS_INCLUDES = EPICS_INCLUDES =
...@@ -564,29 +490,7 @@ INSTALL_INCLUDES += $$(patsubst %,-I${EPICS_MODULES}/$(1)/%/include,$$($(1)_VERS ...@@ -564,29 +490,7 @@ INSTALL_INCLUDES += $$(patsubst %,-I${EPICS_MODULES}/$(1)/%/include,$$($(1)_VERS
endef endef
$(eval $(foreach m,$(filter-out $(PRJ),$(notdir $(wildcard ${EPICS_MODULES}/*))),$(call ADD_OTHER_MODULE_INCLUDES,$m))) $(eval $(foreach m,$(filter-out $(PRJ),$(notdir $(wildcard ${EPICS_MODULES}/*))),$(call ADD_OTHER_MODULE_INCLUDES,$m)))
ifneq ($(wildcard ${MAKEHOME}/getPrerequisites.tcl),)
# Include path for old style modules.
OLD_INCLUDE = $(wildcard ${INSTBASE}/iocBoot/include)
INSTALL_INCLUDES += $(addprefix -I,${OLD_INCLUDE})
endif
# Manually required modules.
define ADD_MANUAL_DEPENDENCIES
$(eval $(1)_VERSION := $(or $(patsubst ${EPICS_MODULES}/$(1)/%/,%,$(firstword $(shell ls -dvr ${EPICS_MODULES}/$(1)/+([0-9]).+([0-9]).+([0-9])/ 2>/dev/null))),$(basename $(lastword $(subst -, ,$(basename $(realpath ${INSTBASE}/iocBoot/${T_A}/$(1).dep)))))))
endef
$(eval $(foreach m,${REQ},$(call ADD_MANUAL_DEPENDENCIES,$m)))
# EPICS 3.13 uses :: in some rules where 3.14 uses :
ifeq (${EPICS_BASETYPE},3.13)
INSTALLRULE=install::
BUILDRULE=build::
BASERULES=${EPICS_BASE}/config/RULES.Vx
else # 3.14
INSTALLRULE=install:
BUILDRULE=build:
BASERULES=${EPICS_BASE}/configure/RULES BASERULES=${EPICS_BASE}/configure/RULES
endif # 3.14
INSTALL_REV = ${MODULE_LOCATION} INSTALL_REV = ${MODULE_LOCATION}
INSTALL_BIN = ${INSTALL_REV}/bin/$(T_A) INSTALL_BIN = ${INSTALL_REV}/bin/$(T_A)
...@@ -598,66 +502,10 @@ INSTALL_CFG = ${INSTALL_REV}/cfg ...@@ -598,66 +502,10 @@ INSTALL_CFG = ${INSTALL_REV}/cfg
INSTALL_DOC = ${MODULE_LOCATION}/doc INSTALL_DOC = ${MODULE_LOCATION}/doc
INSTALL_SCR = ${INSTALL_REV} INSTALL_SCR = ${INSTALL_REV}
#INSTALL_DOCUS = $(addprefix ${INSTALL_DOC}/${PRJ}/,$(notdir ${DOCU}))
#${INSTALL_DOC}/${PRJ}/%: %
# @echo "Installing documentation $@"
# $(RM) $@
# cp $^ $@
# chmod 444 $@
#
#${INSTALL_TEMPL}/%.template: %.template
# @echo "Installing template file $@"
# $(RM) $@
# echo "#${PRJ}Lib ${LIBVERSION}" > $@
# cat $^ >> $@
# chmod 444 $@
# $(SETLINKS) ${INSTALL_TEMPL} .template $(basename $(notdir $^))
#
#${INSTALL_TEMPL}/%.db: %.db
# @echo "Installing template file $@"
# $(RM) $@
# $(CP) $^ >> $@
# chmod 444 $@
# $(SETLINKS) ${INSTALL_TEMPL} .db $(basename $(notdir $^))
# Different settings required to build library in EPICS 3.13 and 3.14.
ifeq (${EPICS_BASETYPE},3.13) # only 3.13 from here
# Convert sources to object code, skip .a and .o here.
LIBOBJS += $(patsubst %,%.o,$(notdir $(basename $(filter-out %.o %.a,${SRCS}))))
# Add all .a and .o with absolute path.
LIBOBJS += $(filter /%.o /%.a,${SRCS})
# Add all .a and .o with relative path, but go one directory up.
LIBOBJS += $(patsubst %,../%,$(filter-out /%,$(filter %.o %.a,${SRCS})))
LIBOBJS += ${LIBRARIES:%=${INSTALL_LIB}/%Lib}
LIBOBJS += $(foreach l,${USR_LIBOBJS}, $(addprefix ../,$(filter-out /%,$l)) $(filter /%,$l))
LIBNAME = $(if $(strip ${LIBOBJS}),${PRJ}Lib,) # Must be the un-munched name.
MODULELIB = ${LIBNAME:%=%.munch}
PROD = ${MODULELIB}
# Add munched library for C++ code (does not work for Tornado 1).
#ifneq ($(filter %.cc %.cpp %.C,${SRCS}),)
#ifeq ($(filter T1-%,${T_A}),)
#PROD = ${MODULELIB}.munch
#endif # T1- T_A
#endif # .cc or .cpp found
else # Only 3.14 from here.
LIBRARY_OBJS = $(strip ${LIBOBJS} $(foreach l,${USR_LIBOBJS},$(addprefix ../,$(filter-out /%,$l))$(filter /%,$l))) LIBRARY_OBJS = $(strip ${LIBOBJS} $(foreach l,${USR_LIBOBJS},$(addprefix ../,$(filter-out /%,$l))$(filter /%,$l)))
ifeq (${OS_CLASS},vxWorks)
# Only install the munched library.
INSTALL_PROD=
MODULELIB = $(if ${LIBRARY_OBJS},${PRJ}Lib.munch,)
else
MODULELIB = $(if ${LIBRARY_OBJS},${LIB_PREFIX}${PRJ}${SHRLIB_SUFFIX},) MODULELIB = $(if ${LIBRARY_OBJS},${LIB_PREFIX}${PRJ}${SHRLIB_SUFFIX},)
endif
# vxWorks
PROD_vxWorks=${MODULELIB}
LIBOBJS += $(addsuffix $(OBJ),$(notdir $(basename $(filter-out %.$(OBJ) %(LIB_SUFFIX),$(sort ${SRCS}))))) LIBOBJS += $(addsuffix $(OBJ),$(notdir $(basename $(filter-out %.$(OBJ) %(LIB_SUFFIX),$(sort ${SRCS})))))
LIBOBJS += $(filter /%.$(OBJ) /%(LIB_SUFFIX),${SRCS}) LIBOBJS += $(filter /%.$(OBJ) /%(LIB_SUFFIX),${SRCS})
LIBOBJS += ${LIBRARIES:%=${INSTALL_LIB}/%Lib} LIBOBJS += ${LIBRARIES:%=${INSTALL_LIB}/%Lib}
...@@ -668,18 +516,10 @@ PRODUCT_OBJS = ${LIBRARY_OBJS} ...@@ -668,18 +516,10 @@ PRODUCT_OBJS = ${LIBRARY_OBJS}
# Linux # Linux
LOADABLE_LIBRARY=$(if ${LIBRARY_OBJS},${PRJ},) LOADABLE_LIBRARY=$(if ${LIBRARY_OBJS},${PRJ},)
# Hack needed needed for 3.14.8 host arch when no Makefile exists (but only for example GNUmakefile).
ifeq (${EPICSVERSION}-${T_A},3.14.8-${EPICS_HOST_ARCH})
ifeq ($(wildcard ../Makefile),)
LOADABLE_BUILD_LIBRARY = ${LOADABLE_LIBRARY}
endif
endif
# Handle registry stuff automagically if we have a dbd file. # Handle registry stuff automagically if we have a dbd file.
# See ${REGISTRYFILE} and ${EXPORTFILE} rules below. # See ${REGISTRYFILE} and ${EXPORTFILE} rules below.
LIBOBJS += $(if $(MODULEDBD), $(addsuffix $(OBJ),$(basename ${REGISTRYFILE} ${EXPORTFILE}))) LIBOBJS += $(if $(MODULEDBD), $(addsuffix $(OBJ),$(basename ${REGISTRYFILE})))
endif # Both, 3.13 and 3.14 from here.
# For backward compatibility: # For backward compatibility:
# Provide a global symbol for every version with the same # Provide a global symbol for every version with the same
...@@ -693,10 +533,6 @@ MINOR=$(word 2,${MAJOR_MINOR_PATCH}) ...@@ -693,10 +533,6 @@ MINOR=$(word 2,${MAJOR_MINOR_PATCH})
PATCH=$(word 3,${MAJOR_MINOR_PATCH}) PATCH=$(word 3,${MAJOR_MINOR_PATCH})
ifneq (${MINOR},) ifneq (${MINOR},)
ALLMINORS := $(shell for ((i=0;i<=${MINOR};i++));do echo $$i;done) ALLMINORS := $(shell for ((i=0;i<=${MINOR};i++));do echo $$i;done)
PREREQUISITES = $(shell ${MAKEHOME}/getPrerequisites.tcl ${INSTALL_INCLUDE} | grep -vw ${PRJ})
ifeq (${OS_CLASS}, vxWorks)
PROVIDES = ${ALLMINORS:%=--defsym __${PRJ}Lib_${MAJOR}.%=0}
endif # vxWorks
ifeq (${OS_CLASS}, Linux) ifeq (${OS_CLASS}, Linux)
PROVIDES = ${ALLMINORS:%=-Wl,--defsym,${PRJ}Lib_${MAJOR}.%=0} PROVIDES = ${ALLMINORS:%=-Wl,--defsym,${PRJ}Lib_${MAJOR}.%=0}
endif # Linux endif # Linux
...@@ -704,9 +540,6 @@ endif # MINOR ...@@ -704,9 +540,6 @@ endif # MINOR
LDFLAGS += ${PROVIDES} ${USR_LDFLAGS_${T_A}} LDFLAGS += ${PROVIDES} ${USR_LDFLAGS_${T_A}}
# Create and include dependency files. # Create and include dependency files.
# 3.14.8 uses HDEPENDS to select depends mode
# 3.14.12 uses 'HDEPENDSCFLAGS -MMD' (does not catch #include <...>)
# 3.15 uses 'HDEPENDS_COMPFLAGS = -MM -MF $@' (does not catch #include <...>)
HDEPENDS = HDEPENDS =
HDEPENDS_METHOD = COMP HDEPENDS_METHOD = COMP
HDEPENDS_COMPFLAGS = -c HDEPENDS_COMPFLAGS = -c
...@@ -724,17 +557,7 @@ USR_DBDFLAGS += $(DBDEXPANDPATH) ...@@ -724,17 +557,7 @@ USR_DBDFLAGS += $(DBDEXPANDPATH)
# Search all directories where sources or headers come from, plus existing os dependend subdirectories. # Search all directories where sources or headers come from, plus existing os dependend subdirectories.
SRC_INCLUDES = $(addprefix -I, $(wildcard $(foreach d,$(call uniq, $(filter-out /%,$(dir ${SRCS:%=../%} ${HDRS:%=../%}))), $d $(addprefix $d/, os/${OS_CLASS} $(POSIX_$(POSIX)) os/default)))) SRC_INCLUDES = $(addprefix -I, $(wildcard $(foreach d,$(call uniq, $(filter-out /%,$(dir ${SRCS:%=../%} ${HDRS:%=../%}))), $d $(addprefix $d/, os/${OS_CLASS} $(POSIX_$(POSIX)) os/default))))
# Different macro name for 3.14.8.
GENERIC_SRC_INCLUDES = $(SRC_INCLUDES)
ifeq (${EPICS_BASETYPE},3.13)
# Only 3.13 from here.
# Different macro name for 3.13
USR_INCLUDES += $(SRC_INCLUDES) $(INSTALL_INCLUDES)
else
# Only 3.14 from here.
# Create dbd file for snl code. # Create dbd file for snl code.
DBDFILES += $(patsubst %.st,%_snl.dbd,$(notdir $(filter %.st,${SRCS}))) DBDFILES += $(patsubst %.st,%_snl.dbd,$(notdir $(filter %.st,${SRCS})))
...@@ -743,25 +566,11 @@ DBDFILES += $(patsubst %.stt,%_snl.dbd,$(notdir $(filter %.stt,${SRCS}))) ...@@ -743,25 +566,11 @@ DBDFILES += $(patsubst %.stt,%_snl.dbd,$(notdir $(filter %.stt,${SRCS})))
# Create dbd file for GPIB code. # Create dbd file for GPIB code.
DBDFILES += $(patsubst %.gt,%.dbd,$(notdir $(filter %.gt,${SRCS}))) DBDFILES += $(patsubst %.gt,%.dbd,$(notdir $(filter %.gt,${SRCS})))
# Create dbd file with references to all subRecord functions. # snc location
# Problem: functions may be commented out. Better preprocess, but then generate headers first.
#define maksubfuncfile
#/static/ {static=1} \
#/\([\t ]*(struct)?[\t ]*(genSub|sub|aSub)Record[\t ]*\*[\t ]*\w+[\t ]*\)/ { \
# match ($$0,/(\w+)[\t ]*\([\t ]*(struct)?[\t ]*\w+Record[\t ]*\*[\t ]*\w+[\t ]*\)/, a); \
# n=a[1];if(!static && !f[n]){f[n]=1;print "function (" n ")"}} \
#/[;{}]/ {static=0}
#endef
#
#$(shell awk '$(maksubfuncfile)' $(addprefix ../,$(filter %.c %.cc %.C %.cpp, $(SRCS))) > ${SUBFUNCFILE})
#DBDFILES += $(if $(shell cat ${SUBFUNCFILE}),${SUBFUNCFILE})
# snc location in 3.14: From latest version of module seq or fall back to globally installed snc.
# In a conda environment we have only one version so this could be simplify # In a conda environment we have only one version so this could be simplify
SNC=$(lastword $(dir ${EPICS_BASE})seq/bin/$(EPICS_HOST_ARCH)/snc $(shell ls -dv ${EPICS_MODULES}/seq/$(or $(seq_VERSION),+([0-9]).+([0-9]).+([0-9]))/bin/${EPICS_HOST_ARCH}/snc 2>/dev/null)) SNC=$(lastword $(dir ${EPICS_BASE})seq/bin/$(EPICS_HOST_ARCH)/snc $(shell ls -dv ${EPICS_MODULES}/seq/$(or $(seq_VERSION),+([0-9]).+([0-9]).+([0-9]))/bin/${EPICS_HOST_ARCH}/snc 2>/dev/null))
endif # 3.14
ifneq ($(strip ${DBDFILES}),) ifneq ($(strip ${DBDFILES}),)
MODULEDBD=${PRJ}.dbd MODULEDBD=${PRJ}.dbd
...@@ -775,19 +584,16 @@ endif # MODULELIB ...@@ -775,19 +584,16 @@ endif # MODULELIB
debug:: debug::
@echo "BUILDCLASSES = ${BUILDCLASSES}" @echo "BUILDCLASSES = ${BUILDCLASSES}"
@echo "OS_CLASS = ${OS_CLASS}" @echo "OS_CLASS = ${OS_CLASS}"
@echo "T_A = ${T_A}"
@echo "MODULEDBD = ${MODULEDBD}" @echo "MODULEDBD = ${MODULEDBD}"
@echo "RECORDS = ${RECORDS}" @echo "RECORDS = ${RECORDS}"
@echo "MENUS = ${MENUS}" @echo "MENUS = ${MENUS}"
@echo "BPTS = ${BPTS}" @echo "BPTS = ${BPTS}"
@echo "HDRS = ${HDRS}" @echo "HDRS = ${HDRS}"
@echo "SOURCES = ${SOURCES}" @echo "SOURCES = ${SOURCES}"
@echo "SOURCES_${EPICS_BASETYPE} = ${SOURCES_${EPICS_BASETYPE}}"
@echo "SOURCES_${OS_CLASS} = ${SOURCES_${OS_CLASS}}" @echo "SOURCES_${OS_CLASS} = ${SOURCES_${OS_CLASS}}"
@echo "SRCS = ${SRCS}" @echo "SRCS = ${SRCS}"
@echo "LIBOBJS = ${LIBOBJS}" @echo "LIBOBJS = ${LIBOBJS}"
@echo "DBDS = ${DBDS}" @echo "DBDS = ${DBDS}"
@echo "DBDS_${EPICS_BASETYPE} = ${DBDS_${EPICS_BASETYPE}}"
@echo "DBDS_${OS_CLASS} = ${DBDS_${OS_CLASS}}" @echo "DBDS_${OS_CLASS} = ${DBDS_${OS_CLASS}}"
@echo "DBD_SRCS = ${DBD_SRCS}" @echo "DBD_SRCS = ${DBD_SRCS}"
@echo "DBDFILES = ${DBDFILES}" @echo "DBDFILES = ${DBDFILES}"
...@@ -795,26 +601,22 @@ debug:: ...@@ -795,26 +601,22 @@ debug::
@echo "LIBVERSION = ${LIBVERSION}" @echo "LIBVERSION = ${LIBVERSION}"
@echo "MODULE_LOCATION = ${MODULE_LOCATION}" @echo "MODULE_LOCATION = ${MODULE_LOCATION}"
${BUILDRULE} MODULEINFOS build: MODULEINFOS
${BUILDRULE} ${MODULEDBD} build: ${MODULEDBD}
${BUILDRULE} $(addprefix ${COMMON_DIR}/,$(addsuffix Record.h,${RECORDS})) build: $(addprefix ${COMMON_DIR}/,$(addsuffix Record.h,${RECORDS}))
${BUILDRULE} ${DEPFILE} build: ${DEPFILE}
# Include default EPICS Makefiles (version dependent). # Include default EPICS Makefiles (version dependent).
# Avoid library installation when doing 'make build'. # Avoid library installation when doing 'make build'.
INSTALL_LOADABLE_SHRLIBS= INSTALL_LOADABLE_SHRLIBS=
# Avoid installing *.munch to bin directory.
INSTALL_MUNCHS=
include ${BASERULES} include ${BASERULES}
# Fix incompatible release rules. # Fix incompatible release rules.
RELEASE_DBDFLAGS = -I ${EPICS_BASE}/dbd RELEASE_DBDFLAGS = -I ${EPICS_BASE}/dbd
RELEASE_INCLUDES = -I${EPICS_BASE}/include RELEASE_INCLUDES = -I${EPICS_BASE}/include
# For EPICS 3.15: # For EPICS 3.15+:
RELEASE_INCLUDES += -I${EPICS_BASE}/include/compiler/${CMPLR_CLASS} RELEASE_INCLUDES += -I${EPICS_BASE}/include/compiler/${CMPLR_CLASS}
RELEASE_INCLUDES += -I${EPICS_BASE}/include/os/${OS_CLASS} RELEASE_INCLUDES += -I${EPICS_BASE}/include/os/${OS_CLASS}
# Dor EPICS 3.13:
EPICS_INCLUDES += -I$(EPICS_BASE_INCLUDE) -I$(EPICS_BASE_INCLUDE)/os/$(OS_CLASS)
# Find all sources and set vpath accordingly. # Find all sources and set vpath accordingly.
$(foreach file, ${SRCS} ${TEMPLS} ${SCR}, $(eval vpath $(notdir ${file}) ../$(dir ${file}))) $(foreach file, ${SRCS} ${TEMPLS} ${SCR}, $(eval vpath $(notdir ${file}) ../$(dir ${file})))
...@@ -836,7 +638,6 @@ vpath %.hxx $(addprefix ../,$(sort $(dir $(filter-out /%,${HDRS}) ${SRCS}))) $(s ...@@ -836,7 +638,6 @@ vpath %.hxx $(addprefix ../,$(sort $(dir $(filter-out /%,${HDRS}) ${SRCS}))) $(s
PRODUCTS = ${MODULELIB} ${MODULEDBD} ${DEPFILE} PRODUCTS = ${MODULELIB} ${MODULEDBD} ${DEPFILE}
MODULEINFOS: MODULEINFOS:
@echo ${PRJ} > MODULENAME @echo ${PRJ} > MODULENAME
@echo $(realpath ${EPICS_MODULES}) > INSTBASE
@echo ${PRODUCTS} > PRODUCTS @echo ${PRODUCTS} > PRODUCTS
@echo ${LIBVERSION} > LIBVERSION @echo ${LIBVERSION} > LIBVERSION
...@@ -851,7 +652,11 @@ ${MODULEDBD}: ${DBDFILES} ...@@ -851,7 +652,11 @@ ${MODULEDBD}: ${DBDFILES}
INSTALL_LIBS = ${MODULELIB:%=${INSTALL_LIB}/%} INSTALL_LIBS = ${MODULELIB:%=${INSTALL_LIB}/%}
INSTALL_DEPS = ${DEPFILE:%=${INSTALL_LIB}/%} INSTALL_DEPS = ${DEPFILE:%=${INSTALL_LIB}/%}
INSTALL_DBDS = ${MODULEDBD:%=${INSTALL_DBD}/%} INSTALL_DBDS = ${MODULEDBD:%=${INSTALL_DBD}/%}
INSTALL_HDRS = $(addprefix ${INSTALL_INCLUDE}/,$(notdir ${HDRS})) ifneq ($(strip $(HDR_SUBDIRS)),)
INSTALL_HDRS = $(addprefix ${INSTALL_INCLUDE}/,$(notdir $(filter-out $(addsuffix /%,$(HDR_SUBDIRS)),${HDRS})))
else
INSTALL_HDRS = $(addprefix ${INSTALL_INCLUDE}/,$(notdir ${HDRS}))
endif
INSTALL_DBS = $(addprefix ${INSTALL_DB}/,$(notdir ${TEMPLS})) INSTALL_DBS = $(addprefix ${INSTALL_DB}/,$(notdir ${TEMPLS}))
INSTALL_SCRS = $(addprefix ${INSTALL_SCR}/,$(notdir ${SCR})) INSTALL_SCRS = $(addprefix ${INSTALL_SCR}/,$(notdir ${SCR}))
INSTALL_BINS = $(addprefix ${INSTALL_BIN}/,$(notdir ${BINS})) INSTALL_BINS = $(addprefix ${INSTALL_BIN}/,$(notdir ${BINS}))
...@@ -873,60 +678,52 @@ debug:: ...@@ -873,60 +678,52 @@ debug::
@echo "INSTALL_CFGS = $(INSTALL_CFGS)" @echo "INSTALL_CFGS = $(INSTALL_CFGS)"
@echo "INSTALL_BIN = $(INSTALL_BIN)" @echo "INSTALL_BIN = $(INSTALL_BIN)"
@echo "INSTALL_BINS = $(INSTALL_BINS)" @echo "INSTALL_BINS = $(INSTALL_BINS)"
@echo "HDR_SUBDIRS = $(HDR_SUBDIRS)"
define install_subdirs
$1_HDRS = $$(filter $1/%,$$(HDRS))
INSTALL_HDRS += $$(addprefix $$(INSTALL_INCLUDE)/,$$($1_HDRS:$1/%=%))
vpath %.h ../$1
vpath %.hpp ../$1
vpath %.hh ../$1
vpath %.hxx ../$1
debug::
@echo "$1_HDRS = $$($1_HDRS)"
endef
$(foreach d,$(HDR_SUBDIRS),$(eval $(call install_subdirs,$d)))
INSTALLS += ${INSTALL_CFGS} ${INSTALL_SCRS} ${INSTALL_HDRS} ${INSTALL_DBDS} ${INSTALL_DBS} ${INSTALL_LIBS} ${INSTALL_BINS} ${INSTALL_DEPS} INSTALLS += ${INSTALL_CFGS} ${INSTALL_SCRS} ${INSTALL_HDRS} ${INSTALL_DBDS} ${INSTALL_DBS} ${INSTALL_LIBS} ${INSTALL_BINS} ${INSTALL_DEPS}
${INSTALLRULE} ${INSTALLS} install: ${INSTALLS}
${INSTALL_DBDS}: $(notdir ${INSTALL_DBDS}) ${INSTALL_DBDS}: $(notdir ${INSTALL_DBDS})
@echo "Installing module dbd file $@" @echo "Installing module dbd file(s) $^ to $(@D)"
$(INSTALL) -d -m644 $< $(@D) $(INSTALL) -d -m$(INSTALL_PERMISSIONS) $^ $(@D)
${INSTALL_LIBS}: $(notdir ${INSTALL_LIBS}) ${INSTALL_LIBS}: $(notdir ${INSTALL_LIBS})
@echo "Installing module library $@" @echo "Installing module library $@"
$(INSTALL) -d -m755 $< $(@D) $(INSTALL) -d -m$(SHRLIB_PERMISSIONS) $< $(@D)
${INSTALL_DEPS}: $(notdir ${INSTALL_DEPS}) ${INSTALL_DEPS}: $(notdir ${INSTALL_DEPS})
@echo "Installing module dependency file $@" @echo "Installing module dependency file $@"
$(INSTALL) -d -m644 $< $(@D) $(INSTALL) -d -m$(INSTALL_PERMISSIONS) $< $(@D)
# Fix templates for older EPICS versions:
# Remove 'alias' for EPICS <= 3.14.10
# and 'info' and macro defaults for EPICS 3.13.
# Make use of differences in defined variables.
ifeq ($(DEP),.d)
# 3.14.10+
${INSTALL_DBS}: $(notdir ${INSTALL_DBS})
@echo "Installing module template files $^ to $(@D)"
$(INSTALL) -d -m644 $^ $(@D)
else ifeq (${EPICS_BASETYPE},3.13)
# 3.13
${INSTALL_DBS}: $(notdir ${INSTALL_DBS})
@echo "Installing module template files $^ to $(@D)"
mkdir -p -m 775 $(@D)
for i in $^; do sed -r 's/\$$\{([^={]*)=[^}]*\}/$${\1}/g;s/\$$\(([^=(]*)=[^)]*\)/$$(\1)/g;s/(^|\))[ \t]*(alias|info)[ \t]*\(/#&/g' $$i > $(@D)/$$(basename $$i); done
else
# 3.14.9-
${INSTALL_DBS}: $(notdir ${INSTALL_DBS}) ${INSTALL_DBS}: $(notdir ${INSTALL_DBS})
@echo "Installing module template files $^ to $(@D)" @echo "Installing module template files $^ to $(@D)"
mkdir -p -m 775 $(@D) $(INSTALL) -d -m$(INSTALL_PERMISSIONS) $^ $(@D)
for i in $^; do sed -r 's/(^|\))[ \t]*alias[ \t]*/#&/g' $$i > $(@D)/$$(basename $$i); done
endif
${INSTALL_SCRS}: $(notdir ${SCR}) ${INSTALL_SCRS}: $(notdir ${SCR})
@echo "Installing scripts $^ to $(@D)" @echo "Installing scripts $^ to $(@D)"
$(INSTALL) -d -m755 $^ $(@D) $(INSTALL) -d -m$(BIN_PERMISSIONS) $^ $(@D)
${INSTALL_CFGS}: ${CFGS} ${INSTALL_CFGS}: ${CFGS}
@echo "Installing configuration files $^ to $(@D)" @echo "Installing configuration files $^ to $(@D)"
$(INSTALL) -d -m644 $^ $(@D) $(INSTALL) -d -m$(INSTALL_PERMISSIONS) $^ $(@D)
${INSTALL_BINS}: $(addprefix ../,$(filter-out /%,${BINS})) $(filter /%,${BINS}) ${INSTALL_BINS}: $(addprefix ../,$(filter-out /%,${BINS})) $(filter /%,${BINS})
@echo "Installing binaries $^ to $(@D)" @echo "Installing binaries $^ to $(@D)"
$(INSTALL) -d -m755 $^ $(@D) $(INSTALL) -d -m$(BIN_PERMISSIONS) $^ $(@D)
# Create SNL code from st/stt file. # Create SNL code from st/stt file.
# (RULES.Vx only allows ../%.st, 3.14 has no .st rules at all.)
# Important to have %.o: %.st and %.o: %.stt rule before %.o: %.c rule! # Important to have %.o: %.st and %.o: %.stt rule before %.o: %.c rule!
# Preprocess in any case because docu and implemented EPICS rules mismatch here. # Preprocess in any case because docu and implemented EPICS rules mismatch here.
...@@ -936,7 +733,7 @@ CPPSNCFLAGS1 += -I $(dir $(SNC))../../include ...@@ -936,7 +733,7 @@ CPPSNCFLAGS1 += -I $(dir $(SNC))../../include
SNCFLAGS += -r SNCFLAGS += -r
# 1) ESS uses 3.15.5 as the minimal EPICS BASE, so we don't need to check 3.13, # 1) ESS uses 7.0.3.1 as the minimal EPICS BASE, so we don't need to check 3.13,
# 2) We also need -c option in $(COMPILE.c) in order to compile generated source file properly # 2) We also need -c option in $(COMPILE.c) in order to compile generated source file properly
# 3) SNC (2.1.21) should use -o, because without them, snc returns $(*F).i.c instead of $(*F).c # 3) SNC (2.1.21) should use -o, because without them, snc returns $(*F).i.c instead of $(*F).c
# With the EPICS standard building rule, -o and mv are used. # With the EPICS standard building rule, -o and mv are used.
...@@ -989,86 +786,18 @@ SNCFLAGS += -r ...@@ -989,86 +786,18 @@ SNCFLAGS += -r
${LN} $< $(*F).gt ${LN} $< $(*F).gt
gdc $(*F).gt gdc $(*F).gt
# The original EPICS munching rules do not really work well.
# Call the native vxWorks munch program.
MUNCH_5=tclsh $(VX_DIR)/host/src/hutils/munch.tcl
MUNCH_6=tclsh $(VX_DIR)/host/resource/hutils/tcl/munch.tcl
MUNCH_=$(MUNCH_5)
# VXWORKS_MAJOR_VERSION exsists since EPICS 3.14.12 or so.
MUNCH=$(MUNCH_$(VXWORKS_MAJOR_VERSION))
%.munch: CMPLR=TRAD
%.munch: %
@echo Munching $<
$(RM) ctct.o ctdt.c
$(NM) $< | $(MUNCH) > ctdt.c
$(COMPILE.c) ctdt.c
$(LINK.c) $@ $< ctdt.o
%_ctdt.c : %.nm
@echo Munching $*
@$(RM) $@
$(MUNCH) < $< > $@
${VERSIONFILE}: ${VERSIONFILE}:
echo "char _${PRJ}LibRelease[] = \"${LIBVERSION}\";" >> $@ echo "char _${PRJ}LibRelease[] = \"${LIBVERSION}\";" >> $@
# EPICS R3.14.*:
# Create file to fill registry from dbd file. # Create file to fill registry from dbd file.
${REGISTRYFILE}: ${MODULEDBD} ${REGISTRYFILE}: ${MODULEDBD}
$(PERL) $(EPICS_BASE_HOST_BIN)/registerRecordDeviceDriver.pl $< $(basename $@) > $@ $(PERL) $(EPICS_BASE_HOST_BIN)/registerRecordDeviceDriver.pl $< $(basename $@) > $@
# 3.14.12 complains if this rule is not overwritten
./%Include.dbd:
# For 3.13 code used with 3.14+:
# Add missing epicsExportAddress() calls for registry.
define makexportfile
BEGIN { print "/* This is a generated file. Do not modify! */"; \
print "#include <drvSup.h>"; \
print "#include <devSup.h>"; \
print "#include <recSup.h>"; \
print "#include <registryFunction.h>"; \
print "#include <epicsExport.h>"; \
print "/* These are the RegisterFunction and ExportAddress calls missing for 3.14 compatible code. */"; \
} \
/ U pvar_func_register_func_/ {name=substr($$2,25); func_missing[name]=1; next;} \
/ [A-Z] pvar_func_register_func_/ {name=substr($$3,25); func_found[name]=1; next;} \
/ U pvar_func_/ {name=substr($$2,11); reg_missing[name]=1; next;} \
/ [A-Z] pvar_func_/ {name=substr($$3,11); reg_found[name]=1; next;} \
/ U pvar_/ {i=index(substr($$2,6),"_"); type=substr($$2,6,i-1); name=substr($$2,i+6); var_missing[name]=type; next;} \
/ [A-Z] pvar_/ {i=index(substr($$3,6),"_"); name=substr($$3,i+6); var_found[name]=1; next;} \
END {for (name in func_missing) if (!func_found[name]) { \
print "void " name "();"; \
print "epicsRegisterFunction(" name ");"} \
for (name in reg_missing) if (!reg_found[name]) { \
print "extern REGISTRYFUNCTION " name ";"; \
print "epicsExportRegistrar(" name ");"} \
for (name in var_missing) if (!var_found[name]) { \
type = var_missing[name]; \
print "extern " type " " name ";"; \
print "epicsExportAddress(" type ", " name ");"} \
}
endef
CORELIB = ${CORELIB_${OS_CLASS}}
CORELIB_vxWorks = $(firstword $(wildcard ${EPICS_BASE}/bin/${T_A}/softIoc.munch ${EPICS_BASE}/bin/${T_A}/iocCoreLibrary.munch))
ifeq (${OS_CLASS},vxWorks)
SHARED_LIBRARIES=NO
endif
LSUFFIX_YES=$(SHRLIB_SUFFIX)
LSUFFIX_NO=$(LIB_SUFFIX)
LSUFFIX=$(LSUFFIX_$(SHARED_LIBRARIES))
${EXPORTFILE}: $(filter-out $(basename ${EXPORTFILE})$(OBJ),${LIBOBJS})
$(RM) $@
$(NM) $^ ${BASELIBS:%=${EPICS_BASE}/lib/${T_A}/${LIB_PREFIX}%$(LSUFFIX)} ${CORELIB} | awk '$(makexportfile)' > $@
# Create dependency file for recursive requires. # Create dependency file for recursive requires.
.PHONY: ${DEPFILE}
${DEPFILE}: ${LIBOBJS} $(USERMAKEFILE) ${DEPFILE}: ${LIBOBJS} $(USERMAKEFILE)
@echo "Collecting dependencies" @echo "Collecting dependencies"
$(RM) $@ $(RM) $@.tmp
@echo "# Generated file. Do not edit." > $@ @echo "# Generated file. Do not edit." > $@
# Check dependencies on other module headers. # Check dependencies on other module headers.
cat *.d 2>/dev/null | sed 's/ /\n/g' | sed -n 's%$(EPICS_MODULES)/*\([^/]*\)/\([0-9]*\.[0-9]*\.[0-9]*\)/.*%\1 \2%p;s%$(EPICS_MODULES)/*\([^/]*\)/\([^/]*\)/.*%\1 \2%p'| grep -v "include" | sort -u >> $@ cat *.d 2>/dev/null | sed 's/ /\n/g' | sed -n 's%$(EPICS_MODULES)/*\([^/]*\)/\([0-9]*\.[0-9]*\.[0-9]*\)/.*%\1 \2%p;s%$(EPICS_MODULES)/*\([^/]*\)/\([^/]*\)/.*%\1 \2%p'| grep -v "include" | sort -u >> $@
...@@ -1076,14 +805,6 @@ ifneq ($(strip ${REQ}),) ...@@ -1076,14 +805,6 @@ ifneq ($(strip ${REQ}),)
# Manully added dependencies: ${REQ} # Manully added dependencies: ${REQ}
@$(foreach m,${REQ},echo "$m $(or ${$m_VERSION},$(and $(wildcard ${EPICS_MODULES}/$m),$(error REQUIRED module $m has no numbered version. Set $m_VERSION)),$(warning REQUIRED module $m not found for ${T_A}.))" >> $@;) @$(foreach m,${REQ},echo "$m $(or ${$m_VERSION},$(and $(wildcard ${EPICS_MODULES}/$m),$(error REQUIRED module $m has no numbered version. Set $m_VERSION)),$(warning REQUIRED module $m not found for ${T_A}.))" >> $@;)
endif endif
ifdef OLD_INCLUDE
# Check dependencies on old style driver headers.
@${MAKEHOME}/getPrerequisites.tcl -dep ${OLD_INCLUDE} | grep -vw -e ${PRJ} -e ^$$ >> $@ && echo "Warning: dependency on old style driver"; true;
endif
# Remove MakefileInclude after we are done because it interfers with our way to build.
$(BUILDRULE)
$(RM) MakefileInclude
endif # In O.* directory endif # In O.* directory
endif # T_A defined endif # T_A defined
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment