mirror of
https://github.com/bitcoin/bitcoin.git
synced 2024-11-19 09:53:47 +01:00
436df1e826
Add an option that when passed, will disable hardening options, and pass `--disable-hardening` through to configure. Due to the way we link libssp for Windows builds, they now fail (after #27118), if building with depends, and configuring with --disable-hardening. See: https://github.com/bitcoin/bitcoin/pull/27118#issuecomment-1492606272. This change would add a depends opiton such that, if someone wants to build with, for windows, without hardening, they can do so. This may also be useful when building for debugging.
86 lines
2.7 KiB
Bash
Executable File
86 lines
2.7 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
# Usage: env [ CC=... ] [ C_STANDARD=...] [ CXX=... ] [CXX_STANDARD=...] \
|
|
# [ AR=... ] [ RANLIB=... ] [ STRIP=... ] [ DEBUG=... ] \
|
|
# [ LTO=... ] [ NO_HARDEN=... ] ./build-id [ID_SALT]...
|
|
#
|
|
# Prints to stdout a SHA256 hash representing the current toolset, used by
|
|
# depends/Makefile as a build id for caching purposes (detecting when the
|
|
# toolset has changed and the cache needs to be invalidated).
|
|
#
|
|
# If the DEBUG environment variable is non-empty and the system has `tee`
|
|
# available in its $PATH, the pre-image to the SHA256 hash will be printed to
|
|
# stderr. This is to help developers debug caching issues in depends.
|
|
|
|
# This script explicitly does not `set -e` because id determination is mostly
|
|
# opportunistic: it is fine that things fail, as long as they fail consistently.
|
|
|
|
# Command variables (CC/CXX/AR) which can be blank are invoked with `bash -c`,
|
|
# because the "command not found" error message printed by shells often include
|
|
# the line number, like so:
|
|
#
|
|
# ./depends/gen_id: line 43: --version: command not found
|
|
#
|
|
# By invoking with `bash -c`, we ensure that the line number is always 1
|
|
|
|
(
|
|
# Redirect stderr to stdout
|
|
exec 2>&1
|
|
|
|
echo "BEGIN ALL"
|
|
|
|
# Include any ID salts supplied via command line
|
|
echo "BEGIN ID SALT"
|
|
echo "$@"
|
|
echo "END ID SALT"
|
|
|
|
# GCC only prints COLLECT_LTO_WRAPPER when invoked with just "-v", but we want
|
|
# the information from "-v -E -" as well, so just include both.
|
|
echo "BEGIN CC"
|
|
bash -c "${CC} -v"
|
|
bash -c "${CC} -v -E -xc -o /dev/null - < /dev/null"
|
|
bash -c "${CC} -v -E -xobjective-c -o /dev/null - < /dev/null"
|
|
echo "C_STANDARD=${C_STANDARD}"
|
|
echo "END CC"
|
|
|
|
echo "BEGIN CXX"
|
|
bash -c "${CXX} -v"
|
|
bash -c "${CXX} -v -E -xc++ -o /dev/null - < /dev/null"
|
|
bash -c "${CXX} -v -E -xobjective-c++ -o /dev/null - < /dev/null"
|
|
echo "CXX_STANDARD=${CXX_STANDARD}"
|
|
echo "END CXX"
|
|
|
|
echo "BEGIN AR"
|
|
bash -c "${AR} --version"
|
|
env | grep '^AR_'
|
|
echo "ZERO_AR_DATE=${ZERO_AR_DATE}"
|
|
echo "END AR"
|
|
|
|
echo "BEGIN RANLIB"
|
|
bash -c "${RANLIB} --version"
|
|
env | grep '^RANLIB_'
|
|
echo "END RANLIB"
|
|
|
|
echo "BEGIN STRIP"
|
|
bash -c "${STRIP} --version"
|
|
env | grep '^STRIP_'
|
|
echo "END STRIP"
|
|
|
|
echo "BEGIN LTO"
|
|
echo "LTO=${LTO}"
|
|
echo "END LTO"
|
|
|
|
echo "BEGIN NO_HARDEN"
|
|
echo "NO_HARDEN=${NO_HARDEN}"
|
|
echo "END NO_HARDEN"
|
|
|
|
echo "END ALL"
|
|
) | if [ -n "$DEBUG" ] && command -v tee > /dev/null 2>&1; then
|
|
# When debugging and `tee` is available, output the preimage to stderr
|
|
# in addition to passing through stdin to stdout
|
|
tee >(cat 1>&2)
|
|
else
|
|
# Otherwise, passthrough stdin to stdout
|
|
cat
|
|
fi | ${SHA256SUM} - | cut -d' ' -f1
|