diff options
Diffstat (limited to 'deps/makedeps.sh')
-rwxr-xr-x | deps/makedeps.sh | 495 |
1 files changed, 495 insertions, 0 deletions
diff --git a/deps/makedeps.sh b/deps/makedeps.sh new file mode 100755 index 0000000..8d16ced --- /dev/null +++ b/deps/makedeps.sh @@ -0,0 +1,495 @@ +#!/bin/bash +# +# Module: makedeps.sh +# Author: Toni <matzeton@googlemail.com> +# Purpose: Build full host- and mingw64 C toolchain without multilib support .. +# (Using built-in specs.) +# Changed: 04.01.2018 +# +# Automated Build Steps: +# 1. build host binutils +# 2. build host gcc +# 3. build host python +# 4. build host tor (try) +# 5. build mingw64 binutils +# 6. build mingw64 gcc core (with mingw64 headers) +# 7. build mingw64 winpthreads +# 8. build mingw64 gcc +# 9. build mingw tor/libtor and dependencies (try) +# +# mingw64 target : i686-w64-mingw32 +# mingw64 Thread model: WINPTHREAD +# + +# basic commands +command -v "echo" >/dev/null 2>&1 || exit 1 +command -v "printf" >/dev/null 2>&1 || exit 1 +command -v "for" >/dev/null 2>&1 || exit 1 +command -v "do" >/dev/null 2>&1 || exit 1 +command -v "in" >/dev/null 2>&1 || exit 1 +command -v "done" >/dev/null 2>&1 || exit 1 +# required commands +REQ_CMDS=( "set" "unset" "exec" "export" "test" "if" "else" "fi" "tput" "pwd" "dirname" "touch" "date" "wget" "tar" "mkdir" "patch" "mv" "cd" "make" "cp" "ln" "install" "realpath" "tail" \ + "gcc" "g++" "cpp" "ar" "as" "ld" "ranlib" "strip" ) +for cmd in "${REQ_CMDS[@]}" +do + command -v "${cmd}" >/dev/null 2>&1 || { echo >&2 "$0: I need command \"${cmd}\" but it's not installed. Aborting."; exit 1; } +done +# bash version check +if [ -z "${BASH_VERSINFO}" ]; then + echo >&2 "$0: Bash version variable \${BASH_VERSINFO}" + exit 1 +fi +if [ ${BASH_VERSINFO[0]} -lt 4 -a ${BASH_VERSINFO[1]} -lt 3 ]; then + echo >&2 "$0: Bash version 4.3.* required!" + exit 1 +fi +# sha512 available? +SHA512_BIN=$(command -v "sha512sum" 2>/dev/null) + + +set -e +set -u + +DBG_ERRLINES=${DBG_ERRLINES:-10} +RED=$(tput setaf 1) +GREEN=$(tput setaf 2) +CYAN=$(tput setaf 6) +BOLD=$(tput bold) +NC=$(tput sgr0) +cd "$(dirname $0)" + +export PYTHON=Python-2.7.18 +export MINGW=mingw-w64-v6.0.0 +export BIN=binutils-2.31.1 +export GCC=gcc-8.2.0 +export GMP=gmp-6.1.2 +export MPF=mpfr-4.0.1 +export MPC=mpc-1.1.0 +export MUSL=musl-1.1.20 +export NASM=nasm-2.12.02 +#export TOR=tor-0.3.0.9 +export PKGCONFIG=pkg-config-0.29.2 +export OPENSSL=openssl-1.1.1f +export ZLIB=zlib-1.2.11 +export LIBEVENT=libevent-2.1.8-stable + +export BUILDDIRS="build_python build_binutils build_gcc build_musl build_tor build_mingw_binutils build_mingw_hdr build_mingw_crt build_mingw_gcc build_nasm build_mingw_winpthread build_pkgconfig build_mingw_openssl build_mingw_zlib build_mingw_libevent build_mingw_tor" + +DBG_LOGFILE=${DBG_LOGFILE:-$(realpath "./build.log")} +touch "${DBG_LOGFILE}" +exec 3> ${DBG_LOGFILE} + +function dbg { + timestamp=$(date '+%d-%m-%Y_%H-%M-%S') + echo -e "[${timestamp}] $*" >&3 + printf "%s\n" "[${timestamp}]${BOLD}${GREEN}[*] $*${NC}" +} + +function dbg_run { + set +e + timestamp=$(date '+%d-%m-%Y_%H-%M-%S') + echo -e "[${timestamp}] COMMAND: $*" >&3 + printf "%s\n" "[${timestamp}]${BOLD}${CYAN}[*] COMMAND: $*${NC}" + + if [ -z "${DBG_NOLOG:-}" ]; then + $* 2>&3 1>&3 + ret=$? + else + $* >/dev/null 2>/dev/null + ret=$? + fi + + if [ -z "${DBG_NOERR:-}" -a $ret -ne 0 ]; then + timestamp=$(date '+%d-%m-%Y_%H-%M-%S') + printf "%s\n" "[${timestamp}]${BOLD}${RED}ERROR: Last command returned ${ret}${NC}" + printf "%s\n" "[${timestamp}]${BOLD}${RED}ERROR: Printing the last ${DBG_ERRLINES} lines ..${NC}" + tail -n ${DBG_ERRLINES} ${DBG_LOGFILE} + printf "%s\n" "[${timestamp}]${BOLD}${RED}EOF ERROR${NC}" + echo -e "[${timestamp}] COMMAND $* failed with ${ret}" >&3 + fi + + set -e + return $ret +} + +# args: basename, url +function dl_and_extract { + if [ ! -f "${1}${3}" ]; then + dbg "download ${1}" + wget "${2}" -O".tmp.${1}${3}" + mv ".tmp.${1}${3}" "${1}${3}" + fi + if [ "x${3}" != x ]; then + if [ ! -d "${1}" ]; then + dbg "extract ${1}" + if [ "${3}" = '.tar.gz' ]; then + tar -xzf "${1}${3}" + elif [ "${3}" = '.tar.bz2' ]; then + tar -xjf "${1}${3}" + fi + fi + if [ ! -d "${1}" ]; then + dbg "directory ${1} missing, extraction failed?" + return 1 + fi + fi + return 0 +} + +function dl_and_extract_gz { + dl_and_extract "${1}" "${2}" '.tar.gz' +} + +function dl_and_extract_bz { + dl_and_extract "${1}" "${2}" '.tar.bz2' +} + + +# entry +dbg "DEPS_ROOT = $(realpath .)" +dbg "DBG_LOGFILE = ${DBG_LOGFILE}" +dbg "DBG_NOLOG = ${DBG_NOLOG:-0}" +dbg "DBG_ERRLINES = ${DBG_ERRLINES}" +if [ $# -gt 0 ]; then + NMB_BUILDJOBS=$1 +else + NMB_BUILDJOBS=4 +fi +dbg "NMB_BUILDJOBS = ${NMB_BUILDJOBS}" +dbg "=======" + +dbg "exec $(pwd)/config.sh" +. config.sh >/dev/null +dbg "Host...: $(gcc -dumpmachine)" +dbg "Target.: ${targ}" +dbg "Sysroot: ${MY_SYS_ROOT}" +dbg "=======" + +export PY_BUILD_STAMP=".stamp-python" +if [ ! -d "${MY_SYS_ROOT}" ]; then + mkdir -p "${MY_SYS_ROOT}" + dbg "remove ${BUILDDIRS}" + rm -rf ${BUILDDIRS} ${PY_BUILD_STAMP} +fi + +dl_and_extract_gz "${PYTHON}" "https://www.python.org/ftp/python/2.7.18/${PYTHON}.tgz" + +#libtor is disabled until patch the was ported +#dl_and_extract "${TOR}" "https://www.torproject.org/dist/${TOR}.tar.gz" +#if [ ! -d "${TOR}-libtor" ]; then +# dbg_run cp -rf "${TOR}" "${TOR}-libtor" +# dbg "patching ${TOR}-libtor" +# dbg_run patch -d "${TOR}-libtor" -p1 < "${TOR}-libtor.patch" +#fi + +dl_and_extract_bz "${MINGW}" "https://vorboss.dl.sourceforge.net/project/mingw-w64/mingw-w64/mingw-w64-release/${MINGW}.tar.bz2" +dl_and_extract_gz "${BIN}" "https://ftp.gnu.org/gnu/binutils/${BIN}.tar.gz" +dl_and_extract_gz "${GCC}" "https://ftp.gnu.org/gnu/gcc/${GCC}/${GCC}.tar.gz" +dl_and_extract_gz "${MUSL}" "https://www.musl-libc.org/releases/${MUSL}.tar.gz" +dl_and_extract_gz "${NASM}" "http://www.nasm.us/pub/nasm/releasebuilds/2.12.02/${NASM}.tar.gz" +dl_and_extract_gz "${PKGCONFIG}" "https://pkgconfig.freedesktop.org/releases/${PKGCONFIG}.tar.gz" +dl_and_extract_gz "${OPENSSL}" "https://www.openssl.org/source/${OPENSSL}.tar.gz" +dl_and_extract_gz "${ZLIB}" "https://zlib.net/${ZLIB}.tar.gz" +dl_and_extract_gz "${LIBEVENT}" "https://github.com/libevent/libevent/releases/download/release-2.1.8-stable/${LIBEVENT}.tar.gz" + +test -f "${GMP}.tar.bz2" || { dbg_run wget "https://gmplib.org/download/gmp/${GMP}.tar.bz2" -O".tmp.${GMP}.tar.bz2" && dbg_run mv ".tmp.${GMP}.tar.bz2" "${GMP}.tar.bz2" || false; } +test -f "${MPF}.tar.bz2" || { dbg_run wget "http://www.mpfr.org/mpfr-4.0.1/${MPF}.tar.bz2" -O".tmp.${MPF}.tar.bz2" && dbg_run mv ".tmp.${MPF}.tar.bz2" "${MPF}.tar.bz2" || false; } +test -f "${MPC}.tar.gz" || { dbg_run wget "ftp://ftp.gnu.org/gnu/mpc/${MPC}.tar.gz" -O".tmp.${MPC}.tar.gz" && dbg_run mv ".tmp.${MPC}.tar.gz" "${MPC}.tar.gz" || false; } + +if [ ! -d "${GCC}/gmp" ]; then + dbg "extract gmp" + dbg_run tar -xjf "${GMP}.tar.bz2" + dbg_run mv "${GMP}" "${GCC}/gmp" +fi +if [ ! -d "${GCC}/mpfr" ]; then + dbg "extract mpfr" + dbg_run tar -xjf "${MPF}.tar.bz2" + dbg_run mv "${MPF}" "${GCC}/mpfr" +fi +if [ ! -d "${GCC}/mpc" ]; then + dbg "extract mpc" + dbg_run tar -xzf "${MPC}.tar.gz" + dbg_run mv -fv "${MPC}" "${GCC}/mpc" +fi + +if [ x"${SHA512_BIN}" != x ]; then + dbg_run ${SHA512_BIN} -c ./sha512.chksms +fi + +mkdir -p ${BUILDDIRS} +export CFLAGS="-g0 -O2 -pipe -fPIC -fomit-frame-pointer -Wl,-S -Wno-unused-but-set-parameter -Wno-unused -Wno-unused-result -Wno-attributes -Wno-switch -Wno-shift-negative-value" +export CXXFLAGS="-g0 -O2 -fPIC -fomit-frame-pointer -Wl,-S -Wno-literal-suffix -Wno-switch" + +# 0: Make host binutils +dbg "MAKE HOST BINUTILS" +cd build_binutils +test -f Makefile || dbg_run ../${BIN}/configure --disable-multilib --prefix="${MY_SYS_ROOT}" \ + --enable-lto --enable-ld=yes --enable-gold --enable-plugins --enable-64-bit-bfd \ + --with-sysroot="${MY_SYS_ROOT}" \ + --disable-libstdcxx --disable-nls --disable-libquadmath --disable-libquadmath-support +dbg_run make configure-host +dbg_run make -j${NMB_BUILDJOBS} +dbg_run make install-strip +dbg_run cp "../${BIN}/include/libiberty.h" "${MY_SYS_ROOT}/include/libiberty.h" +cd .. + +# 0: Make host gcc +dbg "MAKE HOST GCC" +cd build_gcc +test -f Makefile || dbg_run ../${GCC}/configure --disable-multilib --prefix="${MY_SYS_ROOT}" \ + --enable-static --disable-shared --with-system-zlib \ + --enable-languages=c,c++,go --enable-libstdcxx --enable-fully-dynamic-string \ + --disable-libmpx --disable-nls --disable-threads --enable-lto --enable-ld=yes +dbg_run make all-gcc -j${NMB_BUILDJOBS} +dbg_run make all-target-libgcc -j${NMB_BUILDJOBS} +dbg_run make all-target-libstdc++-v3 -j${NMB_BUILDJOBS} +dbg_run make install-strip-gcc +dbg_run make install-strip-target-libgcc +dbg_run make install-strip-target-libstdc++-v3 +dbg_run make all-gotools -j${NMB_BUILDJOBS} LDFLAGS=-pthread +dbg_run make install-strip-gotools +dbg_run make all-target-libgo -j${NMB_BUILDJOBS} LDFLAGS=-pthread +dbg_run make install-strip-target-libgo +cd .. + +# force use of recent host gcc build +export CC="${MY_SYS_ROOT}/bin/gcc" +export CXX="${MY_SYS_ROOT}/bin/g++" +export CPP="${MY_SYS_ROOT}/bin/cpp" +export AR="${MY_SYS_ROOT}/bin/ar" +export AS="${MY_SYS_ROOT}/bin/as" +export LD="${MY_SYS_ROOT}/bin/ld" +export RANLIB="${MY_SYS_ROOT}/bin/ranlib" +export STRIP="${MY_SYS_ROOT}/bin/strip" + +DBG_NOERR=1 dbg_run ln -sr "${MY_SYS_ROOT}/bin/ld" "${MY_SYS_ROOT}/lib/gcc/$(${CC} -dumpmachine)/$(${CC} -dumpversion)/real-ld" || true +DBG_NOERR=1 dbg_run ln -sr "${MY_SYS_ROOT}/bin/nm" "${MY_SYS_ROOT}/lib/gcc/$(${CC} -dumpmachine)/$(${CC} -dumpversion)/nm" || true +DBG_NOERR=1 dbg_run ln -sr "${MY_SYS_ROOT}/bin/strip" "${MY_SYS_ROOT}/lib/gcc/$(${CC} -dumpmachine)/$(${CC} -dumpversion)/strip" || true +DBG_NOERR=1 dbg_run ln -sr "${MY_SYS_ROOT}/bin/strip" "${MY_SYS_ROOT}/lib/gcc/$(${CC} -dumpmachine)/$(${CC} -dumpversion)/gstrip" || true + +# 0.1: Make Python +if [ ! -r ${PY_BUILD_STAMP} ]; then + dbg "MAKE PYTHON" + cd build_python + test -f Makefile || dbg_run ../${PYTHON}/configure --prefix=${MY_SYS_ROOT} --enable-optimizations --disable-shared + dbg_run make -j${NMB_BUILDJOBS} + dbg_run make install + dbg_run ln -sr ${MY_SYS_ROOT}/bin/python2.7 ${MY_SYS_ROOT}/bin/${PYTHON} || true + dbg_run ${STRIP} -s "${MY_SYS_ROOT}/bin/python2.7" + cd .. + dbg_run touch ${PY_BUILD_STAMP} # build python only once (takes lots of time with --enable-optimizations + tests) +else + dbg "Skipping Python build (already done)" +fi + +#libtor is disabled until patch the was ported +# 0.5: Make host TOR (required for CNC server) +#dbg "MAKE HOST TOR (try)" +#cd build_tor +#unset ret +#test -f Makefile || dbg_run ../${TOR}/configure --prefix=${MY_SYS_ROOT} --disable-silent-rules --enable-gcc-warnings-advisory --disable-systemd --disable-libfuzzer --disable-oss-fuzz --disable-system-torrc && ret=0 || ret=$? +#if [ $ret -eq 0 ]; then +# dbg_run make -j${NMB_BUILDJOBS} || dbg "HOST TOR build failed, ignore" +# dbg_run make install +#else +# dbg "HOST TOR configure failed, ignore" +#fi +#cd .. +# generate torrc +#if [ -r "${MY_SYS_ROOT}/etc/tor/torrc.sample" ]; then +# dbg_run ./torconf.sh +#fi + +# 1: Make binutils +dbg "MAKE BINUTILS for ${targ}" +cd build_mingw_binutils +test -f Makefile || dbg_run ../${BIN}/configure --target=${targ} --disable-multilib --prefix="${MY_SYS_ROOT}/${targ}" \ + --enable-lto --enable-ld=yes --with-sysroot="${MY_SYS_ROOT}/${targ}" \ + --disable-libstdcxx --disable-nls --disable-libquadmath --disable-libquadmath-support +dbg_run make -j${NMB_BUILDJOBS} +dbg_run make install-strip +cd .. + +# 2: Make nasm +dbg "MAKE NASM for ${targ}" +cd build_nasm +dbg_run mkdir -p common macros # nasm build fix +test -f Makefile || dbg_run ../${NASM}/configure --target=${targ} --prefix=${MY_SYS_ROOT}/${targ} +dbg_run make -j${NMB_BUILDJOBS} +dbg_run make install +cd .. + +# 3: Make symlinks / directories required for Mingw64 builds +dbg "MAKE SYMLINKS/DIRS" +DBG_NOERR=1 dbg_run ln -sr "${MY_SYS_ROOT}/${targ}" "${MY_SYS_ROOT}/mingw" || true +DBG_NOERR=1 dbg_run ln -sr "${MY_SYS_ROOT}/${targ}" "${MY_SYS_ROOT}/${targ}/mingw" || true +mkdir -p ${MY_SYS_ROOT}/${targ}/lib + +# 4: Make mingw headers +dbg "MAKE MINGW HEADERS" +cd build_mingw_hdr +test -f Makefile || dbg_run ../${MINGW}/mingw-w64-headers/configure --host=${targ} --prefix="${MY_SYS_ROOT}/${targ}" +dbg_run make -j${NMB_BUILDJOBS} +dbg_run make install +cd .. + +# 5: Make gcc core +dbg "MAKE GCC CORE" +cd build_mingw_gcc +test -f Makefile || dbg_run ../${GCC}/configure --target=${targ} --disable-multilib --with-sysroot="${MY_SYS_ROOT}/${targ}" --prefix="${MY_SYS_ROOT}/${targ}" \ + --enable-static --disable-shared --with-system-zlib --without-included-gettext \ + --enable-sjlj-exceptions --enable-threads=posix --disable-libstdcxx --enable-fully-dynamic-string \ + --disable-libmpx --enable-languages=c --enable-lto +dbg_run make all-gcc -j${NMB_BUILDJOBS} +dbg_run make install-strip-gcc +cd .. + +# 6: Make pkg-config (required for libtor) +dbg "MAKE PKG-CONFIG" +cd build_pkgconfig +test -f Makefile || dbg_run ../${PKGCONFIG}/configure --prefix="${MY_SYS_ROOT}/${targ}" --with-internal-glib --with-pc-path="${MY_SYS_ROOT}/${targ}/lib/pkgconfig/" +dbg_run make -j${NMB_BUILDJOBS} +dbg_run make install +cd .. +DBG_NOERR=1 dbg_run ln -sr "${MY_SYS_ROOT}/${targ}/bin/pkg-config" "${MY_SYS_ROOT}/${targ}/bin/${targ}-pkg-config" || true + +# force use of recent host gcc build +export CC="${MY_SYS_ROOT}/${targ}/bin/${targ}-gcc" +export CXX=false +export CPP="${MY_SYS_ROOT}/${targ}/bin/${targ}-cpp" +export AR="${MY_SYS_ROOT}/${targ}/bin/${targ}-ar" +export AS="${MY_SYS_ROOT}/${targ}/bin/${targ}-as" +export LD="${MY_SYS_ROOT}/${targ}/bin/${targ}-ld" +export RANLIB="${MY_SYS_ROOT}/${targ}/bin/${targ}-ranlib" +export STRIP="${MY_SYS_ROOT}/${targ}/bin/${targ}-strip" +export DLLTOOL="${MY_SYS_ROOT}/${targ}/bin/${targ}-dlltool" +export WINDRES="${MY_SYS_ROOT}/${targ}/bin/${targ}-windres" + +# 7: Make mingw crt +dbg "MAKE MINGW CRT" +cd build_mingw_crt +test -f Makefile || dbg_run ../${MINGW}/mingw-w64-crt/configure --host=${targ} \ + --with-sysroot="${MY_SYS_ROOT}/${targ}" --prefix="${MY_SYS_ROOT}/${targ}" +dbg_run make -j${NMB_BUILDJOBS} +dbg_run make install-strip +cd .. + +# 8: Make win pthreads +dbg "MAKE WINPTHREADS" +cd build_mingw_winpthread +test -f Makefile || dbg_run ../${MINGW}/mingw-w64-libraries/winpthreads/configure --host=${targ} \ + --with-sysroot="${MY_SYS_ROOT}/${targ}" --prefix="${MY_SYS_ROOT}/${targ}" +dbg_run make -j${NMB_BUILDJOBS} || dbg "expected failure" +dbg_run cp fakelib/libgcc.a fakelib/libpthread.a +dbg_run make -j${NMB_BUILDJOBS} && dbg_run make install-strip + +dbg_run cp ${MY_SYS_ROOT}/${targ}/bin/libwinpthread-1.dll \ + ${MY_SYS_ROOT}/${targ}/lib/ + +cd .. + +# 9: Make gcc second pass +dbg "MAKE GCC PASS #2" +cd build_mingw_gcc +dbg_run make -j${NMB_BUILDJOBS} +dbg_run make install-strip-gcc +dbg_run make all-target-libgcc -j${NMB_BUILDJOBS} +dbg_run make install-target-libgcc +cd .. + +export CFLAGS="-g0 -Os -s -pipe -flto -fuse-linker-plugin -ffat-lto-objects -fomit-frame-pointer -fdata-sections -ffunction-sections -Wno-unused-but-set-parameter -Wno-unused-variable -Wno-unused-result -Wno-attributes -Wno-switch -Wno-float-conversion -Wno-maybe-uninitialized -Wl,-gc-sections" +export LDFLAGS="-flto -Os -Wno-maybe-uninitialized -Wl,-gc-sections" + +DBG_NOERR=1 dbg_run ln -sr "${MY_SYS_ROOT}/${targ}/bin/${targ}-ld" "${MY_SYS_ROOT}/${targ}/lib/gcc/$(${CC} -dumpmachine)/$(${CC} -dumpversion)/real-ld" || true +DBG_NOERR=1 dbg_run ln -sr "${MY_SYS_ROOT}/${targ}/bin/${targ}-nm" "${MY_SYS_ROOT}/${targ}/lib/gcc/$(${CC} -dumpmachine)/$(${CC} -dumpversion)/nm" || true +DBG_NOERR=1 dbg_run ln -sr "${MY_SYS_ROOT}/${targ}/bin/${targ}-strip" "${MY_SYS_ROOT}/${targ}/lib/gcc/$(${CC} -dumpmachine)/$(${CC} -dumpversion)/strip" || true +DBG_NOERR=1 dbg_run ln -sr "${MY_SYS_ROOT}/${targ}/bin/${targ}-strip" "${MY_SYS_ROOT}/${targ}/lib/gcc/$(${CC} -dumpmachine)/$(${CC} -dumpversion)/gstrip" || true + +# 10: Make mingw openssl +dbg "MAKE MINGW OPENSSL (try, required for libtor)" +cd build_mingw_openssl +DISBALED_CIPHERS="no-idea no-mdc2 no-camellia no-bf no-cast no-des no-rc2 no-rc4 no-rc5 no-mdc2 no-afalgeng no-asan no-blake2 no-chacha no-cmac no-seed no-md2 no-md4 no-cms no-capieng no-comp no-ct no-dgram no-ec_nistp_64_gcc_128 no-err no-async no-dynamic-engine no-dso no-dtls no-filenames no-zlib-dynamic no-whirlpool no-ui no-ubsan no-srp no-srtp no-ts no-asm no-autoalginit no-ssl3-method no-weak-ssl-ciphers no-dsa no-async" +unset ret +test -f Makefile || dbg_run ../${OPENSSL}/Configure mingw no-egd no-zlib no-hw ${DISBALED_CIPHERS} --prefix="${MY_SYS_ROOT}/${targ}" ${CFLAGS} && ret=0 || ret=$? +if [ $ret -eq 0 ]; then + dbg_run make -j${NMB_BUILDJOBS} || dbg "MINGW OPENSSL build failed, ignore" + dbg_run make install_dev || dbg "MINGW OPENSSL install failed, ignore" +else + dbg "mingw openssl configure failed, ignore" +fi +cd .. + +# 11: Make mingw zlib +dbg "MAKE MINGW ZLIB (try, required for libtor)" +cd build_mingw_zlib +unset ret +test -f Makefile || dbg_run ../${ZLIB}/configure --static --const --prefix="${MY_SYS_ROOT}/${targ}" && ret=0 || ret=$? +if [ $ret -eq 0 ]; then + dbg_run make -j${NMB_BUILDJOBS} libz.a || dbg "MINGW ZLIB build failed, ignore" + dbg_run make install || dbg "MINGW ZLIB install failed, ignore" +else + dbg "MINGW ZLIB configure failed, ignore" +fi +cd .. + +# 12: Make mingw libevent +dbg "MAKE MINGW LIBEVENT (try, required for libtor)" +cd build_mingw_libevent +unset ret +test -f Makefile || dbg_run ../${LIBEVENT}/configure \ + --disable-libevent-regress --disable-samples --disable-openssl \ + --enable-function-sections --prefix="${MY_SYS_ROOT}/${targ}" \ + --host=${targ} --enable-static --disable-shared && ret=0 || ret=$? +if [ $ret -eq 0 ]; then + dbg_run make -j${NMB_BUILDJOBS} || dbg "MINGW LIBEVENT build failed, ignore" + dbg_run make install || dbg "MINGW LIBEVENT install failed, ignore" + DBG_NOERR=1 dbg_run ln -sr ./.libs/libevent* ./ || true # required for mingw tor builds (using static libevent) +else + dbg "MINGW LIBEVENT configure failed, ignore" +fi +cd .. + +#libtor is disabled until patch the was ported +# 13: Make patch'd mingw tor (libtor) +#dbg "MAKE MINGW TOR (libtor patch)" +#cd build_mingw_tor +#TOR_CFLAGS="-DHAVE_SSL_GET_SERVER_RANDOM=1 -DHAVE_SSL_GET_CLIENT_CIPHERS=1 -DHAVE_SSL_GET_CLIENT_RANDOM=1 -DHAVE_SSL_SESSION_GET_MASTER_KEY=1" +#TOR_CFLAGS_EXTRA="-fasynchronous-unwind-tables -fno-strict-aliasing -Wall -Wextra -W" +#TOR_ARCHIVES="src/or/libtor.a src/common/libor.a src/common/libor-ctime.a src/common/libor-crypto.a src/ext/keccak-tiny/libkeccak-tiny.a src/common/libcurve25519_donna.a src/ext/ed25519/ref10/libed25519_ref10.a src/ext/ed25519/donna/libed25519_donna.a src/common/libor-event.a src/trunnel/libor-trunnel.a" +#TOR_STATIC_LIBS="$(realpath ../build_mingw_libevent)/libevent.a $(realpath ../build_mingw_openssl)/libssl.a $(realpath ../build_mingw_openssl)/libcrypto.a $(realpath ../build_mingw_zlib)/libz.a" +#unset ret +#test -f Makefile || CFLAGS="${CFLAGS} ${TOR_CFLAGS}" dbg_run ../${TOR}-libtor/configure --host=${targ} --disable-gcc-hardening --enable-static-tor --prefix="${MY_SYS_ROOT}/${targ}" --disable-tool-name-check --with-libevent-dir="$(realpath ../build_mingw_libevent)" --with-openssl-dir="$(realpath ../build_mingw_openssl)" --with-zlib-dir="$(realpath ../build_mingw_zlib)" --disable-systemd --disable-libfuzzer --disable-oss-fuzz --disable-system-torrc --disable-local-appdata --enable-tor2web-mode && ret=0 || ret=$? +#if [ $ret -eq 0 ]; then +# # build only required targets +# CFLAGS="${CFLAGS} ${TOR_CFLAGS}" dbg_run make src/or/tor.exe src/tools/tor-resolve.exe src/tools/tor-gencert.exe src/test/test.exe -j${NMB_BUILDJOBS} V=1 || dbg "MINGW TOR build failed, ignore" +# dbg_run ${STRIP} -s src/or/tor.exe || true +# dbg_run make install-exec || dbg "MINGW TOR install failed, ignore" +# # install tests +# dbg_run install -c src/test/test.exe "${MY_SYS_ROOT}/${targ}/bin/tor-tests.exe" || dbg "tor-tests.exe install failed, ignore" +#else +# dbg "MINGW TOR configure failed, ignore" +#fi +# compile/link libtor +#dbg "MAKE MINGW LIBTOR" +#dbg_run ${CC} -std=gnu99 ${CFLAGS} ${TOR_CFLAGS} ${TOR_CFLAGS_EXTRA} ../${TOR}-libtor/src/or/tor_main.c ${TOR_ARCHIVES} -shared -o src/or/libtor.dll -lgdi32 -lcrypt32 ${TOR_STATIC_LIBS} -lws2_32 "${MY_SYS_ROOT}/${targ}/lib/libwinpthread.a" -static-libgcc -Wl,-require-defined=_tor_main@8 -Wl,-require-defined=_tor_init -Wl,-Map=src/or/libtor.map || dbg "LIBTOR build failed, ignore" +#dbg_run ${STRIP} -s src/or/libtor.dll +## install libtor +#dbg_run install -c src/or/libtor.dll "${MY_SYS_ROOT}/${targ}/lib/libtor.dll" || dbg "libtor.dll install failed, ignore" +#dbg_run install -c ../${TOR}-libtor/src/or/libtor.h "${MY_SYS_ROOT}/${targ}/include/libtor.h" || dbg "libtor.h install failed, ignore" +#cd .. + +dbg "Creating ${MY_SYS_ROOT}/activate.sh" +cat <<EOF >${MY_SYS_ROOT}/activate.sh +#!/bin/bash +export PATH="${MY_SYS_ROOT}/bin:${MY_SYS_ROOT}/i686-w64-mingw32/bin:${MY_SYS_ROOT}/x86_64-pc-linux-gnu/bin:${PATH}" +EOF +chmod +x ${MY_SYS_ROOT}/activate.sh + +dbg "DONE" + +if [ ! -z "${SECONDS:-}" ]; then + T_DELTA_H=$(( ${SECONDS} / 3600 )) + T_DELTA_M=$(( ${SECONDS} / 60 % 60 )) + dbg "TOTAL TIME: ${T_DELTA_H}hrs ${T_DELTA_M}min" +fi |