1*b7893ccfSSadaf Ebrahimi# Build Configuration for Travis CI 2*b7893ccfSSadaf Ebrahimi# https://travis-ci.org 3*b7893ccfSSadaf Ebrahimi 4*b7893ccfSSadaf Ebrahimidist: xenial 5*b7893ccfSSadaf Ebrahimisudo: required 6*b7893ccfSSadaf Ebrahimilanguage: cpp 7*b7893ccfSSadaf Ebrahimi 8*b7893ccfSSadaf Ebrahimimatrix: 9*b7893ccfSSadaf Ebrahimi # Show final status immediately if a test fails. 10*b7893ccfSSadaf Ebrahimi fast_finish: true 11*b7893ccfSSadaf Ebrahimi allow_failures: 12*b7893ccfSSadaf Ebrahimi - env: CHECK_COMMIT_FORMAT=ON 13*b7893ccfSSadaf Ebrahimi - env: VULKAN_BUILD_TARGET=GN 14*b7893ccfSSadaf Ebrahimi include: 15*b7893ccfSSadaf Ebrahimi # Android build. 16*b7893ccfSSadaf Ebrahimi - os: linux 17*b7893ccfSSadaf Ebrahimi compiler: gcc 18*b7893ccfSSadaf Ebrahimi env: VULKAN_BUILD_TARGET=ANDROID ANDROID_TARGET=android-26 ANDROID_ABI=armeabi-v7a 19*b7893ccfSSadaf Ebrahimi # Android 64-bit build. 20*b7893ccfSSadaf Ebrahimi - os: linux 21*b7893ccfSSadaf Ebrahimi compiler: gcc 22*b7893ccfSSadaf Ebrahimi env: VULKAN_BUILD_TARGET=ANDROID ANDROID_TARGET=android-26 ANDROID_ABI=arm64-v8a 23*b7893ccfSSadaf Ebrahimi # Linux GCC debug build. 24*b7893ccfSSadaf Ebrahimi - os: linux 25*b7893ccfSSadaf Ebrahimi compiler: gcc 26*b7893ccfSSadaf Ebrahimi env: VULKAN_BUILD_TARGET=LINUX 27*b7893ccfSSadaf Ebrahimi # Linux clang debug build. 28*b7893ccfSSadaf Ebrahimi - os: linux 29*b7893ccfSSadaf Ebrahimi compiler: clang 30*b7893ccfSSadaf Ebrahimi env: VULKAN_BUILD_TARGET=LINUX 31*b7893ccfSSadaf Ebrahimi # Linux GN debug build. 32*b7893ccfSSadaf Ebrahimi - os: linux 33*b7893ccfSSadaf Ebrahimi env: VULKAN_BUILD_TARGET=GN 34*b7893ccfSSadaf Ebrahimi # Check for proper clang formatting in the pull request. 35*b7893ccfSSadaf Ebrahimi - env: CHECK_FORMAT=ON 36*b7893ccfSSadaf Ebrahimi # Check for proper commit message formatting for commits in PR 37*b7893ccfSSadaf Ebrahimi - env: CHECK_COMMIT_FORMAT=ON 38*b7893ccfSSadaf Ebrahimi 39*b7893ccfSSadaf Ebrahimicache: ccache 40*b7893ccfSSadaf Ebrahimi 41*b7893ccfSSadaf Ebrahimi# Use set -e so that the build fails when a command fails. 42*b7893ccfSSadaf Ebrahimi# The default action for Travis-CI is to continue running even if a command fails. 43*b7893ccfSSadaf Ebrahimi# See https://github.com/travis-ci/travis-ci/issues/1066. 44*b7893ccfSSadaf Ebrahimi# Use the YAML block scalar header (|) to allow easier multiline script coding. 45*b7893ccfSSadaf Ebrahimi 46*b7893ccfSSadaf Ebrahimibefore_install: 47*b7893ccfSSadaf Ebrahimi - set -e 48*b7893ccfSSadaf Ebrahimi - CMAKE_VERSION=3.10.2 49*b7893ccfSSadaf Ebrahimi - | 50*b7893ccfSSadaf Ebrahimi if [[ "${TRAVIS_OS_NAME}" == "linux" ]]; then 51*b7893ccfSSadaf Ebrahimi # Upgrade to the desired version of CMake 52*b7893ccfSSadaf Ebrahimi CMAKE_URL="https://cmake.org/files/v${CMAKE_VERSION%.*}/cmake-${CMAKE_VERSION}-Linux-x86_64.tar.gz" 53*b7893ccfSSadaf Ebrahimi echo CMAKE_URL=${CMAKE_URL} 54*b7893ccfSSadaf Ebrahimi mkdir cmake-${CMAKE_VERSION} && travis_retry wget --no-check-certificate -O - ${CMAKE_URL} | tar --strip-components=1 -xz -C cmake-${CMAKE_VERSION} 55*b7893ccfSSadaf Ebrahimi export PATH=${PWD}/cmake-${CMAKE_VERSION}/bin:${PATH} 56*b7893ccfSSadaf Ebrahimi else 57*b7893ccfSSadaf Ebrahimi brew install cmake || brew upgrade cmake 58*b7893ccfSSadaf Ebrahimi fi 59*b7893ccfSSadaf Ebrahimi cmake --version 60*b7893ccfSSadaf Ebrahimi - | 61*b7893ccfSSadaf Ebrahimi if [[ "$VULKAN_BUILD_TARGET" == "LINUX" ]] || [[ "$VULKAN_BUILD_TARGET" == "GN" ]]; then 62*b7893ccfSSadaf Ebrahimi # Install the appropriate Linux packages. 63*b7893ccfSSadaf Ebrahimi sudo apt-get -qq update 64*b7893ccfSSadaf Ebrahimi sudo apt-get -y install libxkbcommon-dev libwayland-dev libmirclient-dev libxrandr-dev \ 65*b7893ccfSSadaf Ebrahimi libx11-xcb-dev libxcb-keysyms1 libxcb-keysyms1-dev libxcb-ewmh-dev \ 66*b7893ccfSSadaf Ebrahimi libxcb-randr0-dev python-pathlib 67*b7893ccfSSadaf Ebrahimi fi 68*b7893ccfSSadaf Ebrahimi - | 69*b7893ccfSSadaf Ebrahimi if [[ "$VULKAN_BUILD_TARGET" == "ANDROID" ]]; then 70*b7893ccfSSadaf Ebrahimi # Install the Android NDK. 71*b7893ccfSSadaf Ebrahimi export ARCH=`uname -m` 72*b7893ccfSSadaf Ebrahimi wget http://dl.google.com/android/repository/android-ndk-r18b-linux-${ARCH}.zip 73*b7893ccfSSadaf Ebrahimi unzip -u -q android-ndk-r18b-linux-${ARCH}.zip 74*b7893ccfSSadaf Ebrahimi export ANDROID_NDK_HOME=`pwd`/android-ndk-r18b 75*b7893ccfSSadaf Ebrahimi export JAVA_HOME="/usr/lib/jvm/java-8-oracle" 76*b7893ccfSSadaf Ebrahimi export PATH="$ANDROID_NDK_HOME:$PATH" 77*b7893ccfSSadaf Ebrahimi fi 78*b7893ccfSSadaf Ebrahimi - | 79*b7893ccfSSadaf Ebrahimi if [[ "$CHECK_FORMAT" == "ON" && "$TRAVIS_PULL_REQUEST" != "false" ]]; then 80*b7893ccfSSadaf Ebrahimi # Install the clang format diff tool, but only for pull requests. 81*b7893ccfSSadaf Ebrahimi curl -L http://llvm.org/svn/llvm-project/cfe/trunk/tools/clang-format/clang-format-diff.py \ 82*b7893ccfSSadaf Ebrahimi -o scripts/clang-format-diff.py; 83*b7893ccfSSadaf Ebrahimi fi 84*b7893ccfSSadaf Ebrahimi # Misc setup 85*b7893ccfSSadaf Ebrahimi - export core_count=$(nproc || echo 4) && echo core_count = $core_count 86*b7893ccfSSadaf Ebrahimi - ccache --zero-stats 87*b7893ccfSSadaf Ebrahimi - set +e 88*b7893ccfSSadaf Ebrahimi 89*b7893ccfSSadaf Ebrahimiscript: 90*b7893ccfSSadaf Ebrahimi - set -e 91*b7893ccfSSadaf Ebrahimi - | 92*b7893ccfSSadaf Ebrahimi if [[ "$VULKAN_BUILD_TARGET" == "LINUX" ]]; then 93*b7893ccfSSadaf Ebrahimi # Build all dependencies for Vulkan-ValidationLayers 94*b7893ccfSSadaf Ebrahimi if [[ "$TRAVIS_EVENT_TYPE" == "cron" ]]; then 95*b7893ccfSSadaf Ebrahimi # Build master branch when triggered by (daily) cron job 96*b7893ccfSSadaf Ebrahimi ${TRAVIS_BUILD_DIR}/scripts/update_deps.py --dir=${TRAVIS_BUILD_DIR}/external --ref=master 97*b7893ccfSSadaf Ebrahimi else 98*b7893ccfSSadaf Ebrahimi ${TRAVIS_BUILD_DIR}/scripts/update_deps.py --dir=${TRAVIS_BUILD_DIR}/external 99*b7893ccfSSadaf Ebrahimi fi 100*b7893ccfSSadaf Ebrahimi fi 101*b7893ccfSSadaf Ebrahimi - | 102*b7893ccfSSadaf Ebrahimi if [[ "$VULKAN_BUILD_TARGET" == "LINUX" ]]; then 103*b7893ccfSSadaf Ebrahimi # Fetch googletest component to build validation layer tests 104*b7893ccfSSadaf Ebrahimi echo Fetching googletest external dependencies for building validation layer tests 105*b7893ccfSSadaf Ebrahimi git clone https://github.com/google/googletest.git ${TRAVIS_BUILD_DIR}/external/googletest 106*b7893ccfSSadaf Ebrahimi pushd ${TRAVIS_BUILD_DIR}/external/googletest 107*b7893ccfSSadaf Ebrahimi git checkout tags/release-1.8.1 108*b7893ccfSSadaf Ebrahimi popd 109*b7893ccfSSadaf Ebrahimi fi 110*b7893ccfSSadaf Ebrahimi - | 111*b7893ccfSSadaf Ebrahimi if [[ "$VULKAN_BUILD_TARGET" == "LINUX" ]]; then 112*b7893ccfSSadaf Ebrahimi # Verify consistency between source file generators and output 113*b7893ccfSSadaf Ebrahimi echo Verifying consistency between source file generators and output 114*b7893ccfSSadaf Ebrahimi python3 ${TRAVIS_BUILD_DIR}/scripts/generate_source.py --verify ${TRAVIS_BUILD_DIR}/external/Vulkan-Headers/registry 115*b7893ccfSSadaf Ebrahimi fi 116*b7893ccfSSadaf Ebrahimi - | 117*b7893ccfSSadaf Ebrahimi if [[ "$VULKAN_BUILD_TARGET" == "LINUX" ]]; then 118*b7893ccfSSadaf Ebrahimi # Build Vulkan-ValidationLayers 119*b7893ccfSSadaf Ebrahimi cd ${TRAVIS_BUILD_DIR} 120*b7893ccfSSadaf Ebrahimi mkdir build 121*b7893ccfSSadaf Ebrahimi cd build 122*b7893ccfSSadaf Ebrahimi cmake -C ${TRAVIS_BUILD_DIR}/external/helper.cmake -DCMAKE_BUILD_TYPE=Debug \ 123*b7893ccfSSadaf Ebrahimi -DCMAKE_INSTALL_PREFIX=${TRAVIS_BUILD_DIR}/build/install -DBUILD_LAYER_SUPPORT_FILES=ON \ 124*b7893ccfSSadaf Ebrahimi -DUSE_CCACHE=ON .. 125*b7893ccfSSadaf Ebrahimi cmake --build . --target install -- -j$core_count 126*b7893ccfSSadaf Ebrahimi fi 127*b7893ccfSSadaf Ebrahimi - | 128*b7893ccfSSadaf Ebrahimi if [[ "$VULKAN_BUILD_TARGET" == "LINUX" ]]; then 129*b7893ccfSSadaf Ebrahimi # Build VulkanTools 130*b7893ccfSSadaf Ebrahimi # Note: VulkanTools has a build dependency on Vulkan-ValidationLayers so it must be built after V-VL is built 131*b7893ccfSSadaf Ebrahimi pushd ${TRAVIS_BUILD_DIR}/external/VulkanTools 132*b7893ccfSSadaf Ebrahimi ./update_external_sources.sh 133*b7893ccfSSadaf Ebrahimi mkdir build 134*b7893ccfSSadaf Ebrahimi cd build 135*b7893ccfSSadaf Ebrahimi cmake -DCMAKE_BUILD_TYPE=Debug \ 136*b7893ccfSSadaf Ebrahimi -DBUILD_VIA=NO -DBUILD_VKTRACE=NO -DBUILD_VLF=NO -DBUILD_TESTS=NO -DBUILD_LAYERMGR=NO \ 137*b7893ccfSSadaf Ebrahimi -DBUILD_VKTRACEVIEWER=NO -DBUILD_VKTRACE_LAYER=NO -DBUILD_VKTRACE_REPLAY=NO \ 138*b7893ccfSSadaf Ebrahimi -DVULKAN_HEADERS_INSTALL_DIR=${TRAVIS_BUILD_DIR}/external/Vulkan-Headers/build/install \ 139*b7893ccfSSadaf Ebrahimi -DVULKAN_LOADER_INSTALL_DIR=${TRAVIS_BUILD_DIR}/external/Vulkan-Loader/build/install \ 140*b7893ccfSSadaf Ebrahimi -DVULKAN_VALIDATIONLAYERS_INSTALL_DIR=${TRAVIS_BUILD_DIR}/build/install \ 141*b7893ccfSSadaf Ebrahimi .. 142*b7893ccfSSadaf Ebrahimi cmake --build . -- -j $core_count 143*b7893ccfSSadaf Ebrahimi popd 144*b7893ccfSSadaf Ebrahimi fi 145*b7893ccfSSadaf Ebrahimi - | 146*b7893ccfSSadaf Ebrahimi if [[ "$VULKAN_BUILD_TARGET" == "LINUX" ]]; then 147*b7893ccfSSadaf Ebrahimi # Run Tests 148*b7893ccfSSadaf Ebrahimi cd ${TRAVIS_BUILD_DIR} 149*b7893ccfSSadaf Ebrahimi export LD_LIBRARY_PATH=${TRAVIS_BUILD_DIR}/external/Vulkan-Loader/install/lib:${LD_LIBRARY_PATH} 150*b7893ccfSSadaf Ebrahimi export VK_LAYER_PATH=${TRAVIS_BUILD_DIR}/external/VulkanTools/build/layersvt:${TRAVIS_BUILD_DIR}/build/layers 151*b7893ccfSSadaf Ebrahimi export VK_ICD_FILENAMES=${TRAVIS_BUILD_DIR}/external/Vulkan-Tools/build/icd/VkICD_mock_icd.json 152*b7893ccfSSadaf Ebrahimi build/tests/vk_layer_validation_tests 153*b7893ccfSSadaf Ebrahimi for profile in tests/device_profiles/*.json 154*b7893ccfSSadaf Ebrahimi do 155*b7893ccfSSadaf Ebrahimi echo Testing with profile $profile 156*b7893ccfSSadaf Ebrahimi VK_DEVSIM_FILENAME=$profile build/tests/vk_layer_validation_tests --devsim 157*b7893ccfSSadaf Ebrahimi done 158*b7893ccfSSadaf Ebrahimi fi 159*b7893ccfSSadaf Ebrahimi - | 160*b7893ccfSSadaf Ebrahimi if [[ "$VULKAN_BUILD_TARGET" == "ANDROID" ]]; then 161*b7893ccfSSadaf Ebrahimi pushd build-android 162*b7893ccfSSadaf Ebrahimi ./update_external_sources_android.sh --abi $ANDROID_ABI --no-build 163*b7893ccfSSadaf Ebrahimi USE_CCACHE=1 NDK_CCACHE=ccache ndk-build APP_ABI=$ANDROID_ABI -j $core_count 164*b7893ccfSSadaf Ebrahimi popd 165*b7893ccfSSadaf Ebrahimi fi 166*b7893ccfSSadaf Ebrahimi - | 167*b7893ccfSSadaf Ebrahimi if [[ "$CHECK_FORMAT" == "ON" ]]; then 168*b7893ccfSSadaf Ebrahimi if [[ "$TRAVIS_PULL_REQUEST" != "false" ]]; then 169*b7893ccfSSadaf Ebrahimi # Run the clang format check only for pull request builds because the 170*b7893ccfSSadaf Ebrahimi # master branch is needed to do the git diff. 171*b7893ccfSSadaf Ebrahimi echo "Checking clang-format between TRAVIS_BRANCH=$TRAVIS_BRANCH and TRAVIS_PULL_REQUEST_BRANCH=$TRAVIS_PULL_REQUEST_BRANCH" 172*b7893ccfSSadaf Ebrahimi ./scripts/check_code_format.sh 173*b7893ccfSSadaf Ebrahimi else 174*b7893ccfSSadaf Ebrahimi echo "Skipping clang-format check since this is not a pull request." 175*b7893ccfSSadaf Ebrahimi fi 176*b7893ccfSSadaf Ebrahimi fi 177*b7893ccfSSadaf Ebrahimi - | 178*b7893ccfSSadaf Ebrahimi if [[ "$CHECK_COMMIT_FORMAT" == "ON" ]]; then 179*b7893ccfSSadaf Ebrahimi if [[ "$TRAVIS_PULL_REQUEST" != "false" ]]; then 180*b7893ccfSSadaf Ebrahimi echo "Checking commit message formats: See CONTRIBUTING.md" 181*b7893ccfSSadaf Ebrahimi ./scripts/check_commit_message_format.sh 182*b7893ccfSSadaf Ebrahimi fi 183*b7893ccfSSadaf Ebrahimi fi 184*b7893ccfSSadaf Ebrahimi - | 185*b7893ccfSSadaf Ebrahimi if [[ "$VULKAN_BUILD_TARGET" == "GN" ]]; then 186*b7893ccfSSadaf Ebrahimi git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git depot_tools 187*b7893ccfSSadaf Ebrahimi export PATH=$PATH:$PWD/depot_tools 188*b7893ccfSSadaf Ebrahimi ./build-gn/update_deps.sh 189*b7893ccfSSadaf Ebrahimi gn gen out/Debug 190*b7893ccfSSadaf Ebrahimi ninja -C out/Debug 191*b7893ccfSSadaf Ebrahimi fi 192*b7893ccfSSadaf Ebrahimi - ccache --show-stats 193*b7893ccfSSadaf Ebrahimi - set +e 194*b7893ccfSSadaf Ebrahimi 195*b7893ccfSSadaf Ebrahiminotifications: 196*b7893ccfSSadaf Ebrahimi email: 197*b7893ccfSSadaf Ebrahimi recipients: 198*b7893ccfSSadaf Ebrahimi - [email protected] 199*b7893ccfSSadaf Ebrahimi - [email protected] 200*b7893ccfSSadaf Ebrahimi - [email protected] 201*b7893ccfSSadaf Ebrahimi - [email protected] 202*b7893ccfSSadaf Ebrahimi - [email protected] 203*b7893ccfSSadaf Ebrahimi on_success: change 204*b7893ccfSSadaf Ebrahimi on_failure: always 205