1#!/usr/bin/env bash 2#===----------------------------------------------------------------------===## 3# 4# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 5# See https://llvm.org/LICENSE.txt for license information. 6# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 7# 8#===----------------------------------------------------------------------===## 9 10# 11# This file contains functions to compute which projects should be built by CI 12# systems and is intended to provide common functionality applicable across 13# multiple systems during a transition period. 14# 15 16function compute-projects-to-test() { 17 isForWindows=$1 18 shift 19 projects=${@} 20 for project in ${projects}; do 21 echo "${project}" 22 case ${project} in 23 lld) 24 for p in bolt cross-project-tests; do 25 echo $p 26 done 27 ;; 28 llvm) 29 for p in bolt clang clang-tools-extra lld lldb mlir polly; do 30 echo $p 31 done 32 # Flang is not stable in Windows CI at the moment 33 if [[ $isForWindows == 0 ]]; then 34 echo flang 35 fi 36 ;; 37 clang) 38 # lldb is temporarily removed to alleviate Linux pre-commit CI waiting times 39 for p in clang-tools-extra compiler-rt cross-project-tests; do 40 echo $p 41 done 42 ;; 43 clang-tools-extra) 44 echo libc 45 ;; 46 mlir) 47 # Flang is not stable in Windows CI at the moment 48 if [[ $isForWindows == 0 ]]; then 49 echo flang 50 fi 51 ;; 52 *) 53 # Nothing to do 54 ;; 55 esac 56 done 57} 58 59function compute-runtimes-to-test() { 60 projects=${@} 61 for project in ${projects}; do 62 case ${project} in 63 clang) 64 for p in libcxx libcxxabi libunwind; do 65 echo $p 66 done 67 ;; 68 *) 69 # Nothing to do 70 ;; 71 esac 72 done 73} 74 75function add-dependencies() { 76 projects=${@} 77 for project in ${projects}; do 78 echo "${project}" 79 case ${project} in 80 bolt) 81 for p in clang lld llvm; do 82 echo $p 83 done 84 ;; 85 cross-project-tests) 86 for p in lld clang; do 87 echo $p 88 done 89 ;; 90 clang-tools-extra) 91 for p in llvm clang; do 92 echo $p 93 done 94 ;; 95 compiler-rt|libc|openmp) 96 echo clang lld 97 ;; 98 flang|lldb|libclc) 99 for p in llvm clang; do 100 echo $p 101 done 102 ;; 103 lld|mlir|polly) 104 echo llvm 105 ;; 106 *) 107 # Nothing to do 108 ;; 109 esac 110 done 111} 112 113function exclude-linux() { 114 projects=${@} 115 for project in ${projects}; do 116 case ${project} in 117 cross-project-tests) ;; # tests failing 118 openmp) ;; # https://github.com/google/llvm-premerge-checks/issues/410 119 *) 120 echo "${project}" 121 ;; 122 esac 123 done 124} 125 126function exclude-windows() { 127 projects=${@} 128 for project in ${projects}; do 129 case ${project} in 130 cross-project-tests) ;; # tests failing 131 compiler-rt) ;; # tests taking too long 132 openmp) ;; # TODO: having trouble with the Perl installation 133 libc) ;; # no Windows support 134 lldb) ;; # custom environment requirements (https://github.com/llvm/llvm-project/pull/94208#issuecomment-2146256857) 135 bolt) ;; # tests are not supported yet 136 *) 137 echo "${project}" 138 ;; 139 esac 140 done 141} 142 143# Prints only projects that are both present in $modified_dirs and the passed 144# list. 145function keep-modified-projects() { 146 projects=${@} 147 for project in ${projects}; do 148 if echo "$modified_dirs" | grep -q -E "^${project}$"; then 149 echo "${project}" 150 fi 151 done 152} 153 154function check-targets() { 155 # Do not use "check-all" here because if there is "check-all" plus a 156 # project specific target like "check-clang", that project's tests 157 # will be run twice. 158 projects=${@} 159 for project in ${projects}; do 160 case ${project} in 161 clang-tools-extra) 162 echo "check-clang-tools" 163 ;; 164 compiler-rt) 165 echo "check-compiler-rt" 166 ;; 167 cross-project-tests) 168 echo "check-cross-project" 169 ;; 170 libcxx) 171 echo "check-cxx" 172 ;; 173 libcxxabi) 174 echo "check-cxxabi" 175 ;; 176 libunwind) 177 echo "check-unwind" 178 ;; 179 lldb) 180 echo "check-lldb" 181 ;; 182 pstl) 183 # Currently we do not run pstl tests in CI. 184 ;; 185 libclc) 186 # Currently there is no testing for libclc. 187 ;; 188 *) 189 echo "check-${project}" 190 ;; 191 esac 192 done 193} 194 195