Flattened Makefile 1
Jump to navigation
Jump to search
Flattened Makefile 1
Using a pile of copy/paste, let's try to build a flat makefile from the many levels of other files including other files.
#Makefile at top of application tree TOP = . #CONFIG # CONFIG_APP #RELEASE Location of external products # Run "gnumake clean uninstall install" in the application # top directory each time this file is changed. # # NOTE: The build does not check dependancies on files # external to this application. Thus you should run # "gnumake clean uninstall install" in the top directory # each time EPICS_BASE, SNCSEQ, or any other external # module defined in the RELEASE file is rebuilt. TEMPLATE_TOP=$(EPICS_BASE)/templates/makeBaseApp/top # If you don't want to install into $(TOP) then # define INSTALL_LOCATION_APP here #INSTALL_LOCATION_APP=<fullpathname> GRETVME=./../gretVME DATASERVER=./../gretClust #If using the sequencer, point SNCSEQ at its top directory: SNCSEQ=/global/develbuild/supTop/31410/sncseq-2.0.12 ASYN=/global/develbuild/synApps/asyn/asyn4-17 # EPICS_BASE usually appears last so other apps can override stuff: #EPICS_BASE=/global/develbuild/base/R3.14.10 EPICS_BASE=/global/develbuild/base/base-3.14.12.1 #Capfast users may need the following definitions #CAPFAST_TEMPLATES= #SCH2EDIF_PATH= -include ./configure/RELEASE.$(EPICS_HOST_ARCH) -include ./configure/RELEASE.Common.$(T_A) -include ./configure/RELEASE.$(EPICS_HOST_ARCH).$(T_A) CONFIG=$(EPICS_BASE)/configure # assume T_A is the host arch if not specified # # Common build definitions # ifneq ($(wildcard $(TOP)/configure/CONFIG_BASE_VERSION),) EPICS_BASE = $(INSTALL_LOCATION) CONFIG = $(TOP)/configure BASE_TOP=YES else CONFIG ?= $(EPICS_BASE)/configure endif # Provide a default if the user hasn't set EPICS_HOST_ARCH ifeq ($(origin EPICS_HOST_ARCH), undefined) # NB: Must use a simply expanded variable here for performance: EPICS_HOST_ARCH := $(shell $(CONFIG)/../startup/EpicsHostArch.pl) endif # -include $(CONFIG)/os/CONFIG_COMPAT -include $(CONFIG)/RELEASE -include $(CONFIG)/RELEASE.$(EPICS_HOST_ARCH) -include $(CONFIG)/RELEASE.$(EPICS_HOST_ARCH).Common ifdef T_A -include $(CONFIG)/RELEASE.Common.$(T_A) -include $(CONFIG)/RELEASE.$(EPICS_HOST_ARCH).$(T_A) endif include $(CONFIG)/CONFIG_COMMON include $(CONFIG)/CONFIG_FILE_TYPE # Base-specific build options # include $(CONFIG)/CONFIG_BASE # Site-specific build options # include $(CONFIG)/CONFIG_SITE # Version numbering # include $(CONFIG)/CONFIG_BASE_VERSION # Host architecture specific definitions # include $(CONFIG)/os/CONFIG.$(EPICS_HOST_ARCH).Common -include $(CONFIG)/os/CONFIG_SITE.$(EPICS_HOST_ARCH).Common ifdef T_A # Cross compile specific definitions # ifneq ($(EPICS_HOST_ARCH),$(T_A)) include $(CONFIG)/CONFIG.CrossCommon endif # Target architecture specific definitions # -include $(CONFIG)/os/CONFIG.Common.$(T_A) # Host-Target architecture specific definitions # -include $(CONFIG)/os/CONFIG.$(EPICS_HOST_ARCH).$(T_A) # RELEASE file specific definitions # ifneq ($(CONFIG),$(TOP)/configure) -include $(CONFIG)/CONFIG_APP_INCLUDE endif # Site specific target and host-target definitions # -include $(CONFIG)/os/CONFIG_SITE.Common.$(T_A) -include $(CONFIG)/os/CONFIG_SITE.$(EPICS_HOST_ARCH).$(T_A) endif # Include <top>/cfg/CONFIG* definitions from tops defined in RELEASE* files # ifneq ($(CONFIG),$(TOP)/configure) RELEASE_TOPS := $(shell $(CONVERTRELEASE) -T $(TOP) releaseTops) RELEASE_CFG_CONFIGS = $(foreach top, $(RELEASE_TOPS), $(wildcard $($(top))/cfg/CONFIG*)) ifneq ($(RELEASE_CFG_CONFIGS),) include $(RELEASE_CFG_CONFIGS) endif endif # Include $(INSTALL_CFG)/CONFIG* definitions # ifndef T_A TOP_CFG_CONFIGS = $(wildcard $(INSTALL_CFG)/CONFIG*) ifneq ($(TOP_CFG_CONFIGS),) include $(TOP_CFG_CONFIGS) endif endif # User specific definitions # -include $(HOME)/configure/CONFIG_USER -include $(HOME)/configure/CONFIG_USER.$(EPICS_HOST_ARCH) ifdef T_A -include $(HOME)/configure/CONFIG_USER.Common.$(T_A) -include $(HOME)/configure/CONFIG_USER.$(EPICS_HOST_ARCH).$(T_A) endif # All options # may be overridden here. # # EXAMPLES # -------- # Build client objects statically ? must be either YES or NO #STATIC_BUILD=NO # Host build optimization, must be either YES or NO #HOST_OPT=YES # Cross build optimization, must be either YES or NO #CROSS_OPT=YES # Generate Verbose Compiler Warnings for host build, must be either YES or NO #HOST_WARN=YES # Generate Verbose Compiler Warnings for cross compile builds, must be either YES or NO #CROSS_WARN=YES #etc. #CROSS_COMPILER_TARGET_ARCHS=vxWorks-68040 INSTALL_LOCATION = $(TOP) ifdef INSTALL_LOCATION_APP INSTALL_LOCATION = $(INSTALL_LOCATION_APP) endif ifdef T_A -include $(TOP)/configure/O.$(T_A)/CONFIG_APP_INCLUDE endif # dbst based database optimization (default: NO) DB_OPT = NO # Add any changes to make definitions here #CROSS_COMPILER_TARGET_ARCHS = vxWorks-68040 # Use this when your IOC and the host use different paths # to access the application. Typically this will be # used with the Microsoft FTP server or with NFS mounts. Use # is indicated by failure of the cdCommands script on # vxWorks. You must rebuild in the iocBoot directory # before this takes effect. #IOCS_APPL_TOP = <the top of the application as seen by the IOC> DIRS := $(DIRS) $(filter-out $(DIRS), configure) DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *App)) DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *app)) DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard iocBoot)) DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard iocboot)) include $(TOP)/configure/RULES_TOP