]> git.proxmox.com Git - ceph.git/blame - ceph/win32_build.sh
import 15.2.9
[ceph.git] / ceph / win32_build.sh
CommitLineData
9f95a23c
TL
1#!/usr/bin/env bash
2
3set -e
4
5SCRIPT_DIR="$(dirname "$BASH_SOURCE")"
6SCRIPT_DIR="$(realpath "$SCRIPT_DIR")"
7
8num_vcpus=$(( $(lscpu -p | tail -1 | cut -d "," -f 1) + 1 ))
9
10CEPH_DIR="${CEPH_DIR:-$SCRIPT_DIR}"
11BUILD_DIR="${BUILD_DIR:-${CEPH_DIR}/build}"
12DEPS_DIR="${DEPS_DIR:-$CEPH_DIR/build.deps}"
13
14CLEAN_BUILD=${CLEAN_BUILD:-}
15SKIP_BUILD=${SKIP_BUILD:-}
16NUM_WORKERS=${NUM_WORKERS:-$num_vcpus}
17NINJA_BUILD=${NINJA_BUILD:-}
18DEV_BUILD=${DEV_BUILD:-}
19
20# We'll have to be explicit here since auto-detecting doesn't work
21# properly when cross compiling.
22ALLOCATOR=${ALLOCATOR:-libc}
23# Debug builds don't work with MINGW for the time being, failing with
24# can't close <file>: File too big
25# -Wa,-mbig-obj does not help.
26CMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE:-RelWithDebInfo}
27
28depsSrcDir="$DEPS_DIR/src"
29depsToolsetDir="$DEPS_DIR/mingw"
30
31lz4Dir="${depsToolsetDir}/lz4"
32sslDir="${depsToolsetDir}/openssl"
33curlDir="${depsToolsetDir}/curl"
34boostDir="${depsToolsetDir}/boost"
35zlibDir="${depsToolsetDir}/zlib"
36backtraceDir="${depsToolsetDir}/backtrace"
37snappyDir="${depsToolsetDir}/snappy"
38winLibDir="${depsToolsetDir}/windows/lib"
39if [[ -n $NINJA_BUILD ]]; then
40 generatorUsed="Ninja"
41else
42 generatorUsed="Unix Makefiles"
43fi
44
45pyVersion=`python -c "import sys; print('%d.%d' % (sys.version_info.major, sys.version_info.minor))"`
46
47depsDirs="$lz4Dir;$curlDir;$sslDir;$boostDir;$zlibDir;$backtraceDir;$snappyDir"
48depsDirs+=";$winLibDir"
49
50# That's actually a dll, we may want to rename the file.
51lz4Lib="${lz4Dir}/lib/liblz4.so.1.9.2"
52lz4Include="${lz4Dir}/lib"
53curlLib="${curlDir}/lib/libcurl.dll.a"
54curlInclude="${curlDir}/include"
55
56if [[ -n $CLEAN_BUILD ]]; then
57 echo "Cleaning up build dir: $BUILD_DIR"
58 rm -rf $BUILD_DIR
59fi
60
61if [[ ! -d $DEPS_DIR ]]; then
62 echo "Preparing dependencies: $DEPS_DIR"
63 NUM_WORKERS=$NUM_WORKERS DEPS_DIR=$DEPS_DIR \
64 "$SCRIPT_DIR/win32_deps_build.sh"
65fi
66
67mkdir -p $BUILD_DIR
68cd $BUILD_DIR
69
70# We'll need to cross compile Boost.Python before enabling
71# "WITH_MGR".
72echo "Generating solution. Log: ${BUILD_DIR}/cmake.log"
73
74# This isn't propagated to some of the subprojects, we'll use an env variable
75# for now.
76export CMAKE_PREFIX_PATH=$depsDirs
77
78if [[ -n $DEV_BUILD ]]; then
79 echo "Dev build enabled."
80 echo "Git versioning will be disabled."
81 ENABLE_GIT_VERSION="OFF"
82else
83 ENABLE_GIT_VERSION="ON"
84fi
85
86# As opposed to Linux, Windows shared libraries can't have unresolved
87# symbols. Until we fix the dependencies (which are either unspecified
88# or circular), we'll have to stick to static linking.
89cmake -D CMAKE_PREFIX_PATH=$depsDirs \
90 -D CMAKE_TOOLCHAIN_FILE="$CEPH_DIR/cmake/toolchains/mingw32.cmake" \
91 -D WITH_PYTHON2=OFF -D WITH_PYTHON3=ON \
92 -D MGR_PYTHON_VERSION=$pyVersion \
93 -D WITH_RDMA=OFF -D WITH_OPENLDAP=OFF \
94 -D WITH_GSSAPI=OFF -D WITH_FUSE=OFF -D WITH_XFS=OFF \
95 -D WITH_BLUESTORE=OFF -D WITH_LEVELDB=OFF \
96 -D WITH_LTTNG=OFF -D WITH_BABELTRACE=OFF \
97 -D WITH_SYSTEM_BOOST=ON -D WITH_MGR=OFF \
98 -D WITH_LIBCEPHFS=OFF -D WITH_KRBD=OFF -D WITH_RADOSGW=OFF \
99 -D ENABLE_SHARED=OFF -D WITH_RBD=ON -D BUILD_GMOCK=OFF \
100 -D WITH_CEPHFS=OFF -D WITH_MANPAGE=OFF \
101 -D WITH_MGR_DASHBOARD_FRONTEND=OFF -D WITH_SYSTEMD=OFF -D WITH_TESTS=OFF \
102 -D LZ4_INCLUDE_DIR=$lz4Include -D LZ4_LIBRARY=$lz4Lib \
103 -D Backtrace_Header="$backtraceDir/include/backtrace.h" \
104 -D Backtrace_INCLUDE_DIR="$backtraceDir/include" \
105 -D Backtrace_LIBRARY="$backtraceDir/lib/libbacktrace.dll.a" \
106 -D Boost_THREADAPI="pthread" \
107 -D ENABLE_GIT_VERSION=$ENABLE_GIT_VERSION \
108 -D ALLOCATOR="$ALLOCATOR" -D CMAKE_BUILD_TYPE=$CMAKE_BUILD_TYPE \
109 -G "$generatorUsed" \
110 $CEPH_DIR 2>&1 | tee "${BUILD_DIR}/cmake.log"
111
112if [[ -z $SKIP_BUILD ]]; then
113 echo "Building using $NUM_WORKERS workers. Log: ${BUILD_DIR}/build.log"
114 echo "NINJA_BUILD = $NINJA_BUILD"
115
116 # We're currently limitting the build scope to the rados/rbd binaries.
117 if [[ -n $NINJA_BUILD ]]; then
118 cd $BUILD_DIR
119 ninja -v rados.exe rbd.exe compressor | tee "${BUILD_DIR}/build.log"
120 else
121 cd $BUILD_DIR/src/tools
122 make -j $NUM_WORKERS 2>&1 | tee "${BUILD_DIR}/build.log"
123
124 cd $BUILD_DIR/src/compressor
125 make -j $NUM_WORKERS 2>&1 | tee -a "${BUILD_DIR}/build.log"
126 fi
127fi