33# Build protoc
44set -evux -o pipefail
55
6- PROTOBUF_VERSION=21.7
6+ PROTOBUF_VERSION=22.5
77
88# ARCH is x86_64 bit unless otherwise specified.
99ARCH=" ${ARCH:- x86_64} "
1010DOWNLOAD_DIR=/tmp/source
1111INSTALL_DIR=" /tmp/protobuf-cache/$PROTOBUF_VERSION /$( uname -s) -$ARCH "
12+ BUILDSCRIPTS_DIR=" $( cd " $( dirname " $0 " ) " && pwd) "
1213mkdir -p $DOWNLOAD_DIR
14+ cd " $DOWNLOAD_DIR "
1315
1416# Start with a sane default
1517NUM_CPU=4
@@ -26,27 +28,39 @@ if [ -f ${INSTALL_DIR}/bin/protoc ]; then
2628 echo " Not building protobuf. Already built"
2729# TODO(ejona): swap to `brew install --devel protobuf` once it is up-to-date
2830else
29- if [[ ! -d " $DOWNLOAD_DIR " / protobuf-" ${PROTOBUF_VERSION} " ]]; then
30- curl -Ls https://github.com/google/protobuf/releases/download/v${PROTOBUF_VERSION} /protobuf-all- ${PROTOBUF_VERSION} .tar.gz | tar xz -C $DOWNLOAD_DIR
31+ if [[ ! -d " protobuf-${PROTOBUF_VERSION} " ]]; then
32+ curl -Ls " https://github.com/google/protobuf/releases/download/v${PROTOBUF_VERSION} /protobuf-${PROTOBUF_VERSION} .tar.gz" | tar xz
3133 fi
32- pushd $DOWNLOAD_DIR /protobuf-${PROTOBUF_VERSION}
34+ # the same source dir is used for 32 and 64 bit builds, so we need to clean stale data first
35+ rm -rf " $DOWNLOAD_DIR /protobuf-${PROTOBUF_VERSION} /build"
36+ mkdir " $DOWNLOAD_DIR /protobuf-${PROTOBUF_VERSION} /build"
37+ pushd " $DOWNLOAD_DIR /protobuf-${PROTOBUF_VERSION} /build"
3338 # install here so we don't need sudo
3439 if [[ " $ARCH " == x86* ]]; then
35- ./configure CFLAGS=-m${ARCH#* _} CXXFLAGS=-m${ARCH#* _} --disable-shared \
36- --prefix=" $INSTALL_DIR "
37- elif [[ " $ARCH " == aarch* ]]; then
38- ./configure --disable-shared --host=aarch64-linux-gnu --prefix=" $INSTALL_DIR "
39- elif [[ " $ARCH " == ppc* ]]; then
40- ./configure --disable-shared --host=powerpc64le-linux-gnu --prefix=" $INSTALL_DIR "
41- elif [[ " $ARCH " == s390* ]]; then
42- ./configure --disable-shared --host=s390x-linux-gnu --prefix=" $INSTALL_DIR "
43- elif [[ " $ARCH " == loongarch* ]]; then
44- ./configure --disable-shared --host=loongarch64-unknown-linux-gnu --prefix=" $INSTALL_DIR "
40+ CFLAGS=-m${ARCH#* _} CXXFLAGS=-m${ARCH#* _} cmake .. \
41+ -DCMAKE_CXX_STANDARD=14 -Dprotobuf_BUILD_TESTS=OFF -DBUILD_SHARED_LIBS=OFF \
42+ -DCMAKE_INSTALL_PREFIX=" $INSTALL_DIR " -DABSL_INTERNAL_AT_LEAST_CXX17=0
43+ else
44+ if [[ " $ARCH " == aarch_64 ]]; then
45+ GCC_ARCH=aarch64-linux-gnu
46+ elif [[ " $ARCH " == ppcle_64 ]]; then
47+ GCC_ARCH=powerpc64le-linux-gnu
48+ elif [[ " $ARCH " == s390_64 ]]; then
49+ GCC_ARCH=s390x-linux-gnu
50+ elif [[ " $ARCH " == loongarch_64 ]]; then
51+ GCC_ARCH=loongarch64-unknown-linux-gnu
52+ else
53+ echo " Unknown architecture: $ARCH "
54+ exit 1
55+ fi
56+ cmake .. \
57+ -DCMAKE_CXX_STANDARD=14 -Dprotobuf_BUILD_TESTS=OFF -DBUILD_SHARED_LIBS=OFF \
58+ -DCMAKE_INSTALL_PREFIX=" $INSTALL_DIR " -Dcrosscompile_ARCH=" $GCC_ARCH " \
59+ -DCMAKE_TOOLCHAIN_FILE=$BUILDSCRIPTS_DIR /toolchain.cmake
4560 fi
46- # the same source dir is used for 32 and 64 bit builds, so we need to clean stale data first
47- make clean
48- make V=0 -j$NUM_CPU
49- make install
61+ cmake --build . -j " $NUM_CPU "
62+ cmake --install .
63+ [ -d " $INSTALL_DIR /lib64" ] && mv " $INSTALL_DIR /lib64" " $INSTALL_DIR /lib"
5064 popd
5165fi
5266
@@ -60,7 +74,7 @@ ln -s "$INSTALL_DIR" /tmp/protobuf
6074cat << EOF
6175To compile with the build dependencies:
6276
63- export LDFLAGS=-L /tmp/protobuf/lib
64- export CXXFLAGS=-I /tmp/protobuf/include
77+ export LDFLAGS=" $( PKG_CONFIG_PATH= /tmp/protobuf/lib/pkgconfig pkg-config --libs protobuf ) "
78+ export CXXFLAGS=" $( PKG_CONFIG_PATH= /tmp/protobuf/lib/pkgconfig pkg-config --cflags protobuf ) "
6579export LD_LIBRARY_PATH=/tmp/protobuf/lib
6680EOF
0 commit comments