[build] CI config

Run it in parallel with the old build system. This will offer
a migration path and make sure we keep everything working at
the cost of running many CI bots. New stuff is prefixed with "next".

Appveyor already got migrated to the next buildsystem.

After merging, we will follow-up removing duplicated core bots.
This commit is contained in:
Thiago Marcos P. Santos
2019-07-25 03:05:35 +03:00
parent ef1a7aad70
commit f6bb784439
7 changed files with 554 additions and 60 deletions

View File

@@ -1,18 +1,9 @@
Standard: Cpp11
IndentWidth: 4
---
Language: Cpp
BasedOnStyle: Google
AccessModifierOffset: -4
UseTab: Never
BinPackParameters: false
AllowShortIfStatementsOnASingleLine: false
AllowShortLoopsOnASingleLine: false
AllowShortBlocksOnASingleLine: false
AllowShortFunctionsOnASingleLine: false
ConstructorInitializerAllOnOneLineOrOnePerLine: true
AlwaysBreakTemplateDeclarations: true
NamespaceIndentation: None
PointerBindsToType: true
SpacesInParentheses: false
BreakBeforeBraces: Attach
ColumnLimit: 100
Cpp11BracedListStyle: false
AllowShortFunctionsOnASingleLine: Inline
ColumnLimit: 120
IndentWidth: 4
SpacesBeforeTrailingComments: 1
...

View File

@@ -1,3 +1,4 @@
Checks: 'modernize-*,misc-static-assert,llvm-namespace-comment,-clang-analyzer-security.insecureAPI.rand,-clang-analyzer-core.uninitialized.UndefReturn,-clang-analyzer-core.StackAddressEscape,-clang-analyzer-core.CallAndMessage,-clang-diagnostic-unused-command-line-argument,-clang-analyzer-core.uninitialized.*,-clang-analyzer-core.NullDereference,-clang-analyzer-core.NonNullParamChecker'
Checks: 'bugprone-*,clang-analyzer-*,cppcoreguidelines-*,google-*,misc-*,modernize-*,performance-*,readability-*,-cppcoreguidelines-avoid-magic-numbers,-cppcoreguidelines-pro-bounds-array-to-pointer-decay,-cppcoreguidelines-pro-bounds-pointer-arithmetic,-cppcoreguidelines-pro-type-vararg,-cppcoreguidelines-special-member-functions,-google-readability-todo,-google-runtime-int,-misc-non-private-member-variables-in-classes,-readability-magic-numbers,-readability-named-parameter'
WarningsAsErrors: '*'
HeaderFilterRegex: '.*'
FormatStyle: file

91
.cmake-format Normal file
View File

@@ -0,0 +1,91 @@
# --------------------------
# General Formatting Options
# --------------------------
# How wide to allow formatted cmake files
line_width = 140
# How many spaces to tab for indent
tab_size = 4
# If arglists are longer than this, break them always
max_subargs_per_line = 3
# If true, separate flow control names from their parentheses with a space
separate_ctrl_name_with_space = False
# If true, separate function names from parentheses with a space
separate_fn_name_with_space = False
# If a statement is wrapped to more than one line, than dangle the closing
# parenthesis on it's own line
dangle_parens = True
# If the statement spelling length (including space and parenthesis is larger
# than the tab width by more than this amoung, then force reject un-nested
# layouts.
max_prefix_chars = 2
# If a candidate layout is wrapped horizontally but it exceeds this many lines,
# then reject the layout.
max_lines_hwrap = 8
# What style line endings to use in the output.
line_ending = u'unix'
# Format command names consistently as 'lower' or 'upper' case
command_case = u'canonical'
# Format keywords consistently as 'lower' or 'upper' case
keyword_case = u'unchanged'
# Specify structure for custom cmake functions
additional_commands = {
"add_node_module": {
"kwargs": {
"INSTALL_PATH": "*",
"NAN_VERSION": "*",
"EXCLUDE_NODE_ABIS": "*"
}
},
"target_compile_definitions": {
"kwargs": {
"PRIVATE": "*",
"PUBLIC": "*"
}
},
"target_sources": {
"kwargs": {
"INTERFACE": "*",
"PRIVATE": "*",
"PUBLIC": "*"
}
}
}
# A list of command names which should always be wrapped
always_wrap = [
"add_executable",
"add_library",
"set_source_files_properties",
"target_compile_definitions",
"target_include_directories",
"target_link_libraries",
"target_sources"
]
# Specify the order of wrapping algorithms during successive reflow attempts
algorithm_order = [0, 1, 2, 3, 4]
# If true, the argument lists which are known to be sortable will be sorted
# lexicographicall
enable_sort = True
# If true, the parsers may infer whether or not an argument list is sortable
# (without annotation).
autosort = True
# If a comment line starts with at least this many consecutive hash characters,
# then don't lstrip() them off. This allows for lazy hash rulers where the first
# hash char is not separated by space
hashruler_min_length = 10

