blob: ef055583ba0f4da60ea61ce2beba9a780b71b55f (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
|
# Build dependencies
install_build_dependencies_llvm() {
apt update -y
dependencies=(
ca-certificates
build-essential
autoconf
automake
groff
gcc
g++
python-dev
make
git # To check out code
zlib1g-dev
cmake
)
if [[ "${SANITIZERS[*]}" == "memory" ]]; then
dependencies+=(ninja-build)
fi
#Install essential dependencies
apt -y --no-install-recommends install "${dependencies[@]}"
}
install_binary_artifact_llvm() {
local enable_optimized=$(to_bool "${ENABLE_OPTIMIZED}")
local enable_debug=$(to_bool "${ENABLE_DEBUG}")
local disable_assertions=$(to_bool "${DISABLE_ASSERTIONS}")
local requires_rtti=$(to_bool "${REQUIRES_RTTI}")
local LLVM_VERSION_MAJOR="${LLVM_VERSION/.*/}"
local LLVM_VERSION_MINOR="${LLVM_VERSION/*./}"
# No support for LLVM packages with debug information, incompatible if requested otherwise
[[ "${enable_debug}" -eq 1 ]] && return 1
# Packages are build with assertions disabled, incompatible if requested otherwise
[[ "${disable_assertions}" -eq 0 ]] && return 1
# Packages are build with RTTI enabled, incompatible if requested otherwise
[[ "${requires_rtti}" -eq 0 ]] && return 1
# Enable/Disable optimized does not matter
# Add certificate
apt update -y
dependencies=(
ca-certificates
wget
lsb-release
gnupg
)
apt -y --no-install-recommends install "${dependencies[@]}"
wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key| apt-key add -
local version=""
[[ "${LLVM_VERSION_MAJOR}" -le 6 ]] && version="-${LLVM_VERSION}"
[[ "${LLVM_VERSION_MAJOR}" -ge 7 ]] && version="-${LLVM_VERSION_MAJOR}"
# Add repository
codename="$(lsb_release --codename --short)"
apt_entry="deb http://apt.llvm.org/${codename}/ llvm-toolchain-${codename}${version} main"
if [[ ! $(grep -q "${apt_entry}") ]]; then
echo "${apt_entry}" >> /etc/apt/sources.list
apt update -y
fi
dependencies=(
"llvm${version}"
"llvm${version}-dev"
"llvm${version}-runtime"
"clang${version}"
)
#Install essential dependencies
apt -y --no-install-recommends install "${dependencies[@]}" || return 1
}
# Check if the binary artifact is installed
is_installed_llvm() {
local version=""
local LLVM_VERSION_MAJOR="${LLVM_VERSION/.*/}"
local LLVM_VERSION_MINOR="${LLVM_VERSION/*./}"
[[ "${LLVM_VERSION_MAJOR}" -le 6 ]] && version="${LLVM_VERSION}"
[[ "${LLVM_VERSION_MAJOR}" -ge 7 ]] && version="${LLVM_VERSION_MAJOR}"
local lc=""
# Check for llvm-config without suffix but correct versions number
lc=$(which "llvm-config")
if [[ -z "${lc}" || $($lc --version) != "${LLVM_VERSION}"* ]]; then
# Check if llvm-config with the right version exists
lc=$(which "llvm-config-${version}")
fi
[[ -z "${lc}" ]] && return 1
local rtti
rtti="$(${lc} --has-rtti)"
local assertion
assertion="$(${lc} --assertion-mode)"
local build_mode
build_mode="$(${lc} --build-mode)"
# Check requested mode with mode of the found item
[[ $(to_bool "${REQUIRES_RTTI}") -eq $(to_bool "${rtti}") ]] || return 1
[[ $(to_bool "${DISABLE_ASSERTIONS}") -ne $(to_bool "${assertion}") ]] || return 1
}
setup_artifact_variables_llvm() {
# Check for variables set and not empty
local version=""
local LLVM_VERSION_MAJOR="${LLVM_VERSION/.*/}"
local LLVM_VERSION_MINOR="${LLVM_VERSION/*./}"
[[ "${LLVM_VERSION_MAJOR}" -le 6 ]] && version="${LLVM_VERSION}"
[[ "${LLVM_VERSION_MAJOR}" -ge 7 ]] && version="${LLVM_VERSION_MAJOR}"
local lc=""
# Check for llvm-config without suffix but correct versions number
lc=$(which "llvm-config")
if [[ -z "${lc}" || $($lc --version) != "${LLVM_VERSION}"* ]]; then
# Check if llvm-config with the right version exists
lc=$(which "llvm-config-${version}")
fi
[[ -z "${lc}" ]] && return 1
LLVM_CONFIG="${lc}"
LLVM_INSTALL="$(${lc} --bindir)"
BITCODE_CC="${LLVM_INSTALL}/clang"
BITCODE_CXX="${LLVM_INSTALL}/clang++"
}
get_build_artifacts_llvm() {
is_installed_llvm
[[ $? -ne 0 ]] && return 1
return 0
}
|