mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-11-23 08:00:20 +00:00
5f724b6ca1
When libstdc++ was added in 4977fd22b8
, just calling
'make install' was the easiest way to install the headers. And the headers are all
that is needed for libstdc++ to determine the ABI. Since then, BuildIt.sh was
rewritten again and again, and somehow everyone just silently assumed that
libstdc++ also depends on libc.a and libm.a, because surely it does?
Turns out, it doesn't! This massively reduces the dependencies of libstdc++,
hopefully meaning that the Toolchain doesn't need to be rebuilt so often on Travis.
Furthermore, the old method of trying to determine the dependency tree with
bash/grep/etc. has finally broken anyways:
https://travis-ci.com/github/SerenityOS/serenity/builds/179805569#L567
In summary, this should eliminate most of the Toolchain rebuilds on Travis,
and therefore make Travis build blazingly fast! :^)
48 lines
1.7 KiB
Bash
Executable file
48 lines
1.7 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
# This file will need to be run in bash, for now.
|
|
|
|
if [ $# -lt 1 ] ; then
|
|
echo "USAGE: echo \"YOURCONFIG\" | $0 <HASH-INVOCATION>" >&2
|
|
echo "Example: echo \"uname=Linux,TARGET=i686-pc-serenity\" | $0 md5sum" >&2
|
|
echo "Example: echo \"uname=OpenBSD,TARGET=i686-pc-serenity\" | $0 md5 -q" >&2
|
|
exit 1
|
|
fi
|
|
|
|
DIR=$( cd "$( dirname "$0" )" && pwd )
|
|
cd "${DIR}/.."
|
|
if [ ! -r LICENSE ] ; then
|
|
echo "$0: Got confused by the directories, giving up." >&2
|
|
exit 1
|
|
fi
|
|
|
|
# Ensure cleanup
|
|
DEPLIST_FILE=$(mktemp /tmp/serenity_deps_XXXXXXXX.lst)
|
|
function finish {
|
|
rm -f "${DEPLIST_FILE}"
|
|
}
|
|
trap finish EXIT
|
|
|
|
# First, capture the caller's input.
|
|
echo "$0: Configuration:" >&2
|
|
cat /dev/stdin | tee /dev/stderr > "${DEPLIST_FILE}"
|
|
# "$@" is the md5sum invocation.
|
|
"$@" Toolchain/ComputeDependenciesHash.sh | tee /dev/stderr >> "${DEPLIST_FILE}"
|
|
|
|
# libstdc++ depends on the *headers* of libc, so we pessimistically assume it depends
|
|
# on *all* of them.
|
|
# This list of files can be cut down considerably:
|
|
# strace -ff -e trace=file "make install-target-libstdc++-v3" 2>&1 >/dev/null | perl -ne 's/^[^"]+"(([^\\"]|\\[\\"nt])*)".*/$1/ && print' | sort -u | grep -P 'serenity/Build/Root/usr/include/.*\.h$'
|
|
# However, we don't want to risk breaking the build when we upgrade gcc in the future.
|
|
#
|
|
# If you want to further cut down the Toolchain rebuilds on Travis,
|
|
# one way would be to reduce this list somehow.
|
|
cd Libraries/LibC/
|
|
find -name '*.h' | sort | xargs "$@" | tee /dev/stderr >> "${DEPLIST_FILE}"
|
|
|
|
# The piping might hide non-zero exit-codes,
|
|
# but thankfully only the first command can reasonably fail.
|
|
echo "$0: Toolchain hash:" >&2
|
|
"$@" "${DEPLIST_FILE}" | cut -f1 -d' ' | tee /dev/stderr
|
|
|
|
echo "$0: Great success!" >&2
|