Flattened Makefile 1: Difference between revisions
Jump to navigation
Jump to search
No edit summary |
|||
Line 5: | Line 5: | ||
#Makefile at top of application tree | #Makefile at top of application tree | ||
TOP = . | TOP = . | ||
include $(TOP)/configure/CONFIG | #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), configure) | ||
DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *App)) | DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *App)) | ||
Line 12: | Line 201: | ||
DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard iocboot)) | DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard iocboot)) | ||
include $(TOP)/configure/RULES_TOP | include $(TOP)/configure/RULES_TOP | ||
</nowiki> |
Revision as of 19:18, May 22, 2018
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