Skip to content

Commit ac67c77

Browse files
committed
redpanda-cpp: re-org ci builds
1 parent a5c50f1 commit ac67c77

5 files changed

Lines changed: 415 additions & 63 deletions

File tree

.ci/build-cross.sh

Lines changed: 140 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,140 @@
1+
#!/bin/bash
2+
3+
set -euxo pipefail
4+
5+
_CLEAN=0
6+
_DEBUG=0 # dummy
7+
_PROFILE=""
8+
while [[ $# -ge 1 ]]; do
9+
case "$1" in
10+
-c|--clean)
11+
_CLEAN=1
12+
shift
13+
;;
14+
-p|--profile)
15+
_PROFILE="$2"
16+
shift
17+
shift
18+
;;
19+
*)
20+
echo "Unknown option: $1"
21+
exit 1
22+
;;
23+
esac
24+
done
25+
26+
case "$_PROFILE" in
27+
64-mcf|64-ucrt|64-msvcrt|64)
28+
_ARCH=x86_64
29+
_EH=seh
30+
;;
31+
32-mcf|32-ucrt|32-msvcrt|32)
32+
_ARCH=i686
33+
_EH=dwarf
34+
;;
35+
*)
36+
echo "Unknown profile: $_PROFILE"
37+
exit 1
38+
;;
39+
esac
40+
_TARGET="$_ARCH-w64-mingw32"
41+
42+
. $(dirname "$0")/common.sh
43+
44+
function clean_cross_toolchain() {
45+
if [[ "$_CLEAN" -eq 1 && -d "$_MINGW_LITE_X_DIR" ]]; then
46+
rm -rf "$_MINGW_LITE_X_DIR"
47+
fi
48+
}
49+
50+
function setup_host_toolchain() {
51+
apt update
52+
env DEBIAN_FRONTEND=noninteractive \
53+
apt install -y --no-install-recommends \
54+
build-essential qttools5-dev-tools \
55+
curl git zstd
56+
}
57+
58+
function setup_cross_toolchain() {
59+
if [[ ! -d "$_MINGW_LITE_X_DIR" ]]; then
60+
if [[ ! -f "assets/$_MINGW_LITE_X_ARCHIVE" ]]; then
61+
curl -L -o "assets/$_MINGW_LITE_X_ARCHIVE" "$_MINGW_LITE_X_URL"
62+
fi
63+
zstdcat "assets/$_MINGW_LITE_X_ARCHIVE" | tar -x -C /
64+
fi
65+
}
66+
67+
function prepare_source() {
68+
mkdir -p "$_BUILD_DIR"/{qtbase,qtsvg,qttranslations}
69+
70+
# in-tree build required, or `sed` will fail due to misgenerated paths
71+
git archive --format=tar HEAD | tar -x -C "$_BUILD_DIR/qtbase"
72+
73+
if [[ ! -d "assets/qtsvg-$_QT_BRANCH" ]]; then
74+
git clone --branch "$_QT_BRANCH" --depth 1 https://github.com/qt/qtsvg.git "assets/qtsvg-$_QT_BRANCH"
75+
fi
76+
77+
if [[ ! -d "assets/qttranslations-$_QT_BRANCH" ]]; then
78+
git clone --branch "$_QT_BRANCH" --depth 1 https://github.com/qt/qttranslations.git "assets/qttranslations-$_QT_BRANCH"
79+
fi
80+
}
81+
82+
function build_qtbase() {
83+
build_dir="$_BUILD_DIR/qtbase"
84+
mkdir -p "$build_dir"
85+
pushd "$build_dir"
86+
./bin/syncqt.pl -version "$QT_VERSION"
87+
./configure \
88+
-prefix "$_MINGW_LITE_X_DIR/$_TARGET" \
89+
-hostprefix "$_MINGW_LITE_X_DIR" \
90+
-opensource -confirm-license \
91+
-release -optimize-size -static -static-runtime -platform linux-g++ \
92+
-xplatform win32-g++ -device-option CROSS_COMPILE="$_TARGET-" \
93+
-opengl desktop -no-angle -no-icu -qt-zlib -qt-pcre -qt-libpng -qt-libjpeg -qt-freetype -no-fontconfig -qt-harfbuzz -no-ssl -no-openssl \
94+
-no-style-windowsvista -no-direct2d -no-directwrite -no-feature-directwrite2 \
95+
-nomake examples -nomake tests -nomake tools
96+
make -j$(nproc)
97+
make install
98+
popd
99+
}
100+
101+
function build_qtsvg() {
102+
build_dir="$_BUILD_DIR/qtsvg"
103+
mkdir -p "$build_dir"
104+
pushd "$build_dir"
105+
qmake "$_PROJECT_ROOT/assets/qtsvg-$_QT_BRANCH"
106+
make -j$(nproc)
107+
make install
108+
popd
109+
}
110+
111+
function dummy_qttools() {
112+
ln -sf /usr/bin/lrelease "$_MINGW_LITE_X_DIR/bin/lrelease"
113+
}
114+
115+
function build_qttranslations() {
116+
build_dir="$_BUILD_DIR/qttranslations"
117+
mkdir -p "$build_dir"
118+
pushd "$build_dir"
119+
qmake "$_PROJECT_ROOT/assets/qttranslations-$_QT_BRANCH"
120+
make -j$(nproc)
121+
make install
122+
popd
123+
}
124+
125+
function package() {
126+
tar -c "$_MINGW_LITE_X_DIR" | zstd -9 --force -o "build/$_REDPANDA_QT_X_ARCHIVE"
127+
}
128+
129+
clean_build
130+
clean_cross_toolchain
131+
prepare_dirs
132+
setup_host_toolchain
133+
setup_cross_toolchain
134+
prepare_source
135+
export PATH="$_MINGW_LITE_X_DIR/bin:$PATH"
136+
build_qtbase
137+
build_qtsvg
138+
dummy_qttools
139+
build_qttranslations
140+
package

