Browse Source

package/ci: add Android Vulkan build.

It's not using Android's native Vulkan library because that's only since
Android 24 and emulator for that version doesn't even start. So we use
our own minimal driver instead.
pull/234/head
Vladimír Vondruš 6 years ago
parent
commit
4fa49dd464
  1. 0
      package/ci/travis-android-gles.sh
  2. 112
      package/ci/travis-android-vulkan.sh
  3. 35
      package/ci/travis.yml

0
package/ci/travis-android-arm.sh → package/ci/travis-android-gles.sh

112
package/ci/travis-android-vulkan.sh

@ -0,0 +1,112 @@
#!/bin/bash
set -ev
# Corrade
git clone --depth 1 git://github.com/mosra/corrade.git
cd corrade
# Build native corrade-rc
mkdir build && cd build
cmake .. \
-DCMAKE_INSTALL_PREFIX=$HOME/deps-native \
-DCMAKE_BUILD_TYPE=Release \
-DWITH_INTERCONNECT=OFF \
-DWITH_PLUGINMANAGER=OFF \
-DWITH_TESTSUITE=OFF \
-DWITH_UTILITY=OFF \
-G Ninja
ninja install
cd ..
# Crosscompile Corrade
mkdir build-android-arm && cd build-android-arm
cmake .. \
-DCMAKE_ANDROID_NDK=$TRAVIS_BUILD_DIR/android-ndk-r16b \
-DCMAKE_SYSTEM_NAME=Android \
-DCMAKE_SYSTEM_VERSION=22 \
-DCMAKE_ANDROID_ARCH_ABI=armeabi-v7a \
-DCMAKE_ANDROID_NDK_TOOLCHAIN_VERSION=clang \
-DCMAKE_ANDROID_STL_TYPE=c++_static \
-DCMAKE_BUILD_TYPE=Release \
-DCORRADE_RC_EXECUTABLE=$HOME/deps-native/bin/corrade-rc \
-DCMAKE_INSTALL_PREFIX=$HOME/deps \
-DWITH_INTERCONNECT=OFF \
-G Ninja
ninja install
cd ..
cd ..
# Generate debug keystore for APK signing
keytool -genkeypair -keystore $HOME/.android/debug.keystore -storepass android -alias androiddebugkey -keypass android -keyalg RSA -validity 10000 -dname CN=,OU=,O=,L=,S=,C=
# *Native* Vulkan requires Android 24, build-tools-25.0.2, android-24 and
# sys-img-armeabi-v7a-android-24 in android.components in the YML, but the
# fucking emulator never starts, which means we can't test shit:
# https://github.com/googlemaps/android-maps-utils/issues/371
# So don't even bother there, use some ass-old version that works, and link to
# our own library, which is the fastest Vulkan implementation IN THE WORLD.
$TRAVIS_BUILD_DIR/android-ndk-r16b/toolchains/llvm/prebuilt/linux-x86_64/bin/clang++ --target=armv7-none-linux-androideabi --gcc-toolchain=$TRAVIS_BUILD_DIR/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64 --sysroot=$TRAVIS_BUILD_DIR/android-ndk-r16b/platforms/android-22/arch-arm -march=armv7-a -mthumb -mfpu=vfpv3-d16 -mfloat-abi=softfp -funwind-tables -no-canonical-prefixes -D__ANDROID_API__=22 -fexceptions -frtti -O3 -DNDEBUG -Wl,--fix-cortex-a8 -fPIE -pie -Wl,--gc-sections -Wl,-z,nocopyreloc package/ci/libvulkan.cpp -std=c++11 -c -o vulkan.o
$TRAVIS_BUILD_DIR/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/arm-linux-androideabi/bin/ar rcs $HOME/libvulkan.a vulkan.o
$TRAVIS_BUILD_DIR/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/arm-linux-androideabi/bin/ranlib $HOME/libvulkan.a
# Crosscompile
mkdir build-android-arm && cd build-android-arm
cmake .. \
-DANDROID_SDK=/usr/local/android-sdk \
-DCMAKE_ANDROID_NDK=$TRAVIS_BUILD_DIR/android-ndk-r16b \
-DCMAKE_SYSTEM_NAME=Android \
-DCMAKE_SYSTEM_VERSION=22 \
-DCMAKE_ANDROID_ARCH_ABI=armeabi-v7a \
-DCMAKE_ANDROID_NDK_TOOLCHAIN_VERSION=clang \
-DCMAKE_ANDROID_STL_TYPE=c++_static \
-DCORRADE_RC_EXECUTABLE=$HOME/deps-native/bin/corrade-rc \
-DVulkan_LIBRARY=$HOME/libvulkan.a \
-DCMAKE_INSTALL_PREFIX=$HOME/deps \
-DCMAKE_PREFIX_PATH=$HOME/deps \
-DCMAKE_FIND_ROOT_PATH=$HOME/deps \
-DCMAKE_BUILD_TYPE=Release \
-DWITH_AUDIO=OFF \
-DWITH_DEBUGTOOLS=OFF \
-DWITH_GL=OFF \
-DWITH_MESHTOOLS=OFF \
-DWITH_PRIMITIVES=OFF \
-DWITH_SCENEGRAPH=OFF \
-DWITH_SHADERS=OFF \
-DWITH_TEXT=OFF \
-DWITH_TEXTURETOOLS=OFF \
-DWITH_TRADE=ON \
-DWITH_VK=ON \
-DWITH_AL_INFO=OFF \
-DWITH_VK_INFO=ON \
-DWITH_GL_INFO=OFF \
-DWITH_ANYAUDIOIMPORTER=OFF \
-DWITH_ANYIMAGECONVERTER=OFF \
-DWITH_ANYIMAGEIMPORTER=OFF \
-DWITH_ANYSCENECONVERTER=OFF \
-DWITH_ANYSCENEIMPORTER=OFF \
-DWITH_MAGNUMFONT=OFF \
-DWITH_MAGNUMFONTCONVERTER=OFF \
-DWITH_OBJIMPORTER=OFF \
-DWITH_TGAIMAGECONVERTER=OFF \
-DWITH_TGAIMPORTER=OFF \
-DWITH_WAVAUDIOIMPORTER=OFF \
-DWITH_DISTANCEFIELDCONVERTER=OFF \
-DWITH_FONTCONVERTER=OFF \
-DWITH_IMAGECONVERTER=OFF \
-DWITH_SCENECONVERTER=OFF \
-DWITH_ANDROIDAPPLICATION=ON \
-DBUILD_TESTS=ON \
-DBUILD_GL_TESTS=OFF \
-DBUILD_VK_TESTS=ON \
-G Ninja
ninja
# Start simulator and run tests
echo no | android create avd --force -n test -t android-22 --abi armeabi-v7a
emulator -avd test -no-audio -no-window &
android-wait-for-emulator
CORRADE_TEST_COLOR=ON ctest -V -E VkTest
# Test install, after running the tests as for them it shouldn't be needed
ninja install

