From 0767878b6efb059c209e82ca1d6d2fbcfb309b70 Mon Sep 17 00:00:00 2001 From: Jan Tattermusch Date: Thu, 12 Apr 2018 13:56:03 +0200 Subject: [PATCH] build C# android artifact --- .../build_native_ext_for_android.sh | 2 +- .../grpc_artifact_android_ndk/Dockerfile | 68 +++++++++++++++++++ tools/run_tests/artifacts/artifact_targets.py | 9 ++- .../build_artifact_csharp_android.sh | 23 +++++++ 4 files changed, 100 insertions(+), 2 deletions(-) create mode 100644 tools/dockerfile/grpc_artifact_android_ndk/Dockerfile create mode 100755 tools/run_tests/artifacts/build_artifact_csharp_android.sh diff --git a/src/csharp/experimental/build_native_ext_for_android.sh b/src/csharp/experimental/build_native_ext_for_android.sh index 958778e9299..8197df7c536 100755 --- a/src/csharp/experimental/build_native_ext_for_android.sh +++ b/src/csharp/experimental/build_native_ext_for_android.sh @@ -23,7 +23,7 @@ mkdir -p build cd build # set to the location where Android SDK is installed -ANDROID_NDK_PATH="$HOME/android-ndk-r16b" +# e.g. ANDROID_NDK_PATH="$HOME/android-ndk-r16b" cmake ../.. \ -DCMAKE_SYSTEM_NAME=Android \ diff --git a/tools/dockerfile/grpc_artifact_android_ndk/Dockerfile b/tools/dockerfile/grpc_artifact_android_ndk/Dockerfile new file mode 100644 index 00000000000..77b6acfb160 --- /dev/null +++ b/tools/dockerfile/grpc_artifact_android_ndk/Dockerfile @@ -0,0 +1,68 @@ +# Copyright 2016 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. + +# Docker file for building gRPC artifacts. + +# Recent enough cmake (>=3.9) needed by Android SDK +FROM debian:sid + +RUN apt-get update && apt-get install -y debian-keyring && apt-key update + +# Install Git and basic packages. +RUN apt-get update && apt-key update && apt-get install -y \ + autoconf \ + autotools-dev \ + build-essential \ + bzip2 \ + clang \ + curl \ + gcc \ + gcc-multilib \ + git \ + golang \ + libc6 \ + libc6-dbg \ + libc6-dev \ + libgtest-dev \ + libtool \ + make \ + perl \ + strace \ + python-dev \ + python-setuptools \ + python-yaml \ + telnet \ + unzip \ + wget \ + zip && apt-get clean + +# Cmake for cross-compilation +RUN apt-get update && apt-get install -y cmake golang && apt-get clean + +################## +# Android NDK + +# Download and install Android NDK +RUN wget -q https://dl.google.com/android/repository/android-ndk-r16b-linux-x86_64.zip -O android_ndk.zip \ + && unzip -q android_ndk.zip \ + && rm android_ndk.zip \ + && mv ./android-ndk-r16b /opt +ENV ANDROID_NDK_PATH /opt/android-ndk-r16b + +RUN apt-get update && apt-get install -y libpthread-stubs0-dev && apt-get clean + +RUN mkdir /var/local/jenkins + +# Define the default command. +CMD ["bash"] diff --git a/tools/run_tests/artifacts/artifact_targets.py b/tools/run_tests/artifacts/artifact_targets.py index daa163e6dd1..e4d9e6bdfed 100644 --- a/tools/run_tests/artifacts/artifact_targets.py +++ b/tools/run_tests/artifacts/artifact_targets.py @@ -222,7 +222,13 @@ class CSharpExtArtifact: return [] def build_jobspec(self): - if self.platform == 'windows': + if self.arch == 'android': + return create_docker_jobspec( + self.name, + 'tools/dockerfile/grpc_artifact_android_ndk', + 'tools/run_tests/artifacts/build_artifact_csharp_android.sh', + environ={}) + elif self.platform == 'windows': cmake_arch_option = 'Win32' if self.arch == 'x86' else self.arch return create_jobspec( self.name, [ @@ -342,6 +348,7 @@ def targets(): for Cls in (CSharpExtArtifact, ProtocArtifact) for platform in ('linux', 'macos', 'windows') for arch in ('x86', 'x64') ] + [ + CSharpExtArtifact('linux', 'android'), PythonArtifact('linux', 'x86', 'cp27-cp27m'), PythonArtifact('linux', 'x86', 'cp27-cp27mu'), PythonArtifact('linux', 'x86', 'cp34-cp34m'), diff --git a/tools/run_tests/artifacts/build_artifact_csharp_android.sh b/tools/run_tests/artifacts/build_artifact_csharp_android.sh new file mode 100755 index 00000000000..ba598e76a4b --- /dev/null +++ b/tools/run_tests/artifacts/build_artifact_csharp_android.sh @@ -0,0 +1,23 @@ +#!/bin/bash +# Copyright 2016 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")/../../.." + +src/csharp/experimental/build_native_ext_for_android.sh + +mkdir -p "${ARTIFACTS_OUT}" +cp cmake/build/libgrpc_csharp_ext.so "${ARTIFACTS_OUT}"