]>
Commit | Line | Data |
---|---|---|
9f95a23c TL |
1 | #!/usr/bin/env bash |
2 | ||
3 | set -e | |
4 | ||
5 | SCRIPT_DIR="$(dirname "$BASH_SOURCE")" | |
6 | SCRIPT_DIR="$(realpath "$SCRIPT_DIR")" | |
7 | ||
8 | num_vcpus=$(( $(lscpu -p | tail -1 | cut -d "," -f 1) + 1 )) | |
9 | ||
10 | CEPH_DIR="${CEPH_DIR:-$SCRIPT_DIR}" | |
11 | BUILD_DIR="${BUILD_DIR:-${CEPH_DIR}/build}" | |
12 | DEPS_DIR="${DEPS_DIR:-$CEPH_DIR/build.deps}" | |
13 | ||
14 | CLEAN_BUILD=${CLEAN_BUILD:-} | |
15 | SKIP_BUILD=${SKIP_BUILD:-} | |
16 | NUM_WORKERS=${NUM_WORKERS:-$num_vcpus} | |
17 | NINJA_BUILD=${NINJA_BUILD:-} | |
18 | DEV_BUILD=${DEV_BUILD:-} | |
19 | ||
20 | # We'll have to be explicit here since auto-detecting doesn't work | |
21 | # properly when cross compiling. | |
22 | ALLOCATOR=${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. | |
26 | CMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE:-RelWithDebInfo} | |
27 | ||
28 | depsSrcDir="$DEPS_DIR/src" | |
29 | depsToolsetDir="$DEPS_DIR/mingw" | |
30 | ||
31 | lz4Dir="${depsToolsetDir}/lz4" | |
32 | sslDir="${depsToolsetDir}/openssl" | |
33 | curlDir="${depsToolsetDir}/curl" | |
34 | boostDir="${depsToolsetDir}/boost" | |
35 | zlibDir="${depsToolsetDir}/zlib" | |
36 | backtraceDir="${depsToolsetDir}/backtrace" | |
37 | snappyDir="${depsToolsetDir}/snappy" | |
38 | winLibDir="${depsToolsetDir}/windows/lib" | |
39 | if [[ -n $NINJA_BUILD ]]; then | |
40 | generatorUsed="Ninja" | |
41 | else | |
42 | generatorUsed="Unix Makefiles" | |
43 | fi | |
44 | ||
45 | pyVersion=`python -c "import sys; print('%d.%d' % (sys.version_info.major, sys.version_info.minor))"` | |
46 | ||
47 | depsDirs="$lz4Dir;$curlDir;$sslDir;$boostDir;$zlibDir;$backtraceDir;$snappyDir" | |
48 | depsDirs+=";$winLibDir" | |
49 | ||
50 | # That's actually a dll, we may want to rename the file. | |
51 | lz4Lib="${lz4Dir}/lib/liblz4.so.1.9.2" | |
52 | lz4Include="${lz4Dir}/lib" | |
53 | curlLib="${curlDir}/lib/libcurl.dll.a" | |
54 | curlInclude="${curlDir}/include" | |
55 | ||
56 | if [[ -n $CLEAN_BUILD ]]; then | |
57 | echo "Cleaning up build dir: $BUILD_DIR" | |
58 | rm -rf $BUILD_DIR | |
59 | fi | |
60 | ||
61 | if [[ ! -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" | |
65 | fi | |
66 | ||
67 | mkdir -p $BUILD_DIR | |
68 | cd $BUILD_DIR | |
69 | ||
70 | # We'll need to cross compile Boost.Python before enabling | |
71 | # "WITH_MGR". | |
72 | echo "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. | |
76 | export CMAKE_PREFIX_PATH=$depsDirs | |
77 | ||
78 | if [[ -n $DEV_BUILD ]]; then | |
79 | echo "Dev build enabled." | |
80 | echo "Git versioning will be disabled." | |
81 | ENABLE_GIT_VERSION="OFF" | |
82 | else | |
83 | ENABLE_GIT_VERSION="ON" | |
84 | fi | |
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. | |
89 | cmake -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 | ||
112 | if [[ -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 | |
127 | fi |