View File

@@ -5,29 +5,15 @@ image:
- Visual Studio 2017
environment:
PYTHON: C:\python37
PYTHON: C:\python37
matrix:
- configuration: Release
clone_depth: 1
after_build:
- mkdir qmapboxgl
- mkdir qmapboxgl\lib
- mkdir qmapboxgl\include
- copy qmapboxgl.dll qmapboxgl\lib
- copy qmapboxgl.exp qmapboxgl\lib
- copy qmapboxgl.lib qmapboxgl\lib
- copy %APPVEYOR_BUILD_FOLDER%\platform\qt\include\* qmapboxgl\include
- 7z a qmapboxgl-%APPVEYOR_REPO_COMMIT%.zip qmapboxgl
artifacts:
- path: build\qmapboxgl-%APPVEYOR_REPO_COMMIT%.zip
name: QMapboxGL
- configuration: Debug
test: off
clone_depth: 1
for:
-
@@ -36,10 +22,10 @@ for:
- image: Visual Studio 2015
environment:
LLVM_VERSION: 5.0.1
LLVM_HASH: 981543611D719624ACB29A2CFFD6A479CFF36E8AB5EE8A57D8ECA4F9C4C6956F
VCVARSALL: 'C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat'
QT_PREFIX: 'C:\Qt\latest\msvc2015_64\lib\cmake'
LLVM_VERSION: 5.0.1
LLVM_HASH: 981543611D719624ACB29A2CFFD6A479CFF36E8AB5EE8A57D8ECA4F9C4C6956F
VCVARSALL: 'C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat'
QT_PREFIX: 'C:\Qt\latest\msvc2015_64\lib\cmake'
-
matrix:
@@ -53,52 +39,52 @@ for:
QT_PREFIX: 'C:\Qt\latest\msvc2017_64\lib\cmake'
cache:
- '%APPVEYOR_BUILD_FOLDER%\mason_packages'
- '%APPVEYOR_BUILD_FOLDER%\.git\modules'
- '%APPVEYOR_BUILD_FOLDER%\LLVM-%LLVM_VERSION%-win64.exe'
- '%APPVEYOR_BUILD_FOLDER%\cmake-3.10.1-win64-x64.zip'
- C:\clcache
install:
- set PATH=%PYTHON%\Scripts;%PYTHON%;%PATH%
- pip install clcache
- git config --system core.longpaths true
- git submodule sync
- git submodule update --init
- git submodule foreach git submodule update --init
- ps: |
if (!(Test-Path cmake-3.10.1-win64-x64.zip)) {
appveyor DownloadFile https://cmake.org/files/v3.10/cmake-3.10.1-win64-x64.zip
}
scripts\check-sha256.ps1 cmake-3.10.1-win64-x64.zip 8251F70C85B58F3CA1F24E4A3B0637E2D609B5E4A341D00B70E02E89244D5029
Start-Process -FilePath '7z' -ArgumentList 'x','cmake-3.10.1-win64-x64.zip','-oC:\' -Wait
- ps: |
if (!(Test-Path "LLVM-$env:LLVM_VERSION-win64.exe")) {
appveyor DownloadFile "https://releases.llvm.org/$env:LLVM_VERSION/LLVM-$env:LLVM_VERSION-win64.exe"
}
scripts\check-sha256.ps1 LLVM-$env:LLVM_VERSION-win64.exe "$env:LLVM_HASH"
Start-Process -FilePath "LLVM-$env:LLVM_VERSION-win64.exe" -ArgumentList '/S',"/D=C:\LLVM-$env:LLVM_VERSION" -Wait
- set PATH=%PYTHON%\Scripts;%PYTHON%;%PATH%
- pip install clcache
- ps: |
if (!(Test-Path cmake-3.10.1-win64-x64.zip)) {
appveyor DownloadFile https://cmake.org/files/v3.10/cmake-3.10.1-win64-x64.zip
}
scripts\check-sha256.ps1 cmake-3.10.1-win64-x64.zip 8251F70C85B58F3CA1F24E4A3B0637E2D609B5E4A341D00B70E02E89244D5029
Start-Process -FilePath '7z' -ArgumentList 'x','cmake-3.10.1-win64-x64.zip','-oC:\' -Wait
before_build:
- set PATH=C:\LLVM-%LLVM_VERSION%\bin;%PATH%
- set PATH=C:\cmake-3.10.1-win64-x64\bin;%PATH%
- set CLCACHE_DIR=c:\clcache
- set CLCACHE_CL=clang-cl
- clcache -z
- set CC=clcache
- set CXX=clcache
- set CTEST_OUTPUT_ON_FAILURE=1
- mkdir %APPVEYOR_BUILD_FOLDER%\build
- cd %APPVEYOR_BUILD_FOLDER%\build
build_script:
- call "%VCVARSALL%" amd64
- cmake -E remove ../next/vendor
- cmake -E copy_directory ../vendor ../next/vendor
- cmake -G "Ninja"
-DMBGL_PLATFORM=qt
-DWITH_QT_DECODERS=ON
-DWITH_QT_I18N=ON
-DWITH_NODEJS=OFF
-DCMAKE_BUILD_TYPE=Release
-DCMAKE_PREFIX_PATH=%QT_PREFIX%
-DCMAKE_MAKE_PROGRAM="%APPVEYOR_BUILD_FOLDER%\platform\qt\ninja.exe"
..
- clcache -z
- cmake --build . -- -j %NUMBER_OF_PROCESSORS%
-DCMAKE_BUILD_TYPE=%CONFIGURATION%
-DCMAKE_MAKE_PROGRAM="%APPVEYOR_BUILD_FOLDER%\platform\qt\ninja.exe"
-DCMAKE_PREFIX_PATH=%QT_PREFIX%
-DMBGL_WITH_QT=ON
../next
- cmake --build . --target qmapboxgl -- -j %NUMBER_OF_PROCESSORS%
- clcache -s

