From 96050cb1e3ff19b4b06b7a448447a6f3af48a470 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Fri, 2 Mar 2018 22:19:33 +0100 Subject: [PATCH] package/ci: enable Vulkan building on Travis CI. Currently a separate job with everything that depends on GL disabled. And against a minimal Vulkan driver that has just four symbols, because I can't run the stuff there anyway. --- package/ci/libvulkan.cpp | 21 +++++++++++++ package/ci/travis-android-arm.sh | 1 + package/ci/travis-desktop-gles.sh | 1 + package/ci/travis-desktop-vulkan.sh | 47 +++++++++++++++++++++++++++++ package/ci/travis-desktop.sh | 2 ++ package/ci/travis-emscripten.sh | 1 + package/ci/travis-ios-simulator.sh | 1 + package/ci/travis.yml | 27 ++++++++++++++--- 8 files changed, 96 insertions(+), 5 deletions(-) create mode 100644 package/ci/libvulkan.cpp create mode 100755 package/ci/travis-desktop-vulkan.sh diff --git a/package/ci/libvulkan.cpp b/package/ci/libvulkan.cpp new file mode 100644 index 000000000..5c12e63ac --- /dev/null +++ b/package/ci/libvulkan.cpp @@ -0,0 +1,21 @@ +/* Yes. I know what I am doing. Yes. Really. */ + +extern "C" { + +int vkCreateInstance(const void*, const void*, void*) { + return -9; +} + +int vkEnumerateInstanceExtensionProperties(const void*, void*, void*) { + return -9; +} + +int vkEnumerateInstanceLayerProperties(void*, void*) { + return -9; +} + +void(*vkGetInstanceProcAddr(void*, const void*))() { + return nullptr; +} + +} diff --git a/package/ci/travis-android-arm.sh b/package/ci/travis-android-arm.sh index 2fac6f9a6..ed693716d 100755 --- a/package/ci/travis-android-arm.sh +++ b/package/ci/travis-android-arm.sh @@ -52,6 +52,7 @@ cmake .. \ -DCMAKE_BUILD_TYPE=Release \ -DTARGET_GLES2=$TARGET_GLES2 \ -DWITH_AUDIO=OFF \ + -DWITH_VK=OFF \ -DWITH_ANDROIDAPPLICATION=ON \ -DWITH_EGLCONTEXT=ON \ -DWITH_ANYAUDIOIMPORTER=OFF \ diff --git a/package/ci/travis-desktop-gles.sh b/package/ci/travis-desktop-gles.sh index 3d52e6dbd..da5227726 100755 --- a/package/ci/travis-desktop-gles.sh +++ b/package/ci/travis-desktop-gles.sh @@ -24,6 +24,7 @@ cmake .. \ -DTARGET_GLES2=$TARGET_GLES2 \ -DTARGET_DESKTOP_GLES=ON \ -DWITH_AUDIO=ON \ + -DWITH_VK=OFF \ -DWITH_GLFWAPPLICATION=OFF \ -DWITH_SDL2APPLICATION=OFF \ -DWITH_WINDOWLESS${PLATFORM_GL_API}APPLICATION=ON \ diff --git a/package/ci/travis-desktop-vulkan.sh b/package/ci/travis-desktop-vulkan.sh new file mode 100755 index 000000000..8c94cd814 --- /dev/null +++ b/package/ci/travis-desktop-vulkan.sh @@ -0,0 +1,47 @@ +#!/bin/bash +set -ev + +# Corrade +git clone --depth 1 git://github.com/mosra/corrade.git +cd corrade +mkdir build && cd build +cmake .. \ + -DCMAKE_CXX_FLAGS="$CMAKE_CXX_FLAGS" \ + -DCMAKE_INSTALL_PREFIX=$HOME/deps \ + -DCMAKE_INSTALL_RPATH=$HOME/deps/lib \ + -DCMAKE_BUILD_TYPE=Debug \ + -DBUILD_DEPRECATED=$BUILD_DEPRECATED \ + -DWITH_INTERCONNECT=OFF \ + -DWITH_PLUGINMANAGER=OFF \ + -G Ninja +ninja install +cd ../.. + +mkdir build && cd build +# Not using CXXFLAGS in order to avoid affecting dependencies +cmake .. \ + -DCMAKE_CXX_FLAGS="$CMAKE_CXX_FLAGS" \ + -DCMAKE_INSTALL_PREFIX=$HOME/deps \ + -DCMAKE_BUILD_TYPE=Debug \ + -DVulkan_LIBRARY=$HOME/libvulkan.so \ + -DWITH_AUDIO=OFF \ + -DWITH_DEBUGTOOLS=OFF \ + -DWITH_GL=OFF \ + -DWITH_MESHTOOLS=OFF \ + -DWITH_PRIMITIVES=OFF \ + -DWITH_SCENEGRAPH=ON \ + -DWITH_SHADERS=OFF \ + -DWITH_SHAPES=ON \ + -DWITH_TEXT=OFF \ + -DWITH_TEXTURETOOLS=OFF \ + -DWITH_TRADE=OFF \ + -DWITH_VK=ON \ + -DWITH_AL_INFO=OFF \ + -DWITH_VK_INFO=ON \ + -DBUILD_TESTS=ON \ + -DBUILD_VK_TESTS=ON \ + -DBUILD_DEPRECATED=$BUILD_DEPRECATED \ + -G Ninja +# Otherwise the job gets killed (probably because using too much memory) +ninja -j4 +ASAN_OPTIONS="color=always" LSAN_OPTIONS="color=always suppressions=$TRAVIS_BUILD_DIR/package/ci/leaksanitizer.conf" CORRADE_TEST_COLOR=ON ctest -V -E GLTest diff --git a/package/ci/travis-desktop.sh b/package/ci/travis-desktop.sh index 861232879..a503b167b 100755 --- a/package/ci/travis-desktop.sh +++ b/package/ci/travis-desktop.sh @@ -23,7 +23,9 @@ cmake .. \ -DCMAKE_INSTALL_PREFIX=$HOME/deps \ -DCMAKE_PREFIX_PATH=$HOME/glfw \ -DCMAKE_BUILD_TYPE=Debug \ + -DVULKAN_LIBRARY=$HOME/libvulkan.so \ -DWITH_AUDIO=ON \ + -DWITH_VK=OFF \ -DWITH_GLFWAPPLICATION=ON \ -DWITH_GLUTAPPLICATION=$WITH_GLUTAPPLICATION \ -DWITH_SDL2APPLICATION=ON \ diff --git a/package/ci/travis-emscripten.sh b/package/ci/travis-emscripten.sh index a544c1e75..3985f56cb 100755 --- a/package/ci/travis-emscripten.sh +++ b/package/ci/travis-emscripten.sh @@ -49,6 +49,7 @@ cmake .. \ -DCMAKE_INSTALL_PREFIX=$HOME/deps \ -DCMAKE_FIND_ROOT_PATH=$HOME/deps \ -DWITH_AUDIO=ON \ + -DWITH_VK=OFF \ -DWITH_SDL2APPLICATION=ON \ -WDITH_WINDOWLESSEGLAPPLICATION=ON \ -DWITH_ANYAUDIOIMPORTER=ON \ diff --git a/package/ci/travis-ios-simulator.sh b/package/ci/travis-ios-simulator.sh index 53e46d2e5..c617421c3 100755 --- a/package/ci/travis-ios-simulator.sh +++ b/package/ci/travis-ios-simulator.sh @@ -45,6 +45,7 @@ cmake .. \ -DCMAKE_PREFIX_PATH="$HOME/deps;$TRAVIS_BUILD_DIR/sdl2" \ -DTARGET_GLES2=$TARGET_GLES2 \ -DWITH_AUDIO=ON \ + -DWITH_VK=OFF \ -DWITH_SDL2APPLICATION=ON \ -DWITH_WINDOWLESSIOSAPPLICATION=ON \ -DWITH_EGLCONTEXT=ON \ diff --git a/package/ci/travis.yml b/package/ci/travis.yml index c3c778e25..5f48fb127 100644 --- a/package/ci/travis.yml +++ b/package/ci/travis.yml @@ -59,6 +59,19 @@ matrix: - libxinerama-dev - libxcursor-dev #- libxi-dev + - language: cpp + os: linux + dist: trusty + compiler: gcc + env: + - JOBID=linux-vulkan + - TARGET=desktop-vulkan + - CMAKE_CXX_FLAGS="--coverage" + addons: + apt: + packages: + - ninja-build + - lcov - language: cpp os: linux dist: trusty @@ -170,12 +183,12 @@ cache: - $HOME/cmake install: -- if [ "$TRAVIS_OS_NAME" == "linux" ] && [ ! "$TARGET" == "desktop-sanitizers" ] && [ ! "$TARGET" == "android" ]; then export CXX=g++-4.7; fi +- if [ "$TRAVIS_OS_NAME" == "linux" ] && [ ! "$TARGET" == "desktop-sanitizers" ] && [ ! "$TARGET" == "android" ] && [ ! "$TARGET" == "desktop-vulkan" ]; then export CXX=g++-4.7; fi - if [ "$TRAVIS_OS_NAME" == "linux" ] && [ "$TARGET" == "desktop-sanitizers" ]; then export CXX=clang++-3.8; fi - if [ "$TRAVIS_OS_NAME" == "linux" ] && [ "$TARGET" == "desktop" ]; then export WITH_GLUTAPPLICATION=ON; fi -- if [ "$WITH_GLUTAPPLICATION" != "ON" ]; then export WITH_GLUTAPPLICATION=OFF; fi +- if [ "$WITH_GLUTAPPLICATION" != "ON" ] && [ ! "$TARGET" == "desktop-vulkan" ]; then export WITH_GLUTAPPLICATION=OFF; fi - if [ "$BUILD_DEPRECATED" != "OFF" ]; then export BUILD_DEPRECATED=ON; fi -- if [ "$TRAVIS_OS_NAME" == "linux" ]; then export PLATFORM_GL_API=GLX; fi +- if [ "$TRAVIS_OS_NAME" == "linux" ] && [ ! "$TARGET" == "desktop-vulkan" ]; then export PLATFORM_GL_API=GLX; 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 # Download CMake 2.8.12 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 @@ -183,9 +196,9 @@ install: # are running, so for it we use the preinstalled CMake. Android needs CMake # 3.7, but https://gitlab.kitware.com/cmake/cmake/issues/17253 is fixed in # 3.9.2, so grab that. -- if [ "$TRAVIS_OS_NAME" == "linux" ] && [ ! "$TARGET" == "desktop-sanitizers" ] && [ ! "$TARGET" == "android" ] && [ ! -e "$HOME/cmake/bin" ]; then cd $HOME ; wget -nc --no-check-certificate https://cmake.org/files/v2.8/cmake-2.8.12.2-Linux-i386.tar.gz && mkdir -p cmake && cd cmake && tar --strip-components=1 -xzf ../cmake-2.8.12.2-Linux-i386.tar.gz && cd $TRAVIS_BUILD_DIR ; fi +- if [ "$TRAVIS_OS_NAME" == "linux" ] && [ ! "$TARGET" == "desktop-sanitizers" ] && [ ! "$TARGET" == "android" ] && [ ! "$TARGET" == "desktop-vulkan" ] && [ ! -e "$HOME/cmake/bin" ]; then cd $HOME ; wget -nc --no-check-certificate https://cmake.org/files/v2.8/cmake-2.8.12.2-Linux-i386.tar.gz && mkdir -p cmake && cd cmake && tar --strip-components=1 -xzf ../cmake-2.8.12.2-Linux-i386.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-sanitizers" ]; then export PATH=$HOME/cmake/bin:$PATH && cmake --version; fi +- if [ "$TRAVIS_OS_NAME" == "linux" ] && [ ! "$TARGET" == "desktop-vulkan" ] && [ ! "$TARGET" == "desktop-sanitizers" ]; 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 - if [ "$TRAVIS_OS_NAME" == "osx" ] && [ "$TARGET" == "desktop" ]; then export PLATFORM_GL_API=CGL; fi @@ -203,8 +216,12 @@ install: # supporting that. Latest GLFW is tested on macOS. - if [ "$TRAVIS_OS_NAME" == "linux" ] && ( [ "$TARGET" == "desktop" ] || [ "$TARGET" == "desktop-sanitizers" ] ) && [ ! -e "$HOME/glfw/include" ]; then wget https://github.com/glfw/glfw/releases/download/3.1.2/glfw-3.1.2.zip && unzip glfw-3.1.2.zip && cd glfw-3.1.2 && mkdir build && cd build && cmake .. -DCMAKE_INSTALL_PREFIX=$HOME/glfw -DCMAKE_BUILD_TYPE=Release -DGLFW_BUILD_EXAMPLES=OFF -DGLFW_BUILD_TESTS=OFF -DGLFW_BUILD_DOCS=OFF -DBUILD_SHARED_LIBS=ON && cmake --build . --target install && cd ../..; fi +# Vulkan (eheh) +- if [ "$TRAVIS_OS_NAME" == "linux" ] && [ "$TARGET" == "desktop-vulkan" ]; then g++ package/ci/libvulkan.cpp -std=c++11 -shared -o $HOME/libvulkan.so; fi + script: - if [ "$TRAVIS_OS_NAME" == "linux" ] && ( [ "$TARGET" == "desktop" ] || [ "$TARGET" == "desktop-sanitizers" ] ); then ./package/ci/travis-desktop.sh; fi +- if [ "$TRAVIS_OS_NAME" == "linux" ] && [ "$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" == "osx" ] && [ "$TARGET" == "desktop" ]; then ./package/ci/travis-desktop.sh; fi