diff --git a/.editorconfig b/.editorconfig
new file mode 100644
index 000000000..b6a8712f6
--- /dev/null
+++ b/.editorconfig
@@ -0,0 +1,8 @@
+# Documentation for this file: https://EditorConfig.org
+
+root = true
+
+# Unix-style newlines ending every file,
+# as some compilers complain about files not ending in newline
+[*]
+insert_final_newline = true
diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 000000000..8162ae0f2
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1,27 @@
+.appveyor.yml export-ignore
+.appveyor/ export-ignore
+.ci/ export-ignore
+.github/ export-ignore
+.gitmodules export-ignore
+.readthedocs.yml export-ignore
+.tools/ export-ignore
+README export-subst
+
+#Which files need CRLF handling
+# default to automatic
+* text=auto
+
+# batch script parser on windows requires CRLF
+*.bat text eol=crlf
+
+# extensions for scripts which may be executable via. "#!..." must have LF
+*.pl text eol=lf
+*.plt text eol=lf
+*.sh text eol=lf
+*.cmd text eol=lf
+# .cmd in unexpanded templates
+*.cmd@* text eol=lf
+# executable scripts w/o extensions
+modules/ca/src/client/S99caRepeater@ text eol=lf
+modules/libcom/src/log/S99logServer@ text eol=lf
+startup/EpicsHostArch text eol=lf
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 000000000..046630981
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,21 @@
+/cfg/
+/bin/
+/lib/
+/db/
+/dbd/
+/doc/
+/html/
+/include/
+/templates/
+/configure/*.local
+/modules/RELEASE.*.local
+/modules/Makefile.local
+O.*/
+/QtC-*
+/.qtc_*
+/.vscode/
+*.orig
+*.log
+.*.swp
+.DS_Store
+.iocsh_history
diff --git a/.readthedocs.yaml b/.readthedocs.yaml
new file mode 100644
index 000000000..49b5b0d42
--- /dev/null
+++ b/.readthedocs.yaml
@@ -0,0 +1,36 @@
+# .readthedocs.yml
+# Read the Docs configuration file
+# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details
+
+# Required
+version: 2
+
+build:
+ os: ubuntu-22.04
+ tools:
+ python: "3.9"
+ apt_packages:
+ - graphviz
+ - rsync
+ jobs:
+ pre_build:
+ - make inc
+ - make -C documentation rtd
+
+# Build documentation in the documentation/O.Common directory with Sphinx
+sphinx:
+ configuration: documentation/O.Common/rtd-src/conf.py
+
+# Build documentation with MkDocs
+#mkdocs:
+# configuration: mkdocs.yml
+
+# Optionally build your docs in additional formats such as PDF and ePub
+#formats: []
+
+submodules:
+ exclude: all
+
+python:
+ install:
+ - requirements: documentation/requirements.txt
diff --git a/Makefile b/Makefile
index d058e8fbe..6efaeb7f2 100644
--- a/Makefile
+++ b/Makefile
@@ -4,7 +4,7 @@
# 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.
+# in file LICENSE that is included with this distribution.
#*************************************************************************
TOP = .
@@ -14,8 +14,12 @@ include $(TOP)/configure/CONFIG
TOOLS = $(TOP)/src/tools
DIRS += configure src
-
src_DEPEND_DIRS = configure
-include $(TOP)/configure/RULES_TOP
+DIRS += test
+test_DEPEND_DIRS = src
+DIRS += modules
+modules_DEPEND_DIRS = src
+
+include $(TOP)/configure/RULES_TOP
diff --git a/README b/README
index a4d27876e..b3b8167f5 100644
--- a/README
+++ b/README
@@ -2,14 +2,14 @@
EPICS Base - the central core of a control system toolkit
---------------------------------------------------------
-Copyright (c) 1991-2003 The University of Chicago, as Operator
-of Argonne National Laboratory.
+Copyright UChicago Argonne LLC, as Operator of Argonne
+National Laboratory.
Copyright (c) 1991-2003 The Regents of the University of
California, as Operator of Los Alamos National Laboratory.
-EPICS Base Versions 3.13.7 and higher are distributed
-subject to a Software License Agreement found in the
-file LICENSE that is included with this distribution.
+EPICS Base is distributed subject to a Software License
+Agreement found in the file LICENSE that is included with
+this distribution.
---------------------------------------------------------
@@ -22,3 +22,6 @@ training materials, additional components, links to other
websites etc. is available on the EPICS home page at
https://epics.anl.gov/
+Fri, 21 Feb 2025 17:31:33 -0600
+86154953f57b1796e7cb81bbc807eae120b9e840
+https://code.launchpad.net/epics-base
diff --git a/configure/CONFIG b/configure/CONFIG
index e40d3f5f7..e72537db1 100644
--- a/configure/CONFIG
+++ b/configure/CONFIG
@@ -16,6 +16,10 @@ ifneq ($(wildcard $(TOP)/configure/CONFIG_BASE_VERSION),)
CONFIG = $(TOP)/configure
BASE_TOP=YES
else
+ ifneq ($(origin EPICS_BASE),file)
+ # Essential for the EPICS build system, see convertRelease.pl
+ $(error EPICS_BASE must be set in a configure/RELEASE file)
+ endif
CONFIG ?= $(EPICS_BASE)/configure
endif
@@ -30,6 +34,11 @@ ifeq ($(origin EPICS_HOST_ARCH), undefined)
EHA :=
endif
+# Make Perl hash iteration reproducible.
+# See: https://reproducible-builds.org/docs/stable-outputs/
+#
+export PERL_HASH_SEED = 0
+
-include $(CONFIG)/RELEASE
-include $(CONFIG)/RELEASE.$(EPICS_HOST_ARCH)
-include $(CONFIG)/RELEASE.$(EPICS_HOST_ARCH).Common
@@ -58,10 +67,13 @@ include $(CONFIG)/CONFIG_BASE_VERSION
include $(CONFIG)/os/CONFIG.$(EPICS_HOST_ARCH).Common
-include $(CONFIG)/os/CONFIG_SITE.$(EPICS_HOST_ARCH).Common
+# Parse configure/RELEASE to find all upstream modules
RELEASE_TOPS := $(shell $(CONVERTRELEASE) -T $(TOP) releaseTops)
-
ifdef T_A
+ # Information from the target's compiler
+ #
+ -include $(EPICS_BASE)/cfg/TOOLCHAIN.$(EPICS_HOST_ARCH).$(T_A)
# Cross compile specific definitions
#
diff --git a/configure/CONFIG.gnuCommon b/configure/CONFIG.gnuCommon
index 025391548..a6305990b 100644
--- a/configure/CONFIG.gnuCommon
+++ b/configure/CONFIG.gnuCommon
@@ -3,8 +3,7 @@
# National Laboratory.
# Copyright (c) 2002 The Regents of the University of California, as
# Operator of Los Alamos National Laboratory.
-# EPICS BASE Versions 3.13.7
-# and higher are distributed subject to a Software License Agreement found
+# EPICS Base is distributed subject to a Software License Agreement found
# in file LICENSE that is included with this distribution.
#*************************************************************************
@@ -24,34 +23,45 @@ LD = $(GNU_BIN)/$(CMPLR_PREFIX)ld$(CMPLR_SUFFIX) -r
CPP = $(CC) -x c -E
RANLIB = $(GNU_BIN)/$(CMPLR_PREFIX)ranlib$(CMPLR_SUFFIX)
+# Requires at least GCC 4.8 or LLVM (clang) 3.1
+ASAN_FLAGS_YES = -fsanitize=address
+ASAN_LDFLAGS_YES = $(ASAN_FLAGS_YES)
+
+# It makes sense to include debugging symbols even in optimized builds
+# in case you want to attach gdb to the process or examine a core-dump.
+# This does cost disk space, but not memory as debug symbols are not
+# loaded into RAM when the binary is loaded.
PROF_CFLAGS_YES = -p
GPROF_CFLAGS_YES = -pg
CODE_CFLAGS = $(PROF_CFLAGS_$(PROFILE)) $(GPROF_CFLAGS_$(GPROF))
-WARN_CFLAGS_YES = -Wall
+CODE_CFLAGS += $(ASAN_FLAGS_$(ENABLE_ASAN))
+WARN_CFLAGS_YES = -Wall -Werror-implicit-function-declaration
WARN_CFLAGS_NO = -w
-OPT_CFLAGS_YES = -O3
+OPT_CFLAGS_YES = -O3 -g
OPT_CFLAGS_NO = -g
PROF_CXXFLAGS_YES = -p
GPROF_CXXFLAGS_YES = -pg
CODE_CXXFLAGS = $(PROF_CXXFLAGS_$(PROFILE)) $(GPROF_CXXFLAGS_$(GPROF))
+CODE_CXXFLAGS += $(ASAN_FLAGS_$(ENABLE_ASAN))
WARN_CXXFLAGS_YES = -Wall
WARN_CXXFLAGS_NO = -w
-OPT_CXXFLAGS_YES = -O3
+OPT_CXXFLAGS_YES = -O3 -g
OPT_CXXFLAGS_NO = -g
CODE_LDFLAGS = $(PROF_CXXFLAGS_$(PROFILE)) $(GPROF_CXXFLAGS_$(GPROF))
+CODE_LDFLAGS += $(ASAN_LDFLAGS_$(ENABLE_ASAN))
+OPT_LDFLAGS_NO = -g
PIPE_CFLAGS_YES_YES = -pipe
PIPE_CFLAGS = $(PIPE_CFLAGS_$(GCC_PIPE)_$(GNU))
-PIPE_CXXFLAGS = $(PIPE_CFLAGS)
STATIC_LDFLAGS_YES = -static
STATIC_LDFLAGS_NO =
SHRLIB_CFLAGS = -fPIC
-SHRLIB_LDFLAGS = -shared -fPIC
-LOADABLE_SHRLIB_LDFLAGS = -shared -fPIC
+SHRLIB_LDFLAGS = -shared -fPIC -Wl,-h$@
+LOADABLE_SHRLIB_LDFLAGS = -shared -fPIC -Wl,-h$@
GNU_LDLIBS_YES = -lgcc
diff --git a/configure/CONFIG_ADDONS b/configure/CONFIG_ADDONS
index 29a33c415..d32d91165 100644
--- a/configure/CONFIG_ADDONS
+++ b/configure/CONFIG_ADDONS
@@ -4,7 +4,7 @@
# 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.
+# in file LICENSE that is included with this distribution.
#*************************************************************************
#
# check for add-on CFLAGS and CXXFLAGS
@@ -37,9 +37,6 @@
# PROD_LIBS libs needed by PROD and TESTPROD
# LIB_LIBS libs needed by shared LIBRARY
# SHRLIB_LIBS libs needed by shared LIBRARY
-# USR_OBJLIBS R3.13 vxWorks object libs needed building libraries and prods
-# PROD_OBJLIBS R3.13 vxWorks object libs needed for building prods
-# LIB_OBJLIBS R3.13 vxWorks object libs needed for building libraries
# USR_SYS_LIBS system libs needed building libraries and prods
# PROD_SYS_LIBS system libs needed for building prods
# LIB_SYS_LIBS system libs needed for building libraries
@@ -273,30 +270,6 @@ OBJS_HOST+=$(OBJS_HOST_DEFAULT)
endif
endif
-ifneq ($(strip $(PROD_OBJLIBS_$(OS_CLASS))),)
-PROD_OBJLIBS+=$(subst -nil-,,$(PROD_OBJLIBS_$(OS_CLASS)))
-else
-ifdef PROD_OBJLIBS_DEFAULT
-PROD_OBJLIBS+=$(PROD_OBJLIBS_DEFAULT)
-endif
-endif
-
-ifneq ($(strip $(LIB_OBJLIBS_$(OS_CLASS))),)
-LIB_OBJLIBS+=$(subst -nil-,,$(LIB_OBJLIBS_$(OS_CLASS)))
-else
-ifdef LIB_OBJLIBS_DEFAULT
-LIB_OBJLIBS+=$(LIB_OBJLIBS_DEFAULT)
-endif
-endif
-
-ifneq ($(strip $(USR_OBJLIBS_$(OS_CLASS))),)
-USR_OBJLIBS+=$(subst -nil-,,$(USR_OBJLIBS_$(OS_CLASS)))
-else
-ifdef USR_OBJLIBS_DEFAULT
-USR_OBJLIBS+=$(USR_OBJLIBS_DEFAULT)
-endif
-endif
-
ifneq ($(strip $(LIB_OBJS_$(OS_CLASS))),)
LIB_OBJS+=$(subst -nil-,,$(LIB_OBJS_$(OS_CLASS)))
else
@@ -581,4 +554,3 @@ ifdef LIB_RCS_DEFAULT
LIB_RCS+=$(LIB_RCS_DEFAULT)
endif
endif
-
diff --git a/configure/CONFIG_BASE b/configure/CONFIG_BASE
index 54747d8e3..a737b37fc 100644
--- a/configure/CONFIG_BASE
+++ b/configure/CONFIG_BASE
@@ -3,13 +3,12 @@
# National Laboratory.
# Copyright (c) 2002 The Regents of the University of California, as
# Operator of Los Alamos National Laboratory.
-# EPICS BASE Versions 3.13.7
-# and higher are distributed subject to a Software License Agreement found
-# in file LICENSE that is included with this distribution.
+# EPICS BASE is distributed subject to a Software License Agreement found
+# in file LICENSE that is included with this distribution.
#*************************************************************************
#---------------------------------------------------------------
-# Epics base directories
+# EPICS Base directories
EPICS_BASE_HOST_BIN = $(EPICS_BASE)/bin/$(EPICS_HOST_ARCH)
EPICS_BASE_HOST_LIB = $(EPICS_BASE)/lib/$(EPICS_HOST_ARCH)
@@ -18,17 +17,6 @@ ifdef T_A
EPICS_BASE_BIN = $(EPICS_BASE)/bin/$(T_A)
endif
-#---------------------------------------------------------------
-# Epics base Ioc libraries
-
-EPICS_BASE_IOC_LIBS += dbRecStd dbCore ca Com
-
-#---------------------------------------------------------------
-# Epics base Host libraries
-
-EPICS_BASE_HOST_LIBS += cas gdd
-EPICS_BASE_HOST_LIBS += ca Com
-
#---------------------------------------------------------------
# Version number for base shared libraries (and win32 products)
@@ -39,88 +27,81 @@ ifdef BASE_TOP
PROD_VERSION = $(EPICS_VERSION).$(EPICS_REVISION)
endif # BASE_TOP
-#---------------------------------------------------------------
-# Base c preprocessor flags
-
-BASE_CPPFLAGS =
-
-# osithread default stack
-OSITHREAD_USE_DEFAULT_STACK = NO
-OSITHREAD_DEFAULT_STACK_FLAGS_YES = -DOSITHREAD_USE_DEFAULT_STACK
-OSITHREAD_DEFAULT_STACK_FLAGS_NO =
-BASE_CPPFLAGS += $(OSITHREAD_DEFAULT_STACK_FLAGS_$(OSITHREAD_USE_DEFAULT_STACK))
-
#---------------------------------------------------------------
# Where to find the installed build tools
# Windows does not like commands with relative paths starting ../
-# but the Perl scripts in TOP/src/tools are OK
+# so TOOLS must be an absolute path, although Perl scripts are OK.
+# FIND_TOOL is for scripts run before the build reaches src/tools
+# and must also work in submodules when EPICS_BASE is not built.
TOOLS = $(abspath $(EPICS_BASE_HOST_BIN))
-FIND_TOOL = $(firstword $(wildcard $(TOOLS)/$(1) $(TOP)/src/tools/$(1)))
+FIND_TOOL = $(firstword $(wildcard $(TOOLS)/$(1) \
+ $(TOP)/src/tools/$(1)) $(EPICS_BASE)/src/tools/$(1))
#---------------------------------------------------------------
-# Epics base build tools and tool flags
+# Find Perl modules for dependencies
+FIND_PM = $(wildcard $(EPICS_BASE)/lib/perl/$(1))
-MAKEBPT = $(TOOLS)/makeBpt$(HOSTEXE)
-DBEXPAND = $(PERL) $(TOOLS)/dbdExpand.pl
-DBTORECORDTYPEH = $(PERL) $(TOOLS)/dbdToRecordtypeH.pl
-DBTOMENUH = $(PERL) $(TOOLS)/dbdToMenuH.pl
-REGISTERRECORDDEVICEDRIVER = $(PERL) $(TOOLS)/registerRecordDeviceDriver.pl
-CONVERTRELEASE = $(PERL) $(call FIND_TOOL,convertRelease.pl)
-FULLPATHNAME = $(PERL) $(TOOLS)/fullPathName.pl
+#---------------------------------------------------------------
+# EPICS Base build tools and tool flags
-#-------------------------------------------------------
+PODTOMD_pl = $(TOOLS)/podToMD.pl
+PODTOMD = $(PERL) $(PODTOMD_pl)
+PODTOHTML_pl = $(TOOLS)/podToHtml.pl
+PODTOHTML_dep = $(PODTOHTML_pl) $(call FIND_PM,EPICS/PodHtml.pm)
+PODTOHTML = $(PERL) $(PODTOHTML_pl)
+CONVERTRELEASE = $(PERL) $(call FIND_TOOL,convertRelease.pl)
+FILTERMAKEFLAGS = $(PERL) $(call FIND_TOOL,filterMakeflags.pl)
+FULLPATHNAME = $(PERL) $(TOOLS)/fullPathName.pl
+GENVERSIONHEADER = $(PERL) $(TOOLS)/genVersionHeader.pl $(QUIET_FLAG) $(QUESTION_FLAG)
+
+MAKERPATH = $(PYTHON) $(TOOLS)/makeRPath.py
+
+#---------------------------------------------------------------
# tools for installing libraries and products
-INSTALL_QUIETLY := $(if $(findstring s,$(MFLAGS)),-q,)
-INSTALL = $(PERL) $(TOOLS)/installEpics.pl $(INSTALL_QUIETLY)
+INSTALL = $(PERL) $(TOOLS)/installEpics.pl $(QUIET_FLAG)
INSTALL_PRODUCT = $(INSTALL)
INSTALL_LIBRARY = $(INSTALL)
#---------------------------------------------------------------
-# tools for making header dependancies and variable replacement
-MKMF = $(PERL) $(TOOLS)/mkmf.pl
-REPLACEVAR = $(PERL) $(TOOLS)/replaceVAR.pl
+# tools for making header dependencies and variable replacement
+MKMF = $(PERL) $(TOOLS)/mkmf.pl
+REPLACEVAR = $(PERL) $(TOOLS)/replaceVAR.pl
#---------------------------------------------------------------
-# Tools for testing
-TAPTOJUNIT = $(PERL) $(TOOLS)/tap-to-junit-xml.pl
-PROVE = $(PERL) $(TOOLS)/epicsProve.pl
-PROVE.tap = $(PROVE) --ext .tap --exec "$(CAT)"
-
-TEST_FAILURE_FILE = $(TOP)/.tests-failed
-PROVE_FAILURE = echo $(abspath .)>> $(TEST_FAILURE_FILE)
+# How to portably check the flags to make
+# GNUmake versions before 4.0 gave different values
+makeflags := $(shell $(FILTERMAKEFLAGS) $(MAKEFLAGS))
+define checkflags
+ make-$1 := $(findstring $1,$(makeflags))
+endef
+# This is extensible to most single letter flags:
+$(foreach flag,s q, $(eval $(call checkflags,$(flag))))
+
+# Silent builds - suppress messages during 'make -s'
+NOP = :
+ECHO = @$(if $(make-s),$(NOP),echo)
+QUIET_FLAG := $(if $(make-s),-q,)
+
+# Convert 'make -q' flag into '-i' for genVersionHeader.pl
+QUESTION_FLAG := $(if $(make-q),-i,)
#---------------------------------------------------------------
-# private versions of lex/yacc from EPICS
-EYACC = $(TOOLS)/antelope$(HOSTEXE)
-ELEX = $(TOOLS)/e_flex$(HOSTEXE) -S$(EPICS_BASE)/include/flex.skel.static
-
-YACC = $(EYACC)
-LEX = $(ELEX)
+# tools for cleaning out unwanted files
+CVSCLEAN = $(call FIND_TOOL,cvsclean.pl)
+DEPCLEAN = $(call FIND_TOOL,depclean.pl)
#---------------------------------------------------------------
-# Our use of msi is incompatible with older versions
-
-MSI3_15 = $(EPICS_BASE_HOST_BIN)/msi
-
-#---------------------------------------------------------------
-# External tools and tool flags - must be in path or defined in application
-
-ADL2DL ?= adl2dl
-
-# sch2edif compiler and flags
-SCH2EDIF = sch2edif
-SCH2EDIF_PATH =
-SCH2EDIF_SYSFLAGS = -n -ap -p.+..+$(SCH2EDIF_PATH)+$(CAPFAST_TEMPLATES)/sym+
-SCH2EDIF_FLAGS =
-
-# e2db and flags
-# - again there is an assumption where edb.def is installed.
-E2DB ?= e2db
-E2DB_SYSFLAGS = -ate -d $(CAPFAST_TEMPLATES)/edb.def
-E2DB_FLAGS =
-
-DBST ?= dbst
-
-
-
+# Tools for testing
+TAPS_FAILED_LOG = .taps-failed.log
+TESTS_FAILED_LOG = .tests-failed.log
+TESTS_FAILED_PATH = $(abspath $(TOP)/$(TESTS_FAILED_LOG))
+
+TAPTOJUNIT = $(PERL) $(TOOLS)/tap-to-junit-xml.pl
+PROVE = $(PERL) $(TOOLS)/epicsProve.pl --failures --color
+PROVE.tap = $(PROVE) --ext .tap --exec "$(CAT)"
+TESTFAILURES = $(PERL) $(TOOLS)/testFailures.pl
+SHOWTESTFAILURES = $(TESTFAILURES) $(TESTS_FAILED_PATH) $(TAPS_FAILED_LOG)
+
+PROVE_FAILURE = echo $(abspath .)>> $(TESTS_FAILED_PATH)
+TAPFILE_FAILURE = echo $@>> $(TAPS_FAILED_LOG)
diff --git a/configure/CONFIG_BASE_VERSION b/configure/CONFIG_BASE_VERSION
index eaeb0f2de..86319c032 100644
--- a/configure/CONFIG_BASE_VERSION
+++ b/configure/CONFIG_BASE_VERSION
@@ -15,30 +15,47 @@
# EPICS_SITE_VERSION is defined in CONFIG_SITE for sites that want a local
# version number to be included in the reported version string.
-# In 3.15 we still define BASE_3_14 so "ifdef BASE_3_14" means
-# 3.14 or later, but "ifeq ($(BASE_3_14),YES)" means 3.14 only.
+# We define convenience macros for our release series to be NO or YES, so
+# Makefiles can detect 'Series X or later', or 'Series X only' like this:
+#
+# ifdef BASE_3_14
+# true for 3.14 or later
+# ifdef BASE_3_15
+# true for 3.15 or later
+# ifdef BASE_3_16
+# true for 3.16 or later
+# ifdef BASE_7_0
+# true for 7.0 or later
+#
+# ifeq ($(BASE_3_14),YES)
+# true for 3.14.x only
+# ifeq ($(BASE_3_15),YES)
+# true for 3.15.x only
+# ifeq ($(BASE_3_16),YES)
+# true for 3.16.x only.
+# ifeq ($(BASE_7_0),YES)
+# true for 7.0.x only.
+
BASE_3_14 = NO
-BASE_3_15 = YES
+BASE_3_15 = NO
+BASE_3_16 = NO
+BASE_7_0 = YES
# EPICS_VERSION must be a number >0 and <256
-EPICS_VERSION = 3
+EPICS_VERSION = 7
# EPICS_REVISION must be a number >=0 and <256
-EPICS_REVISION = 15
+EPICS_REVISION = 0
# EPICS_MODIFICATION must be a number >=0 and <256
-EPICS_MODIFICATION = 8
+EPICS_MODIFICATION = 9
# EPICS_PATCH_LEVEL must be a number (win32 resource file requirement)
-# Not included if zero
+# Not included in the official EPICS version number if zero
EPICS_PATCH_LEVEL = 0
-# This will end in -DEV between official releases
-#EPICS_DEV_SNAPSHOT=-DEV
-#EPICS_DEV_SNAPSHOT=-pre1
-#EPICS_DEV_SNAPSHOT=-pre1-DEV
-#EPICS_DEV_SNAPSHOT=-rc1
-#EPICS_DEV_SNAPSHOT=-rc1-DEV
+# Immediately after an official release the EPICS_PATCH_LEVEL is incremented
+# and the -DEV suffix is added (similar to the Maven -SNAPSHOT versions)
EPICS_DEV_SNAPSHOT=
# No changes should be needed below here
diff --git a/configure/CONFIG_CA_MODULE b/configure/CONFIG_CA_MODULE
new file mode 100644
index 000000000..70ffac19b
--- /dev/null
+++ b/configure/CONFIG_CA_MODULE
@@ -0,0 +1,9 @@
+#*************************************************************************
+# Copyright (c) 2017 UChicago Argonne LLC, as Operator of Argonne
+# National Laboratory.
+# EPICS BASE is distributed subject to a Software License Agreement found
+# in file LICENSE that is included with this distribution.
+#*************************************************************************
+
+# Libraries needed to link a host tool
+EPICS_BASE_HOST_LIBS = ca Com
diff --git a/configure/CONFIG_CA_VERSION b/configure/CONFIG_CA_VERSION
new file mode 100644
index 000000000..905f0d590
--- /dev/null
+++ b/configure/CONFIG_CA_VERSION
@@ -0,0 +1,12 @@
+# Version number for the Channel Access API and shared library
+
+EPICS_CA_MAJOR_VERSION = 4
+EPICS_CA_MINOR_VERSION = 14
+EPICS_CA_MAINTENANCE_VERSION = 5
+
+# Development flag, set to zero for release versions
+
+EPICS_CA_DEVELOPMENT_FLAG = 0
+
+# Immediately after a release the MAINTENANCE_VERSION
+# will be incremented and the DEVELOPMENT_FLAG set to 1
diff --git a/configure/CONFIG_COMMON b/configure/CONFIG_COMMON
index 43f4866d7..9165ae294 100644
--- a/configure/CONFIG_COMMON
+++ b/configure/CONFIG_COMMON
@@ -4,7 +4,7 @@
# 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.
+# in file LICENSE that is included with this distribution.
#*************************************************************************
#
# CONFIG_COMMON
@@ -38,9 +38,7 @@ BUILD_ARCHS = $(EPICS_HOST_ARCH) $(CROSS1) $(CROSS2)
# otherwise override this in os/CONFIG_SITE..Common
PERL = perl -CSD
-#-------------------------------------------------------
-# dbst based database optimization default
-DB_OPT = NO
+PYTHON = python
#-------------------------------------------------------
# Check configure/RELEASE file for consistency
@@ -58,6 +56,7 @@ GNU_DIR = /usr
# Directories
INSTALL_LOCATION = $(TOP)
+INSTALL_ABSOLUTE = $(abspath $(INSTALL_LOCATION))
INSTALL_LOCATION_LIB = $(INSTALL_LOCATION)/lib
INSTALL_LOCATION_BIN = $(INSTALL_LOCATION)/bin
@@ -73,16 +72,14 @@ INSTALL_DBD = $(INSTALL_LOCATION)/dbd
INSTALL_DB = $(INSTALL_LOCATION)/db
INSTALL_CONFIG = $(INSTALL_LOCATION)/configure
-# Directory for OS independant build created files
-COMMON_DIR = ../O.Common
+#-------------------------------------------------------
+# These are default settings that may be overridden later
-# IOC's absolute path to $(TOP), may be overridden inside the application
-IOCS_APPL_TOP = $(shell $(FULLPATHNAME) $(INSTALL_LOCATION))
+# Eventual install path (to be compiled into binaries)
+FINAL_LOCATION = $(INSTALL_ABSOLUTE)
-#-------------------------------------------------------
-# Make echo output - suppress echoing if make's '-s' flag is set
-NOP = :
-ECHO = @$(if $(findstring s,$(MFLAGS)),$(NOP),echo)
+# IOC's view of install path
+IOCS_APPL_TOP = $(INSTALL_ABSOLUTE)
#-------------------------------------------------------
ifdef T_A
@@ -92,7 +89,7 @@ INSTALL_SHRLIB = $(INSTALL_LOCATION_LIB)/$(T_A)
INSTALL_TCLLIB = $(INSTALL_LOCATION_LIB)/$(T_A)
INSTALL_BIN = $(INSTALL_LOCATION_BIN)/$(T_A)
-#Directories for libraries
+# Directories for libraries
SHRLIB_SEARCH_DIRS = $(INSTALL_LIB)
#-------------------------------------------------------
@@ -128,6 +125,8 @@ LIB_SUFFIX =
SHRLIB_PREFIX = $(LIB_PREFIX)
DLLSTUB_PREFIX = $(LIB_PREFIX)
DLLSTUB_SUFFIX = $(LIB_SUFFIX)
+LOADABLE_SHRLIB_PREFIX = $(SHRLIB_PREFIX)
+LOADABLE_SHRLIB_SUFFIX = $(SHRLIB_SUFFIX)
BUILDLIB_PREFIX_YES = $(DLLSTUB_PREFIX)
BUILDLIB_PREFIX_NO = $(LIB_PREFIX)
@@ -139,20 +138,23 @@ BUILDLIB_SUFFIX = $(BUILDLIB_SUFFIX_$(SHARED_LIBRARIES))
#--------------------------------------------------
# vpath directories
POSIX_YES = os/posix
+OS_IMPL_DIRS = $(if $(OS_API),os/$(OS_CLASS)-$(OS_API),) os/$(OS_CLASS)
GENERIC_SRC_DIRS = .. $(SRC_DIRS)
OS_SRC_DIRS += . $(foreach dir, .. $(SRC_DIRS), \
- $(addprefix $(dir)/, os/$(OS_CLASS) $(POSIX_$(POSIX)) os/default ))
+ $(addprefix $(dir)/, $(OS_IMPL_DIRS) $(POSIX_$(POSIX)) os/default ))
CMPLR_SRC_DIRS += . $(foreach dir, .. $(SRC_DIRS), \
$(addprefix $(dir)/, compiler/$(CMPLR_CLASS) compiler/default ))
ALL_SRC_DIRS = $(CMPLR_SRC_DIRS) $(OS_SRC_DIRS) $(GENERIC_SRC_DIRS)
#--------------------------------------------------
+# Directory for OS independant build created files
+COMMON_DIR = ../O.Common
+
# compile line include directories
-INSTALL_INCLUDES += \
- -I$(INSTALL_INCLUDE)/compiler/$(CMPLR_CLASS) \
- -I$(INSTALL_INCLUDE)/os/$(OS_CLASS) \
- -I$(INSTALL_INCLUDE)
-SRC_INCLUDES = -I$(COMMON_DIR) $(addprefix -I, $(wildcard $(ALL_SRC_DIRS)))
+INSTALL_INCLUDE_DIRS = $(INSTALL_INCLUDE)/compiler/$(CMPLR_CLASS) \
+ $(INSTALL_INCLUDE)/os/$(OS_CLASS) $(INSTALL_INCLUDE)
+INSTALL_INCLUDES += $(addprefix -I, $(INSTALL_INCLUDE_DIRS))
+SRC_INCLUDES = $(addprefix -I, $(COMMON_DIR) $(wildcard $(ALL_SRC_DIRS)))
#--------------------------------------------------
# Target filename definitions
@@ -166,23 +168,27 @@ TESTSHRLIBNAME = $(TESTSHRLIBNAME_$(SHARED_LIBRARIES))
#--------------------------------------------------
# obj files
-TARGET_OBJS = $($*_OBJLIBS) $($*_LDOBJS) $(addsuffix $(OBJ),$(basename $($*_OBJS) $($*_SRCS)))
+TARGET_OBJS = $($*_LDOBJS) $(addsuffix $(OBJ), \
+ $(basename $($*_OBJS) $($*_SRCS)))
-PRODUCT_OBJS = $(addsuffix $(OBJ),$(basename $(SRCS) $(USR_SRCS) $(PROD_SRCS) $(USR_OBJS) $(PROD_OBJS)))
-PROD_LD_OBJS = $(USR_OBJLIBS) $(PROD_OBJLIBS) $(TARGET_OBJS) $(PRODUCT_OBJS)
+PRODUCT_OBJS = $(addsuffix $(OBJ), \
+ $(basename $(SRCS) $(USR_SRCS) $(PROD_SRCS) $(USR_OBJS) $(PROD_OBJS)))
+PROD_LD_OBJS = $(TARGET_OBJS) $(PRODUCT_OBJS)
-LIBRARY_OBJS = $(addsuffix $(OBJ),$(basename $(SRCS) $(USR_SRCS) $(LIB_SRCS) $(LIBSRCS) $(USR_OBJS) $(LIB_OBJS)))
-LIBRARY_LD_OBJS = $(USR_OBJLIBS) $(LIB_OBJLIBS) $(TARGET_OBJS) $(LIBRARY_OBJS)
+LIBRARY_OBJS = $(addsuffix $(OBJ), \
+ $(basename $(SRCS) $(USR_SRCS) $(LIB_SRCS) $(LIBSRCS) $(USR_OBJS) $(LIB_OBJS)))
+LIBRARY_LD_OBJS = $(TARGET_OBJS) $(LIBRARY_OBJS)
#--------------------------------------------------
# Windows resource files
-TARGET_RESS = $(if $(RES),$(addsuffix $(RES),$(basename $($*_RCS))),)
+TARGET_RESS = $(if $(RES), $(addsuffix $(RES), $(basename $($*_RCS))))
-PROD_RESS = $(if $(RES),$(addsuffix $(RES),$(basename $(RCS) $(PROD_RCS))),)
+PROD_RESS = $(if $(RES), $(addsuffix $(RES), $(basename $(RCS) $(PROD_RCS))))
PROD_LD_RESS = $(TARGET_RESS) $(PROD_RESS)
-LIBRARY_RESS = $(if $(RES),$(addsuffix $(RES),$(basename $(RCS) $(LIB_RCS) $(LIBRARY_RCS))),)
+LIBRARY_RESS = $(if $(RES), $(addsuffix $(RES), \
+ $(basename $(RCS) $(LIB_RCS) $(LIBRARY_RCS))))
LIBRARY_LD_RESS = $(TARGET_RESS) $(LIBRARY_RESS)
#--------------------------------------------------
@@ -251,27 +257,28 @@ WARN_CXXFLAGS = $(WARN_CXXFLAGS_$($(BUILD_CLASS)_WARN))
OPT_CPPFLAGS = $(OPT_CPPFLAGS_$($(BUILD_CLASS)_OPT))
OPT_CFLAGS = $(OPT_CFLAGS_$($(BUILD_CLASS)_OPT))
OPT_CXXFLAGS = $(OPT_CXXFLAGS_$($(BUILD_CLASS)_OPT))
+OPT_LDFLAGS = $(OPT_LDFLAGS_$($(BUILD_CLASS)_OPT))
# Static build flags
STATIC_CFLAGS = $(STATIC_CFLAGS_$(STATIC_BUILD))
-STATIC_CXXCFLAGS = $(STATIC_CXXFLAGS_$(STATIC_BUILD))
+STATIC_CXXFLAGS = $(STATIC_CXXFLAGS_$(STATIC_BUILD))
STATIC_LDFLAGS = $(STATIC_LDFLAGS_$(STATIC_BUILD))
STATIC_LDLIBS = $(STATIC_LDLIBS_$(STATIC_BUILD))
#--------------------------------------------------
-# cflags for shared library src files (from SHRLIB_CFLAGS)
-LIBRARY_SRCS=$(basename $(foreach lib,$(LIBRARY) $(TESTLIBRARY) $(LOADABLE_LIBRARY),$($(lib)_OBJSNAME) $(LIBRARY_OBJS)))
-LIBRARY_SRC_CFLAGS=$($(patsubst $*,SHRLIB,$(findstring $*,$(LIBRARY_SRCS)))_CFLAGS)
+# cflags for shared library src files
+LIBRARY_SRCS = $(basename $(foreach lib, \
+ $(LIBRARY) $(TESTLIBRARY) $(LOADABLE_LIBRARY), \
+ $($(lib)_OBJSNAME) $(LIBRARY_OBJS)))
+LIBRARY_SRC_CFLAGS = $(if $(findstring $*, $(LIBRARY_SRCS)), $(SHRLIB_CFLAGS))
#--------------------------------------------------
-# prefix, suffix, and ldflags for loadable shared libraries
-TARGET_LIB_LDFLAGS=$($(patsubst $*,LOADABLE_,$(findstring $*,$(LOADABLE_LIBRARY)))SHRLIB_LDFLAGS)
-LOADABLE_SHRLIB_PREFIX=$(SHRLIB_PREFIX)
-LOADABLE_SHRLIB_SUFFIX=$(SHRLIB_SUFFIX)
+# ldflags for loadable and shared libraries
+TARGET_LIB_LDFLAGS = $(if $(findstring $*, $(LOADABLE_LIBRARY)), \
+ $(LOADABLE_SHRLIB_LDFLAGS), $(SHRLIB_LDFLAGS))
#--------------------------------------------------
# Command-line input support default
-COMMANDLINE_LIBRARY = EPICS
OP_SYS_LDLIBS += $(LDLIBS_$(COMMANDLINE_LIBRARY))
OP_SYS_LDFLAGS += $(LDFLAGS_$(COMMANDLINE_LIBRARY))
RUNTIME_LDFLAGS += $(RUNTIME_LDFLAGS_$(COMMANDLINE_LIBRARY))
@@ -279,31 +286,31 @@ RUNTIME_LDFLAGS += $(RUNTIME_LDFLAGS_$(COMMANDLINE_LIBRARY))
#--------------------------------------------------
# Flags
-INCLUDES = -I. $(SRC_INCLUDES) $(INSTALL_INCLUDES) $(RELEASE_INCLUDES)\
- $(TARGET_INCLUDES) $(USR_INCLUDES) $(CMD_INCLUDES) $(OP_SYS_INCLUDES)\
- $($(BUILD_CLASS)_INCLUDES)
+INCLUDES = -I. $(SRC_INCLUDES) $(INSTALL_INCLUDES) $(RELEASE_INCLUDES) \
+ $(TARGET_INCLUDES) $(USR_INCLUDES) $(CMD_INCLUDES) $(OP_SYS_INCLUDES) \
+ $($(BUILD_CLASS)_INCLUDES)
-CFLAGS = $($(BUILD_CLASS)_CFLAGS) $(POSIX_CFLAGS) $(OPT_CFLAGS)\
- $(DEBUG_CFLAGS) $(PIPE_CFLAGS) $(WARN_CFLAGS) $(TARGET_CFLAGS)\
- $(USR_CFLAGS) $(CMD_CFLAGS) $(ARCH_DEP_CFLAGS) $(CODE_CFLAGS)\
- $(STATIC_CFLAGS) $(OP_SYS_CFLAGS) $(LIBRARY_SRC_CFLAGS)
+CFLAGS = $($(BUILD_CLASS)_CFLAGS) $(POSIX_CFLAGS) $(OPT_CFLAGS) \
+ $(DEBUG_CFLAGS) $(PIPE_CFLAGS) $(WARN_CFLAGS) $(TARGET_CFLAGS) \
+ $(USR_CFLAGS) $(CMD_CFLAGS) $(ARCH_DEP_CFLAGS) $(CODE_CFLAGS) \
+ $(STATIC_CFLAGS) $(OP_SYS_CFLAGS) $(LIBRARY_SRC_CFLAGS)
-CXXFLAGS = $($(BUILD_CLASS)_CXXFLAGS) $(POSIX_CXXFLAGS) $(OPT_CXXFLAGS)\
- $(DEBUG_CXXFLAGS) $(PIPE_CFLAGS) $(WARN_CXXFLAGS) $(TARGET_CXXFLAGS)\
- $(USR_CXXFLAGS) $(CMD_CXXFLAGS) $(ARCH_DEP_CXXFLAGS) $(CODE_CXXFLAGS)\
- $(STATIC_CXXCFLAGS) $(OP_SYS_CXXFLAGS) $(LIBRARY_SRC_CFLAGS)
+CXXFLAGS = $($(BUILD_CLASS)_CXXFLAGS) $(POSIX_CXXFLAGS) $(OPT_CXXFLAGS) \
+ $(DEBUG_CXXFLAGS) $(PIPE_CFLAGS) $(WARN_CXXFLAGS) $(TARGET_CXXFLAGS) \
+ $(USR_CXXFLAGS) $(CMD_CXXFLAGS) $(ARCH_DEP_CXXFLAGS) $(CODE_CXXFLAGS) \
+ $(STATIC_CXXFLAGS) $(OP_SYS_CXXFLAGS) $(LIBRARY_SRC_CFLAGS)
-LDFLAGS = $(OPT_LDFLAGS) $(TARGET_LDFLAGS) $(USR_LDFLAGS) $(CMD_LDFLAGS)\
- $(POSIX_LDFLAGS) $(ARCH_DEP_LDFLAGS) $(DEBUG_LDFLAGS) $(OP_SYS_LDFLAGS)\
- $($(BUILD_CLASS)_LDFLAGS) $(RUNTIME_LDFLAGS) $(CODE_LDFLAGS)
+LDFLAGS = $(OPT_LDFLAGS) $(TARGET_LDFLAGS) $(USR_LDFLAGS) $(CMD_LDFLAGS) \
+ $(POSIX_LDFLAGS) $(ARCH_DEP_LDFLAGS) $(DEBUG_LDFLAGS) $(OP_SYS_LDFLAGS) \
+ $($(BUILD_CLASS)_LDFLAGS) $(RUNTIME_LDFLAGS) $(CODE_LDFLAGS)
-LDLIBS = $(POSIX_LDLIBS) $(ARCH_DEP_LDLIBS) $(DEBUG_LDLIBS) $(OP_SYS_LDLIBS)\
- $(GNU_LDLIBS_$(GNU))
+LDLIBS = $(POSIX_LDLIBS) $(ARCH_DEP_LDLIBS) $(DEBUG_LDLIBS) $(OP_SYS_LDLIBS) \
+ $(GNU_LDLIBS_$(GNU))
-CPPFLAGS = $($(BUILD_CLASS)_CPPFLAGS) $(POSIX_CPPFLAGS) $(OPT_CPPFLAGS)\
- $(DEBUG_CPPFLAGS) $(WARN_CPPFLAGS) $(BASE_CPPFLAGS) $(TARGET_CPPFLAGS)\
- $(USR_CPPFLAGS) $(CMD_CPPFLAGS) $(ARCH_DEP_CPPFLAGS) $(OP_SYS_CPPFLAGS)\
- $(OP_SYS_INCLUDE_CPPFLAGS) $(CODE_CPPFLAGS)
+CPPFLAGS = $($(BUILD_CLASS)_CPPFLAGS) $(POSIX_CPPFLAGS) $(OPT_CPPFLAGS) \
+ $(DEBUG_CPPFLAGS) $(WARN_CPPFLAGS) $(BASE_CPPFLAGS) $(TARGET_CPPFLAGS) \
+ $(USR_CPPFLAGS) $(CMD_CPPFLAGS) $(ARCH_DEP_CPPFLAGS) $(OP_SYS_CPPFLAGS) \
+ $(OP_SYS_INCLUDE_CPPFLAGS) $(CODE_CPPFLAGS) $(API_CPPFLAGS)
#--------------------------------------------------
# ar definition default
@@ -332,6 +339,14 @@ COMPILE.cpp = $(CCC) $(CPPFLAGS) $(CXXFLAGS) $(INCLUDES)
# C preprocessor command
PREPROCESS.cpp = $(CPP) $(CPPFLAGS) $(INCLUDES) $< > $@
+#--------------------------------------------------
+# genVersion header defaults
+
+# C macro name
+GENVERSIONMACRO = VCSVERSION
+# C macro default value (empty to use date+time)
+GENVERSIONDEFAULT =
+
#--------------------------------------------------
# Header dependency file generation
@@ -367,14 +382,14 @@ PATH_FILTER = $(1)$(warning PATH_FILTER is deprecated; used for $(1))
# each list starts with the destination directory name(s)
# to make sure it's there
-INSTALL_PROD= $(PRODNAME:%= $(INSTALL_BIN)/%)
-INSTALL_LIBS= $(LIBNAME:%=$(INSTALL_LIB)/%)
-INSTALL_MUNCHS= $(MUNCHNAME:%=$(INSTALL_BIN)/%)
-INSTALL_SHRLIBS= $(SHRLIBNAME:%=$(INSTALL_SHRLIB)/%)
-INSTALL_LOADABLE_SHRLIBS= $(LOADABLE_SHRLIBNAME:%=$(INSTALL_SHRLIB)/%)
-INSTALL_DLLSTUB_LIBS=$(DLLSTUB_LIBNAME:%=$(INSTALL_LIB)/%)
-INSTALL_TCLLIBS=$(TCLLIBNAME:%=$(INSTALL_TCLLIB)/%)
-INSTALL_TCLINDEX=$(TCLINDEX:%=$(INSTALL_TCLLIB)/%)
+INSTALL_PROD = $(PRODNAME:%= $(INSTALL_BIN)/%)
+INSTALL_LIBS = $(LIBNAME:%=$(INSTALL_LIB)/%)
+INSTALL_MUNCHS = $(MUNCHNAME:%=$(INSTALL_BIN)/%)
+INSTALL_SHRLIBS = $(SHRLIBNAME:%=$(INSTALL_SHRLIB)/%)
+INSTALL_LOADABLE_SHRLIBS = $(LOADABLE_SHRLIBNAME:%=$(INSTALL_SHRLIB)/%)
+INSTALL_DLLSTUB_LIBS = $(DLLSTUB_LIBNAME:%=$(INSTALL_LIB)/%)
+INSTALL_TCLLIBS = $(TCLLIBNAME:%=$(INSTALL_TCLLIB)/%)
+INSTALL_TCLINDEX = $(TCLINDEX:%=$(INSTALL_TCLLIB)/%)
INSTALL_SCRIPTS = $(SCRIPTS:%= $(INSTALL_BIN)/%)
INSTALL_OBJS = $(OBJSNAME:%= $(INSTALL_BIN)/%)
@@ -382,7 +397,7 @@ INSTALL_DOCS = $(DOCS:%= $(INSTALL_DOC)/%)
INSTALL_HTMLS = $(HTMLS:%= $(INSTALL_HTML)/$(HTMLS_DIR)/%)
INSTALL_TEMPLATE = $(addprefix $(INSTALL_TEMPLATES_SUBDIR)/, \
- $(subst $(CONFIG),top/configure,$(TEMPLATES)))
+ $(subst $(CONFIG),top/configure,$(TEMPLATES)))
INSTALL_CONFIGS = $(CONFIGS:%= $(INSTALL_CONFIG)/%)
INSTALL_BIN_INSTALLS = $(addprefix $(INSTALL_BIN)/,$(notdir $(BIN_INSTALLS)))
@@ -390,9 +405,9 @@ INSTALL_LIB_INSTALLS = $(addprefix $(INSTALL_LIB)/,$(notdir $(LIB_INSTALLS)))
#---------------------------------------------------------------
# Installed file permissions
-BIN_PERMISSIONS = 555
-LIB_PERMISSIONS = 444
-SHRLIB_PERMISSIONS = 555
+BIN_PERMISSIONS = 755
+LIB_PERMISSIONS = 644
+SHRLIB_PERMISSIONS = 755
INSTALL_PERMISSIONS = 444
#---------------------------------------------------------------
@@ -417,42 +432,46 @@ INSTALL_INC += $(foreach inc, $(INC), \
$(CMPLR_INSTALL_INC) \
$(OS_INSTALL_INC) \
$(GENERIC_INSTALL_INC) \
- $(GENERATED_INSTALL_INC) ) )
-INSTALL_INC += $(addprefix $(INSTALL_INCLUDE)/os/$(OS_CLASS)/, $(INC_$(OS_CLASS)) )
+ $(GENERATED_INSTALL_INC)))
+INSTALL_INC += $(addprefix $(INSTALL_INCLUDE)/os/$(OS_CLASS)/, $(INC_$(OS_CLASS)))
#
# Rule 0
#
-CMPLR_INSTALL_INC = $(addprefix $(INSTALL_INCLUDE)/compiler/$(CMPLR_CLASS)/, $(INSTALL_INC_jjj) )
-INSTALL_INC_jjj = $(foreach dir, $(CMPLR_SRC_DIRS), $(INSTALL_INC_iii) )
-INSTALL_INC_iii = $(subst $(dir)/, , $(INSTALL_INC_hhh) )
-INSTALL_INC_hhh = $(wildcard $(addsuffix /$(inc), $(dir)) )
+CMPLR_INSTALL_INC = $(addprefix $(INSTALL_INCLUDE)/compiler/$(CMPLR_CLASS)/, \
+ $(foreach dir, $(CMPLR_SRC_DIRS), \
+ $(subst $(dir)/,, $(wildcard $(addsuffix /$(inc), $(dir))))))
#
# Rule 1
#
-OS_INSTALL_INC = $(addprefix $(INSTALL_INCLUDE)/os/$(OS_CLASS)/, $(INSTALL_INC_ggg) )
-INSTALL_INC_ggg = $(foreach dir, $(OS_SRC_DIRS), $(INSTALL_INC_fff) )
-INSTALL_INC_fff = $(subst $(dir)/, , $(INSTALL_INC_eee) )
-INSTALL_INC_eee = $(wildcard $(addsuffix /$(inc), $(dir)) )
+OS_INSTALL_INC = $(addprefix $(INSTALL_INCLUDE)/os/$(OS_CLASS)/, \
+ $(foreach dir, $(OS_SRC_DIRS), \
+ $(subst $(dir)/,, $(wildcard $(addsuffix /$(inc), $(dir))))))
#
# Rule 2
#
-GENERIC_INSTALL_INC = $(addprefix $(INSTALL_INCLUDE)/, $(INSTALL_INC_ccc) )
-INSTALL_INC_ccc = $(foreach dir, .. $(SRC_DIRS), $(INSTALL_INC_bbb) )
-INSTALL_INC_bbb = $(subst $(dir)/, , $(INSTALL_INC_aaa) )
-INSTALL_INC_aaa = $(wildcard $(addsuffix /$(inc), $(dir)) )
+GENERIC_INSTALL_INC = $(addprefix $(INSTALL_INCLUDE)/, \
+ $(foreach dir, .. $(SRC_DIRS), \
+ $(subst $(dir)/,, $(wildcard $(addsuffix /$(inc), $(dir))))))
#
# Rule 3
#
GENERATED_INSTALL_INC = $(INSTALL_INCLUDE)/$(inc)
-COMMON_INC += $(filter $(COMMON_DIR)/%, $(foreach file, $(INC), \
- $(firstword $(SOURCE_INC) $(COMMON_DIR)/$(file) ) ) )
-SOURCE_INC = $(wildcard $(file) $(SOURCE_INC_bbb) )
-SOURCE_INC_bbb = $(foreach dir, $(ALL_SRC_DIRS), $(SOURCE_INC_aaa) )
-SOURCE_INC_aaa = $(addsuffix /$(file), $(dir) )
-
+#---------------------------------------------------------------
+# Files listed in INC that must first be created in O.Common
+COMMON_INC += $(filter $(COMMON_DIR)/%, \
+ $(foreach file, $(INC), \
+ $(firstword $(wildcard $(file) \
+ $(foreach dir, $(ALL_SRC_DIRS), \
+ $(addsuffix /$(file), $(dir)))) $(COMMON_DIR)/$(file))))
+
+COMMON_DOCS += $(filter $(COMMON_DIR)/%, \
+ $(foreach file, $(DOCS), \
+ $(firstword $(wildcard $(file) \
+ $(foreach dir, $(ALL_SRC_DIRS), \
+ $(addsuffix /$(file), $(dir)))) $(COMMON_DIR)/$(file))))
endif
diff --git a/configure/CONFIG_DATABASE_MODULE b/configure/CONFIG_DATABASE_MODULE
new file mode 100644
index 000000000..22f2bce6e
--- /dev/null
+++ b/configure/CONFIG_DATABASE_MODULE
@@ -0,0 +1,36 @@
+#*************************************************************************
+# Copyright (c) 2017 UChicago Argonne LLC, as Operator of Argonne
+# National Laboratory.
+# EPICS BASE is distributed subject to a Software License Agreement found
+# in file LICENSE that is included with this distribution.
+#*************************************************************************
+
+# Installed perl scripts and dependent modules that have
+# a significant effect on the script's output
+DBDEXPAND_pl = $(EPICS_BASE_HOST_BIN)/dbdExpand.pl
+DBDTORECTYPEH_pl = $(EPICS_BASE_HOST_BIN)/dbdToRecordtypeH.pl
+DBDTORECTYPEH_dep = $(DBDTORECTYPEH_pl) $(call FIND_PM,DBD/Rec*.pm)
+DBDTOMENUH_pl = $(EPICS_BASE_HOST_BIN)/dbdToMenuH.pl
+DBDTOMENUH_dep = $(DBDTOMENUH_pl) $(call FIND_PM,DBD/Menu.pm)
+DBDTOMD_pl = $(EPICS_BASE_HOST_BIN)/dbdToMD.pl
+DBDTOHTML_pl = $(EPICS_BASE_HOST_BIN)/dbdToHtml.pl
+DBDTOHTML_dep = $(DBDTOHTML_pl) $(call FIND_PM,EPICS/Pod*Html.pm)
+REGRECDEVDRV_pl = $(EPICS_BASE_HOST_BIN)/registerRecordDeviceDriver.pl
+REGRECDEVDRV_dep = $(REGRECDEVDRV_pl)
+
+# Commands for running scripts in recipes
+DBEXPAND = $(PERL) $(DBDEXPAND_pl)
+DBTORECORDTYPEH = $(PERL) $(DBDTORECTYPEH_pl)
+DBTOMENUH = $(PERL) $(DBDTOMENUH_pl)
+DBDTOMD = $(PERL) $(DBDTOMD_pl)
+DBDTOHTML = $(PERL) $(DBDTOHTML_pl)
+REGISTERRECORDDEVICEDRIVER = $(PERL) $(REGRECDEVDRV_pl)
+
+# Installed binary executables, quoted for running on Windows
+MAKEBPT = "$(EPICS_BASE_HOST_BIN)/makeBpt$(HOSTEXE)"
+MSI3_15 = "$(EPICS_BASE_HOST_BIN)/msi$(HOSTEXE)"
+
+# Libraries needed to link a basic IOC
+EPICS_BASE_IOC_LIBS = dbRecStd dbCore ca Com
+
+HAS_registerAllRecordDeviceDrivers=YES
diff --git a/configure/CONFIG_DATABASE_VERSION b/configure/CONFIG_DATABASE_VERSION
new file mode 100644
index 000000000..546c63110
--- /dev/null
+++ b/configure/CONFIG_DATABASE_VERSION
@@ -0,0 +1,12 @@
+# Version number for the database APIs and shared library
+
+EPICS_DATABASE_MAJOR_VERSION = 3
+EPICS_DATABASE_MINOR_VERSION = 24
+EPICS_DATABASE_MAINTENANCE_VERSION = 0
+
+# Development flag, set to zero for release versions
+
+EPICS_DATABASE_DEVELOPMENT_FLAG = 0
+
+# Immediately after a release the MAINTENANCE_VERSION
+# will be incremented and the DEVELOPMENT_FLAG set to 1
diff --git a/configure/CONFIG_ENV b/configure/CONFIG_ENV
index 173dceaca..6d0d52a79 100644
--- a/configure/CONFIG_ENV
+++ b/configure/CONFIG_ENV
@@ -3,9 +3,8 @@
# National Laboratory.
# Copyright (c) 2002 The Regents of the University of California, as
# Operator of Los Alamos National Laboratory.
-# EPICS BASE Versions 3.13.7
-# and higher are distributed subject to a Software License Agreement found
-# in file LICENSE that is included with this distribution.
+# EPICS BASE is distributed subject to a Software License Agreement found
+# in file LICENSE that is included with this distribution.
#*************************************************************************
# Author: Andrew Johnson
# Date: 20 April 1995
@@ -35,8 +34,10 @@ EPICS_CA_CONN_TMO=30.0
EPICS_CA_REPEATER_PORT=5065
EPICS_CA_SERVER_PORT=5064
EPICS_CA_MAX_ARRAY_BYTES=16384
+EPICS_CA_AUTO_ARRAY_BYTES=YES
EPICS_CA_BEACON_PERIOD=15.0
EPICS_CA_MAX_SEARCH_PERIOD=300.0
+EPICS_CA_MCAST_TTL=1
EPICS_CAS_BEACON_PERIOD=
EPICS_CAS_BEACON_PORT=
EPICS_CAS_AUTO_BEACON_ADDR_LIST=""
@@ -45,12 +46,10 @@ EPICS_CAS_SERVER_PORT=
EPICS_CAS_INTF_ADDR_LIST=""
EPICS_CAS_IGNORE_ADDR_LIST=""
+# Servers to disable
+EPICS_IOC_IGNORE_SERVERS=""
+
# Log Server:
# EPICS_IOC_LOG_PORT Log server port number etc.
EPICS_IOC_LOG_PORT=7004
-# Other services:
-
-EPICS_CMD_PROTO_PORT=
-EPICS_AR_PORT=7002
-
diff --git a/configure/CONFIG_LIBCOM_MODULE b/configure/CONFIG_LIBCOM_MODULE
new file mode 100644
index 000000000..428d17a8e
--- /dev/null
+++ b/configure/CONFIG_LIBCOM_MODULE
@@ -0,0 +1,18 @@
+#*************************************************************************
+# Copyright (c) 2017 UChicago Argonne LLC, as Operator of Argonne
+# National Laboratory.
+# EPICS BASE is distributed subject to a Software License Agreement found
+# in file LICENSE that is included with this distribution.
+#*************************************************************************
+
+# Our locally-built tools
+# Windows can need these paths to be quoted
+YACC = "$(EPICS_BASE_HOST_BIN)/antelope$(HOSTEXE)"
+LEX = "$(EPICS_BASE_HOST_BIN)/e_flex$(HOSTEXE)" \
+ -S$(EPICS_BASE)/include/flex.skel.static
+
+# Default stack size for osiThread
+OSITHREAD_USE_DEFAULT_STACK = NO
+OSITHREAD_DEFAULT_STACK_FLAGS_YES = -DOSITHREAD_USE_DEFAULT_STACK
+
+BASE_CPPFLAGS += $(OSITHREAD_DEFAULT_STACK_FLAGS_$(OSITHREAD_USE_DEFAULT_STACK))
diff --git a/configure/CONFIG_LIBCOM_VERSION b/configure/CONFIG_LIBCOM_VERSION
new file mode 100644
index 000000000..d1546a965
--- /dev/null
+++ b/configure/CONFIG_LIBCOM_VERSION
@@ -0,0 +1,12 @@
+# Version number for the libcom APIs and shared library
+
+EPICS_LIBCOM_MAJOR_VERSION = 3
+EPICS_LIBCOM_MINOR_VERSION = 24
+EPICS_LIBCOM_MAINTENANCE_VERSION = 0
+
+# Development flag, set to zero for release versions
+
+EPICS_LIBCOM_DEVELOPMENT_FLAG = 0
+
+# Immediately after a release the MAINTENANCE_VERSION
+# will be incremented and the DEVELOPMENT_FLAG set to 1
diff --git a/configure/CONFIG_SITE b/configure/CONFIG_SITE
index b657f5b65..03ec6d114 100644
--- a/configure/CONFIG_SITE
+++ b/configure/CONFIG_SITE
@@ -17,11 +17,11 @@
# Currently Supporting:
# cygwin-x86 (cygwin compiler used for host builds)
# cygwin-x86_64 (cygwin compiler used for host builds)
-# darwin-ppc (PowerPC based Apple running OSX)
-# darwin-ppcx86 (Universal binaries for both CPUs)
-# darwin-x86 (Intel based Apple running OSX)
+# darwin-aarch64 (M1 based Apple using CLANG compiler)
+# darwin-x86 (Intel based Apple using CLANG compiler)
# freebsd-x86 (GNU compiler used for host builds)
# freebsd-x86_64 (GNU compiler used for host builds)
+# linux-aarch64 (GNU compiler used for host builds)
# linux-arm (GNU compiler used for host builds)
# linux-ppc (GNU compiler used for host builds)
# linux-ppc64 (GNU compiler used for host builds)
@@ -51,7 +51,6 @@
# windows-x64-debug (MS Visual C++ compiler with debug option for host builds)
-# EPICS_HOST_ARCH is a required environment variable
# Do not set EPICS_HOST_ARCH in this file.
# Use base/startup files to set EPICS_HOST_ARCH or
# provide EPICS_HOST_ARCH on the GNU make command line.
@@ -62,23 +61,11 @@
# ios-arm (darwin-x86 host)
# ios-386 (darwin-x86 host)
-# linux-386 (linux-x86 host)
-# linux-486 (linux-x86 host)
-# linux-586 (linux-x86 host)
-# linux-686 (linux-x86 host)
# linux-arm (linux-x86 or -x86_64 host)
-# linux-arm_eb (linux-x86 host)
-# linux-arm_el (linux-x86 host)
-# linux-athlon (linux-x86 host)
-# linux-cris (Axis GNU crosscompiler on linux-x86 host)
-# linux-cris_v10 (Axis GNU crosscompiler on linux-x86 host)
-# linux-cris_v32 (Axis GNU crosscompiler on linux-x86 host)
+# linux-aarch64 (linux-x86_64 host)
# linux-microblaze
# linux-xscale_be
# vxWorks-486
-# vxWorks-68040
-# vxWorks-68040lc
-# vxWorks-68060
# vxWorks-pentium
# vxWorks-ppc32 (32-bit PowerPC CPUs with full FPU)
# vxWorks-ppc32sf (32-bit PowerPC CPUs without FPU)
@@ -89,18 +76,20 @@
# vxWorks-ppc604_altivec
# vxWorks-mpc8540
# vxWorks-mpc8548
-# RTEMS-at91rm9200ek
+# RTEMS-beagleboneblack
# RTEMS-beatnik
-# RTEMS-gen68360
-# RTEMS-mcp750
-# RTEMS-mvme167
# RTEMS-mvme2100
# RTEMS-mvme2700
# RTEMS-mvme3100
# RTEMS-mvme5500
-# RTEMS-pc386
-# RTEMS-psim
+# RTEMS-pc386 (RTEMS 4)
+# RTEMS-pc386-qemu (RTEMS 4)
+# RTEMS-pc686 (RTEMS 5)
+# RTEMS-pc686-qemu (RTEMS 5)
+# RTEMS-qoriq_e500
# RTEMS-uC5282
+# RTEMS-xilinx-zynq-a9_qemu
+# RTEMS-xilinx_zynq_zedboard
# win32-x86-mingw (linux-x86 or -x86_64 host)
#
@@ -108,7 +97,6 @@
# Definitions in configure/os/CONFIG_SITE..Common
# may override this setting.
CROSS_COMPILER_TARGET_ARCHS=
-#CROSS_COMPILER_TARGET_ARCHS=vxWorks-ppc32
# If only some of your host architectures can compile the
# above CROSS_COMPILER_TARGET_ARCHS specify those host
@@ -155,6 +143,14 @@ CROSS_WARN=YES
# different location then uncomment and set this.
#INSTALL_LOCATION=
+# The location from which files placed in INSTALL_LOCATION will actually run.
+# This path is compiled into executables, and so should be an absolute.
+# May be used to achieve the effect of autotools. eg.
+# ./configure --prefix=
+# make DESTDIR=
+# Defaults to the absolute expansion of $(INSTALL_LOCATION)
+#FINAL_LOCATION=
+
# Use POSIX thread priority scheduling (if available).
# Must be either YES or NO
USE_POSIX_THREAD_PRIORITY_SCHEDULING = YES
@@ -169,10 +165,18 @@ EPICS_SITE_VERSION =
GCC_PIPE = NO
# Set RPATH when linking executables and libraries.
-# Must be either YES or NO. If you set this to NO you must also provide a
+# Must be either YES, NO, or ORIGIN. If you set this to NO you must also provide a
# way for Base executables to find their shared libraries when they are
# run at build-time, e.g. set the LD_LIBRARY_PATH environment variable.
+# ORIGIN is a feature of the ELF executable format used by Linux, freebsd, and solaris.
LINKER_USE_RPATH = YES
+# Only used when LINKER_USE_RPATH=ORIGIN
+# The build time root(s) of the relocatable tree (separate multiple w/ ':').
+# Linking to libraries under any root directory will be relative.
+# Linking to libraries outside of this root will be absolute.
+# All root directories are considered to be the same.
+LINKER_ORIGIN_ROOT = $(INSTALL_LOCATION)
+
# Overrides for the settings above may appear in a CONFIG_SITE.local file
-include $(CONFIG)/CONFIG_SITE.local
diff --git a/configure/CONFIG_SITE_ENV b/configure/CONFIG_SITE_ENV
index 008467933..bcc3bdf7a 100644
--- a/configure/CONFIG_SITE_ENV
+++ b/configure/CONFIG_SITE_ENV
@@ -59,7 +59,6 @@ EPICS_TZ = "CST6CDT,M3.2.0/2,M11.1.0/2"
# US Hawaiian Standard Time, no DST:
#EPICS_TZ = "HST10"
-
# EPICS_TS_NTP_INET
# NTP time server ip address for VxWorks and RTEMS.
# IOC will use its boot host if this is not set.
@@ -70,8 +69,11 @@ EPICS_TS_NTP_INET=
# Prompt string
# IOCSH_HISTSIZE
# Number of lines of command history to keep.
+# IOCSH_HISTEDIT_DISABLE
+# Prevents use of readline or equivalent if defined.
IOCSH_PS1="epics> "
IOCSH_HISTSIZE=50
+IOCSH_HISTEDIT_DISABLE=
# Log Server:
# EPICS_IOC_LOG_INET
@@ -90,3 +92,6 @@ EPICS_IOC_LOG_FILE_NAME=
EPICS_IOC_LOG_FILE_COMMAND=
EPICS_IOC_LOG_FILE_LIMIT=1000000
+# Set to 'YES' to call abort() rather than suspend the current thread
+# when an assert() fails
+EPICS_ABORT_ON_ASSERT=NO
diff --git a/configure/Makefile b/configure/Makefile
index 377879766..3c2c0b53a 100644
--- a/configure/Makefile
+++ b/configure/Makefile
@@ -15,10 +15,28 @@ include $(TOP)/configure/CONFIG
TOOLS = $(TOP)/src/tools
CONFIGS += $(subst ../,,$(wildcard ../CONFIG*))
-CONFIGS += $(subst ../,,$(wildcard ../os/CONFIG*))
+CONFIGS += $(subst ../,,$(wildcard ../os/CONFIG.*))
+CONFIGS += $(subst ../,,$(wildcard ../os/CONFIG_SITE.*))
CONFIGS += $(subst ../,,$(wildcard ../RELEASE*))
CONFIGS += $(subst ../,,$(wildcard ../RULES*))
+CFG += CONFIG_LIBCOM_MODULE
+CFG += CONFIG_LIBCOM_VERSION
+
+CFG += CONFIG_CA_MODULE
+CFG += CONFIG_CA_VERSION
+
+CFG += CONFIG_DATABASE_MODULE
+CFG += CONFIG_DATABASE_VERSION
+
+CFG += TOOLCHAIN.$(EPICS_HOST_ARCH).$(T_A)
+
include $(TOP)/configure/RULES
+ifeq ($(GNU),YES)
+ # Pass compiler flags to preprocessor to enable _FORTIFY_SOURCE
+ TOOLCHAIN.$(EPICS_HOST_ARCH).$(T_A): CPPFLAGS += $(CFLAGS)
+endif
+TOOLCHAIN.$(EPICS_HOST_ARCH).$(T_A): toolchain.c
+ $(PREPROCESS.cpp)
diff --git a/configure/RULES b/configure/RULES
index bdc895a4d..e4ae22497 100644
--- a/configure/RULES
+++ b/configure/RULES
@@ -1,11 +1,10 @@
#*************************************************************************
-# Copyright (c) 2002 The University of Chicago, as Operator of Argonne
+# Copyright (c) 2006 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 Versions 3.13.7
-# and higher are distributed subject to a Software License Agreement found
-# in file LICENSE that is included with this distribution.
+# EPICS BASE is distributed subject to a Software License Agreement found
+# in the file LICENSE that is included with this distribution.
#*************************************************************************
ifndef T_A
diff --git a/configure/RULES.Db b/configure/RULES.Db
index 8c5d99ed7..4a984f8c3 100644
--- a/configure/RULES.Db
+++ b/configure/RULES.Db
@@ -4,27 +4,31 @@
# 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.
+# in the file LICENSE that is included with this distribution.
#*************************************************************************
-#RULES.Db
-# Set db substitutions file suffix
+# RULES.Db
+
+# Set db substitutions and template file suffixes
SUBST_SUFFIX ?= .substitutions
+TEMPL_SUFFIX ?= .template
-##################################################### vpath
+#---------------------------------------------------------------
+# vpath
vpath %.pm $(USR_VPATH) $(SRC_DIRS) $(dir $(DBD))
-vpath %.pod $(USR_VPATH) $(SRC_DIRS) $(dir $(DBD))
+vpath %.pod $(USR_VPATH) $(SRC_DIRS) .. $(dir $(DBD))
vpath %.dbd $(USR_VPATH) $(SRC_DIRS) $(dir $(DBD))
vpath %.db $(USR_VPATH) $(SRC_DIRS) $(dir $(DB))
vpath %.vdb $(USR_VPATH) $(SRC_DIRS) $(dir $(DB))
vpath %$(SUBST_SUFFIX) $(USR_VPATH) $(SRC_DIRS) $(COMMON_DIR)
-vpath %.template $(USR_VPATH) $(SRC_DIRS) $(COMMON_DIR)
+vpath %$(TEMPL_SUFFIX) $(USR_VPATH) $(SRC_DIRS) $(COMMON_DIR)
vpath bpt%.data $(USR_VPATH) $(SRC_DIRS) $(COMMON_DIR)
vpath %.acf $(USR_VPATH) $(SRC_DIRS) $(COMMON_DIR)
vpath %.acs $(USR_VPATH) $(SRC_DIRS) $(COMMON_DIR)
-##################################################### dbflags dbdflags
+#---------------------------------------------------------------
+# 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)
@@ -33,13 +37,15 @@ DBDFLAGS = $(USR_DBDFLAGS) $(CMD_DBDFLAGS) $(addprefix -I,$(DBD_SEARCH_DIRS))
DBFLAGS = $($*_DBFLAGS) $(USR_DBFLAGS) $(CMD_DBFLAGS) $(addprefix -I,$(DB_SEARCH_DIRS))
REGRDDFLAGS = $(DBDFLAGS) $($*_REGRDDFLAGS) $(USR_REGRDDFLAGS) $(CMD_REGRDDFLAGS)
-##################################################### Targets
+#---------------------------------------------------------------
+# 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)))))
+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
@@ -86,31 +92,28 @@ 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)/*$(SUBST_SUFFIX) $(COMMON_DIR)/*.template
+ $(COMMON_DIR)/*$(SUBST_SUFFIX) $(COMMON_DIR)/*$(TEMPL_SUFFIX)
# 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
+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 $(TEMPL_SUFFIX),$(addprefix ../,$(TEMPLATE2)))
+TEMPLATE_FILENAME = $(firstword $(wildcard $($*_TEMPLATE) \
+ $(addprefix ../,$($*_TEMPLATE)) ../$*$(TEMPL_SUFFIX) $(TEMPLATE3) \
+ ../template))
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
+#---------------------------------------------------------------
+# acf files
+
# An access security configuration file, *.acf, can be created from
# an *.acs file (has format of acf file plus #include "filename" lines)
@@ -123,7 +126,8 @@ ACF_INCLUDES = -I. $(TARGET_INCLUDES) $(USR_INCLUDES)\
ACFDEPENDS_CMD = $(MKMF) -m $@ $(ACF_INCLUDES) $(COMMONDEP_TARGET) $<
ACF_CMD = $(CPP) $(ACF_CPPFLAGS) $(ACF_INCLUDES) $< > $@
-##################################################### dependancies
+#---------------------------------------------------------------
+# dependencies
HINC += $(addsuffix .h,$(DBDINC_NAME))
COMMON_DBDINC += $(addprefix $(COMMON_DIR)/,$(HINC))
@@ -133,12 +137,12 @@ DBDDEPENDS_FILES += $(addsuffix $(DEP),$(HINC) \
$(patsubst $(COMMON_DIR)/%,%, \
$(filter-out $(COMMON_DIR)/bpt%.dbd,$(COMMON_DBDS))))
-#####################################################
+#---------------------------------------------------------------
ifndef T_A
DEP = .d
-TEMPLATE3+=$(addsuffix .template, $(TEMPLATE2))
+TEMPLATE3 += $(addsuffix $(TEMPL_SUFFIX), $(TEMPLATE2))
COMMON_DIR = .
INSTALL_DBDS =
@@ -153,86 +157,92 @@ ACTIONS += install
ACTIONS += buildInstall
ACTIONS += runtests tapfiles clean-tests test-results junitfiles
-actionArchTargets = $(foreach x, $(ACTIONS),\ $(foreach arch,$(BUILD_ARCHS), $(x)$(DIVIDER)$(arch)))
+actionArchTargets = $(foreach action, $(ACTIONS), \
+ $(foreach arch, $(BUILD_ARCHS), $(action)$(DIVIDER)$(arch)))
+cleanArchTargets = $(foreach arch, $(BUILD_ARCHS), clean$(DIVIDER)$(arch))
-cleanArchTargets = $(foreach arch,$(BUILD_ARCHS), clean$(DIVIDER)$(arch))
--include $(TOP)/configure/CONFIG_APP_INCLUDE
+include $(CONFIG)/CONFIG_APP_INCLUDE
all: install
-ifeq ($(EPICS_HOST_ARCH),$T_A)
-host: install
-else
-# Do nothing
-host:
-endif
install: buildInstall
-buildInstall : build
+buildInstall: build
rebuild: clean install
-.PHONY: all host $(ACTIONS)
+.PHONY: all $(ACTIONS)
$(actionArchTargets) $(BUILD_ARCHS): install
$(cleanArchTargets): clean
.PHONY: $(BUILD_ARCHS) $(actionArchTargets) $(cleanArchTargets)
-endif # T_A defined
+else
+ # T_A is defined
+ ifeq ($(EPICS_HOST_ARCH),$(T_A))
+ host: install
+ else
+ host:
+ endif
+
+ .PHONY: host
+endif # T_A
ifneq (,$(strip $(DBDDEPENDS_FILES)))
-include $(DBDDEPENDS_FILES)
endif
-##################################################### build dependancies, clean rule
+#---------------------------------------------------------------
+# build dependancies, clean rule
-inc : $(COMMON_INC) $(INSTALL_INC)
+inc: $(COMMON_INC) $(INSTALL_INC) $(COMMON_DBDS) $(COMMON_DBDCATS) \
+ $(INSTALL_DBDS) $(INSTALL_DBD_INSTALLS) $(COMMON_DOCS)
-build : $(COMMON_DBDS) $(COMMON_DBS) $(COMMON_DBDCATS) \
- $(INSTALL_DBDS) $(INSTALL_DBS) \
+build: $(COMMON_DBS) $(INSTALL_DBS) \
$(DBDDEPENDS_FILES) $(TARGETS) \
- $(INSTALL_DB_INSTALLS) $(INSTALL_DBD_INSTALLS)
+ $(INSTALL_DB_INSTALLS)
clean: db_clean
-db_clean :
+db_clean:
@$(RM) $(COMMONS) $(DBDDEPENDS_FILES)
@$(RM) *_registerRecordDeviceDriver.cpp
@$(RM) $(TARGETS)
-.PHONY : db_clean
+.PHONY: db_clean
realclean: clean
-##################################################### Dependency files
+#---------------------------------------------------------------
+# Dependency files
-%Record.h$(DEP): $(COMMON_DIR)/%Record.dbd
+%Record.h$(DEP): $(COMMON_DIR)/%Record.dbd $(DBDTORECTYPEH_dep)
@$(RM) $@
@$(DBTORECORDTYPEH) -D $(DBDFLAGS) -o $(COMMONDEP_TARGET) $< > $@
@echo "$(COMMONDEP_TARGET): ../Makefile" >> $@
-%Record.h$(DEP): %Record.dbd
+%Record.h$(DEP): %Record.dbd $(DBDTORECTYPEH_dep)
@$(RM) $@
@$(DBTORECORDTYPEH) -D $(DBDFLAGS) -o $(COMMONDEP_TARGET) $< > $@
@echo "$(COMMONDEP_TARGET): ../Makefile" >> $@
-%Record.h$(DEP): ../%Record.dbd
+%Record.h$(DEP): ../%Record.dbd $(DBDTORECTYPEH_dep)
@$(RM) $@
@$(DBTORECORDTYPEH) -D $(DBDFLAGS) -o $(COMMONDEP_TARGET) $< > $@
@echo "$(COMMONDEP_TARGET): ../Makefile" >> $@
-menu%.h$(DEP): $(COMMON_DIR)/menu%.dbd
+menu%.h$(DEP): $(COMMON_DIR)/menu%.dbd $(DBDTOMENUH_dep)
@$(RM) $@
@$(DBTOMENUH) -D $(DBDFLAGS) -o $(COMMONDEP_TARGET) $< > $@
@echo "$(COMMONDEP_TARGET): ../Makefile" >> $@
-menu%.h$(DEP): menu%.dbd
+menu%.h$(DEP): menu%.dbd $(DBDTOMENUH_dep)
@$(RM) $@
@$(DBTOMENUH) -D $(DBDFLAGS) -o $(COMMONDEP_TARGET) $< > $@
@echo "$(COMMONDEP_TARGET): ../Makefile" >> $@
-menu%.h$(DEP): ../menu%.dbd
+menu%.h$(DEP): ../menu%.dbd $(DBDTOMENUH_dep)
@$(RM) $@
@$(DBTOMENUH) -D $(DBDFLAGS) -o $(COMMONDEP_TARGET) $< > $@
@echo "$(COMMONDEP_TARGET): ../Makefile" >> $@
@@ -251,24 +261,24 @@ menu%.h$(DEP): ../menu%.dbd
@$(DBEXPAND) -D $(DBDFLAGS) -o $(COMMONDEP_TARGET) $< > $@
@echo "$(COMMONDEP_TARGET): ../Makefile" >> $@
-%.dbd$(DEP):
+%.dbd$(DEP): $($*_DBD)
@$(RM) $@
@$(DBEXPAND) -D $(DBDFLAGS) -o $(COMMONDEP_TARGET) $($*_DBD) > $@
@echo "$(COMMONDEP_TARGET): ../Makefile" >> $@
-%.db$(RAW)$(DEP): %$(SUBST_SUFFIX)
+%.db$(DEP): %$(SUBST_SUFFIX)
@$(RM) $@
$(MSI3_15) -D $(DBFLAGS) -o $(COMMONDEP_TARGET) -S$< $(TEMPLATE_FILENAME) > $@
-%.db$(RAW)$(DEP): ../%$(SUBST_SUFFIX)
+%.db$(DEP): ../%$(SUBST_SUFFIX)
@$(RM) $@
$(MSI3_15) -D $(DBFLAGS) -o $(COMMONDEP_TARGET) -S$< $(TEMPLATE_FILENAME) > $@
-%.db$(RAW)$(DEP): %.template
+%.db$(DEP): %$(TEMPL_SUFFIX)
@$(RM) $@
$(MSI3_15) -D $(DBFLAGS) -o $(COMMONDEP_TARGET) $< > $@
-%.db$(RAW)$(DEP): ../%.template
+%.db$(DEP): ../%$(TEMPL_SUFFIX)
@$(RM) $@
$(MSI3_15) -D $(DBFLAGS) -o $(COMMONDEP_TARGET) $< > $@
@@ -282,14 +292,8 @@ menu%.h$(DEP): ../menu%.dbd
.PRECIOUS: %$(DEP)
-##################################################### 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
+#---------------------------------------------------------------
+# Substitution files
# WARNING: CREATESUBSTITUTIONS script needs output dir on command line
@@ -310,61 +314,59 @@ $(INSTALL_DB)/%$(SUBST_SUFFIX): ../%$(SUBST_SUFFIX)
.PRECIOUS: $(COMMON_DIR)/%$(SUBST_SUFFIX)
-##################################################### Template files
-
-$(COMMON_DIR)/%.template: $(COMMON_DIR)/%.edf
- @$(RM) $@
- $(E2DB) $(E2DB_SYSFLAGS) $(E2DB_FLAGS) -n $@.VAR $<
- @$(REPLACEVAR) < $@.VAR > $@
- @$(RM) $@.VAR
+#---------------------------------------------------------------
+# Template files
-$(INSTALL_DB)/%.template: %.template
+$(INSTALL_DB)/%$(TEMPL_SUFFIX): %$(TEMPL_SUFFIX)
$(ECHO) "Installing template file $@"
@$(INSTALL) -d -m $(INSTALL_PERMISSIONS) $< $(@D)
-$(INSTALL_DB)/%.template: ../%.template
+$(INSTALL_DB)/%$(TEMPL_SUFFIX): ../%$(TEMPL_SUFFIX)
$(ECHO) "Installing template file $@"
@$(INSTALL) -d -m $(INSTALL_PERMISSIONS) $< $(@D)
-.PRECIOUS: $(COMMON_DIR)/%.template
+.PRECIOUS: $(COMMON_DIR)/%$(TEMPL_SUFFIX)
-##################################################### INC files
+#---------------------------------------------------------------
+# INC files
-$(COMMON_DIR)/%Record.h: $(COMMON_DIR)/%Record.dbd
+$(COMMON_DIR)/%Record.h: $(COMMON_DIR)/%Record.dbd $(DBDTORECTYPEH_dep)
@$(RM) $(notdir $@)
$(DBTORECORDTYPEH) $(DBDFLAGS) -o $(notdir $@) $<
@$(MV) $(notdir $@) $@
-$(COMMON_DIR)/%Record.h: %Record.dbd
+$(COMMON_DIR)/%Record.h: %Record.dbd $(DBDTORECTYPEH_dep)
@$(RM) $(notdir $@)
$(DBTORECORDTYPEH) $(DBDFLAGS) -o $(notdir $@) $<
@$(MV) $(notdir $@) $@
-$(COMMON_DIR)/%Record.h: ../%Record.dbd
+$(COMMON_DIR)/%Record.h: ../%Record.dbd $(DBDTORECTYPEH_dep)
@$(RM) $(notdir $@)
$(DBTORECORDTYPEH) $(DBDFLAGS) -o $(notdir $@) $<
@$(MV) $(notdir $@) $@
-$(COMMON_DIR)/menu%.h: $(COMMON_DIR)/menu%.dbd
+$(COMMON_DIR)/menu%.h: $(COMMON_DIR)/menu%.dbd $(DBDTOMENUH_dep)
@$(RM) $(notdir $@)
$(DBTOMENUH) $(DBDFLAGS) -o $(notdir $@) $<
@$(MV) $(notdir $@) $@
-$(COMMON_DIR)/menu%.h: menu%.dbd
+$(COMMON_DIR)/menu%.h: menu%.dbd $(DBDTOMENUH_dep)
@$(RM) $(notdir $@)
$(DBTOMENUH) $(DBDFLAGS) -o $(notdir $@) $<
@$(MV) $(notdir $@) $@
-$(COMMON_DIR)/menu%.h: ../menu%.dbd
+$(COMMON_DIR)/menu%.h: ../menu%.dbd $(DBDTOMENUH_dep)
@$(RM) $(notdir $@)
$(DBTOMENUH) $(DBDFLAGS) -o $(notdir $@) $<
@$(MV) $(notdir $@) $@
.PRECIOUS: $(COMMON_DIR)/%.h
-##################################################### DBD files
+#---------------------------------------------------------------
+# DBD files
$(COMMON_DIR)/bpt%.dbd: bpt%.data
+ $(ECHO) "Converting data from $<"
@$(RM) $(notdir $@)
$(MAKEBPT) $< $(notdir $@)
@$(MV) $(notdir $@) $@
@@ -388,7 +390,7 @@ $(COMMON_DIR)/%.dbd: ../%Include.dbd
# Make DBDCAT file x depend on x_DBD source files
define DBDCAT_template
-$$(COMMON_DIR)/$(1).dbd : ../Makefile $$(foreach file, $$($(1)_DBD),$$(DBDCAT_SOURCE) )
+$$(COMMON_DIR)/$(1).dbd: ../Makefile $$(foreach file, $$($(1)_DBD),$$(DBDCAT_SOURCE) )
endef
$(foreach name,$(subst .dbd,,$(DBDCAT)), $(eval $(call DBDCAT_template,$(name))))
@@ -398,7 +400,7 @@ $(COMMON_DBDCATS):$(COMMON_DIR)/%.dbd:
$(DBDCAT_COMMAND)
@$(MV) $(notdir $@) $@
-$(COMMON_DIR)/%.dbd:
+$(COMMON_DIR)/%.dbd: $($*_DBD)
$(ECHO) "Creating dbd file $(notdir $@)"
@$(RM) $(notdir $@)
$(DBEXPAND) $(DBDFLAGS) -o $(notdir $@) $($*_DBD)
@@ -417,7 +419,7 @@ $(INSTALL_DBD)/%: ../%
@$(INSTALL) -d -m $(INSTALL_PERMISSIONS) $< $(@D)
define DBD_INSTALLS_template
-$$(INSTALL_DBD)/$$(notdir $(1)) : $(1)
+$$(INSTALL_DBD)/$$(notdir $(1)): $(1)
$(ECHO) "Installing $$@"
@$$(INSTALL) -d -m $$(INSTALL_PERMISSIONS) $$^ $$(INSTALL_DBD)
endef
@@ -425,56 +427,84 @@ $(foreach file, $(DBD_INSTALLS), $(eval $(call DBD_INSTALLS_template, $(file))))
.PRECIOUS: $(COMMON_DBDS) $(COMMON_DIR)/%.dbd
-##################################################### HTML files
+#---------------------------------------------------------------
+# Markdown files
+
+$(COMMON_DIR)/%.md: %.dbd.pod $(DBDTOMD_pl)
+ @$(RM) $(notdir $@)
+ $(DBDTOMD) $(DBDFLAGS) -o $(notdir $@) $<
+ @$(MV) $(notdir $@) $@
+
+$(COMMON_DIR)/%.md: %.pod $(PODTOMD_pl)
+ @$(RM) $(notdir $@)
+ $(PODTOMD) -o $(notdir $@) $<
+ @$(MV) $(notdir $@) $@
+
+$(COMMON_DIR)/%.md: ../%.pl $(PODTOMD_pl)
+ @$(RM) $(notdir $@)
+ $(PODTOMD) -o $(notdir $@) $<
+ @$(MV) $(notdir $@) $@
+
+.PRECIOUS: $(COMMON_DIR)/%.md
+
+#---------------------------------------------------------------
+# HTML files
-$(COMMON_DIR)/%.html: %.dbd.pod $(TOOLS)/dbdToHtml.pl
+$(COMMON_DIR)/%.html: %.dbd.pod $(DBDTOHTML_pl)
@$(RM) $(notdir $@)
- $(PERL) $(TOOLS)/dbdToHtml.pl $(DBDFLAGS) -o $(notdir $@) $<
+ $(DBDTOHTML) $(DBDFLAGS) -o $(notdir $@) $<
@$(MV) $(notdir $@) $@
-$(COMMON_DIR)/%.html: %.pod $(TOOLS)/podToHtml.pl
+$(COMMON_DIR)/%.html: %.pod $(PODTOHTML_dep)
@$(RM) $(notdir $@)
- $(PERL) $(TOOLS)/podToHtml.pl -o $(notdir $@) $<
+ $(PODTOHTML) -s -s -o $(notdir $@) $<
@$(MV) $(notdir $@) $@
-$(COMMON_DIR)/%.html: %.pm $(TOOLS)/podToHtml.pl
+$(COMMON_DIR)/%.html: %.pm $(PODTOHTML_dep)
@$(RM) $(notdir $@)
- $(PERL) $(TOOLS)/podToHtml.pl -o $(notdir $@) $<
+ $(PODTOHTML) -o $(notdir $@) $<
@$(MV) $(notdir $@) $@
-$(COMMON_DIR)/%.html: ../%.pm $(TOOLS)/podToHtml.pl
+$(COMMON_DIR)/%.html: ../%.pm $(PODTOHTML_dep)
@$(RM) $(notdir $@)
- $(PERL) $(TOOLS)/podToHtml.pl -o $(notdir $@) $<
+ $(PODTOHTML) -s -o $(notdir $@) $<
+ @$(MKDIR) $(dir $@)
@$(MV) $(notdir $@) $@
-.PRECIOUS: $(COMMON_DIR)/%.html %.html
+$(COMMON_DIR)/%.html: ../%.pl $(PODTOHTML_dep)
+ @$(RM) $(notdir $@)
+ $(PODTOHTML) -s -o $(notdir $@) $<
+ @$(MV) $(notdir $@) $@
-##################################################### DB files
+.PRECIOUS: $(COMMON_DIR)/%.html
-$(COMMON_DIR)/%.db$(RAW): $(COMMON_DIR)/%.edf
+#---------------------------------------------------------------
+# DB files
+
+$(COMMON_DIR)/%.db: $(COMMON_DIR)/%.edf
$(E2DB) $(E2DB_SYSFLAGS) $(E2DB_FLAGS) -n $*.VAR $<
@$(REPLACEVAR) < $*.VAR > $@
@$(RM) $*.VAR
-$(COMMON_DIR)/%.db$(RAW): %$(SUBST_SUFFIX)
+$(COMMON_DIR)/%.db: %$(SUBST_SUFFIX)
$(ECHO) "Inflating database from $< $(TEMPLATE_FILENAME)"
@$(RM) $(notdir $@)
$(MSI3_15) $(DBFLAGS) -o $(notdir $@) -S$< $(TEMPLATE_FILENAME)
@$(MV) $(notdir $@) $@
-$(COMMON_DIR)/%.db$(RAW): ../%$(SUBST_SUFFIX)
+$(COMMON_DIR)/%.db: ../%$(SUBST_SUFFIX)
$(ECHO) "Inflating database from $< $(TEMPLATE_FILENAME)"
@$(RM) $(notdir $@)
$(MSI3_15) $(DBFLAGS) -o $(notdir $@) -S$< $(TEMPLATE_FILENAME)
@$(MV) $(notdir $@) $@
-$(COMMON_DIR)/%.db$(RAW): %.template
+$(COMMON_DIR)/%.db: %$(TEMPL_SUFFIX)
$(ECHO) "Inflating database from $<"
@$(RM) $(notdir $@)
$(MSI3_15) $(DBFLAGS) -o $(notdir $@) $<
@$(MV) $(notdir $@) $@
-$(COMMON_DIR)/%.db$(RAW): ../%.template
+$(COMMON_DIR)/%.db: ../%$(TEMPL_SUFFIX)
$(ECHO) "Inflating database from $<"
@$(RM) $(notdir $@)
$(MSI3_15) $(DBFLAGS) -o $(notdir $@) $<
@@ -492,22 +522,6 @@ $(COMMON_DIR)/%.acf: ../%.acs
.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 $@"
@$(INSTALL) -d -m $(INSTALL_PERMISSIONS) $< $(@D)
@@ -515,14 +529,13 @@ $(INSTALL_DB)/%: %
$(INSTALL_DB)/%: ../%
$(ECHO) "Installing $@"
@$(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)
+$$(INSTALL_DB)/$$(notdir $(1)): $(1)
$(ECHO) "Installing $$@"
@$$(INSTALL) -d -m $$(INSTALL_PERMISSIONS) $$^ $$(INSTALL_DB)
endef
@@ -531,21 +544,22 @@ $(foreach file, $(DB_INSTALLS), $(eval $(call DB_INSTALLS_template, $(file))))
.PRECIOUS: $(COMMON_DIR)/%.edf
.PRECIOUS: $(COMMON_DBS)
-##################################################### register record,device,driver support
+#---------------------------------------------------------------
+# register record,device,driver support
-
-%_registerRecordDeviceDriver.cpp: $(COMMON_DIR)/%.dbd
+%_registerRecordDeviceDriver.cpp: $(COMMON_DIR)/%.dbd $(REGRECDEVDRV_dep)
@$(RM) $@
- $(REGISTERRECORDDEVICEDRIVER) $(REGRDDFLAGS) -o $@ $< $(basename $@) $(IOCS_APPL_TOP)
+ $(REGISTERRECORDDEVICEDRIVER) $(REGRDDFLAGS) -o $@ \
+ $< $(basename $@) $(IOCS_APPL_TOP)
-%_registerRecordDeviceDriver.cpp: %.dbd
+%_registerRecordDeviceDriver.cpp: %.dbd $(REGRECDEVDRV_dep)
@$(RM) $@
- $(REGISTERRECORDDEVICEDRIVER) $(REGRDDFLAGS) -o $@ $< $(basename $@) $(IOCS_APPL_TOP)
+ $(REGISTERRECORDDEVICEDRIVER) $(REGRDDFLAGS) -o $@ \
+ $< $(basename $@) $(IOCS_APPL_TOP)
-%_registerRecordDeviceDriver.cpp: ../%.dbd
+%_registerRecordDeviceDriver.cpp: ../%.dbd $(REGRECDEVDRV_dep)
@$(RM) $@
- $(REGISTERRECORDDEVICEDRIVER) $(REGRDDFLAGS) -o $@ $< $(basename $@) $(IOCS_APPL_TOP)
+ $(REGISTERRECORDDEVICEDRIVER) $(REGRDDFLAGS) -o $@ \
+ $< $(basename $@) $(IOCS_APPL_TOP)
.PRECIOUS: %_registerRecordDeviceDriver.cpp
-
-##################################################### END OF FILE
diff --git a/configure/RULES.ioc b/configure/RULES.ioc
index fa0482ec0..385e9e6de 100644
--- a/configure/RULES.ioc
+++ b/configure/RULES.ioc
@@ -4,9 +4,10 @@
# 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.
+# in the file LICENSE that is included with this distribution.
#*************************************************************************
-#RULES.ioc
+
+# RULES.ioc
include $(CONFIG)/RULES_DIRS
diff --git a/configure/RULES_ARCHS b/configure/RULES_ARCHS
index dc3fa04fe..4aaa75870 100644
--- a/configure/RULES_ARCHS
+++ b/configure/RULES_ARCHS
@@ -90,6 +90,4 @@ realclean:
.PHONY : $(BUILD_ARCHS) rebuild archsCommonClean
.PHONY : $(ACTIONS) clean realclean archclean host all
-# User specific rules
-#
--include $(HOME)/configure/RULES_USER
+include $(CONFIG)/RULES_COMMON
diff --git a/configure/RULES_BUILD b/configure/RULES_BUILD
index c7f3ba7b6..e38bbcf08 100644
--- a/configure/RULES_BUILD
+++ b/configure/RULES_BUILD
@@ -6,11 +6,12 @@
# EPICS BASE is distributed subject to a Software License Agreement found
# in the file LICENSE that is included with this distribution.
#*************************************************************************
+
+# RULES_BUILD
+
+# Rules for making things specified in a Makefile
#
-# Rules for making things specified in Makefile
-#
-# we are in O.$(T_A), but most sources are elsewhere
-#
+# CWD is O.$(T_A), but most sources are elsewhere
ifndef BASE_RULES_BUILD
BASE_RULES_BUILD=1
@@ -21,7 +22,8 @@ vpath %.cpp $(USR_VPATH) $(ALL_SRC_DIRS)
vpath %.rc $(USR_VPATH) $(ALL_SRC_DIRS)
vpath %.h $(USR_VPATH) $(ALL_SRC_DIRS)
vpath %.hpp $(USR_VPATH) $(ALL_SRC_DIRS)
-vpath %.html $(USR_VPATH) $(ALL_SRC_DIRS)
+vpath %.html $(USR_VPATH) $(ALL_SRC_DIRS) $(COMMON_DIR)
+vpath %.md $(USR_VPATH) $(ALL_SRC_DIRS) $(COMMON_DIR)
vpath %.skel.static $(USR_VPATH) $(ALL_SRC_DIRS)
vpath %.y $(USR_VPATH) $(ALL_SRC_DIRS)
vpath %.l $(USR_VPATH) $(ALL_SRC_DIRS)
@@ -31,28 +33,44 @@ vpath %.l $(USR_VPATH) $(ALL_SRC_DIRS)
include $(CONFIG)/CONFIG_ADDONS
#---------------------------------------------------------------
-# Set PROD, TESTPROD, OBJS, and LIBRARY
SCRIPTS_HOST += $(PERL_SCRIPTS)
# PERL_SCRIPTS are installed into existing $(INSTALL_BIN) for Host systems
-ifeq ($(findstring Host,$(VALID_BUILDS)),Host)
+# Host targets can compile and run programs
+ifneq (,$(findstring Host,$(VALID_BUILDS)))
LIBRARY += $(LIBRARY_HOST)
LOADABLE_LIBRARY += $(LOADABLE_LIBRARY_HOST)
OBJS += $(OBJS_HOST)
PROD += $(PROD_HOST)
SCRIPTS += $(SCRIPTS_HOST)
+TARGETS += $(TARGETS_HOST)
TESTLIBRARY += $(TESTLIBRARY_HOST)
TESTSCRIPTS += $(TESTSCRIPTS_HOST)
TESTPROD += $(TESTPROD_HOST)
endif
-ifeq ($(findstring Ioc,$(VALID_BUILDS)),Ioc)
+# Command targets have a command line and support main()
+ifneq (,$(findstring Command,$(VALID_BUILDS)))
+LIBRARY += $(LIBRARY_CMD)
+LOADABLE_LIBRARY += $(LOADABLE_LIBRARY_CMD)
+OBJS += $(OBJS_CMD)
+PROD += $(PROD_CMD)
+SCRIPTS += $(SCRIPTS_CMD)
+TARGETS += $(TARGETS_CMD)
+TESTLIBRARY += $(TESTLIBRARY_CMD)
+TESTSCRIPTS += $(TESTSCRIPTS_CMD)
+TESTPROD += $(TESTPROD_CMD)
+endif
+
+# Ioc targets can run IOCs
+ifneq (,$(findstring Ioc,$(VALID_BUILDS)))
LIBRARY += $(LIBRARY_IOC)
LOADABLE_LIBRARY += $(LOADABLE_LIBRARY_IOC)
OBJS += $(OBJS_IOC)
PROD += $(PROD_IOC)
SCRIPTS += $(SCRIPTS_IOC)
+TARGETS += $(TARGETS_IOC)
TESTLIBRARY += $(TESTLIBRARY_IOC)
TESTSCRIPTS += $(TESTSCRIPTS_IOC)
TESTPROD += $(TESTPROD_IOC)
@@ -72,31 +90,34 @@ HTMLS_DIR ?= .
# First target
all: install
-ifeq ($(EPICS_HOST_ARCH),$T_A)
+ifeq ($(EPICS_HOST_ARCH),$(T_A))
host: install
else
# Do nothing
host:
endif
--include $(CONFIG)/RULES_FILE_TYPE
+include $(CONFIG)/RULES_FILE_TYPE
--include $(CONFIG)/RULES.Db
+include $(CONFIG)/RULES.Db
#---------------------------------------------------------------
# Include defines and rules for prod, library and test* targets
-#ifneq (,$(strip $(PROD) $(TESTPROD) $(LIBRARY) $(TESTLIBRARY) $(LOADABLE_LIBRARY) ))
+ifneq (,$(strip $(PROD) $(TESTPROD) $(LIBRARY) $(TESTLIBRARY) \
+ $(LOADABLE_LIBRARY)))
include $(CONFIG)/RULES_TARGET
-#endif
+endif
#---------------------------------------------------------------
# Read dependency files
+ifneq ($(filter-out inc,$(strip $(MAKECMDGOALS))),)
ifneq (,$(strip $(HDEPENDS_FILES)))
$(filter-out $(wildcard *$(DEP)), $(HDEPENDS_FILES)): | $(COMMON_INC)
-include $(HDEPENDS_FILES)
endif
+endif
#---------------------------------------------------------------
# Products and Object libraries
@@ -113,7 +134,7 @@ ifneq (,$(filter $(T_A), $(EPICS_HOST_ARCH) $(CROSS_COMPILER_RUNTEST_ARCHS)))
RUNTESTS_ENABLED = YES
TESTSCRIPTS.t = $(filter %.t, $(TESTSCRIPTS))
TAPFILES.t += $(TESTSCRIPTS.t:.t=.tap)
-JUNITFILES.t += $(TESTSCRIPTS.t:.t=.xml)
+JUNITFILES.t += $(TESTSCRIPTS.t:.t=-results.xml)
TAPFILES += $(TAPFILES.t)
JUNITFILES += $(JUNITFILES.t)
endif
@@ -144,14 +165,14 @@ build: inc
build: $(OBJSNAME) $(LIBTARGETS) $(PRODTARGETS) $(TESTPRODTARGETS) \
$(TARGETS) $(TESTSCRIPTS) $(INSTALL_LIB_INSTALLS)
-inc : $(COMMON_INC) $(INSTALL_INC) $(INSTALL_CONFIGS)
+inc: $(COMMON_INC) $(INSTALL_INC) $(INSTALL_CONFIGS) $(INSTALLS_CFG) \
+ $(INSTALL_HTMLS) $(INSTALLS_PERL_MODULES) $(INSTALL_SCRIPTS) \
+ $(INSTALL_DOCS)
-buildInstall : \
- $(INSTALL_SCRIPTS) $(INSTALL_PROD) $(INSTALL_MUNCHS) \
+buildInstall: \
+ $(INSTALL_PROD) $(INSTALL_MUNCHS) \
$(INSTALL_TCLLIBS) $(INSTALL_TCLINDEX) \
$(INSTALL_OBJS) \
- $(INSTALL_DOCS) \
- $(INSTALL_HTMLS) \
$(INSTALL_TEMPLATE) \
$(INSTALL_BIN_INSTALLS)
@@ -171,9 +192,9 @@ ifdef RES
@$(RM) *$(RES)
endif
-# Sort mkdir targets to remove duplicates & make parents first
-$(DIRECTORY_TARGETS):
- $(MKDIR) $(sort $@)
+# Sort directories to remove duplicates & make parents first
+$(sort $(DIRECTORY_TARGETS)):
+ $(MKDIR) $@
# Install LIB_INSTALLS libraries before linking executables
$(TESTPRODNAME) $(PRODNAME): | $(INSTALL_LIB_INSTALLS)
@@ -185,7 +206,7 @@ endif
# RELEASE file consistency checking
checkRelease:
- $(CONVERTRELEASE) checkRelease
+ +$(CONVERTRELEASE) checkRelease
warnRelease:
-$(CONVERTRELEASE) checkRelease
noCheckRelease:
@@ -193,18 +214,25 @@ ifeq ($(EPICS_HOST_ARCH),$(T_A))
$(info Warning: RELEASE file consistency checks have been disabled)
endif
+# $(FINAL_DIR) signals eventual install locations to makeRPath script
+$(TESTPRODNAME): FINAL_DIR=.
+$(PRODNAME): FINAL_DIR=$(INSTALL_BIN)
+$(TESTSHRLIBNAME): FINAL_DIR=.
+$(SHRLIBNAME): FINAL_DIR=$(INSTALL_SHRLIB)
+$(LOADABLE_SHRLIBNAME): FINAL_DIR=$(INSTALL_SHRLIB)
+
#---------------------------------------------------------------
# The order of the following rules is
# VERY IMPORTANT !!!!
$(TESTPRODNAME) $(PRODNAME): $(PRODUCT_OBJS) $(PROD_RESS) $(PROD_DEPLIBS)
-$(TESTPRODNAME) $(PRODNAME): %$(EXE):
+$(TESTPRODNAME) $(PRODNAME): %$(EXE): | $(INSTALL_LIB)
@$(RM) $@
- $(DEBUGCMD) $(LINK.cpp)
+ $(LINK.cpp)
$(MT_EXE_COMMAND)
-%_ctdt$(OBJ) : %_ctdt.c
+%_ctdt$(OBJ): %_ctdt.c
@$(RM) $@
$(COMPILE.ctdt) $<
@@ -222,9 +250,9 @@ $(TESTPRODNAME) $(PRODNAME): %$(EXE):
# Cancel GNUMake's built-in rules, which don't have our _INC
# dependencies so could get used in some circumstances (gdd)
-%.o : %.c
-%.o : %.cc
-%.o : %.cpp
+%.o: %.c
+%.o: %.cc
+%.o: %.cpp
# Include files are order-only prerequisites for compilation:
%$(OBJ): %.c | $(COMMON_INC) $(INSTALL_INC)
@@ -258,7 +286,7 @@ YACCOPT ?= $($*_YACCOPT)
# must be a separate rule since when not using '-d' the
# prefix for .h will be different then .c
-%.h : %.c %.y
+%.h: %.c %.y
%.c: %.l
@$(RM) $@
@@ -302,6 +330,10 @@ $(LOADABLE_SHRLIBNAME): $(LOADABLE_SHRLIB_PREFIX)%$(LOADABLE_SHRLIB_SUFFIX):
$(LINK.shrlib)
$(MT_DLL_COMMAND)
+$(LIBNAME) $(SHRLIBNAME) $(LOADABLE_SHRLIBNAME): | $(INSTALL_LIB)
+$(INSTALL_LIB):
+ @$(MKDIR) $@
+
#---------------------------------------------------------------
# C++ munching for VxWorks
@@ -332,25 +364,35 @@ $(MODNAME): %$(MODEXT): %$(EXE)
@$(RM) $@
$(LINK.mod)
+#---------------------------------------------------------------
+# Generate Perl include path module
+%ModuleDirs.pm: $(wildcard $(TOP)/configure/RELEASE*)
+ @$(MKDIR) $(dir $@)
+ $(CONVERTRELEASE) -T $(TOP) $@
+
#---------------------------------------------------------------
# Automated testing
runtests: run-tap-tests
-run-tap-tests: $(TESTSCRIPTS.t)
+run-tap-tests: | build
ifneq ($(TESTSCRIPTS.t),)
ifdef RUNTESTS_ENABLED
- $(PROVE) --failures --color $^ || $(PROVE_FAILURE)
+ $(ECHO) "$(PROVE) $(TESTSCRIPTS.t)"
+ @$(PROVE) $(TESTSCRIPTS.t) || $(PROVE_FAILURE)
endif
endif
tapfiles: $(TAPFILES)
junitfiles: $(JUNITFILES)
+# prevent deletion of partial output from failing tests
+.PRECIOUS: $(TAPFILES) $(JUNITFILES)
test-results: tap-results
tap-results: $(TAPFILES)
ifneq ($(strip $(TAPFILES)),)
ifdef RUNTESTS_ENABLED
- $(PROVE.tap) --failures --color $^ || $(PROVE_FAILURE)
+ $(ECHO) "$(PROVE.tap) $(TAPFILES)"
+ @$(PROVE.tap) $(TAPFILES) || $(PROVE_FAILURE)
endif
CURRENT_TAPFILES := $(wildcard $(TAPFILES))
@@ -358,45 +400,71 @@ CURRENT_JUNITFILES := $(wildcard $(JUNITFILES))
endif
clean-tests:
-ifneq ($(CURRENT_TAPFILES),)
- $(RM) $(CURRENT_TAPFILES)
+ifneq ($(CURRENT_TAPFILES)$(TAPS_FAILED_LOG),)
+ $(RM) $(CURRENT_TAPFILES) $(TAPS_FAILED_LOG)
endif
ifneq ($(CURRENT_JUNITFILES),)
$(RM) $(CURRENT_JUNITFILES)
endif
# A .tap file is the output from running the associated test script
-$(TAPFILES.t): %.tap: %.t
+$(TAPFILES.t): %.tap: %.t | build
ifdef RUNTESTS_ENABLED
- -$(PERL) $< -tap > $@
+ $(ECHO) "$(PERL) $< -tap > $@"
+ @$(PERL) $< -tap > $@ || $(TAPFILE_FAILURE)
endif
-$(JUNITFILES.t): %.xml: %.tap
+$(JUNITFILES.t): %-results.xml: %.tap
$(TAPTOJUNIT) --puretap --output $@ --input $< $*
# If there's a perl test script (.plt) available, use it
%.t: ../%.plt
@$(RM) $@
- $(CP) $< $@
+ $(EXPAND_TOOL) -t $(INSTALL_LOCATION) -a $(T_A) $< $@
# Test programs (.t files) must be written in Perl.
# Generate a perl program to exec the real test binary.
%.t: %$(EXE) $(TOOLS)/makeTestfile.pl
@$(RM) $@
- $(PERL) $(TOOLS)/makeTestfile.pl $@ $<
+ $(PERL) $(TOOLS)/makeTestfile.pl $(T_A) $(EPICS_HOST_ARCH) $@ $<
+
+#---------------------------------------------------------------
+# Generate $(API_HEADER) files on request (%API.h)
+
+ifdef API_HEADER
+# Install them
+INC += $(API_HEADER)
+
+# Ensure we generate them early enough
+INSTALL_API_HEADERS = $(addprefix $(INSTALL_INCLUDE)/,$(API_HEADER))
+$(filter-out $(INSTALL_API_HEADERS), $(INSTALL_INC)) $(HDEPENDS_FILES): \
+ | $(INSTALL_API_HEADERS)
+
+# How to make one
+$(COMMON_DIR)/%API.h: $(TOOLS)/makeAPIheader.pl
+ @$(RM) $@
+ $(PERL) $(TOOLS)/makeAPIheader.pl -o $@ $(@:$(COMMON_DIR)/%API.h=%)
+endif
+
+# Generate header with version number from VCS
+
+ifneq ($(GENVERSION),)
+$(COMMON_DIR)/$(GENVERSION): FORCE
+ $(GENVERSIONHEADER) -t $(TOP) -N $(GENVERSIONMACRO) -V "$(GENVERSIONDEFAULT)" $@
+endif
#---------------------------------------------------------------
# Install rules for BIN_INSTALLS and LIB_INSTALLS
define BIN_INSTALLS_template
-$$(INSTALL_BIN)/$$(notdir $(1)) : $(1)
+$$(INSTALL_BIN)/$$(notdir $(1)): $(1)
$(ECHO) "Installing $$( build directory.
+# make PRINT.T_A
+
+PRINT_Var = $(@:PRINT.%=%)
+PRINT.%:
+ @+echo $(PRINT_Var) = '$($(PRINT_Var))'
+
+.PHONY: PRINT PRINT.%
+
+
+# Clean rules for recursively deleting editor backup files
+# and dependency (.d) files from CWD and below.
+
+cvsclean:
+ $(PERL) $(CVSCLEAN)
+depclean:
+ $(PERL) $(DEPCLEAN)
+
+.PHONY: cvsclean depclean
+
+
+# User specific rules
+#
+-include $(HOME)/configure/RULES_USER
diff --git a/configure/RULES_DIRS b/configure/RULES_DIRS
index 92d2035dc..f47df4a53 100644
--- a/configure/RULES_DIRS
+++ b/configure/RULES_DIRS
@@ -99,7 +99,4 @@ $(ARCHS) $(ACTIONS) $(actionArchTargets) :%: \
.PHONY : $(dirActionArchTargets)
.PHONY : $(actionArchTargets)
-
-# User specific rules
-#
--include $(HOME)/configure/RULES_USER
+include $(CONFIG)/RULES_COMMON
diff --git a/configure/RULES_EXPAND b/configure/RULES_EXPAND
index 51657ebd8..b523cb5e1 100644
--- a/configure/RULES_EXPAND
+++ b/configure/RULES_EXPAND
@@ -1,30 +1,78 @@
-# /configure/RULES_EXPAND
+#*************************************************************************
+# 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)
#---------------------------------------------------------------
-# Variable expansion
+# 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
+EXPAND_TOOL ?= $(PERL) $(TOOLS)/expandVars.pl $(QUIET_FLAG)
-EXPANDFLAGS += -t $(INSTALL_LOCATION) -a $(T_A)
-EXPANDFLAGS += $(addprefix -D ,$(EXPAND_VARS))
+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)))")
-# The names of files to be expanded must end with '@'
+# Output files
EXPANDED = $(EXPAND:%@=%)
+EXPANDED_COMMON = $(EXPAND_COMMON:%@=$(COMMON_DIR)/%)
$(EXPANDED): %: %@
$(ECHO) "Expanding $< to $@"
- @$(RM) $@
- @$(EXPAND_TOOL) $(EXPANDFLAGS) $($@_EXPANDFLAGS) $< $@
+ $(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)
+ @$(RM) $(EXPANDED) $(EXPANDED_COMMON)
-.PRECIOUS: $(EXPANDED)
+.PRECIOUS: $(EXPANDED) $(EXPANDED_COMMON)
.PHONY: expand_clean
#---------------------------------------------------------------
@@ -33,8 +81,10 @@ expand_clean:
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
@@ -45,8 +95,10 @@ $(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) $$@
@@ -61,4 +113,3 @@ $1$(DEP):
endef
$(foreach asy, $(sort $(COMMON_ASSEMBLIES) $(ASSEMBLIES)), \
$(eval $(call ASSEMBLY_DEP_template,$(strip $(asy)))))
-
diff --git a/configure/RULES_FILE_TYPE b/configure/RULES_FILE_TYPE
index 28cc74bd4..5936fd5e0 100644
--- a/configure/RULES_FILE_TYPE
+++ b/configure/RULES_FILE_TYPE
@@ -7,9 +7,11 @@
# in the file LICENSE that is included with this distribution.
#*************************************************************************
-# Include /configure/RULES_BUILD from tops defined in RELEASE* files
+# Include /configure/RULES_BUILD from tops defined in RELEASE* files,
+# excluding EPICS_BASE
#
-RELEASE_RULES_BUILDS = $(foreach top, $(RELEASE_TOPS), \
+RELEASE_RULES_BUILDS = $(foreach top, \
+ $(filter-out EPICS_BASE, $(RELEASE_TOPS)), \
$(wildcard $($(top))/configure/RULES_BUILD))
ifneq ($(RELEASE_RULES_BUILDS),)
include $(RELEASE_RULES_BUILDS)
@@ -23,7 +25,7 @@ ifneq ($(RELEASE_CFG_RULES),)
include $(RELEASE_CFG_RULES)
endif
-# If this is not BASE then include /configure/RULES_BUILD
+# If this is not BASE then include /configure/RULES_BUILD
#
ifeq ($(wildcard $(TOP)/configure/CONFIG_BASE_VERSION),)
TOP_RULES_BUILDS = $(wildcard $(TOP)/configure/RULES_BUILD)
@@ -67,7 +69,3 @@ file_type_clean:
@$(RM) $(foreach type, $(FILE_TYPE), $($(type)))
.PHONY : file_type_clean
-
-# User specific rules
-#
--include $(HOME)/configure/RULES_USER
diff --git a/configure/RULES_MODULES b/configure/RULES_MODULES
new file mode 100644
index 000000000..b8e18aecb
--- /dev/null
+++ b/configure/RULES_MODULES
@@ -0,0 +1,55 @@
+#*************************************************************************
+# EPICS BASE is distributed subject to a Software License Agreement found
+# in file LICENSE that is included with this distribution.
+#*************************************************************************
+
+# Support modules can use these rules to build submodules too.
+#
+# The requirements to do so are:
+# 1. Create a file CONFIG_SITE.local in the same directory as the
+# Makefile, which defines these variables (the last one is empty):
+# PARENT_MODULE - The name submodules call their parent
+# INSTALL_LOCATION := $($(PARENT_MODULE))
+# CONFIG_INSTALLS =
+# 2. The Makefile must set TOP and include $(TOP)/configure/CONFIG and
+# CONFIG_SITE.local
+# 3. Submodules are added to the SUBMODULES variable in the Makefile
+# 4. Dependencies between submodules must be set using
+# _DEPEND_DIRS =
+# 5. The Makefile must end by including $(TOP)/configure/RULES_MODULES
+# 6. Submodules must have a configure/RELEASE file that contains
+# -include $(TOP)/../RELEASE.$(EPICS_HOST_ARCH).local
+# 7. Submodules must have a configure/CONFIG_SITE file that contains
+# -include $(TOP)/../CONFIG_SITE.local
+
+# Add checked-out submodules to DIRS, unless INSTALL_LOCATION is empty
+LIVE_SUBMODULES = $(subst /Makefile,, \
+ $(wildcard $(addsuffix /Makefile, $(SUBMODULES))))
+live = $(if $(wildcard $(INSTALL_CONFIG)/RULES_TOP),LIVE,DEAD)
+DIRS += $($(live)_SUBMODULES)
+
+include $(CONFIG)/RULES_DIRS
+
+RELEASE_LOCAL := RELEASE.$(EPICS_HOST_ARCH).local
+
+# Ensure that RELEASE..local exists before doing anything else
+all host $(DIRS) $(ARCHS) $(ACTIONS) $(dirActionTargets) $(dirArchTargets) \
+ $(dirActionArchTargets) $(actionArchTargets): | $(RELEASE_LOCAL)
+
+# Convenience target
+RELEASE.host: $(RELEASE_LOCAL)
+
+$(RELEASE_LOCAL): Makefile $(CONFIG)/CONFIG_SITE \
+ $(wildcard $(CONFIG)/CONFIG_SITE.local)
+ $(ECHO) Creating $@ with
+ $(ECHO) " $(PARENT_MODULE) = $(INSTALL_ABSOLUTE)"
+ @echo $(PARENT_MODULE) = $(INSTALL_ABSOLUTE)> $@
+
+.PHONY: RELEASE.host
+
+# Testing: Combine test failure logs from the live submodules
+TESTS_FAILED_LOGS = $(wildcard $(addsuffix /$(TESTS_FAILED_LOG), \
+ $(LIVE_SUBMODULES)))
+runtests test-results: % : | $(addsuffix $(DIVIDER)%, $(LIVE_SUBMODULES))
+ $(if $(TESTS_FAILED_LOGS), \
+ @$(CAT) $(TESTS_FAILED_LOGS)>> $(TESTS_FAILED_PATH))
diff --git a/configure/RULES_OCTAVE b/configure/RULES_OCTAVE
index a06fb075a..1ec4cc7b2 100644
--- a/configure/RULES_OCTAVE
+++ b/configure/RULES_OCTAVE
@@ -1,11 +1,10 @@
#*************************************************************************
-# Copyright (c) 2002 The University of Chicago, as Operator of Argonne
+# Copyright (c) 2006 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 Versions 3.13.7
-# and higher are distributed subject to a Software License Agreement found
-# in file LICENSE that is included with this distribution.
+# EPICS BASE is distributed subject to a Software License Agreement found
+# in the file LICENSE that is included with this distribution.
#*************************************************************************
# Octave definitions and rules
diff --git a/configure/RULES_TARGET b/configure/RULES_TARGET
index 4e9cb6e05..06f8a447d 100644
--- a/configure/RULES_TARGET
+++ b/configure/RULES_TARGET
@@ -1,18 +1,13 @@
#*************************************************************************
-# Copyright (c) 2002 The University of Chicago, as Operator of Argonne
+# 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 Versions 3.13.7
-# and higher are distributed subject to a Software License Agreement found
-# in file LICENSE that is included with this distribution.
+# EPICS BASE is distributed subject to a Software License Agreement found
+# in the file LICENSE that is included with this distribution.
#*************************************************************************
-#
-# RULES_TARGET
-#
-# This file is to be maintained by the community.
-#
-#-----------------------------------------------------------------------
+
+# RULES_TARGET
define TARGET_template
$(1)_$(2) += $$(if $$(strip $$($(1)_$(2)_$$(OS_CLASS))), \
@@ -20,13 +15,12 @@ $(1)_$(2) += $$(if $$(strip $$($(1)_$(2)_$$(OS_CLASS))), \
$$($(1)_$(2)_DEFAULT))
endef
-$(foreach type, SRCS RCS OBJS LDFLAGS OBJLIBS LDOBJS SYS_LIBS , \
+$(foreach type, SRCS RCS OBJS LDFLAGS LDOBJS SYS_LIBS , \
$(foreach target, $(PROD) $(TESTPROD) $(LIBRARY) $(TESTLIBRARY) $(LOADABLE_LIBRARY) , \
$(eval $(call TARGET_template,$(strip $(target)),$(type)))))
#-----------------------------------------------------------------------
-# This define block requires GNU make 3.81
define PROD_template
ifeq ($$(strip $$($(1)_OBJS) $$($(1)_SRCS) $$(PRODUCT_OBJS)),)
$(1)_OBJS = $(1)$$(OBJ)
@@ -100,12 +94,20 @@ $(1)_DLL_DEPLIBS=$$(foreach lib, $$($(1)_DLL_LIBS), \
$$(LIB_PREFIX)$(1)$$(LIB_SUFFIX):$$($(1)_OBJSNAME) $$($(1)_RESS)
$$(LIB_PREFIX)$(1)$$(LIB_SUFFIX):$$($(1)_DEPLIBS)
+ifneq ($$($(1)_API),)
+$$(LIB_PREFIX)$(1)$$(LIB_SUFFIX): API_CPPFLAGS += -DBUILDING_$$($(1)_API)_API
+endif
+
ifeq ($$(SHARED_LIBRARIES),YES)
ifdef SHRLIB_SUFFIX
$$(SHRLIB_PREFIX)$(1)$$(SHRLIB_SUFFIX):$$($(1)_OBJSNAME) $$($(1)_RESS)
$$(SHRLIB_PREFIX)$(1)$$(SHRLIB_SUFFIX):$$($(1)_DEPLIBS)
$$(SHRLIB_PREFIX)$(1)$$(SHRLIB_SUFFIX):$$($(1)_DLL_DEPLIBS)
+
+ifneq ($$($(1)_API),)
+$$(SHRLIB_PREFIX)$(1)$$(SHRLIB_SUFFIX): API_CPPFLAGS += -DBUILDING_$$($(1)_API)_API
+endif
endif
endif
@@ -146,10 +148,14 @@ $(1)_DLL_DEPLIBS=$$(foreach lib, $$($(1)_DLL_LIBS),\
$$(LOADABLE_SHRLIB_PREFIX)$(1)$$(LOADABLE_SHRLIB_SUFFIX):$$($(1)_OBJSNAME) $$($(1)_RESS)
$$(LOADABLE_SHRLIB_PREFIX)$(1)$$(LOADABLE_SHRLIB_SUFFIX):$$($(1)_DEPLIBS)
$$(LOADABLE_SHRLIB_PREFIX)$(1)$$(LOADABLE_SHRLIB_SUFFIX):$$($(1)_DLL_DEPLIBS)
+
+ifneq ($$($(1)_API),)
+$$(LOADABLE_SHRLIB_PREFIX)$(1)$$(LOADABLE_SHRLIB_SUFFIX): \
+ API_CPPFLAGS += -DBUILDING_$$($(1)_API)_API
+endif
endef
$(foreach target, $(LOADABLE_LIBRARY), \
$(eval $(call LOADABLE_LIBRARY_template,$(strip $(target)))))
#-----------------------------------------------------------------------
-
diff --git a/configure/RULES_TOP b/configure/RULES_TOP
index d77e2a6c3..50079b446 100644
--- a/configure/RULES_TOP
+++ b/configure/RULES_TOP
@@ -9,77 +9,120 @@
include $(CONFIG)/RULES_DIRS
-distclean: realclean cvsclean realuninstall
+# Disable most top rules when installing into a parent's tree, indicated
+# by PARENT_MODULE being set in the modules/CONFIG_SITE.local file and
+# INSTALL_LOCATION pointing to the the same place as in the parent.
+ifeq ($(origin PARENT_MODULE),file)
+ ifeq ($(INSTALL_LOCATION),$($(PARENT_MODULE)))
+ DISABLE_TOP_RULES=YES
+ endif
+endif
+
+ifndef DISABLE_TOP_RULES
+ #
+ # Rules for a regular application top directory
+ #
-CVSCLEAN = $(call FIND_TOOL,cvsclean.pl)
-cvsclean:
- $(PERL) $(CVSCLEAN)
+ # When run by 'make distclean' the realuninstall target also
+ # removes any modules/RELEASE..local files
+ distclean: realclean cvsclean realuninstall
-realuninstall: uninstallDirs
+ realuninstall: uninstallDirs
$(RMDIR) $(INSTALL_LOCATION_BIN) $(INSTALL_LOCATION_LIB)
+ ifeq (modules,$(filter modules,$(DIRS)))
+ ifeq (distclean,$(filter distclean,$(MAKECMDGOALS)))
+ $(RM) $(wildcard modules/RELEASE.*.local)
+ endif
+ endif
-UNINSTALL_DIRS += $(INSTALL_DBD) $(INSTALL_INCLUDE) $(INSTALL_DOC) \
- $(INSTALL_HTML) $(INSTALL_TEMPLATES) $(INSTALL_DB) $(DIRECTORY_TARGETS)
-uninstallDirs:
+ UNINSTALL_DIRS += $(INSTALL_DB) $(INSTALL_DBD) $(INSTALL_DOC) $(INSTALL_HTML)
+ UNINSTALL_DIRS += $(INSTALL_INCLUDE) $(INSTALL_TEMPLATES) $(DIRECTORY_TARGETS)
+ ifneq ($(INSTALL_LOCATION),$(TOP))
+ UNINSTALL_DIRS += $(INSTALL_CONFIG)
+ endif
+ uninstallDirs:
$(RMDIR) $(UNINSTALL_DIRS)
-EMPTY_INSTALL_DIRS = \
- $(if $(wildcard $(INSTALL_LOCATION_BIN)/*),,$(INSTALL_LOCATION_BIN)) \
- $(if $(wildcard $(INSTALL_LOCATION_LIB)/*),,$(INSTALL_LOCATION_LIB))
-uninstall: archuninstall uninstallDirs
+ # Remove the bin and lib directories if they have no sub-directories
+ #
+ EMPTY_INSTALL_DIRS = \
+ $(if $(wildcard $(INSTALL_LOCATION_BIN)/*),,$(INSTALL_LOCATION_BIN)) \
+ $(if $(wildcard $(INSTALL_LOCATION_LIB)/*),,$(INSTALL_LOCATION_LIB))
+ uninstall: archuninstall uninstallDirs
$(RMDIR) $(EMPTY_INSTALL_DIRS)
-archuninstall: $(addprefix uninstall$(DIVIDER),$(BUILD_ARCHS))
+ archuninstall: $(addprefix uninstall$(DIVIDER),$(BUILD_ARCHS))
-uninstall$(DIVIDER)%:
+ uninstall$(DIVIDER)%:
$(RMDIR) $(addsuffix /$(subst uninstall$(DIVIDER),,$@), \
$(INSTALL_LOCATION_BIN) $(INSTALL_LOCATION_LIB))
+ # Only run this at the top of the parent
+ runtests test-results:
+ @$(SHOWTESTFAILURES)
+
+else
+ #
+ # Using a disabled rule aborts
+ #
+
+ distclean uninstall realuninstall archuninstall:
+ $(error Target '$@' not available in a submodule)
+
+endif # DISABLE_TOP_RULES
+
+# Clean out old results
before-runtests before-test-results: rm-failure-file
rm-failure-file:
- @$(RM) $(TEST_FAILURE_FILE)
-runtests test-results:
- $(PERL) $(TOOLS)/testFailures.pl $(TEST_FAILURE_FILE)
+ $(RM) $(TESTS_FAILED_PATH)
help:
@echo "Usage: gnumake [options] [target] ..."
@echo "Targets supported by all Makefiles:"
@echo " all - Same as install (default rule)"
- @echo " inc - Installs header files"
+ @echo " inc - Installs header, dbd and html files"
@echo " build - Builds and installs all targets"
@echo " install - Builds and installs all targets"
- @echo " buildInstall - Same as install (deprecated)"
@echo " clean - Removes the O. dirs created by running make"
@echo " In O. dir, clean removes build created files"
@echo " realclean - Removes ALL O. dirs"
@echo " Cannot be used within an O. dir"
@echo " rebuild - Same as clean install"
@echo " archclean - Removes O. dirs but not O.Common dir"
- @echo " runtests - Run self-tests, summarize results"
+ @echo " depclean - Removes .d files from all O. dirs."
+ @echo " cvsclean - Removes backup files etc. from all dirs below"
+ @echo " runtests - Run self-tests, summarize results immediately"
+ @echo " tapfiles - Run self-tests, save to O./*.tap files"
+ @echo " test-results - Summarize all O./*.tap files"
+ @echo " clean-tests - Removes all O./*.tap files"
@echo "\"Partial\" build targets supported by Makefiles:"
@echo " host - Builds and installs $(EPICS_HOST_ARCH) only."
@echo " inc$(DIVIDER) - Installs only header files."
@echo " build$(DIVIDER) - Builds and installs only."
@echo " install$(DIVIDER) - Builds and installs only."
@echo " clean$(DIVIDER) - Cleans binaries in O. dirs only."
- @echo " uninstall$(DIVIDER) - Remove bin & lib directories for only."
@echo "Targets supported by top level Makefile:"
+ifndef DISABLE_TOP_RULES
@echo " archuninstall - Remove bin & lib directories created by this hostarch."
+ @echo " uninstall$(DIVIDER) - Remove bin & lib directories for only."
@echo " uninstall - Remove install directories created by this hostarch."
@echo " realuninstall - Removes ALL install dirs"
- @echo " distclean - Same as realclean cvsclean realuninstall."
- @echo " cvsclean - Removes cvs .#* files in all dirs of directory tree"
+ @echo " distclean - Does realclean cvsclean realuninstall and deletes any"
+ @echo " generated modules/RELEASE..local files"
+endif
@echo " help - Prints this list of valid make targets "
- @echo "Indiv. object targets are supported by O. level Makefile .e.g"
+ @echo "Object targets are supported by the O. level Makefile .e.g"
@echo " xxxRecord.o"
-.PHONY: distclean cvsclean realuninstall archuninstall uninstallDirs
-.PHONY: uninstall rm-failure-file help
+.PHONY: distclean uninstall rm-failure-file help
+.PHONY: realuninstall archuninstall uninstallDirs
-# Include /cfg/TOP_RULES* files from tops defined in RELEASE* files
-#
-RELEASE_CFG_TOP_RULES = $(foreach top, $(RELEASE_TOPS), \
- $(wildcard $($(top))/cfg/TOP_RULES*))
-ifneq ($(RELEASE_CFG_TOP_RULES),)
- include $(RELEASE_CFG_TOP_RULES)
+ifndef DISABLE_TOP_RULES
+ # Include /cfg/TOP_RULES* files from tops defined in RELEASE* files
+ #
+ RELEASE_CFG_TOP_RULES = $(foreach top, $(RELEASE_TOPS), \
+ $(wildcard $($(top))/cfg/TOP_RULES*))
+ ifneq ($(RELEASE_CFG_TOP_RULES),)
+ include $(RELEASE_CFG_TOP_RULES)
+ endif
endif
diff --git a/configure/Sample.Makefile b/configure/Sample.Makefile
index a84ccbb45..e0e9675bf 100644
--- a/configure/Sample.Makefile
+++ b/configure/Sample.Makefile
@@ -3,8 +3,8 @@
# National Laboratory.
# Copyright (c) 2002 The Regents of the University of California, as
# Operator of Los Alamos National Laboratory.
-# EPICS BASE Versions 3.13.7
-# and higher are distributed subject to a Software License Agreement found
+# SPDX-License-Identifier: EPICS
+# EPICS Base is distributed subject to a Software License Agreement found
# in file LICENSE that is included with this distribution.
#*************************************************************************
# Makefile for base/src/sample
diff --git a/configure/os/CONFIG.Common.RTEMS b/configure/os/CONFIG.Common.RTEMS
index 8f65b08f7..c58ac7bdc 100644
--- a/configure/os/CONFIG.Common.RTEMS
+++ b/configure/os/CONFIG.Common.RTEMS
@@ -27,9 +27,14 @@ ifneq ($(CONFIG),$(TOP)/configure)
-include $(TOP)/configure/CONFIG_SITE.Common.RTEMS
endif
+#--------------------------------------------------
+# Set RTEMS_BSP and GNU_TARGET if not already done
+RTEMS_BSP ?= $(subst RTEMS-,,$(T_A))
+GNU_TARGET ?= $(RTEMS_TARGET_CPU)-rtems
+
#-------------------------------------------------------
# Pick up the RTEMS tool/path definitions from the RTEMS BSP directory.
-include $(RTEMS_BASE)/$(RTEMS_TARGET_CPU)-rtems$(RTEMS_VERSION)/$(subst RTEMS-,,$(T_A))/Makefile.inc
+include $(RTEMS_BASE)/$(GNU_TARGET)$(RTEMS_VERSION)/$(RTEMS_BSP)/Makefile.inc
include $(RTEMS_CUSTOM)
include $(CONFIG.CC)
@@ -37,7 +42,7 @@ include $(CONFIG.CC)
# RTEMS cross-development tools
CC = $(RTEMS_TOOLS)/bin/$(CC_FOR_TARGET) $(GCCSPECS) -fasm
CCC = $(RTEMS_TOOLS)/bin/$(CXX)
-CPP = $(RTEMS_TOOLS)/bin/$(CC_FOR_TARGET) -x c -E
+CPP = $(RTEMS_TOOLS)/bin/$(CC_FOR_TARGET) -x c -E $(GCCSPECS)
AR = $(RTEMS_TOOLS)/bin/$(AR_FOR_TARGET)
LD = $(RTEMS_TOOLS)/bin/$(LD_FOR_TARGET) -r
@@ -58,9 +63,9 @@ CFLAGS = $($(BUILD_CLASS)_CFLAGS) $(POSIX_CFLAGS) $(OPT_CFLAGS)\
CXXFLAGS = $($(BUILD_CLASS)_CXXFLAGS) $(POSIX_CXXFLAGS) $(OPT_CXXFLAGS)\
$(DEBUG_CXXFLAGS) $(PIPE_CFLAGS) $(WARN_CXXFLAGS) $(TARGET_CXXFLAGS)\
$(USR_CXXFLAGS) $(CMD_CXXFLAGS) $(ARCH_DEP_CXXFLAGS) $(CODE_CXXFLAGS)\
- $(STATIC_CXXCFLAGS) $(OP_SYS_CXXFLAGS) $(LIBRARY_SRC_CFLAGS)
+ $(STATIC_CXXFLAGS) $(OP_SYS_CXXFLAGS) $(LIBRARY_SRC_CFLAGS)
-LDFLAGS = $(OPT_LDFLAGS) $(TARGET_LDFLAGS) $(USR_LDFLAGS) $(CMD_LDFLAGS)\
+LDFLAGS += $(OPT_LDFLAGS) $(TARGET_LDFLAGS) $(USR_LDFLAGS) $(CMD_LDFLAGS)\
$(POSIX_LDFLAGS) $(ARCH_DEP_LDFLAGS) $(DEBUG_LDFLAGS) $(OP_SYS_LDFLAGS)\
$($(BUILD_CLASS)_LDFLAGS) $(RUNTIME_LDFLAGS) $(CODE_LDFLAGS)
@@ -72,7 +77,10 @@ CPPFLAGS += $($(BUILD_CLASS)_CPPFLAGS) $(POSIX_CPPFLAGS) $(OPT_CPPFLAGS)\
$(USR_CPPFLAGS) $(CMD_CPPFLAGS) $(ARCH_DEP_CPPFLAGS) $(OP_SYS_CPPFLAGS)\
$(OP_SYS_INCLUDE_CPPFLAGS) $(CODE_CPPFLAGS)
-ECHO = @$(if $(findstring s,$(MFLAGS)),$(NOP),echo)
+ECHO = @$(if $(make-s),$(NOP),echo)
+
+# Originally set in os/CONFIG.UnixCommon.Common
+MKDIR = mkdir -p
#--------------------------------------------------
# Although RTEMS uses gcc, it wants to use gcc its own way
@@ -91,20 +99,71 @@ MODEXT=.obj
OS_CLASS = RTEMS
#--------------------------------------------------
-# Operating system flags
-OP_SYS_LDLIBS += -lrtemsCom -lc -lrtemscpu -lCom -lnfs -lm
-OP_SYS_LDFLAGS += $(CPU_CFLAGS) -u Init \
+# Operating system compile & link flags
+OP_SYS_CFLAGS += -D__LINUX_ERRNO_EXTENSIONS__
+
+# Has RTEMS been built with the internal legacy stack?
+ifeq ($(RTEMS_LEGACY_NETWORKING_INTERNAL),yes)
+RTEMS_HAS_NETWORKING = yes
+RTEMS_NETWORKING = legacy_internal
+endif
+
+# Has RTEMS been built with the legacy stack as a separate package?
+ifeq ($(RTEMS_LEGACY_NETWORKING),yes)
+RTEMS_HAS_NETWORKING = yes
+RTEMS_NETWORKING = legacy
+endif
+
+# Has RTEMS been built with the libbsd stack as a separate package?
+ifeq ($(RTEMS_BSD_NETWORKING),yes)
+RTEMS_HAS_NETWORKING = yes
+RTEMS_NETWORKING = bsd
+endif
+
+RTEMS_LEGACY_NET_LIB_no=
+
+# Legacy network with RTEMS 5 and earlier
+RTEMS_NET_LIB_legacy_internal=-lnfs
+OP_SYS_CFLAGS_NET_legacy_internal = -DRTEMS_LEGACY_STACK
+
+# Legacy network with RTEMS 6 is a separate package and library
+RTEMS_NET_LIB_legacy=-lnfs -lnetworking -lnfs
+OP_SYS_CFLAGS_NET_legacy = -DRTEMS_LEGACY_STACK
+
+# LibBSD network with RTEMS 5 and 6 is a separate package and library
+RTEMS_NET_LIB_bsd=-lbsd
+OP_SYS_CFLAGS_NET_bsd = -DRTEMS_LIBBSD_STACK
+
+# Set the networking flags
+OP_SYS_CFLAGS += $(OP_SYS_CFLAGS_NET_$(RTEMS_NETWORKING))
+
+POSIX_CPPFLAGS_posix = -D_GNU_SOURCE -D_DEFAULT_SOURCE
+POSIX_CPPFLAGS = $(POSIX_CPPFLAGS_$(OS_API))
+
+OP_SYS_LDLIBS_posix_NET_yes = -ltftpfs -lz -ltelnetd
+OP_SYS_LDLIBS_posix_NET_yes += $(RTEMS_NET_LIB_$(RTEMS_NETWORKING))
+OP_SYS_LDLIBS_posix_NET_no = -ltftpfs -lz
+OP_SYS_LDLIBS_score_NET_yes = -lnfs
+OP_SYS_LDLIBS_score_NET_no = -lnfs
+OP_SYS_LDLIBS += -lrtemsCom -lCom
+OP_SYS_LDLIBS += $(OP_SYS_LDLIBS_$(OS_API)_NET_$(RTEMS_HAS_NETWORKING))
+OP_SYS_LDLIBS += -lrtemscpu -lc -lm
+
+OP_SYS_LDFLAGS_posix = -u POSIX_Init
+OP_SYS_LDFLAGS_score = -u Init \
$(PROJECT_RELEASE)/lib/no-dpmem.rel \
$(PROJECT_RELEASE)/lib/no-mp.rel \
$(PROJECT_RELEASE)/lib/no-part.rel \
$(PROJECT_RELEASE)/lib/no-signal.rel \
$(PROJECT_RELEASE)/lib/no-rtmon.rel
+OP_SYS_LDFLAGS += $(CPU_CFLAGS) $(OP_SYS_LDFLAGS_$(OS_API))
+# Settings for GeSys
MOD_SYS_LDFLAGS += $(CPU_CFLAGS) -Wl,-r -nostdlib
# Do not link against libraries which are part of the Generic Image
GESYS_LIBS += -lgcc
-GESYS_LIBS += -lc -lm -lrtemscpu -lrtemsbsp -lrtems++ -lbspExt
+GESYS_LIBS += -lc -lm -lrtemscpu -lrtemsbsp -lrtems++
GESYS_LIBS += -lcexp -ltecla_r -lspencer_regexp -lpmelf -lpmbfd
GESYS_LIBS += -lnfs -ltelnetd -lrtems-gdb-stub
diff --git a/configure/os/CONFIG.Common.RTEMS-at91rm9200ek b/configure/os/CONFIG.Common.RTEMS-at91rm9200ek
deleted file mode 100644
index 6f5f97732..000000000
--- a/configure/os/CONFIG.Common.RTEMS-at91rm9200ek
+++ /dev/null
@@ -1,13 +0,0 @@
-#
-# CONFIG.Common.RTEMS-at91rm9200ek
-# Author: Ralf Hartmann
-# BESSY
-# Ralf.Hartmann@bessy.de
-#
-# Atmel AT91RM9200-EK evaluation kit
-# using the AT91RM9200 ARM9-based 32-bit RISC microcontroller
-#
-# All RTEMS targets use the same Makefile fragment
-#
-RTEMS_TARGET_CPU=arm
-include $(CONFIG)/os/CONFIG.Common.RTEMS
diff --git a/configure/os/CONFIG.Common.RTEMS-beagleboneblack b/configure/os/CONFIG.Common.RTEMS-beagleboneblack
new file mode 100644
index 000000000..4b6107b05
--- /dev/null
+++ b/configure/os/CONFIG.Common.RTEMS-beagleboneblack
@@ -0,0 +1,18 @@
+#
+# CONFIG.Common.RTEMS-beaglebineblack
+# Author: Heinz Junkes
+#
+# All RTEMS targets use the same Makefile fragment
+#
+#EXE = .elf
+RTEMS_BSP = beagleboneblack
+RTEMS_TARGET_CPU = arm
+GNU_TARGET = arm-rtems
+
+OP_SYS_LDLIBS += -Wl,--gc-sections
+ARCH_DEP_LDFLAGS = -L$(RTEMS_BASE)/$(GNU_TARGET)$(RTEMS_VERSION)/beagleboneblack/lib/
+
+include $(CONFIG)/os/CONFIG.Common.RTEMS
+
+
+
diff --git a/configure/os/CONFIG.Common.RTEMS-beatnik b/configure/os/CONFIG.Common.RTEMS-beatnik
index aaf611638..b133fd489 100644
--- a/configure/os/CONFIG.Common.RTEMS-beatnik
+++ b/configure/os/CONFIG.Common.RTEMS-beatnik
@@ -5,16 +5,19 @@
# All RTEMS targets use the same Makefile fragment
#
EXE = .elf
+RTEMS_BSP = beatnik
RTEMS_TARGET_CPU = powerpc
GNU_TARGET = powerpc-rtems
-ARCH_DEP_CFLAGS += -DMY_DO_BOOTP=NULL
+# optimization trouble in postfix.c
+ARCH_DEP_CFLAGS += -DRTEMS_HAS_ALTIVEC
+#will use bootp
+#ARCH_DEP_CFLAGS += -DMY_DO_BOOTP=NULL
ARCH_DEP_CFLAGS += -DHAVE_MOTLOAD
ARCH_DEP_CFLAGS += -DRTEMS_NETWORK_CONFIG_MBUF_SPACE=2048
ARCH_DEP_CFLAGS += -DRTEMS_NETWORK_CONFIG_CLUSTER_SPACE=5120
-OP_SYS_LDLIBS += -lbspExt
-
MUNCH_SUFFIX = .boot
+MUNCHNAME = $(PRODNAME:%$(EXE)=%$(MUNCH_SUFFIX))
define MUNCH_CMD
$(RTEMS_TOOLS)/bin/$(OBJCOPY_FOR_TARGET) -O binary $< $@
endef
diff --git a/configure/os/CONFIG.Common.RTEMS-gen68360 b/configure/os/CONFIG.Common.RTEMS-gen68360
deleted file mode 100644
index a6663afc2..000000000
--- a/configure/os/CONFIG.Common.RTEMS-gen68360
+++ /dev/null
@@ -1,9 +0,0 @@
-#
-# Author: W. Eric Norum
-# Canadian Light Source
-# eric@cls.usask.ca
-#
-# All RTEMS targets use the same Makefile fragment
-#
-RTEMS_TARGET_CPU=m68k
-include $(CONFIG)/os/CONFIG.Common.RTEMS
diff --git a/configure/os/CONFIG.Common.RTEMS-mcp750 b/configure/os/CONFIG.Common.RTEMS-mcp750
deleted file mode 100644
index d834ad9ec..000000000
--- a/configure/os/CONFIG.Common.RTEMS-mcp750
+++ /dev/null
@@ -1,9 +0,0 @@
-#
-# Author: W. Eric Norum
-# Canadian Light Source
-# eric@cls.usask.ca
-#
-# All RTEMS targets use the same Makefile fragment
-#
-RTEMS_TARGET_CPU=ppc
-include $(CONFIG)/os/CONFIG.Common.RTEMS
diff --git a/configure/os/CONFIG.Common.RTEMS-mvme167 b/configure/os/CONFIG.Common.RTEMS-mvme167
deleted file mode 100644
index a6663afc2..000000000
--- a/configure/os/CONFIG.Common.RTEMS-mvme167
+++ /dev/null
@@ -1,9 +0,0 @@
-#
-# Author: W. Eric Norum
-# Canadian Light Source
-# eric@cls.usask.ca
-#
-# All RTEMS targets use the same Makefile fragment
-#
-RTEMS_TARGET_CPU=m68k
-include $(CONFIG)/os/CONFIG.Common.RTEMS
diff --git a/configure/os/CONFIG.Common.RTEMS-mvme2100 b/configure/os/CONFIG.Common.RTEMS-mvme2100
index 0ae64c791..930b33bad 100644
--- a/configure/os/CONFIG.Common.RTEMS-mvme2100
+++ b/configure/os/CONFIG.Common.RTEMS-mvme2100
@@ -5,13 +5,12 @@
# All RTEMS targets use the same Makefile fragment
#
EXE = .elf
+RTEMS_BSP = mvme2100
RTEMS_TARGET_CPU = powerpc
GNU_TARGET = powerpc-rtems
ARCH_DEP_CFLAGS += -DMY_DO_BOOTP=NULL
ARCH_DEP_CFLAGS += -DHAVE_PPCBUG
-OP_SYS_LDLIBS += -lbspExt
-
MUNCH_SUFFIX = .boot
define MUNCH_CMD
$(RTEMS_TOOLS)/bin/$(OBJCOPY_FOR_TARGET) -O binary -R .comment -S $< rtems
@@ -20,6 +19,7 @@ define MUNCH_CMD
$(PROJECT_RELEASE)/lib/bootloader.o \
--just-symbols=$< \
-b binary rtems.gz \
+ --no-warn-mismatch \
-T $(PROJECT_RELEASE)/lib/ppcboot.lds \
-Map $<.map
rm -f rtems.gz
diff --git a/configure/os/CONFIG.Common.RTEMS-mvme2700 b/configure/os/CONFIG.Common.RTEMS-mvme2700
index 899fab17f..3b43ae45b 100644
--- a/configure/os/CONFIG.Common.RTEMS-mvme2700
+++ b/configure/os/CONFIG.Common.RTEMS-mvme2700
@@ -10,15 +10,21 @@ MUNCH_SUFFIX = .boot
define MUNCH_CMD
$(RTEMS_TOOLS)/bin/$(OBJCOPY_FOR_TARGET) -O binary -R .comment -S $< rtems
gzip -f9 rtems
- $(RTEMS_TOOLS)/bin/$(LD_FOR_TARGET) -o $@ \
+ $(RTEMS_TOOLS)/bin/$(LD_FOR_TARGET) -o $@.elf \
$(PROJECT_RELEASE)/lib/bootloader.o \
--just-symbols=$< \
-b binary rtems.gz \
+ --no-warn-mismatch \
-T $(PROJECT_RELEASE)/lib/ppcboot.lds \
-Map $<.map
- rm -f rtems.gz
+ $(RTEMS_TOOLS)/bin/$(OBJCOPY_FOR_TARGET) -O binary $@.elf $@
+ rm -f rtems.gz $@.elf
endef
-OP_SYS_LDLIBS += -lbspExt
-
include $(CONFIG)/os/CONFIG.Common.RTEMS
+
+ifeq ($(shell test $(RTEMS_VERSION) -ge 5; echo $$?),0)
+RTEMS_BSP = mvme2700
+else
+RTEMS_BSP = mvme2307
+endif
diff --git a/configure/os/CONFIG.Common.RTEMS-mvme3100 b/configure/os/CONFIG.Common.RTEMS-mvme3100
index e94d46211..2cbf49a84 100644
--- a/configure/os/CONFIG.Common.RTEMS-mvme3100
+++ b/configure/os/CONFIG.Common.RTEMS-mvme3100
@@ -5,6 +5,7 @@
# All RTEMS targets use the same Makefile fragment
#
EXE = .elf
+RTEMS_BSP = mvme3100
RTEMS_TARGET_CPU = powerpc
GNU_TARGET = powerpc-rtems
ARCH_DEP_CFLAGS += -DMY_DO_BOOTP=NULL
@@ -12,8 +13,6 @@ ARCH_DEP_CFLAGS += -DHAVE_MOTLOAD
ARCH_DEP_CFLAGS += -DRTEMS_NETWORK_CONFIG_MBUF_SPACE=2048
ARCH_DEP_CFLAGS += -DRTEMS_NETWORK_CONFIG_CLUSTER_SPACE=5120
-OP_SYS_LDLIBS += -lbspExt
-
MUNCH_SUFFIX = .boot
define MUNCH_CMD
$(RTEMS_TOOLS)/bin/$(OBJCOPY_FOR_TARGET) -O binary $< $@
diff --git a/configure/os/CONFIG.Common.RTEMS-mvme5500 b/configure/os/CONFIG.Common.RTEMS-mvme5500
index 44ef7ea3e..a240a298a 100644
--- a/configure/os/CONFIG.Common.RTEMS-mvme5500
+++ b/configure/os/CONFIG.Common.RTEMS-mvme5500
@@ -5,6 +5,7 @@
# All RTEMS targets use the same Makefile fragment
#
EXE = .elf
+RTEMS_BSP = mvme5500
RTEMS_TARGET_CPU = powerpc
GNU_TARGET = powerpc-rtems
ARCH_DEP_CFLAGS += -DMY_DO_BOOTP=NULL
@@ -13,13 +14,9 @@ ARCH_DEP_CFLAGS += -DRTEMS_NETWORK_CONFIG_MBUF_SPACE=2048
ARCH_DEP_CFLAGS += -DRTEMS_NETWORK_CONFIG_CLUSTER_SPACE=5120
ARCH_DEP_CFLAGS += -DBSP_NVRAM_BASE_ADDR=0xf1110000
-OP_SYS_LDLIBS += -lbspExt
-
MUNCH_SUFFIX = .boot
define MUNCH_CMD
$(RTEMS_TOOLS)/bin/$(OBJCOPY_FOR_TARGET) -O binary $< $@
endef
-OP_SYS_LDLIBS += -lbspExt
-
include $(CONFIG)/os/CONFIG.Common.RTEMS
diff --git a/configure/os/CONFIG.Common.RTEMS-pc386 b/configure/os/CONFIG.Common.RTEMS-pc386
index 92ef4ac22..77867f004 100644
--- a/configure/os/CONFIG.Common.RTEMS-pc386
+++ b/configure/os/CONFIG.Common.RTEMS-pc386
@@ -1,18 +1,20 @@
+# CONFIG.Common.RTEMS-pc386
#
-# Author: W. Eric Norum
-# Canadian Light Source
-# eric@cls.usask.ca
+# Definitions for the RTEMS-pc386 target, RTEMS 4.x only
+# Site-specific overrides go in CONFIG_SITE.Common.RTEMS-pc386
#
-# All RTEMS targets use the same Makefile fragment
-#
-RTEMS_TARGET_CPU=i386
+#-------------------------------------------------------
+
+RTEMS_BSP = pc386
+RTEMS_TARGET_CPU = i386
+GNU_TARGET = i386-rtems
MUNCH_SUFFIX = .boot
define MUNCH_CMD
- $(RTEMS_TOOLS)/bin/$(OBJCOPY_FOR_TARGET) -O binary -R .comment -S $< temp.bin
+ $(RM) $*.bin
+ $(RTEMS_TOOLS)/bin/$(OBJCOPY_FOR_TARGET) -O binary -R .comment -S $< $*.bin
$(BIN2BOOT) $@ 0x00097E00 \
- $(PROJECT_RELEASE)/lib/start16.bin 0x00097C00 0 temp.bin 0x00100000 0
- rm -f temp.bin
+ $(PROJECT_RELEASE)/lib/start16.bin 0x00097C00 0 $*.bin 0x00100000 0
endef
include $(CONFIG)/os/CONFIG.Common.RTEMS
@@ -21,3 +23,10 @@ include $(CONFIG)/os/CONFIG.Common.RTEMS
# Put text segment where it will work with etherboot
#
OP_SYS_LDFLAGS += -Wl,-Ttext,0x100000
+
+# This check must appear after the above include
+ifeq ($(shell test $(RTEMS_VERSION) -ge 5; echo $$?),0)
+ $(info *** This target is not compatible with the configured RTEMS version.)
+ $(info *** Build the RTEMS-pc686 (-qemu) target for RTEMS 5.x)
+ $(error Can't continue)
+endif
diff --git a/configure/os/CONFIG.Common.RTEMS-pc386-qemu b/configure/os/CONFIG.Common.RTEMS-pc386-qemu
new file mode 100644
index 000000000..07bf30e7c
--- /dev/null
+++ b/configure/os/CONFIG.Common.RTEMS-pc386-qemu
@@ -0,0 +1,12 @@
+# CONFIG.Common.RTEMS-pc386-qemu
+#
+# Definitions for the RTEMS-pc386-qemu target
+# Site-specific overrides go in CONFIG_SITE.Common.RTEMS-pc386-qemu
+#
+#-------------------------------------------------------
+
+# Include definitions from RTEMS-pc386
+# For Tests overwrite it with pc686
+include $(CONFIG)/os/CONFIG.Common.RTEMS-pc386
+
+RTEMS_QEMU_FIXUPS = YES
diff --git a/configure/os/CONFIG.Common.RTEMS-pc686 b/configure/os/CONFIG.Common.RTEMS-pc686
new file mode 100644
index 000000000..bfe4c26e4
--- /dev/null
+++ b/configure/os/CONFIG.Common.RTEMS-pc686
@@ -0,0 +1,39 @@
+# CONFIG.Common.RTEMS-pc686
+#
+# Definitions for the RTEMS-pc686 target, RTEMS 5.x only
+# Site-specific overrides go in CONFIG_SITE.Common.RTEMS-pc686
+#
+#-------------------------------------------------------
+#
+# Author: W. Eric Norum
+# Canadian Light Source
+# eric@cls.usask.ca
+#
+# All RTEMS targets use the same Makefile fragment
+#
+RTEMS_BSP = pc686
+RTEMS_TARGET_CPU = i386
+GNU_TARGET = i386-rtems
+
+MUNCH_SUFFIX = .boot
+define MUNCH_CMD
+ $(RTEMS_TOOLS)/bin/$(OBJCOPY_FOR_TARGET) -O binary -R .comment -S $< $@
+endef
+
+OP_SYS_LDLIBS += -Wl,--gc-sections
+ARCH_DEP_LDFLAGS = -L$(RTEMS_BASE)/$(GNU_TARGET)$(RTEMS_VERSION)/pc686/lib/
+
+include $(CONFIG)/os/CONFIG.Common.RTEMS
+
+#
+# Put text segment where it will work with etherboot
+#
+OP_SYS_LDFLAGS += -Wl,-Ttext,0x100000
+
+
+# This check must appear after the above include
+ifeq ($(shell test $(RTEMS_VERSION) -lt 5; echo $$?),0)
+ $(info *** This target is not compatible with the configured RTEMS version.)
+ $(info *** Build the RTEMS-pc386 (-qemu) target for RTEMS 4.x)
+ $(error Can't continue)
+endif
diff --git a/configure/os/CONFIG.Common.RTEMS-pc686-qemu b/configure/os/CONFIG.Common.RTEMS-pc686-qemu
new file mode 100644
index 000000000..1de543a30
--- /dev/null
+++ b/configure/os/CONFIG.Common.RTEMS-pc686-qemu
@@ -0,0 +1,11 @@
+# CONFIG.Common.RTEMS-pc686-qemu
+#
+# Definitions for the RTEMS-pc686-qemu target
+# Site-specific overrides go in CONFIG_SITE.Common.RTEMS-pc686-qemu
+#
+#-------------------------------------------------------
+
+# Include definitions from RTEMS-pc686
+include $(CONFIG)/os/CONFIG.Common.RTEMS-pc686
+
+RTEMS_QEMU_FIXUPS = YES
diff --git a/configure/os/CONFIG.Common.RTEMS-psim b/configure/os/CONFIG.Common.RTEMS-psim
deleted file mode 100644
index 230d72e1f..000000000
--- a/configure/os/CONFIG.Common.RTEMS-psim
+++ /dev/null
@@ -1,9 +0,0 @@
-#
-# Author: W. Eric Norum
-# University of Saskatchewan
-# eric.norum@usask.ca
-#
-# All RTEMS targets use the same Makefile fragment
-#
-RTEMS_TARGET_CPU=ppc
-include $(CONFIG)/os/CONFIG.Common.RTEMS
diff --git a/configure/os/CONFIG.Common.RTEMS-qoriq_e500 b/configure/os/CONFIG.Common.RTEMS-qoriq_e500
new file mode 100644
index 000000000..94c7e825e
--- /dev/null
+++ b/configure/os/CONFIG.Common.RTEMS-qoriq_e500
@@ -0,0 +1,48 @@
+#
+# CONFIG.Common.RTEMS-qoriq_e500
+# Author: Heinz Junkes
+#
+# All RTEMS targets use the same Makefile fragment
+#
+EXE = .elf
+RTEMS_BSP = qoriq_e500
+RTEMS_TARGET_CPU = powerpc
+GNU_TARGET = powerpc-rtems
+# optimization trouble in postfix.c
+ARCH_DEP_CFLAGS += -DRTEMS_HAS_ALTIVEC
+#will use bootp
+#ARCH_DEP_CFLAGS += -DMY_DO_BOOTP=NULL
+
+#ARCH_DEP_CFLAGS += -DRTEMS_NETWORK_CONFIG_MBUF_SPACE=2048
+#ARCH_DEP_CFLAGS += -DRTEMS_NETWORK_CONFIG_CLUSTER_SPACE=5120
+
+#netbsdlib
+#ARCH_DEP_CFLAGS += -I$(RTEMS_BASE)/powerpc-rtems5/qoriq_e500/lib/include
+
+#OP_SYS_LDLIBS += -lbspExt #does not use posix stuff ... want to ignore
+OP_SYS_LDLIBS += -Wl,--gc-sections
+#ARCH_DEP_LDFLAGS = -mcpu=8540 -meabi -msdata=sysv -mstrict-align -mspe -mabi=spe -mfloat-gprs=double
+ARCH_DEP_LDFLAGS = -L$(RTEMS_BASE)/$(GNU_TARGET)$(RTEMS_VERSION)/$(RTEMS_BSP)/lib
+
+MUNCH_SUFFIX = .img
+MUNCHNAME = $(PRODNAME:%$(EXE)=%$(MUNCH_SUFFIX))
+define MUNCH_CMD
+ $(RTEMS_TOOLS)/bin/$(OBJCOPY_FOR_TARGET) -O binary $< $@
+ gzip -9 -f $@
+ $(RTEMS_TOOLS)/bin/mkimage.py -A ppc -O linux -T kernel -a 0x4000 -e 0x4000 -n $* -d $@.gz $*.img
+endef
+
+include $(CONFIG)/os/CONFIG.Common.RTEMS
+
+RTEMSSYMS=$(PRODNAME:%$(EXE)=%.sym)
+RTEMSIMGS=$(PRODNAME:%$(EXE)=%.bin)
+INSTALL_RTEMSSYMS=$(RTEMSSYMS:%=$(INSTALL_BIN)/%)
+INSTALL_RTEMSIMGS=$(RTEMSIMGS:%=$(INSTALL_BIN)/%)
+
+%.sym: %$(EXE)
+ $(XSYMS) $^ $@
+
+%.bin: %$(EXE)
+ $(OBJCOPY) -Obinary $^ $@
+
+#PRODTARGETS+=$(INSTALL_RTEMSSYMS) $(INSTALL_RTEMSIMGS)
diff --git a/configure/os/CONFIG.Common.RTEMS-uC5282 b/configure/os/CONFIG.Common.RTEMS-uC5282
index 6b0903e07..c0cdaff74 100644
--- a/configure/os/CONFIG.Common.RTEMS-uC5282
+++ b/configure/os/CONFIG.Common.RTEMS-uC5282
@@ -5,9 +5,14 @@
#
# All RTEMS targets use the same Makefile fragment
#
+RTEMS_BSP = uC5282
RTEMS_TARGET_CPU = m68k
ARCH_DEP_CFLAGS += -DMY_DO_BOOTP=NULL
+# Hopefully a temporary fix:
+ARCH_DEP_CXXFLAGS_5 = -std=c++98
+ARCH_DEP_CXXFLAGS += $(ARCH_DEP_CXXFLAGS_$(RTEMS_VERSION))
+
MUNCH_SUFFIX = .boot
define MUNCH_CMD
$(RTEMS_TOOLS)/bin/$(OBJCOPY_FOR_TARGET) -O binary -R .comment -S $< $@
diff --git a/configure/os/CONFIG.Common.RTEMS-xilinx_zynq_a9_qemu b/configure/os/CONFIG.Common.RTEMS-xilinx_zynq_a9_qemu
new file mode 100644
index 000000000..83b518b69
--- /dev/null
+++ b/configure/os/CONFIG.Common.RTEMS-xilinx_zynq_a9_qemu
@@ -0,0 +1,20 @@
+#
+# CONFIG.Common.RTEMS-xilinx_zynq_a9_qemu
+# Author: Heinz Junkes
+#
+# All RTEMS targets use the same Makefile fragment
+#
+#EXE = .elf
+RTEMS_BSP = xilinx_zynq_a9_qemu
+RTEMS_TARGET_CPU = arm
+GNU_TARGET = arm-rtems
+
+#use dhcp/bootp
+ARCH_DEP_CFLAGS += -DMY_DO_BOOTP=NULL
+
+OP_SYS_LDLIBS += -Wl,--gc-sections
+ARCH_DEP_LDFLAGS = -L$(RTEMS_BASE)/$(GNU_TARGET)$(RTEMS_VERSION)/xilinx_zynq_a9_qemu/lib/
+
+
+include $(CONFIG)/os/CONFIG.Common.RTEMS
+
diff --git a/configure/os/CONFIG.Common.RTEMS-xilinx_zynq_zedboard b/configure/os/CONFIG.Common.RTEMS-xilinx_zynq_zedboard
new file mode 100644
index 000000000..bac33eb91
--- /dev/null
+++ b/configure/os/CONFIG.Common.RTEMS-xilinx_zynq_zedboard
@@ -0,0 +1,19 @@
+#
+# CONFIG.Common.RTEMS-xilinx_zynq_zedboard
+# Author: Heinz Junkes
+#
+# All RTEMS targets use the same Makefile fragment
+#
+#EXE = .elf
+RTEMS_BSP = xilinx_zynq_zedboard
+RTEMS_TARGET_CPU = arm
+GNU_TARGET = arm-rtems
+
+OP_SYS_LDLIBS += -Wl,--gc-sections
+ARCH_DEP_LDFLAGS = -L$(RTEMS_BASE)/$(GNU_TARGET)$(RTEMS_VERSION)/xilinx_zynq_zedboard/lib/
+
+
+include $(CONFIG)/os/CONFIG.Common.RTEMS
+
+
+
diff --git a/configure/os/CONFIG.Common.UnixCommon b/configure/os/CONFIG.Common.UnixCommon
index add84873e..6163b7975 100644
--- a/configure/os/CONFIG.Common.UnixCommon
+++ b/configure/os/CONFIG.Common.UnixCommon
@@ -8,7 +8,7 @@
#-------------------------------------------------------
# Unix valid build types
-VALID_BUILDS = Host Ioc
+VALID_BUILDS = Host Ioc Command
#-------------------------------------------------------
# Unix prefix and suffix definitions
@@ -56,7 +56,7 @@ SHRLIB_LDLIBS = $(addprefix -l, $($*_LDLIBS) $(LIB_LIBS) $(USR_LIBS)) \
SHRLIB_DEPLIB_DIRS = $(foreach word, \
$(sort $(INSTALL_LIB)/ $(dir $($*_DEPLIBS) $(SHRLIB_DEPLIBS))), \
- $(shell $(FULLPATHNAME) $(word)))
+ $(abspath $(word)))
SHRLIBDIR_LDFLAGS += $(SHRLIB_DEPLIB_DIRS:%=-L%)
@@ -85,7 +85,7 @@ PROD_LDLIBS += $($(firstword $(LDLIBS_STATIC_$(STATIC_BUILD)) \
PROD_DEPLIB_DIRS = $(foreach word, \
$(sort $(INSTALL_LIB)/ $(dir $($*_DEPLIBS) $(PROD_DEPLIBS))), \
- $(shell $(FULLPATHNAME) $(word)))
+ $(abspath $(word)))
PRODDIR_LDFLAGS += $(PROD_DEPLIB_DIRS:%=-L%)
diff --git a/configure/os/CONFIG.Common.darwin-aarch64 b/configure/os/CONFIG.Common.darwin-aarch64
new file mode 100644
index 000000000..eaba1efb2
--- /dev/null
+++ b/configure/os/CONFIG.Common.darwin-aarch64
@@ -0,0 +1,14 @@
+# CONFIG.Common.darwin-aarch64
+#
+# This file is maintained by the build community.
+#
+# Definitions for darwin-aarch64 target builds
+# Sites may override these definitions in CONFIG_SITE.Common.darwin-aarch64
+#-------------------------------------------------------
+
+#
+# To build universal binaries, configure ARCH_CLASS
+# in the file CONFIG_SITE.Common.darwin-aarch64
+
+# Include definitions common to all Darwin targets
+include $(CONFIG)/os/CONFIG.darwinCommon.darwinCommon
diff --git a/configure/os/CONFIG.Common.darwin-ppc b/configure/os/CONFIG.Common.darwin-ppc
deleted file mode 100644
index 7ac704314..000000000
--- a/configure/os/CONFIG.Common.darwin-ppc
+++ /dev/null
@@ -1,14 +0,0 @@
-# CONFIG.Common.darwin-ppc
-#
-# This file is maintained by the build community.
-#
-# Definitions for darwin-ppc target builds
-# Sites may override these definitions in CONFIG_SITE.Common.darwin-ppc
-#-------------------------------------------------------
-
-#
-# To build universal binaries, configure ARCH_CLASS
-# in the file CONFIG_SITE.Common.darwin-ppc
-
-# Include definitions common to all Darwin targets
-include $(CONFIG)/os/CONFIG.darwinCommon.darwinCommon
diff --git a/configure/os/CONFIG.Common.darwin-ppcx86 b/configure/os/CONFIG.Common.darwin-ppcx86
deleted file mode 100644
index 12107944f..000000000
--- a/configure/os/CONFIG.Common.darwin-ppcx86
+++ /dev/null
@@ -1,14 +0,0 @@
-# CONFIG.Common.darwin-ppcx86
-#
-# This file is maintained by the build community.
-#
-# Definitions for Darwin universal PowerPC + x86 target builds
-# Sites may override these definitions in CONFIG_SITE.Common.darwin-ppcx86
-#-------------------------------------------------------
-
-#
-# To build universal binaries, configure ARCH_CLASS
-# in the file CONFIG_SITE.Common.darwin-ppcx86
-
-# Include definitions common to all Darwin targets
-include $(CONFIG)/os/CONFIG.darwinCommon.darwinCommon
diff --git a/configure/os/CONFIG.Common.freebsdCommon b/configure/os/CONFIG.Common.freebsdCommon
index 36796b758..df2a10a49 100644
--- a/configure/os/CONFIG.Common.freebsdCommon
+++ b/configure/os/CONFIG.Common.freebsdCommon
@@ -7,6 +7,10 @@
# Include definitions common to all Unix targets
include $(CONFIG)/os/CONFIG.Common.UnixCommon
+GNU = NO
+CMPLR_CLASS = clang
+CC = clang
+CCC = clang++
OS_CLASS = freebsd
diff --git a/configure/os/CONFIG.Common.iosCommon b/configure/os/CONFIG.Common.iosCommon
index f9e5750e3..03d3cab8e 100644
--- a/configure/os/CONFIG.Common.iosCommon
+++ b/configure/os/CONFIG.Common.iosCommon
@@ -42,12 +42,6 @@ ARCH_DEP_LDFLAGS += $(ARCH_DEP_FLAGS)
OP_SYS_CFLAGS += -isysroot $(SDK_DIR)
OP_SYS_LDFLAGS += -isysroot $(SDK_DIR)
-#--------------------------------------------------
-# Always compile in debugging symbol table information
-#
-OPT_CFLAGS_YES += -g
-OPT_CXXFLAGS_YES += -g
-
#-------------------------------------------------------
# Compiler definitions:
@@ -77,7 +71,7 @@ OP_SYS_LDFLAGS += -dynamic -Z -L$(SDK_DIR)/usr/lib -L$(SDK_DIR)/usr/lib/system
# Shared libraries
SHRLIB_VERSION = $(EPICS_VERSION).$(EPICS_REVISION).$(EPICS_MODIFICATION)
SHRLIB_LDFLAGS = -dynamiclib -flat_namespace -undefined suppress \
- -install_name $(shell $(FULLPATHNAME) $(INSTALL_LIB))/$@ \
+ -install_name $(abspath $(INSTALL_LIB))/$@ \
-compatibility_version $(EPICS_VERSION).$(EPICS_REVISION) \
-current_version $(SHRLIB_VERSION)
SHRLIB_SUFFIX_BASE = .dylib
diff --git a/configure/os/CONFIG.Common.linux-386 b/configure/os/CONFIG.Common.linux-386
deleted file mode 100644
index 8549a8ab6..000000000
--- a/configure/os/CONFIG.Common.linux-386
+++ /dev/null
@@ -1,21 +0,0 @@
-# CONFIG.Common.linux-386
-#
-# This file is maintained by the build community.
-#
-# Definitions for linux-386 target builds
-# Sites may override these definitions in CONFIG_SITE.Common.linux-386
-#-------------------------------------------------------
-
-# Include definitions common to all linux x86 targets
-include $(CONFIG)/os/CONFIG.Common.linux-x86
-
-ARCH_DEP_CFLAGS = -march=i386
-
-ifeq ($(BUILD_CLASS),CROSS)
- VALID_BUILDS = Ioc
-endif
-
-# If your crosscompiler name has a GNU target prefix like -gcc,
-# e.g. i386-pc-linux-gnu-gcc, put a GNU_TARGET definition in
-# CONFIG_SITE..linux-386 file, e.g. GNU_TARGET=i386-pc-linux-gnu
-
diff --git a/configure/os/CONFIG.Common.linux-486 b/configure/os/CONFIG.Common.linux-486
deleted file mode 100644
index cf39b92d2..000000000
--- a/configure/os/CONFIG.Common.linux-486
+++ /dev/null
@@ -1,19 +0,0 @@
-# CONFIG.Common.linux-486
-#
-# Definitions for linux-486 target builds
-# Sites may override these definitions in CONFIG_SITE.Common.linux-486
-#-------------------------------------------------------
-
-# Include definitions common to all linux x86 targets
-include $(CONFIG)/os/CONFIG.Common.linux-x86
-
-ARCH_DEP_CFLAGS = -march=i486
-
-ifeq ($(BUILD_CLASS),CROSS)
- VALID_BUILDS = Ioc
-endif
-
-# If your crosscompiler name has a GNU target prefix like -gcc,
-# e.g. i486-pc-linux-gnu-gcc, put a GNU_TARGET definition in
-# CONFIG_SITE..linux-486 file, e.g. GNU_TARGET=i486-pc-linux-gnu
-
diff --git a/configure/os/CONFIG.Common.linux-586 b/configure/os/CONFIG.Common.linux-586
deleted file mode 100644
index 9b2fa466b..000000000
--- a/configure/os/CONFIG.Common.linux-586
+++ /dev/null
@@ -1,21 +0,0 @@
-# CONFIG.Common.linux-586
-#
-# Definitions for linux-586 target builds
-# Sites may override these definitions in CONFIG_SITE.Common.linux-586
-#-------------------------------------------------------
-
-# Include definitions common to all linux x86 targets
-include $(CONFIG)/os/CONFIG.Common.linux-x86
-
-# i586 is equivalent to pentium
-ARCH_DEP_CFLAGS = -march=i586
-
-ifeq ($(BUILD_CLASS),CROSS)
- VALID_BUILDS = Ioc
-endif
-
-# If your crosscompiler name has a GNU target prefix like -gcc,
-# e.g. i586-pc-linux-gnu-gcc, put a GNU_TARGET definition in
-# CONFIG_SITE..linux-586 file, e.g. GNU_TARGET=i586-pc-linux-gnu
-
-
diff --git a/configure/os/CONFIG.Common.linux-686 b/configure/os/CONFIG.Common.linux-686
deleted file mode 100644
index 5a2e0ef5f..000000000
--- a/configure/os/CONFIG.Common.linux-686
+++ /dev/null
@@ -1,20 +0,0 @@
-# CONFIG.Common.linux-686
-#
-# Definitions for linux-686 target builds
-# Sites may override these definitions in CONFIG_SITE.Common.linux-686
-#-------------------------------------------------------
-
-# Include definitions common to all linux x86 targets
-include $(CONFIG)/os/CONFIG.Common.linux-x86
-
-# i686 is euivalent to pentiumpro
-ARCH_DEP_CFLAGS = -march=i686
-
-ifeq ($(BUILD_CLASS),CROSS)
- VALID_BUILDS = Ioc
-endif
-
-# If your crosscompiler name has a GNU target prefix like -gcc,
-# e.g. i686-pc-linux-gnu-gcc, put a GNU_TARGET definition in
-# CONFIG_SITE..linux-686 file, e.g. GNU_TARGET=i686-pc-linux-gnu
-
diff --git a/configure/os/CONFIG.Common.linux-aarch64 b/configure/os/CONFIG.Common.linux-aarch64
new file mode 100644
index 000000000..d6eac21dc
--- /dev/null
+++ b/configure/os/CONFIG.Common.linux-aarch64
@@ -0,0 +1,11 @@
+# CONFIG.Common.linux-aarch64
+#
+# Definitions for linux-arm target builds
+# Override these settings in CONFIG_SITE.Common.linux-aarch64
+#-------------------------------------------------------
+
+# Include definitions common to all Linux targets
+include $(CONFIG)/os/CONFIG.Common.linuxCommon
+
+ARCH_CLASS = aarch64
+
diff --git a/configure/os/CONFIG.Common.linux-arm_eb b/configure/os/CONFIG.Common.linux-arm_eb
deleted file mode 100644
index 69a255020..000000000
--- a/configure/os/CONFIG.Common.linux-arm_eb
+++ /dev/null
@@ -1,9 +0,0 @@
-# CONFIG.Common.linux-arm_eb
-#
-# Definitions for linux-arm_eb (big endian) target builds
-# Sites may override these definitions in CONFIG_SITE.Common.linux-arm_eb
-#-------------------------------------------------------
-
-# Include definitions common to all Linux-arm targets
-include $(CONFIG)/os/CONFIG.Common.linux-arm
-
diff --git a/configure/os/CONFIG.Common.linux-arm_el b/configure/os/CONFIG.Common.linux-arm_el
deleted file mode 100644
index 40701b616..000000000
--- a/configure/os/CONFIG.Common.linux-arm_el
+++ /dev/null
@@ -1,9 +0,0 @@
-# CONFIG.Common.linux-arm_el
-#
-# Definitions for linux-arm_el (little endian) target builds
-# Sites may override these definitions in CONFIG_SITE.Common.linux-arm_el
-#-------------------------------------------------------
-
-# Include definitions common to all linux-arm targets
-include $(CONFIG)/os/CONFIG.Common.linux-arm
-
diff --git a/configure/os/CONFIG.Common.linux-athlon b/configure/os/CONFIG.Common.linux-athlon
deleted file mode 100644
index 69f20a81d..000000000
--- a/configure/os/CONFIG.Common.linux-athlon
+++ /dev/null
@@ -1,19 +0,0 @@
-# CONFIG.Common.linux-athlon
-#
-# Definitions for linux-athlon target builds
-# Sites may override these definitions in CONFIG_SITE.Common.linux-athlon
-#-------------------------------------------------------
-
-# Include definitions common to all linux x86 targets
-include $(CONFIG)/os/CONFIG.Common.linux-x86
-
-ARCH_DEP_CFLAGS += -march=athlon-mp -mfpmath=sse
-
-ifeq ($(BUILD_CLASS),CROSS)
- VALID_BUILDS = Ioc
-endif
-
-# If your crosscompiler name has a GNU target prefix like -gcc,
-# e.g. athlon-pc-linux-gnu-gcc, put a GNU_TARGET definition in
-# CONFIG_SITE..linux-athlon file, e.g. GNU_TARGET=athlon-pc-linux-gnu
-
diff --git a/configure/os/CONFIG.Common.linux-cris b/configure/os/CONFIG.Common.linux-cris
deleted file mode 100644
index d419b23e8..000000000
--- a/configure/os/CONFIG.Common.linux-cris
+++ /dev/null
@@ -1,58 +0,0 @@
-# CONFIG.Common.linux-cris
-#
-# Author: Peter Zumbruch
-# GSI
-# P.Zumbruch@gsi.de
-#
-# Definitions for linux-cris target builds
-# Sites may override these definitions in CONFIG_SITE.Common.linux-cris
-#-------------------------------------------------------
-
-# Include definitions common to all linux targets
-include $(CONFIG)/os/CONFIG.Common.linuxCommon
-
-ARCH_CLASS = cris
-
-ifeq ($(BUILD_CLASS),CROSS)
- GNU_TARGET = cris-axis-linux-gnu
-
- # prefix of compiler tools
- CMPLR_SUFFIX =
- CMPLR_PREFIX = $(addsuffix -,$(GNU_TARGET))
-
- # CROSS_TOP_DIR
- # usually AXIS_TOP_DIR is defined via
- # the init_env script of the SDK provided by Axis
- #
- ## AXIS_TOP_DIR defined? Make missing mandatory variable visible
- AXIS_TOP_DIR?=UNDEFINED_ENV__AXIS_TOP_DIR
- AXIS_SDK_DIR?=$(AXIS_TOP_DIR)
-
- # CROSS_INCLUDES
- AXIS_SDK_TARGET_INCLUDE_DIR = $(AXIS_SDK_DIR)/target/$(GNU_TARGET)/include
- AXIS_SDK_TARGET_INCLUDE_DIR +=$(AXIS_SDK_DIR)/target/$(GNU_TARGET)/usr/include
-
- CROSS_INCLUDES = $(addprefix -isystem ,$(AXIS_SDK_TARGET_INCLUDE_DIR))
-
- # CROSS_LDFLAGS
- AXIS_SDK_TARGET_LIB_DIR = $(AXIS_SDK_DIR)/target/$(GNU_TARGET)/lib
- AXIS_SDK_TARGET_LIB_DIR += $(AXIS_SDK_DIR)/target/$(GNU_TARGET)/usr/lib
-
- CROSS_LDFLAGS = $(addprefix -L,$(AXIS_SDK_TARGET_LIB_DIR))
-
--include $(CONFIG)/os/CONFIG_SITE.Common.linux-cris
-ifeq ($(EPICS_HOST_ARCH), linux-x86)
--include $(CONFIG)/os/CONFIG.linux-x86.linux-cris
--include $(CONFIG)/os/CONFIG_SITE.linux-x86.linux-cris
-endif
-endif
-
-SHARED_LIBRARIES=NO
-STATIC_BUILD=YES
-
-ARCH_DEP_CFLAGS += -mno-mul-bug-workaround
-OP_SYS_CFLAGS += -mlinux
-ARCH_DEP_CPPFLAGS += -D_cris_ -mlinux
-
-#uncomment CRIS_COMPILER_DEBUG for debugging cris-compiled code
-#CRIS_COMPILER_DEBUG
diff --git a/configure/os/CONFIG.Common.linux-microblaze b/configure/os/CONFIG.Common.linux-microblaze
index 21ecb03ac..e5f645b96 100644
--- a/configure/os/CONFIG.Common.linux-microblaze
+++ b/configure/os/CONFIG.Common.linux-microblaze
@@ -15,7 +15,7 @@ include $(CONFIG)/os/CONFIG.Common.linuxCommon
ARCH_CLASS = microblaze
ifeq ($(BUILD_CLASS),CROSS)
- VALID_BUILDS = Ioc
+ VALID_BUILDS = Ioc Command
GNU_TARGET = microblazeel-unknown-linux-gnu
CMPLR_PREFIX = $(addsuffix -,$(GNU_TARGET))
endif
diff --git a/configure/os/CONFIG.Common.linux-xscale_be b/configure/os/CONFIG.Common.linux-xscale_be
index 462320f66..97e38337c 100644
--- a/configure/os/CONFIG.Common.linux-xscale_be
+++ b/configure/os/CONFIG.Common.linux-xscale_be
@@ -13,7 +13,7 @@ include $(CONFIG)/os/CONFIG.Common.linuxCommon
ARCH_CLASS = xscale
ifeq ($(BUILD_CLASS),CROSS)
- VALID_BUILDS = Ioc
+ VALID_BUILDS = Ioc Command
GNU_TARGET = xscale_be
CMPLR_PREFIX = $(GNU_TARGET:%=%-)
diff --git a/configure/os/CONFIG.Common.linuxCommon b/configure/os/CONFIG.Common.linuxCommon
index 965de09b8..24b1a0c33 100644
--- a/configure/os/CONFIG.Common.linuxCommon
+++ b/configure/os/CONFIG.Common.linuxCommon
@@ -23,15 +23,17 @@ STATIC_LDFLAGS_YES= -Wl,-Bstatic
STATIC_LDFLAGS_NO=
STATIC_LDLIBS_YES= -Wl,-Bdynamic
-# Set runtime path for shared libraries if USE_RPATH=YES and STATIC_BUILD=NO
-SHRLIBDIR_RPATH_LDFLAGS_YES_NO = $(SHRLIB_DEPLIB_DIRS:%=-Wl,-rpath,%)
+# Set runtime path for shared libraries if LINKER_USE_RPATH=YES
+SHRLIBDIR_RPATH_LDFLAGS_YES = $(SHRLIB_DEPLIB_DIRS:%=-Wl,-rpath,%)
+SHRLIBDIR_RPATH_LDFLAGS_ORIGIN = $(shell $(MAKERPATH) -O '\$$ORIGIN' -F $(FINAL_DIR) -R $(LINKER_ORIGIN_ROOT) $(SHRLIB_DEPLIB_DIRS))
SHRLIBDIR_LDFLAGS += \
- $(SHRLIBDIR_RPATH_LDFLAGS_$(LINKER_USE_RPATH)_$(STATIC_BUILD))
+ $(SHRLIBDIR_RPATH_LDFLAGS_$(LINKER_USE_RPATH))
-# Set runtime path for products if USE_RPATH=YES and STATIC_BUILD=NO
-PRODDIR_RPATH_LDFLAGS_YES_NO = $(PROD_DEPLIB_DIRS:%=-Wl,-rpath,%)
+# Set runtime path for products if LINKER_USE_RPATH=YES
+PRODDIR_RPATH_LDFLAGS_YES = $(PROD_DEPLIB_DIRS:%=-Wl,-rpath,%)
+PRODDIR_RPATH_LDFLAGS_ORIGIN = $(shell $(MAKERPATH) -O '\$$ORIGIN' -F $(FINAL_DIR) -R $(LINKER_ORIGIN_ROOT) $(PROD_DEPLIB_DIRS))
PRODDIR_LDFLAGS += \
- $(PRODDIR_RPATH_LDFLAGS_$(LINKER_USE_RPATH)_$(STATIC_BUILD))
+ $(PRODDIR_RPATH_LDFLAGS_$(LINKER_USE_RPATH))
# Link libraries controlled by COMMANDLINE_LIBRARY
# The newest Linux versions only need readline, older ones need both
diff --git a/configure/os/CONFIG.Common.vxWorks-e500v2 b/configure/os/CONFIG.Common.vxWorks-e500v2
new file mode 100644
index 000000000..1a7ea2bce
--- /dev/null
+++ b/configure/os/CONFIG.Common.vxWorks-e500v2
@@ -0,0 +1,21 @@
+# CONFIG.Common.vxWorks-e500v2
+#
+# Definitions for vxWorks-e500v2 target archs (MVME2500)
+# Sites may override these definitions in CONFIG_SITE.Common.vxWorks-e500v2
+#-------------------------------------------------------
+
+# Include definitions common to all vxWorks target archs
+include $(CONFIG)/os/CONFIG.Common.vxWorksCommon
+
+# Vx GNU cross compiler suffix
+CMPLR_SUFFIX = ppc
+
+ARCH_CLASS = ppc
+
+# Architecture specific build flags
+ARCH_DEP_CFLAGS += -te500v2 -mhard-float
+ARCH_DEP_CPPFLAGS += -DCPU=PPC85XX
+ARCH_DEP_CFLAGS += -DCPU_VARIANT=_ppc85XX_e500v2
+ARCH_DEP_CFLAGS += -mlongcall
+
+GNU_TARGET = powerpc-wrs-vxworks
diff --git a/configure/os/CONFIG.Common.vxWorksCommon b/configure/os/CONFIG.Common.vxWorksCommon
index 95f8f7f70..f28f0e327 100644
--- a/configure/os/CONFIG.Common.vxWorksCommon
+++ b/configure/os/CONFIG.Common.vxWorksCommon
@@ -1,7 +1,7 @@
# CONFIG.Common.vxWorksCommon
#
# Definitions for vxWorks target archs
-# Sites may override these definitions in CONFIG_SITE.Common.vxWorksCommon
+# Override these definitions in CONFIG_SITE.Common.vxWorksCommon
# or CONFIG_SITE..vxWorksCommon
#-------------------------------------------------------
@@ -63,8 +63,6 @@ VXWORKS_MAJOR_VERSION = $(basename $(basename $(VXWORKS_VERSION)))
# These are needed for vxWorks 6.x; the GNU toolset version number
# is in the path to the compiler tools:
-VX_GNU_VERSION_5.4 = 2.95
-VX_GNU_VERSION_5.5 = 2.96
VX_GNU_VERSION_6.0 = 3.3.2
VX_GNU_VERSION_6.1 = 3.3.2
VX_GNU_VERSION_6.2 = 3.3.2
@@ -80,30 +78,21 @@ VX_GNU_VERSION = $(VX_GNU_VERSION_$(VXWORKS_VERSION))
VX_GNU_MAJOR_VERSION = $(basename $(basename $(VX_GNU_VERSION)))
#--------------------------------------------------
-# Fix WIND_BASE for vxWorks 6.x on linux
-# NB: We know the value of WIND_HOST_TYPE here, but not VXWORKS_VERSION
+# Fix old Linux WIND_HOST_TYPE
ifeq ($(WIND_HOST_TYPE),x86-linux)
- WIND_HOST_TYPE_5 = x86-linux
- WIND_HOST_TYPE_6 = x86-linux2
- WIND_HOST_TYPE = $(WIND_HOST_TYPE_$(VXWORKS_MAJOR_VERSION))
+ WIND_HOST_TYPE = x86-linux2
endif
#--------------------------------------------------
# vxWorks directory definitions
-VX_DIR_5 = $(WIND_BASE)
-VX_DIR_6 = $(WIND_BASE)/vxworks-$(VXWORKS_VERSION)
-VX_DIR = $(VX_DIR_$(VXWORKS_MAJOR_VERSION))
+VX_DIR = $(WIND_BASE)/vxworks-$(VXWORKS_VERSION)
-VX_INCLUDE_DIRS_5 = $(VX_DIR)/target/h
-VX_INCLUDE_DIRS_6 = $(VX_DIR)/target/h $(VX_DIR)/target/h/wrn/coreip
-GNU_TARGET_INCLUDE_DIR = $(VX_INCLUDE_DIRS_$(VXWORKS_MAJOR_VERSION))
+GNU_TARGET_INCLUDE_DIR = $(VX_DIR)/target/h $(VX_DIR)/target/h/wrn/coreip
#--------------------------------------------------
# vxWorks GNU directories
-GNU_DIR_5 = $(WIND_BASE)/host/$(WIND_HOST_TYPE)
-GNU_DIR_6 = $(WIND_BASE)/gnu/$(VX_GNU_VERSION)-vxworks-$(VXWORKS_VERSION)/$(WIND_HOST_TYPE)
-GNU_DIR = $(GNU_DIR_$(VXWORKS_MAJOR_VERSION))
+GNU_DIR = $(WIND_BASE)/gnu/$(VX_GNU_VERSION)-vxworks-$(VXWORKS_VERSION)/$(WIND_HOST_TYPE)
#--------------------------------------------------
# This finds nm on any supported VxWorks version
@@ -113,9 +102,7 @@ NM = $(firstword $(wildcard $(WIND_BASE)/*/$(WIND_HOST_TYPE)/bin/$(NMPROG)))
#--------------------------------------------------
# A linker script is essential for munching from vxWorks 6.6 onwards
-# (i.e. with versions that use gcc 4.1.2 or later). It can be used
-# with any vxWorks 5 or 6 version, but apparently should not be used
-# when compiling for 68K (which isn't supported in vxWorks 6 anyway)
+# (i.e. with versions that use gcc 4.1.2 or later).
MUNCH_LDFLAGS_6 = -T $(VX_DIR)/target/h/tool/gnu/ldscripts/link.OUT
MUNCH_LDFLAGS = $(MUNCH_LDFLAGS_$(VXWORKS_MAJOR_VERSION))
@@ -131,11 +118,10 @@ export TOOL_FAMILY = GNU
OP_SYS_CPPFLAGS += -DvxWorks=vxWorks
OP_SYS_CFLAGS += -fno-builtin
-# Fix for vxWorks 5 headers that use macros defined in vxWorks.h but
+# Fix for vxWorks headers that use macros defined in vxWorks.h but
# which don't actually include vxWorks.h themselves, for example the
# target/h/sys/stat.h file which uses ULONG. This also stops dbDefs.h
-# from defining the OFFSET macro, which generates lots of warnings in
-# both vxWorks 5 and 6.
+# from defining the OFFSET macro, which generates lots of warnings.
OP_SYS_INCLUDE_CPPFLAGS += -include $(VX_DIR)/target/h/vxWorks.h
#--------------------------------------------------
@@ -148,7 +134,6 @@ OPT_CXXFLAGS_YES = -O2
CODE_CFLAGS =
#
# For vxWorks versions before 6.3 we need this g++ compiler flag
-CODE_CXXFLAGS_5 = -fno-implicit-templates
CODE_CXXFLAGS_6.0 = -fno-implicit-templates
CODE_CXXFLAGS_6.1 = -fno-implicit-templates
CODE_CXXFLAGS_6.2 = -fno-implicit-templates
@@ -161,8 +146,10 @@ SHRLIB_CFLAGS =
SHRLIB_LDFLAGS =
#--------------------------------------------------
-# Earlier versions of gcc don't understand -MF
-HDEPENDS_COMPFLAGS = -MM > $@
+# Don't use gcc 2.x for dependency generation
+
+HDEPENDS_METHOD_2 = MKMF
+HDEPENDS_METHOD = $(firstword $(HDEPENDS_METHOD_$(VX_GNU_MAJOR_VERSION)) COMP)
#--------------------------------------------------
# osithead use default stack, YES or NO override
@@ -186,10 +173,8 @@ VXCPPFLAGS = $(filter-out $(OP_SYS_INCLUDE_CPPFLAGS),$(CPPFLAGS))
PREPROCESS.cpp = $(CPP) $(VXCPPFLAGS) $(INCLUDES) $< > $@
#--------------------------------------------------
-# Don't use gcc 2.x for dependency generation
-
-HDEPENDS_METHOD_2 = MKMF
-HDEPENDS_METHOD = $(firstword $(HDEPENDS_METHOD_$(VX_GNU_MAJOR_VERSION)) COMP)
+# Use LEDLIB for command-line editing
+COMMANDLINE_LIBRARY = LEDLIB
#--------------------------------------------------
# Allow site overrides
diff --git a/configure/os/CONFIG.Common.win32-x86-mingw b/configure/os/CONFIG.Common.win32-x86-mingw
index 7c03781b0..c49a413f5 100644
--- a/configure/os/CONFIG.Common.win32-x86-mingw
+++ b/configure/os/CONFIG.Common.win32-x86-mingw
@@ -12,7 +12,7 @@ ARCH_CLASS = x86
POSIX = NO
# Definitions used when COMMANDLINE_LIBRARY is READLINE
-LDLIBS_READLINE = -lreadline -lcurses
+LDLIBS_READLINE = -lreadline -ltermcap
ARCH_DEP_CFLAGS += -m32
ARCH_DEP_LDFLAGS += -m32
diff --git a/configure/os/CONFIG.UnixCommon.Common b/configure/os/CONFIG.UnixCommon.Common
index 5f02d23c4..72c1ee929 100644
--- a/configure/os/CONFIG.UnixCommon.Common
+++ b/configure/os/CONFIG.UnixCommon.Common
@@ -8,9 +8,10 @@
CP = cp
MV = mv
RM = rm -f
-MKDIR = mkdir
+MKDIR = mkdir -p
RMDIR = rm -rf
CAT = cat
+TOUCH = touch
# Allow site overrides
-include $(CONFIG)/os/CONFIG_SITE.UnixCommon.Common
diff --git a/configure/os/CONFIG.darwin-aarch64-debug.Common b/configure/os/CONFIG.darwin-aarch64-debug.Common
new file mode 100644
index 000000000..49b58c879
--- /dev/null
+++ b/configure/os/CONFIG.darwin-aarch64-debug.Common
@@ -0,0 +1,11 @@
+# CONFIG.darwin-aarch64-debug.Common
+#
+# Definitions for darwin-aarch64-debug host builds - darwin-aarch64 target build with debug compiler flags
+# Sites may override these definitions in CONFIG_SITE.darwin-aarch64-debug.Common
+#-------------------------------------------------------
+
+include $(CONFIG)/os/CONFIG.darwin-aarch64.Common
+
+# Removes -O optimization and adds -g compile option
+HOST_OPT=NO
+
diff --git a/configure/os/CONFIG.darwin-aarch64.Common b/configure/os/CONFIG.darwin-aarch64.Common
new file mode 100644
index 000000000..0be8d68fe
--- /dev/null
+++ b/configure/os/CONFIG.darwin-aarch64.Common
@@ -0,0 +1,8 @@
+# CONFIG.darwin-aarch64.Common
+#
+# Definitions for darwin-aarch64 host builds
+# Sites may override these definitions in CONFIG_SITE.darwin-aarch64.Common
+#-------------------------------------------------------
+
+#Include definitions common to unix hosts
+include $(CONFIG)/os/CONFIG.UnixCommon.Common
diff --git a/configure/os/CONFIG.darwin-aarch64.darwin-aarch64-debug b/configure/os/CONFIG.darwin-aarch64.darwin-aarch64-debug
new file mode 100644
index 000000000..25d27b996
--- /dev/null
+++ b/configure/os/CONFIG.darwin-aarch64.darwin-aarch64-debug
@@ -0,0 +1,14 @@
+# CONFIG.darwin-aarch64.darwin-aarch64-debug
+#
+# Definitions for darwin-aarch64 host - darwin-aarch64-debug target build with debug compiler flags
+# Sites may override these definitions in CONFIG_SITE.darwin-aarch64.darwin-aarch64-debug
+#-------------------------------------------------------
+
+-include $(CONFIG)/os/CONFIG.Common.darwin-aarch64
+-include $(CONFIG)/os/CONFIG.darwin-aarch64.darwin-aarch64
+-include $(CONFIG)/os/CONFIG_SITE.Common.darwin-aarch64
+-include $(CONFIG)/os/CONFIG_SITE.darwin-aarch64.darwin-aarch64
+
+
+BUILD_CLASS=HOST
+HOST_OPT = NO
diff --git a/configure/os/CONFIG.darwin-ppc.Common b/configure/os/CONFIG.darwin-ppc.Common
deleted file mode 100644
index ac176878f..000000000
--- a/configure/os/CONFIG.darwin-ppc.Common
+++ /dev/null
@@ -1,8 +0,0 @@
-# CONFIG.darwin-ppc.Common
-#
-# Definitions for darwin-ppc host builds
-# Sites may override these definitions in CONFIG_SITE.darwin-ppc.Common
-#-------------------------------------------------------
-
-#Include definitions common to unix hosts
-include $(CONFIG)/os/CONFIG.UnixCommon.Common
diff --git a/configure/os/CONFIG.darwin-ppc.darwin-ppc-debug b/configure/os/CONFIG.darwin-ppc.darwin-ppc-debug
deleted file mode 100644
index 985052031..000000000
--- a/configure/os/CONFIG.darwin-ppc.darwin-ppc-debug
+++ /dev/null
@@ -1,13 +0,0 @@
-# CONFIG.darwin-ppc.darwin-ppc-debug
-#
-# Definitions for darwin-ppc host - darwin-ppc-debug target build with debug compiler flags
-# Sites may override these definitions in CONFIG_SITE.darwin-ppc.darwin-ppc-debug
-#-------------------------------------------------------
-
--include $(CONFIG)/os/CONFIG.Common.darwin-ppc
--include $(CONFIG)/os/CONFIG.darwin-ppc.darwin-ppc
--include $(CONFIG)/os/CONFIG_SITE.Common.darwin-ppc
--include $(CONFIG)/os/CONFIG_SITE.darwin-ppc.darwin-ppc
-
-BUILD_CLASS=HOST
-HOST_OPT = NO
diff --git a/configure/os/CONFIG.darwin-ppcx86.Common b/configure/os/CONFIG.darwin-ppcx86.Common
deleted file mode 100644
index 749835ced..000000000
--- a/configure/os/CONFIG.darwin-ppcx86.Common
+++ /dev/null
@@ -1,8 +0,0 @@
-# CONFIG.darwin-ppcx86.Common
-#
-# Definitions for Darwin universal PowerPC + x86 host builds
-# Sites may override these definitions in CONFIG_SITE.darwin-ppcx86.Common
-#-------------------------------------------------------
-
-#Include definitions common to unix hosts
-include $(CONFIG)/os/CONFIG.UnixCommon.Common
diff --git a/configure/os/CONFIG.darwin-x86-debug.Common b/configure/os/CONFIG.darwin-x86-debug.Common
new file mode 100644
index 000000000..4e9aca82b
--- /dev/null
+++ b/configure/os/CONFIG.darwin-x86-debug.Common
@@ -0,0 +1,11 @@
+# CONFIG.darwin-x86-debug.Common
+#
+# Definitions for darwin-x86-debug host builds - darwin-x86 target build with debug compiler flags
+# Sites may override these definitions in CONFIG_SITE.darwin-x86-debug.Common
+#-------------------------------------------------------
+
+include $(CONFIG)/os/CONFIG.darwin-x86.Common
+
+# Removes -O optimization and adds -g compile option
+HOST_OPT=NO
+
diff --git a/configure/os/CONFIG.darwin-x86.Common b/configure/os/CONFIG.darwin-x86.Common
index e779f7dc1..c88d8f7ea 100644
--- a/configure/os/CONFIG.darwin-x86.Common
+++ b/configure/os/CONFIG.darwin-x86.Common
@@ -3,6 +3,6 @@
# Definitions for darwin-x86 host builds
# Sites may override these definitions in CONFIG_SITE.darwin-x86.Common
#-------------------------------------------------------
-
+#support for IPv6 etc.
#Include definitions common to unix hosts
include $(CONFIG)/os/CONFIG.UnixCommon.Common
diff --git a/configure/os/CONFIG.darwinCommon.darwinCommon b/configure/os/CONFIG.darwinCommon.darwinCommon
index 4a8f3ef8e..2c12b2fbb 100644
--- a/configure/os/CONFIG.darwinCommon.darwinCommon
+++ b/configure/os/CONFIG.darwinCommon.darwinCommon
@@ -30,6 +30,7 @@ ARCH_DEP_LDFLAGS += $(ARCH_DEP_FLAGS)
#
# Special flags for Darwin
# No common blocks (as required when using shared libraries)
+# OS provides socket address length
#
OP_SYS_CFLAGS += -fno-common
@@ -38,12 +39,6 @@ OP_SYS_CFLAGS += -fno-common
#
OP_SYS_CPPFLAGS += -Ddarwin
-#
-# Always compile in debugging symbol table information
-#
-OPT_CFLAGS_YES += -g
-OPT_CXXFLAGS_YES += -g
-
#
# Libraries for command-line editing.
#
@@ -65,8 +60,8 @@ GNU = NO
#
# Darwin shared libraries
#
-SHRLIB_LDFLAGS = -dynamiclib -undefined dynamic_lookup \
- -install_name $(shell $(FULLPATHNAME) $(INSTALL_LIB))/$@ \
+SHRLIB_LDFLAGS = -dynamiclib -flat_namespace \
+ -install_name $(abspath $(INSTALL_LIB))/$@ \
$(addprefix -compatibility_version , $(SHRLIB_VERSION)) \
$(addprefix -current_version , $(SHRLIB_VERSION))
SHRLIB_SUFFIX_BASE = .dylib
diff --git a/configure/os/CONFIG.freebsd-x86.Common b/configure/os/CONFIG.freebsd-x86.Common
index 1bd10de2d..a936b7a4c 100644
--- a/configure/os/CONFIG.freebsd-x86.Common
+++ b/configure/os/CONFIG.freebsd-x86.Common
@@ -5,3 +5,4 @@
#Include definitions common to unix hosts
include $(CONFIG)/os/CONFIG.UnixCommon.Common
+CMPLR_CLASS = clang
diff --git a/configure/os/CONFIG.freebsd-x86.freebsd-x86 b/configure/os/CONFIG.freebsd-x86.freebsd-x86
index b5e2bcff4..a183b34c1 100644
--- a/configure/os/CONFIG.freebsd-x86.freebsd-x86
+++ b/configure/os/CONFIG.freebsd-x86.freebsd-x86
@@ -2,6 +2,7 @@
# Definitions for freebsd-x86 host - freebsd-x86 target builds
# Sites may override these definitions in CONFIG_SITE.freebsd-x86.freebsd-x86
#-------------------------------------------------------
+GNU_DIR=/usr/local
# Include common gnu compiler definitions
include $(CONFIG)/CONFIG.gnuCommon
diff --git a/configure/os/CONFIG.freebsd-x86_64.freebsd-x86_64 b/configure/os/CONFIG.freebsd-x86_64.freebsd-x86_64
index dcc8888ce..5e8b691d8 100644
--- a/configure/os/CONFIG.freebsd-x86_64.freebsd-x86_64
+++ b/configure/os/CONFIG.freebsd-x86_64.freebsd-x86_64
@@ -2,12 +2,23 @@
# Definitions for freebsd-x86_64 host - freebsd-x86_64 target builds
# Sites may override these definitions in CONFIG_SITE.freebsd-x86_64.freebsd-x86_64
#-------------------------------------------------------
+GNU_DIR=/usr
# Include common gnu compiler definitions
include $(CONFIG)/CONFIG.gnuCommon
+GNU_BIN = $(GNU_DIR)/bin
+GNU_LIB = $(GNU_DIR)/lib
+
+CMPLR_CLASS = clang
+
+CC = $(GNU_BIN)/$(CMPLR_PREFIX)cc$(CMPLR_SUFFIX)
+CCC = $(GNU_BIN)/$(CMPLR_PREFIX)c++$(CMPLR_SUFFIX)
+CPP = $(CC) -x c -E
+
+GNU_LDLIBS_YES =
+
STATIC_LDFLAGS_YES= -Wl,-Bstatic
STATIC_LDFLAGS_NO=
STATIC_LDLIBS_YES= -Wl,-Bdynamic
STATIC_LDLIBS_NO=
-
diff --git a/configure/os/CONFIG.linux-386.Common b/configure/os/CONFIG.linux-386.Common
deleted file mode 100644
index 691a1aad4..000000000
--- a/configure/os/CONFIG.linux-386.Common
+++ /dev/null
@@ -1,10 +0,0 @@
-# CONFIG.linux-386.Common
-#
-# Definitions for linux-386 host builds
-# Sites may override these definitions in CONFIG_SITE.linux-386.Common
-#-------------------------------------------------------
-
-#Include definitions common to unix hosts
-include $(CONFIG)/os/CONFIG.UnixCommon.Common
-
-WIND_HOST_TYPE = x86-linux
diff --git a/configure/os/CONFIG.linux-386.linux-386 b/configure/os/CONFIG.linux-386.linux-386
deleted file mode 100644
index f65ac46b7..000000000
--- a/configure/os/CONFIG.linux-386.linux-386
+++ /dev/null
@@ -1,8 +0,0 @@
-# CONFIG.linux-386.linux-386
-#
-# Definitions for linux-386 host - linux-386 target builds
-# Sites may override these definitions in CONFIG_SITE.linux-386.linux-386
-#-------------------------------------------------------
-
-# Include linux-x86 compiler definitions
-include $(CONFIG)/os/CONFIG.linux-x86.linux-x86
diff --git a/configure/os/CONFIG.linux-486.Common b/configure/os/CONFIG.linux-486.Common
deleted file mode 100644
index 3b285ae71..000000000
--- a/configure/os/CONFIG.linux-486.Common
+++ /dev/null
@@ -1,10 +0,0 @@
-# CONFIG.linux-486.Common
-#
-# Definitions for linux-486 host builds
-# Sites may override these definitions in CONFIG_SITE.linux-486.Common
-#-------------------------------------------------------
-
-#Include definitions common to unix hosts
-include $(CONFIG)/os/CONFIG.UnixCommon.Common
-
-WIND_HOST_TYPE = x86-linux
diff --git a/configure/os/CONFIG.linux-486.linux-486 b/configure/os/CONFIG.linux-486.linux-486
deleted file mode 100644
index 551cacc29..000000000
--- a/configure/os/CONFIG.linux-486.linux-486
+++ /dev/null
@@ -1,9 +0,0 @@
-# CONFIG.linux-486.linux-486
-#
-# Definitions for linux-486 host - linux-486 target builds
-# Sites may override these definitions in CONFIG_SITE.linux-486.linux-486
-#-------------------------------------------------------
-
-# Include linux-x86 compiler definitions
-include $(CONFIG)/os/CONFIG.linux-x86.linux-x86
-
diff --git a/configure/os/CONFIG.linux-586.Common b/configure/os/CONFIG.linux-586.Common
deleted file mode 100644
index baa7af29c..000000000
--- a/configure/os/CONFIG.linux-586.Common
+++ /dev/null
@@ -1,10 +0,0 @@
-# CONFIG.linux-586.Common
-#
-# Definitions for linux-586 host builds
-# Sites may override these definitions in CONFIG_SITE.linux-586.Common
-#-------------------------------------------------------
-
-#Include definitions common to unix hosts
-include $(CONFIG)/os/CONFIG.UnixCommon.Common
-
-WIND_HOST_TYPE = x86-linux
diff --git a/configure/os/CONFIG.linux-586.linux-586 b/configure/os/CONFIG.linux-586.linux-586
deleted file mode 100644
index 990bfad74..000000000
--- a/configure/os/CONFIG.linux-586.linux-586
+++ /dev/null
@@ -1,9 +0,0 @@
-# CONFIG.linux-586.linux-586
-#
-# Definitions for linux-586 host - linux-586 target builds
-# Sites may override these definitions in CONFIG_SITE.linux-586.linux-586
-#-------------------------------------------------------
-
-# Include linux-x86 compiler definitions
-include $(CONFIG)/os/CONFIG.linux-x86.linux-x86
-
diff --git a/configure/os/CONFIG.linux-686.Common b/configure/os/CONFIG.linux-686.Common
deleted file mode 100644
index 3d8c960cf..000000000
--- a/configure/os/CONFIG.linux-686.Common
+++ /dev/null
@@ -1,10 +0,0 @@
-# CONFIG.linux-686.Common
-#
-# Definitions for linux-686 host builds
-# Sites may override these definitions in CONFIG_SITE.linux-686.Common
-#-------------------------------------------------------
-
-#Include definitions common to unix hosts
-include $(CONFIG)/os/CONFIG.UnixCommon.Common
-
-WIND_HOST_TYPE = x86-linux
diff --git a/configure/os/CONFIG.linux-686.linux-686 b/configure/os/CONFIG.linux-686.linux-686
deleted file mode 100644
index e4195a40a..000000000
--- a/configure/os/CONFIG.linux-686.linux-686
+++ /dev/null
@@ -1,9 +0,0 @@
-# CONFIG.linux-686.linux-686
-#
-# Definitions for linux-686 host - linux-686 target builds
-# Sites may override these definitions in CONFIG_SITE.linux-686.linux-686
-#-------------------------------------------------------
-
-# Include linux-x86 compiler definitions
-include $(CONFIG)/os/CONFIG.linux-x86.linux-x86
-
diff --git a/configure/os/CONFIG.linux-aarch64.Common b/configure/os/CONFIG.linux-aarch64.Common
new file mode 100644
index 000000000..6e577110f
--- /dev/null
+++ b/configure/os/CONFIG.linux-aarch64.Common
@@ -0,0 +1,8 @@
+# CONFIG.linux-aarch64.Common
+#
+# Definitions for linux-aarch64 host builds
+# Sites may override these definitions in CONFIG_SITE.linux-aarch64.Common
+#-------------------------------------------------------
+
+#Include definitions common to unix hosts
+include $(CONFIG)/os/CONFIG.UnixCommon.Common
diff --git a/configure/os/CONFIG.linux-aarch64.linux-aarch64 b/configure/os/CONFIG.linux-aarch64.linux-aarch64
new file mode 100644
index 000000000..3090a875e
--- /dev/null
+++ b/configure/os/CONFIG.linux-aarch64.linux-aarch64
@@ -0,0 +1,8 @@
+# CONFIG.linux-aarch64.linux-aarch64
+#
+# Definitions for native linux-aarch64 builds
+# Override these definitions in CONFIG_SITE.linux-aarch64.linux-aarch64
+#-------------------------------------------------------
+
+# Include common gnu compiler definitions
+include $(CONFIG)/CONFIG.gnuCommon
diff --git a/configure/os/CONFIG.linux-arm.linux-arm b/configure/os/CONFIG.linux-arm.linux-arm
index 2e7687d0a..f96877da4 100644
--- a/configure/os/CONFIG.linux-arm.linux-arm
+++ b/configure/os/CONFIG.linux-arm.linux-arm
@@ -6,3 +6,8 @@
# Include common gnu compiler definitions
include $(CONFIG)/CONFIG.gnuCommon
+
+STATIC_LDFLAGS_YES= -Wl,-Bstatic
+STATIC_LDFLAGS_NO=
+STATIC_LDLIBS_YES= -Wl,-Bdynamic
+STATIC_LDLIBS_NO=
diff --git a/configure/os/CONFIG.linux-x86.Common b/configure/os/CONFIG.linux-x86.Common
index bfaf967ca..4a525551e 100644
--- a/configure/os/CONFIG.linux-x86.Common
+++ b/configure/os/CONFIG.linux-x86.Common
@@ -7,4 +7,4 @@
#Include definitions common to unix hosts
include $(CONFIG)/os/CONFIG.UnixCommon.Common
-WIND_HOST_TYPE = x86-linux
+WIND_HOST_TYPE = x86-linux2
diff --git a/configure/os/CONFIG.linux-x86.linux-arm b/configure/os/CONFIG.linux-x86.linux-arm
index 63bd5d8be..49834e70f 100644
--- a/configure/os/CONFIG.linux-x86.linux-arm
+++ b/configure/os/CONFIG.linux-x86.linux-arm
@@ -4,7 +4,7 @@
# Override these settings in CONFIG_SITE.linux-x86.linux-arm
#-------------------------------------------------------
-VALID_BUILDS = Ioc
+VALID_BUILDS = Ioc Command
GNU_TARGET = arm-linux
# prefix of compiler tools
diff --git a/configure/os/CONFIG.linux-x86.linux-arm_eb b/configure/os/CONFIG.linux-x86.linux-arm_eb
deleted file mode 100644
index f67bf3990..000000000
--- a/configure/os/CONFIG.linux-x86.linux-arm_eb
+++ /dev/null
@@ -1,9 +0,0 @@
-# CONFIG.linux-x86.linux-arm_eb
-#
-# Definitions for linux-x86 host - linux-arm_eb (big endian) target builds
-# Sites may override these definitions in CONFIG_SITE.linux-x86.linux-arm_eb
-#-------------------------------------------------------
-
-# Include definitions for linux-arm targets
-include $(CONFIG)/os/CONFIG.linux-x86.linux-arm
-
diff --git a/configure/os/CONFIG.linux-x86.linux-arm_el b/configure/os/CONFIG.linux-x86.linux-arm_el
deleted file mode 100644
index f924796a9..000000000
--- a/configure/os/CONFIG.linux-x86.linux-arm_el
+++ /dev/null
@@ -1,9 +0,0 @@
-# CONFIG.linux-x86.linux-arm_el
-#
-# Definitions for linux-x86 host - linux-arm_el (little endian) target builds
-# Sites may override these definitions in CONFIG_SITE.linux-x86.linux-arm_el
-#-------------------------------------------------------
-
-# Include definitions for linux-arm targets
-include $(CONFIG)/os/CONFIG.linux-x86.linux-arm
-
diff --git a/configure/os/CONFIG.linux-x86.linux-cris b/configure/os/CONFIG.linux-x86.linux-cris
deleted file mode 100644
index 8244916e5..000000000
--- a/configure/os/CONFIG.linux-x86.linux-cris
+++ /dev/null
@@ -1,38 +0,0 @@
-# CONFIG.linux-x86.linux-cris
-#
-# Author: Peter Zumbruch
-# GSI
-# P.Zumbruch@gsi.de
-#
-# Definitions for linux-x86 host - linux-cris target builds
-# Sites may override these definitions in CONFIG_SITE.linux-x86.linux-cris
-#-------------------------------------------------------
-
-GNU_DIR = $(CRIS_CROSS_COMPILER)
-
-#STATIC_...
-STATIC_LDFLAGS_YES= -Wl,-Bstatic
-
-## debian-gcc Bug#438641
-GNU_LDLIBS_YES =
-STATIC_LDFLAGS_YES += -static-libgcc
-
-# if not in debug mode strip all symbols
-ifndef CRIS_COMPILER_DEBUG
-STATIC_LDFLAGS_YES += -Wl,--strip-all
-endif
-
-ifeq ($(GNU),YES)
-STATIC_LDFLAGS_NO = -lgcc
-else
-STATIC_LDFLAGS_NO =
-endif
-
-STATIC_LDLIBS_YES=
-STATIC_LDLIBS_NO=
-
-OPT_CXXFLAGS_YES = -Os
-
-ifeq ($(STATIC_BUILD), YES)
- $(shell echo yes)
-endif
diff --git a/configure/os/CONFIG.linux-x86.linux-cris_v10 b/configure/os/CONFIG.linux-x86.linux-cris_v10
deleted file mode 100644
index a227ac07c..000000000
--- a/configure/os/CONFIG.linux-x86.linux-cris_v10
+++ /dev/null
@@ -1,20 +0,0 @@
-# CONFIG.linux-x86.linux-cris_v10
-#
-# Author: Peter Zumbruch
-# GSI
-# P.Zumbruch@gsi.de
-#
-# Definitions for linux-x86 host - linux-cris_v10 target builds
-# Sites may override these definitions in CONFIG_SITE.linux-x86.linux-cris_v10
-#-------------------------------------------------------
-
-# Include definitions common to all linux-cris targets
-include $(CONFIG)/os/CONFIG.Common.linux-cris
-
-GNU_TARGET = cris-axis-linux-gnu
-
-ARCH_DEP_CFLAGS += -march=v10
-
-# if you are using different places for cris_v10 cris_v32
-# you have to define for each architecture
-# AXIS_SDK_DIR=
diff --git a/configure/os/CONFIG.linux-x86.linux-cris_v32 b/configure/os/CONFIG.linux-x86.linux-cris_v32
deleted file mode 100644
index eee8f3344..000000000
--- a/configure/os/CONFIG.linux-x86.linux-cris_v32
+++ /dev/null
@@ -1,20 +0,0 @@
-# CONFIG.linux-x86.linux-cris_v32
-#
-# Author: Peter Zumbruch
-# GSI
-# P.Zumbruch@gsi.de
-#
-# Definitions for linux-x86 host - linux-cris_v32 target builds
-# Sites may override these definitions in CONFIG_SITE.linux-x86.linux-cris_v32
-#-------------------------------------------------------
-
-# Include definitions common to all linux-cris targets
-include $(CONFIG)/os/CONFIG.Common.linux-cris
-
-GNU_TARGET = crisv32-axis-linux-gnu
-
-ARCH_DEP_CFLAGS += -march=v32
-
-# if you are using different places for cris_v10 cris_v32
-# you have to define for each architecture
-# AXIS_SDK_DIR=
diff --git a/configure/os/CONFIG.linux-x86.linux-x86 b/configure/os/CONFIG.linux-x86.linux-x86
index f6a79241a..153ce0d68 100644
--- a/configure/os/CONFIG.linux-x86.linux-x86
+++ b/configure/os/CONFIG.linux-x86.linux-x86
@@ -11,6 +11,3 @@ STATIC_LDFLAGS_YES= -Wl,-Bstatic
STATIC_LDFLAGS_NO=
STATIC_LDLIBS_YES= -Wl,-Bdynamic
STATIC_LDLIBS_NO=
-
-SHRLIB_LDFLAGS += -Wl,-h$@
-LOADABLE_SHRLIB_LDFLAGS += -Wl,-h$@
diff --git a/configure/os/CONFIG.linux-x86.win32-x86-mingw b/configure/os/CONFIG.linux-x86.win32-x86-mingw
index 150f13864..35aa20b56 100644
--- a/configure/os/CONFIG.linux-x86.win32-x86-mingw
+++ b/configure/os/CONFIG.linux-x86.win32-x86-mingw
@@ -21,4 +21,4 @@ LOADABLE_SHRLIB_LDFLAGS = -shared \
GNU_LDLIBS_YES =
# Link with system libraries
-OP_SYS_LDLIBS = -lws2_32 -ladvapi32 -luser32 -lkernel32 -lwinmm
+OP_SYS_LDLIBS += -lpsapi -lws2_32 -ladvapi32 -luser32 -lkernel32 -lwinmm -ldbghelp
diff --git a/configure/os/CONFIG.linux-x86_64.Common b/configure/os/CONFIG.linux-x86_64.Common
index 2a751b38c..22cab92ef 100644
--- a/configure/os/CONFIG.linux-x86_64.Common
+++ b/configure/os/CONFIG.linux-x86_64.Common
@@ -7,4 +7,4 @@
#Include definitions common to unix hosts
include $(CONFIG)/os/CONFIG.UnixCommon.Common
-WIND_HOST_TYPE = x86-linux
+WIND_HOST_TYPE = x86-linux2
diff --git a/configure/os/CONFIG.linux-x86_64.linux-aarch64 b/configure/os/CONFIG.linux-x86_64.linux-aarch64
new file mode 100644
index 000000000..2a237eff3
--- /dev/null
+++ b/configure/os/CONFIG.linux-x86_64.linux-aarch64
@@ -0,0 +1,28 @@
+# CONFIG.linux-x86_64.linux-aarch64
+#
+# Definitions for linux-x86_64 host - linux-aarch64 target builds
+# Sites may override these in CONFIG_SITE.linux-x86_64.linux-aarch64
+#-------------------------------------------------------
+
+VALID_BUILDS = Ioc Command
+GNU_TARGET = aarch64-linux
+
+# prefix of compiler tools
+CMPLR_SUFFIX =
+CMPLR_PREFIX = $(addsuffix -,$(GNU_TARGET))
+
+# Provide a link-time path for readline if needed
+OP_SYS_INCLUDES += $(READLINE_DIR:%=-I%/include)
+READLINE_LDFLAGS = $(READLINE_DIR:%=-L%/lib)
+RUNTIME_LDFLAGS_READLINE_YES_NO = $(READLINE_DIR:%=-Wl,-rpath,%/lib)
+RUNTIME_LDFLAGS += \
+ $(RUNTIME_LDFLAGS_READLINE_$(LINKER_USE_RPATH)_$(STATIC_BUILD))
+SHRLIBDIR_LDFLAGS += $(READLINE_LDFLAGS)
+PRODDIR_LDFLAGS += $(READLINE_LDFLAGS)
+
+# Library flags
+STATIC_LDFLAGS_YES= -Wl,-Bstatic
+STATIC_LDFLAGS_NO=
+STATIC_LDLIBS_YES= -Wl,-Bdynamic
+STATIC_LDLIBS_NO=
+
diff --git a/configure/os/CONFIG.solaris-sparc-gnu.solaris-sparc-gnu b/configure/os/CONFIG.solaris-sparc-gnu.solaris-sparc-gnu
index 03476b833..dfa1522ea 100644
--- a/configure/os/CONFIG.solaris-sparc-gnu.solaris-sparc-gnu
+++ b/configure/os/CONFIG.solaris-sparc-gnu.solaris-sparc-gnu
@@ -18,6 +18,6 @@ STATIC_LDLIBS_NO=
OP_SYS_LDFLAGS += -z ignore -z combreloc -z lazyload
-SHRLIB_LDFLAGS += -Wl,-z,defs -Wl,-z,text -Wl,-h,$@
-LOADABLE_SHRLIB_LDFLAGS += -Wl,-z,text -Wl,-h,$@
+SHRLIB_LDFLAGS += -Wl,-z,defs -Wl,-z,text
+LOADABLE_SHRLIB_LDFLAGS += -Wl,-z,text
GNU_LDLIBS_YES += -lc
diff --git a/configure/os/CONFIG.win32-x86-mingw.win32-x86-mingw b/configure/os/CONFIG.win32-x86-mingw.win32-x86-mingw
index 2a7827ccd..9c4f56a5c 100644
--- a/configure/os/CONFIG.win32-x86-mingw.win32-x86-mingw
+++ b/configure/os/CONFIG.win32-x86-mingw.win32-x86-mingw
@@ -32,4 +32,4 @@ LOADABLE_SHRLIB_LDFLAGS = -shared \
GNU_LDLIBS_YES =
# Link with system libraries
-OP_SYS_LDLIBS = -lws2_32 -ladvapi32 -luser32 -lkernel32 -lwinmm
+OP_SYS_LDLIBS += -lpsapi -lws2_32 -ladvapi32 -luser32 -lkernel32 -lwinmm -ldbghelp
diff --git a/configure/os/CONFIG.win32-x86.Common b/configure/os/CONFIG.win32-x86.Common
index be328cc19..8ea906688 100644
--- a/configure/os/CONFIG.win32-x86.Common
+++ b/configure/os/CONFIG.win32-x86.Common
@@ -11,6 +11,7 @@ MKDIR = $(PERL) -MExtUtils::Command -e mkpath
RMDIR = $(PERL) -MExtUtils::Command -e rm_rf
NOP = $(PERL) -e ''
CAT = $(PERL) -MExtUtils::Command -e cat
+TOUCH = $(PERL) -MExtUtils::Command -e touch
WIND_HOST_TYPE = x86-win32
OSITHREAD_USE_DEFAULT_STACK = NO
@@ -25,4 +26,3 @@ endif
# Needed to find dlls for base installed build tools (antelope,eflex,...)
PATH := $(EPICS_BASE_BIN):$(PATH)
-
diff --git a/configure/os/CONFIG.win32-x86.win32-x86 b/configure/os/CONFIG.win32-x86.win32-x86
index 6a5078d60..d45a48041 100644
--- a/configure/os/CONFIG.win32-x86.win32-x86
+++ b/configure/os/CONFIG.win32-x86.win32-x86
@@ -6,7 +6,7 @@
# Win32 valid build types and include directory suffixes
-VALID_BUILDS = Host Ioc
+VALID_BUILDS = Host Ioc Command
CMPLR_CLASS = msvc
@@ -16,7 +16,7 @@ OPT_WHOLE_PROGRAM = YES
WINLINK = link
-RCCMD = rc -l 0x409 $(INCLUDES) -fo $@ $<
+RCCMD = rc -nologo -l 0x409 $(INCLUDES) -fo $@ $<
ARCMD = lib -nologo -verbose -out:$@ $(LIB_OPT_LDFLAGS) $(LIBRARY_LD_OBJS)
@@ -49,9 +49,9 @@ OPT_CFLAGS_YES_NO = -Ox -Oy-
OPT_CFLAGS_YES = $(OPT_CFLAGS_YES_$(OPT_WHOLE_PROGRAM))
#
-# -Zi generate program database for debugging information
+# -Z7 generate C7 compatible debugging information (inside .obj)
# -RTCsu enable run-time error checks
-OPT_CFLAGS_NO = -Zi -RTCsu
+OPT_CFLAGS_NO = -Z7 -RTCsu
# specify object file name and location
OBJ_CFLAG = -Fo
@@ -107,6 +107,9 @@ CODE_CPPFLAGS += -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE
WARN_CXXFLAGS_YES = -W3 -w44355 -w44344 -w44251
WARN_CXXFLAGS_NO = -W1
+# Silence tr1 namespace deprecation warnings
+WARN_CXXFLAGS += -D_SILENCE_TR1_NAMESPACE_DEPRECATION_WARNING
+
#
# -Ox maximum optimizations
# -GL whole program optimization
@@ -116,9 +119,9 @@ OPT_CXXFLAGS_YES_NO = -Ox -Oy-
OPT_CXXFLAGS_YES = $(OPT_CXXFLAGS_YES_$(OPT_WHOLE_PROGRAM))
#
-# -Zi generate program database for debugging information
+# -Z7 generate C7 compatible debugging information (inside .obj)
# -RTCsu enable run-time error checks
-OPT_CXXFLAGS_NO = -RTCsu -Zi
+OPT_CXXFLAGS_NO = -RTCsu -Z7
# specify object file name and location
OBJ_CXXFLAG = -Fo
@@ -135,25 +138,11 @@ OBJ_CXXFLAG = -Fo
STATIC_CXXFLAGS_YES= -MT$(VISC_CFLAGS_DEBUG) $(BUILD_DLL_CFLAGS)
STATIC_CXXFLAGS_NO= -MD$(VISC_CFLAGS_DEBUG) $(BUILD_DLL_CFLAGS) -DEPICS_CALL_DLL
-STATIC_LDLIBS_YES=ws2_32.lib advapi32.lib user32.lib kernel32.lib winmm.lib
+STATIC_LDLIBS_YES=ws2_32.lib advapi32.lib user32.lib kernel32.lib winmm.lib dbghelp.lib
STATIC_LDLIBS_NO=
STATIC_LDFLAGS=
RANLIB=
-#
-# option needed for parallel builds with Visual Studio 2013 onward
-# VS2012 and above have VisualStudioVersion, so just need to exclude 2012 (11.0)
-# -FS Force Synchronous PDB Writes
-#
-ifneq ($(VisualStudioVersion),)
-ifneq ($(VisualStudioVersion),11.0)
- OPT_CXXFLAGS_NO += -FS
- OPT_CFLAGS_NO += -FS
-endif
-endif
-
-
-#
# add -profile here to run the ms profiler
# -LTCG whole program optimization
# -incremental:no full linking
diff --git a/configure/os/CONFIG_SITE.Common.RTEMS b/configure/os/CONFIG_SITE.Common.RTEMS
index 0b5d227ee..6857dc9a9 100644
--- a/configure/os/CONFIG_SITE.Common.RTEMS
+++ b/configure/os/CONFIG_SITE.Common.RTEMS
@@ -3,11 +3,26 @@
# Site-specific information for all RTEMS targets
#-------------------------------------------------------
-# Where to find RTEMS
+# Where to find RTEMS, and what version is it
#
+# RTEMS_BASE must point to the specific installation of RTEMS to
+# build the target code with.
+# RTEMS_VERSION is used in the path to the toolsets inside that
+# installation. For RTEMS 5 only the major version number is
+# used, but for RTEMS 4.10.2 say all 3 components are required.
+#
+
+# FHI:
+#RTEMS_VERSION = 5
+#RTEMS_BASE = /home/h1/DBG/rtems
+#RTEMS_BASE = /home/ad/MVME6100/rtems/$(RTEMS_VERSION)
+#RTEMS_BASE = /opt/RTEMS/qoriq/rtems/$(RTEMS_VERSION)
+
# APS:
-RTEMS_VERSION = 4.10.2
-RTEMS_BASE = /usr/local/vw/rtems/rtems-$(RTEMS_VERSION)
+#RTEMS_VERSION = 4.10.2
+#RTEMS_BASE = /usr/local/vw/rtems/rtems-4.10.2
+#RTEMS_VERSION = 5
+#RTEMS_BASE = /usr/local/vw/rtems/rtems-5.1
# Cross-compile toolchain in $(RTEMS_TOOLS)/bin
#
diff --git a/configure/os/CONFIG_SITE.Common.RTEMS-pc386 b/configure/os/CONFIG_SITE.Common.RTEMS-pc386
deleted file mode 100644
index c772c44fc..000000000
--- a/configure/os/CONFIG_SITE.Common.RTEMS-pc386
+++ /dev/null
@@ -1,3 +0,0 @@
-#
-# Site-specific overrides for RTEMS-pc386 target
-#
diff --git a/configure/os/CONFIG_SITE.Common.RTEMS-pc386-qemu b/configure/os/CONFIG_SITE.Common.RTEMS-pc386-qemu
new file mode 100644
index 000000000..0f930c5d9
--- /dev/null
+++ b/configure/os/CONFIG_SITE.Common.RTEMS-pc386-qemu
@@ -0,0 +1,9 @@
+# CONFIG_SITE.Common.RTEMS-pc386-qemu
+#
+# Site-specific overrides for the RTEMS-pc386-qemu target
+#
+
+# If you're building this architecture you _probably_ want to
+# run the tests for it under QEMU, but if not you can turn
+# them off here by commenting out this line:
+CROSS_COMPILER_RUNTEST_ARCHS += $(T_A)
diff --git a/configure/os/CONFIG_SITE.Common.RTEMS-pc686-qemu b/configure/os/CONFIG_SITE.Common.RTEMS-pc686-qemu
new file mode 100644
index 000000000..4ed2ed36c
--- /dev/null
+++ b/configure/os/CONFIG_SITE.Common.RTEMS-pc686-qemu
@@ -0,0 +1,9 @@
+# CONFIG_SITE.Common.RTEMS-pc686-qemu
+#
+# Site-specific overrides for the RTEMS-pc686-qemu target
+#
+
+# If you're building this architecture you _probably_ want to
+# run the tests for it under QEMU, but if not you can turn
+# them off here by commenting out this line:
+CROSS_COMPILER_RUNTEST_ARCHS += $(T_A)
diff --git a/configure/os/CONFIG_SITE.Common.cygwin-x86 b/configure/os/CONFIG_SITE.Common.cygwin-x86
index eae9ee5dd..e346c3475 100644
--- a/configure/os/CONFIG_SITE.Common.cygwin-x86
+++ b/configure/os/CONFIG_SITE.Common.cygwin-x86
@@ -16,3 +16,9 @@ COMMANDLINE_LIBRARY = READLINE_NCURSESW
# No other libraries needed
#COMMANDLINE_LIBRARY = READLINE
+
+
+# WARNING: Variables that are set in $(CONFIG)/CONFIG.gnuCommon cannot be
+# overridden in this file for native builds, e.g. variables such as
+# OPT_CFLAGS_YES, WARN_CFLAGS, SHRLIB_LDFLAGS
+# They must be set in CONFIG_SITE.cygwin-x86.cygwin-x86 instead.
diff --git a/configure/os/CONFIG_SITE.Common.cygwin-x86_64 b/configure/os/CONFIG_SITE.Common.cygwin-x86_64
index 8d318e04e..8c549fe9b 100644
--- a/configure/os/CONFIG_SITE.Common.cygwin-x86_64
+++ b/configure/os/CONFIG_SITE.Common.cygwin-x86_64
@@ -11,10 +11,8 @@
#LDLIBS_READLINE = -lreadline -lcurses
-# It makes sense to include debugging symbols even in optimized builds
-# in case you want to attach gdb to the process or examine a core-dump.
-# This does cost disk space, but not memory as debug symbols are not
-# loaded into RAM when the binary is loaded.
-OPT_CFLAGS_YES += -g
-OPT_CXXFLAGS_YES += -g
+# WARNING: Variables that are set in $(CONFIG)/CONFIG.gnuCommon cannot be
+# overridden in this file for native builds, e.g. variables such as
+# OPT_CFLAGS_YES, WARN_CFLAGS, SHRLIB_LDFLAGS
+# They must be set in CONFIG_SITE.cygwin-x86_64.cygwin-x86_64 instead.
diff --git a/configure/os/CONFIG_SITE.Common.darwin-aarch64 b/configure/os/CONFIG_SITE.Common.darwin-aarch64
new file mode 100644
index 000000000..8d79eb16e
--- /dev/null
+++ b/configure/os/CONFIG_SITE.Common.darwin-aarch64
@@ -0,0 +1,9 @@
+# CONFIG_SITE.Common.darwin-aarch64
+#
+# Site override definitions for darwin-aarch64 target builds
+#-------------------------------------------------------
+
+#
+# arm64 devices: Apple Silicon M1
+
+ARCH_CLASS = arm64
diff --git a/configure/os/CONFIG_SITE.Common.darwin-ppc b/configure/os/CONFIG_SITE.Common.darwin-ppc
deleted file mode 100644
index a2550147f..000000000
--- a/configure/os/CONFIG_SITE.Common.darwin-ppc
+++ /dev/null
@@ -1,12 +0,0 @@
-# CONFIG_SITE.Common.darwin-ppc
-#
-# Site override definitions for darwin-ppc target builds
-#-------------------------------------------------------
-
-# Select which CPU architectures to include in your universal binaries:
-# ppc
-# ppc64 - Not tested
-
-ARCH_CLASS = ppc
-#ARCH_CLASS = ppc64
-#ARCH_CLASS = ppc ppc64
diff --git a/configure/os/CONFIG_SITE.Common.darwin-ppcx86 b/configure/os/CONFIG_SITE.Common.darwin-ppcx86
deleted file mode 100644
index 2191d54f8..000000000
--- a/configure/os/CONFIG_SITE.Common.darwin-ppcx86
+++ /dev/null
@@ -1,20 +0,0 @@
-# CONFIG_SITE.Common.darwin-ppcx86
-#
-# Site override definitions for darwin-ppcx86 target builds
-#----------------------------------------------------------
-
-# Select which CPU architectures to include in your universal binaries:
-# ppc
-# i386
-# ppc64 - Not tested
-# x86_64 - Needs MacOS 10.4 with Universal SDK, or 10.5 or later.
-
-ARCH_CLASS = ppc i386
-#ARCH_CLASS = ppc x86_64
-#ARCH_CLASS = ppc i386 x86_64
-#ARCH_CLASS = ppc64 i386
-#ARCH_CLASS = ppc64 x86_64
-#ARCH_CLASS = ppc64 i386 x86_64
-#ARCH_CLASS = ppc ppc64 i386
-#ARCH_CLASS = ppc ppc64 x86_64
-#ARCH_CLASS = ppc ppc64 i386 x86_64
diff --git a/configure/os/CONFIG_SITE.Common.darwin-x86 b/configure/os/CONFIG_SITE.Common.darwin-x86
index 1c5c93696..e837d63f0 100644
--- a/configure/os/CONFIG_SITE.Common.darwin-x86
+++ b/configure/os/CONFIG_SITE.Common.darwin-x86
@@ -4,14 +4,12 @@
#-------------------------------------------------------
# Select which CPU architecture(s) to include in your MacOS binaries:
-# i386, x86_64, or both (fat binaries).
+# x86_64 only, or arm64 as well (fat binaries).
-#ARCH_CLASS = i386
ARCH_CLASS = x86_64
-#ARCH_CLASS = i386 x86_64
+#ARCH_CLASS = arm64 x86_64
-#
-# Uncomment the following 3 lines to build with Apple's GCC instead of CLANG.
+# Uncomment the following 3 lines to build with GCC instead of CLANG.
#
#CMPLR_CLASS = gcc
#CC = gcc
diff --git a/configure/os/CONFIG_SITE.Common.linux-aarch64 b/configure/os/CONFIG_SITE.Common.linux-aarch64
new file mode 100644
index 000000000..7da494439
--- /dev/null
+++ b/configure/os/CONFIG_SITE.Common.linux-aarch64
@@ -0,0 +1,39 @@
+# CONFIG_SITE.Common.linux-aarch64
+#
+# Site Specific definitions for all linux-aarch64 targets
+#-------------------------------------------------------
+
+# NOTE for SHARED_LIBRARIES: In most cases if this is set to YES the
+# shared libraries will be found automatically. However if the .so
+# files are installed at a different path to their compile-time path
+# then in order to be found at runtime do one of these:
+# a) LD_LIBRARY_PATH must include the full absolute pathname to
+# $(INSTALL_LOCATION)/lib/$(EPICS_HOST_ARCH) when invoking base
+# executables.
+# b) Add the runtime path to SHRLIB_DEPLIB_DIRS and PROD_DEPLIB_DIRS, which
+# will add the named directory to the list contained in the executables.
+# c) Add the runtime path to /etc/ld.so.conf and run ldconfig
+# to inform the system of the shared library location.
+
+# Depending on your version of Linux you'll want one of the following
+# lines to enable command-line editing and history in iocsh. If you're
+# not sure which, start with the top one and work downwards until the
+# build doesn't fail to link the readline library. If none of them work,
+# comment them all out to build without readline support.
+
+# No other libraries needed (recent Fedora, Ubuntu etc.):
+#COMMANDLINE_LIBRARY = READLINE
+
+# Needs -lncurses (RHEL 5 etc.):
+#COMMANDLINE_LIBRARY = READLINE_NCURSES
+
+# Needs -lcurses (older versions)
+#COMMANDLINE_LIBRARY = READLINE_CURSES
+
+
+# WARNING: Variables that are set in $(CONFIG)/CONFIG.gnuCommon cannot be
+# overridden in this file for native builds, e.g. variables such as
+# OPT_CFLAGS_YES, WARN_CFLAGS, SHRLIB_LDFLAGS
+# They must be set in CONFIG_SITE.linux-aarch64.linux-aarch64 or for
+# cross-builds in CONFIG_SITE..linux-aarch64 instead.
+
diff --git a/configure/os/CONFIG_SITE.Common.linux-arm b/configure/os/CONFIG_SITE.Common.linux-arm
index 8f5fb8c82..3dc372497 100644
--- a/configure/os/CONFIG_SITE.Common.linux-arm
+++ b/configure/os/CONFIG_SITE.Common.linux-arm
@@ -15,11 +15,6 @@
# to inform the system of the shared library location.
-# Use GNU Readline if the header file is installed
-COMMANDLINE_LIBRARY = $(strip $(if $(wildcard \
- $(firstword $(READLINE_DIR) $(GNU_DIR))/include/readline/readline.h), \
- READLINE, EPICS))
-
# If libreadline needs additional libraries to be linked with it, try
# uncommenting each of the lines below in turn, starting with the top
# one and working downwards, until the build succeeds. Do a 'make rebuild'
@@ -33,3 +28,12 @@ COMMANDLINE_LIBRARY = $(strip $(if $(wildcard \
# Readline is broken or you don't want use it:
#COMMANDLINE_LIBRARY = EPICS
+
+
+# WARNING: Variables that are set in $(CONFIG)/CONFIG.gnuCommon cannot be
+# overridden in this file for native builds, e.g. variables such as
+# OPT_CFLAGS_YES, WARN_CFLAGS, SHRLIB_LDFLAGS
+# They must be set in CONFIG_SITE.linux-arm.linux-arm instead.
+
+# Permit access to 64-bit file-systems
+OP_SYS_CFLAGS += -D_FILE_OFFSET_BITS=64
diff --git a/configure/os/CONFIG_SITE.Common.linux-cris b/configure/os/CONFIG_SITE.Common.linux-cris
deleted file mode 100644
index 699f346ff..000000000
--- a/configure/os/CONFIG_SITE.Common.linux-cris
+++ /dev/null
@@ -1,34 +0,0 @@
-# CONFIG_SITE.Common.linux-cris
-#
-# Site-specific settings for the linux-cris target
-
-# NOTE: In most cases if SHARED_LIBRARIES is set to YES the
-# shared libraries will be found automatically. However if the .so
-# files are installed at a different path to their compile-time path
-# then in order to be found at runtime do one of these:
-# a) LD_LIBRARY_PATH must include the full absolute pathname to
-# $(INSTALL_LOCATION)/lib/$(EPICS_HOST_ARCH) when invoking base
-# executables.
-# b) Add the runtime path to SHRLIB_DEPLIB_DIRS and PROD_DEPLIB_DIRS, which
-# will add the named directory to the list contained in the executables.
-# c) Add the runtime path to /etc/ld.so.conf and run ldconfig
-# to inform the system of the shared library location.
-
-
-# Use GNU Readline if the header file is installed
-COMMANDLINE_LIBRARY = $(strip $(if $(wildcard \
- $(GNU_DIR)/include/readline/readline.h), READLINE, EPICS))
-
-# If libreadline needs additional libraries to be linked with it, try
-# uncommenting each of the lines below in turn, starting with the top
-# one and working downwards, until the build succeeds. Do a 'make rebuild'
-# from the top of the Base tree after changing this setting.
-
-# Needs -lncurses:
-#COMMANDLINE_LIBRARY = READLINE_NCURSES
-
-# Needs -lcurses:
-#COMMANDLINE_LIBRARY = READLINE_CURSES
-
-# Readline is broken or you don't want use it:
-#COMMANDLINE_LIBRARY = EPICS
diff --git a/configure/os/CONFIG_SITE.Common.linux-microblaze b/configure/os/CONFIG_SITE.Common.linux-microblaze
index b66b4cced..760ad6da6 100644
--- a/configure/os/CONFIG_SITE.Common.linux-microblaze
+++ b/configure/os/CONFIG_SITE.Common.linux-microblaze
@@ -12,10 +12,6 @@
GNU_DIR = /usr/local/vw/microblaze-2.0/microblazeel-unknown-linux-gnu
-# Use GNU Readline if the header file is installed
-COMMANDLINE_LIBRARY = $(strip $(if $(wildcard \
- $(GNU_DIR)/include/readline/readline.h), READLINE, EPICS))
-
# If libreadline needs additional libraries to be linked with it, try
# uncommenting each of the lines below in turn, starting with the top
# one and working downwards, until the build succeeds. Do a 'make rebuild'
diff --git a/configure/os/CONFIG_SITE.Common.linux-x86 b/configure/os/CONFIG_SITE.Common.linux-x86
index 22410a5af..c0f50a37d 100644
--- a/configure/os/CONFIG_SITE.Common.linux-x86
+++ b/configure/os/CONFIG_SITE.Common.linux-x86
@@ -15,10 +15,6 @@
# to inform the system of the shared library location.
-# Use GNU Readline if the header file is installed
-COMMANDLINE_LIBRARY = $(strip $(if $(wildcard \
- $(GNU_DIR)/include/readline/readline.h), READLINE, EPICS))
-
# If libreadline needs additional libraries to be linked with it, try
# uncommenting each of the lines below in turn, starting with the top
# one and working downwards, until the build succeeds. Do a 'make rebuild'
@@ -34,18 +30,17 @@ COMMANDLINE_LIBRARY = $(strip $(if $(wildcard \
#COMMANDLINE_LIBRARY = EPICS
+# WARNING: Variables that are set in $(CONFIG)/CONFIG.gnuCommon cannot be
+# overridden in this file for native builds, e.g. variables such as
+# OPT_CFLAGS_YES, WARN_CFLAGS, SHRLIB_LDFLAGS
+# They must be set in CONFIG_SITE.linux-x86.linux-x86 instead.
+
# Permit access to 64-bit file-systems
OP_SYS_CFLAGS += -D_FILE_OFFSET_BITS=64
-
-# Uncomment the followings lines to build with CLANG instead of GCC.
-#
-#GNU = NO
-#CMPLR_CLASS = clang
-#CC = clang
-#CCC = clang++
-
-
# Tune GNU compiler output for a specific 32-bit cpu-type
# (e.g. generic, native, i386, i686, pentium2/3/4, prescott, k6, athlon etc.)
GNU_TUNE_CFLAGS = -mtune=generic
+
+# Developers using a suitable compiler may enable its address sanitizer:
+#ENABLE_ASAN = YES
diff --git a/configure/os/CONFIG_SITE.Common.linux-x86_64 b/configure/os/CONFIG_SITE.Common.linux-x86_64
index f75c4f210..b98385f16 100644
--- a/configure/os/CONFIG_SITE.Common.linux-x86_64
+++ b/configure/os/CONFIG_SITE.Common.linux-x86_64
@@ -15,10 +15,6 @@
# to inform the system of the shared library location.
-# Use GNU Readline if the header file is installed
-COMMANDLINE_LIBRARY = $(strip $(if $(wildcard \
- $(GNU_DIR)/include/readline/readline.h), READLINE, EPICS))
-
# If libreadline needs additional libraries to be linked with it, try
# uncommenting each of the lines below in turn, starting with the top
# one and working downwards, until the build succeeds. Do a 'make rebuild'
@@ -34,14 +30,14 @@ COMMANDLINE_LIBRARY = $(strip $(if $(wildcard \
#COMMANDLINE_LIBRARY = EPICS
-# Uncomment the followings lines to build with CLANG instead of GCC.
-#
-#GNU = NO
-#CMPLR_CLASS = clang
-#CC = clang
-#CCC = clang++
-
+# WARNING: Variables that are set in $(CONFIG)/CONFIG.gnuCommon cannot be
+# overridden in this file for native builds, e.g. variables such as
+# OPT_CFLAGS_YES, WARN_CFLAGS, SHRLIB_LDFLAGS
+# They must be set in CONFIG_SITE.linux-x86_64.linux-x86_64 instead.
# Tune GNU compiler output for a specific 64-bit cpu-type
# (e.g. generic, native, core2, nocona, k8, opteron, athlon64, barcelona etc.)
GNU_TUNE_CFLAGS = -mtune=generic
+
+# Developers using a suitable compiler may enable its address sanitizer:
+#ENABLE_ASAN = YES
diff --git a/configure/os/CONFIG_SITE.Common.linux-xscale_be b/configure/os/CONFIG_SITE.Common.linux-xscale_be
index 5fb5a4642..2905b88ba 100644
--- a/configure/os/CONFIG_SITE.Common.linux-xscale_be
+++ b/configure/os/CONFIG_SITE.Common.linux-xscale_be
@@ -3,11 +3,6 @@
# Site-specific settings for the linux-xscale_be target
-# Use GNU Readline if the header file is installed
-COMMANDLINE_LIBRARY = $(strip $(if $(wildcard \
- $(firstword $(READLINE_DIR) $(GNU_DIR))/include/readline/readline.h), \
- READLINE, EPICS))
-
# If libreadline needs additional libraries to be linked with it, try
# uncommenting each of the lines below in turn, starting with the top
# one and working downwards, until the build succeeds. Do a 'make rebuild'
diff --git a/configure/os/CONFIG_SITE.Common.linuxCommon b/configure/os/CONFIG_SITE.Common.linuxCommon
index 7f5d4aa11..2b035eac9 100644
--- a/configure/os/CONFIG_SITE.Common.linuxCommon
+++ b/configure/os/CONFIG_SITE.Common.linuxCommon
@@ -2,10 +2,9 @@
#
# Site-specific settings for all linux targets
+# WARNING: Variables that are set in $(CONFIG)/CONFIG.gnuCommon cannot be
+# overridden in this file for native builds, e.g. variables such as
+# OPT_CFLAGS_YES, WARN_CFLAGS, SHRLIB_LDFLAGS
+# They must be set in the host+target specific file instead:
+# CONFIG_SITE..
-# It makes sense to include debugging symbols even in optimized builds
-# in case you want to attach gdb to the process or examine a core-dump.
-# This does cost disk space, but not memory as debug symbols are not
-# loaded into RAM when the binary is loaded.
-OPT_CFLAGS_YES += -g
-OPT_CXXFLAGS_YES += -g
diff --git a/configure/os/CONFIG_SITE.Common.vxWorksCommon b/configure/os/CONFIG_SITE.Common.vxWorksCommon
index 38e63893f..0b0654aeb 100644
--- a/configure/os/CONFIG_SITE.Common.vxWorksCommon
+++ b/configure/os/CONFIG_SITE.Common.vxWorksCommon
@@ -1,21 +1,13 @@
# CONFIG_SITE.Common.vxWorksCommon
#
# Site specific definitions for vxWorks target builds.
-# Only the local epics system manager should modify this file
# Compiler options can vary with the vxWorks version number, so we
-# need to know that. However don't include any third-level digits
-# (e.g. the .2 in 5.5.2) because we don't need them.
+# need to know that. Do not include any third-level digits.
-# Note: vxWorks 5.4.x (Tornado 2.0.x) is not supported
+# Note: vxWorks 5.4.x and 5.5.x (Tornado 2.x) are not supported.
+# VxWorks 6.0 through 6.5 use older, untested versions of GCC.
-#VXWORKS_VERSION = 5.5
-#VXWORKS_VERSION = 6.0
-#VXWORKS_VERSION = 6.1
-#VXWORKS_VERSION = 6.2
-#VXWORKS_VERSION = 6.3
-#VXWORKS_VERSION = 6.4
-#VXWORKS_VERSION = 6.5
#VXWORKS_VERSION = 6.6
#VXWORKS_VERSION = 6.7
#VXWORKS_VERSION = 6.8
@@ -27,7 +19,6 @@ VXWORKS_VERSION = 6.9
# CONFIG_SITE.$(EPICS_HOST_ARCH).vxWorksCommon file.
# WIND_BASE is where you installed the Wind River software.
-# Under vxWorks 6.x this is *not* the same as the old VX_DIR setting
#WIND_BASE = /usr/local/vw/tornado22-$(ARCH_CLASS)
WIND_BASE = /usr/local/vw/vxWorks-$(VXWORKS_VERSION)
diff --git a/configure/os/CONFIG_SITE.darwin-ppc.Common b/configure/os/CONFIG_SITE.darwin-ppc.Common
deleted file mode 100644
index 05417e1f9..000000000
--- a/configure/os/CONFIG_SITE.darwin-ppc.Common
+++ /dev/null
@@ -1,4 +0,0 @@
-# CONFIG_SITE.darwin-ppc.Common
-#
-# Site override definitions for darwin-ppc host builds
-#-------------------------------------------------------
diff --git a/configure/os/CONFIG_SITE.darwin-ppcx86.Common b/configure/os/CONFIG_SITE.darwin-ppcx86.Common
deleted file mode 100644
index 42bd00531..000000000
--- a/configure/os/CONFIG_SITE.darwin-ppcx86.Common
+++ /dev/null
@@ -1,4 +0,0 @@
-# CONFIG_SITE.darwin-ppcx86.Common
-#
-# Site override definitions for darwin-ppcx86 host builds
-#-------------------------------------------------------
diff --git a/configure/os/CONFIG_SITE.darwinCommon.darwinCommon b/configure/os/CONFIG_SITE.darwinCommon.darwinCommon
index 297fd8e4f..d45422401 100644
--- a/configure/os/CONFIG_SITE.darwinCommon.darwinCommon
+++ b/configure/os/CONFIG_SITE.darwinCommon.darwinCommon
@@ -3,21 +3,27 @@
# Site specific definitions for darwin builds
#-------------------------------------------------------
-# Note the dir/firstword/wildcard functions below are used
-# to avoid warnings about missing directories.
+# These settings are designed for users of Homebrew.
+# Users of other third-party package managers are welcome to
+# provide patches appropriate for their manager.
+ifneq (,$(wildcard /opt/homebrew))
+ # Default location on aarch64
+ HOMEBREW_DIR = /opt/homebrew
+else ifneq (,$(wildcard /usr/local/Homebrew))
+ # Default location on x86_64
+ HOMEBREW_DIR = /usr/local
+else ifneq (,$(wildcard /opt/local/include/readline))
+ # MacPorts
+ READLINE_DIR = /opt/local
+endif
-# Mix-and-match of different package systems is probably not advisable,
-# but you can try that if you like...
-
-# Uncomment these definitions when using Homebrew packages:
-#OP_SYS_INCLUDES += -I/usr/local/include
-#OP_SYS_LDFLAGS += $(addprefix -L,$(dir $(firstword $(wildcard /usr/local/lib/*))))
-
-# Uncomment these definitions when using DarwinPorts packages:
-#OP_SYS_INCLUDES += -I/opt/local/include
-#OP_SYS_LDFLAGS += $(addprefix -L,$(dir $(firstword $(wildcard /opt/local/lib/*))))
-
-# Uncomment these definitions when using Fink packages:
-#OP_SYS_INCLUDES += -I/sw/include
-#OP_SYS_LDFLAGS += $(addprefix -L,$(dir $(firstword $(wildcard /sw/lib/*))))
+# Look for Homebrew's readline
+ifneq (,$(wildcard $(HOMEBREW_DIR)/opt/readline))
+ READLINE_DIR = $(HOMEBREW_DIR)/opt/readline
+endif
+# Use GNU readline if it's avaiilable
+ifneq (,$(wildcard $(READLINE_DIR)/include/readline/readline.h))
+ INCLUDES_READLINE = -I$(READLINE_DIR)/include
+ LDFLAGS_READLINE = -L$(READLINE_DIR)/lib
+endif
diff --git a/configure/os/CONFIG_SITE.linux-aarch64.linux-aarch64 b/configure/os/CONFIG_SITE.linux-aarch64.linux-aarch64
new file mode 100644
index 000000000..f569951f1
--- /dev/null
+++ b/configure/os/CONFIG_SITE.linux-aarch64.linux-aarch64
@@ -0,0 +1,5 @@
+# CONFIG_SITE.linux-aarch64.linux-aarch64
+#
+# Site specific definitions for native linux-aarch64 builds
+#-------------------------------------------------------
+
diff --git a/configure/os/CONFIG_SITE.linux-x86.Common b/configure/os/CONFIG_SITE.linux-x86.Common
index dc29e8f0d..afb74e914 100644
--- a/configure/os/CONFIG_SITE.linux-x86.Common
+++ b/configure/os/CONFIG_SITE.linux-x86.Common
@@ -3,7 +3,5 @@
# Site override definitions for linux-x86 host builds
#-------------------------------------------------------
-# JBA test override values
-#CROSS_COMPILER_TARGET_ARCHS = vxWorks-68040 solaris-sparc
-#CROSS_COMPILER_TARGET_ARCHS = vxWorks-68040
-#CROSS_COMPILER_TARGET_ARCHS = RTEMS-mvme2100 RTEMS-pc386 # RTEMS-mvme5500 RTEMS-mvme167
+#CROSS_COMPILER_TARGET_ARCHS = vxWorks-ppc32
+#CROSS_COMPILER_TARGET_ARCHS = RTEMS-mvme2100 RTEMS-pc386-qemu
diff --git a/configure/os/CONFIG_SITE.linux-x86.linux-arm b/configure/os/CONFIG_SITE.linux-x86.linux-arm
index a1edb423d..231c54bb8 100644
--- a/configure/os/CONFIG_SITE.linux-x86.linux-arm
+++ b/configure/os/CONFIG_SITE.linux-x86.linux-arm
@@ -8,7 +8,8 @@ GNU_TARGET = arm-xilinx-linux-gnueabi
# Set GNU tools install path
# Examples are installations at the APS:
-GNU_DIR = /usr/local/vw/zynq-2011.09
+#GNU_DIR = /usr/local/vw/zynq-2011.09
+GNU_DIR = /usr/local/vw/zynq-2016.1/gnu/arm/lin
#GNU_DIR = /usr/local/Xilinx/SDK/2016.3/gnu/arm/lin
#GNU_DIR = /APSshare/XilinxSDK/2015.4/gnu/arm/lin
diff --git a/configure/os/CONFIG_SITE.linux-x86.linux-arm_eb b/configure/os/CONFIG_SITE.linux-x86.linux-arm_eb
deleted file mode 100644
index 0bc2a4e5a..000000000
--- a/configure/os/CONFIG_SITE.linux-x86.linux-arm_eb
+++ /dev/null
@@ -1,13 +0,0 @@
-# CONFIG_SITE.linux-x86.linux-arm_eb
-#
-# Site specific definitions for linux-x86 host - linux-arm_eb target builds
-#-------------------------------------------------------
-
-# Include definitions for linux-arm targets
-include $(CONFIG)/os/CONFIG_SITE.linux-x86.linux-arm
-
-# Path to the GNU toolset for linux-arm_eb (big endian) target
-#GNU_DIR = /local/anj/cross-arm/gcc-3.4.5-glibc-2.3.6/armeb-linux
-
-# GNU crosscompiler target name
-#GNU_TARGET = armeb-linux
diff --git a/configure/os/CONFIG_SITE.linux-x86.linux-arm_el b/configure/os/CONFIG_SITE.linux-x86.linux-arm_el
deleted file mode 100644
index b82bc13bf..000000000
--- a/configure/os/CONFIG_SITE.linux-x86.linux-arm_el
+++ /dev/null
@@ -1,13 +0,0 @@
-# CONFIG_SITE.linux-x86.linux-arm_el
-#
-# Site specific definitions for linux-x86 host - linux-arm_el target builds
-#-------------------------------------------------------
-
-# Include definitions for linux-arm targets
-include $(CONFIG)/os/CONFIG_SITE.linux-x86.linux-arm
-
-# Path to the GNU toolset for linux-arm_el (little endian) target
-#GNU_DIR = /local/anj/cross-arm/gcc-3.4.5-glibc-2.3.6/armel-linux
-
-# GNU crosscompiler target name
-#GNU_TARGET = armel-linux
diff --git a/configure/os/CONFIG_SITE.linux-x86.linux-cris b/configure/os/CONFIG_SITE.linux-x86.linux-cris
deleted file mode 100644
index eb756ca8a..000000000
--- a/configure/os/CONFIG_SITE.linux-x86.linux-cris
+++ /dev/null
@@ -1,14 +0,0 @@
-# CONFIG_SITE.linux-x86.linux-cris
-#
-# Author: Peter Zumbruch
-# GSI
-# P.Zumbruch@gsi.de
-#
-# Site specific definitions for linux-x86 host - linux-cris target builds
-#-------------------------------------------------------
-
-# define site specific location of cris cross compiler's gnu directory
-# but without bin sub directory, this will be added automatically.
-
-CRIS_CROSS_COMPILER ?= UNDEFINED_ENV__CRIS_CROSS_COMPILER
-
diff --git a/configure/os/CONFIG_SITE.linux-x86.linux-x86 b/configure/os/CONFIG_SITE.linux-x86.linux-x86
index d359d174f..64810a835 100644
--- a/configure/os/CONFIG_SITE.linux-x86.linux-x86
+++ b/configure/os/CONFIG_SITE.linux-x86.linux-x86
@@ -3,3 +3,10 @@
# Site specific definitions for linux-x86 host - linux-x86 target builds
#-------------------------------------------------------
+# Uncomment the followings lines to build with CLANG instead of GCC.
+#
+#GNU = NO
+#CMPLR_CLASS = clang
+#CC = clang
+#CCC = clang++
+
diff --git a/configure/os/CONFIG_SITE.linux-x86.win32-x86-mingw b/configure/os/CONFIG_SITE.linux-x86.win32-x86-mingw
index dfc947eba..363664f26 100644
--- a/configure/os/CONFIG_SITE.linux-x86.win32-x86-mingw
+++ b/configure/os/CONFIG_SITE.linux-x86.win32-x86-mingw
@@ -14,10 +14,10 @@
#GNU_DIR = /usr/local
# Different distribution cross-build packages use different prefixes:
-# Ubuntu:
-#CMPLR_PREFIX = i686-w64-mingw32-
-# RHEL:
-CMPLR_PREFIX = i686-pc-mingw32-
+# Ubuntu, RHEL7:
+CMPLR_PREFIX = i686-w64-mingw32-
+# RHEL6:
+#CMPLR_PREFIX = i686-pc-mingw32-
# Debian?
#CMPLR_PREFIX = i586-mingw32msvc-
diff --git a/configure/os/CONFIG_SITE.linux-x86_64.linux-aarch64 b/configure/os/CONFIG_SITE.linux-x86_64.linux-aarch64
new file mode 100644
index 000000000..569d1c384
--- /dev/null
+++ b/configure/os/CONFIG_SITE.linux-x86_64.linux-aarch64
@@ -0,0 +1,30 @@
+# CONFIG_SITE.linux-x86_64.linux-aarch64
+#
+# Site specific definitions for linux-x86_64 host - linux-aarch64 target builds
+#-------------------------------------------------------
+
+# Set GNU crosscompiler target name
+GNU_TARGET = aarch64-linux-gnu
+
+# Set GNU tools install path
+# Examples is the installation at the APS:
+GNU_DIR = /usr/local/Xilinx/SDK/2018.3/gnu/aarch64/lin/aarch64-linux
+
+# If cross-building shared libraries and the paths on the target machine are
+# different than on the build host, you should uncomment the lines below to
+# disable embedding compile-time library paths into the generated files.
+# You will need to provide another way for programs to find their shared
+# libraries at runtime, such as by setting LD_LIBRARY_PATH or (better) using
+# mechanisms related to /etc/ld.so.conf
+#SHRLIBDIR_RPATH_LDFLAGS_YES_NO =
+#PRODDIR_RPATH_LDFLAGS_YES_NO =
+# However it is usually simpler to set STATIC_BUILD=YES here and not
+# try to use shared libraries at all when cross-building, like this:
+STATIC_BUILD=YES
+SHARED_LIBRARIES=NO
+
+# To use libreadline, point this to its install prefix
+#READLINE_DIR = $(GNU_DIR)
+#READLINE_DIR = /tools/cross/linux-x86.linux-arm/readline
+# See CONFIG_SITE.Common.linux-arm for other COMMANDLINE_LIBRARY values
+#COMMANDLINE_LIBRARY = READLINE
diff --git a/configure/os/CONFIG_SITE.linux-x86_64.linux-x86_64 b/configure/os/CONFIG_SITE.linux-x86_64.linux-x86_64
index 7a19d0dfe..2f538151a 100644
--- a/configure/os/CONFIG_SITE.linux-x86_64.linux-x86_64
+++ b/configure/os/CONFIG_SITE.linux-x86_64.linux-x86_64
@@ -3,4 +3,10 @@
# Site specific definitions for linux-x86_64 host - linux-x86_64 target builds
#-------------------------------------------------------
+# Uncomment the followings lines to build with CLANG instead of GCC.
+#
+#GNU = NO
+#CMPLR_CLASS = clang
+#CC = clang
+#CCC = clang++
diff --git a/configure/toolchain.c b/configure/toolchain.c
new file mode 100644
index 000000000..0a5276045
--- /dev/null
+++ b/configure/toolchain.c
@@ -0,0 +1,66 @@
+#ifdef _COMMENT_
+/* Extract compiler pre-defined macros as Make variables
+ *
+ * Expanded as $(INSTALL_CFG)/TOOLCHAIN.$(EPICS_HOST_ARCH).$(T_A)
+ *
+ * Must be careful not to #include any C definitions
+ * into what is really a Makefile snippet
+ *
+ * cf. https://sourceforge.net/p/predef/wiki/Home/
+ */
+/* GCC preprocessor drops C comments from output.
+ * MSVC preprocessor emits C comments in output
+ */
+#endif
+
+#if defined(__GNUC__) && !defined(__clang__)
+GCC_MAJOR = __GNUC__
+GCC_MINOR = __GNUC_MINOR__
+GCC_PATCH = __GNUC_PATCHLEVEL__
+
+#elif defined(__clang__)
+CLANG_MAJOR = __clang_major__
+CLANG_MINOR = __clang_minor__
+CLANG_PATCH = __clang_patchlevel__
+
+#elif defined(_MSC_VER)
+MSVC_VER = _MSC_VER
+#endif
+
+#ifdef __rtems__
+#include
+# if __RTEMS_MAJOR__>=5
+ OS_API = posix
+# else
+ OS_API = score
+# endif
+# if defined(RTEMS_NETWORKING)
+ /* legacy stack circa RTEMS <= 5 and networking internal to RTEMS */
+ RTEMS_LEGACY_NETWORKING_INTERNAL = yes
+# else
+# if !defined(__has_include)
+ /* assume old GCC implies RTEMS < 5 with mis-configured BSP */
+# error rebuild BSP with --enable-network
+# elif __has_include()
+ /* legacy stack circa RTEMS > 5 */
+ RTEMS_LEGACY_NETWORKING = yes
+# elif __has_include()
+ /* libbsd stack */
+ RTEMS_BSD_NETWORKING = yes
+# else
+# error Cannot determine RTEMS network configuration
+# endif
+# endif
+#endif
+
+#ifdef __has_include
+# if defined(__rtems__) && __RTEMS_MAJOR__<5 && __has_include()
+COMMANDLINE_LIBRARY ?= LIBTECLA
+# elif __has_include()
+COMMANDLINE_LIBRARY ?= READLINE
+# else
+COMMANDLINE_LIBRARY ?= EPICS
+# endif
+#else
+COMMANDLINE_LIBRARY ?= $(strip $(if $(wildcard $(if $(GNU_DIR),$(GNU_DIR)/include/readline/readline.h)), READLINE, EPICS))
+#endif
diff --git a/documentation/Doxyfile@ b/documentation/Doxyfile@
new file mode 100644
index 000000000..7462156d1
--- /dev/null
+++ b/documentation/Doxyfile@
@@ -0,0 +1,2360 @@
+# Doxyfile 1.8.8
+
+# This file describes the settings to be used by the documentation system
+# doxygen (www.doxygen.org) for a project.
+#
+# All text after a double hash (##) is considered a comment and is placed in
+# front of the TAG it is preceding.
+#
+# All text after a single hash (#) is considered a comment and will be ignored.
+# The format is:
+# TAG = value [value, ...]
+# For lists, items can also be appended using:
+# TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (\" \").
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+
+# This tag specifies the encoding used for all characters in the config file
+# that follow. The default is UTF-8 which is also the encoding used for all text
+# before the first occurrence of this tag. Doxygen uses libiconv (or the iconv
+# built into libc) for the transcoding. See http://www.gnu.org/software/libiconv
+# for the list of possible encodings.
+# The default value is: UTF-8.
+
+DOXYFILE_ENCODING = UTF-8
+
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by
+# double-quotes, unless you are using Doxywizard) that should identify the
+# project for which the documentation is generated. This name is used in the
+# title of most generated pages and in a few other places.
+# The default value is: My Project.
+
+PROJECT_NAME = "EPICS Base"
+
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. This
+# could be handy for archiving the generated documentation or if some version
+# control system is used.
+
+PROJECT_NUMBER = @EPICS_VERSION@.@EPICS_REVISION@.@EPICS_MODIFICATION@.@EPICS_PATCH_LEVEL@
+
+# Using the PROJECT_BRIEF tag one can provide an optional one line description
+# for a project that appears at the top of each page and should give viewer a
+# quick idea about the purpose of the project. Keep the description short.
+
+PROJECT_BRIEF =
+
+# With the PROJECT_LOGO tag one can specify an logo or icon that is included in
+# the documentation. The maximum height of the logo should not exceed 55 pixels
+# and the maximum width should not exceed 200 pixels. Doxygen will copy the logo
+# to the output directory.
+
+PROJECT_LOGO =
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path
+# into which the generated documentation will be written. If a relative path is
+# entered, it will be relative to the location where doxygen was started. If
+# left blank the current directory will be used.
+
+OUTPUT_DIRECTORY = .
+
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create 4096 sub-
+# directories (in 2 levels) under the output directory of each output format and
+# will distribute the generated files over these directories. Enabling this
+# option can be useful when feeding doxygen a huge amount of source files, where
+# putting all generated files in the same directory would otherwise causes
+# performance problems for the file system.
+# The default value is: NO.
+
+CREATE_SUBDIRS = NO
+
+# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII
+# characters to appear in the names of generated files. If set to NO, non-ASCII
+# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode
+# U+3044.
+# The default value is: NO.
+
+ALLOW_UNICODE_NAMES = NO
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all
+# documentation generated by doxygen is written. Doxygen will use this
+# information to generate all constant output in the proper language.
+# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese,
+# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States),
+# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian,
+# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages),
+# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian,
+# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian,
+# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish,
+# Ukrainian and Vietnamese.
+# The default value is: English.
+
+OUTPUT_LANGUAGE = English
+
+# If the BRIEF_MEMBER_DESC tag is set to YES doxygen will include brief member
+# descriptions after the members that are listed in the file and class
+# documentation (similar to Javadoc). Set to NO to disable this.
+# The default value is: YES.
+
+BRIEF_MEMBER_DESC = YES
+
+# If the REPEAT_BRIEF tag is set to YES doxygen will prepend the brief
+# description of a member or function before the detailed description
+#
+# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
+# brief descriptions will be completely suppressed.
+# The default value is: YES.
+
+REPEAT_BRIEF = NO
+
+# This tag implements a quasi-intelligent brief description abbreviator that is
+# used to form the text in various listings. Each string in this list, if found
+# as the leading text of the brief description, will be stripped from the text
+# and the result, after processing the whole list, is used as the annotated
+# text. Otherwise, the brief description is used as-is. If left blank, the
+# following values are used ($name is automatically replaced with the name of
+# the entity):The $name class, The $name widget, The $name file, is, provides,
+# specifies, contains, represents, a, an and the.
+
+ABBREVIATE_BRIEF = "The $name class" \
+ "The $name widget" \
+ "The $name file" \
+ is \
+ provides \
+ specifies \
+ contains \
+ represents \
+ a \
+ an \
+ the
+
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
+# doxygen will generate a detailed section even if there is only a brief
+# description.
+# The default value is: NO.
+
+ALWAYS_DETAILED_SEC = NO
+
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
+# inherited members of a class in the documentation of that class as if those
+# members were ordinary class members. Constructors, destructors and assignment
+# operators of the base classes will not be shown.
+# The default value is: NO.
+
+INLINE_INHERITED_MEMB = YES
+
+# If the FULL_PATH_NAMES tag is set to YES doxygen will prepend the full path
+# before files name in the file list and in the header files. If set to NO the
+# shortest path that makes the file name unique will be used
+# The default value is: YES.
+
+FULL_PATH_NAMES = YES
+
+# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path.
+# Stripping is only done if one of the specified strings matches the left-hand
+# part of the path. The tag can be used to show relative paths in the file list.
+# If left blank the directory from which doxygen is run is used as the path to
+# strip.
+#
+# Note that you can specify absolute paths here, but also relative paths, which
+# will be relative from the directory where doxygen is started.
+# This tag requires that the tag FULL_PATH_NAMES is set to YES.
+
+STRIP_FROM_PATH = @TOP@/include \
+ ..
+
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the
+# path mentioned in the documentation of a class, which tells the reader which
+# header file to include in order to use a class. If left blank only the name of
+# the header file containing the class definition is used. Otherwise one should
+# specify the list of include paths that are normally passed to the compiler
+# using the -I flag.
+
+STRIP_FROM_INC_PATH = @TOP@/include \
+ ..
+
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but
+# less readable) file names. This can be useful is your file systems doesn't
+# support long names like on DOS, Mac, or CD-ROM.
+# The default value is: NO.
+
+SHORT_NAMES = NO
+
+# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the
+# first line (until the first dot) of a Javadoc-style comment as the brief
+# description. If set to NO, the Javadoc-style will behave just like regular Qt-
+# style comments (thus requiring an explicit @brief command for a brief
+# description.)
+# The default value is: NO.
+
+JAVADOC_AUTOBRIEF = NO
+
+# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first
+# line (until the first dot) of a Qt-style comment as the brief description. If
+# set to NO, the Qt-style will behave just like regular Qt-style comments (thus
+# requiring an explicit \brief command for a brief description.)
+# The default value is: NO.
+
+QT_AUTOBRIEF = NO
+
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a
+# multi-line C++ special comment block (i.e. a block of //! or /// comments) as
+# a brief description. This used to be the default behavior. The new default is
+# to treat a multi-line C++ comment block as a detailed description. Set this
+# tag to YES if you prefer the old behavior instead.
+#
+# Note that setting this tag to YES also means that rational rose comments are
+# not recognized any more.
+# The default value is: NO.
+
+MULTILINE_CPP_IS_BRIEF = NO
+
+# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the
+# documentation from any documented member that it re-implements.
+# The default value is: YES.
+
+INHERIT_DOCS = YES
+
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce a
+# new page for each member. If set to NO, the documentation of a member will be
+# part of the file/class/namespace that contains it.
+# The default value is: NO.
+
+SEPARATE_MEMBER_PAGES = NO
+
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen
+# uses this value to replace tabs by spaces in code fragments.
+# Minimum value: 1, maximum value: 16, default value: 4.
+
+TAB_SIZE = 8
+
+# This tag can be used to specify a number of aliases that act as commands in
+# the documentation. An alias has the form:
+# name=value
+# For example adding
+# "sideeffect=@par Side Effects:\n"
+# will allow you to put the command \sideeffect (or @sideeffect) in the
+# documentation, which will result in a user-defined paragraph with heading
+# "Side Effects:". You can put \n's in the value part of an alias to insert
+# newlines.
+
+ALIASES =
+
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources
+# only. Doxygen will then generate output that is more tailored for C. For
+# instance, some of the names that are used will be different. The list of all
+# members will be omitted, etc.
+# The default value is: NO.
+
+OPTIMIZE_OUTPUT_FOR_C = NO
+
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or
+# Python sources only. Doxygen will then generate output that is more tailored
+# for that language. For instance, namespaces will be presented as packages,
+# qualified scopes will look different, etc.
+# The default value is: NO.
+
+OPTIMIZE_OUTPUT_JAVA = NO
+
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
+# sources. Doxygen will then generate output that is tailored for Fortran.
+# The default value is: NO.
+
+OPTIMIZE_FOR_FORTRAN = NO
+
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL
+# sources. Doxygen will then generate output that is tailored for VHDL.
+# The default value is: NO.
+
+OPTIMIZE_OUTPUT_VHDL = NO
+
+# Doxygen selects the parser to use depending on the extension of the files it
+# parses. With this tag you can assign which parser to use for a given
+# extension. Doxygen has a built-in mapping, but you can override or extend it
+# using this tag. The format is ext=language, where ext is a file extension, and
+# language is one of the parsers supported by doxygen: IDL, Java, Javascript,
+# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran:
+# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran:
+# Fortran. In the later case the parser tries to guess whether the code is fixed
+# or free formatted code, this is the default for Fortran type files), VHDL. For
+# instance to make doxygen treat .inc files as Fortran files (default is PHP),
+# and .f files as C (default is Fortran), use: inc=Fortran f=C.
+#
+# Note For files without extension you can use no_extension as a placeholder.
+#
+# Note that for custom extensions you also need to set FILE_PATTERNS otherwise
+# the files are not read by doxygen.
+
+EXTENSION_MAPPING =
+
+# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments
+# according to the Markdown format, which allows for more readable
+# documentation. See http://daringfireball.net/projects/markdown/ for details.
+# The output of markdown processing is further processed by doxygen, so you can
+# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in
+# case of backward compatibilities issues.
+# The default value is: YES.
+
+MARKDOWN_SUPPORT = YES
+
+# When enabled doxygen tries to link words that correspond to documented
+# classes, or namespaces to their corresponding documentation. Such a link can
+# be prevented in individual cases by by putting a % sign in front of the word
+# or globally by setting AUTOLINK_SUPPORT to NO.
+# The default value is: YES.
+
+AUTOLINK_SUPPORT = YES
+
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
+# to include (a tag file for) the STL sources as input, then you should set this
+# tag to YES in order to let doxygen match functions declarations and
+# definitions whose arguments contain STL classes (e.g. func(std::string);
+# versus func(std::string) {}). This also make the inheritance and collaboration
+# diagrams that involve STL classes more complete and accurate.
+# The default value is: NO.
+
+BUILTIN_STL_SUPPORT = YES
+
+# If you use Microsoft's C++/CLI language, you should set this option to YES to
+# enable parsing support.
+# The default value is: NO.
+
+CPP_CLI_SUPPORT = NO
+
+# Set the SIP_SUPPORT tag to YES if your project consists of sip (see:
+# http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen
+# will parse them like normal C++ but will assume all classes use public instead
+# of private inheritance when no explicit protection keyword is present.
+# The default value is: NO.
+
+SIP_SUPPORT = NO
+
+# For Microsoft's IDL there are propget and propput attributes to indicate
+# getter and setter methods for a property. Setting this option to YES will make
+# doxygen to replace the get and set methods by a property in the documentation.
+# This will only work if the methods are indeed getting or setting a simple
+# type. If this is not the case, or you want to show the methods anyway, you
+# should set this option to NO.
+# The default value is: YES.
+
+IDL_PROPERTY_SUPPORT = YES
+
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
+# tag is set to YES, then doxygen will reuse the documentation of the first
+# member in the group (if any) for the other members of the group. By default
+# all members of a group must be documented explicitly.
+# The default value is: NO.
+
+DISTRIBUTE_GROUP_DOC = NO
+
+# Set the SUBGROUPING tag to YES to allow class member groups of the same type
+# (for instance a group of public functions) to be put as a subgroup of that
+# type (e.g. under the Public Functions section). Set it to NO to prevent
+# subgrouping. Alternatively, this can be done per class using the
+# \nosubgrouping command.
+# The default value is: YES.
+
+SUBGROUPING = YES
+
+# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions
+# are shown inside the group in which they are included (e.g. using \ingroup)
+# instead of on a separate page (for HTML and Man pages) or section (for LaTeX
+# and RTF).
+#
+# Note that this feature does not work in combination with
+# SEPARATE_MEMBER_PAGES.
+# The default value is: NO.
+
+INLINE_GROUPED_CLASSES = NO
+
+# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions
+# with only public data fields or simple typedef fields will be shown inline in
+# the documentation of the scope in which they are defined (i.e. file,
+# namespace, or group documentation), provided this scope is documented. If set
+# to NO, structs, classes, and unions are shown on a separate page (for HTML and
+# Man pages) or section (for LaTeX and RTF).
+# The default value is: NO.
+
+INLINE_SIMPLE_STRUCTS = NO
+
+# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or
+# enum is documented as struct, union, or enum with the name of the typedef. So
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct
+# with name TypeT. When disabled the typedef will appear as a member of a file,
+# namespace, or class. And the struct will be named TypeS. This can typically be
+# useful for C code in case the coding convention dictates that all compound
+# types are typedef'ed and only the typedef is referenced, never the tag name.
+# The default value is: NO.
+
+TYPEDEF_HIDES_STRUCT = YES
+
+# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This
+# cache is used to resolve symbols given their name and scope. Since this can be
+# an expensive process and often the same symbol appears multiple times in the
+# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small
+# doxygen will become slower. If the cache is too large, memory is wasted. The
+# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range
+# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536
+# symbols. At the end of a run doxygen will report the cache usage and suggest
+# the optimal cache size from a speed point of view.
+# Minimum value: 0, maximum value: 9, default value: 0.
+
+LOOKUP_CACHE_SIZE = 0
+
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
+# documentation are documented, even if no documentation was available. Private
+# class members and static file members will be hidden unless the
+# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES.
+# Note: This will also disable the warnings about undocumented members that are
+# normally produced when WARNINGS is set to YES.
+# The default value is: NO.
+
+EXTRACT_ALL = NO
+
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class will
+# be included in the documentation.
+# The default value is: NO.
+
+EXTRACT_PRIVATE = NO
+
+# If the EXTRACT_PACKAGE tag is set to YES all members with package or internal
+# scope will be included in the documentation.
+# The default value is: NO.
+
+EXTRACT_PACKAGE = NO
+
+# If the EXTRACT_STATIC tag is set to YES all static members of a file will be
+# included in the documentation.
+# The default value is: NO.
+
+EXTRACT_STATIC = NO
+
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) defined
+# locally in source files will be included in the documentation. If set to NO
+# only classes defined in header files are included. Does not have any effect
+# for Java sources.
+# The default value is: YES.
+
+EXTRACT_LOCAL_CLASSES = NO
+
+# This flag is only useful for Objective-C code. When set to YES local methods,
+# which are defined in the implementation section but not in the interface are
+# included in the documentation. If set to NO only methods in the interface are
+# included.
+# The default value is: NO.
+
+EXTRACT_LOCAL_METHODS = NO
+
+# If this flag is set to YES, the members of anonymous namespaces will be
+# extracted and appear in the documentation as a namespace called
+# 'anonymous_namespace{file}', where file will be replaced with the base name of
+# the file that contains the anonymous namespace. By default anonymous namespace
+# are hidden.
+# The default value is: NO.
+
+EXTRACT_ANON_NSPACES = NO
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all
+# undocumented members inside documented classes or files. If set to NO these
+# members will be included in the various overviews, but no documentation
+# section is generated. This option has no effect if EXTRACT_ALL is enabled.
+# The default value is: NO.
+
+HIDE_UNDOC_MEMBERS = NO
+
+# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all
+# undocumented classes that are normally visible in the class hierarchy. If set
+# to NO these classes will be included in the various overviews. This option has
+# no effect if EXTRACT_ALL is enabled.
+# The default value is: NO.
+
+HIDE_UNDOC_CLASSES = NO
+
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend
+# (class|struct|union) declarations. If set to NO these declarations will be
+# included in the documentation.
+# The default value is: NO.
+
+HIDE_FRIEND_COMPOUNDS = NO
+
+# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any
+# documentation blocks found inside the body of a function. If set to NO these
+# blocks will be appended to the function's detailed documentation block.
+# The default value is: NO.
+
+HIDE_IN_BODY_DOCS = NO
+
+# The INTERNAL_DOCS tag determines if documentation that is typed after a
+# \internal command is included. If the tag is set to NO then the documentation
+# will be excluded. Set it to YES to include the internal documentation.
+# The default value is: NO.
+
+INTERNAL_DOCS = NO
+
+# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file
+# names in lower-case letters. If set to YES upper-case letters are also
+# allowed. This is useful if you have classes or files whose names only differ
+# in case and if your file system supports case sensitive file names. Windows
+# and Mac users are advised to set this option to NO.
+# The default value is: system dependent.
+
+CASE_SENSE_NAMES = NO
+
+# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with
+# their full class and namespace scopes in the documentation. If set to YES the
+# scope will be hidden.
+# The default value is: NO.
+
+HIDE_SCOPE_NAMES = NO
+
+# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of
+# the files that are included by a file in the documentation of that file.
+# The default value is: YES.
+
+SHOW_INCLUDE_FILES = YES
+
+# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each
+# grouped member an include statement to the documentation, telling the reader
+# which file to include in order to use the member.
+# The default value is: NO.
+
+SHOW_GROUPED_MEMB_INC = NO
+
+# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include
+# files with double quotes in the documentation rather than with sharp brackets.
+# The default value is: NO.
+
+FORCE_LOCAL_INCLUDES = NO
+
+# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the
+# documentation for inline members.
+# The default value is: YES.
+
+INLINE_INFO = YES
+
+# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the
+# (detailed) documentation of file and class members alphabetically by member
+# name. If set to NO the members will appear in declaration order.
+# The default value is: YES.
+
+SORT_MEMBER_DOCS = NO
+
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief
+# descriptions of file, namespace and class members alphabetically by member
+# name. If set to NO the members will appear in declaration order. Note that
+# this will also influence the order of the classes in the class list.
+# The default value is: NO.
+
+SORT_BRIEF_DOCS = NO
+
+# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the
+# (brief and detailed) documentation of class members so that constructors and
+# destructors are listed first. If set to NO the constructors will appear in the
+# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS.
+# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief
+# member documentation.
+# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting
+# detailed member documentation.
+# The default value is: NO.
+
+SORT_MEMBERS_CTORS_1ST = NO
+
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy
+# of group names into alphabetical order. If set to NO the group names will
+# appear in their defined order.
+# The default value is: NO.
+
+SORT_GROUP_NAMES = NO
+
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by
+# fully-qualified names, including namespaces. If set to NO, the class list will
+# be sorted only by class name, not including the namespace part.
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
+# Note: This option applies only to the class list, not to the alphabetical
+# list.
+# The default value is: NO.
+
+SORT_BY_SCOPE_NAME = NO
+
+# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper
+# type resolution of all parameters of a function it will reject a match between
+# the prototype and the implementation of a member function even if there is
+# only one candidate or it is obvious which candidate to choose by doing a
+# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still
+# accept a match between prototype and implementation in such cases.
+# The default value is: NO.
+
+STRICT_PROTO_MATCHING = NO
+
+# The GENERATE_TODOLIST tag can be used to enable ( YES) or disable ( NO) the
+# todo list. This list is created by putting \todo commands in the
+# documentation.
+# The default value is: YES.
+
+GENERATE_TODOLIST = YES
+
+# The GENERATE_TESTLIST tag can be used to enable ( YES) or disable ( NO) the
+# test list. This list is created by putting \test commands in the
+# documentation.
+# The default value is: YES.
+
+GENERATE_TESTLIST = YES
+
+# The GENERATE_BUGLIST tag can be used to enable ( YES) or disable ( NO) the bug
+# list. This list is created by putting \bug commands in the documentation.
+# The default value is: YES.
+
+GENERATE_BUGLIST = YES
+
+# The GENERATE_DEPRECATEDLIST tag can be used to enable ( YES) or disable ( NO)
+# the deprecated list. This list is created by putting \deprecated commands in
+# the documentation.
+# The default value is: YES.
+
+GENERATE_DEPRECATEDLIST= YES
+
+# The ENABLED_SECTIONS tag can be used to enable conditional documentation
+# sections, marked by \if ... \endif and \cond
+# ... \endcond blocks.
+
+ENABLED_SECTIONS =
+
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the
+# initial value of a variable or macro / define can have for it to appear in the
+# documentation. If the initializer consists of more lines than specified here
+# it will be hidden. Use a value of 0 to hide initializers completely. The
+# appearance of the value of individual variables and macros / defines can be
+# controlled using \showinitializer or \hideinitializer command in the
+# documentation regardless of this setting.
+# Minimum value: 0, maximum value: 10000, default value: 30.
+
+MAX_INITIALIZER_LINES = 30
+
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at
+# the bottom of the documentation of classes and structs. If set to YES the list
+# will mention the files that were used to generate the documentation.
+# The default value is: YES.
+
+SHOW_USED_FILES = YES
+
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This
+# will remove the Files entry from the Quick Index and from the Folder Tree View
+# (if specified).
+# The default value is: YES.
+
+SHOW_FILES = YES
+
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces
+# page. This will remove the Namespaces entry from the Quick Index and from the
+# Folder Tree View (if specified).
+# The default value is: YES.
+
+SHOW_NAMESPACES = YES
+
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that
+# doxygen should invoke to get the current version for each file (typically from
+# the version control system). Doxygen will invoke the program by executing (via
+# popen()) the command command input-file, where command is the value of the
+# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided
+# by doxygen. Whatever the program writes to standard output is used as the file
+# version. For an example see the documentation.
+
+FILE_VERSION_FILTER =
+
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed
+# by doxygen. The layout file controls the global structure of the generated
+# output files in an output format independent way. To create the layout file
+# that represents doxygen's defaults, run doxygen with the -l option. You can
+# optionally specify a file name after the option, if omitted DoxygenLayout.xml
+# will be used as the name of the layout file.
+#
+# Note that if you run doxygen from a directory containing a file called
+# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE
+# tag is left empty.
+
+LAYOUT_FILE =
+
+# The CITE_BIB_FILES tag can be used to specify one or more bib files containing
+# the reference definitions. This must be a list of .bib files. The .bib
+# extension is automatically appended if omitted. This requires the bibtex tool
+# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info.
+# For LaTeX the style of the bibliography can be controlled using
+# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the
+# search path. See also \cite for info how to create references.
+
+CITE_BIB_FILES =
+
+#---------------------------------------------------------------------------
+# Configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+
+# The QUIET tag can be used to turn on/off the messages that are generated to
+# standard output by doxygen. If QUIET is set to YES this implies that the
+# messages are off.
+# The default value is: NO.
+
+QUIET = NO
+
+# The WARNINGS tag can be used to turn on/off the warning messages that are
+# generated to standard error ( stderr) by doxygen. If WARNINGS is set to YES
+# this implies that the warnings are on.
+#
+# Tip: Turn warnings on while writing the documentation.
+# The default value is: YES.
+
+WARNINGS = YES
+
+# If the WARN_IF_UNDOCUMENTED tag is set to YES, then doxygen will generate
+# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag
+# will automatically be disabled.
+# The default value is: YES.
+
+WARN_IF_UNDOCUMENTED = NO
+
+# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for
+# potential errors in the documentation, such as not documenting some parameters
+# in a documented function, or documenting parameters that don't exist or using
+# markup commands wrongly.
+# The default value is: YES.
+
+WARN_IF_DOC_ERROR = YES
+
+# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that
+# are documented, but have no documentation for their parameters or return
+# value. If set to NO doxygen will only warn about wrong or incomplete parameter
+# documentation, but not about the absence of documentation.
+# The default value is: NO.
+
+WARN_NO_PARAMDOC = NO
+
+# The WARN_FORMAT tag determines the format of the warning messages that doxygen
+# can produce. The string should contain the $file, $line, and $text tags, which
+# will be replaced by the file and line number from which the warning originated
+# and the warning text. Optionally the format may contain $version, which will
+# be replaced by the version of the file (if it could be obtained via
+# FILE_VERSION_FILTER)
+# The default value is: $file:$line: $text.
+
+WARN_FORMAT = "$file:$line: $text"
+
+# The WARN_LOGFILE tag can be used to specify a file to which warning and error
+# messages should be written. If left blank the output is written to standard
+# error (stderr).
+
+WARN_LOGFILE =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the input files
+#---------------------------------------------------------------------------
+
+# The INPUT tag is used to specify the files and/or directories that contain
+# documented source files. You may enter file names like myfile.cpp or
+# directories like /usr/src/myproject. Separate the files or directories with
+# spaces.
+# Note: If this tag is empty the current directory is searched.
+
+INPUT = ../RELEASE_NOTES.md \
+ ../README.md \
+ @TOP@/include \
+ @TOP@/doc
+
+# This tag can be used to specify the character encoding of the source files
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
+# libiconv (or the iconv built into libc) for the transcoding. See the libiconv
+# documentation (see: http://www.gnu.org/software/libiconv) for the list of
+# possible encodings.
+# The default value is: UTF-8.
+
+INPUT_ENCODING = UTF-8
+
+# If the value of the INPUT tag contains directories, you can use the
+# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and
+# *.h) to filter out the source-files in the directories. If left blank the
+# following patterns are tested:*.c, *.cc, *.cxx, *.cpp, *.c++, *.java, *.ii,
+# *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp,
+# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown,
+# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf,
+# *.qsf, *.as and *.js.
+
+FILE_PATTERNS = *.h \
+ *.hpp \
+ *.md \
+ *.dox
+
+# The RECURSIVE tag can be used to specify whether or not subdirectories should
+# be searched for input files as well.
+# The default value is: NO.
+
+RECURSIVE = YES
+
+# The EXCLUDE tag can be used to specify files and/or directories that should be
+# excluded from the INPUT source files. This way you can easily exclude a
+# subdirectory from a directory tree whose root is specified with the INPUT tag.
+#
+# Note that relative paths are relative to the directory from which doxygen is
+# run.
+
+EXCLUDE = @TOP@/include/pv \
+ @TOP@/include/pva
+
+# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
+# directories that are symbolic links (a Unix file system feature) are excluded
+# from the input.
+# The default value is: NO.
+
+EXCLUDE_SYMLINKS = NO
+
+# If the value of the INPUT tag contains directories, you can use the
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
+# certain files from those directories.
+#
+# Note that the wildcards are matched against the file with absolute path, so to
+# exclude all test directories for example use the pattern */test/*
+
+EXCLUDE_PATTERNS = /O.*/
+
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
+# (namespaces, classes, functions, etc.) that should be excluded from the
+# output. The symbol name can be a fully qualified name, a word, or if the
+# wildcard * is used, a substring. Examples: ANamespace, AClass,
+# AClass::ANamespace, ANamespace::*Test
+#
+# Note that the wildcards are matched against the file with absolute path, so to
+# exclude all test directories use the pattern */test/*
+
+EXCLUDE_SYMBOLS =
+
+# The EXAMPLE_PATH tag can be used to specify one or more files or directories
+# that contain example code fragments that are included (see the \include
+# command).
+
+EXAMPLE_PATH =
+
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and
+# *.h) to filter out the source-files in the directories. If left blank all
+# files are included.
+
+EXAMPLE_PATTERNS = *
+
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
+# searched for input files to be used with the \include or \dontinclude commands
+# irrespective of the value of the RECURSIVE tag.
+# The default value is: NO.
+
+EXAMPLE_RECURSIVE = NO
+
+# The IMAGE_PATH tag can be used to specify one or more files or directories
+# that contain images that are to be included in the documentation (see the
+# \image command).
+
+IMAGE_PATH =
+
+# The INPUT_FILTER tag can be used to specify a program that doxygen should
+# invoke to filter for each input file. Doxygen will invoke the filter program
+# by executing (via popen()) the command:
+#
+#
+#
+# where is the value of the INPUT_FILTER tag, and is the
+# name of an input file. Doxygen will then use the output that the filter
+# program writes to standard output. If FILTER_PATTERNS is specified, this tag
+# will be ignored.
+#
+# Note that the filter must not add or remove lines; it is applied before the
+# code is scanned, but not when the output code is generated. If lines are added
+# or removed, the anchors will not be placed correctly.
+
+INPUT_FILTER =
+
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
+# basis. Doxygen will compare the file name with each pattern and apply the
+# filter if there is a match. The filters are a list of the form: pattern=filter
+# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how
+# filters are used. If the FILTER_PATTERNS tag is empty or if none of the
+# patterns match the file name, INPUT_FILTER is applied.
+
+FILTER_PATTERNS =
+
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
+# INPUT_FILTER ) will also be used to filter the input files that are used for
+# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES).
+# The default value is: NO.
+
+FILTER_SOURCE_FILES = NO
+
+# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file
+# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and
+# it is also possible to disable source filtering for a specific pattern using
+# *.ext= (so without naming a filter).
+# This tag requires that the tag FILTER_SOURCE_FILES is set to YES.
+
+FILTER_SOURCE_PATTERNS =
+
+# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that
+# is part of the input, its contents will be placed on the main page
+# (index.html). This can be useful if you have a project on for instance GitHub
+# and want to reuse the introduction page also for the doxygen output.
+
+USE_MDFILE_AS_MAINPAGE =
+
+#---------------------------------------------------------------------------
+# Configuration options related to source browsing
+#---------------------------------------------------------------------------
+
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will be
+# generated. Documented entities will be cross-referenced with these sources.
+#
+# Note: To get rid of all source code in the generated output, make sure that
+# also VERBATIM_HEADERS is set to NO.
+# The default value is: NO.
+
+SOURCE_BROWSER = YES
+
+# Setting the INLINE_SOURCES tag to YES will include the body of functions,
+# classes and enums directly into the documentation.
+# The default value is: NO.
+
+INLINE_SOURCES = NO
+
+# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any
+# special comment blocks from generated source code fragments. Normal C, C++ and
+# Fortran comments will always remain visible.
+# The default value is: YES.
+
+STRIP_CODE_COMMENTS = YES
+
+# If the REFERENCED_BY_RELATION tag is set to YES then for each documented
+# function all documented functions referencing it will be listed.
+# The default value is: NO.
+
+REFERENCED_BY_RELATION = NO
+
+# If the REFERENCES_RELATION tag is set to YES then for each documented function
+# all documented entities called/used by that function will be listed.
+# The default value is: NO.
+
+REFERENCES_RELATION = NO
+
+# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set
+# to YES, then the hyperlinks from functions in REFERENCES_RELATION and
+# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will
+# link to the documentation.
+# The default value is: YES.
+
+REFERENCES_LINK_SOURCE = YES
+
+# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the
+# source code will show a tooltip with additional information such as prototype,
+# brief description and links to the definition and documentation. Since this
+# will make the HTML file larger and loading of large files a bit slower, you
+# can opt to disable this feature.
+# The default value is: YES.
+# This tag requires that the tag SOURCE_BROWSER is set to YES.
+
+SOURCE_TOOLTIPS = YES
+
+# If the USE_HTAGS tag is set to YES then the references to source code will
+# point to the HTML generated by the htags(1) tool instead of doxygen built-in
+# source browser. The htags tool is part of GNU's global source tagging system
+# (see http://www.gnu.org/software/global/global.html). You will need version
+# 4.8.6 or higher.
+#
+# To use it do the following:
+# - Install the latest version of global
+# - Enable SOURCE_BROWSER and USE_HTAGS in the config file
+# - Make sure the INPUT points to the root of the source tree
+# - Run doxygen as normal
+#
+# Doxygen will invoke htags (and that will in turn invoke gtags), so these
+# tools must be available from the command line (i.e. in the search path).
+#
+# The result: instead of the source browser generated by doxygen, the links to
+# source code will now point to the output of htags.
+# The default value is: NO.
+# This tag requires that the tag SOURCE_BROWSER is set to YES.
+
+USE_HTAGS = NO
+
+# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a
+# verbatim copy of the header file for each class for which an include is
+# specified. Set to NO to disable this.
+# See also: Section \class.
+# The default value is: YES.
+
+VERBATIM_HEADERS = YES
+
+# If the CLANG_ASSISTED_PARSING tag is set to YES, then doxygen will use the
+# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the
+# cost of reduced performance. This can be particularly helpful with template
+# rich C++ code for which doxygen's built-in parser lacks the necessary type
+# information.
+# Note: The availability of this option depends on whether or not doxygen was
+# compiled with the --with-libclang option.
+# The default value is: NO.
+
+CLANG_ASSISTED_PARSING = NO
+
+# If clang assisted parsing is enabled you can provide the compiler with command
+# line options that you would normally use when invoking the compiler. Note that
+# the include paths will already be set by doxygen for the files and directories
+# specified with INPUT and INCLUDE_PATH.
+# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES.
+
+CLANG_OPTIONS =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all
+# compounds will be generated. Enable this if the project contains a lot of
+# classes, structs, unions or interfaces.
+# The default value is: YES.
+
+ALPHABETICAL_INDEX = YES
+
+# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in
+# which the alphabetical index list will be split.
+# Minimum value: 1, maximum value: 20, default value: 5.
+# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
+
+COLS_IN_ALPHA_INDEX = 5
+
+# In case all classes in a project start with a common prefix, all classes will
+# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag
+# can be used to specify a prefix (or a list of prefixes) that should be ignored
+# while generating the index headers.
+# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
+
+IGNORE_PREFIX =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the HTML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_HTML tag is set to YES doxygen will generate HTML output
+# The default value is: YES.
+
+GENERATE_HTML = YES
+
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it.
+# The default directory is: html.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_OUTPUT = html
+
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each
+# generated HTML page (for example: .htm, .php, .asp).
+# The default value is: .html.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_FILE_EXTENSION = .html
+
+# The HTML_HEADER tag can be used to specify a user-defined HTML header file for
+# each generated HTML page. If the tag is left blank doxygen will generate a
+# standard header.
+#
+# To get valid HTML the header file that includes any scripts and style sheets
+# that doxygen needs, which is dependent on the configuration options used (e.g.
+# the setting GENERATE_TREEVIEW). It is highly recommended to start with a
+# default header using
+# doxygen -w html new_header.html new_footer.html new_stylesheet.css
+# YourConfigFile
+# and then modify the file new_header.html. See also section "Doxygen usage"
+# for information on how to generate the default header that doxygen normally
+# uses.
+# Note: The header is subject to change so you typically have to regenerate the
+# default header when upgrading to a newer version of doxygen. For a description
+# of the possible markers and block names see the documentation.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_HEADER =
+
+# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each
+# generated HTML page. If the tag is left blank doxygen will generate a standard
+# footer. See HTML_HEADER for more information on how to generate a default
+# footer and what special commands can be used inside the footer. See also
+# section "Doxygen usage" for information on how to generate the default footer
+# that doxygen normally uses.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_FOOTER =
+
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style
+# sheet that is used by each HTML page. It can be used to fine-tune the look of
+# the HTML output. If left blank doxygen will generate a default style sheet.
+# See also section "Doxygen usage" for information on how to generate the style
+# sheet that doxygen normally uses.
+# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as
+# it is more robust and this tag (HTML_STYLESHEET) will in the future become
+# obsolete.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_STYLESHEET =
+
+# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined
+# cascading style sheets that are included after the standard style sheets
+# created by doxygen. Using this option one can overrule certain style aspects.
+# This is preferred over using HTML_STYLESHEET since it does not replace the
+# standard style sheet and is therefor more robust against future updates.
+# Doxygen will copy the style sheet files to the output directory.
+# Note: The order of the extra stylesheet files is of importance (e.g. the last
+# stylesheet in the list overrules the setting of the previous ones in the
+# list). For an example see the documentation.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_EXTRA_STYLESHEET =
+
+# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or
+# other source files which should be copied to the HTML output directory. Note
+# that these files will be copied to the base HTML output directory. Use the
+# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these
+# files. In the HTML_STYLESHEET file, use the file name only. Also note that the
+# files will be copied as-is; there are no commands or markers available.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_EXTRA_FILES =
+
+# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen
+# will adjust the colors in the stylesheet and background images according to
+# this color. Hue is specified as an angle on a colorwheel, see
+# http://en.wikipedia.org/wiki/Hue for more information. For instance the value
+# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300
+# purple, and 360 is red again.
+# Minimum value: 0, maximum value: 359, default value: 220.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_COLORSTYLE_HUE = 220
+
+# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors
+# in the HTML output. For a value of 0 the output will use grayscales only. A
+# value of 255 will produce the most vivid colors.
+# Minimum value: 0, maximum value: 255, default value: 100.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_COLORSTYLE_SAT = 100
+
+# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the
+# luminance component of the colors in the HTML output. Values below 100
+# gradually make the output lighter, whereas values above 100 make the output
+# darker. The value divided by 100 is the actual gamma applied, so 80 represents
+# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not
+# change the gamma.
+# Minimum value: 40, maximum value: 240, default value: 80.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_COLORSTYLE_GAMMA = 80
+
+# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
+# page will contain the date and time when the page was generated. Setting this
+# to NO can help when comparing the output of multiple runs.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_TIMESTAMP = YES
+
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
+# documentation will contain sections that can be hidden and shown after the
+# page has loaded.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_DYNAMIC_SECTIONS = NO
+
+# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries
+# shown in the various tree structured indices initially; the user can expand
+# and collapse entries dynamically later on. Doxygen will expand the tree to
+# such a level that at most the specified number of entries are visible (unless
+# a fully collapsed tree already exceeds this amount). So setting the number of
+# entries 1 will produce a full collapsed tree by default. 0 is a special value
+# representing an infinite number of entries and will result in a full expanded
+# tree by default.
+# Minimum value: 0, maximum value: 9999, default value: 100.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_INDEX_NUM_ENTRIES = 100
+
+# If the GENERATE_DOCSET tag is set to YES, additional index files will be
+# generated that can be used as input for Apple's Xcode 3 integrated development
+# environment (see: http://developer.apple.com/tools/xcode/), introduced with
+# OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a
+# Makefile in the HTML output directory. Running make will produce the docset in
+# that directory and running make install will install the docset in
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at
+# startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html
+# for more information.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_DOCSET = NO
+
+# This tag determines the name of the docset feed. A documentation feed provides
+# an umbrella under which multiple documentation sets from a single provider
+# (such as a company or product suite) can be grouped.
+# The default value is: Doxygen generated docs.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
+
+DOCSET_FEEDNAME = "Doxygen generated docs"
+
+# This tag specifies a string that should uniquely identify the documentation
+# set bundle. This should be a reverse domain-name style string, e.g.
+# com.mycompany.MyDocSet. Doxygen will append .docset to the name.
+# The default value is: org.doxygen.Project.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
+
+DOCSET_BUNDLE_ID = org.doxygen.Project
+
+# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify
+# the documentation publisher. This should be a reverse domain-name style
+# string, e.g. com.mycompany.MyDocSet.documentation.
+# The default value is: org.doxygen.Publisher.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
+
+DOCSET_PUBLISHER_ID = org.doxygen.Publisher
+
+# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher.
+# The default value is: Publisher.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
+
+DOCSET_PUBLISHER_NAME = Publisher
+
+# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three
+# additional HTML index files: index.hhp, index.hhc, and index.hhk. The
+# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop
+# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on
+# Windows.
+#
+# The HTML Help Workshop contains a compiler that can convert all HTML output
+# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML
+# files are now used as the Windows 98 help format, and will replace the old
+# Windows help format (.hlp) on all Windows platforms in the future. Compressed
+# HTML files also contain an index, a table of contents, and you can search for
+# words in the documentation. The HTML workshop also contains a viewer for
+# compressed HTML files.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_HTMLHELP = NO
+
+# The CHM_FILE tag can be used to specify the file name of the resulting .chm
+# file. You can add a path in front of the file if the result should not be
+# written to the html output directory.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+CHM_FILE =
+
+# The HHC_LOCATION tag can be used to specify the location (absolute path
+# including file name) of the HTML help compiler ( hhc.exe). If non-empty
+# doxygen will try to run the HTML help compiler on the generated index.hhp.
+# The file has to be specified with full path.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+HHC_LOCATION =
+
+# The GENERATE_CHI flag controls if a separate .chi index file is generated (
+# YES) or that it should be included in the master .chm file ( NO).
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+GENERATE_CHI = NO
+
+# The CHM_INDEX_ENCODING is used to encode HtmlHelp index ( hhk), content ( hhc)
+# and project file content.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+CHM_INDEX_ENCODING =
+
+# The BINARY_TOC flag controls whether a binary table of contents is generated (
+# YES) or a normal table of contents ( NO) in the .chm file. Furthermore it
+# enables the Previous and Next buttons.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+BINARY_TOC = NO
+
+# The TOC_EXPAND flag can be set to YES to add extra items for group members to
+# the table of contents of the HTML help documentation and to the tree view.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+TOC_EXPAND = NO
+
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and
+# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that
+# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help
+# (.qch) of the generated HTML documentation.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_QHP = NO
+
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify
+# the file name of the resulting .qch file. The path specified is relative to
+# the HTML output folder.
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QCH_FILE =
+
+# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help
+# Project output. For more information please see Qt Help Project / Namespace
+# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace).
+# The default value is: org.doxygen.Project.
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_NAMESPACE = org.doxygen.Project
+
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt
+# Help Project output. For more information please see Qt Help Project / Virtual
+# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual-
+# folders).
+# The default value is: doc.
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_VIRTUAL_FOLDER = doc
+
+# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom
+# filter to add. For more information please see Qt Help Project / Custom
+# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-
+# filters).
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_CUST_FILTER_NAME =
+
+# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the
+# custom filter to add. For more information please see Qt Help Project / Custom
+# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-
+# filters).
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_CUST_FILTER_ATTRS =
+
+# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this
+# project's filter section matches. Qt Help Project / Filter Attributes (see:
+# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes).
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_SECT_FILTER_ATTRS =
+
+# The QHG_LOCATION tag can be used to specify the location of Qt's
+# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the
+# generated .qhp file.
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHG_LOCATION =
+
+# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be
+# generated, together with the HTML files, they form an Eclipse help plugin. To
+# install this plugin and make it available under the help contents menu in
+# Eclipse, the contents of the directory containing the HTML and XML files needs
+# to be copied into the plugins directory of eclipse. The name of the directory
+# within the plugins directory should be the same as the ECLIPSE_DOC_ID value.
+# After copying Eclipse needs to be restarted before the help appears.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_ECLIPSEHELP = NO
+
+# A unique identifier for the Eclipse help plugin. When installing the plugin
+# the directory name containing the HTML and XML files should also have this
+# name. Each documentation set should have its own identifier.
+# The default value is: org.doxygen.Project.
+# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES.
+
+ECLIPSE_DOC_ID = org.doxygen.Project
+
+# If you want full control over the layout of the generated HTML pages it might
+# be necessary to disable the index and replace it with your own. The
+# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top
+# of each HTML page. A value of NO enables the index and the value YES disables
+# it. Since the tabs in the index contain the same information as the navigation
+# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+DISABLE_INDEX = NO
+
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
+# structure should be generated to display hierarchical information. If the tag
+# value is set to YES, a side panel will be generated containing a tree-like
+# index structure (just like the one that is generated for HTML Help). For this
+# to work a browser that supports JavaScript, DHTML, CSS and frames is required
+# (i.e. any modern browser). Windows users are probably better off using the
+# HTML help feature. Via custom stylesheets (see HTML_EXTRA_STYLESHEET) one can
+# further fine-tune the look of the index. As an example, the default style
+# sheet generated by doxygen has an example that shows how to put an image at
+# the root of the tree instead of the PROJECT_NAME. Since the tree basically has
+# the same information as the tab index, you could consider setting
+# DISABLE_INDEX to YES when enabling this option.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_TREEVIEW = NO
+
+# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that
+# doxygen will group on one line in the generated HTML documentation.
+#
+# Note that a value of 0 will completely suppress the enum values from appearing
+# in the overview section.
+# Minimum value: 0, maximum value: 20, default value: 4.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+ENUM_VALUES_PER_LINE = 4
+
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used
+# to set the initial width (in pixels) of the frame in which the tree is shown.
+# Minimum value: 0, maximum value: 1500, default value: 250.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+TREEVIEW_WIDTH = 250
+
+# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open links to
+# external symbols imported via tag files in a separate window.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+EXT_LINKS_IN_WINDOW = NO
+
+# Use this tag to change the font size of LaTeX formulas included as images in
+# the HTML documentation. When you change the font size after a successful
+# doxygen run you need to manually remove any form_*.png images from the HTML
+# output directory to force them to be regenerated.
+# Minimum value: 8, maximum value: 50, default value: 10.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+FORMULA_FONTSIZE = 10
+
+# Use the FORMULA_TRANPARENT tag to determine whether or not the images
+# generated for formulas are transparent PNGs. Transparent PNGs are not
+# supported properly for IE 6.0, but are supported on all modern browsers.
+#
+# Note that when changing this option you need to delete any form_*.png files in
+# the HTML output directory before the changes have effect.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+FORMULA_TRANSPARENT = YES
+
+# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see
+# http://www.mathjax.org) which uses client side Javascript for the rendering
+# instead of using prerendered bitmaps. Use this if you do not have LaTeX
+# installed or if you want to formulas look prettier in the HTML output. When
+# enabled you may also need to install MathJax separately and configure the path
+# to it using the MATHJAX_RELPATH option.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+USE_MATHJAX = NO
+
+# When MathJax is enabled you can set the default output format to be used for
+# the MathJax output. See the MathJax site (see:
+# http://docs.mathjax.org/en/latest/output.html) for more details.
+# Possible values are: HTML-CSS (which is slower, but has the best
+# compatibility), NativeMML (i.e. MathML) and SVG.
+# The default value is: HTML-CSS.
+# This tag requires that the tag USE_MATHJAX is set to YES.
+
+MATHJAX_FORMAT = HTML-CSS
+
+# When MathJax is enabled you need to specify the location relative to the HTML
+# output directory using the MATHJAX_RELPATH option. The destination directory
+# should contain the MathJax.js script. For instance, if the mathjax directory
+# is located at the same level as the HTML output directory, then
+# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax
+# Content Delivery Network so you can quickly see the result without installing
+# MathJax. However, it is strongly recommended to install a local copy of
+# MathJax from http://www.mathjax.org before deployment.
+# The default value is: http://cdn.mathjax.org/mathjax/latest.
+# This tag requires that the tag USE_MATHJAX is set to YES.
+
+MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest
+
+# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax
+# extension names that should be enabled during MathJax rendering. For example
+# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols
+# This tag requires that the tag USE_MATHJAX is set to YES.
+
+MATHJAX_EXTENSIONS =
+
+# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces
+# of code that will be used on startup of the MathJax code. See the MathJax site
+# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an
+# example see the documentation.
+# This tag requires that the tag USE_MATHJAX is set to YES.
+
+MATHJAX_CODEFILE =
+
+# When the SEARCHENGINE tag is enabled doxygen will generate a search box for
+# the HTML output. The underlying search engine uses javascript and DHTML and
+# should work on any modern browser. Note that when using HTML help
+# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET)
+# there is already a search function so this one should typically be disabled.
+# For large projects the javascript based search engine can be slow, then
+# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to
+# search using the keyboard; to jump to the search box use + S
+# (what the is depends on the OS and browser, but it is typically
+# , /
The Release Process
-
The version released on the Feature Freeze date is designated the first
-pre-release, -pre1. The first Release Candidate -rc1 is the
-first version that has undergone widespread testing and which has no known
-problems in it that are slated to be fixed in this release. New versions should
-be made at 2-weekly intervals during the testing and debugging period, and will
-be designated as either pre-release versions or Release Candidates by the
-Release Manager. After a Release Candidate has been available to the whole
-community for testing for at least a week without any additional problems being
-reported or significant changes being committed, the branch can be designated as
-the final release version.
+
We used to have one written down here, but we weren't following it very
+closely so now the decision to make a new release is taken during the Core
+Developers bi-weekly meetings in an informal manner. The steps detailed below
+were written to remind Andrew (or anyone else who does the release) about
+everything that has to be done since it's so easy to miss steps.
Roles
-
The following roles are required. The individuals named here have have been
-responsible for these tasks in the past and are expected to continue in the
-relevent roles unless the Release Manager designates otherwise:
+
The following roles are used below:
-
Release Manager (Ralph Lange)
+
Release Manager
Responsible for managing and tagging the release
-
Platform Developers (optional)
-
Responsible for individual operating system platforms
+
Core Developers
+
Responsible for maintaining the EPICS software
Application Developers
Responsible for support modules that depend on EPICS Base.