various changes to support macOS and windows build

. arch dependant headers are installed in os/${OS_CLASS} subdir
. function to filter out dirs from a list is now written in portable perl
. link to modules in REQ explicitly
This commit is contained in:
Xiaoqiang Wang
2019-12-07 15:47:33 +01:00
parent 741fa816a1
commit 37b9939211
+31 -7
View File
@@ -119,6 +119,18 @@ define uniq
$(foreach _,$1,$(if $(filter $_,${seen}),,$(eval seen += $_))) \
${seen}
endef
# Function that removes directories from list
define filter_out_dir
$(shell perl -e 'foreach my $$x (qw($1)) {if(-f "$$x") {print "$$x "}}')
endef
# Function that retains the certian portion of the header file path
# and then used as the subdirectory inside INSTALL_INCLUDE
# param 1 - list of header files, "src/os/Linux/jconfig.h src/pv.h src/os/default/jpeglib.h"
# param 2 - pattern "os/${OS_CLASS}/|os/default/"
# return - file path with pattern retained, "os/Linux/jconfig.h pv.h os/default/jpeglib.h"
define os_include_dir
$(shell perl -e 'use File::Basename;foreach my $$x (qw($1)) { if ($$x =~ m[($2)(.*)]) {print "$$1$$2 ";} else {print(basename("$$x")," ");}}')
endef
ifndef EPICSVERSION
## RUN 1
@@ -340,7 +352,6 @@ CMPLR=STD
GCC_STD = $(GCC)
CXXCMPLR=ANSI
G++_ANSI = $(G++) -ansi
OBJ=.o
ifndef T_A
## RUN 2
@@ -376,19 +387,19 @@ HDRS = ${RECORDS:%=${COMMON_DIR}/%.h} ${MENUS:%=${COMMON_DIR}/%.h}
HDRSX = ${HEADERS}
HDRSX += ${HEADERS_${EPICS_BASETYPE}}
HDRSX += ${HEADERS_${EPICSVERSION}}
HDRS += $(filter-out $(realpath ${HDRSX:%=%/}),$(realpath ${HDRSX}))
HDRS += $(call filter_out_dir,$(realpath ${HDRSX}))
export HDRS
TEMPLSX = $(if ${TEMPLATES},$(filter-out -none-,${TEMPLATES}),$(wildcard *.template *.db *.subs))
TEMPLSX += ${TEMPLATES_${EPICS_BASETYPE}}
TEMPLSX += ${TEMPLATES_${EPICSVERSION}}
TEMPLS = $(filter-out $(realpath ${TEMPLSX:%=%/}),$(realpath ${TEMPLSX}))
TEMPLS = $(call filter_out_dir,$(realpath ${TEMPLSX}))
export TEMPLS
SCRX = $(if ${SCRIPTS},$(filter-out -none-,${SCRIPTS}),$(wildcard *.cmd *.iocsh))
SCRX += ${SCRIPTS_${EPICS_BASETYPE}}
SCRX += ${SCRIPTS_${EPICSVERSION}}
SCR = $(filter-out $(realpath ${SCRX:%=%/}),$(realpath ${SCRX}))
SCR = $(call filter_out_dir,$(realpath ${SCRX}))
export SCR
DOCUDIR = .
@@ -511,6 +522,8 @@ define ADD_OTHER_MODULE_INCLUDES
$(eval $(1)_VERSION = $(patsubst ${EPICS_MODULES}/$(1)/%/R${EPICSVERSION}/lib/$(T_A)/,%,$(firstword $(shell ls -dvr ${EPICS_MODULES}/$(1)/+([0-9]).+([0-9]).+([0-9])/R${EPICSVERSION}/lib/$(T_A)/ 2>/dev/null))))
export $(1)_VERSION
OTHER_MODULE_INCLUDES += $$(addprefix -I,$$(firstword $$(shell ls -dvr ${EPICS_MODULES}/$(1)/$$(strip $$($(1)_VERSION))*(.+([0-9]))/R${EPICSVERSION}/include 2>/dev/null)))
OTHER_MODULE_INCLUDES += $$(addprefix -I,$$(firstword $$(shell ls -dvr ${EPICS_MODULES}/$(1)/$$(strip $$($(1)_VERSION))*(.+([0-9]))/R${EPICSVERSION}/include/os/default 2>/dev/null)))
OTHER_MODULE_INCLUDES += $$(addprefix -I,$$(firstword $$(shell ls -dvr ${EPICS_MODULES}/$(1)/$$(strip $$($(1)_VERSION))*(.+([0-9]))/R${EPICSVERSION}/include/os/${OS_CLASS} 2>/dev/null)))
endef
$(eval $(foreach m,$(filter-out $(PRJ) $(IGNORE_MODULES),$(notdir $(wildcard ${EPICS_MODULES}/*))),$(call ADD_OTHER_MODULE_INCLUDES,$m)))
# Include path for old style modules.
@@ -661,7 +674,7 @@ endif
# Handle registry stuff automagically if we have a dbd file.
# See ${REGISTRYFILE} and ${EXPORTFILE} rules below.
LIBOBJS += $(if $(MODULEDBD), $(addsuffix $(OBJ),$(basename ${REGISTRYFILE} ${EXPORTFILE})))
LIBOBJS += $(if $(MODULEDBD), $(addsuffix $(OBJ),$(basename ${REGISTRYFILE} $(if $(filter WIN32,${OS_CLASS}),,${EXPORTFILE}))))
ifdef BASE_3_16
# Suppress "'rset' is deprecated" warning for old drivers
@@ -716,9 +729,11 @@ HDEPENDS_COMPFLAGS = -c
CPPFLAGS += -MD
else
ifdef HDEPENDS
ifneq (${OS_CLASS},WIN32)
CPPFLAGS += -MMD
endif
endif
endif
-include *.d
# Need to find source dbd files relative to one dir up but generated dbd files in this dir.
@@ -819,6 +834,11 @@ INSTALL_LOADABLE_SHRLIBS=
INSTALL_MUNCHS=
include ${BASERULES}
ifeq (${OS_CLASS},WIN32) # explicitly link required dependencies
LIB_LIBS += ${EPICS_BASE_IOC_LIBS} ${REQ}
endif
SHRLIB_SEARCH_DIRS += ${EPICS_BASE}/lib/${T_A}
$(foreach m,${REQ},$(eval ${m}_DIR=${EPICS_MODULES}/${m}/${${m}_VERSION}/R${EPICSVERSION}/lib/${T_A}))
# restore overwritten commands
MKDIR = mkdir -p -m 775
# Fix incompatible release rules.
@@ -864,9 +884,12 @@ ${MODULEDBD}: ${DBDFILES}
# Install everything.
INSTALL_LIBS = $(addprefix ${INSTALL_LIB}/,${MODULELIB} $(notdir ${SHRLIBS}))
ifeq (${OS_CLASS},WIN32) # .lib for WIN32 is also required for linking
INSTALL_LIBS += $(addprefix ${INSTALL_LIB}/,${LIB_PREFIX}${PRJ}${LIB_SUFFIX})
endif
INSTALL_DEPS = ${DEPFILE:%=${INSTALL_LIB}/%}
INSTALL_DBDS = ${MODULEDBD:%=${INSTALL_DBD}/%}
INSTALL_HDRS = $(addprefix ${INSTALL_INCLUDE}/,$(notdir ${HDRS}))
INSTALL_HDRS = $(addprefix ${INSTALL_INCLUDE}/,$(call os_include_dir,${HDRS},os/default/|os/${OS_CLASS}/))
INSTALL_DBS = $(addprefix ${INSTALL_DB}/,$(notdir ${TEMPLS}))
INSTALL_SCRS = $(addprefix ${INSTALL_SCR}/,$(notdir ${SCR}))
INSTALL_BINS = $(addprefix ${INSTALL_BIN}/,$(notdir ${BINS}))
@@ -1012,7 +1035,8 @@ MUNCH=$(MUNCH_$(VXWORKS_MAJOR_VERSION))
$(MUNCH) < $< > $@
${VERSIONFILE}:
echo "char _${PRJ}LibRelease[] = \"${LIBVERSION}\";" >> $@
echo "#include <epicsExport.h>" >> $@
echo "epicsShareExtern char _${PRJ}LibRelease[] = \"${LIBVERSION}\";" >> $@
# EPICS R3.14+:
# Create file to fill registry from dbd file.