build-libssp: Stop building the real libssp from GCC

As mingw-w64 now provides these routines, we no longer need to build
the original library from GCC.

As building with -fstack-protector-strong still links with -lssp
(and -lssp_nonshared), we still need to provide libraries with these
names, but they can be empty dummy libraries.
This commit is contained in:
Martin Storsjö committed 2023-01-29 01:09:17 +02:00
1 parent ef9806fc0a
commit 4ee7cc97de
7 files changed
+12 -98

No files matched your search

+7 -67
View File
@@ -16,16 +16,8 @@
set -e
CFGUARD_CFLAGS="-mguard=cf"
while [ $# -gt 0 ]; do
case "$1" in
--enable-cfguard)
CFGUARD_CFLAGS="-mguard=cf"
;;
--disable-cfguard)
CFGUARD_CFLAGS=
;;
*)
PREFIX="$1"
;;
@@ -33,73 +25,21 @@ while [ $# -gt 0 ]; do
shift
done
if [ -z "$PREFIX" ]; then
echo "$0 [--enable-cfguard|--disable-cfguard] dest"
echo "$0 dest"
exit 1
fi
MAKE=make
if command -v gmake >/dev/null; then
MAKE=gmake
fi
mkdir -p "$PREFIX"
PREFIX="$(cd "$PREFIX" && pwd)"
export PATH="$PREFIX/bin:$PATH"
: ${CORES:=$(nproc 2>/dev/null)}
: ${CORES:=$(sysctl -n hw.ncpu 2>/dev/null)}
: ${CORES:=4}
: ${ARCHS:=${TOOLCHAIN_ARCHS-i686 x86_64 armv7 aarch64}}
download() {
if command -v wget >/dev/null; then
if [ -n "$2" ]; then
wget -O "$2" "$1"
else
wget "$1"
fi
else
if [ -n "$2" ]; then
curl -L -o "$2" "$1"
else
curl -LO "$1"
fi
fi
}
if [ ! -d libssp ]; then
download 'https://gitlab.com/watched/gcc-mirror/gcc/-/archive/releases/gcc-7.3.0/gcc-releases-gcc-7.3.0.tar.bz2?path=libssp' libssp.tar.bz2
tar xf libssp.tar.bz2 --strip-components=1
rm -f libssp.tar.bz2
fi
cp libssp-Makefile libssp/Makefile
cd libssp
# gcc/libssp's configure script runs checks for flags that clang doesn't
# implement. We actually just need to set a few HAVE defines and compile
# the .c sources.
cp config.h.in config.h
for i in HAVE_FCNTL_H HAVE_INTTYPES_H HAVE_LIMITS_H HAVE_MALLOC_H \
HAVE_MEMMOVE HAVE_MEMORY_H HAVE_MEMPCPY HAVE_STDINT_H HAVE_STDIO_H \
HAVE_STDLIB_H HAVE_STRINGS_H HAVE_STRING_H HAVE_STRNCAT HAVE_STRNCPY \
HAVE_SYS_STAT_H HAVE_SYS_TYPES_H HAVE_UNISTD_H HAVE_USABLE_VSNPRINTF \
HAVE_HIDDEN_VISIBILITY; do
cat config.h | sed 's/^#undef '$i'$/#define '$i' 1/' > tmp
mv tmp config.h
done
cat ssp/ssp.h.in | sed 's/@ssp_have_usable_vsnprintf@/define/' > ssp/ssp.h
for arch in $ARCHS; do
[ -z "$CLEAN" ] || rm -rf build-$arch
mkdir -p build-$arch
cd build-$arch
$MAKE -f ../Makefile -j$CORES CROSS=$arch-w64-mingw32- CFGUARD_CFLAGS="$CFGUARD_CFLAGS"
mkdir -p "$PREFIX/$arch-w64-mingw32/bin"
cp libssp.a "$PREFIX/$arch-w64-mingw32/lib"
cp libssp_nonshared.a "$PREFIX/$arch-w64-mingw32/lib"
cp libssp.dll.a "$PREFIX/$arch-w64-mingw32/lib"
cp libssp-0.dll "$PREFIX/$arch-w64-mingw32/bin"
cd ..
if [ ! -f $PREFIX/$arch-w64-mingw32/lib/libssp.a ]; then
# Create empty dummy archives, to avoid failing when the compiler
# driver adds "-lssp -lssh_nonshared" when linking.
llvm-ar rcs $PREFIX/$arch-w64-mingw32/lib/libssp.a
llvm-ar rcs $PREFIX/$arch-w64-mingw32/lib/libssp_nonshared.a
fi
done