From 19fcec84d8d7d21e796c7624e521b60d28ee21ed Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 20:45:59 +0200 Subject: Adding upstream version 16.2.11+ds. Signed-off-by: Daniel Baumann --- win32_deps_build.sh | 315 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 315 insertions(+) create mode 100755 win32_deps_build.sh (limited to 'win32_deps_build.sh') diff --git a/win32_deps_build.sh b/win32_deps_build.sh new file mode 100755 index 000000000..94d483f6a --- /dev/null +++ b/win32_deps_build.sh @@ -0,0 +1,315 @@ +#!/usr/bin/env bash + +set -e + +SCRIPT_DIR="$(dirname "$BASH_SOURCE")" +SCRIPT_DIR="$(realpath "$SCRIPT_DIR")" + +num_vcpus=$(nproc) +NUM_WORKERS=${NUM_WORKERS:-$num_vcpus} + +DEPS_DIR="${DEPS_DIR:-$SCRIPT_DIR/build.deps}" +depsSrcDir="$DEPS_DIR/src" +depsToolsetDir="$DEPS_DIR/mingw" + +lz4SrcDir="${depsSrcDir}/lz4" +lz4Dir="${depsToolsetDir}/lz4" +lz4Tag="v1.9.2" +sslTag="OpenSSL_1_1_1c" +sslDir="${depsToolsetDir}/openssl" +sslSrcDir="${depsSrcDir}/openssl" + +curlTag="curl-7_66_0" +curlSrcDir="${depsSrcDir}/curl" +curlDir="${depsToolsetDir}/curl" + +# For now, we'll keep the version number within the file path when not using git. +boostUrl="https://boostorg.jfrog.io/artifactory/main/release/1.75.0/source/boost_1_75_0.tar.gz" +boostSrcDir="${depsSrcDir}/boost_1_75_0" +boostDir="${depsToolsetDir}/boost" +zlibDir="${depsToolsetDir}/zlib" +zlibSrcDir="${depsSrcDir}/zlib" +backtraceDir="${depsToolsetDir}/libbacktrace" +backtraceSrcDir="${depsSrcDir}/libbacktrace" +snappySrcDir="${depsSrcDir}/snappy" +snappyDir="${depsToolsetDir}/snappy" +snappyTag="1.1.9" +# Additional Windows libraries, which aren't provided by Mingw +winLibDir="${depsToolsetDir}/windows/lib" + +wnbdUrl="https://github.com/cloudbase/wnbd" +wnbdTag="main" +wnbdSrcDir="${depsSrcDir}/wnbd" +wnbdLibDir="${depsToolsetDir}/wnbd/lib" + +dokanUrl="https://github.com/dokan-dev/dokany" +dokanTag="v1.3.1.1000" +dokanSrcDir="${depsSrcDir}/dokany" +dokanLibDir="${depsToolsetDir}/dokany/lib" + +# Allow for OS specific customizations through the OS flag (normally +# passed through from win32_build). +# Valid options are currently "ubuntu" and "suse". +OS=${OS:-"ubuntu"} + +function _make() { + make -j $NUM_WORKERS $@ +} + +if [[ -d $DEPS_DIR ]]; then + echo "Cleaning up dependency build dir: $DEPS_DIR" + rm -rf $DEPS_DIR +fi + +mkdir -p $DEPS_DIR +mkdir -p $depsToolsetDir +mkdir -p $depsSrcDir + +echo "Installing required packages." +case "$OS" in + ubuntu) + sudo apt-get update + sudo apt-get -y install mingw-w64 cmake pkg-config python3-dev python3-pip \ + autoconf libtool ninja-build zip + sudo python3 -m pip install cython + ;; + suse) + for PKG in mingw64-cross-gcc-c++ mingw64-libgcc_s_seh1 mingw64-libstdc++6 \ + cmake pkgconf python3-devel autoconf libtool ninja zip \ + python3-Cython gcc patch wget git; do + rpm -q $PKG >/dev/null || zypper -n install $PKG + done + ;; +esac + +MINGW_CMAKE_FILE="$DEPS_DIR/mingw.cmake" +source "$SCRIPT_DIR/mingw_conf.sh" + +echo "Building zlib." +cd $depsSrcDir +if [[ ! -d $zlibSrcDir ]]; then + git clone https://github.com/madler/zlib +fi +cd $zlibSrcDir +# Apparently the configure script is broken... +sed -e s/"PREFIX = *$"/"PREFIX = ${MINGW_PREFIX}"/ -i win32/Makefile.gcc +_make -f win32/Makefile.gcc +_make BINARY_PATH=$zlibDir \ + INCLUDE_PATH=$zlibDir/include \ + LIBRARY_PATH=$zlibDir/lib \ + SHARED_MODE=1 \ + -f win32/Makefile.gcc install + +echo "Building lz4." +cd $depsToolsetDir +if [[ ! -d $lz4Dir ]]; then + git clone --branch $lz4Tag --depth 1 https://github.com/lz4/lz4 + cd $lz4Dir +fi +cd $lz4Dir +_make BUILD_STATIC=no CC=${MINGW_CC%-posix*} \ + DLLTOOL=${MINGW_DLLTOOL} \ + WINDRES=${MINGW_WINDRES} \ + TARGET_OS=Windows_NT + +echo "Building OpenSSL." +cd $depsSrcDir +if [[ ! -d $sslSrcDir ]]; then + git clone --branch $sslTag --depth 1 https://github.com/openssl/openssl + cd $sslSrcDir +fi +cd $sslSrcDir +mkdir -p $sslDir +CROSS_COMPILE="${MINGW_PREFIX}" ./Configure \ + mingw64 shared --prefix=$sslDir --libdir="$sslDir/lib" +_make depend +_make +_make install + +echo "Building libcurl." +cd $depsSrcDir +if [[ ! -d $curlSrcDir ]]; then + git clone --branch $curlTag --depth 1 https://github.com/curl/curl + cd $curlSrcDir +fi +cd $curlSrcDir +./buildconf +./configure --prefix=$curlDir --with-ssl=$sslDir --with-zlib=$zlibDir \ + --host=${MINGW_BASE} --libdir="$curlDir/lib" +_make +_make install + + +echo "Building boost." +cd $depsSrcDir +if [[ ! -d $boostSrcDir ]]; then + echo "Downloading boost." + wget -qO- $boostUrl | tar xz +fi + +cd $boostSrcDir +echo "using gcc : mingw32 : ${MINGW_CXX} ;" > user-config.jam + +# Workaround for https://github.com/boostorg/thread/issues/156 +# Older versions of mingw provided a different pthread lib. +sed -i 's/lib$(libname)GC2.a/lib$(libname).a/g' ./libs/thread/build/Jamfile.v2 +sed -i 's/mthreads/pthreads/g' ./tools/build/src/tools/gcc.py +sed -i 's/mthreads/pthreads/g' ./tools/build/src/tools/gcc.jam + +sed -i 's/pthreads/mthreads/g' ./tools/build/src/tools/gcc.py +sed -i 's/pthreads/mthreads/g' ./tools/build/src/tools/gcc.jam + +export PTW32_INCLUDE=${PTW32Include} +export PTW32_LIB=${PTW32Lib} + +echo "Patching boost." +# Fix getting Windows page size +# TODO: send this upstream and maybe use a fork until it merges. +# Meanwhile, we might consider moving those to ceph/cmake/modules/BuildBoost.cmake. +# This cmake module will first have to be updated to support Mingw though. +patch -N boost/thread/pthread/thread_data.hpp < ++#endif ++ + #include + #include + +@@ -54,6 +58,10 @@ + if (size==0) return; + #ifdef BOOST_THREAD_USES_GETPAGESIZE + std::size_t page_size = getpagesize(); ++#elif _WIN32 ++ SYSTEM_INFO system_info; ++ ::GetSystemInfo (&system_info); ++ std::size_t page_size = system_info.dwPageSize; + #else + std::size_t page_size = ::sysconf( _SC_PAGESIZE); + #endif +EOL + +./bootstrap.sh + +./b2 install --user-config=user-config.jam toolset=gcc-mingw32 \ + target-os=windows release \ + link=static,shared \ + threadapi=win32 --prefix=$boostDir \ + address-model=64 architecture=x86 \ + binary-format=pe abi=ms -j $NUM_WORKERS \ + -sZLIB_INCLUDE=$zlibDir/include -sZLIB_LIBRARY_PATH=$zlibDir/lib \ + --without-python --without-mpi --without-log --without-wave + +echo "Building libbacktrace." +cd $depsSrcDir +if [[ ! -d $backtraceSrcDir ]]; then + git clone https://github.com/ianlancetaylor/libbacktrace +fi +mkdir -p $backtraceSrcDir/build +cd $backtraceSrcDir/build +../configure --prefix=$backtraceDir --exec-prefix=$backtraceDir \ + --host ${MINGW_BASE} --enable-host-shared \ + --libdir="$backtraceDir/lib" +_make LDFLAGS="-no-undefined" +_make install + +echo "Building snappy." +cd $depsSrcDir +if [[ ! -d $snappySrcDir ]]; then + git clone --branch $snappyTag --depth 1 https://github.com/google/snappy + cd $snappySrcDir +fi +mkdir -p $snappySrcDir/build +cd $snappySrcDir/build + +cmake -DCMAKE_INSTALL_PREFIX=$snappyDir \ + -DCMAKE_BUILD_TYPE=Release \ + -DBUILD_SHARED_LIBS=ON \ + -DSNAPPY_BUILD_TESTS=OFF \ + -DSNAPPY_BUILD_BENCHMARKS=OFF \ + -DCMAKE_TOOLCHAIN_FILE=$MINGW_CMAKE_FILE \ + ../ +_make +_make install + +cmake -DCMAKE_INSTALL_PREFIX=$snappyDir \ + -DCMAKE_BUILD_TYPE=Release \ + -DBUILD_SHARED_LIBS=OFF \ + -DSNAPPY_BUILD_TESTS=OFF \ + -DCMAKE_TOOLCHAIN_FILE=$MINGW_CMAKE_FILE \ + ../ +_make +_make install + +echo "Generating mswsock.lib." +# mswsock.lib is not provided by mingw, so we'll have to generate +# it. +mkdir -p $winLibDir +cat > $winLibDir/mswsock.def <