35
package/ci/travis.yml

@ -208,7 +208,7 @@ matrix:
dist: trusty
env:
- JOBID=android-gles2
- TARGET=android
- TARGET=android-gles
- TARGET_GLES2=ON
addons:
apt:
@ -226,7 +226,7 @@ matrix:
dist: trusty
env:
- JOBID=android-gles3
- TARGET=android
- TARGET=android-gles
- TARGET_GLES2=OFF
addons:
apt:
@ -237,6 +237,26 @@ matrix:
- build-tools-22.0.1
- android-22
- sys-img-armeabi-v7a-android-22
- language: android
os: linux
# Setting xenial here will cause it to use 12.04, with GCC 4.6 and other
# prehistoric nightmares. So staying with 14.04 for the time being.
dist: trusty
env:
- JOBID=android-vulkan
- TARGET=android-vulkan
addons:
apt:
packages:
- ninja-build
android:
components:
# Android API level 24 is the first with Vulkan support, but the crap
# emulator doesn't even start, so it's useless. See
# travis-android-vulkan.sh for how it's done instead.
- build-tools-22.0.1
- android-22
- sys-img-armeabi-v7a-android-22
notifications:
webhooks:
@ -251,20 +271,20 @@ cache:
- $HOME/sdl2
install:
- if [ "$TRAVIS_OS_NAME" == "linux" ] && [ ! "$TARGET" == "desktop-sanitizers" ] && [ ! "$TARGET" == "android" ] && [ ! "$TARGET" == "desktop-vulkan" ]; then export CXX=g++-4.8; fi
- if [ "$TRAVIS_OS_NAME" == "linux" ] && [ ! "$TARGET" == "desktop-sanitizers" ] && [ ! "$TARGET" == "android-gles" ] && [ ! "$TARGET" == "android-vulkan" ] && [ ! "$TARGET" == "desktop-vulkan" ]; then export CXX=g++-4.8; fi
- if [ "$TRAVIS_OS_NAME" == "linux" ] && [ "$TARGET" == "desktop-sanitizers" ]; then export CXX=clang++-3.8; fi
- if [ "$BUILD_DEPRECATED" != "OFF" ]; then export BUILD_DEPRECATED=ON; fi
- if [ "$BUILD_STATIC" != "ON" ]; then export BUILD_STATIC=OFF; fi
- if [ "$TRAVIS_OS_NAME" == "linux" ] && ( [ "$TARGET" == "desktop" ] || [ "$TARGET" == "desktop-sanitizers" ] ); then export PLATFORM_GL_API=GLX; fi
- if [ "$TRAVIS_OS_NAME" == "linux" ] && [ "$TARGET" == "desktop-gles" ]; then export PLATFORM_GL_API=EGL; fi
- if [ "$TRAVIS_OS_NAME" == "linux" ] && [ "$TARGET" == "android" ]; then wget -nc https://dl.google.com/android/repository/android-ndk-r16b-linux-x86_64.zip && unzip -q android-*.zip; fi
- if [ "$TRAVIS_OS_NAME" == "linux" ] && ( [ "$TARGET" == "android-gles" ] || [ "$TARGET" == "android-vulkan" ] ); then wget -nc https://dl.google.com/android/repository/android-ndk-r16b-linux-x86_64.zip && unzip -q android-*.zip; fi
# Download CMake 3.4.3 to ensure we're still compatible with it (Travis has
# 3.9 since December 2017). Also, the PATH setting can't be cached, so it's
# separate (bit me two times already). Android needs CMake 3.7, but
# https://gitlab.kitware.com/cmake/cmake/issues/17253 is fixed in 3.9.2, so
# grab that. FindVulkan is since 3.7, in that case just use the system package.
- if [ "$TRAVIS_OS_NAME" == "linux" ] && [ ! "$TARGET" == "desktop-vulkan" ] && [ ! "$TARGET" == "android" ] && [ ! -e "$HOME/cmake/bin" ]; then cd $HOME ; wget -nc --no-check-certificate https://cmake.org/files/v3.4/cmake-3.4.3-Linux-x86_64.tar.gz && mkdir -p cmake && cd cmake && tar --strip-components=1 -xzf ../cmake-3.4.3-Linux-x86_64.tar.gz && cd $TRAVIS_BUILD_DIR ; fi
- if [ "$TRAVIS_OS_NAME" == "linux" ] && [ "$TARGET" == "android" ] && [ ! -e "$HOME/cmake/bin" ]; then cd $HOME ; wget -nc --no-check-certificate https://cmake.org/files/v3.9/cmake-3.9.2-Linux-x86_64.tar.gz && mkdir -p cmake && cd cmake && tar --strip-components=1 -xzf ../cmake-3.9.2-Linux-x86_64.tar.gz && cd $TRAVIS_BUILD_DIR ; fi
- if [ "$TRAVIS_OS_NAME" == "linux" ] && [ ! "$TARGET" == "desktop-vulkan" ] && [ ! "$TARGET" == "android-gles" ] && [ ! "$TARGET" == "android-vulkan" ] && [ ! -e "$HOME/cmake/bin" ]; then cd $HOME ; wget -nc --no-check-certificate https://cmake.org/files/v3.4/cmake-3.4.3-Linux-x86_64.tar.gz && mkdir -p cmake && cd cmake && tar --strip-components=1 -xzf ../cmake-3.4.3-Linux-x86_64.tar.gz && cd $TRAVIS_BUILD_DIR ; fi
- if [ "$TRAVIS_OS_NAME" == "linux" ] && ( [ "$TARGET" == "android-gles" ] || [ "$TARGET" == "android-vulkan" ] ) && [ ! -e "$HOME/cmake/bin" ]; then cd $HOME ; wget -nc --no-check-certificate https://cmake.org/files/v3.9/cmake-3.9.2-Linux-x86_64.tar.gz && mkdir -p cmake && cd cmake && tar --strip-components=1 -xzf ../cmake-3.9.2-Linux-x86_64.tar.gz && cd $TRAVIS_BUILD_DIR ; fi
- if [ "$TRAVIS_OS_NAME" == "linux" ] && [ ! "$TARGET" == "desktop-vulkan" ]; then export PATH=$HOME/cmake/bin:$PATH && cmake --version; fi
- if [ "$TRAVIS_OS_NAME" == "osx" ]; then HOMEBREW_NO_AUTO_UPDATE=1 brew install ninja; fi
- if [ "$TRAVIS_OS_NAME" == "osx" ] && [[ "$CMAKE_CXX_FLAGS" == *"--coverage"* ]]; then HOMEBREW_NO_AUTO_UPDATE=1 brew install lcov; fi
@ -300,7 +320,8 @@ script:
- if [ "$TRAVIS_OS_NAME" == "linux" ] && ( [ "$TARGET" == "desktop" ] || [ "$TARGET" == "desktop-sanitizers" ] ); then ./package/ci/travis-desktop.sh; fi
- if [ "$TARGET" == "desktop-vulkan" ]; then ./package/ci/travis-desktop-vulkan.sh; fi
- if [ "$TRAVIS_OS_NAME" == "linux" ] && [ "$TARGET" == "desktop-gles" ]; then ./package/ci/travis-desktop-gles.sh; fi
- if [ "$TRAVIS_OS_NAME" == "linux" ] && [ "$TARGET" == "android" ]; then ./package/ci/travis-android-arm.sh; fi
- if [ "$TRAVIS_OS_NAME" == "linux" ] && [ "$TARGET" == "android-gles" ]; then ./package/ci/travis-android-gles.sh; fi
- if [ "$TRAVIS_OS_NAME" == "linux" ] && [ "$TARGET" == "android-vulkan" ]; then ./package/ci/travis-android-vulkan.sh; fi
- if [ "$TRAVIS_OS_NAME" == "osx" ] && [ "$TARGET" == "desktop" ]; then ./package/ci/travis-desktop.sh; fi
- if [ "$TRAVIS_OS_NAME" == "osx" ] && [ "$TARGET" == "ios-simulator" ]; then ./package/ci/travis-ios-simulator.sh; fi
- if [ "$TRAVIS_OS_NAME" == "osx" ] && [ "$TARGET" == "emscripten" ]; then ./package/ci/travis-emscripten.sh; fi

Loading…
Cancel
Save