123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- #!/bin/bash
- # Copyright 2017 gRPC authors.
- #
- # Licensed 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")/../../.."
- # Install openssl (to use instead of boringssl)
- apt-get update && apt-get install -y libssl-dev
- # Install CMake 3.16
- apt-get update && apt-get install -y wget
- wget -q -O cmake-linux.sh https://github.com/Kitware/CMake/releases/download/v3.16.1/cmake-3.16.1-Linux-x86_64.sh
- sh cmake-linux.sh -- --skip-license --prefix=/usr
- rm cmake-linux.sh
- # Use externally provided env to determine build parallelism, otherwise use default.
- GRPC_CPP_DISTRIBTEST_BUILD_COMPILER_JOBS=${GRPC_CPP_DISTRIBTEST_BUILD_COMPILER_JOBS:-4}
- # Build and install gRPC for the host architecture.
- # We do this because we need to be able to run protoc and grpc_cpp_plugin
- # while cross-compiling.
- mkdir -p "cmake/build"
- pushd "cmake/build"
- cmake \
- -DCMAKE_BUILD_TYPE=Release \
- -DgRPC_INSTALL=ON \
- -DgRPC_BUILD_TESTS=OFF \
- -DgRPC_SSL_PROVIDER=package \
- ../..
- make "-j${GRPC_CPP_DISTRIBTEST_BUILD_COMPILER_JOBS}" install
- popd
- # Write a toolchain file to use for cross-compiling.
- cat > /tmp/toolchain.cmake <<'EOT'
- SET(CMAKE_SYSTEM_NAME Linux)
- SET(CMAKE_SYSTEM_PROCESSOR aarch64)
- set(CMAKE_STAGING_PREFIX /tmp/stage)
- set(CMAKE_C_COMPILER /usr/bin/aarch64-linux-gnu-gcc-6)
- set(CMAKE_CXX_COMPILER /usr/bin/aarch64-linux-gnu-g++-6)
- set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
- set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
- set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
- set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
- EOT
- # Build and install gRPC for ARM.
- # This build will use the host architecture copies of protoc and
- # grpc_cpp_plugin that we built earlier because we installed them
- # to a location in our PATH (/usr/local/bin).
- mkdir -p "cmake/build_arm"
- pushd "cmake/build_arm"
- cmake -DCMAKE_TOOLCHAIN_FILE=/tmp/toolchain.cmake \
- -DCMAKE_BUILD_TYPE=Release \
- -DCMAKE_INSTALL_PREFIX=/tmp/install \
- ../..
- make "-j${GRPC_CPP_DISTRIBTEST_BUILD_COMPILER_JOBS}" install
- popd
- # Build helloworld example for ARM.
- # As above, it will find and use protoc and grpc_cpp_plugin
- # for the host architecture.
- mkdir -p "examples/cpp/helloworld/cmake/build_arm"
- pushd "examples/cpp/helloworld/cmake/build_arm"
- cmake -DCMAKE_TOOLCHAIN_FILE=/tmp/toolchain.cmake \
- -DCMAKE_BUILD_TYPE=Release \
- -Dabsl_DIR=/tmp/stage/lib/cmake/absl \
- -DProtobuf_DIR=/tmp/stage/lib/cmake/protobuf \
- -DgRPC_DIR=/tmp/stage/lib/cmake/grpc \
- ../..
- make "-j${GRPC_CPP_DISTRIBTEST_BUILD_COMPILER_JOBS}"
- popd
|