.ci/build-native.sh

Lines changed: 178 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,178 @@
1+
#!/bin/bash
2+
3+
set -euxo pipefail
4+
5+
_CLEAN=0
6+
_DEBUG=0
7+
_PROFILE=""
8+
_USE_MINGW_BUILDS=0
9+
while [[ $# -ge 1 ]]; do
10+
case "$1" in
11+
-c|--clean)
12+
_CLEAN=1
13+
shift
14+
;;
15+
-d|--debug)
16+
_DEBUG=1
17+
shift
18+
;;
19+
-p|--profile)
20+
_PROFILE="$2"
21+
shift
22+
shift
23+
;;
24+
--use-mingw-builds)
25+
_USE_MINGW_BUILDS=1
26+
shift
27+
;;
28+
*)
29+
echo "Unknown option: $1"
30+
exit 1
31+
;;
32+
esac
33+
done
34+
35+
case "$_PROFILE" in
36+
64-mcf|64-ucrt|64-msvcrt|64)
37+
_ARCH=x86_64
38+
_EH=seh
39+
;;
40+
32-mcf|32-ucrt|32-msvcrt|32)
41+
_ARCH=i686
42+
_EH=dwarf
43+
;;
44+
*)
45+
echo "Unknown profile: $_PROFILE"
46+
exit 1
47+
;;
48+
esac
49+
50+
. $(dirname "$0")/common.sh
51+
52+
if [[ "$_DEBUG" -eq 0 ]]; then
53+
_REDPANDA_QT_DIR="/c/Qt/$_REDPANDA_QT_RELEASE/$_PROFILE"
54+
else
55+
_REDPANDA_QT_DIR="/c/Qt/$_REDPANDA_QT_RELEASE/${_PROFILE}d"
56+
fi
57+
_REDPANDA_QT_PARENT="/c/Qt/$_REDPANDA_QT_RELEASE"
58+
59+
function clean_toolchain() {
60+
if [[ "$_CLEAN" -eq 1 && -d "$_REDPANDA_QT_DIR" ]]; then
61+
rm -rf "$_REDPANDA_QT_DIR"
62+
fi
63+
}
64+
65+
function setup_toolchain() {
66+
if [[ ! -d "$_REDPANDA_QT_DIR" ]]; then
67+
if [[ "$_USE_MINGW_BUILDS" -eq 0 ]]; then
68+
if [[ ! -f "assets/$_MINGW_LITE_ARCHIVE" ]]; then
69+
curl -L -o "assets/$_MINGW_LITE_ARCHIVE" "$_MINGW_LITE_URL"
70+
fi
71+
mkdir -p "$_REDPANDA_QT_PARENT"
72+
pushd "$_REDPANDA_QT_PARENT"
73+
7z x "$_PROJECT_ROOT/assets/$_MINGW_LITE_ARCHIVE"
74+
mv "$_MINGW_LITE_DIR" "$_REDPANDA_QT_DIR"
75+
popd
76+
else
77+
if [[ ! -f "assets/$_MINGW_BUILDS_ARCHIVE" ]]; then
78+
curl -L -o "assets/$_MINGW_BUILDS_ARCHIVE" "$_MINGW_BUILDS_URL"
79+
fi
80+
mkdir -p "$_REDPANDA_QT_PARENT"
81+
pushd "$_REDPANDA_QT_PARENT"
82+
7z x "$_PROJECT_ROOT/assets/$_MINGW_BUILDS_ARCHIVE"
83+
mv "$_MINGW_BUILDS_DIR" "$_REDPANDA_QT_DIR"
84+
popd
85+
fi
86+
fi
87+
}
88+
89+
function prepare_source() {
90+
mkdir -p "$_BUILD_DIR"/{qtbase,qtsvg,qttools,qttranslations}
91+
92+
# in-tree build required, or `sed` will fail due to misgenerated paths
93+
git archive --format=tar HEAD | tar -x -C "$_BUILD_DIR/qtbase"
94+
95+
if [[ ! -d "assets/qtsvg-$_QT_BRANCH" ]]; then
96+
git clone --branch "$_QT_BRANCH" --depth 1 https://github.com/qt/qtsvg.git "assets/qtsvg-$_QT_BRANCH"
97+
fi
98+
99+
if [[ ! -d "assets/qttools-$_QT_BRANCH" ]]; then
100+
git clone --branch "$_QT_BRANCH" --depth 1 https://github.com/qt/qttools.git "assets/qttools-$_QT_BRANCH"
101+
fi
102+
103+
if [[ ! -d "assets/qttranslations-$_QT_BRANCH" ]]; then
104+
git clone --branch "$_QT_BRANCH" --depth 1 https://github.com/qt/qttranslations.git "assets/qttranslations-$_QT_BRANCH"
105+
fi
106+
}
107+
108+
function build_qtbase() {
109+
if [[ "$_DEBUG" -eq 0 ]]; then
110+
mode_args="-release -optimize-size"
111+
else
112+
mode_args="-debug -optimize-debug -optimized-tools"
113+
fi
114+
115+
build_dir="$_BUILD_DIR/qtbase"
116+
mkdir -p "$build_dir"
117+
pushd "$build_dir"
118+
./bin/syncqt.pl -version "$QT_VERSION"
119+
./configure.bat \
120+
-prefix "$_REDPANDA_QT_DIR" \
121+
-opensource -confirm-license \
122+
$mode_args -static -static-runtime -platform win32-g++ \
123+
-opengl desktop -no-angle -no-icu -qt-zlib -qt-pcre -qt-libpng -qt-libjpeg -qt-freetype -no-fontconfig -qt-harfbuzz -no-ssl -no-openssl \
124+
-no-style-windowsvista -no-direct2d -no-directwrite -no-feature-directwrite2 \
125+
-nomake examples -nomake tests -nomake tools
126+
mingw32-make -j$(nproc)
127+
mingw32-make install
128+
popd
129+
}
130+
131+
function build_qtsvg() {
132+
build_dir="$_BUILD_DIR/qtsvg"
133+
mkdir -p "$build_dir"
134+
pushd "$build_dir"
135+
qmake "$_PROJECT_ROOT/assets/qtsvg-$_QT_BRANCH"
136+
mingw32-make -j$(nproc)
137+
mingw32-make install
138+
popd
139+
}
140+
141+
function build_qttools() {
142+
build_dir="$_BUILD_DIR/qttools"
143+
mkdir -p "$build_dir"
144+
pushd "$build_dir"
145+
qmake "$_PROJECT_ROOT/assets/qttools-$_QT_BRANCH"
146+
mingw32-make -j$(nproc)
147+
mingw32-make install
148+
popd
149+
}
150+
151+
function build_qttranslations() {
152+
build_dir="$_BUILD_DIR/qttranslations"
153+
mkdir -p "$build_dir"
154+
pushd "$build_dir"
155+
qmake "$_PROJECT_ROOT/assets/qttranslations-$_QT_BRANCH"
156+
mingw32-make -j$(nproc)
157+
mingw32-make install
158+
popd
159+
}
160+
161+
function package() {
162+
if [[ "$_DEBUG" -eq 1 ]]; then
163+
find "$_REDPANDA_QT_DIR/bin" -name '*.exe' -not -name 'strip.exe' -exec strip '{}' ';'
164+
fi
165+
tar -c -C /c/Qt "${_REDPANDA_QT_DIR#/c/Qt/}" | zstd -9 --force -o "build/$_REDPANDA_QT_ARCHIVE"
166+
}
167+
168+
clean_build
169+
clean_toolchain
170+
prepare_dirs
171+
setup_toolchain
172+
prepare_source
173+
export PATH="$_REDPANDA_QT_DIR/bin:$PATH"
174+
build_qtbase
175+
build_qtsvg
176+
build_qttools
177+
build_qttranslations
178+
package

