#************************************************************************* # Copyright (c) 2013 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. #************************************************************************* # # Common build definitions # ifneq ($(wildcard $(TOP)/configure/CONFIG_BASE_VERSION),) EPICS_BASE = $(INSTALL_LOCATION) 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 # Provide a default if the user hasn't set EPICS_HOST_ARCH # ifeq ($(origin EPICS_HOST_ARCH), undefined) # Bootstrapping ... EHA := $(firstword $(wildcard $(EPICS_BASE)/lib/perl/EpicsHostArch.pl \ $(TOP)/src/tools/EpicsHostArch.pl)) # NB: We use a simply expanded variable here for performance: export EPICS_HOST_ARCH := $(shell perl $(EHA)) 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 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 # 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 # 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) # Site specific target and host-target definitions and overrides # -include $(CONFIG)/os/CONFIG_SITE.Common.$(T_A) -include $(CONFIG)/os/CONFIG_SITE.$(EPICS_HOST_ARCH).$(T_A) # RELEASE file specific definitions # ifneq ($(CONFIG),$(TOP)/configure) -include $(CONFIG)/CONFIG_APP_INCLUDE endif endif # ifdef T_A # Include /cfg/CONFIG* definitions from tops defined in RELEASE* files # ifneq ($(CONFIG),$(TOP)/configure) RELEASE_TOPS_REVERSE := $(shell \ $(PERL) -e '$$,=" ";print reverse @ARGV' $(RELEASE_TOPS)) RELEASE_CFG_CONFIGS = $(foreach top, $(RELEASE_TOPS_REVERSE), \ $(wildcard $($(top))/cfg/CONFIG*)) ifneq ($(RELEASE_CFG_CONFIGS),) include $(RELEASE_CFG_CONFIGS) endif endif # Include $(INSTALL_CFG)/CONFIG* definitions # TOP_CFG_CONFIGS = $(wildcard $(INSTALL_CFG)/CONFIG*) ifneq ($(TOP_CFG_CONFIGS),) include $(TOP_CFG_CONFIGS) 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