c5ebe1f30a
Enable SSE4/AVX detection for AMD platforms (Bulldozer has both). Portable long long int print formatting to silence gcc 4.6 warnings.
325 lines
7.3 KiB
Bash
Executable file
325 lines
7.3 KiB
Bash
Executable file
#!/bin/sh
|
|
|
|
usage() {
|
|
prog=$1
|
|
cat << _EOF
|
|
${prog} [<options>]
|
|
|
|
<options> can be one of the following:
|
|
|
|
--prefix=<val> The installation prefix (default: /usr).
|
|
--enable-debug Enable debug mode compilation (default: disabled).
|
|
--disable-allocator Disable use of internal memory allocator mechanism (default: enabled).
|
|
--enable-debug-stats Enable printing of some verbose debug info (default: disabled).
|
|
--with-libbsc=<path to libbsc source>
|
|
Enable support for libbsc (See: libbsc.com). Full path to the libbsc
|
|
source tree must be provided. It links the library statically.
|
|
--with-openssl=<path to OpenSSL installation tree> (Default: System)
|
|
This defaults to the system's OpenSSL library. You can use this option
|
|
if you want to use an alternate OpenSSL installation.
|
|
--use-key256 Use 256-bit encryption keys. Default key length is 128-bit.
|
|
--help Display this help message.
|
|
|
|
_EOF
|
|
}
|
|
|
|
arg1=$1
|
|
debug=0
|
|
allocator=1
|
|
debug_stats=0
|
|
prefix=/usr
|
|
libbsc_dir=
|
|
libbsc_lib=
|
|
libbsclflags=
|
|
libbscwrapobj=
|
|
libbscgenopt=
|
|
libbsccppflags=
|
|
openssl_prefix=
|
|
openssl_libdir=
|
|
openssl_incdir=
|
|
libbz2_libdir=
|
|
libz_libdir=
|
|
sha256asmobjs=
|
|
sha256objs=
|
|
keylen=
|
|
yasm=yasm
|
|
|
|
while [ "${arg1}" != "" ]
|
|
do
|
|
case "$arg1" in
|
|
--enable-debug) debug=1;;
|
|
--disable-allocator) allocator=0;;
|
|
--enable-debug-stats) debug_stats=1;;
|
|
--prefix=*)
|
|
pval=`echo ${arg1} | cut -f2 -d"="`
|
|
prefix=$pval
|
|
;;
|
|
--with-libbsc=*)
|
|
path=`echo ${arg1} | cut -f2 -d"="`
|
|
if [ -f ${path}/bsc.cpp -a -f ${path}/libbsc/libbsc.h ]
|
|
then
|
|
libbsc_dir="${path}"
|
|
libbsc_lib="${path}/libbsc.a"
|
|
libbsclflags='\$\(LIBBSCLFLAGS\)'
|
|
libbscwrapobj='\$\(LIBBSCWRAPOBJ\)'
|
|
libbscgenopt='\$\(LIBBSCGEN_OPT\)'
|
|
libbsccppflags='\$\(LIBBSCCPPFLAGS\)'
|
|
else
|
|
echo "Libbsc not found in ${path}, not enabling libbsc support.\n"
|
|
fi
|
|
;;
|
|
--with-openssl=*)
|
|
openssl_prefix=`echo ${arg1} | cut -f2 -d"="`
|
|
;;
|
|
--use-key256)
|
|
keylen='-DKEYLEN=32'
|
|
;;
|
|
--help) usage $0;;
|
|
*)
|
|
echo "Unrecognized option: ${arg1}"
|
|
exit 1
|
|
;;
|
|
esac
|
|
shift
|
|
arg1=$1
|
|
done
|
|
|
|
if [ $debug -eq 1 ]
|
|
then
|
|
typ="DEBUG"
|
|
else
|
|
typ="RELEASE"
|
|
fi
|
|
|
|
OS=$(uname)
|
|
skeinblock='\$\(SKEIN_BLOCK_C\)'
|
|
if [ "$OS" = "Linux" ]
|
|
then
|
|
plat=$(uname -m)
|
|
elif [ "$OS" = "SunOS" ]
|
|
then
|
|
plat=$(isainfo -v)
|
|
else
|
|
echo "Unsupported OS: $OS"
|
|
exit 1
|
|
fi
|
|
|
|
echo $plat | egrep 'x86_64|amd64' > /dev/null
|
|
if [ $? -eq 0 ]
|
|
then
|
|
skeinblock='\$\(SKEIN_BLOCK_ASM\)'
|
|
yasm=
|
|
|
|
#
|
|
# Detect Yasm
|
|
#
|
|
for bindir in /bin /usr/bin /usr/local/bin
|
|
do
|
|
if [ -x ${bindir}/yasm ]
|
|
then
|
|
# Get yasm version
|
|
yver=`${bindir}/yasm --version | head -1 | awk '{print $2}'`
|
|
_OIFS=$IFS; IFS="."; set -- ${yver}; IFS="$_OIFS"
|
|
major=$1
|
|
minor=$2
|
|
|
|
# Minimum yasm version 1.1
|
|
[ $major -lt 1 -o $minor -lt 1 ] && continue
|
|
yasm=${bindir}/yasm
|
|
sha256asmobjs='\$\(SHA256ASM_OBJS\)'
|
|
sha256objs='\$\(SHA256_OBJS\)'
|
|
fi
|
|
done
|
|
if [ "x${yasm}" = "x" ]
|
|
then
|
|
echo "Yasm version 1.1 or later is required to build on x64 platforms"
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
# Detect OpenSSL library
|
|
for lib in "${openssl_prefix}/lib64" "${openssl_prefix}/usr/lib64" \
|
|
"${openssl_prefix}/lib" "${openssl_prefix}/usr/lib" \
|
|
"${openssl_prefix}/ssl/lib64" "${openssl_prefix}/ssl/lib" \
|
|
"${openssl_prefix}/lib/x86_64-linux-gnu" \
|
|
"${openssl_prefix}/usr/lib/x86_64-linux-gnu"
|
|
do
|
|
if [ -d ${lib} ]
|
|
then
|
|
if [ -f "${lib}/libcrypto.so" -o -h "${lib}/libcrypto.so" ]
|
|
then
|
|
openssl_libdir=${lib}
|
|
break
|
|
else
|
|
if [ -f "${lib}/libcrypto.a" ]
|
|
then
|
|
openssl_libdir=${lib}
|
|
break
|
|
fi
|
|
fi
|
|
fi
|
|
done
|
|
|
|
if [ "x${openssl_libdir}" = "x" ]
|
|
then
|
|
echo "ERROR: OpenSSL libraries not detected."
|
|
exit 1
|
|
fi
|
|
|
|
# Detect OpenSSL headers
|
|
for inc in "${openssl_prefix}/include" \
|
|
"${openssl_prefix}/usr/include" \
|
|
"${openssl_prefix}/ssl/include"
|
|
do
|
|
if [ -d ${inc} ]
|
|
then
|
|
if [ -f "${inc}/openssl/sha.h" ]
|
|
then
|
|
openssl_incdir=${inc}
|
|
break
|
|
fi
|
|
fi
|
|
done
|
|
|
|
if [ "x${openssl_incdir}" = "x" ]
|
|
then
|
|
echo "ERROR: OpenSSL header files not detected."
|
|
if [ "x${openssl_prefix}" = "x" ]
|
|
then
|
|
echo "Depending on your system you may need to install the openssl-devel or openssl-dev package."
|
|
fi
|
|
exit 1
|
|
fi
|
|
|
|
|
|
# Detect other library packages
|
|
for libname in "libbz2" "libz"
|
|
do
|
|
for lib in "/lib64" "/usr/lib64" "/lib" "/usr/lib" "/lib/x86_64-linux-gnu" \
|
|
"/usr/lib/x86_64-linux-gnu" \
|
|
"${prefix}/lib64" "${prefix}/lib" "${prefix}/lib/x86_64-linux-gnu"
|
|
do
|
|
if [ -d ${lib} ]
|
|
then
|
|
if [ -f "${lib}/${libname}.so" -o -h "${lib}/${libname}.so" ]
|
|
then
|
|
eval "${libname}_libdir=${lib}"
|
|
break
|
|
else
|
|
if [ -f "${lib}/${libname}.a" ]
|
|
then
|
|
eval "${libname}_libdir=${lib}"
|
|
break
|
|
fi
|
|
fi
|
|
fi
|
|
done
|
|
done
|
|
|
|
if [ "x${libbz2_libdir}" = "x" ]
|
|
then
|
|
echo "ERROR: Libbz2 not detected."
|
|
echo " You may have to install libbz2-devel or libbz2-dev"
|
|
exit 1
|
|
fi
|
|
|
|
if [ "x${libz_libdir}" = "x" ]
|
|
then
|
|
echo "ERROR: Zlib not detected."
|
|
echo " You may have to install libz-devel or libz-dev"
|
|
exit 1
|
|
fi
|
|
|
|
libbz2_inc=
|
|
libz_inc=
|
|
# Detect other library headers
|
|
for hdr in "libbz2_inc:bzlib.h" "libz_inc:zlib.h"
|
|
do
|
|
_OIFS="$IFS"
|
|
IFS=":"
|
|
set -- ${hdr}
|
|
var=$1
|
|
hdrf=$2
|
|
IFS="$_OIFS"
|
|
|
|
for inc in "${prefix}/include" "/usr/include"
|
|
do
|
|
if [ -d ${inc} ]
|
|
then
|
|
if [ -f "${inc}/${hdrf}" ]
|
|
then
|
|
eval "${var}=\"-I${inc}\""
|
|
break
|
|
fi
|
|
fi
|
|
done
|
|
done
|
|
|
|
linkvar="LINK"
|
|
compilevar="COMPILE"
|
|
compilecppvar="COMPILE_cpp"
|
|
vecflagsvar="VEC_FLAGS"
|
|
loopoptflagsvar="LOOP_OPTFLAGS"
|
|
cppflagsvar="CPPFLAGS"
|
|
genoptvar="GEN_OPT"
|
|
rabinoptvar="RABIN_OPT"
|
|
noslabcppflagsvar="NO_SLAB_CPPFLAGS"
|
|
debugstatscppflagsvar="DEBUG_STATS_CPPFLAGS"
|
|
prefixvar="PREFIX"
|
|
skeinblockvar="SKEIN_BLOCK"
|
|
keylenvar="KEYLEN"
|
|
|
|
libbscdirvar="LIBBSCDIR"
|
|
libbsclibvar="LIBBSCLIB"
|
|
libbsclflagsvar="LIBBSCLFLAGS"
|
|
libbscwrapobjvar="LIBBSCWRAPOBJ"
|
|
libbscgenoptvar="LIBBSCGEN_OPT"
|
|
libbsccppflagsvar="LIBBSCCPPFLAGS"
|
|
sha256asmobjsvar="SHA256ASM_OBJS"
|
|
sha256objsvar="SHA256_OBJS"
|
|
yasmvar="YASM"
|
|
|
|
openssllibdirvar="OPENSSL_LIBDIR"
|
|
opensslincdirvar="OPENSSL_INCDIR"
|
|
libbz2libdirvar="LIBBZ2_DIR"
|
|
libzlibdirvar="LIBZ_DIR"
|
|
libbz2incvar="LIBBZ2_INC"
|
|
libzincvar="LIBZ_INC"
|
|
|
|
noslabcppflagsval=
|
|
debugstatscppflagsval=
|
|
|
|
[ $allocator -eq 0 ] && noslabcppflagsval='\$\(NO_SLAB_CPPFLAGS\)'
|
|
[ $debug_stats -eq 1 ] && debugstatscppflagsval='\$\(DEBUG_STATS_CPPFLAGS\)'
|
|
|
|
cat Makefile.in | sed "
|
|
s#@${linkvar}@#\\\$\\(${typ}_${linkvar}\\)#g
|
|
s#@${compilevar}@#\\\$\\(${typ}_${compilevar}\\)#g
|
|
s#@${compilecppvar}@#\\\$\\(${typ}_${compilecppvar}\\)#g
|
|
s#@${vecflagsvar}@#\\\$\\(${typ}_${vecflagsvar}\\)#g
|
|
s#@${loopoptflagsvar}@#\\\$\\(${typ}_${loopoptflagsvar}\\)#g
|
|
s#@${cppflagsvar}@#\\\$\\(${typ}_${cppflagsvar}\\)#g
|
|
s#@${genoptvar}@#\\\$\\(${typ}_${genoptvar}\\)#g
|
|
s#@${rabinoptvar}@#\\\$\\(${typ}_${rabinoptvar}\\)#g
|
|
s#@${noslabcppflagsvar}@#${noslabcppflagsval}#g
|
|
s#@${debugstatscppflagsvar}@#${debugstatscppflagsval}#g
|
|
s#@${prefixvar}@#${prefix}#g
|
|
s#@${libbscdirvar}@#${libbsc_dir}#g
|
|
s#@${libbsclibvar}@#${libbsc_lib}#g
|
|
s#@${libbsclflagsvar}@#${libbsclflags}#g
|
|
s#@${libbscwrapobjvar}@#${libbscwrapobj}#g
|
|
s#@${libbscgenoptvar}@#${libbscgenopt}#g
|
|
s#@${libbsccppflagsvar}@#${libbsccppflags}#g
|
|
s#@${skeinblockvar}@#${skeinblock}#g
|
|
s#@${openssllibdirvar}@#${openssl_libdir}#g
|
|
s#@${opensslincdirvar}@#${openssl_incdir}#g
|
|
s#@${sha256asmobjsvar}@#${sha256asmobjs}#g
|
|
s#@${sha256objsvar}@#${sha256objs}#g
|
|
s#@${yasmvar}@#${yasm}#g
|
|
s#@${keylenvar}@#${keylen}#g
|
|
s#@${libbz2libdirvar}@#${libbz2_libdir}#g
|
|
s#@${libzlibdirvar}@#${libz_libdir}#g
|
|
s#@${libbz2incvar}@#${libbz2_inc}#g
|
|
s#@${libzincvar}@#${libz_inc}#g
|
|
" > Makefile
|
|
|