.ci/common.sh

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
QT_VERSION=5.15.15
2+
LOCAL_VERSION=0
3+
4+
MINGW_LITE_VERSION=14.2.0-r3
5+
6+
MINGW_BUILDS_VERSION=11.5.0-rt_v9-rev0
7+
8+
## internal variables
9+
10+
_MINGW_LITE_BRANCH="${MINGW_LITE_VERSION%%.*}"
11+
_MINGW_LITE_DIR="mingw$_PROFILE-$_MINGW_LITE_BRANCH"
12+
_MINGW_LITE_ARCHIVE="mingw$_PROFILE-$MINGW_LITE_VERSION.7z"
13+
_MINGW_LITE_URL="https://github.com/redpanda-cpp/mingw-lite/releases/download/$MINGW_LITE_VERSION/$_MINGW_LITE_ARCHIVE"
14+
_MINGW_LITE_X_DIR="/opt/x-mingw$_PROFILE-$_MINGW_LITE_BRANCH"
15+
_MINGW_LITE_X_ARCHIVE="x-mingw$_PROFILE-$MINGW_LITE_VERSION.tar.zst"
16+
_MINGW_LITE_X_URL="https://github.com/redpanda-cpp/mingw-lite/releases/download/$MINGW_LITE_VERSION/$_MINGW_LITE_X_ARCHIVE"
17+
18+
_MINGW_BUILDS_GCC="${MINGW_BUILDS_VERSION%%-*}"
19+
_MINGW_BUILDS_RT="${MINGW_BUILDS_VERSION#*-}"
20+
_MINGW_BUILDS_DIR="mingw$_PROFILE"
21+
_MINGW_BUILDS_ARCHIVE="$_ARCH-$_MINGW_BUILDS_GCC-release-posix-$_EH-$_MINGW_BUILDS_RT.7z"
22+
_MINGW_BUILDS_URL="https://github.com/redpanda-cpp/mingw-builds/releases/download/$MINGW_BUILDS_VERSION/$_MINGW_BUILDS_ARCHIVE"
23+
24+
_QT_BRANCH="v$QT_VERSION-lts-lgpl"
25+
_REDPANDA_QT_RELEASE="$QT_VERSION+redpanda$LOCAL_VERSION"
26+
if [[ "$_DEBUG" -eq 0 ]]; then
27+
_REDPANDA_QT_ARCHIVE="qt-$_REDPANDA_QT_RELEASE-$_PROFILE.tar.zst"
28+
else
29+
_REDPANDA_QT_ARCHIVE="qt-$_REDPANDA_QT_RELEASE-${_PROFILE}d.tar.zst"
30+
fi
31+
_REDPANDA_QT_X_ARCHIVE="x-qt-$_REDPANDA_QT_RELEASE-$_PROFILE.tar.zst"
32+
33+
_PROJECT_ROOT="$PWD"
34+
_BUILD_DIR="build/$_PROFILE"
35+
36+
## internal functions
37+
38+
function clean_build() {
39+
if [[ "$_CLEAN" -eq 1 && -d "$_BUILD_DIR" ]]; then
40+
rm -rf "$_BUILD_DIR"
41+
fi
42+
}
43+
44+
function prepare_dirs() {
45+
mkdir -p "$_BUILD_DIR" assets dist
46+
}

0 commit comments

Comments
 (0)