288 lines
6 KiB
Bash
288 lines
6 KiB
Bash
#!/bin/bash
|
|
|
|
# Run from the source dir.
|
|
SRCDIR=${PWD}
|
|
|
|
# TODO replace w/ wget
|
|
LZMA="xz-5.2.1"
|
|
LZMA_FILE="${SRCDIR}/../${LZMA}.tar.gz"
|
|
|
|
MAKEFLAGS="-j 10"
|
|
|
|
BUILDDIR=${SRCDIR}/build
|
|
LZMASRC=${BUILDDIR}/${LZMA}
|
|
|
|
NONWIN_CFLAGS=""
|
|
MINGW_CFLAGS="-DEXTERNAL_COMPRESSION=0 -DXD3_WIN32=1 -DSHELL_TESTS=0"
|
|
|
|
MYOS=`uname`
|
|
DATE=`date`
|
|
|
|
CLEAN=""
|
|
|
|
LINUXTGTS=""
|
|
LINUXTEST1=""
|
|
LINUXTEST2=""
|
|
|
|
WINTGTS=""
|
|
WINTEST1=""
|
|
WINTEST2=""
|
|
|
|
OSXTGTS=""
|
|
OSXTEST1=""
|
|
OSXTEST2=""
|
|
|
|
XTMP="/tmp"
|
|
if [ "${TMP}" != "" ]; then
|
|
XTMP="${TMP}"
|
|
fi
|
|
if [ "${TMPDIR}" != "" ]; then
|
|
XTMP="${TMPDIR}"
|
|
fi
|
|
|
|
BUILDFILES=`ls -A ${BUILDDIR} 2> /dev/null`
|
|
if [ -d "${BUILDDIR}" ]; then
|
|
if [ -n "${BUILDFILES}" ]; then
|
|
echo "Directory ${BUILDDIR} should be empty"
|
|
exit 1
|
|
fi
|
|
else
|
|
mkdir "${BUILDDIR}"
|
|
fi
|
|
|
|
function setup {
|
|
libtoolize || glibtoolize
|
|
automake --add-missing
|
|
aclocal -I m4
|
|
autoheader
|
|
automake
|
|
autoconf
|
|
}
|
|
|
|
function try {
|
|
local w=$1
|
|
shift
|
|
local dir=$1
|
|
shift
|
|
echo -n " ${w} ... "
|
|
(cd "${dir}" && "$@" >${w}.stdout 2>${w}.stderr)
|
|
local s=$?
|
|
if [ ${s} -eq 0 ]; then
|
|
echo " success"
|
|
else
|
|
echo " failed!"
|
|
echo "Error $1 in ${dir}" >&2
|
|
fi
|
|
return ${s}
|
|
}
|
|
|
|
function buildlzma {
|
|
host=$1
|
|
march=$2
|
|
local target="${BUILDDIR}/lib-${host}${march}"
|
|
|
|
echo " ... liblzma"
|
|
|
|
mkdir -p ${target}
|
|
|
|
try configure-lzma ${target} ${LZMASRC}/configure \
|
|
--host=${host} \
|
|
--prefix=${target} \
|
|
--disable-shared \
|
|
"CC=${CC}" \
|
|
"CXX=${CXX}" \
|
|
"CFLAGS=${march}" \
|
|
"CXXFLAGS=${march}" \
|
|
"LDFLAGS=${march}"
|
|
if [ $? -ne 0 ]; then
|
|
return
|
|
fi
|
|
|
|
try build-lzma ${target} make ${MAKEFLAGS}
|
|
if [ $? -ne 0 ]; then
|
|
return
|
|
fi
|
|
try install-lzma ${target} make install
|
|
if [ $? -ne 0 ]; then
|
|
return
|
|
fi
|
|
}
|
|
|
|
function buildit {
|
|
local host=$1
|
|
local march=$2
|
|
local usizebits=$3
|
|
local offsetbits=$4
|
|
local cargs=$5
|
|
local afl=$6
|
|
local BM="${host}${march}"
|
|
local USECC="${CC}"
|
|
local USECXX="${CXX}"
|
|
local LIBBM="${BM}"
|
|
|
|
if [ "${afl}" = "1" ]; then
|
|
USECC="afl-gcc"
|
|
USECXX="afl-g++"
|
|
BM="${BM}-afl"
|
|
fi
|
|
|
|
local D="build/${BM}/usize${usizebits}/xoff${offsetbits}"
|
|
local BMD="${BM}-${usizebits}-${offsetbits}"
|
|
|
|
local FULLD="${SRCDIR}/${D}"
|
|
local CFLAGS="${march} ${cargs} -I${SRCDIR}/build/lib-${LIBBM}/include"
|
|
local CXXFLAGS="${march} ${cargs} -I${SRCDIR}/build/lib-${LIBBM}/include"
|
|
local CPPFLAGS="-I${SRCDIR}/build/lib-${LIBBM}/include"
|
|
local LDFLAGS="${march} -L${SRCDIR}/build/lib-${LIBBM}/lib"
|
|
|
|
local EXEC_PREAMBLE=""
|
|
local EXEC_SUFFIX=""
|
|
|
|
case ${host} in
|
|
*mingw*)
|
|
EXEC_PREAMBLE="wine"
|
|
EXEC_SUFFIX=".exe"
|
|
;;
|
|
esac
|
|
|
|
mkdir -p ${D}
|
|
|
|
echo " ... ${BMD}"
|
|
|
|
cat >> Makefile.test <<EOF
|
|
|
|
# ${BMD}
|
|
# ${CFLAGS}
|
|
.PHONY: build-${BMD}
|
|
build-${BMD}:
|
|
(cd ${D} && make all && make install)
|
|
|
|
.PHONY: clean-${BMD}
|
|
clean-${BMD}:
|
|
(cd ${D} && make clean)
|
|
|
|
.PHONY: regtest-${BMD}
|
|
regtest-${BMD}:
|
|
(cd ${D} && ${EXEC_PREAMBLE} ./bin/xdelta3regtest${EXEC_SUFFIX} 1> \${TMP}/regtest.${BMD}.stdout 2> \${TMP}/regtest.${BMD}.stderr)
|
|
|
|
.PHONY: selftest-${BMD}
|
|
selftest-${BMD}:
|
|
(cd ${D} && ${EXEC_PREAMBLE} ./bin/xdelta3${EXEC_SUFFIX} test 1> \${TMP}/selftest.${BMD}.stdout 2> \${TMP}/selftest.${BMD}.stderr)
|
|
|
|
|
|
EOF
|
|
|
|
case ${host} in
|
|
*linux*)
|
|
LINUXTGTS="${LINUXTGTS} build-${BMD}"
|
|
LINUXTEST1="${LINUXTEST1} selftest-${BMD}"
|
|
LINUXTEST2="${LINUXTEST2} regtest-${BMD}"
|
|
;;
|
|
*mingw*)
|
|
WINTGTS="${WINTGTS} build-${BMD}"
|
|
WINTEST1="${WINTEST1} selftest-${BMD}"
|
|
WINTEST2="${WINTEST2} regtest-${BMD}"
|
|
;;
|
|
*apple*)
|
|
OSXTGTS="${OSXTGTS} build-${BMD}"
|
|
OSXTEST1="${OSXTEST1} selftest-${BMD}"
|
|
OSXTEST2="${OSXTEST2} regtest-${BMD}"
|
|
;;
|
|
esac
|
|
CLEAN="${CLEAN} clean-${BMD}"
|
|
|
|
try configure-xdelta ${FULLD} ${SRCDIR}/configure \
|
|
--host=${host} \
|
|
--prefix=${FULLD} \
|
|
--enable-static \
|
|
--disable-shared \
|
|
--enable-debug-symbols \
|
|
"CFLAGS=${CFLAGS}" \
|
|
"CXXFLAGS=${CXXFLAGS}" \
|
|
"CPPFLAGS=${CPPFLAGS}" \
|
|
"LDFLAGS=${LDFLAGS}" \
|
|
"CC=${USECC}" \
|
|
"CXX=${USECXX}"
|
|
if [ $? -ne 0 ]; then
|
|
return
|
|
fi
|
|
|
|
# try build-xdelta ${FULLD} make ${MAKEFLAGS} all
|
|
# if [ $? -ne 0 ]; then
|
|
# return
|
|
# fi
|
|
|
|
# try install-xdelta ${FULLD} make install
|
|
}
|
|
|
|
function buildall {
|
|
echo ""
|
|
echo "Host $1$2 afl=$4"
|
|
echo ""
|
|
|
|
buildlzma "$1" "$2"
|
|
buildit "$1" "$2" 32 32 "-DXD3_USE_LARGESIZET=0 -DXD3_USE_LARGEFILE64=0 $3" "$4"
|
|
buildit "$1" "$2" 32 64 "-DXD3_USE_LARGESIZET=0 -DXD3_USE_LARGEFILE64=1 $3" "$4"
|
|
buildit "$1" "$2" 64 64 "-DXD3_USE_LARGESIZET=1 -DXD3_USE_LARGEFILE64=1 $3" "$4"
|
|
}
|
|
|
|
setup
|
|
|
|
try untar-lzma ${BUILDDIR} tar -xvf "${LZMA_FILE}"
|
|
if [ $? -ne 0 ]; then
|
|
exit $?
|
|
fi
|
|
|
|
cat > Makefile.test <<EOF
|
|
# Auto-generated ${DATE} -*- Mode: Makefile -*-
|
|
TMP = ${XTMP}
|
|
|
|
all: linux windows apple
|
|
|
|
EOF
|
|
|
|
# Native compiles
|
|
if [ "${MYOS}" == "Linux" ]; then
|
|
# Linux
|
|
buildall x86_64-pc-linux-gnu -m32 "${NONWIN_CFLAGS}" "0"
|
|
buildall x86_64-pc-linux-gnu -m32 "${NONWIN_CFLAGS}" "1"
|
|
buildall x86_64-pc-linux-gnu -m64 "${NONWIN_CFLAGS}" "0"
|
|
buildall x86_64-pc-linux-gnu -m64 "${NONWIN_CFLAGS}" "1"
|
|
fi
|
|
|
|
if [ "${MYOS}" == "Darwin" ]; then
|
|
# OS X
|
|
buildall x86_64-apple-darwin -m32 "${NONWIN_CFLAGS}" "0"
|
|
buildall x86_64-apple-darwin -m64 "${NONWIN_CFLAGS}" "0"
|
|
fi
|
|
|
|
# Cross compile
|
|
buildall i686-w64-mingw32 -mconsole "${MINGW_CFLAGS}" "0"
|
|
buildall x86_64-w64-mingw32 -mconsole "${MINGW_CFLAGS}" "0"
|
|
|
|
cat >> Makefile.test <<EOF
|
|
|
|
clean: ${CLEAN}
|
|
|
|
.PHONY: linux windows apple
|
|
.PHONY: linux-build windows-build apple-build
|
|
.PHONY: linux-selftest windows-selftest apple-selftest
|
|
.PHONY: linux-regtest windows-regtest apple-regtest
|
|
|
|
linux: linux-build linux-selftest linux-regtest
|
|
windows: windows-build windows-selftest windows-regtest
|
|
apple: apple-build apple-selftest apple-regtest
|
|
|
|
linux-build: ${LINUXTGTS}
|
|
linux-selftest: ${LINUXTEST1}
|
|
linux-regtest: ${LINUXTEST2}
|
|
|
|
windows-build: ${WINTGTS}
|
|
windows-selftest: ${WINTEST1}
|
|
windows-regtest: ${WINTEST2}
|
|
|
|
apple-build: ${OSXTGTS}
|
|
apple-selftest: ${OSXTEST1}
|
|
apple-regtest: ${OSXTEST2}
|
|
|
|
EOF
|