View File

@@ -2,7 +2,133 @@ version: 2.1
workflows:
version: 2
default:
mbgl-next:
jobs:
- next-sanity-checks
- next-build-template:
name: next-android-armeabi-v7a-release
executor_name: ubuntu-disco
target_is_android: true
requires:
- next-sanity-checks
config_params: '-G Ninja -DCMAKE_TOOLCHAIN_FILE=/opt/android/ndk-bundle/build/cmake/android.toolchain.cmake -DANDROID_CCACHE=/usr/bin/ccache -DANDROID_ABI=armeabi-v7a'
- next-build-template:
name: next-android-arm64-v8a-release
executor_name: ubuntu-disco
target_is_android: true
requires:
- next-android-armeabi-v7a-release
config_params: '-G Ninja -DCMAKE_TOOLCHAIN_FILE=/opt/android/ndk-bundle/build/cmake/android.toolchain.cmake -DANDROID_CCACHE=/usr/bin/ccache -DANDROID_ABI=arm64-v8a'
- next-build-template:
name: next-android-x86-release
executor_name: ubuntu-disco
target_is_android: true
requires:
- next-android-armeabi-v7a-release
config_params: '-G Ninja -DCMAKE_TOOLCHAIN_FILE=/opt/android/ndk-bundle/build/cmake/android.toolchain.cmake -DANDROID_CCACHE=/usr/bin/ccache -DANDROID_ABI=x86'
- next-build-template:
name: next-android-x86_64-release
executor_name: ubuntu-disco
target_is_android: true
requires:
- next-android-armeabi-v7a-release
config_params: '-G Ninja -DCMAKE_TOOLCHAIN_FILE=/opt/android/ndk-bundle/build/cmake/android.toolchain.cmake -DANDROID_CCACHE=/usr/bin/ccache -DANDROID_ABI=x86_64'
- next-build-template:
name: next-linux-gcc8-release
executor_name: ubuntu-disco
target_is_linux: true
requires:
- next-sanity-checks
config_params: '-G Ninja -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_C_COMPILER=gcc-8 -DCMAKE_CXX_COMPILER=g++-8'
- next-build-template:
name: next-linux-gcc4.9-release
executor_name: ubuntu-disco
target_is_linux: true
requires:
- next-linux-gcc8-release
config_params: '-G Ninja -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_C_COMPILER=gcc-4.9 -DCMAKE_CXX_COMPILER=g++-4.9'
build_params: '--target mbgl-glfw'
test_params: '-N -Q'
- next-build-template:
name: next-linux-gcc8-debug-coverage
executor_name: ubuntu-disco
target_is_linux: true
requires:
- next-linux-gcc8-release
config_params: '-G Ninja -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_C_COMPILER=gcc-8 -DCMAKE_CXX_COMPILER=g++-8 -DCMAKE_BUILD_TYPE=DebugCoverage'
- next-build-template:
name: next-linux-clang8-release
executor_name: ubuntu-disco
target_is_linux: true
requires:
- next-sanity-checks
config_params: '-G Ninja -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_C_COMPILER=clang-8 -DCMAKE_CXX_COMPILER=clang++-8'
- next-build-template:
name: next-linux-asan
executor_name: ubuntu-disco
target_is_linux: true
requires:
- next-linux-gcc8-debug-coverage
config_params: '-G Ninja -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_C_COMPILER=clang-8 -DCMAKE_CXX_COMPILER=clang++-8 -DCMAKE_BUILD_TYPE=Sanitize -DMBGL_WITH_SANITIZER=address'
- next-build-template:
name: next-linux-tsan
executor_name: ubuntu-disco
target_is_linux: true
requires:
- next-linux-gcc8-debug-coverage
config_params: '-G Ninja -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_C_COMPILER=clang-8 -DCMAKE_CXX_COMPILER=clang++-8 -DCMAKE_BUILD_TYPE=Sanitize -DMBGL_WITH_SANITIZER=thread'
- next-build-template:
name: next-linux-memsan
executor_name: ubuntu-disco
target_is_linux: true
requires:
- next-linux-gcc8-debug-coverage
config_params: '-G Ninja -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_C_COMPILER=clang-8 -DCMAKE_CXX_COMPILER=clang++-8 -DCMAKE_BUILD_TYPE=Sanitize -DMBGL_WITH_SANITIZER=memory'
- next-build-template:
name: next-linux-ubsan
executor_name: ubuntu-disco
target_is_linux: true
requires:
- next-linux-gcc8-debug-coverage
config_params: '-G Ninja -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_C_COMPILER=clang-8 -DCMAKE_CXX_COMPILER=clang++-8 -DCMAKE_BUILD_TYPE=Sanitize -DMBGL_WITH_SANITIZER=undefined'
- next-build-template:
name: next-qt5-linux-gcc5-release
executor_name: ubuntu-disco
target_is_linux: true
requires:
- next-sanity-checks
config_params: '-G Ninja -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_C_COMPILER=gcc-5 -DCMAKE_CXX_COMPILER=g++-5 -DMBGL_WITH_QT=ON'
- next-build-template:
name: next-qt5-macos-gcc5-release
executor_name: macos-11_0_0
target_is_macos: true
requires:
- next-qt5-linux-gcc5-release
config_params: '-G Ninja -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DMBGL_WITH_QT=ON -DCMAKE_PREFIX_PATH=$(echo /usr/local/Cellar/qt/5.*/lib/cmake)'
test_params: '-N -Q'
- next-build-template:
name: next-macos-xcode11-release
executor_name: macos-11_0_0
target_is_macos: true
requires:
- next-sanity-checks
config_params: '-G Ninja -DCMAKE_CXX_COMPILER_LAUNCHER=ccache'
- next-build-template:
name: next-macos-xcode11-debug
executor_name: macos-11_0_0
target_is_macos: true
requires:
- next-macos-xcode11-release
config_params: '-G Ninja -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_BUILD_TYPE=Debug'
- next-build-template:
name: next-ios-xcode11-release
executor_name: macos-11_0_0
target_is_macos: true
requires:
- next-sanity-checks
config_params: '-G Ninja -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_ARCHITECTURES=x86_64 -DCMAKE_OSX_SYSROOT=iphonesimulator'
test_params: '-Q -N'
mbgl-legacy:
jobs:
#
# Naming convention: {platform}-{additional description}-{build type}
@@ -47,8 +173,6 @@ workflows:
name: linux-clang-3.8-libcxx-debug
- linux-clang-7-sanitize-address-undefined
- linux-clang-7-sanitize-thread
- linux-gcc49-debug:
name: linux-gcc4.9-debug
- linux-gcc5-debug-coverage
- linux-doxygen
- linux-render-tests
@@ -83,7 +207,102 @@ workflows:
- ios-static-analyzer-nightly
- ios-static-analyzer-nightly-xcode11
executors:
ubuntu-disco:
docker:
# FIXME: Move the image to mbgl/
- image: tmpsantos/mbgl_ci:1.5
resource_class: xlarge
working_directory: /src
environment:
UBSAN_OPTIONS: print_stacktrace=1:halt_on_error=1
MSAN_OPTIONS: poison_in_dtor=1
ASAN_OPTIONS: strict_string_checks=1:detect_stack_use_after_return=1:check_initialization_order=1:strict_init_order=1
QT_INSTALL_DOCS: /usr/share/qt5/doc
QT_VERSION: 5
macos-11_0_0:
macos:
xcode: '11.0.0'
environment:
HOMEBREW_NO_AUTO_UPDATE: 1
HOMEBREW_NO_INSTALL_CLEANUP: 1
commands:
next-prepare:
steps:
- restore_cache:
keys:
- 'ccache-v1-{{ .Environment.CIRCLE_JOB }}-{{ .Branch }}-{{ .Revision }}'
- 'ccache-v1-{{ .Environment.CIRCLE_JOB }}-{{ .Branch }}-'
- 'ccache-v1-{{ .Environment.CIRCLE_JOB }}-master'
- 'ccache-v1-{{ .Environment.CIRCLE_JOB }}-'
- run:
name: Prepare
command: |
git submodule sync
git submodule update --init --recursive
npm install --ignore-scripts
ulimit -c unlimited
next-prepare-macos:
steps:
- run:
name: Prepare macOS
command: |
brew install cmake ccache glfw ninja pkgconfig qt
next-config:
parameters:
config_params:
type: string
steps:
- run:
name: Configure
command: |
cmake next -B build << parameters.config_params >>
next-build:
parameters:
build_params:
type: string
steps:
- run:
name: Build
command: |
ccache --zero-stats --max-size=2G
cmake --build build -j 8 << parameters.build_params >>
ccache --show-stats
git gc
next-save:
steps:
- save_cache:
key: 'ccache-v1-{{ .Environment.CIRCLE_JOB }}-{{ .Branch }}-{{ .Revision }}'
paths:
- .git/modules
- /Users/distiller/Library/Caches/Homebrew
- node_modules
- ~/.ccache
- ~/.gradle
- run:
name: Collecting artifacts
when: on_fail
command: |
mkdir -p /tmp/tests/coredumps
if ls core* 1> /dev/null 2>&1; then cp core* /tmp/tests/coredumps; fi
mkdir -p /tmp/tests/render
if [ -f mapbox-gl-js/test/integration/render-tests/index.html ]; then cp mapbox-gl-js/test/integration/render-tests/index.html /tmp/tests/render; fi
- store_artifacts:
path: /tmp/tests
destination: tests
next-test:
parameters:
test_wrapper:
type: string
test_params:
type: string
steps:
- run:
name: Test
command: |
cd build
<< parameters.test_wrapper >> ctest -j 8 --output-on-failure << parameters.test_params >>
npm-install:
steps:
- run:
@@ -516,6 +735,92 @@ commands:
fi
jobs:
next-sanity-checks:
executor: ubuntu-disco
steps:
- checkout
- next-prepare
- next-config:
config_params: '-DMBGL_WITH_CORE_ONLY=ON'
- run:
name: CMake Format
command: |
cmake-format -i $(find next -type f -name CMakeLists.txt -o -name '*.cmake')
git diff --exit-code
- run:
name: Clang Format
command: |
git diff -U0 --no-color origin/master... *.cpp *.hpp | clang-format-diff-8 -p1 -i
git diff --exit-code
- run:
name: Clang Tidy
command: |
git diff -U0 --no-color origin/master... src include | clang-tidy-diff-8.py -clang-tidy-binary clang-tidy-8 -p1 -path build
- run:
name: Code Generators
command: |
platform/android/scripts/generate-style-code.js
scripts/generate-file-lists.js
scripts/generate-shaders.js
scripts/generate-style-code.js
git add -A && git diff --staged --exit-code
- next-save
next-build-template:
parameters:
config_params:
type: string
default: ''
build_params:
type: string
default: ''
test_params:
type: string
default: ''
executor_name:
type: string
target_is_android:
type: boolean
default: false
target_is_linux:
type: boolean
default: false
target_is_macos:
type: boolean
default: false
executor: << parameters.executor_name >>
steps:
- checkout
- next-prepare
- when:
condition: << parameters.target_is_android >>
steps:
- next-config:
config_params: << parameters.config_params >>
- next-build:
build_params: << parameters.build_params >>
- when:
condition: << parameters.target_is_linux >>
steps:
- next-config:
config_params: << parameters.config_params >>
- next-build:
build_params: << parameters.build_params >>
- next-test:
test_wrapper: 'xvfb-run -s -noreset'
test_params: << parameters.test_params >>
- when:
condition: << parameters.target_is_macos >>
steps:
- next-prepare-macos
- next-config:
config_params: << parameters.config_params >>
- next-build:
build_params: << parameters.build_params >>
- next-test:
test_wrapper: ''
test_params: << parameters.test_params >>
- next-save
nitpick:
docker:
- image: mbgl/linux-clang-7:a5a3c52107

