mirror of
https://github.com/dashpay/dash.git
synced 2024-12-25 03:52:49 +01:00
685b7a7a1b
094772656d71b3f5022ae292094e878da035de9e build: support LTO in depends (fanquake) Pull request description: This adds an `LTO` option to depends, i.e `make -C depends LTO=1`, which passes `-flto` when building packages (not currently qt), and automatically configures with `--enable-lto` when doing a build using a `CONFIG_SITE`. The following tables comapres the size (in bytes) of the stripped `x86_64` Linux binaries produced with master and this PR (full depends build): | Binary | stripped master | stripped LTO=1 | saving | | -------- | ----------------: | -------------: | --------: | | bitcoin-cli | 1178632 | 469872 | 60% | | bitcoin-tx | 2710584 | 1866504 | 31% | | bitcoin-util | 952880 | 240104 | 74% | | bitcoin-wallet | 7992888 | 5365984 | 32% | | bitcoind | 13421336 | 11868592 | 12% | | bitcoin-qt | 37680496 | 31640976 | 16% | ACKs for top commit: laanwj: Tested ACK 094772656d71b3f5022ae292094e878da035de9e Tree-SHA512: 6b8483ea490e57a153105ad8c38b25fb1af5d55b1af22db398c7c2573612aaf71b4d2b4cf09c18fd6331b1358dba01641eeaa03e5018a925392e1937118d984a
79 lines
2.5 KiB
Bash
Executable File
79 lines
2.5 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
# Usage: env [ CC=... ] [ CXX=... ] [ AR=... ] [ RANLIB=... ] [ STRIP=... ] \
|
|
# [ DEBUG=... ] [ LTO=... ] ./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 "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 "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 "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
|