首次提交
This commit is contained in:
@@ -0,0 +1,111 @@
|
||||
#!/bin/bash
|
||||
if ! type "include" >/dev/null 2>&1; then
|
||||
include() {
|
||||
. "$(cd "$(dirname "$1")" && pwd)/${2}"
|
||||
}
|
||||
fi
|
||||
include "${BASH_SOURCE[0]}" ./pragma_once.bash
|
||||
if ! pragma_once ${BASH_SOURCE[0]}; then return 0; fi
|
||||
install_llvm_mingw() {
|
||||
local ver="$1"
|
||||
local install_dir="/ae/opt/llvm-mingw"
|
||||
local repo="https://github.com/mstorsjo/llvm-mingw.git"
|
||||
local release_base="https://github.com/mstorsjo/llvm-mingw/releases/download"
|
||||
local work_dir="${install_dir}/.install"
|
||||
local download_dir="${work_dir}/download"
|
||||
local extract_dir="${work_dir}/extract"
|
||||
sudo mkdir -p "${download_dir}" "${extract_dir}"
|
||||
if [[ -z "$ver" ]]; then
|
||||
ver=$(git ls-remote --tags "${repo}" |
|
||||
awk '{print $2}' |
|
||||
sed 's#refs/tags/##' |
|
||||
sed 's/\^{}//g' |
|
||||
grep -E '^[0-9]{8}$' |
|
||||
sort -V |
|
||||
tail -n 1)
|
||||
fi
|
||||
if [[ -z "$ver" ]]; then
|
||||
echo "[llvm-mingw] failed to resolve version" >&2
|
||||
return 1
|
||||
fi
|
||||
echo "[llvm-mingw] selected version=${ver}"
|
||||
local file=""
|
||||
local url=""
|
||||
local candidates=(
|
||||
"llvm-mingw-${ver}-ucrt-ubuntu-22.04-x86_64.tar.xz"
|
||||
"llvm-mingw-${ver}-ucrt-ubuntu-20.04-x86_64.tar.xz"
|
||||
"llvm-mingw-${ver}-ucrt-ubuntu-18.04-x86_64.tar.xz"
|
||||
"llvm-mingw-${ver}-ucrt-x86_64-linux.tar.xz"
|
||||
"llvm-mingw-${ver}-msvcrt-ubuntu-22.04-x86_64.tar.xz"
|
||||
"llvm-mingw-${ver}-msvcrt-ubuntu-20.04-x86_64.tar.xz"
|
||||
"llvm-mingw-${ver}-msvcrt-ubuntu-18.04-x86_64.tar.xz"
|
||||
"llvm-mingw-${ver}-msvcrt-x86_64-linux.tar.xz"
|
||||
)
|
||||
for file in "${candidates[@]}"; do
|
||||
url="${release_base}/${ver}/${file}"
|
||||
echo "[llvm-mingw] test ${url}"
|
||||
if wget -q --spider "${url}"; then
|
||||
break
|
||||
fi
|
||||
file=""
|
||||
done
|
||||
if [[ -z "$file" ]]; then
|
||||
echo "[llvm-mingw] no downloadable linux x86_64 asset found for ${ver}" >&2
|
||||
return 1
|
||||
fi
|
||||
url="${release_base}/${ver}/${file}"
|
||||
echo "[llvm-mingw] downloading ${url}"
|
||||
sudo rm -rf "${work_dir}"
|
||||
sudo mkdir -p "${download_dir}" "${extract_dir}"
|
||||
sudo wget -q --show-progress "${url}" -O "${download_dir}/${file}"
|
||||
if [[ $? -ne 0 ]]; then
|
||||
echo "[llvm-mingw] download failed ${url}" >&2
|
||||
return 1
|
||||
fi
|
||||
sudo tar -xf "${download_dir}/${file}" -C "${extract_dir}"
|
||||
local src_dir=""
|
||||
src_dir=$(find "${extract_dir}" -mindepth 1 -maxdepth 1 -type d -name "llvm-mingw-*" | head -n 1)
|
||||
if [[ -z "$src_dir" ]]; then
|
||||
echo "[llvm-mingw] extract failed" >&2
|
||||
return 1
|
||||
fi
|
||||
sudo find "${install_dir}" -mindepth 1 -maxdepth 1 ! -name ".install" -exec rm -rf {} +
|
||||
sudo cp -a "${src_dir}/." "${install_dir}/"
|
||||
sudo rm -rf "${work_dir}"
|
||||
export PATH="${install_dir}/bin:$PATH"
|
||||
echo "[llvm-mingw installed] version=${ver}"
|
||||
echo "[llvm-mingw path] ${install_dir}"
|
||||
}
|
||||
check_llvm_mingw() {
|
||||
local clang="/ae/opt/llvm-mingw/bin/x86_64-w64-mingw32-clang"
|
||||
if [[ -x "$clang" ]]; then
|
||||
"$clang" --version | head -n1
|
||||
return 0
|
||||
fi
|
||||
if ! command -v x86_64-w64-mingw32-clang >/dev/null 2>&1; then
|
||||
echo "[llvm-mingw] not installed"
|
||||
return 1
|
||||
fi
|
||||
x86_64-w64-mingw32-clang --version | head -n1
|
||||
}
|
||||
get_llvm_mingw_version() {
|
||||
local clang="/ae/opt/llvm-mingw/bin/x86_64-w64-mingw32-clang"
|
||||
if [[ -x "$clang" ]]; then
|
||||
"$clang" --version | head -n1
|
||||
return
|
||||
fi
|
||||
if ! command -v x86_64-w64-mingw32-clang >/dev/null 2>&1; then
|
||||
echo "none"
|
||||
return
|
||||
fi
|
||||
x86_64-w64-mingw32-clang --version | head -n1
|
||||
}
|
||||
llvm_mingw_require() {
|
||||
local required="$1"
|
||||
local cur
|
||||
cur=$(get_llvm_mingw_version)
|
||||
if [[ "$cur" == "none" ]]; then
|
||||
return 1
|
||||
fi
|
||||
echo "$cur" | grep -q "$required"
|
||||
}
|
||||
Reference in New Issue
Block a user