110
scripts/ci/Dockerfile Normal file
View File

@@ -0,0 +1,110 @@
FROM ubuntu:disco-20190718
ENV DEBIAN_FRONTEND="noninteractive"
ENV ANDROID_HOME="/opt/android"
WORKDIR /src
# Use faster mirrors from Finland
COPY etc/apt/sources.list /etc/apt
RUN set -eu \
&& apt-get update\
&& apt-get dist-upgrade -y
# CI requirements
RUN set -eu && apt-get install -y \
ca-certificates \
git \
gzip \
ssh \
tar
# Base dependencies
RUN set -eu && apt-get install -y \
ccache \
clang-8 \
clang-format-8 \
clang-tidy-8 \
cmake \
fonts-noto \
g++-8 \
libc++-8-dev \
libc++abi-8-dev \
mesa-common-dev \
ninja-build \
nodejs \
npm \
pkg-config \
python3-pip \
software-properties-common \
xvfb
RUN pip3 install cmake_format
# Linux dependencies
RUN set -eu && apt-get install -y \
libcurl4-openssl-dev \
libgl1-mesa-dev \
libglfw3-dev \
libicu-dev \
libjpeg-turbo8-dev \
libpng-dev \
libuv1-dev \
zlib1g-dev
# Qt dependencies
RUN set -eu && apt-get install -y \
qdoc-qt5 \
qt5-default
# Android dependencies
RUN set -eu && apt-get install -y \
coreutils \
curl \
openjdk-8-jdk-headless \
unzip
# Install old compilers
RUN set -eu \
&& apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 1E9377A2BA9EF27F \
&& add-apt-repository "deb http://ppa.launchpad.net/ubuntu-toolchain-r/test/ubuntu xenial main" \
&& add-apt-repository "deb http://us.archive.ubuntu.com/ubuntu/ xenial main universe" \
&& apt-get install -y \
g++-4.9 \
g++-5
# Install Android NDK
RUN set -eu \
&& mkdir -p ${ANDROID_HOME} && cd ${ANDROID_HOME} \
&& curl -L --retry 3 https://dl.google.com/android/repository/android-ndk-r19-linux-x86_64.zip -o ndk.zip \
&& (echo "f02ad84cb5b6e1ff3eea9e6168037c823408c8ac ndk.zip" | sha1sum -c) \
&& unzip -q ndk.zip && rm ndk.zip && mv android-ndk-r* ndk-bundle
RUN set -eu \
&& cd ${ANDROID_HOME} \
&& curl -L --retry 3 https://dl.google.com/android/repository/sdk-tools-linux-4333796.zip -o tools.zip \
&& (echo "92ffee5a1d98d856634e8b71132e8a95d96c83a63fde1099be3d86df3106def9 tools.zip" | sha256sum -c) \
&& unzip -q tools.zip && rm tools.zip
RUN set -eu \
&& yes | ${ANDROID_HOME}/tools/bin/sdkmanager \
"platform-tools" \
"platforms;android-26" \
"build-tools;26.0.3" \
"platforms;android-27" \
"build-tools;27.0.3" \
"platforms;android-28" \
"build-tools;28.0.3" \
"extras;android;m2repository" \
"patcher;v4" \
"extras;google;m2repository" \
"extras;m2repository;com;android;support;constraint;constraint-layout;1.0.2" \
"cmake;3.10.2.4988404"
# Configure ccache
RUN set -eu && /usr/sbin/update-ccache-symlinks
# Cleanup
RUN set -eu && apt-get clean

View File

@@ -0,0 +1,10 @@
deb http://fi.archive.ubuntu.com/ubuntu/ disco main restricted
deb http://fi.archive.ubuntu.com/ubuntu/ disco-updates main restricted
deb http://fi.archive.ubuntu.com/ubuntu/ disco universe
deb http://fi.archive.ubuntu.com/ubuntu/ disco-updates universe
deb http://fi.archive.ubuntu.com/ubuntu/ disco multiverse
deb http://fi.archive.ubuntu.com/ubuntu/ disco-updates multiverse
deb http://fi.archive.ubuntu.com/ubuntu/ disco-backports main restricted universe multiverse
deb http://security.ubuntu.com/ubuntu/ disco-security main restricted
deb http://security.ubuntu.com/ubuntu/ disco-security universe
deb http://security.ubuntu.com/ubuntu/ disco-security multiverse