
By default Perl doesn't iterate over hashes in a reproducible manner, to avoid DDoS. Since we aren't providing untrusted inputs, it is fine to disable this behaviour. Among other things, this makes the .dbd and some .h generation reproducible. More information here: - https://reproducible-builds.org/docs/stable-outputs/ - https://perldoc.perl.org/perlrun#PERL_HASH_SEED
134 lines
3.7 KiB
Plaintext
134 lines
3.7 KiB
Plaintext
#*************************************************************************
|
|
# 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 <top>/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
|
|
|