mirror of
https://github.com/shadps4-emu/ext-cryptopp.git
synced 2024-11-27 03:40:22 +00:00
225 lines
7.7 KiB
Bash
Executable File
225 lines
7.7 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
#############################################################################
|
|
#
|
|
# This is a test script that can be used on some Linux/Unix/Apple machines to
|
|
# automate testing of the shared object to ensure linking and symbols don't go
|
|
# missing from release to release.
|
|
#
|
|
# Written and placed in public domain by Jeffrey Walton and Uri Blumenthal.
|
|
#
|
|
# Crypto++ Library is copyrighted as a compilation and (as of version 5.6.2)
|
|
# licensed under the Boost Software License 1.0, while the individual files
|
|
# in the compilation are all public domain.
|
|
#
|
|
#############################################################################
|
|
|
|
#############################################################################
|
|
# Tags to test
|
|
|
|
OLD_VERSION_TAG=CRYPTOPP_8_3_0
|
|
NEW_VERSION_TAG=master
|
|
|
|
#############################################################################
|
|
# If local repo is dirty, then prompt first
|
|
|
|
DIRTY=$(git diff --shortstat 2> /dev/null | tail -1)
|
|
if [[ ! -z "$DIRTY" ]]; then
|
|
|
|
echo
|
|
echo "The local repo is dirty. Continuing will reset the repo and lose changes."
|
|
read -p "Type 'Y' to proceed or 'N' to exit. Proceed? " -n 1 -r
|
|
echo # (optional) move to a new line
|
|
if [[ !($REPLY =~ ^[Yy]$) ]]; then
|
|
exit 0
|
|
fi
|
|
else
|
|
echo
|
|
echo "The local repo is clean. Proceeding..."
|
|
fi
|
|
|
|
#############################################################################
|
|
|
|
echo
|
|
echo "****************************************************************"
|
|
echo "Testing '$NEW_VERSION_TAG' against '$OLD_VERSION_TAG'"
|
|
echo "****************************************************************"
|
|
|
|
#############################################################################
|
|
# Setup tools and platforms
|
|
|
|
GREP=grep
|
|
EGREP=egrep
|
|
SED=sed
|
|
AWK=awk
|
|
CXXFILT=c++filt
|
|
|
|
THIS_SYSTEM=$(uname -s 2>&1)
|
|
IS_DARWIN=$("${GREP}" -i -c darwin <<< "${THIS_SYSTEM}")
|
|
IS_LINUX=$("${GREP}" -i -c linux <<< "${THIS_SYSTEM}")
|
|
IS_CYGWIN=$("${GREP}" -i -c cygwin <<< "${THIS_SYSTEM}")
|
|
IS_MINGW=$("${GREP}" -i -c mingw <<< "${THIS_SYSTEM}")
|
|
IS_OPENBSD=$("${GREP}" -i -c openbsd <<< "${THIS_SYSTEM}")
|
|
IS_FREEBSD=$("${GREP}" -i -c freebsd <<< "${THIS_SYSTEM}")
|
|
IS_NETBSD=$("${GREP}" -i -c netbsd <<< "${THIS_SYSTEM}")
|
|
IS_SOLARIS=$("${GREP}" -i -c sunos <<< "${THIS_SYSTEM}")
|
|
|
|
THIS_MACHINE=$(uname -m 2>&1)
|
|
IS_X86=$("${EGREP}" -i -c 'i386|i486|i586|i686' <<< "${THIS_MACHINE}")
|
|
IS_X64=$("${EGREP}" -i -c "amd64|x86_64" <<< "${THIS_MACHINE}")
|
|
IS_PPC32=$("${EGREP}" -i -c "PowerPC|PPC" <<< "${THIS_MACHINE}")
|
|
IS_PPC64=$("${EGREP}" -i -c "PowerPC64|PPC64" <<< "${THIS_MACHINE}")
|
|
IS_ARM32=$("${EGREP}" -i -c "arm|aarch32" <<< "${THIS_MACHINE}")
|
|
IS_ARMV8=$("${EGREP}" -i -c "arm64|aarch64" <<< "${THIS_MACHINE}")
|
|
IS_S390=$("${EGREP}" -i -c "s390" <<< "${THIS_MACHINE}")
|
|
|
|
if [[ "${IS_X64}" -eq 1 ]]; then IS_X86=0; fi
|
|
if [[ "${IS_ARMV8}" -eq 1 ]]; then IS_ARM32=0; fi
|
|
if [[ "${IS_PPC64}" -eq 1 ]]; then IS_PPC32=0; fi
|
|
|
|
# Fixup
|
|
if [[ "$IS_FREEBSD" -ne "0" || "$IS_OPENBSD" -ne "0" || "$IS_NETBSD" -ne "0" ]]; then
|
|
MAKE=gmake
|
|
elif [[ "$IS_SOLARIS" -ne "0" ]]; then
|
|
MAKE=$(command -v gmake 2>/dev/null | "${GREP}" -v "no gmake" | head -1)
|
|
if [[ -z "$MAKE" && -e "/usr/sfw/bin/gmake" ]]; then
|
|
MAKE=/usr/sfw/bin/gmake
|
|
fi
|
|
else
|
|
MAKE=make
|
|
fi
|
|
|
|
if [[ "$IS_DARWIN" -ne "0" ]]; then
|
|
LINK_LIBRARY=libcryptopp.dylib
|
|
else
|
|
LINK_LIBRARY=libcryptopp.so
|
|
fi
|
|
|
|
if [[ -z "${CXX}" ]]; then CXX=c++; fi
|
|
|
|
SUN_COMPILER=$("${CXX}" -V 2>&1 | "${EGREP}" -i -c "CC: (Sun|Studio)")
|
|
GCC_COMPILER=$("${CXX}" --version 2>&1 | "${EGREP}" -i -c "^(gcc|g\+\+)")
|
|
INTEL_COMPILER=$("${CXX}" --version 2>&1 | "${GREP}" -i -c "icc")
|
|
MACPORTS_COMPILER=$("${CXX}" --version 2>&1 | "${GREP}" -i -c "MacPorts")
|
|
CLANG_COMPILER=$("${CXX}" --version 2>&1 | "${GREP}" -i -c "clang")
|
|
|
|
#############################################################################
|
|
|
|
# CPU is logical count, memory is in MiB. Low resource boards have
|
|
# fewer than 4 cores and 1GB or less memory. We use this to
|
|
# determine if we can build in parallel without an OOM kill.
|
|
CPU_COUNT=1
|
|
MEM_SIZE=512
|
|
|
|
if [[ -e "/proc/cpuinfo" && -e "/proc/meminfo" ]]; then
|
|
CPU_COUNT=$(cat /proc/cpuinfo | "${GREP}" -c '^processor')
|
|
MEM_SIZE=$(cat /proc/meminfo | "${GREP}" "MemTotal" | "${AWK}" '{print $2}')
|
|
MEM_SIZE=$(($MEM_SIZE/1024))
|
|
elif [[ "$IS_DARWIN" -ne "0" ]]; then
|
|
CPU_COUNT=$(sysctl -a 2>&1 | "${GREP}" 'hw.availcpu' | "${AWK}" '{print $3; exit}')
|
|
MEM_SIZE=$(sysctl -a 2>&1 | "${GREP}" 'hw.memsize' | "${AWK}" '{print $3; exit;}')
|
|
MEM_SIZE=$(($MEM_SIZE/1024/1024))
|
|
elif [[ "$IS_SOLARIS" -ne "0" ]]; then
|
|
CPU_COUNT=$(psrinfo 2>/dev/null | wc -l | "${AWK}" '{print $1}')
|
|
MEM_SIZE=$(prtconf 2>/dev/null | "${GREP}" Memory | "${AWK}" '{print $3}')
|
|
fi
|
|
|
|
# Some ARM devboards cannot use 'make -j N', even with multiple cores and RAM
|
|
# An 8-core Cubietruck Plus with 2GB RAM experiences OOM kills with '-j 2'.
|
|
HAVE_SWAP=1
|
|
if [[ "$IS_LINUX" -ne "0" ]]; then
|
|
if [[ -e "/proc/meminfo" ]]; then
|
|
SWAP_SIZE=$(cat /proc/meminfo | "${GREP}" "SwapTotal" | "${AWK}" '{print $2}')
|
|
if [[ "$SWAP_SIZE" -eq "0" ]]; then
|
|
HAVE_SWAP=0
|
|
fi
|
|
else
|
|
HAVE_SWAP=0
|
|
fi
|
|
fi
|
|
|
|
if [[ "$CPU_COUNT" -ge "2" && "$MEM_SIZE" -ge "1280" && "$HAVE_SWAP" -ne "0" ]]; then
|
|
MAKEARGS=(-j "$CPU_COUNT")
|
|
fi
|
|
|
|
#############################################################################
|
|
#############################################################################
|
|
|
|
"${MAKE}" distclean &>/dev/null && cleanup &>/dev/null
|
|
git checkout master -f &>/dev/null
|
|
git checkout "$OLD_VERSION_TAG" -f &>/dev/null
|
|
|
|
if [[ "$?" -ne "0" ]]; then
|
|
echo "Failed to checkout $OLD_VERSION_TAG"
|
|
exit 1
|
|
fi
|
|
|
|
echo
|
|
echo "****************************************************************"
|
|
echo "Building dynamic library for $OLD_VERSION_TAG"
|
|
echo "****************************************************************"
|
|
echo
|
|
|
|
LINK_LIBRARY="$LINK_LIBRARY" "$MAKE" "${MAKEARGS[@]}" -f GNUmakefile cryptest.exe dynamic
|
|
|
|
if [[ ! -f "$LINK_LIBRARY" ]]; then
|
|
echo "Failed to make $OLD_VERSION_TAG library"
|
|
exit 1
|
|
fi
|
|
|
|
echo
|
|
echo "****************************************************************"
|
|
echo "Running $OLD_VERSION_TAG cryptest.exe using $OLD_VERSION_TAG library"
|
|
echo "****************************************************************"
|
|
echo
|
|
|
|
if [[ "$IS_DARWIN" -ne "0" ]]; then
|
|
DYLD_LIBRARY_PATH="$PWD:$DYLD_LIBRARY_PATH" ./cryptest.exe v 2>&1 | "$CXXFILT"
|
|
DYLD_LIBRARY_PATH="$PWD:$DYLD_LIBRARY_PATH" ./cryptest.exe tv all 2>&1 | "$CXXFILT"
|
|
else
|
|
LD_LIBRARY_PATH="$PWD:$LD_LIBRARY_PATH" ./cryptest.exe v 2>&1 | "$CXXFILT"
|
|
LD_LIBRARY_PATH="$PWD:$LD_LIBRARY_PATH" ./cryptest.exe tv all 2>&1 | "$CXXFILT"
|
|
fi
|
|
|
|
# Stash away old cryptest.exe
|
|
cp cryptest.exe cryptest.exe.saved
|
|
|
|
echo
|
|
echo "****************************************************************"
|
|
echo "Building dynamic library for $NEW_VERSION_TAG"
|
|
echo "****************************************************************"
|
|
echo
|
|
|
|
"${MAKE}" distclean &>/dev/null && cleanup &>/dev/null
|
|
git checkout master -f &>/dev/null
|
|
git checkout "$NEW_VERSION_TAG" -f &>/dev/null
|
|
|
|
LINK_LIBRARY="$LINK_LIBRARY" "$MAKE" "${MAKEARGS[@]}" -f GNUmakefile cryptest.exe dynamic
|
|
|
|
if [[ ! -f "$LINK_LIBRARY" ]]; then
|
|
echo "Failed to make $NEW_VERSION_TAG library"
|
|
exit 1
|
|
fi
|
|
|
|
# Fetch old cryptest.exe
|
|
cp cryptest.exe.saved cryptest.exe
|
|
|
|
echo
|
|
echo "****************************************************************"
|
|
echo "Running $OLD_VERSION_TAG cryptest.exe using $NEW_VERSION_TAG library"
|
|
echo "****************************************************************"
|
|
echo
|
|
|
|
if [[ "$IS_DARWIN" -ne "0" ]]; then
|
|
DYLD_LIBRARY_PATH="$PWD:$DYLD_LIBRARY_PATH" ./cryptest.exe v 2>&1 | "$CXXFILT"
|
|
DYLD_LIBRARY_PATH="$PWD:$DYLD_LIBRARY_PATH" ./cryptest.exe tv all 2>&1 | "$CXXFILT"
|
|
else
|
|
LD_LIBRARY_PATH="$PWD:$LD_LIBRARY_PATH" ./cryptest.exe v 2>&1 | "$CXXFILT"
|
|
LD_LIBRARY_PATH="$PWD:$LD_LIBRARY_PATH" ./cryptest.exe tv all 2>&1 | "$CXXFILT"
|
|
fi
|
|
|
|
"${MAKE}" distclean &>/dev/null && cleanup &>/dev/null
|
|
git checkout master -f &>/dev/null
|
|
|
|
exit 0
|