blob: 006db9ad52f86eb71b647439e8438a4d86973cff (
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
|
# Build scripts for libc++
setup_build_variables_libcxx() {
LIBCXX_SRC="${BASE}/llvm-${LLVM_VERSION_SHORT}"
LIBCXX_BUILD="${BASE}/libc++-build-${LLVM_VERSION_SHORT}"
LIBCXX_INSTALL="${BASE}/libc++-install-${LLVM_VERSION_SHORT}"
}
download_libcxx() {
# Skip step if we already checked out code
[[ -f "${LIBCXX_SRC}/.src_checked_out" ]] && return 0
local LLVM_VERSION_MAJOR="${LLVM_VERSION/.*/}"
local version="release/${LLVM_VERSION_MAJOR}.x"
git clone --single-branch --branch "${version}" --depth 1 "https://github.com/llvm/llvm-project.git" "${LIBCXX_SRC}"
# Apply existing patches if needed
if [ -f "${DIR}/patches/libcxx${LLVM_VERSION_SHORT}.patch" ]; then
cd "${LIBCXX_SRC}" || (echo "Directory does not exist"; exit 1)
patch -p1 --follow-symlinks -i "${DIR}/patches/libcxx${LLVM_VERSION_SHORT}.patch" || return 1
fi
touch "${LIBCXX_SRC}/.src_checked_out"
}
build_libcxx() {
mkdir -p "${LIBCXX_BUILD}"
cd "${LIBCXX_BUILD}"
local LLVM_VERSION_MAJOR="${LLVM_VERSION/.*/}"
local cmake_flags=(
"-DLLVM_ENABLE_THREADS:BOOL=OFF"
"-DLIBCXX_ENABLE_THREADS:BOOL=OFF"
"-DLIBCXX_ENABLE_SHARED:BOOL=ON"
"-DLIBCXXABI_ENABLE_THREADS:BOOL=OFF"
"-DCMAKE_BUILD_TYPE:STRING=Release"
"-DCMAKE_INSTALL_PREFIX=${LIBCXX_INSTALL}"
)
if [[ "${LLVM_VERSION_SHORT}" -ge "140" ]]; then
cmake_flags+=("-DLLVM_ENABLE_RUNTIMES=libcxx;libcxxabi")
cmake_flags+=("-DLLVM_ENABLE_PROJECTS=")
cmake_flags+=("-DLLVM_ENABLE_PROJECTS_USED:BOOL=ON")
else
cmake_flags+=("-DLLVM_ENABLE_PROJECTS=libcxx;libcxxabi")
fi
# Static ABI libraries are not supported under OS X
if [[ "${OS}" == "osx" ]]; then
cmake_flags+=("-DLIBCXX_ENABLE_STATIC_ABI_LIBRARY:BOOL=OFF")
else
cmake_flags+=("-DLIBCXX_ENABLE_STATIC_ABI_LIBRARY:BOOL=ON")
fi
(
export CC=wllvm
export CXX=wllvm++
export LLVM_COMPILER=clang
export LLVM_COMPILER_PATH="$(dirname "${BITCODE_CC}")"
cmake "${cmake_flags[@]}" "${LIBCXX_SRC}/llvm"
if [[ "${LLVM_VERSION_SHORT}" -ge "140" ]]; then
make runtimes "-j$(nproc)" || make runtimes || return 1
else
make cxx "-j$(nproc)" || make cxx || return 1
fi
)
}
install_libcxx() {
cd "${LIBCXX_BUILD}"
(
export CC=wllvm
export CXX=wllvm++
export LLVM_COMPILER=clang
export LLVM_COMPILER_PATH="$(dirname "${BITCODE_CC}")"
if [[ "${LLVM_VERSION_SHORT}" -ge "140" ]]; then
cd "${LIBCXX_BUILD}/runtimes" || return 1
make install || return 1
else
cd "${LIBCXX_BUILD}/projects" || return 1
make install || return 1
fi
local libraries
if [[ "${OS}" == "osx" ]]; then
libraries=("${LIBCXX_INSTALL}"/lib/*/lib*.dylib)
else
libraries=("${LIBCXX_INSTALL}"/lib/*/lib*.so)
fi
local LLVM_VERSION_MAJOR="${LLVM_VERSION/.*/}"
libraries+=("${LIBCXX_INSTALL}"/lib/*/lib*.a)
for p in "${libraries[@]}" ; do
extract-bc "$p"
done
touch "${LIBCXX_INSTALL}"/.is_installed
)
return 0
}
# Check if the binary artifact is installed
is_installed_libcxx() {
(
setup_build_variables_libcxx
[[ -f "${LIBCXX_INSTALL}"/.is_installed ]]
) || return 1
}
get_docker_config_id_libcxx() {
(
echo "${LLVM_VERSION_SHORT}"
)
}
get_build_artifacts_libcxx() {
(
setup_build_variables_libcxx
echo "${LIBCXX_INSTALL}"
echo "${LIBCXX_SRC}"
)
}
setup_artifact_variables_libcxx() {
setup_build_variables_libcxx
}
|