123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289 |
- #!/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
|