Skip to content

Commit e04b2a9

Browse files
Use vcpkg to build debian packages (#506)
1 parent f2f9f65 commit e04b2a9

File tree

10 files changed

+35
-193
lines changed

10 files changed

+35
-193
lines changed

.github/workflows/ci-build-binary-artifacts.yaml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,6 @@ jobs:
5656
run: build-support/generate-source-archive.sh
5757

5858
- uses: docker/setup-buildx-action@v2
59-
- run: build-support/copy-deps-versionfile.sh
6059

6160
- name: Build dependencies Docker image
6261
uses: docker/build-push-action@v3

.github/workflows/ci-pr-validation.yaml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -326,7 +326,6 @@ jobs:
326326
run: build-support/generate-source-archive.sh
327327

328328
- uses: docker/setup-buildx-action@v2
329-
- run: build-support/copy-deps-versionfile.sh
330329

331330
- name: Build dependencies Docker image
332331
uses: docker/build-push-action@v3

build-support/copy-deps-versionfile.sh

Lines changed: 0 additions & 29 deletions
This file was deleted.

build-support/dep-version.py

Lines changed: 0 additions & 24 deletions
This file was deleted.

dependencies.yaml

Lines changed: 0 additions & 29 deletions
This file was deleted.

pkg/deb/Dockerfile

Lines changed: 6 additions & 95 deletions
Original file line numberDiff line numberDiff line change
@@ -23,104 +23,15 @@ FROM debian:11
2323

2424
ARG PLATFORM
2525

26-
# perl is required to install OpenSSL
2726
RUN apt-get update -y && \
2827
apt-get install -y \
2928
curl \
3029
g++ \
3130
make \
32-
perl \
3331
dpkg-dev \
34-
python3 \
35-
python3-pip \
36-
git
37-
38-
RUN pip3 install pyyaml
39-
40-
ADD .build/dependencies.yaml /
41-
ADD .build/dep-version.py /usr/local/bin
42-
43-
# Download and compile boost
44-
RUN BOOST_VERSION=$(dep-version.py boost) && \
45-
curl -O -L https://github.com/boostorg/boost/releases/download/boost-${BOOST_VERSION}/boost-${BOOST_VERSION}.tar.gz && \
46-
tar zxf boost-${BOOST_VERSION}.tar.gz && \
47-
cd boost-${BOOST_VERSION} && \
48-
./bootstrap.sh --with-libraries=regex && \
49-
./b2 -d0 address-model=64 cxxflags=-fPIC link=static threading=multi variant=release install && \
50-
rm -rf /boost-${BOOST_VERSION}.tar.gz /boost-${BOOST_VERSION}
51-
52-
RUN CMAKE_VERSION=$(dep-version.py cmake) && \
53-
curl -O -L https://github.com/Kitware/CMake/releases/download/v${CMAKE_VERSION}/cmake-${CMAKE_VERSION}-linux-${PLATFORM}.tar.gz && \
54-
tar xfz cmake-${CMAKE_VERSION}-linux-${PLATFORM}.tar.gz && \
55-
cp cmake-${CMAKE_VERSION}-linux-${PLATFORM}/bin/* /usr/bin/ && \
56-
cp -r cmake-${CMAKE_VERSION}-linux-${PLATFORM}/share/cmake-* /usr/share/ && \
57-
rm -rf cmake-${CMAKE_VERSION}-linux-${PLATFORM} cmake-${CMAKE_VERSION}-linux-${PLATFORM}.tar.gz
58-
59-
# Download and compile protobuf
60-
RUN PROTOBUF_VERSION=$(dep-version.py protobuf) && \
61-
curl -O -L https://github.com/google/protobuf/releases/download/v${PROTOBUF_VERSION}/protobuf-cpp-${PROTOBUF_VERSION}.tar.gz && \
62-
tar xfz protobuf-cpp-${PROTOBUF_VERSION}.tar.gz && \
63-
cd protobuf-${PROTOBUF_VERSION}/ && \
64-
CXXFLAGS=-fPIC ./configure && \
65-
make -j8 && make install && ldconfig && \
66-
rm -rf /protobuf-cpp-${PROTOBUF_VERSION}.tar.gz /protobuf-${PROTOBUF_VERSION}
67-
68-
# ZLib
69-
RUN ZLIB_VERSION=$(dep-version.py zlib) && \
70-
curl -O -L https://github.com/madler/zlib/archive/v${ZLIB_VERSION}.tar.gz && \
71-
tar xfz v${ZLIB_VERSION}.tar.gz && \
72-
cd zlib-${ZLIB_VERSION} && \
73-
CFLAGS="-fPIC -O3" ./configure && \
74-
make -j8 && make install && \
75-
rm -rf /v${ZLIB_VERSION}.tar.gz /zlib-${ZLIB_VERSION}
76-
77-
# Zstandard
78-
RUN ZSTD_VERSION=$(dep-version.py zstd) && \
79-
curl -O -L https://github.com/facebook/zstd/releases/download/v${ZSTD_VERSION}/zstd-${ZSTD_VERSION}.tar.gz && \
80-
tar xfz zstd-${ZSTD_VERSION}.tar.gz && \
81-
cd zstd-${ZSTD_VERSION} && \
82-
CFLAGS="-fPIC -O3" make -j8 && \
83-
make install && \
84-
rm -rf /zstd-${ZSTD_VERSION} /zstd-${ZSTD_VERSION}.tar.gz
85-
86-
# Snappy
87-
RUN SNAPPY_VERSION=$(dep-version.py snappy) && \
88-
curl -O -L https://github.com/google/snappy/archive/refs/tags/${SNAPPY_VERSION}.tar.gz && \
89-
tar xfz ${SNAPPY_VERSION}.tar.gz && \
90-
cd snappy-${SNAPPY_VERSION} && \
91-
CXXFLAGS="-fPIC -O3" cmake . -DSNAPPY_BUILD_TESTS=OFF -DSNAPPY_BUILD_BENCHMARKS=OFF && \
92-
make -j8 && make install && \
93-
rm -rf /snappy-${SNAPPY_VERSION} /${SNAPPY_VERSION}.tar.gz
94-
95-
# Roaring
96-
RUN ROARING_VERSION=$(dep-version.py roaring) && \
97-
curl -O -L https://github.com/RoaringBitmap/CRoaring/archive/refs/tags/v${ROARING_VERSION}.tar.gz && \
98-
tar xfz v${ROARING_VERSION}.tar.gz && \
99-
cd CRoaring-${ROARING_VERSION} && \
100-
mkdir build && cd build && CXXFLAGS="-fPIC -O3" cmake .. && \
101-
make -j8 && make install && \
102-
rm -rf /v${ROARING_VERSION}.tar.gz /CRoaring-${ROARING_VERSION}
103-
104-
RUN OPENSSL_VERSION=$(dep-version.py openssl) && \
105-
OPENSSL_VERSION_UNDERSCORE=$(echo $OPENSSL_VERSION | sed 's/\./_/g') && \
106-
curl -O -L https://github.com/openssl/openssl/archive/OpenSSL_${OPENSSL_VERSION_UNDERSCORE}.tar.gz && \
107-
tar xfz OpenSSL_${OPENSSL_VERSION_UNDERSCORE}.tar.gz && \
108-
cd openssl-OpenSSL_${OPENSSL_VERSION_UNDERSCORE}/ && \
109-
./Configure -fPIC --prefix=/usr/local/ssl/ linux-${PLATFORM} && \
110-
make -j8 && make install && \
111-
rm -rf /OpenSSL_${OPENSSL_VERSION_UNDERSCORE}.tar.gz /openssl-OpenSSL_${OPENSSL_VERSION_UNDERSCORE}
112-
113-
ENV LD_LIBRARY_PATH /usr/local/ssl/lib/:
114-
ENV OPENSSL_ROOT_DIR /usr/local/ssl/
115-
116-
# LibCurl
117-
RUN CURL_VERSION=$(dep-version.py curl) && \
118-
CURL_VERSION_UNDERSCORE=$(echo $CURL_VERSION | sed 's/\./_/g') && \
119-
curl -O -L https://github.com/curl/curl/releases/download/curl-${CURL_VERSION_UNDERSCORE}/curl-${CURL_VERSION}.tar.gz && \
120-
tar xfz curl-${CURL_VERSION}.tar.gz && \
121-
cd curl-${CURL_VERSION} && \
122-
CFLAGS=-fPIC ./configure --with-ssl=/usr/local/ssl/ --without-zstd --without-libpsl && \
123-
make -j8 && make install && \
124-
rm -rf /curl-${CURL_VERSION}.tar.gz /curl-${CURL_VERSION}
125-
126-
32+
git \
33+
zip \
34+
unzip \
35+
tar \
36+
pkg-config \
37+
ninja-build

pkg/deb/build-deb.sh

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,10 @@
2020

2121
set -e -x
2222

23+
if [[ $# -gt 0 ]]; then
24+
CMAKE_ARCH=$1
25+
fi
26+
2327
cd /pulsar-client-cpp
2428
SRC_ROOT_DIR=$(pwd)
2529
cd pkg/deb
@@ -37,12 +41,28 @@ cd BUILD
3741
tar xfz $SRC_ROOT_DIR/apache-pulsar-client-cpp-$POM_VERSION.tar.gz
3842
pushd $CPP_DIR
3943

40-
# link libraries for protoc
41-
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
44+
git clone https://github.com/microsoft/vcpkg.git
45+
# The cmake from debian:11 is 3.18, while vcpkg needs cmake >= 3.21 to build
46+
if [[ $CMAKE_ARCH ]]; then
47+
export CMAKE_VERSION=3.31.9
48+
curl -O -L https://github.com/Kitware/CMake/releases/download/v$CMAKE_VERSION/cmake-$CMAKE_VERSION-linux-$CMAKE_ARCH.tar.gz
49+
export PATH=$PWD/cmake-$CMAKE_VERSION-linux-$CMAKE_ARCH/bin/:$PATH
50+
tar zxf cmake-*.tar.gz
51+
fi
52+
cmake --version
4253

4354
chmod +x $(find . -name "*.sh")
44-
cmake . -DBUILD_TESTS=OFF -DBUILD_PERF_TOOLS=OFF -DLINK_STATIC=ON
45-
make -j 3
55+
if [[ $CMAKE_ARCH == "aarch64" ]]; then
56+
export VCPKG_FORCE_SYSTEM_BINARIES=1
57+
fi
58+
cmake -B build -DINTEGRATE_VCPKG=ON -DCMAKE_BUILD_TYPE=Release \
59+
-DBUILD_TESTS=OFF -DBUILD_DYNAMIC_LIB=ON -DBUILD_STATIC_LIB=ON
60+
cmake --build build -j8
61+
./build-support/merge_archives_vcpkg.sh $PWD/build
62+
63+
cp build/lib/libpulsar.a lib/libpulsar.a
64+
cp build/lib/libpulsar.so lib/libpulsar.so
65+
cp build/libpulsarwithdeps.a lib/libpulsarwithdeps.a
4666
popd
4767

4868
DEST_DIR=apache-pulsar-client

pkg/deb/docker-build-deb-arm64.sh

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,4 +27,5 @@ IMAGE_NAME=${1:-apachepulsar/pulsar-build:debian-9-2.11-arm64}
2727
docker run -v $ROOT_DIR:/pulsar-client-cpp \
2828
--env PLATFORM=arm64 \
2929
$IMAGE_NAME \
30-
/pulsar-client-cpp/pkg/deb/build-deb.sh
30+
/pulsar-client-cpp/pkg/deb/build-deb.sh \
31+
aarch64

pkg/deb/docker-build-deb-x86_64.sh

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,4 +27,5 @@ IMAGE_NAME=${1:-apachepulsar/pulsar-build:debian-9-2.11-x86_64}
2727
docker run -v $ROOT_DIR:/pulsar-client-cpp \
2828
--env PLATFORM=amd64 \
2929
$IMAGE_NAME \
30-
/pulsar-client-cpp/pkg/deb/build-deb.sh
30+
/pulsar-client-cpp/pkg/deb/build-deb.sh \
31+
x86_64

pkg/rpm/Dockerfile

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -30,16 +30,9 @@ RUN yum update -y && \
3030
rpm-build \
3131
which \
3232
createrepo \
33-
git \
34-
python3 \
35-
python3-pip
33+
git
3634
RUN dnf --enablerepo=powertools install -y libstdc++-static
3735

38-
RUN pip3 install pyyaml
39-
40-
ADD .build/dependencies.yaml /
41-
ADD .build/dep-version.py /usr/local/bin
42-
4336
# Vcpkg does not provide pre-built binaries for Arm architectures so we need to build vcpkg from source
4437
RUN yum install -y cmake
4538
RUN dnf --enablerepo=devel install -y ninja-build

0 commit comments

Comments
 (0)