mirror of https://github.com/grpc/grpc-java.git
Upgrade Protobuf C++ to 22.5 (#11961)
This commit is contained in:
parent
9406d3b2a0
commit
46485c8b62
|
|
@ -44,11 +44,11 @@ This section is only necessary if you are making changes to the code
|
||||||
generation. Most users only need to use `skipCodegen=true` as discussed above.
|
generation. Most users only need to use `skipCodegen=true` as discussed above.
|
||||||
|
|
||||||
### Build Protobuf
|
### Build Protobuf
|
||||||
The codegen plugin is C++ code and requires protobuf 21.7 or later.
|
The codegen plugin is C++ code and requires protobuf 22.5 or later.
|
||||||
|
|
||||||
For Linux, Mac and MinGW:
|
For Linux, Mac and MinGW:
|
||||||
```
|
```
|
||||||
$ PROTOBUF_VERSION=21.7
|
$ PROTOBUF_VERSION=22.5
|
||||||
$ curl -LO https://github.com/protocolbuffers/protobuf/releases/download/v$PROTOBUF_VERSION/protobuf-all-$PROTOBUF_VERSION.tar.gz
|
$ curl -LO https://github.com/protocolbuffers/protobuf/releases/download/v$PROTOBUF_VERSION/protobuf-all-$PROTOBUF_VERSION.tar.gz
|
||||||
$ tar xzf protobuf-all-$PROTOBUF_VERSION.tar.gz
|
$ tar xzf protobuf-all-$PROTOBUF_VERSION.tar.gz
|
||||||
$ cd protobuf-$PROTOBUF_VERSION
|
$ cd protobuf-$PROTOBUF_VERSION
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,11 @@ RUN mkdir -p "$ANDROID_HOME/cmdline-tools" && \
|
||||||
mv "$ANDROID_HOME/cmdline-tools/cmdline-tools" "$ANDROID_HOME/cmdline-tools/latest" && \
|
mv "$ANDROID_HOME/cmdline-tools/cmdline-tools" "$ANDROID_HOME/cmdline-tools/latest" && \
|
||||||
yes | "$ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager" --licenses
|
yes | "$ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager" --licenses
|
||||||
|
|
||||||
|
RUN curl -Ls https://github.com/Kitware/CMake/releases/download/v3.26.3/cmake-3.26.3-linux-x86_64.tar.gz | \
|
||||||
|
tar xz -C /var/local
|
||||||
|
|
||||||
# Install Maven
|
# Install Maven
|
||||||
RUN curl -Ls https://dlcdn.apache.org/maven/maven-3/3.8.8/binaries/apache-maven-3.8.8-bin.tar.gz | \
|
RUN curl -Ls https://dlcdn.apache.org/maven/maven-3/3.8.8/binaries/apache-maven-3.8.8-bin.tar.gz | \
|
||||||
tar xz -C /var/local
|
tar xz -C /var/local
|
||||||
ENV PATH /var/local/apache-maven-3.8.8/bin:$PATH
|
ENV PATH /var/local/cmake-3.26.3-linux-x86_64/bin:/var/local/apache-maven-3.8.8/bin:$PATH
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -10,5 +10,11 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
|
||||||
g++-aarch64-linux-gnu \
|
g++-aarch64-linux-gnu \
|
||||||
g++-powerpc64le-linux-gnu \
|
g++-powerpc64le-linux-gnu \
|
||||||
openjdk-8-jdk \
|
openjdk-8-jdk \
|
||||||
|
pkg-config \
|
||||||
&& \
|
&& \
|
||||||
rm -rf /var/lib/apt/lists/*
|
rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
RUN curl -Ls https://github.com/Kitware/CMake/releases/download/v3.26.3/cmake-3.26.3-linux-x86_64.tar.gz | \
|
||||||
|
tar xz -C /var/local
|
||||||
|
ENV PATH /var/local/cmake-3.26.3-linux-x86_64/bin:$PATH
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -9,5 +9,11 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
|
||||||
curl \
|
curl \
|
||||||
g++-s390x-linux-gnu \
|
g++-s390x-linux-gnu \
|
||||||
openjdk-8-jdk \
|
openjdk-8-jdk \
|
||||||
|
pkg-config \
|
||||||
&& \
|
&& \
|
||||||
rm -rf /var/lib/apt/lists/*
|
rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
RUN curl -Ls https://github.com/Kitware/CMake/releases/download/v3.26.3/cmake-3.26.3-linux-x86_64.tar.gz | \
|
||||||
|
tar xz -C /var/local
|
||||||
|
ENV PATH /var/local/cmake-3.26.3-linux-x86_64/bin:$PATH
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -7,8 +7,8 @@ set -exu -o pipefail
|
||||||
|
|
||||||
cd github/grpc-java
|
cd github/grpc-java
|
||||||
|
|
||||||
export LDFLAGS=-L/tmp/protobuf/lib
|
export LDFLAGS="$(PKG_CONFIG_PATH=/tmp/protobuf/lib/pkgconfig pkg-config --libs protobuf)"
|
||||||
export CXXFLAGS=-I/tmp/protobuf/include
|
export CXXFLAGS="$(PKG_CONFIG_PATH=/tmp/protobuf/lib/pkgconfig pkg-config --cflags protobuf)"
|
||||||
export LD_LIBRARY_PATH=/tmp/protobuf/lib
|
export LD_LIBRARY_PATH=/tmp/protobuf/lib
|
||||||
export OS_NAME=$(uname)
|
export OS_NAME=$(uname)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -9,9 +9,6 @@ BASE_DIR="$(pwd)"
|
||||||
|
|
||||||
cd "$BASE_DIR/github/grpc-java"
|
cd "$BASE_DIR/github/grpc-java"
|
||||||
|
|
||||||
export LDFLAGS=-L/tmp/protobuf/lib
|
|
||||||
export CXXFLAGS=-I/tmp/protobuf/include
|
|
||||||
export LD_LIBRARY_PATH=/tmp/protobuf/lib
|
|
||||||
export OS_NAME=$(uname)
|
export OS_NAME=$(uname)
|
||||||
|
|
||||||
cat <<EOF >> gradle.properties
|
cat <<EOF >> gradle.properties
|
||||||
|
|
@ -30,10 +27,18 @@ unzip -qd "${ANDROID_HOME}/cmdline-tools" cmdline.zip
|
||||||
rm cmdline.zip
|
rm cmdline.zip
|
||||||
mv "${ANDROID_HOME}/cmdline-tools/cmdline-tools" "${ANDROID_HOME}/cmdline-tools/latest"
|
mv "${ANDROID_HOME}/cmdline-tools/cmdline-tools" "${ANDROID_HOME}/cmdline-tools/latest"
|
||||||
(yes || true) | "${ANDROID_HOME}/cmdline-tools/latest/bin/sdkmanager" --licenses
|
(yes || true) | "${ANDROID_HOME}/cmdline-tools/latest/bin/sdkmanager" --licenses
|
||||||
|
curl -Ls https://github.com/Kitware/CMake/releases/download/v3.26.3/cmake-3.26.3-linux-x86_64.tar.gz | \
|
||||||
|
tar xz -C /tmp
|
||||||
|
export PATH=/tmp/cmake-3.26.3-linux-x86_64/bin:$PATH
|
||||||
|
|
||||||
# Proto deps
|
# Proto deps
|
||||||
buildscripts/make_dependencies.sh
|
buildscripts/make_dependencies.sh
|
||||||
|
|
||||||
|
sudo apt-get update && sudo apt-get install pkg-config
|
||||||
|
export LDFLAGS="$(PKG_CONFIG_PATH=/tmp/protobuf/lib/pkgconfig pkg-config --libs protobuf)"
|
||||||
|
export CXXFLAGS="$(PKG_CONFIG_PATH=/tmp/protobuf/lib/pkgconfig pkg-config --cflags protobuf)"
|
||||||
|
export LD_LIBRARY_PATH=/tmp/protobuf/lib
|
||||||
|
|
||||||
# Build Android with Java 11, this adds it to the PATH
|
# Build Android with Java 11, this adds it to the PATH
|
||||||
sudo update-java-alternatives --set java-1.11.0-openjdk-amd64
|
sudo update-java-alternatives --set java-1.11.0-openjdk-amd64
|
||||||
# Unset any existing JAVA_HOME env var to stop Gradle from using it
|
# Unset any existing JAVA_HOME env var to stop Gradle from using it
|
||||||
|
|
@ -98,6 +103,7 @@ cd $BASE_DIR/github/grpc-java
|
||||||
./gradlew clean
|
./gradlew clean
|
||||||
git checkout HEAD^
|
git checkout HEAD^
|
||||||
./gradlew --stop # use a new daemon to build the previous commit
|
./gradlew --stop # use a new daemon to build the previous commit
|
||||||
|
GRADLE_FLAGS="${GRADLE_FLAGS} -PskipCodegen=true" # skip codegen for build from previous commit since it wasn't built with --std=c++14 when making this change
|
||||||
./gradlew publishToMavenLocal $GRADLE_FLAGS
|
./gradlew publishToMavenLocal $GRADLE_FLAGS
|
||||||
cd examples/android/helloworld/
|
cd examples/android/helloworld/
|
||||||
../../gradlew build $GRADLE_FLAGS
|
../../gradlew build $GRADLE_FLAGS
|
||||||
|
|
|
||||||
|
|
@ -51,9 +51,9 @@ fi
|
||||||
export GRADLE_OPTS="-Dorg.gradle.jvmargs='-Xmx1g'"
|
export GRADLE_OPTS="-Dorg.gradle.jvmargs='-Xmx1g'"
|
||||||
|
|
||||||
# Make protobuf discoverable by :grpc-compiler
|
# Make protobuf discoverable by :grpc-compiler
|
||||||
export LD_LIBRARY_PATH=/tmp/protobuf/lib
|
export LDFLAGS="$(PKG_CONFIG_PATH=/tmp/protobuf/lib/pkgconfig pkg-config --libs protobuf)"
|
||||||
export LDFLAGS=-L/tmp/protobuf/lib
|
export CXXFLAGS="$(PKG_CONFIG_PATH=/tmp/protobuf/lib/pkgconfig pkg-config --cflags protobuf)"
|
||||||
export CXXFLAGS="-I/tmp/protobuf/include"
|
export LIBRARY_PATH=/tmp/protobuf/lib
|
||||||
|
|
||||||
./gradlew grpc-compiler:clean $GRADLE_FLAGS
|
./gradlew grpc-compiler:clean $GRADLE_FLAGS
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
# Location of the continuous shell script in repository.
|
# Location of the continuous shell script in repository.
|
||||||
build_file: "grpc-java/buildscripts/kokoro/windows.bat"
|
build_file: "grpc-java/buildscripts/kokoro/windows.bat"
|
||||||
timeout_mins: 45
|
timeout_mins: 90
|
||||||
|
|
||||||
# We always build mvn artifacts.
|
# We always build mvn artifacts.
|
||||||
action {
|
action {
|
||||||
|
|
|
||||||
|
|
@ -15,19 +15,21 @@ set ESCWORKSPACE=%WORKSPACE:\=\\%
|
||||||
|
|
||||||
@rem Clear JAVA_HOME to prevent a different Java version from being used
|
@rem Clear JAVA_HOME to prevent a different Java version from being used
|
||||||
set JAVA_HOME=
|
set JAVA_HOME=
|
||||||
set PATH=C:\Program Files\OpenJDK\openjdk-11.0.12_7\bin;%PATH%
|
|
||||||
|
|
||||||
mkdir grpc-java-helper32
|
mkdir grpc-java-helper32
|
||||||
cd grpc-java-helper32
|
cd grpc-java-helper32
|
||||||
call "%VS140COMNTOOLS%\vsvars32.bat" || exit /b 1
|
call "%VS170COMNTOOLS%\..\..\VC\Auxiliary\Build\vcvars32.bat" || exit /b 1
|
||||||
call "%WORKSPACE%\buildscripts\make_dependencies.bat" || exit /b 1
|
call "%WORKSPACE%\buildscripts\make_dependencies.bat" || exit /b 1
|
||||||
|
|
||||||
cd "%WORKSPACE%"
|
cd "%WORKSPACE%"
|
||||||
|
|
||||||
SET TARGET_ARCH=x86_32
|
SET TARGET_ARCH=x86_32
|
||||||
SET FAIL_ON_WARNINGS=true
|
SET FAIL_ON_WARNINGS=true
|
||||||
SET VC_PROTOBUF_LIBS=%ESCWORKSPACE%\\grpc-java-helper32\\protobuf-%PROTOBUF_VER%\\build\\Release
|
SET PROTOBUF_VER=22.5
|
||||||
SET VC_PROTOBUF_INCLUDE=%ESCWORKSPACE%\\grpc-java-helper32\\protobuf-%PROTOBUF_VER%\\build\\include
|
SET PKG_CONFIG_PATH=%ESCWORKSPACE%\\grpc-java-helper32\\protobuf-%PROTOBUF_VER%\\build\\protobuf-%PROTOBUF_VER%\\lib\\pkgconfig
|
||||||
|
SET VC_PROTOBUF_LIBS=/LIBPATH:%ESCWORKSPACE%\\grpc-java-helper32\\protobuf-%PROTOBUF_VER%\\build\\protobuf-%PROTOBUF_VER%\\lib
|
||||||
|
SET VC_PROTOBUF_INCLUDE=%ESCWORKSPACE%\\grpc-java-helper32\\protobuf-%PROTOBUF_VER%\\build\\protobuf-%PROTOBUF_VER%\\include
|
||||||
|
call :Get_Libs
|
||||||
SET GRADLE_FLAGS=-PtargetArch=%TARGET_ARCH% -PfailOnWarnings=%FAIL_ON_WARNINGS% -PvcProtobufLibs=%VC_PROTOBUF_LIBS% -PvcProtobufInclude=%VC_PROTOBUF_INCLUDE% -PskipAndroid=true
|
SET GRADLE_FLAGS=-PtargetArch=%TARGET_ARCH% -PfailOnWarnings=%FAIL_ON_WARNINGS% -PvcProtobufLibs=%VC_PROTOBUF_LIBS% -PvcProtobufInclude=%VC_PROTOBUF_INCLUDE% -PskipAndroid=true
|
||||||
SET GRADLE_OPTS="-Dorg.gradle.jvmargs='-Xmx1g'"
|
SET GRADLE_OPTS="-Dorg.gradle.jvmargs='-Xmx1g'"
|
||||||
|
|
||||||
|
|
@ -50,3 +52,32 @@ IF NOT %GRADLEEXIT% == 0 (
|
||||||
cmd.exe /C "%WORKSPACE%\gradlew.bat --stop"
|
cmd.exe /C "%WORKSPACE%\gradlew.bat --stop"
|
||||||
|
|
||||||
cmd.exe /C "%WORKSPACE%\gradlew.bat %GRADLE_FLAGS% -Dorg.gradle.parallel=false -PrepositoryDir=%WORKSPACE%\artifacts clean grpc-compiler:build grpc-compiler:publish" || exit /b 1
|
cmd.exe /C "%WORKSPACE%\gradlew.bat %GRADLE_FLAGS% -Dorg.gradle.parallel=false -PrepositoryDir=%WORKSPACE%\artifacts clean grpc-compiler:build grpc-compiler:publish" || exit /b 1
|
||||||
|
|
||||||
|
goto :eof
|
||||||
|
:Get_Libs
|
||||||
|
SetLocal EnableDelayedExpansion
|
||||||
|
set "libs_list="
|
||||||
|
for /f "tokens=*" %%a in ('pkg-config --libs protobuf') do (
|
||||||
|
for %%b in (%%a) do (
|
||||||
|
set lib=%%b
|
||||||
|
set libfirst2char=!lib:~0,2!
|
||||||
|
if !libfirst2char!==-l (
|
||||||
|
@rem remove the leading -l
|
||||||
|
set lib=!lib:~2!
|
||||||
|
@rem remove spaces
|
||||||
|
set lib=!lib: =!
|
||||||
|
@rem Because protobuf is specified as libprotobuf and elsewhere
|
||||||
|
if !lib! NEQ protobuf (
|
||||||
|
set lib=!lib!.lib
|
||||||
|
if "!libs_list!"=="" (
|
||||||
|
set libs_list=!lib!
|
||||||
|
) else (
|
||||||
|
set libs_list=!libs_list!,!lib!
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
EndLocal & set "VC_PROTOBUF_LIBS=%VC_PROTOBUF_LIBS%,%libs_list%"
|
||||||
|
exit /b 0
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -14,19 +14,21 @@ set ESCWORKSPACE=%WORKSPACE:\=\\%
|
||||||
|
|
||||||
@rem Clear JAVA_HOME to prevent a different Java version from being used
|
@rem Clear JAVA_HOME to prevent a different Java version from being used
|
||||||
set JAVA_HOME=
|
set JAVA_HOME=
|
||||||
set PATH=C:\Program Files\OpenJDK\openjdk-11.0.12_7\bin;%PATH%
|
|
||||||
|
|
||||||
mkdir grpc-java-helper64
|
mkdir grpc-java-helper64
|
||||||
cd grpc-java-helper64
|
cd grpc-java-helper64
|
||||||
call "%VS140COMNTOOLS%\..\..\VC\bin\amd64\vcvars64.bat" || exit /b 1
|
call "%VS170COMNTOOLS%\..\..\VC\Auxiliary\Build\vcvars64.bat" || exit /b 1
|
||||||
call "%WORKSPACE%\buildscripts\make_dependencies.bat" || exit /b 1
|
call "%WORKSPACE%\buildscripts\make_dependencies.bat" || exit /b 1
|
||||||
|
|
||||||
cd "%WORKSPACE%"
|
cd "%WORKSPACE%"
|
||||||
|
|
||||||
SET TARGET_ARCH=x86_64
|
SET TARGET_ARCH=x86_64
|
||||||
SET FAIL_ON_WARNINGS=true
|
SET FAIL_ON_WARNINGS=true
|
||||||
SET VC_PROTOBUF_LIBS=%ESCWORKSPACE%\\grpc-java-helper64\\protobuf-%PROTOBUF_VER%\\build\\Release
|
SET PROTOBUF_VER=22.5
|
||||||
SET VC_PROTOBUF_INCLUDE=%ESCWORKSPACE%\\grpc-java-helper64\\protobuf-%PROTOBUF_VER%\\build\\include
|
SET PKG_CONFIG_PATH=%ESCWORKSPACE%\\grpc-java-helper64\\protobuf-%PROTOBUF_VER%\\build\\protobuf-%PROTOBUF_VER%\\lib\\pkgconfig
|
||||||
|
SET VC_PROTOBUF_LIBS=/LIBPATH:%ESCWORKSPACE%\\grpc-java-helper64\\protobuf-%PROTOBUF_VER%\\build\\protobuf-%PROTOBUF_VER%\\lib
|
||||||
|
SET VC_PROTOBUF_INCLUDE=%ESCWORKSPACE%\\grpc-java-helper64\\protobuf-%PROTOBUF_VER%\\build\\protobuf-%PROTOBUF_VER%\\include
|
||||||
|
call :Get_Libs
|
||||||
SET GRADLE_FLAGS=-PtargetArch=%TARGET_ARCH% -PfailOnWarnings=%FAIL_ON_WARNINGS% -PvcProtobufLibs=%VC_PROTOBUF_LIBS% -PvcProtobufInclude=%VC_PROTOBUF_INCLUDE% -PskipAndroid=true
|
SET GRADLE_FLAGS=-PtargetArch=%TARGET_ARCH% -PfailOnWarnings=%FAIL_ON_WARNINGS% -PvcProtobufLibs=%VC_PROTOBUF_LIBS% -PvcProtobufInclude=%VC_PROTOBUF_INCLUDE% -PskipAndroid=true
|
||||||
SET GRADLE_OPTS="-Dorg.gradle.jvmargs='-Xmx1g'"
|
SET GRADLE_OPTS="-Dorg.gradle.jvmargs='-Xmx1g'"
|
||||||
|
|
||||||
|
|
@ -34,3 +36,32 @@ SET GRADLE_OPTS="-Dorg.gradle.jvmargs='-Xmx1g'"
|
||||||
cmd.exe /C "%WORKSPACE%\gradlew.bat --stop"
|
cmd.exe /C "%WORKSPACE%\gradlew.bat --stop"
|
||||||
|
|
||||||
cmd.exe /C "%WORKSPACE%\gradlew.bat %GRADLE_FLAGS% -Dorg.gradle.parallel=false -PrepositoryDir=%WORKSPACE%\artifacts grpc-compiler:clean grpc-compiler:build grpc-compiler:publish" || exit /b 1
|
cmd.exe /C "%WORKSPACE%\gradlew.bat %GRADLE_FLAGS% -Dorg.gradle.parallel=false -PrepositoryDir=%WORKSPACE%\artifacts grpc-compiler:clean grpc-compiler:build grpc-compiler:publish" || exit /b 1
|
||||||
|
|
||||||
|
goto :eof
|
||||||
|
:Get_Libs
|
||||||
|
SetLocal EnableDelayedExpansion
|
||||||
|
set "libs_list="
|
||||||
|
for /f "tokens=*" %%a in ('pkg-config --libs protobuf') do (
|
||||||
|
for %%b in (%%a) do (
|
||||||
|
set lib=%%b
|
||||||
|
set libfirst2char=!lib:~0,2!
|
||||||
|
if !libfirst2char!==-l (
|
||||||
|
@rem remove the leading -l
|
||||||
|
set lib=!lib:~2!
|
||||||
|
@rem remove spaces
|
||||||
|
set lib=!lib: =!
|
||||||
|
@rem Because protobuf is specified as libprotobuf and elsewhere
|
||||||
|
if !lib! NEQ protobuf (
|
||||||
|
set lib=!lib!.lib
|
||||||
|
if "!libs_list!"=="" (
|
||||||
|
set libs_list=!lib!
|
||||||
|
) else (
|
||||||
|
set libs_list=!libs_list!,!lib!
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
EndLocal & set "VC_PROTOBUF_LIBS=%VC_PROTOBUF_LIBS%,%libs_list%"
|
||||||
|
exit /b 0
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,16 @@
|
||||||
set PROTOBUF_VER=21.7
|
choco install -y pkgconfiglite
|
||||||
set CMAKE_NAME=cmake-3.3.2-win32-x86
|
choco install -y openjdk --version=17.0
|
||||||
|
set PATH=%PATH%;"c:\Program Files\OpenJDK\jdk-17\bin"
|
||||||
|
set PROTOBUF_VER=22.5
|
||||||
|
set ABSL_VERSION=20230125.4
|
||||||
|
set CMAKE_NAME=cmake-3.26.3-windows-x86_64
|
||||||
|
|
||||||
if not exist "protobuf-%PROTOBUF_VER%\build\Release\" (
|
if not exist "protobuf-%PROTOBUF_VER%\build\Release\" (
|
||||||
call :installProto || exit /b 1
|
call :installProto || exit /b 1
|
||||||
)
|
)
|
||||||
|
|
||||||
echo Compile gRPC-Java with something like:
|
echo Compile gRPC-Java with something like:
|
||||||
echo -PtargetArch=x86_32 -PvcProtobufLibs=%cd%\protobuf-%PROTOBUF_VER%\build\Release -PvcProtobufInclude=%cd%\protobuf-%PROTOBUF_VER%\build\include
|
echo -PtargetArch=x86_32 -PvcProtobufLibPath=%cd%\protobuf-%PROTOBUF_VER%\build\protobuf-%PROTOBUF_VER%\lib -PvcProtobufInclude=%cd%\protobuf-%PROTOBUF_VER%\build\protobuf-%PROTOBUF_VER%\include -PvcProtobufLibs=insert-list-of-libs-from-pkg-config-output-here
|
||||||
goto :eof
|
goto :eof
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -20,25 +24,35 @@ if not exist "%CMAKE_NAME%" (
|
||||||
set PATH=%PATH%;%cd%\%CMAKE_NAME%\bin
|
set PATH=%PATH%;%cd%\%CMAKE_NAME%\bin
|
||||||
:hasCmake
|
:hasCmake
|
||||||
@rem GitHub requires TLSv1.2, and for whatever reason our powershell doesn't have it enabled
|
@rem GitHub requires TLSv1.2, and for whatever reason our powershell doesn't have it enabled
|
||||||
powershell -command "$ErrorActionPreference = 'stop'; & { [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 ; iwr https://github.com/google/protobuf/archive/v%PROTOBUF_VER%.zip -OutFile protobuf.zip }" || exit /b 1
|
powershell -command "$ProgressPreference = 'SilentlyContinue'; $ErrorActionPreference = 'stop'; & { [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 ; iwr https://github.com/google/protobuf/releases/download/v%PROTOBUF_VER%/protobuf-%PROTOBUF_VER%.zip -OutFile protobuf.zip }" || exit /b 1
|
||||||
powershell -command "$ErrorActionPreference = 'stop'; & { Add-Type -AssemblyName System.IO.Compression.FileSystem; [System.IO.Compression.ZipFile]::ExtractToDirectory('protobuf.zip', '.') }" || exit /b 1
|
powershell -command "$ErrorActionPreference = 'stop'; & { Add-Type -AssemblyName System.IO.Compression.FileSystem; [System.IO.Compression.ZipFile]::ExtractToDirectory('protobuf.zip', '.') }" || exit /b 1
|
||||||
del protobuf.zip
|
del protobuf.zip
|
||||||
|
powershell -command "$ProgressPreference = 'SilentlyContinue'; $ErrorActionPreference = 'stop'; & { [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 ; iwr https://github.com/abseil/abseil-cpp/archive/refs/tags/%ABSL_VERSION%.zip -OutFile absl.zip }" || exit /b 1
|
||||||
|
powershell -command "$ErrorActionPreference = 'stop'; & { Add-Type -AssemblyName System.IO.Compression.FileSystem; [System.IO.Compression.ZipFile]::ExtractToDirectory('absl.zip', '.') }" || exit /b 1
|
||||||
|
del absl.zip
|
||||||
|
rmdir protobuf-%PROTOBUF_VER%\third_party\abseil-cpp
|
||||||
|
move abseil-cpp-%ABSL_VERSION% protobuf-%PROTOBUF_VER%\third_party\abseil-cpp
|
||||||
mkdir protobuf-%PROTOBUF_VER%\build
|
mkdir protobuf-%PROTOBUF_VER%\build
|
||||||
pushd protobuf-%PROTOBUF_VER%\build
|
pushd protobuf-%PROTOBUF_VER%\build
|
||||||
|
|
||||||
@rem Workaround https://github.com/protocolbuffers/protobuf/issues/10174
|
|
||||||
powershell -command "(Get-Content ..\cmake\extract_includes.bat.in) -replace '\.\.\\', '' | Out-File -encoding ascii ..\cmake\extract_includes.bat.in"
|
|
||||||
@rem cmake does not detect x86_64 from the vcvars64.bat variables.
|
@rem cmake does not detect x86_64 from the vcvars64.bat variables.
|
||||||
@rem If vcvars64.bat has set PLATFORM to X64, then inform cmake to use the Win64 version of VS
|
@rem If vcvars64.bat has set PLATFORM to X64, then inform cmake to use the Win64 version of VS, likewise for x32
|
||||||
if "%PLATFORM%" == "X64" (
|
if "%PLATFORM%" == "x64" (
|
||||||
@rem Note the space
|
SET CMAKE_VSARCH=-A x64
|
||||||
SET CMAKE_VSARCH= Win64
|
) else if "%PLATFORM%" == "x86" (
|
||||||
|
@rem -A x86 doesn't work: https://github.com/microsoft/vcpkg/issues/15465
|
||||||
|
SET CMAKE_VSARCH=-DCMAKE_GENERATOR_PLATFORM=WIN32
|
||||||
) else (
|
) else (
|
||||||
SET CMAKE_VSARCH=
|
SET CMAKE_VSARCH=
|
||||||
)
|
)
|
||||||
cmake -Dprotobuf_BUILD_TESTS=OFF -G "Visual Studio %VisualStudioVersion:~0,2%%CMAKE_VSARCH%" .. || exit /b 1
|
for /f "tokens=4 delims=\" %%a in ("%VCINSTALLDIR%") do (
|
||||||
msbuild /maxcpucount /p:Configuration=Release /verbosity:minimal libprotoc.vcxproj || exit /b 1
|
SET VC_YEAR=%%a
|
||||||
call extract_includes.bat || exit /b 1
|
)
|
||||||
|
for /f "tokens=1 delims=." %%a in ("%VisualStudioVersion%") do (
|
||||||
|
SET visual_studio_major_version=%%a
|
||||||
|
)
|
||||||
|
cmake -Dprotobuf_BUILD_TESTS=OFF -DCMAKE_INSTALL_PREFIX=%cd%\protobuf-%PROTOBUF_VER% -DCMAKE_PREFIX_PATH=%cd%\protobuf-%PROTOBUF_VER% -G "Visual Studio %visual_studio_major_version% %VC_YEAR%" %CMAKE_VSARCH% .. || exit /b 1
|
||||||
|
cmake --build . --config Release --target install || exit /b 1
|
||||||
popd
|
popd
|
||||||
goto :eof
|
goto :eof
|
||||||
|
|
||||||
|
|
@ -49,3 +63,4 @@ powershell -command "$ErrorActionPreference = 'stop'; & { iwr https://cmake.org/
|
||||||
powershell -command "$ErrorActionPreference = 'stop'; & { Add-Type -AssemblyName System.IO.Compression.FileSystem; [System.IO.Compression.ZipFile]::ExtractToDirectory('cmake.zip', '.') }" || exit /b 1
|
powershell -command "$ErrorActionPreference = 'stop'; & { Add-Type -AssemblyName System.IO.Compression.FileSystem; [System.IO.Compression.ZipFile]::ExtractToDirectory('cmake.zip', '.') }" || exit /b 1
|
||||||
del cmake.zip
|
del cmake.zip
|
||||||
goto :eof
|
goto :eof
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,13 +3,17 @@
|
||||||
# Build protoc
|
# Build protoc
|
||||||
set -evux -o pipefail
|
set -evux -o pipefail
|
||||||
|
|
||||||
PROTOBUF_VERSION=21.7
|
PROTOBUF_VERSION=22.5
|
||||||
|
ABSL_VERSION=20230125.4
|
||||||
|
CMAKE_VERSION=3.26.3
|
||||||
|
|
||||||
# ARCH is x86_64 bit unless otherwise specified.
|
# ARCH is x86_64 bit unless otherwise specified.
|
||||||
ARCH="${ARCH:-x86_64}"
|
ARCH="${ARCH:-x86_64}"
|
||||||
DOWNLOAD_DIR=/tmp/source
|
DOWNLOAD_DIR=/tmp/source
|
||||||
INSTALL_DIR="/tmp/protobuf-cache/$PROTOBUF_VERSION/$(uname -s)-$ARCH"
|
INSTALL_DIR="/tmp/protobuf-cache/$PROTOBUF_VERSION/$(uname -s)-$ARCH"
|
||||||
|
BUILDSCRIPTS_DIR="$(cd "$(dirname "$0")" && pwd)"
|
||||||
mkdir -p $DOWNLOAD_DIR
|
mkdir -p $DOWNLOAD_DIR
|
||||||
|
cd "$DOWNLOAD_DIR"
|
||||||
|
|
||||||
# Start with a sane default
|
# Start with a sane default
|
||||||
NUM_CPU=4
|
NUM_CPU=4
|
||||||
|
|
@ -26,27 +30,46 @@ if [ -f ${INSTALL_DIR}/bin/protoc ]; then
|
||||||
echo "Not building protobuf. Already built"
|
echo "Not building protobuf. Already built"
|
||||||
# TODO(ejona): swap to `brew install --devel protobuf` once it is up-to-date
|
# TODO(ejona): swap to `brew install --devel protobuf` once it is up-to-date
|
||||||
else
|
else
|
||||||
if [[ ! -d "$DOWNLOAD_DIR"/protobuf-"${PROTOBUF_VERSION}" ]]; then
|
if [[ ! -d "protobuf-${PROTOBUF_VERSION}" ]]; then
|
||||||
curl -Ls https://github.com/google/protobuf/releases/download/v${PROTOBUF_VERSION}/protobuf-all-${PROTOBUF_VERSION}.tar.gz | tar xz -C $DOWNLOAD_DIR
|
curl -Ls "https://github.com/google/protobuf/releases/download/v${PROTOBUF_VERSION}/protobuf-${PROTOBUF_VERSION}.tar.gz" | tar xz
|
||||||
fi
|
curl -Ls "https://github.com/abseil/abseil-cpp/archive/refs/tags/${ABSL_VERSION}.tar.gz" | tar xz
|
||||||
pushd $DOWNLOAD_DIR/protobuf-${PROTOBUF_VERSION}
|
rmdir "protobuf-$PROTOBUF_VERSION/third_party/abseil-cpp"
|
||||||
# install here so we don't need sudo
|
mv "abseil-cpp-$ABSL_VERSION" "protobuf-$PROTOBUF_VERSION/third_party/abseil-cpp"
|
||||||
if [[ "$ARCH" == x86* ]]; then
|
|
||||||
./configure CFLAGS=-m${ARCH#*_} CXXFLAGS=-m${ARCH#*_} --disable-shared \
|
|
||||||
--prefix="$INSTALL_DIR"
|
|
||||||
elif [[ "$ARCH" == aarch* ]]; then
|
|
||||||
./configure --disable-shared --host=aarch64-linux-gnu --prefix="$INSTALL_DIR"
|
|
||||||
elif [[ "$ARCH" == ppc* ]]; then
|
|
||||||
./configure --disable-shared --host=powerpc64le-linux-gnu --prefix="$INSTALL_DIR"
|
|
||||||
elif [[ "$ARCH" == s390* ]]; then
|
|
||||||
./configure --disable-shared --host=s390x-linux-gnu --prefix="$INSTALL_DIR"
|
|
||||||
elif [[ "$ARCH" == loongarch* ]]; then
|
|
||||||
./configure --disable-shared --host=loongarch64-unknown-linux-gnu --prefix="$INSTALL_DIR"
|
|
||||||
fi
|
fi
|
||||||
# the same source dir is used for 32 and 64 bit builds, so we need to clean stale data first
|
# the same source dir is used for 32 and 64 bit builds, so we need to clean stale data first
|
||||||
make clean
|
rm -rf "$DOWNLOAD_DIR/protobuf-${PROTOBUF_VERSION}/build"
|
||||||
make V=0 -j$NUM_CPU
|
mkdir "$DOWNLOAD_DIR/protobuf-${PROTOBUF_VERSION}/build"
|
||||||
make install
|
pushd "$DOWNLOAD_DIR/protobuf-${PROTOBUF_VERSION}/build"
|
||||||
|
# install here so we don't need sudo
|
||||||
|
if [[ "$ARCH" == x86* ]]; then
|
||||||
|
CFLAGS=-m${ARCH#*_} CXXFLAGS=-m${ARCH#*_} cmake .. \
|
||||||
|
-DCMAKE_CXX_STANDARD=14 -Dprotobuf_BUILD_TESTS=OFF -DBUILD_SHARED_LIBS=OFF \
|
||||||
|
-DCMAKE_INSTALL_PREFIX="$INSTALL_DIR" -DABSL_INTERNAL_AT_LEAST_CXX17=0 \
|
||||||
|
-B. || exit 1
|
||||||
|
else
|
||||||
|
if [[ "$ARCH" == aarch_64 ]]; then
|
||||||
|
GCC_ARCH=aarch64-linux-gnu
|
||||||
|
elif [[ "$ARCH" == ppcle_64 ]]; then
|
||||||
|
GCC_ARCH=powerpc64le-linux-gnu
|
||||||
|
elif [[ "$ARCH" == s390_64 ]]; then
|
||||||
|
GCC_ARCH=s390x-linux-gnu
|
||||||
|
elif [[ "$ARCH" == loongarch_64 ]]; then
|
||||||
|
GCC_ARCH=loongarch64-unknown-linux-gnu
|
||||||
|
else
|
||||||
|
echo "Unknown architecture: $ARCH"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
cmake .. \
|
||||||
|
-DCMAKE_CXX_STANDARD=14 -Dprotobuf_BUILD_TESTS=OFF -DBUILD_SHARED_LIBS=OFF \
|
||||||
|
-DCMAKE_INSTALL_PREFIX="$INSTALL_DIR" -DABSL_INTERNAL_AT_LEAST_CXX17=0 \
|
||||||
|
-Dcrosscompile_ARCH="$GCC_ARCH" \
|
||||||
|
-DCMAKE_TOOLCHAIN_FILE=$BUILDSCRIPTS_DIR/toolchain.cmake \
|
||||||
|
-B. || exit 1
|
||||||
|
fi
|
||||||
|
export CMAKE_BUILD_PARALLEL_LEVEL="$NUM_CPU"
|
||||||
|
cmake --build . || exit 1
|
||||||
|
cmake --install . || exit 1
|
||||||
|
[ -d "$INSTALL_DIR/lib64" ] && mv "$INSTALL_DIR/lib64" "$INSTALL_DIR/lib"
|
||||||
popd
|
popd
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
@ -60,7 +83,8 @@ ln -s "$INSTALL_DIR" /tmp/protobuf
|
||||||
cat <<EOF
|
cat <<EOF
|
||||||
To compile with the build dependencies:
|
To compile with the build dependencies:
|
||||||
|
|
||||||
export LDFLAGS=-L/tmp/protobuf/lib
|
export LDFLAGS="$(PKG_CONFIG_PATH=/tmp/protobuf/lib/pkgconfig pkg-config --libs protobuf)"
|
||||||
export CXXFLAGS=-I/tmp/protobuf/include
|
export CXXFLAGS="$(PKG_CONFIG_PATH=/tmp/protobuf/lib/pkgconfig pkg-config --cflags protobuf)"
|
||||||
|
export LIBRARY_PATH=/tmp/protobuf/lib
|
||||||
export LD_LIBRARY_PATH=/tmp/protobuf/lib
|
export LD_LIBRARY_PATH=/tmp/protobuf/lib
|
||||||
EOF
|
EOF
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,9 @@
|
||||||
|
set(CMAKE_SYSTEM_NAME Linux)
|
||||||
|
|
||||||
|
set(CMAKE_C_COMPILER "${crosscompile_ARCH}-gcc")
|
||||||
|
set(CMAKE_CXX_COMPILER "${crosscompile_ARCH}-g++")
|
||||||
|
set(CMAKE_FIND_ROOT_PATH "/usr/${crosscompile_ARCH}/")
|
||||||
|
|
||||||
|
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
|
||||||
|
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
|
||||||
|
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
|
||||||
|
|
@ -100,19 +100,20 @@ model {
|
||||||
all {
|
all {
|
||||||
if (toolChain in Gcc || toolChain in Clang) {
|
if (toolChain in Gcc || toolChain in Clang) {
|
||||||
cppCompiler.define("GRPC_VERSION", version)
|
cppCompiler.define("GRPC_VERSION", version)
|
||||||
cppCompiler.args "--std=c++0x"
|
cppCompiler.args "--std=c++14"
|
||||||
addEnvArgs("CXXFLAGS", cppCompiler.args)
|
addEnvArgs("CXXFLAGS", cppCompiler.args)
|
||||||
addEnvArgs("CPPFLAGS", cppCompiler.args)
|
addEnvArgs("CPPFLAGS", cppCompiler.args)
|
||||||
if (osdetector.os == "osx") {
|
if (osdetector.os == "osx") {
|
||||||
cppCompiler.args "-mmacosx-version-min=10.7", "-stdlib=libc++"
|
cppCompiler.args "-mmacosx-version-min=10.7", "-stdlib=libc++"
|
||||||
|
linker.args "-framework", "CoreFoundation"
|
||||||
addLibraryIfNotLinked('protoc', linker.args)
|
addLibraryIfNotLinked('protoc', linker.args)
|
||||||
addLibraryIfNotLinked('protobuf', linker.args)
|
addLibraryIfNotLinked('protobuf', linker.args)
|
||||||
} else if (osdetector.os == "windows") {
|
} else if (osdetector.os == "windows") {
|
||||||
linker.args "-static", "-lprotoc", "-lprotobuf", "-static-libgcc", "-static-libstdc++",
|
linker.args "-static", "-lprotoc", "-lprotobuf", "-static-libgcc", "-static-libstdc++",
|
||||||
"-s"
|
"-s"
|
||||||
} else if (osdetector.arch == "ppcle_64") {
|
} else if (osdetector.arch == "ppcle_64") {
|
||||||
linker.args "-Wl,-Bstatic", "-lprotoc", "-lprotobuf", "-Wl,-Bdynamic", "-lpthread", "-s"
|
linker.args "-Wl,-Bstatic", "-lprotoc", "-lprotobuf", "-Wl,-Bdynamic", "-lpthread", "-s"
|
||||||
} else {
|
} else {
|
||||||
// Link protoc, protobuf, libgcc and libstdc++ statically.
|
// Link protoc, protobuf, libgcc and libstdc++ statically.
|
||||||
// Link other (system) libraries dynamically.
|
// Link other (system) libraries dynamically.
|
||||||
// Clang under OSX doesn't support these options.
|
// Clang under OSX doesn't support these options.
|
||||||
|
|
@ -127,9 +128,11 @@ model {
|
||||||
if (rootProject.hasProperty('vcProtobufInclude')) {
|
if (rootProject.hasProperty('vcProtobufInclude')) {
|
||||||
cppCompiler.args "/I${rootProject.vcProtobufInclude}"
|
cppCompiler.args "/I${rootProject.vcProtobufInclude}"
|
||||||
}
|
}
|
||||||
linker.args "libprotobuf.lib", "libprotoc.lib"
|
linker.args.add("libprotoc.lib")
|
||||||
|
linker.args.add("libprotobuf.lib")
|
||||||
if (rootProject.hasProperty('vcProtobufLibs')) {
|
if (rootProject.hasProperty('vcProtobufLibs')) {
|
||||||
linker.args "/LIBPATH:${rootProject.vcProtobufLibs}"
|
String libsList = rootProject.property('vcProtobufLibs') as String
|
||||||
|
libsList.split(',').each() { lib -> linker.args.add(lib) }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -242,9 +245,10 @@ def checkArtifacts = tasks.register("checkArtifacts") {
|
||||||
if (ret.exitValue != 0) {
|
if (ret.exitValue != 0) {
|
||||||
throw new GradleException("dumpbin exited with " + ret.exitValue)
|
throw new GradleException("dumpbin exited with " + ret.exitValue)
|
||||||
}
|
}
|
||||||
def dlls = os.toString() =~ /Image has the following dependencies:\s+(.*)\s+Summary/
|
def dlls_match_results = os.toString() =~ /Image has the following dependencies:([\S\s]*)Summary/
|
||||||
if (dlls[0][1] != "KERNEL32.dll") {
|
def dlls = dlls_match_results[0][1].trim().split("\\s+").sort()
|
||||||
throw new Exception("unexpected dll deps: " + dlls[0][1]);
|
if (dlls != ["KERNEL32.dll", "dbghelp.dll"]) {
|
||||||
|
throw new Exception("unexpected dll deps: " + dlls);
|
||||||
}
|
}
|
||||||
os.reset()
|
os.reset()
|
||||||
ret = exec {
|
ret = exec {
|
||||||
|
|
|
||||||
|
|
@ -114,7 +114,7 @@ checkDependencies ()
|
||||||
white_list="KERNEL32\.dll\|msvcrt\.dll\|USER32\.dll"
|
white_list="KERNEL32\.dll\|msvcrt\.dll\|USER32\.dll"
|
||||||
elif [[ "$OS" == linux ]]; then
|
elif [[ "$OS" == linux ]]; then
|
||||||
dump_cmd='objdump -x '"$1"' | grep "NEEDED"'
|
dump_cmd='objdump -x '"$1"' | grep "NEEDED"'
|
||||||
white_list="libpthread\.so\.0\|libstdc++\.so\.6\|libc\.so\.6"
|
white_list="libpthread\.so\.0\|libstdc++\.so\.6\|libc\.so\.6\|librt\.so\.1\|libm\.so\.6"
|
||||||
if [[ "$ARCH" == x86_32 ]]; then
|
if [[ "$ARCH" == x86_32 ]]; then
|
||||||
white_list="${white_list}\|libm\.so\.6"
|
white_list="${white_list}\|libm\.so\.6"
|
||||||
elif [[ "$ARCH" == x86_64 ]]; then
|
elif [[ "$ARCH" == x86_64 ]]; then
|
||||||
|
|
|
||||||
|
|
@ -25,6 +25,7 @@ import io.grpc.okhttp.internal.ConnectionSpec;
|
||||||
import io.grpc.okhttp.internal.TlsVersion;
|
import io.grpc.okhttp.internal.TlsVersion;
|
||||||
import java.net.Socket;
|
import java.net.Socket;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Locale;
|
||||||
import org.junit.Rule;
|
import org.junit.Rule;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.rules.ExpectedException;
|
import org.junit.rules.ExpectedException;
|
||||||
|
|
@ -95,6 +96,9 @@ public class UtilsTest {
|
||||||
assertEquals("5000", socketOptions.others.get("SO_SNDBUF"));
|
assertEquals("5000", socketOptions.others.get("SO_SNDBUF"));
|
||||||
assertEquals("true", socketOptions.others.get("SO_KEEPALIVE"));
|
assertEquals("true", socketOptions.others.get("SO_KEEPALIVE"));
|
||||||
assertEquals("true", socketOptions.others.get("SO_OOBINLINE"));
|
assertEquals("true", socketOptions.others.get("SO_OOBINLINE"));
|
||||||
assertEquals("8", socketOptions.others.get("IP_TOS"));
|
String osName = System.getProperty("os.name").toLowerCase(Locale.ENGLISH);
|
||||||
|
if (!osName.startsWith("windows")) {
|
||||||
|
assertEquals("8", socketOptions.others.get("IP_TOS"));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue