1 #!/bin/bash 2 3 # Run from the source dir. 4 SRCDIR=${PWD} 5 6 # TODO replace w/ wget 7 LZMA="xz-5.2.1" 8 LZMA_FILE="${SRCDIR}/../${LZMA}.tar.xz" 9 10 MAKEFLAGS="-j 10" 11 12 BUILDDIR=${SRCDIR}/build 13 LZMASRC=${BUILDDIR}/${LZMA} 14 15 NONWIN_CFLAGS="" 16 MINGW_CFLAGS="-DEXTERNAL_COMPRESSION=0 -DXD3_WIN32=1 -DSHELL_TESTS=0" 17 18 MYOS=`uname` 19 DATE=`date` 20 21 CLEAN="" 22 23 LINUXTGTS="" 24 LINUXTEST1="" 25 LINUXTEST2="" 26 27 WINTGTS="" 28 WINTEST1="" 29 WINTEST2="" 30 31 OSXTGTS="" 32 OSXTEST1="" 33 OSXTEST2="" 34 35 XTMP="/tmp" 36 if [ "${TMP}" != "" ]; then 37 XTMP="${TMP}" 38 fi 39 if [ "${TMPDIR}" != "" ]; then 40 XTMP="${TMPDIR}" 41 fi 42 43 find build -type f 2> /dev/null | xargs rm -f 44 45 function setup { 46 libtoolize 47 automake --add-missing 48 aclocal -I m4 49 automake 50 autoheader 51 autoconf 52 } 53 54 function try { 55 local w=$1 56 shift 57 local dir=$1 58 shift 59 echo -n " ${w} ... " 60 (cd "${dir}" && "$@" >${w}.stdout 2>${w}.stderr) 61 local s=$? 62 if [ ${s} -eq 0 ]; then 63 echo " success" 64 else 65 echo " failed!" 66 echo "Error $1 in ${dir}" >&2 67 fi 68 return ${s} 69 } 70 71 function buildlzma { 72 host=$1 73 march=$2 74 local target="${BUILDDIR}/lib-${host}${march}" 75 76 echo " ... liblzma" 77 78 mkdir -p ${target} 79 80 try configure-lzma ${target} ${LZMASRC}/configure \ 81 --host=${host} \ 82 --prefix=${target} \ 83 --disable-shared \ 84 "CFLAGS=${march}" \ 85 "CXXFLAGS=${march}" \ 86 "LDFLAGS=${march}" 87 if [ $? -ne 0 ]; then 88 return 89 fi 90 91 try build-lzma ${target} make ${MAKEFLAGS} 92 if [ $? -ne 0 ]; then 93 return 94 fi 95 try install-lzma ${target} make install 96 if [ $? -ne 0 ]; then 97 return 98 fi 99 } 100 101 function buildit { 102 local host=$1 103 local march=$2 104 local offsetbits=$3 105 local cargs=$4 106 local afl=$5 107 local BM="${host}${march}" 108 local USECC="${CC}" 109 local USECXX="${CXX}" 110 local LIBBM="${BM}" 111 112 if [ "${afl}" = "1" ]; then 113 USECC="afl-gcc" 114 USECXX="afl-g++" 115 BM="${BM}-afl" 116 fi 117 118 local D="build/${BM}/xoff${offsetbits}" 119 local BMD="${BM}-${offsetbits}" 120 local FULLD="${SRCDIR}/${D}" 121 local CFLAGS="${march} ${cargs} -I${SRCDIR}/build/lib-${LIBBM}/include" 122 local CXXFLAGS="${march} ${cargs} -I${SRCDIR}/build/lib-${LIBBM}/include" 123 local CPPFLAGS="-I${SRCDIR}/build/lib-${LIBBM}/include" 124 local LDFLAGS="${march} -L${SRCDIR}/build/lib-${LIBBM}/lib" 125 126 mkdir -p ${D} 127 128 echo " ... ${BMD}" 129 130 cat >> Makefile.test <<EOF 131 132 # ${BMD} 133 # ${CFLAGS} 134 .PHONY: build-${BMD} 135 build-${BMD}: 136 (cd ${D} && make all && make install) 137 138 .PHONY: clean-${BMD} 139 clean-${BMD}: 140 (cd ${D} && make clean) 141 142 .PHONY: regtest-${BMD} 143 regtest-${BMD}: 144 (cd ${D} && ./xdelta3regtest 1> \${TMP}/regtest.${BMD}.stdout 2> \${TMP}/regtest.${BMD}.stderr) 145 146 .PHONY: selftest-${BMD} 147 selftest-${BMD}: 148 (cd ${D} && ./bin/xdelta3 test 1> \${TMP}/selftest.${BMD}.stdout 2> \${TMP}/selftest.${BMD}.stderr) 149 150 151 EOF 152 153 case ${host} in 154 *linux*) 155 LINUXTGTS="${LINUXTGTS} build-${BMD}" 156 LINUXTEST1="${LINUXTEST1} selftest-${BMD}" 157 LINUXTEST2="${LINUXTEST2} regtest-${BMD}" 158 ;; 159 *mingw*) 160 WINTGTS="${WINTGTS} build-${BMD}" 161 WINTEST1="${WINTEST1} selftest-${BMD}" 162 WINTEST2="${WINTEST2} regtest-${BMD}" 163 ;; 164 *apple*) 165 OSXTGTS="${OSXTGTS} build-${BMD}" 166 OSXTEST1="${OSXTEST1} selftest-${BMD}" 167 OSXTEST2="${OSXTEST2} regtest-${BMD}" 168 ;; 169 esac 170 CLEAN="${CLEAN} clean-${BMD}" 171 172 try configure-xdelta ${FULLD} ${SRCDIR}/configure \ 173 --host=${host} \ 174 --prefix=${FULLD} \ 175 --enable-static \ 176 --disable-shared \ 177 --enable-debug-symbols \ 178 "CFLAGS=${CFLAGS}" \ 179 "CXXFLAGS=${CXXFLAGS}" \ 180 "CPPFLAGS=${CPPFLAGS}" \ 181 "LDFLAGS=${LDFLAGS}" \ 182 "CC=${USECC}" \ 183 "CXX=${USECXX}" 184 if [ $? -ne 0 ]; then 185 return 186 fi 187 188 # try build-xdelta ${FULLD} make ${MAKEFLAGS} all 189 # if [ $? -ne 0 ]; then 190 # return 191 # fi 192 193 # try install-xdelta ${FULLD} make install 194 } 195 196 function buildall { 197 echo "" 198 echo "Host $1$2 afl=$4" 199 echo "" 200 201 buildlzma "$1" "$2" 202 buildit "$1" "$2" 32 "-DXD3_USE_LARGEFILE64=0 $3" "$4" 203 buildit "$1" "$2" 64 "-DXD3_USE_LARGEFILE64=1 $3" "$4" 204 } 205 206 setup 207 208 try untar-lzma ${BUILDDIR} tar -xvf "${LZMA_FILE}" 209 if [ $? -ne 0 ]; then 210 exit $? 211 fi 212 213 cat > Makefile.test <<EOF 214 # Auto-generated ${DATE} -*- Mode: Makefile -*- 215 TMP = ${XTMP} 216 217 all: linux windows apple 218 219 EOF 220 221 # Native compiles 222 if [ "${MYOS}" == "Linux" ]; then 223 # Linux 224 buildall x86_64-pc-linux-gnu -m32 "${NONWIN_CFLAGS}" "0" 225 buildall x86_64-pc-linux-gnu -m32 "${NONWIN_CFLAGS}" "1" 226 buildall x86_64-pc-linux-gnu -m64 "${NONWIN_CFLAGS}" "0" 227 buildall x86_64-pc-linux-gnu -m64 "${NONWIN_CFLAGS}" "1" 228 fi 229 230 if [ "${MYOS}" == "Darwin" ]; then 231 # OS X 232 buildall x86_64-apple-darwin -m32 "${NONWIN_CFLAGS}" "0" 233 buildall x86_64-apple-darwin -m64 "${NONWIN_CFLAGS}" "0" 234 fi 235 236 # Cross compile 237 buildall i686-w64-mingw32 -mconsole "${MINGW_CFLAGS}" "0" 238 buildall x86_64-w64-mingw32 -mconsole "${MINGW_CFLAGS}" "0" 239 240 cat >> Makefile.test <<EOF 241 242 clean: ${CLEAN} 243 244 .PHONY: linux windows apple 245 .PHONY: linux-build windows-build apple-build 246 .PHONY: linux-selftest windows-selftest apple-selftest 247 .PHONY: linux-regtest windows-regtest apple-regtest 248 249 linux: linux-build linux-selftest linux-regtest 250 windows: windows-build windows-selftest windows-regtest 251 apple: apple-build apple-selftest apple-regtest 252 253 linux-build: ${LINUXTGTS} 254 linux-selftest: ${LINUXTEST1} 255 linux-regtest: ${LINUXTEST2} 256 257 windows-build: ${WINTGTS} 258 windows-selftest: ${WINTEST1} 259 windows-regtest: ${WINTEST2} 260 261 apple-build: ${OSXTGTS} 262 apple-selftest: ${OSXTEST1} 263 apple-regtest: ${OSXTEST2} 264 265 EOF