-
Notifications
You must be signed in to change notification settings - Fork 62
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Fix Protobuf symbols not found in libpulsarwithdeps.a when building o…
…n macOS (#354) ### Motivation #290 brings a regression that on macOS, Protobuf is always found with CMake Config mode, which does not set the `Protobuf_LIBRARIES` variable so that the libpulsarwithdeps.a misses the symbols of Protobuf. ### Modifications When `LINK_STATIC` is ON, use CMake Module mode to find the Protobuf. Add `build-static-library.sh` to build libraries with static dependencies and verify these libraries in PR workflow. Upload the pre-built binaries in the build workflow.
- Loading branch information
1 parent
37ea769
commit f75b39b
Showing
6 changed files
with
258 additions
and
5 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -104,3 +104,5 @@ vcpkg_installed/ | |
.tests-container-id.txt | ||
Testing | ||
.test-token.txt | ||
pkg/mac/.build | ||
pkg/mac/.install |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -23,5 +23,5 @@ protobuf: 3.20.0 | |
zlib: 1.2.12 | ||
zstd: 1.5.2 | ||
snappy: 1.1.9 | ||
openssl: 1.1.1q | ||
openssl: 1.1.1v | ||
curl: 8.4.0 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,190 @@ | ||
#!/bin/bash | ||
# | ||
# Licensed to the Apache Software Foundation (ASF) under one | ||
# or more contributor license agreements. See the NOTICE file | ||
# distributed with this work for additional information | ||
# regarding copyright ownership. The ASF licenses this file | ||
# to you under the Apache License, Version 2.0 (the | ||
# "License"); you may not use this file except in compliance | ||
# with the License. You may obtain a copy of the License at | ||
# | ||
# http://www.apache.org/licenses/LICENSE-2.0 | ||
# | ||
# Unless required by applicable law or agreed to in writing, | ||
# software distributed under the License is distributed on an | ||
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | ||
# KIND, either express or implied. See the License for the | ||
# specific language governing permissions and limitations | ||
# under the License. | ||
# | ||
|
||
set -ex | ||
cd `dirname $0` | ||
|
||
pip3 install pyyaml | ||
|
||
MACOSX_DEPLOYMENT_TARGET=10.15 | ||
if [[ -z ${ARCH} ]]; then | ||
ARCH=`uname -m` | ||
fi | ||
|
||
BUILD_DIR=$PWD/.build | ||
INSTALL_DIR=$PWD/.install | ||
PREFIX=$BUILD_DIR/install | ||
mkdir -p $BUILD_DIR | ||
cp -f ../../build-support/dep-version.py $BUILD_DIR/ | ||
cp -f ../../dependencies.yaml $BUILD_DIR/ | ||
|
||
pushd $BUILD_DIR | ||
|
||
BOOST_VERSION=$(./dep-version.py boost) | ||
ZLIB_VERSION=$(./dep-version.py zlib) | ||
OPENSSL_VERSION=$(./dep-version.py openssl) | ||
PROTOBUF_VERSION=$(./dep-version.py protobuf) | ||
ZSTD_VERSION=$(./dep-version.py zstd) | ||
SNAPPY_VERSION=$(./dep-version.py snappy) | ||
CURL_VERSION=$(./dep-version.py curl) | ||
|
||
BOOST_VERSION_=${BOOST_VERSION//./_} | ||
if [ ! -f boost/.done ]; then | ||
echo "Building Boost $BOOST_VERSION" | ||
curl -O -L https://boostorg.jfrog.io/artifactory/main/release/${BOOST_VERSION}/source/boost_${BOOST_VERSION_}.tar.gz | ||
tar zxf boost_${BOOST_VERSION_}.tar.gz | ||
mkdir -p $PREFIX/include | ||
cp -rf boost_${BOOST_VERSION_}/boost $PREFIX/include/ | ||
mkdir -p boost | ||
touch boost/.done | ||
else | ||
echo "Using cached Boost $BOOST_VERSION" | ||
fi | ||
|
||
if [ ! -f zlib-${ZLIB_VERSION}/.done ]; then | ||
echo "Building ZLib $ZLIB_VERSION" | ||
curl -O -L https://zlib.net/fossils/zlib-${ZLIB_VERSION}.tar.gz | ||
tar zxf zlib-${ZLIB_VERSION}.tar.gz | ||
pushd zlib-$ZLIB_VERSION | ||
CFLAGS="-fPIC -O3 -arch ${ARCH} -mmacosx-version-min=${MACOSX_DEPLOYMENT_TARGET}" ./configure --prefix=$PREFIX | ||
make -j16 | ||
make install | ||
touch .done | ||
popd | ||
else | ||
echo "Using cached ZLib $ZLIB_VERSION" | ||
fi | ||
|
||
OPENSSL_VERSION_UNDERSCORE=$(echo $OPENSSL_VERSION | sed 's/\./_/g') | ||
if [ ! -f openssl-OpenSSL_${OPENSSL_VERSION_UNDERSCORE}.done ]; then | ||
echo "Building OpenSSL $OPENSSL_VERSION" | ||
curl -O -L https://github.com/openssl/openssl/archive/OpenSSL_$OPENSSL_VERSION_UNDERSCORE.tar.gz | ||
tar zxf OpenSSL_$OPENSSL_VERSION_UNDERSCORE.tar.gz | ||
|
||
pushd openssl-OpenSSL_${OPENSSL_VERSION_UNDERSCORE} | ||
if [[ $ARCH = 'arm64' ]]; then | ||
PLATFORM=darwin64-arm64-cc | ||
else | ||
PLATFORM=darwin64-x86_64-cc | ||
fi | ||
CFLAGS="-fPIC -mmacosx-version-min=${MACOSX_DEPLOYMENT_TARGET}" \ | ||
./Configure --prefix=$PREFIX no-shared no-unit-test $PLATFORM | ||
make -j8 >/dev/null | ||
make install_sw >/dev/null | ||
popd | ||
|
||
touch openssl-OpenSSL_${OPENSSL_VERSION_UNDERSCORE}.done | ||
else | ||
echo "Using cached OpenSSL $OPENSSL_VERSION" | ||
fi | ||
|
||
if [ ! -f protobuf-${PROTOBUF_VERSION}/.done ]; then | ||
echo "Building Protobuf $PROTOBUF_VERSION" | ||
curl -O -L https://github.com/google/protobuf/releases/download/v${PROTOBUF_VERSION}/protobuf-cpp-${PROTOBUF_VERSION}.tar.gz | ||
tar zxf protobuf-cpp-${PROTOBUF_VERSION}.tar.gz | ||
pushd protobuf-${PROTOBUF_VERSION} | ||
pushd cmake/ | ||
# Build protoc that can run on both x86 and arm architectures | ||
cmake -B build -DCMAKE_CXX_FLAGS="-fPIC -arch x86_64 -arch arm64 -mmacosx-version-min=${MACOSX_DEPLOYMENT_TARGET}" \ | ||
-Dprotobuf_BUILD_TESTS=OFF \ | ||
-DCMAKE_INSTALL_PREFIX=$PREFIX | ||
cmake --build build -j16 --target install | ||
popd | ||
|
||
# Retain the library for one architecture so that `ar` can work on the library | ||
pushd $PREFIX/lib | ||
mv libprotobuf.a libprotobuf_universal.a | ||
lipo libprotobuf_universal.a -thin ${ARCH} -output libprotobuf.a | ||
popd | ||
touch .done | ||
popd | ||
else | ||
echo "Using cached Protobuf $PROTOBUF_VERSION" | ||
fi | ||
|
||
if [ ! -f zstd-${ZSTD_VERSION}/.done ]; then | ||
echo "Building ZStd $ZSTD_VERSION" | ||
curl -O -L https://github.com/facebook/zstd/releases/download/v${ZSTD_VERSION}/zstd-${ZSTD_VERSION}.tar.gz | ||
tar zxf zstd-${ZSTD_VERSION}.tar.gz | ||
pushd zstd-${ZSTD_VERSION} | ||
CFLAGS="-fPIC -O3 -arch ${ARCH} -mmacosx-version-min=${MACOSX_DEPLOYMENT_TARGET}" PREFIX=$PREFIX \ | ||
make -j16 -C lib install-static install-includes | ||
touch .done | ||
popd | ||
else | ||
echo "Using cached ZStd $ZSTD_VERSION" | ||
fi | ||
|
||
if [ ! -f snappy-${SNAPPY_VERSION}/.done ]; then | ||
echo "Building Snappy $SNAPPY_VERSION" | ||
curl -O -L https://github.com/google/snappy/archive/refs/tags/${SNAPPY_VERSION}.tar.gz | ||
tar zxf ${SNAPPY_VERSION}.tar.gz | ||
pushd snappy-${SNAPPY_VERSION} | ||
CXXFLAGS="-fPIC -O3 -arch ${ARCH} -mmacosx-version-min=${MACOSX_DEPLOYMENT_TARGET}" \ | ||
cmake . -DCMAKE_INSTALL_PREFIX=$PREFIX -DSNAPPY_BUILD_TESTS=OFF -DSNAPPY_BUILD_BENCHMARKS=OFF | ||
make -j16 | ||
make install | ||
touch .done | ||
popd | ||
else | ||
echo "Using cached Snappy $SNAPPY_VERSION" | ||
fi | ||
|
||
if [ ! -f curl-${CURL_VERSION}/.done ]; then | ||
echo "Building LibCurl $CURL_VERSION" | ||
CURL_VERSION_=${CURL_VERSION//./_} | ||
curl -O -L https://github.com/curl/curl/releases/download/curl-${CURL_VERSION_}/curl-${CURL_VERSION}.tar.gz | ||
tar zxf curl-${CURL_VERSION}.tar.gz | ||
pushd curl-${CURL_VERSION} | ||
# Force the compiler to find the OpenSSL headers instead of the headers in the system path like /usr/local/include/openssl. | ||
cp -rf $PREFIX/include/openssl include/ | ||
CFLAGS="-I$PREFIX/include -fPIC -arch ${ARCH} -mmacosx-version-min=${MACOSX_DEPLOYMENT_TARGET}" \ | ||
./configure --with-ssl=$PREFIX \ | ||
--without-nghttp2 \ | ||
--without-libidn2 \ | ||
--disable-ldap \ | ||
--without-brotli \ | ||
--without-secure-transport \ | ||
--without-librtmp \ | ||
--disable-ipv6 \ | ||
--host=$ARCH-apple-darwin \ | ||
--prefix=$PREFIX | ||
make -j16 install | ||
touch .done | ||
popd | ||
else | ||
echo "Using cached LibCurl $CURL_VERSION" | ||
fi | ||
|
||
popd # pkg/mac | ||
cd ../../ # project root | ||
|
||
cmake -B build-static -DCMAKE_OSX_DEPLOYMENT_TARGET=$MACOSX_DEPLOYMENT_TARGET \ | ||
-DLINK_STATIC=ON \ | ||
-DBUILD_TESTS=OFF \ | ||
-DBUILD_DYNAMIC_LIB=ON \ | ||
-DBUILD_STATIC_LIB=ON \ | ||
-DCMAKE_OSX_ARCHITECTURES=${ARCH} \ | ||
-DCMAKE_PREFIX_PATH=$PREFIX \ | ||
-DOPENSSL_ROOT_DIR=$PREFIX \ | ||
-DPROTOC_PATH=$PREFIX/bin/protoc \ | ||
-DCMAKE_INSTALL_PREFIX=$INSTALL_DIR \ | ||
-DCMAKE_BUILD_TYPE=Release | ||
cmake --build build-static -j16 --target install |