diff --git a/Makefile b/Makefile index 19c9068..57dc51e 100644 --- a/Makefile +++ b/Makefile @@ -9,6 +9,10 @@ DIRS += $(wildcard *App) DIRS += $(wildcard *Top) DIRS += $(wildcard iocBoot) +ifeq ($(BUILD_IOCS), YES) +DIRS += $(wildcard iocs) +endif + # The build order is controlled by these dependency rules: # All dirs except configure depend on configure @@ -28,4 +32,13 @@ iocBoot_DEPEND_DIRS += $(filter %App,$(DIRS)) # Add any additional dependency rules here: -include $(TOP)/configure/RULES_TOP +# iocs depend on all *Sup and *App dirs +$(foreach dir, $(filter %iocs, $(DIRS)), \ + $(eval $(dir)_DEPEND_DIRS += $(filter %Sup %App, $(DIRS)))) + +# Only support top-level targets when submodule is built stand-alone +ifeq ($(INSTALL_LOCATION),$(MOTOR)) + include $(TOP)/configure/RULES_DIRS +else + include $(TOP)/configure/RULES_TOP +endif diff --git a/configure/EXAMPLE_CONFIG_SITE.local b/configure/EXAMPLE_CONFIG_SITE.local new file mode 100644 index 0000000..9b57b80 --- /dev/null +++ b/configure/EXAMPLE_CONFIG_SITE.local @@ -0,0 +1,7 @@ +# Use settings from motor's CONFIG_SITE unless they are overridden below +-include $(MOTOR)/configure/CONFIG_SITE + +# +CHECK_RELEASE = WARN +# +#BUILD_IOCS = YES diff --git a/configure/EXAMPLE_RELEASE.local b/configure/EXAMPLE_RELEASE.local new file mode 100644 index 0000000..d921d9a --- /dev/null +++ b/configure/EXAMPLE_RELEASE.local @@ -0,0 +1,4 @@ +MOTOR= +-include $(MOTOR)/configure/RELEASE +# path to motorAcs is needed to build the IOC inside motorAcs, but outside motor +MOTOR_ACS= diff --git a/configure/Makefile b/configure/Makefile index 9254309..69c791d 100644 --- a/configure/Makefile +++ b/configure/Makefile @@ -2,7 +2,11 @@ TOP=.. include $(TOP)/configure/CONFIG +ifeq ($(INSTALL_CONFIG),$(MOTOR)/configure) +# Don't overwrite Motor's configure files +INSTALL_CONFIG = +endif + TARGETS = $(CONFIG_TARGETS) -CONFIGS += $(subst ../,,$(wildcard $(CONFIG_INSTALLS))) include $(TOP)/configure/RULES diff --git a/configure/RELEASE b/configure/RELEASE index f95c484..d036eeb 100644 --- a/configure/RELEASE +++ b/configure/RELEASE @@ -1,43 +1,7 @@ # RELEASE - Location of external support modules -# -# IF YOU MAKE ANY CHANGES to this file you must subsequently -# do a "gnumake rebuild" in this application's top level -# directory. -# -# The build process does not check dependencies against files -# that are outside this application, thus you should do a -# "gnumake rebuild" in the top level directory after EPICS_BASE -# or any other external module pointed to below is rebuilt. -# -# Host- or target-specific settings can be given in files named -# RELEASE.$(EPICS_HOST_ARCH).Common -# RELEASE.Common.$(T_A) -# RELEASE.$(EPICS_HOST_ARCH).$(T_A) -# -# This file is parsed by both GNUmake and an EPICS Perl script, -# so it can ONLY contain definititions of paths to other support -# modules, variable definitions that are used in module paths, -# and include statements that pull in other RELEASE files. -# Variables may be used before their values have been set. -# Build variables that are NOT used in paths should be set in -# the CONFIG_SITE file. -# Variables and paths to dependent modules: -#MODULES = /path/to/modules -#MYMODULE = $(MODULES)/my-module - -# If using the sequencer, point SNCSEQ at its top directory: -#SNCSEQ = $(MODULES)/seq-ver - -# EPICS_BASE should appear last so earlier modules can override stuff: -EPICS_BASE = /APSshare/epics/base-3.15.6 - -# Set RULES here if you want to use build rules from somewhere -# other than EPICS_BASE: -#RULES = $(MODULES)/build-rules - -# These allow developers to override the RELEASE variable settings -# without having to modify the configure/RELEASE file itself. --include $(TOP)/../RELEASE.local +# Use motor/module's generated release file when buidling inside motor +-include $(TOP)/../RELEASE.$(EPICS_HOST_ARCH).local +# Use motorAcs's RELEASE.local when building outside motor -include $(TOP)/configure/RELEASE.local diff --git a/iocs/Makefile b/iocs/Makefile new file mode 100644 index 0000000..7f17bbb --- /dev/null +++ b/iocs/Makefile @@ -0,0 +1,25 @@ +TOP = .. +include $(TOP)/configure/CONFIG + +DIRS += acsIOC + +include $(TOP)/configure/RULES_TOP + +uninstallTargets = $(foreach dir, $(DIRS), $(dir)$(DIVIDER)uninstall) +uninstall: $(uninstallTargets) +define UNINSTALL_template +$(1)$(DIVIDER)uninstall: + $(MAKE) -C $(1) uninstall +endef +$(foreach dir, $(DIRS), $(eval $(call UNINSTALL_template,$(dir)))) +.PHONY: uninstall $(uninstallTargets) + +realuninstallTargets = $(foreach dir, $(DIRS), $(dir)$(DIVIDER)realuninstall) +realuninstall: $(realuninstallTargets) +define REALUNINSTALL_template +$(1)$(DIVIDER)realuninstall: + $(MAKE) -C $(1) realuninstall +endef +$(foreach dir, $(DIRS), $(eval $(call REALUNINSTALL_template,$(dir)))) +.PHONY: realuninstall $(realuninstallTargets) + diff --git a/iocs/acsIOC/acsApp/src/Makefile b/iocs/acsIOC/acsApp/src/Makefile index e6b1b83..4feaf3c 100644 --- a/iocs/acsIOC/acsApp/src/Makefile +++ b/iocs/acsIOC/acsApp/src/Makefile @@ -5,6 +5,9 @@ include $(TOP)/configure/CONFIG # ADD MACRO DEFINITIONS AFTER THIS LINE #============================= +# The following are used for debugging messages. +#!USR_CXXFLAGS += -DDEBUG + #============================= # Build the IOC application @@ -16,10 +19,21 @@ DBD += acs.dbd acs_DBD += base.dbd # Include dbd files from all support applications: -#acs_DBD += xxx.dbd +#ifdef ASYN +acs_DBD += asyn.dbd +#endif +acs_DBD += motorSupport.dbd +acs_DBD += devAcs.dbd # Add all the support libraries needed by this IOC -#acs_LIBS += xxx +acs_LIBS += acs +acs_LIBS += motor +#ifdef ASYN +acs_LIBS += asyn +#endif +#ifdef SNCSEQ +acs_LIBS += seq pv +#endif # acs_registerRecordDeviceDriver.cpp derives from acs.dbd acs_SRCS += acs_registerRecordDeviceDriver.cpp diff --git a/iocs/acsIOC/configure/CONFIG_SITE b/iocs/acsIOC/configure/CONFIG_SITE index 212485e..99fdbfd 100644 --- a/iocs/acsIOC/configure/CONFIG_SITE +++ b/iocs/acsIOC/configure/CONFIG_SITE @@ -35,9 +35,10 @@ CHECK_RELEASE = YES #HOST_OPT = NO #CROSS_OPT = NO -# These allow developers to override the CONFIG_SITE variable -# settings without having to modify the configure/CONFIG_SITE -# file itself. --include $(TOP)/../CONFIG_SITE.local +# Include motor's CONFIG_SITE.local when building inside motor +-include $(TOP)/../../../../configure/CONFIG_SITE.local +# Include motorAcs's CONFIG_SITE.local when building inside motorAcs +-include $(TOP)/../../configure/CONFIG_SITE.local +# Use acsIOC's CONFIG_SITE.local -include $(TOP)/configure/CONFIG_SITE.local diff --git a/iocs/acsIOC/configure/EXAMPLE_CONFIG_SITE.local b/iocs/acsIOC/configure/EXAMPLE_CONFIG_SITE.local new file mode 100644 index 0000000..e56b472 --- /dev/null +++ b/iocs/acsIOC/configure/EXAMPLE_CONFIG_SITE.local @@ -0,0 +1,6 @@ +# Use settings from motor's CONFIG_SITE unless they are overridden below +-include $(MOTOR)/configure/CONFIG_SITE + +# +CHECK_RELEASE = WARN + diff --git a/iocs/acsIOC/configure/EXAMPLE_RELEASE.local b/iocs/acsIOC/configure/EXAMPLE_RELEASE.local new file mode 100644 index 0000000..7f2d8e9 --- /dev/null +++ b/iocs/acsIOC/configure/EXAMPLE_RELEASE.local @@ -0,0 +1,6 @@ +# Use the following lines if motorAcs was built inside motor +MOTOR= +-include $(MOTOR)/configure/RELEASE +# Use the following lines if motorAcs was built outside motor +#!MOTOR_ACS= +#!-include $(MOTOR_ACS)/configure/RELEASE.local diff --git a/iocs/acsIOC/configure/RELEASE b/iocs/acsIOC/configure/RELEASE index f95c484..39ade88 100644 --- a/iocs/acsIOC/configure/RELEASE +++ b/iocs/acsIOC/configure/RELEASE @@ -1,43 +1,8 @@ # RELEASE - Location of external support modules -# -# IF YOU MAKE ANY CHANGES to this file you must subsequently -# do a "gnumake rebuild" in this application's top level -# directory. -# -# The build process does not check dependencies against files -# that are outside this application, thus you should do a -# "gnumake rebuild" in the top level directory after EPICS_BASE -# or any other external module pointed to below is rebuilt. -# -# Host- or target-specific settings can be given in files named -# RELEASE.$(EPICS_HOST_ARCH).Common -# RELEASE.Common.$(T_A) -# RELEASE.$(EPICS_HOST_ARCH).$(T_A) -# -# This file is parsed by both GNUmake and an EPICS Perl script, -# so it can ONLY contain definititions of paths to other support -# modules, variable definitions that are used in module paths, -# and include statements that pull in other RELEASE files. -# Variables may be used before their values have been set. -# Build variables that are NOT used in paths should be set in -# the CONFIG_SITE file. -# Variables and paths to dependent modules: -#MODULES = /path/to/modules -#MYMODULE = $(MODULES)/my-module - -# If using the sequencer, point SNCSEQ at its top directory: -#SNCSEQ = $(MODULES)/seq-ver - -# EPICS_BASE should appear last so earlier modules can override stuff: -EPICS_BASE = /APSshare/epics/base-3.15.6 - -# Set RULES here if you want to use build rules from somewhere -# other than EPICS_BASE: -#RULES = $(MODULES)/build-rules - -# These allow developers to override the RELEASE variable settings -# without having to modify the configure/RELEASE file itself. --include $(TOP)/../RELEASE.local +# Use motor/module's generated release file when buidling inside motor +-include $(TOP)/../../../RELEASE.$(EPICS_HOST_ARCH).local +# Use motorAcs's release file when building inside motorAcs, but outside motor +-include $(TOP)/../../configure/RELEASE.local +# Use acsIOC's RELEASE.local when building outside motorAcs -include $(TOP)/configure/RELEASE.local -