mirror of https://github.com/aminya/setup-cpp
Merge pull request #285 from aminya/llvm [skip ci]
This commit is contained in:
commit
7b3520d222
|
@ -87,7 +87,7 @@ jobs:
|
|||
- windows-2022
|
||||
- ubuntu-24.04
|
||||
- macos-13
|
||||
# - macos-12
|
||||
- macos-14 # arm64
|
||||
node:
|
||||
- 22
|
||||
pnpm:
|
||||
|
@ -152,6 +152,7 @@ jobs:
|
|||
- ubuntu-24.04
|
||||
- ubuntu-22.04
|
||||
- ubuntu-20.04
|
||||
- macos-14
|
||||
- macos-13
|
||||
- macos-12
|
||||
node:
|
||||
|
@ -216,6 +217,7 @@ jobs:
|
|||
RUNNER_OS_NAME: ${{ matrix.os }}
|
||||
|
||||
- name: Setup Node 12
|
||||
if: ${{ !contains(matrix.os, 'macos-14') }}
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: 12
|
||||
|
|
|
@ -20,3 +20,5 @@ exe/
|
|||
|
||||
coverage
|
||||
.turbo
|
||||
|
||||
/src/llvm/assets/
|
||||
|
|
|
@ -8,7 +8,7 @@ Setting up a **cross-platform** environment for building and testing C++/C proje
|
|||
|
||||
`setup-cpp` can be used locally from terminal, from CI services like GitHub Actions and GitLab Pipelines, and inside containers like Docker.
|
||||
|
||||
`setup-cpp` is supported on many platforms. It is continuously tested on several configurations including Windows (11, 10, 2022, 2019), Linux (Ubuntu 24.0, 22.04, 20.04, 18.04, Fedora, ArchLinux), and macOS (13, 12, 11, 10.15). `setup-cpp` is backed by unit tests for each tool and integration tests for compiling cpp projects.
|
||||
`setup-cpp` is supported on many platforms. It is continuously tested on several configurations including Windows (11, 10, 2022, 2019) x64/ARM/x86, Linux (Ubuntu 24.0, 22.04, 20.04, 18.04, Fedora, ArchLinux) x64/ARM, and macOS (14, 13, 12, 11, 10.15) x64/ARM. `setup-cpp` is backed by unit tests for each tool and integration tests for compiling cpp projects.
|
||||
|
||||
## Features
|
||||
|
||||
|
|
|
@ -11,11 +11,13 @@ ignorePaths:
|
|||
- "**/node_modules/"
|
||||
- .vscode/extensions.json
|
||||
- patches/*.patch
|
||||
- "**/github_brechtsanders_winlibs_mingw.json"
|
||||
- "**/github_*.json"
|
||||
- "**/llvm_org_releases.json"
|
||||
words:
|
||||
- aarch
|
||||
- aminya
|
||||
- applellvm
|
||||
- armv
|
||||
- bazel
|
||||
- bazelisk
|
||||
- biome
|
||||
|
@ -73,6 +75,7 @@ words:
|
|||
- nala
|
||||
- noconfirm
|
||||
- nodistro
|
||||
- NOPASSWD
|
||||
- noprogressbar
|
||||
- nothrow
|
||||
- npmrc
|
||||
|
|
|
@ -34,7 +34,7 @@ function main() {
|
|||
`./exe/setup-cpp-${process.arch}-${getPlatformName()}${exe}`,
|
||||
"--",
|
||||
`{{caxa}}/node_modules/.bin/node${exe}`,
|
||||
"{{caxa}}/setup-cpp.js",
|
||||
"{{caxa}}/setup-cpp.mjs",
|
||||
])
|
||||
),
|
||||
)
|
||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -1,5 +1,5 @@
|
|||
import { tmpdir } from "os"
|
||||
import { dirname } from "path"
|
||||
import { dirname, join } from "path"
|
||||
import { type AddPathOptions, addPath } from "envosman"
|
||||
import { execaSync } from "execa"
|
||||
import { DownloaderHelper } from "node-downloader-helper"
|
||||
|
@ -64,23 +64,33 @@ export async function setupBrew(options: SetupBrewOptions = {}): Promise<Install
|
|||
return { binDir }
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the path to the bin directory of brew
|
||||
* @returns {string} The path where brew binary is installed
|
||||
*
|
||||
* Based on the installation script from https://brew.sh
|
||||
*/
|
||||
export function getBrewBinDir() {
|
||||
return join(getBrewDir(), "bin")
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the path where brew is installed
|
||||
* @returns {string} The path where brew is installed
|
||||
*
|
||||
* Based on the installation script from https://brew.sh
|
||||
*/
|
||||
export function getBrewBinDir() {
|
||||
export function getBrewDir() {
|
||||
if (process.platform === "darwin") {
|
||||
if (process.arch === "arm64") {
|
||||
return "/opt/homebrew/bin/"
|
||||
return "/opt/homebrew"
|
||||
} else {
|
||||
return "/usr/local/bin/"
|
||||
return "/usr/local"
|
||||
}
|
||||
}
|
||||
|
||||
if (process.platform === "linux") {
|
||||
return "/home/linuxbrew/.linuxbrew/bin/"
|
||||
return "/home/linuxbrew/.linuxbrew"
|
||||
}
|
||||
|
||||
throw new Error("Unsupported platform for brew")
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
import { parseArgs } from "../cli-options.js"
|
||||
import { getCompilerInfo } from "../compilers.js"
|
||||
import type { Inputs } from "../tool.js"
|
||||
import { DefaultLinuxVersion } from "../versions/default_versions.js"
|
||||
import { DefaultUbuntuVersion, DefaultVersions } from "../versions/default_versions.js"
|
||||
import { getVersion, syncVersions } from "../versions/versions.js"
|
||||
|
||||
jest.setTimeout(300000)
|
||||
|
@ -55,18 +55,18 @@ describe("getVersion", () => {
|
|||
it("gcovr", () => {
|
||||
expect(getVersion("gcovr", "5.0")).toBe("5.0")
|
||||
if (process.platform === "linux") {
|
||||
expect(getVersion("gcovr", "true", [22, 4])).toBe(DefaultLinuxVersion.gcovr![22])
|
||||
expect(getVersion("gcovr", "true", [20, 4])).toBe(DefaultLinuxVersion.gcovr![20])
|
||||
expect(getVersion("gcovr", "true", [18, 4])).toBe(DefaultLinuxVersion.gcovr![18])
|
||||
expect(getVersion("gcovr", "true", [22, 4])).toBe(DefaultUbuntuVersion.gcovr![22])
|
||||
expect(getVersion("gcovr", "true", [20, 4])).toBe(DefaultUbuntuVersion.gcovr![20])
|
||||
expect(getVersion("gcovr", "true", [18, 4])).toBe(DefaultUbuntuVersion.gcovr![18])
|
||||
}
|
||||
})
|
||||
|
||||
it("llvm", () => {
|
||||
expect(getVersion("llvm", "13.0.0")).toBe("13.0.0")
|
||||
if (process.platform === "linux") {
|
||||
expect(getVersion("llvm", "true", [20, 4])).toBe(DefaultLinuxVersion.llvm![20])
|
||||
expect(getVersion("llvm", "true", [18, 4])).toBe(DefaultLinuxVersion.llvm![18])
|
||||
expect(getVersion("llvm", "true", [16, 4])).toBe(DefaultLinuxVersion.llvm![16])
|
||||
expect(getVersion("llvm", "true", [20, 4])).toBe(DefaultVersions.llvm)
|
||||
expect(getVersion("llvm", "true", [18, 4])).toBe(DefaultVersions.llvm)
|
||||
expect(getVersion("llvm", "true", [16, 4])).toBe(DefaultVersions.llvm)
|
||||
}
|
||||
})
|
||||
})
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
import { info } from "ci-log"
|
||||
import { addExeExt } from "patha"
|
||||
import semverCoerce from "semver/functions/coerce"
|
||||
import semverLte from "semver/functions/lte"
|
||||
import { arm64, x86, x86_64 } from "../utils/env/arch.js"
|
||||
import { type InstallationInfo, type PackageInfo, setupBin } from "../utils/setup/setupBin.js"
|
||||
|
||||
/** Get the platform data for cmake */
|
||||
|
@ -10,10 +12,15 @@ function getCmakePackageInfo(version: string, platform: NodeJS.Platform, arch: s
|
|||
case "win32": {
|
||||
const isOld = semverLte(semVersion, "v3.19.6")
|
||||
let osArchStr: string
|
||||
if (["ia32", "x86", "i386", "x32"].includes(arch)) {
|
||||
osArchStr = isOld ? "win32-x86" : "windows-i386"
|
||||
} else {
|
||||
if (x86_64.includes(arch)) {
|
||||
osArchStr = isOld ? "win64-x64" : "windows-x86_64"
|
||||
} else if (x86.includes(arch)) {
|
||||
osArchStr = isOld ? "win32-x86" : "windows-i386"
|
||||
} else if (arm64.includes(arch)) {
|
||||
osArchStr = "windows-arm64"
|
||||
} else {
|
||||
info(`Trying unsupported arch '${arch}' for cmake on Windows`)
|
||||
osArchStr = `windows-${arch}`
|
||||
}
|
||||
const folderName = `cmake-${version}-${osArchStr}`
|
||||
return {
|
||||
|
@ -37,10 +44,13 @@ function getCmakePackageInfo(version: string, platform: NodeJS.Platform, arch: s
|
|||
case "linux": {
|
||||
const isOld = semverLte(semVersion, "v3.19.8")
|
||||
let osArchStr: string
|
||||
if (["aarch64"].includes(arch)) {
|
||||
if (arm64.includes(arch)) {
|
||||
osArchStr = isOld ? "Linux-aarch64" : "linux-aarch64"
|
||||
} else {
|
||||
} else if (x86_64.includes(arch)) {
|
||||
osArchStr = isOld ? "Linux-x86_64" : "linux-x86_64"
|
||||
} else {
|
||||
info(`Trying unsupported arch '${arch}' for cmake on Linux`)
|
||||
osArchStr = `linux-${arch}`
|
||||
}
|
||||
const folderName = `cmake-${version}-${osArchStr}`
|
||||
return {
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
import { saveGitHubAssetList } from "../utils/github/fetch-assets.ts"
|
||||
import { saveGitHubAssetList } from "../utils/asset/fetch-github-assets.ts"
|
||||
|
||||
/**
|
||||
* Generate the list of all releases of a GitHub repository and save it to a json file
|
||||
|
|
|
@ -13,10 +13,10 @@ import { addUpdateAlternativesToRc, installAptPack } from "setup-apt"
|
|||
import { installBrewPack } from "setup-brew"
|
||||
import { rcOptions } from "../cli-options.js"
|
||||
import { setupMacOSSDK } from "../macos-sdk/macos-sdk.js"
|
||||
import { loadAssetList, matchAsset } from "../utils/asset/load-assets.js"
|
||||
import { hasDnf } from "../utils/env/hasDnf.js"
|
||||
import { isArch } from "../utils/env/isArch.js"
|
||||
import { isUbuntu } from "../utils/env/isUbuntu.js"
|
||||
import { loadGitHubAssetList, matchAsset } from "../utils/github/load-assets.js"
|
||||
import { extract7Zip } from "../utils/setup/extract.js"
|
||||
import { type InstallationInfo, type PackageInfo, setupBin } from "../utils/setup/setupBin.js"
|
||||
import { setupChocoPack } from "../utils/setup/setupChocoPack.js"
|
||||
|
@ -29,21 +29,29 @@ const dirname = typeof __dirname === "string" ? __dirname : path.dirname(fileURL
|
|||
async function getGccPackageInfo(version: string, platform: NodeJS.Platform, arch: string): Promise<PackageInfo> {
|
||||
switch (platform) {
|
||||
case "win32": {
|
||||
const mingwAssets = await loadGitHubAssetList(
|
||||
const mingwAssets = await loadAssetList(
|
||||
join(dirname, "github_brechtsanders_winlibs_mingw.json"),
|
||||
)
|
||||
|
||||
const mingwArchMap = {
|
||||
x64: "x86_64",
|
||||
ia32: "i386",
|
||||
} as Record<string, string | undefined>
|
||||
|
||||
const asset = matchAsset(
|
||||
mingwAssets,
|
||||
{
|
||||
version,
|
||||
arch: arch === "x64"
|
||||
? "x86_64"
|
||||
: arch === "ia32"
|
||||
? "i386"
|
||||
: arch,
|
||||
keywords: [
|
||||
mingwArchMap[arch] ?? arch,
|
||||
],
|
||||
},
|
||||
)
|
||||
|
||||
if (asset === undefined) {
|
||||
throw new Error(`No asset found for version ${version} and arch ${arch}`)
|
||||
}
|
||||
|
||||
return {
|
||||
binRelativeDir: "bin/",
|
||||
binFileName: addExeExt("g++"),
|
||||
|
|
|
@ -3,25 +3,16 @@ import { fileURLToPath } from "url"
|
|||
import * as io from "@actions/io"
|
||||
import { execaSync } from "execa"
|
||||
import { chmod } from "fs/promises"
|
||||
import { isUrlOnline } from "is-url-online"
|
||||
import { addExeExt } from "patha"
|
||||
import { ubuntuVersion } from "../../utils/env/ubuntu_version.js"
|
||||
import { getSpecificVersionAndUrl } from "../../utils/setup/version.js"
|
||||
import { setupTmpDir, testBin } from "../../utils/tests/test-helpers.js"
|
||||
import { getVersion } from "../../versions/versions.js"
|
||||
import { setupClangFormat, setupClangTools, setupLLVM } from "../llvm.js"
|
||||
import { VERSIONS, getLinuxUrl, getUrl } from "../llvm_url.js"
|
||||
import { getLLVMAssetURL } from "../llvm_url.js"
|
||||
|
||||
const dirname = typeof __dirname === "string" ? __dirname : path.dirname(fileURLToPath(import.meta.url))
|
||||
|
||||
jest.setTimeout(400000)
|
||||
async function testUrl(version: string) {
|
||||
const [specificVersion, url] = await getSpecificVersionAndUrl(VERSIONS, process.platform, version, getUrl)
|
||||
|
||||
if (!(await isUrlOnline(url))) {
|
||||
throw new Error(`Failed to install Version: ${version} => ${specificVersion} \n URL: ${url}`)
|
||||
}
|
||||
}
|
||||
|
||||
describe("setup-llvm", () => {
|
||||
let directory: string
|
||||
|
@ -31,44 +22,24 @@ describe("setup-llvm", () => {
|
|||
|
||||
it("Finds URL for ubuntu version", async () => {
|
||||
expect(
|
||||
await getSpecificVersionAndUrl(
|
||||
VERSIONS,
|
||||
"linux",
|
||||
"13.0.0-ubuntu-16.04",
|
||||
(_plantform, version) => getLinuxUrl(version),
|
||||
),
|
||||
).toStrictEqual([
|
||||
"13.0.0-ubuntu-16.04",
|
||||
"https://github.com/llvm/llvm-project/releases/download/llvmorg-13.0.0/clang+llvm-13.0.0-x86_64-linux-gnu-ubuntu-16.04.tar.xz",
|
||||
])
|
||||
expect(
|
||||
await getSpecificVersionAndUrl(
|
||||
VERSIONS,
|
||||
"linux",
|
||||
"13.0.1-ubuntu-18.04",
|
||||
(_plantform, version) => getLinuxUrl(version),
|
||||
),
|
||||
).toStrictEqual([
|
||||
"13.0.1-ubuntu-18.04",
|
||||
"https://github.com/llvm/llvm-project/releases/download/llvmorg-13.0.1/clang+llvm-13.0.1-x86_64-linux-gnu-ubuntu-18.04.tar.xz",
|
||||
])
|
||||
expect(
|
||||
await getSpecificVersionAndUrl(
|
||||
VERSIONS,
|
||||
"linux",
|
||||
"13.0.0-ubuntu-20.04",
|
||||
(_plantform, version) => getLinuxUrl(version),
|
||||
),
|
||||
).toStrictEqual([
|
||||
"13.0.0-ubuntu-20.04",
|
||||
await getLLVMAssetURL("linux", "x86_64", "13.0.0"),
|
||||
).toStrictEqual(
|
||||
"https://github.com/llvm/llvm-project/releases/download/llvmorg-13.0.0/clang+llvm-13.0.0-x86_64-linux-gnu-ubuntu-20.04.tar.xz",
|
||||
])
|
||||
)
|
||||
expect(
|
||||
await getLLVMAssetURL("linux", "x86_64", "13.0.1"),
|
||||
).toStrictEqual(
|
||||
"https://github.com/llvm/llvm-project/releases/download/llvmorg-13.0.1/clang+llvm-13.0.1-x86_64-linux-gnu-ubuntu-18.04.tar.xz",
|
||||
)
|
||||
})
|
||||
|
||||
it("Finds valid LLVM URLs", async () => {
|
||||
await Promise.all(
|
||||
[
|
||||
...(process.platform === "darwin" ? [] : ["16.0.2", "16.0.0"]),
|
||||
"18",
|
||||
"17",
|
||||
"16",
|
||||
"15",
|
||||
"15.0.2",
|
||||
// "14.0.1",
|
||||
"14.0.0",
|
||||
|
@ -89,7 +60,7 @@ describe("setup-llvm", () => {
|
|||
"5",
|
||||
"5.0.0",
|
||||
"4",
|
||||
].map((version) => testUrl(version)),
|
||||
].map((version) => getLLVMAssetURL("win32", "x64", version)),
|
||||
)
|
||||
})
|
||||
|
||||
|
|
|
@ -0,0 +1,49 @@
|
|||
import { saveGitHubAssetList } from "../utils/asset/fetch-github-assets.ts"
|
||||
import { saveHTMLAssets } from "../utils/asset/fetch-html-assets.ts"
|
||||
|
||||
/**
|
||||
* Generate the list of all releases of a GitHub repository and save it to a json file
|
||||
*/
|
||||
async function main() {
|
||||
// https://github.com/llvm/llvm-project/releases
|
||||
await saveGitHubAssetList(
|
||||
"llvm",
|
||||
"llvm-project",
|
||||
"./src/llvm/github_llvm_llvm-project.json",
|
||||
isAssetArchive,
|
||||
)
|
||||
|
||||
// go through https://releases.llvm.org/x.y.z and get all the assets
|
||||
await saveHTMLAssets({
|
||||
htmlDownloadDir: "./src/llvm/assets/",
|
||||
path: "./src/llvm/llvm_org_releases.json",
|
||||
*getAssetVersionAndURL() {
|
||||
for (let major = 1; major <= 9; major++) {
|
||||
for (let minor = 0; minor <= 9; minor++) {
|
||||
for (let patch = 0; patch <= 9; patch++) {
|
||||
const version = `${major}.${minor}.${patch}`
|
||||
yield [version, `https://releases.llvm.org/${version}`] as [string, string]
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
filterAssets: isAssetArchive,
|
||||
})
|
||||
}
|
||||
|
||||
function isAssetArchive(asset: string): boolean {
|
||||
// only download the LLVM and clang+llvm archives
|
||||
return (asset.startsWith("LLVM-")
|
||||
|| asset.startsWith("clang+llvm-")
|
||||
|| asset.startsWith("clang%2Bllvm-")) // cspell: disable-line
|
||||
// only download the archives
|
||||
&& (asset.endsWith("tar.xz")
|
||||
|| asset.endsWith("zip")
|
||||
|| asset.endsWith("exe")
|
||||
|| asset.endsWith("tar.gz"))
|
||||
}
|
||||
|
||||
main().catch((err) => {
|
||||
console.error(err)
|
||||
process.exit(1)
|
||||
})
|
|
@ -0,0 +1,605 @@
|
|||
{
|
||||
"llvmorg-18.1.8": [
|
||||
"clang+llvm-18.1.8-x86_64-pc-windows-msvc.tar.xz",
|
||||
"clang+llvm-18.1.8-x86_64-linux-gnu-ubuntu-18.04.tar.xz",
|
||||
"clang+llvm-18.1.8-powerpc64le-linux-rhel-8.8.tar.xz",
|
||||
"clang+llvm-18.1.8-powerpc64-ibm-aix-7.2.tar.xz",
|
||||
"clang+llvm-18.1.8-armv7a-linux-gnueabihf.tar.gz",
|
||||
"clang+llvm-18.1.8-arm64-apple-macos11.tar.xz",
|
||||
"clang+llvm-18.1.8-aarch64-linux-gnu.tar.xz",
|
||||
"LLVM-18.1.8-woa64.exe",
|
||||
"LLVM-18.1.8-win64.exe",
|
||||
"LLVM-18.1.8-win32.exe"
|
||||
],
|
||||
"llvmorg-18.1.7": [
|
||||
"clang+llvm-18.1.7-x86_64-pc-windows-msvc.tar.xz",
|
||||
"clang+llvm-18.1.7-x86_64-linux-gnu-ubuntu-18.04.tar.xz",
|
||||
"clang+llvm-18.1.7-powerpc64le-linux-rhel-8.8.tar.xz",
|
||||
"clang+llvm-18.1.7-powerpc64-ibm-aix-7.2.tar.xz",
|
||||
"clang+llvm-18.1.7-armv7a-linux-gnueabihf.tar.gz",
|
||||
"clang+llvm-18.1.7-aarch64-linux-gnu.tar.xz",
|
||||
"LLVM-18.1.7-woa64.exe",
|
||||
"LLVM-18.1.7-win64.exe",
|
||||
"LLVM-18.1.7-win32.exe"
|
||||
],
|
||||
"llvmorg-18.1.6": [
|
||||
"clang+llvm-18.1.6-x86_64-pc-windows-msvc.tar.xz",
|
||||
"clang+llvm-18.1.6-sparcv9-sun-solaris2.11.tar.xz",
|
||||
"clang+llvm-18.1.6-powerpc64le-linux-rhel-8.8.tar.xz",
|
||||
"clang+llvm-18.1.6-armv7a-linux-gnueabihf.tar.gz",
|
||||
"clang+llvm-18.1.6-amd64-pc-solaris2.11.tar.xz",
|
||||
"clang+llvm-18.1.6-aarch64-linux-gnu.tar.xz",
|
||||
"LLVM-18.1.6-woa64.exe",
|
||||
"LLVM-18.1.6-win64.exe",
|
||||
"LLVM-18.1.6-win32.exe"
|
||||
],
|
||||
"llvmorg-18.1.5": [
|
||||
"clang+llvm-18.1.5-x86_64-pc-windows-msvc.tar.xz",
|
||||
"clang+llvm-18.1.5-powerpc64le-linux-rhel-8.8.tar.xz",
|
||||
"clang+llvm-18.1.5-powerpc64-ibm-aix-7.2.tar.xz",
|
||||
"clang+llvm-18.1.5-armv7a-linux-gnueabihf.tar.gz",
|
||||
"clang+llvm-18.1.5-aarch64-linux-gnu.tar.xz",
|
||||
"LLVM-18.1.5-woa64.exe",
|
||||
"LLVM-18.1.5-win64.exe",
|
||||
"LLVM-18.1.5-win32.exe"
|
||||
],
|
||||
"llvmorg-18.1.4": [
|
||||
"clang+llvm-18.1.4-x86_64-pc-windows-msvc.tar.xz",
|
||||
"clang+llvm-18.1.4-x86_64-linux-gnu-ubuntu-18.04.tar.xz",
|
||||
"clang+llvm-18.1.4-powerpc64le-linux-rhel-8.8.tar.xz",
|
||||
"clang+llvm-18.1.4-powerpc64-ibm-aix-7.2.tar.xz",
|
||||
"clang+llvm-18.1.4-armv7a-linux-gnueabihf.tar.gz",
|
||||
"clang+llvm-18.1.4-aarch64-linux-gnu.tar.xz",
|
||||
"LLVM-18.1.4-woa64.exe",
|
||||
"LLVM-18.1.4-win64.exe",
|
||||
"LLVM-18.1.4-win32.exe"
|
||||
],
|
||||
"llvmorg-18.1.3": [
|
||||
"clang+llvm-18.1.3-powerpc64le-linux-rhel-8.8.tar.xz",
|
||||
"clang+llvm-18.1.3-powerpc64-ibm-aix-7.2.tar.xz",
|
||||
"clang+llvm-18.1.3-armv7a-linux-gnueabihf.tar.gz",
|
||||
"clang+llvm-18.1.3-aarch64-linux-gnu.tar.xz",
|
||||
"LLVM-18.1.3-woa64.exe",
|
||||
"LLVM-18.1.3-win64.exe",
|
||||
"LLVM-18.1.3-win32.exe"
|
||||
],
|
||||
"llvmorg-18.1.2": [
|
||||
"clang+llvm-18.1.2-x86_64-pc-windows-msvc.tar.xz",
|
||||
"clang+llvm-18.1.2-sparcv9-sun-solaris2.11.tar.xz",
|
||||
"clang+llvm-18.1.2-powerpc64le-linux-rhel-8.8.tar.xz",
|
||||
"clang+llvm-18.1.2-powerpc64-ibm-aix-7.2.tar.xz",
|
||||
"clang+llvm-18.1.2-armv7a-linux-gnueabihf.tar.gz",
|
||||
"clang+llvm-18.1.2-amd64-pc-solaris2.11.tar.xz",
|
||||
"clang+llvm-18.1.2-aarch64-linux-gnu.tar.xz",
|
||||
"LLVM-18.1.2-woa64.exe",
|
||||
"LLVM-18.1.2-win64.exe",
|
||||
"LLVM-18.1.2-win32.exe"
|
||||
],
|
||||
"llvmorg-18.1.1": [
|
||||
"clang+llvm-18.1.1-x86_64-pc-windows-msvc.tar.xz",
|
||||
"clang+llvm-18.1.1-powerpc64le-linux-rhel-8.8.tar.xz",
|
||||
"clang+llvm-18.1.1-powerpc64-ibm-aix-7.2.tar.xz",
|
||||
"clang+llvm-18.1.1-armv7a-linux-gnueabihf.tar.gz",
|
||||
"clang+llvm-18.1.1-aarch64-linux-gnu.tar.xz",
|
||||
"LLVM-18.1.1-woa64.exe",
|
||||
"LLVM-18.1.1-win64.exe",
|
||||
"LLVM-18.1.1-win32.exe"
|
||||
],
|
||||
"llvmorg-18.1.0": [
|
||||
"clang+llvm-18.1.0-x86_64-pc-windows-msvc.tar.xz",
|
||||
"clang+llvm-18.1.0-sparcv9-unknown-linux-gnu.tar.xz",
|
||||
"clang+llvm-18.1.0-sparcv9-sun-solaris2.11.tar.xz",
|
||||
"clang+llvm-18.1.0-powerpc64le-linux-rhel-8.8.tar.xz",
|
||||
"clang+llvm-18.1.0-powerpc64-ibm-aix-7.2.tar.xz",
|
||||
"clang+llvm-18.1.0-armv7a-linux-gnueabihf.tar.gz",
|
||||
"clang+llvm-18.1.0-amd64-pc-solaris2.11.tar.xz",
|
||||
"clang+llvm-18.1.0-aarch64-linux-gnu.tar.xz",
|
||||
"LLVM-18.1.0-woa64.exe",
|
||||
"LLVM-18.1.0-win64.exe",
|
||||
"LLVM-18.1.0-win32.exe"
|
||||
],
|
||||
"llvmorg-17.0.6": [
|
||||
"clang+llvm-17.0.6-x86_64-linux-gnu-ubuntu-22.04.tar.xz",
|
||||
"clang+llvm-17.0.6-sparcv9-sun-solaris2.11.tar.xz",
|
||||
"clang+llvm-17.0.6-powerpc64le-linux-rhel-8.8.tar.xz",
|
||||
"clang+llvm-17.0.6-powerpc64-ibm-aix-7.2.tar.xz",
|
||||
"clang+llvm-17.0.6-armv7a-linux-gnueabihf.tar.gz",
|
||||
"clang+llvm-17.0.6-arm64-apple-darwin22.0.tar.xz",
|
||||
"clang+llvm-17.0.6-amd64-pc-solaris2.11.tar.xz",
|
||||
"clang+llvm-17.0.6-aarch64-linux-gnu.tar.xz",
|
||||
"LLVM-17.0.6-woa64.exe",
|
||||
"LLVM-17.0.6-win64.exe",
|
||||
"LLVM-17.0.6-win32.exe"
|
||||
],
|
||||
"llvmorg-17.0.5": [
|
||||
"clang+llvm-17.0.5-x86_64-linux-gnu-ubuntu-22.04.tar.xz",
|
||||
"clang+llvm-17.0.5-powerpc64le-linux-rhel-8.8.tar.xz",
|
||||
"clang+llvm-17.0.5-powerpc64-ibm-aix-7.2.tar.xz",
|
||||
"clang+llvm-17.0.5-armv7a-linux-gnueabihf.tar.gz",
|
||||
"clang+llvm-17.0.5-arm64-apple-darwin22.0.tar.xz",
|
||||
"clang+llvm-17.0.5-aarch64-linux-gnu.tar.xz",
|
||||
"LLVM-17.0.5-woa64.exe",
|
||||
"LLVM-17.0.5-win64.exe",
|
||||
"LLVM-17.0.5-win32.exe"
|
||||
],
|
||||
"llvmorg-17.0.4": [
|
||||
"clang+llvm-17.0.4-x86_64-linux-gnu-ubuntu-22.04.tar.xz",
|
||||
"clang+llvm-17.0.4-powerpc64le-linux-rhel-8.8.tar.xz",
|
||||
"clang+llvm-17.0.4-powerpc64-ibm-aix-7.2.tar.xz",
|
||||
"clang+llvm-17.0.4-armv7a-linux-gnueabihf.tar.gz",
|
||||
"clang+llvm-17.0.4-arm64-apple-darwin22.0.tar.xz",
|
||||
"clang+llvm-17.0.4-aarch64-linux-gnu.tar.xz",
|
||||
"LLVM-17.0.4-woa64.exe",
|
||||
"LLVM-17.0.4-win64.exe",
|
||||
"LLVM-17.0.4-win32.exe"
|
||||
],
|
||||
"llvmorg-17.0.3": [
|
||||
"clang+llvm-17.0.3-powerpc64le-linux-rhel-8.8.tar.xz",
|
||||
"clang+llvm-17.0.3-powerpc64-ibm-aix-7.2.tar.xz",
|
||||
"clang+llvm-17.0.3-armv7a-linux-gnueabihf.tar.gz",
|
||||
"clang+llvm-17.0.3-arm64-apple-darwin22.0.tar.xz",
|
||||
"clang+llvm-17.0.3-aarch64-linux-gnu.tar.xz",
|
||||
"LLVM-17.0.3-woa64.exe",
|
||||
"LLVM-17.0.3-win64.exe",
|
||||
"LLVM-17.0.3-win32.exe"
|
||||
],
|
||||
"llvmorg-17.0.2": [
|
||||
"clang+llvm-17.0.2-x86_64-linux-gnu-ubuntu-22.04.tar.xz",
|
||||
"clang+llvm-17.0.2-sparcv9-sun-solaris2.11.tar.xz",
|
||||
"clang+llvm-17.0.2-sparc64-unknown-linux-gnu.tar.xz",
|
||||
"clang+llvm-17.0.2-powerpc64le-linux-rhel-8.8.tar.xz",
|
||||
"clang+llvm-17.0.2-powerpc64-ibm-aix-7.2.tar.xz",
|
||||
"clang+llvm-17.0.2-armv7a-linux-gnueabihf.tar.gz",
|
||||
"clang+llvm-17.0.2-arm64-apple-darwin22.0.tar.xz",
|
||||
"clang+llvm-17.0.2-amd64-pc-solaris2.11.tar.xz",
|
||||
"clang+llvm-17.0.2-aarch64-linux-gnu.tar.xz",
|
||||
"LLVM-17.0.2-woa64.exe",
|
||||
"LLVM-17.0.2-win64.exe",
|
||||
"LLVM-17.0.2-win32.exe"
|
||||
],
|
||||
"llvmorg-17.0.1": [
|
||||
"clang+llvm-17.0.1-sparcv9-sun-solaris2.11.tar.xz",
|
||||
"clang+llvm-17.0.1-sparc64-unknown-linux-gnu.tar.xz",
|
||||
"clang+llvm-17.0.1-powerpc64le-linux-rhel-8.8.tar.xz",
|
||||
"clang+llvm-17.0.1-final_powerpc64-ibm-aix-7.2.tar.xz",
|
||||
"clang+llvm-17.0.1-armv7a-linux-gnueabihf.tar.gz",
|
||||
"clang+llvm-17.0.1-arm64-apple-darwin22.0.tar.xz",
|
||||
"clang+llvm-17.0.1-amd64-pc-solaris2.11.tar.xz",
|
||||
"clang+llvm-17.0.1-aarch64-linux-gnu.tar.xz",
|
||||
"LLVM-17.0.1-woa64.exe",
|
||||
"LLVM-17.0.1-win64.exe",
|
||||
"LLVM-17.0.1-win32.exe"
|
||||
],
|
||||
"llvmorg-16.0.6": [
|
||||
"clang+llvm-16.0.6-powerpc64le-linux-rhel-8.7.tar.xz",
|
||||
"clang+llvm-16.0.6-aarch64-linux-gnu.tar.xz",
|
||||
"LLVM-16.0.6-woa64.exe",
|
||||
"LLVM-16.0.6-win64.exe",
|
||||
"LLVM-16.0.6-win32.exe"
|
||||
],
|
||||
"llvmorg-16.0.5": [
|
||||
"clang+llvm-16.0.5-powerpc64le-linux-rhel-8.7.tar.xz",
|
||||
"clang+llvm-16.0.5-powerpc64-ibm-aix-7.2.tar.xz",
|
||||
"clang+llvm-16.0.5-arm64-apple-darwin22.0.tar.xz",
|
||||
"clang+llvm-16.0.5-amd64-unknown-freebsd13.tar.xz",
|
||||
"clang+llvm-16.0.5-aarch64-linux-gnu.tar.xz",
|
||||
"LLVM-16.0.5-woa64.exe",
|
||||
"LLVM-16.0.5-win64.exe",
|
||||
"LLVM-16.0.5-win32.exe"
|
||||
],
|
||||
"llvmorg-16.0.4": [
|
||||
"clang+llvm-16.0.4-x86_64-linux-gnu-ubuntu-22.04.tar.xz",
|
||||
"clang+llvm-16.0.4-powerpc64le-linux-rhel-8.4.tar.xz",
|
||||
"clang+llvm-16.0.4-powerpc64-ibm-aix-7.2.tar.xz",
|
||||
"clang+llvm-16.0.4-armv7a-linux-gnueabihf.tar.xz",
|
||||
"clang+llvm-16.0.4-arm64-apple-darwin22.0.tar.xz",
|
||||
"clang+llvm-16.0.4-amd64-unknown-freebsd13.tar.xz",
|
||||
"clang+llvm-16.0.4-aarch64-linux-gnu.tar.xz",
|
||||
"LLVM-16.0.4-woa64.exe",
|
||||
"LLVM-16.0.4-win64.exe",
|
||||
"LLVM-16.0.4-win32.exe"
|
||||
],
|
||||
"llvmorg-16.0.3": [
|
||||
"clang+llvm-16.0.3-x86_64-linux-gnu-ubuntu-22.04.tar.xz",
|
||||
"clang+llvm-16.0.3-powerpc64le-linux-rhel-8.4.tar.xz",
|
||||
"clang+llvm-16.0.3-powerpc64-ibm-aix-7.2.tar.xz",
|
||||
"clang+llvm-16.0.3-arm64-apple-darwin22.0.tar.xz",
|
||||
"clang+llvm-16.0.3-aarch64-linux-gnu.tar.xz",
|
||||
"LLVM-16.0.3-woa64.exe",
|
||||
"LLVM-16.0.3-win64.exe",
|
||||
"LLVM-16.0.3-win32.exe"
|
||||
],
|
||||
"llvmorg-16.0.2": [
|
||||
"clang+llvm-16.0.2-x86_64-linux-gnu-ubuntu-22.04.tar.xz",
|
||||
"clang+llvm-16.0.2-powerpc64le-linux-rhel-8.4.tar.xz",
|
||||
"clang+llvm-16.0.2-powerpc64-ibm-aix-7.2.tar.xz",
|
||||
"clang+llvm-16.0.2-arm64-apple-darwin22.0.tar.xz",
|
||||
"clang+llvm-16.0.2-amd64-unknown-freebsd13.tar.xz",
|
||||
"clang+llvm-16.0.2-aarch64-linux-gnu.tar.xz",
|
||||
"LLVM-16.0.2-woa64.exe",
|
||||
"LLVM-16.0.2-win64.exe",
|
||||
"LLVM-16.0.2-win32.exe"
|
||||
],
|
||||
"llvmorg-16.0.1": [
|
||||
"clang+llvm-16.0.1-powerpc64le-linux-ubuntu-20.04.tar.xz",
|
||||
"clang+llvm-16.0.1-powerpc64le-linux-rhel-8.4.tar.xz",
|
||||
"clang+llvm-16.0.1-powerpc64-ibm-aix-7.2.tar.xz",
|
||||
"clang+llvm-16.0.1-arm64-apple-darwin22.0.tar.xz",
|
||||
"clang+llvm-16.0.1-amd64-unknown-freebsd13.tar.xz",
|
||||
"clang+llvm-16.0.1-aarch64-linux-gnu.tar.xz",
|
||||
"LLVM-16.0.1-woa64.exe",
|
||||
"LLVM-16.0.1-win64.exe",
|
||||
"LLVM-16.0.1-win32.exe"
|
||||
],
|
||||
"llvmorg-16.0.0": [
|
||||
"clang+llvm-16.0.0-x86_64-linux-gnu-ubuntu-18.04.tar.xz",
|
||||
"clang+llvm-16.0.0-sparcv9-sun-solaris2.11.tar.xz",
|
||||
"clang+llvm-16.0.0-sparc64-unknown-linux-gnu.tar.xz",
|
||||
"clang+llvm-16.0.0-powerpc64le-linux-ubuntu-18.04.tar.xz",
|
||||
"clang+llvm-16.0.0-powerpc64le-linux-rhel-8.4.tar.xz",
|
||||
"clang+llvm-16.0.0-powerpc64-ibm-aix-7.2.tar.xz",
|
||||
"clang+llvm-16.0.0-arm64-apple-darwin22.0.tar.xz",
|
||||
"clang+llvm-16.0.0-amd64-unknown-freebsd13.tar.xz",
|
||||
"clang+llvm-16.0.0-amd64-pc-solaris2.11.tar.xz",
|
||||
"clang+llvm-16.0.0-aarch64-linux-gnu.tar.xz",
|
||||
"LLVM-16.0.0-woa64.exe",
|
||||
"LLVM-16.0.0-win64.exe",
|
||||
"LLVM-16.0.0-win32.exe"
|
||||
],
|
||||
"llvmorg-15.0.7": [
|
||||
"clang+llvm-15.0.7-x86_64-apple-darwin21.0.tar.xz",
|
||||
"clang+llvm-15.0.7-powerpc64le-linux-ubuntu-18.04.tar.xz",
|
||||
"clang+llvm-15.0.7-powerpc64le-linux-rhel-8.4.tar.xz",
|
||||
"clang+llvm-15.0.7-powerpc64-ibm-aix-7.2.tar.xz",
|
||||
"clang+llvm-15.0.7-arm64-apple-darwin22.0.tar.xz",
|
||||
"LLVM-15.0.7-win64.exe",
|
||||
"LLVM-15.0.7-win32.exe"
|
||||
],
|
||||
"llvmorg-15.0.6": [
|
||||
"clang+llvm-15.0.6-x86_64-linux-gnu-ubuntu-18.04.tar.xz",
|
||||
"clang+llvm-15.0.6-powerpc64le-linux-ubuntu-18.04.tar.xz",
|
||||
"clang+llvm-15.0.6-powerpc64le-linux-rhel-8.4.tar.xz",
|
||||
"clang+llvm-15.0.6-powerpc64-ibm-aix-7.2.tar.xz",
|
||||
"clang+llvm-15.0.6-armv7a-linux-gnueabihf.tar.xz",
|
||||
"clang+llvm-15.0.6-arm64-apple-darwin21.0.tar.xz",
|
||||
"clang+llvm-15.0.6-aarch64-linux-gnu.tar.xz",
|
||||
"LLVM-15.0.6-woa64.exe",
|
||||
"LLVM-15.0.6-win64.exe",
|
||||
"LLVM-15.0.6-win32.exe"
|
||||
],
|
||||
"llvmorg-15.0.5": [
|
||||
"clang+llvm-15.0.5-x86_64-linux-gnu-ubuntu-18.04.tar.xz",
|
||||
"clang+llvm-15.0.5-powerpc64le-linux-ubuntu-18.04.5.tar.xz",
|
||||
"clang+llvm-15.0.5-powerpc64le-linux-rhel-8.4.tar.xz",
|
||||
"clang+llvm-15.0.5-powerpc64-ibm-aix-7.2.tar.xz",
|
||||
"clang+llvm-15.0.5-arm64-apple-darwin21.0.tar.xz",
|
||||
"LLVM-15.0.5-win64.exe",
|
||||
"LLVM-15.0.5-win32.exe"
|
||||
],
|
||||
"llvmorg-15.0.4": [
|
||||
"clang+llvm-15.0.4-x86_64-linux-gnu-rhel-8.4.tar.xz",
|
||||
"clang+llvm-15.0.4-x86_64-apple-darwin.tar.xz",
|
||||
"clang+llvm-15.0.4-powerpc64le-linux-ubuntu-18.04.5.tar.xz",
|
||||
"clang+llvm-15.0.4-powerpc64le-linux-rhel-8.4.tar.xz",
|
||||
"clang+llvm-15.0.4-powerpc64-ibm-aix-7.2.tar.xz",
|
||||
"clang+llvm-15.0.4-arm64-apple-darwin21.0.tar.xz",
|
||||
"LLVM-15.0.4-win64.exe",
|
||||
"LLVM-15.0.4-win32.exe"
|
||||
],
|
||||
"llvmorg-15.0.3": [
|
||||
"clang+llvm-15.0.3-x86_64-apple-darwin.tar.xz",
|
||||
"clang+llvm-15.0.3-powerpc64le-linux-ubuntu-18.04.5.tar.xz",
|
||||
"clang+llvm-15.0.3-powerpc64le-linux-rhel-8.4.tar.xz",
|
||||
"clang+llvm-15.0.3-powerpc64-ibm-aix-7.2.tar.xz",
|
||||
"clang+llvm-15.0.3-armv7a-linux-gnueabihf.tar.xz",
|
||||
"clang+llvm-15.0.3-arm64-apple-darwin21.0.tar.xz",
|
||||
"clang+llvm-15.0.3-aarch64-linux-gnu.tar.xz",
|
||||
"LLVM-15.0.3-woa64.exe",
|
||||
"LLVM-15.0.3-win64.exe",
|
||||
"LLVM-15.0.3-win32.exe"
|
||||
],
|
||||
"llvmorg-15.0.2": [
|
||||
"clang+llvm-15.0.2-x86_64-unknown-linux-gnu-sles15.tar.xz",
|
||||
"clang+llvm-15.0.2-x86_64-unknown-linux-gnu-rhel86.tar.xz",
|
||||
"clang+llvm-15.0.2-x86_64-apple-darwin.tar.xz",
|
||||
"clang+llvm-15.0.2-powerpc64le-linux-ubuntu-18.04.5.tar.xz",
|
||||
"clang+llvm-15.0.2-powerpc64le-linux-rhel-8.4.tar.xz",
|
||||
"clang+llvm-15.0.2-powerpc64-ibm-aix-7.2.tar.xz",
|
||||
"clang+llvm-15.0.2-arm64-apple-darwin21.0.tar.xz",
|
||||
"clang+llvm-15.0.2-aarch64-linux-gnu.tar.xz",
|
||||
"LLVM-15.0.2-woa64.exe",
|
||||
"LLVM-15.0.2-win64.exe",
|
||||
"LLVM-15.0.2-win32.exe"
|
||||
],
|
||||
"llvmorg-15.0.1": [
|
||||
"clang+llvm-15.0.1-x86_64-apple-darwin.tar.xz",
|
||||
"clang+llvm-15.0.1-powerpc64le-linux-ubuntu-18.04.5.tar.xz",
|
||||
"clang+llvm-15.0.1-powerpc64le-linux-rhel-8.4.tar.xz",
|
||||
"clang+llvm-15.0.1-powerpc64-ibm-aix-7.2.tar.xz",
|
||||
"clang+llvm-15.0.1-armv7a-linux-gnueabihf.tar.xz",
|
||||
"clang+llvm-15.0.1-arm64-apple-darwin21.0.tar.xz",
|
||||
"clang+llvm-15.0.1-aarch64-linux-gnu.tar.xz",
|
||||
"LLVM-15.0.1-woa64.exe",
|
||||
"LLVM-15.0.1-win64.exe",
|
||||
"LLVM-15.0.1-win32.exe"
|
||||
],
|
||||
"llvmorg-15.0.0": [
|
||||
"clang+llvm-15.0.0-x86_64-linux-gnu-rhel-8.4.tar.xz",
|
||||
"clang+llvm-15.0.0-x86_64-apple-darwin.tar.xz",
|
||||
"clang+llvm-15.0.0-sparcv9-sun-solaris2.11.tar.xz",
|
||||
"clang+llvm-15.0.0-sparc64-unknown-linux-gnu.tar.xz",
|
||||
"clang+llvm-15.0.0-powerpc64le-linux-ubuntu-18.04.6.tar.xz",
|
||||
"clang+llvm-15.0.0-powerpc64le-linux-rhel-8.4.tar.xz",
|
||||
"clang+llvm-15.0.0-powerpc64-ibm-aix-7.2.tar.xz",
|
||||
"clang+llvm-15.0.0-armv7a-linux-gnueabihf.tar.xz",
|
||||
"clang+llvm-15.0.0-arm64-apple-darwin21.0.tar.xz",
|
||||
"clang+llvm-15.0.0-amd64-pc-solaris2.11.tar.xz",
|
||||
"clang+llvm-15.0.0-aarch64-linux-gnu.tar.xz",
|
||||
"LLVM-15.0.0-woa64.exe",
|
||||
"LLVM-15.0.0-win64.exe",
|
||||
"LLVM-15.0.0-win32.exe"
|
||||
],
|
||||
"llvmorg-14.0.6": [
|
||||
"clang+llvm-14.0.6-x86_64-linux-gnu-rhel-8.4.tar.xz",
|
||||
"clang+llvm-14.0.6-x86_64-apple-darwin.tar.xz",
|
||||
"clang+llvm-14.0.6-powerpc64le-linux-ubuntu-18.04.5.tar.xz",
|
||||
"clang+llvm-14.0.6-powerpc64le-linux-rhel-8.4.tar.xz",
|
||||
"clang+llvm-14.0.6-powerpc64-ibm-aix-7.2.tar.xz",
|
||||
"clang+llvm-14.0.6-armv7a-linux-gnueabihf.tar.xz",
|
||||
"clang+llvm-14.0.6-arm64-apple-darwin22.3.0.tar.xz",
|
||||
"clang+llvm-14.0.6-amd64-unknown-freebsd13.tar.xz",
|
||||
"clang+llvm-14.0.6-amd64-unknown-freebsd12.tar.xz",
|
||||
"clang+llvm-14.0.6-aarch64-linux-gnu.tar.xz",
|
||||
"LLVM-14.0.6-woa64.zip",
|
||||
"LLVM-14.0.6-win64.exe",
|
||||
"LLVM-14.0.6-win32.exe"
|
||||
],
|
||||
"llvmorg-14.0.5": [
|
||||
"clang+llvm-14.0.5-x86_64-apple-darwin.tar.xz",
|
||||
"clang+llvm-14.0.5-powerpc64le-linux-ubuntu-18.04.5.tar.xz",
|
||||
"clang+llvm-14.0.5-powerpc64le-linux-rhel-8.4.tar.xz",
|
||||
"clang+llvm-14.0.5-powerpc64-ibm-aix-7.2.tar.xz",
|
||||
"clang+llvm-14.0.5-armv7a-linux-gnueabihf.tar.xz",
|
||||
"clang+llvm-14.0.5-amd64-unknown-freebsd13.tar.xz",
|
||||
"clang+llvm-14.0.5-amd64-unknown-freebsd12.tar.xz",
|
||||
"clang+llvm-14.0.5-aarch64-linux-gnu.tar.xz",
|
||||
"LLVM-14.0.5-woa64.zip",
|
||||
"LLVM-14.0.5-win64.exe",
|
||||
"LLVM-14.0.5-win32.exe"
|
||||
],
|
||||
"llvmorg-14.0.4": [
|
||||
"clang+llvm-14.0.4-x86_64-apple-darwin.tar.xz",
|
||||
"clang+llvm-14.0.4-powerpc64le-linux-ubuntu-18.04.5.tar.xz",
|
||||
"clang+llvm-14.0.4-powerpc64le-linux-rhel-8.4.tar.xz",
|
||||
"clang+llvm-14.0.4-powerpc64-ibm-aix-7.2.tar.xz",
|
||||
"clang+llvm-14.0.4-armv7a-linux-gnueabihf.tar.xz",
|
||||
"clang+llvm-14.0.4-amd64-unknown-freebsd13.tar.xz",
|
||||
"clang+llvm-14.0.4-amd64-unknown-freebsd12.tar.xz",
|
||||
"clang+llvm-14.0.4-aarch64-linux-gnu.tar.xz",
|
||||
"LLVM-14.0.4-woa64.zip",
|
||||
"LLVM-14.0.4-win64.exe",
|
||||
"LLVM-14.0.4-win32.exe"
|
||||
],
|
||||
"llvmorg-14.0.3": [
|
||||
"clang+llvm-14.0.3-x86_64-apple-darwin.tar.xz",
|
||||
"clang+llvm-14.0.3-powerpc64le-linux-ubuntu-18.04.tar.xz",
|
||||
"clang+llvm-14.0.3-powerpc64le-linux-rhel-8.4.tar.xz",
|
||||
"clang+llvm-14.0.3-powerpc64-ibm-aix-7.2.tar.xz",
|
||||
"clang+llvm-14.0.3-armv7a-linux-gnueabihf.tar.xz",
|
||||
"clang+llvm-14.0.3-amd64-unknown-freebsd13.tar.xz",
|
||||
"clang+llvm-14.0.3-amd64-unknown-freebsd12.tar.xz",
|
||||
"clang+llvm-14.0.3-aarch64-linux-gnu.tar.xz",
|
||||
"LLVM-14.0.3-woa64.zip",
|
||||
"LLVM-14.0.3-win64.exe",
|
||||
"LLVM-14.0.3-win32.exe"
|
||||
],
|
||||
"llvmorg-14.0.2": [
|
||||
"clang+llvm-14.0.2-x86_64-apple-darwin.tar.xz",
|
||||
"clang+llvm-14.0.2-powerpc64-ibm-aix-7.2.tar.xz",
|
||||
"clang+llvm-14.0.2-amd64-unknown-freebsd13.tar.xz",
|
||||
"clang+llvm-14.0.2-amd64-unknown-freebsd12.tar.xz",
|
||||
"clang+llvm-14.0.2-aarch64-linux-gnu.tar.xz",
|
||||
"LLVM-14.0.2-woa64.zip",
|
||||
"LLVM-14.0.2-win64.exe",
|
||||
"LLVM-14.0.2-win32.exe"
|
||||
],
|
||||
"llvmorg-14.0.1": [
|
||||
"clang+llvm-14.0.1-x86_64-apple-darwin.tar.xz",
|
||||
"clang+llvm-14.0.1-sparcv9-sun-solaris2.11.tar.xz",
|
||||
"clang+llvm-14.0.1-powerpc64le-linux-ubuntu-18.04.tar.xz",
|
||||
"clang+llvm-14.0.1-powerpc64le-linux-rhel-8.4.tar.xz",
|
||||
"clang+llvm-14.0.1-powerpc64-ibm-aix-7.2.tar.xz",
|
||||
"clang+llvm-14.0.1-armv7a-linux-gnueabihf.tar.xz",
|
||||
"clang+llvm-14.0.1-amd64-unknown-freebsd13.tar.xz",
|
||||
"clang+llvm-14.0.1-amd64-unknown-freebsd12.tar.xz",
|
||||
"clang+llvm-14.0.1-amd64-pc-solaris2.11.tar.xz",
|
||||
"clang+llvm-14.0.1-aarch64-linux-gnu.tar.xz",
|
||||
"LLVM-14.0.1-win64.exe",
|
||||
"LLVM-14.0.1-win32.exe"
|
||||
],
|
||||
"llvmorg-14.0.0": [
|
||||
"clang+llvm-14.0.0-x86_64-linux-sles12.4.tar.xz",
|
||||
"clang+llvm-14.0.0-x86_64-linux-gnu-ubuntu-18.04.tar.xz",
|
||||
"clang+llvm-14.0.0-x86_64-apple-darwin.tar.xz",
|
||||
"clang+llvm-14.0.0-sparcv9-sun-solaris2.11.tar.xz",
|
||||
"clang+llvm-14.0.0-powerpc64le-linux-ubuntu-18.04.tar.xz",
|
||||
"clang+llvm-14.0.0-powerpc64le-linux-rhel-7.9.tar.xz",
|
||||
"clang+llvm-14.0.0-powerpc64-ibm-aix-7.2.tar.xz",
|
||||
"clang+llvm-14.0.0-i386-unknown-freebsd13.tar.xz",
|
||||
"clang+llvm-14.0.0-i386-unknown-freebsd12.tar.xz",
|
||||
"clang+llvm-14.0.0-armv7a-linux-gnueabihf.tar.xz",
|
||||
"clang+llvm-14.0.0-amd64-unknown-freebsd13.tar.xz",
|
||||
"clang+llvm-14.0.0-amd64-unknown-freebsd12.tar.xz",
|
||||
"clang+llvm-14.0.0-amd64-pc-solaris2.11.tar.xz",
|
||||
"clang+llvm-14.0.0-aarch64-linux-gnu.tar.xz",
|
||||
"LLVM-14.0.0-woa64.zip",
|
||||
"LLVM-14.0.0-win64.exe",
|
||||
"LLVM-14.0.0-win32.exe"
|
||||
],
|
||||
"llvmorg-13.0.1": [
|
||||
"clang+llvm-13.0.1-x86_64-linux-gnu-ubuntu-18.04.tar.xz",
|
||||
"clang+llvm-13.0.1-x86_64-apple-darwin.tar.xz",
|
||||
"clang+llvm-13.0.1-powerpc64le-linux-ubuntu-18.04.5.tar.xz",
|
||||
"clang+llvm-13.0.1-powerpc64le-linux-rhel-7.9.tar.xz",
|
||||
"clang+llvm-13.0.1-i386-unknown-freebsd13.tar.xz",
|
||||
"clang+llvm-13.0.1-i386-unknown-freebsd12.tar.xz",
|
||||
"clang+llvm-13.0.1-armv7a-linux-gnueabihf.tar.xz",
|
||||
"clang+llvm-13.0.1-amd64-unknown-freebsd13.tar.xz",
|
||||
"clang+llvm-13.0.1-amd64-unknown-freebsd12.tar.xz",
|
||||
"clang+llvm-13.0.1-aarch64-linux-gnu.tar.xz",
|
||||
"LLVM-13.0.1-woa64.zip",
|
||||
"LLVM-13.0.1-win64.exe",
|
||||
"LLVM-13.0.1-win32.exe"
|
||||
],
|
||||
"llvmorg-13.0.0": [
|
||||
"clang+llvm-13.0.0-x86_64-linux-gnu-ubuntu-20.04.tar.xz",
|
||||
"clang+llvm-13.0.0-x86_64-linux-gnu-ubuntu-16.04.tar.xz",
|
||||
"clang+llvm-13.0.0-x86_64-apple-darwin.tar.xz",
|
||||
"clang+llvm-13.0.0-powerpc64le-linux-ubuntu-18.04.tar.xz",
|
||||
"clang+llvm-13.0.0-powerpc64le-linux-rhel-7.9.tar.xz",
|
||||
"clang+llvm-13.0.0-i386-unknown-freebsd13.tar.xz",
|
||||
"clang+llvm-13.0.0-i386-unknown-freebsd12.tar.xz",
|
||||
"clang+llvm-13.0.0-armv7a-linux-gnueabihf.tar.xz",
|
||||
"clang+llvm-13.0.0-amd64-unknown-freebsd13.tar.xz",
|
||||
"clang+llvm-13.0.0-amd64-unknown-freebsd12.tar.xz",
|
||||
"clang+llvm-13.0.0-aarch64-linux-gnu.tar.xz",
|
||||
"LLVM-13.0.0-woa64.zip",
|
||||
"LLVM-13.0.0-win64.exe",
|
||||
"LLVM-13.0.0-win32.exe"
|
||||
],
|
||||
"llvmorg-12.0.1": [
|
||||
"clang+llvm-12.0.1-x86_64-linux-gnu-ubuntu-16.04.tar.xz",
|
||||
"clang+llvm-12.0.1-powerpc64le-linux-ubuntu-18.04.tar.xz",
|
||||
"clang+llvm-12.0.1-powerpc64le-linux-rhel-7.9.tar.xz",
|
||||
"clang+llvm-12.0.1-i386-unknown-freebsd12.tar.xz",
|
||||
"clang+llvm-12.0.1-i386-unknown-freebsd11.tar.xz",
|
||||
"clang+llvm-12.0.1-armv7a-linux-gnueabihf.tar.xz",
|
||||
"clang+llvm-12.0.1-amd64-unknown-freebsd12.tar.xz",
|
||||
"clang+llvm-12.0.1-amd64-unknown-freebsd11.tar.xz",
|
||||
"clang+llvm-12.0.1-aarch64-linux-gnu.tar.xz",
|
||||
"LLVM-12.0.1-win64.exe",
|
||||
"LLVM-12.0.1-win32.exe"
|
||||
],
|
||||
"llvmorg-12.0.0": [
|
||||
"clang+llvm-12.0.0-x86_64-linux-sles12.4.tar.xz",
|
||||
"clang+llvm-12.0.0-x86_64-linux-gnu-ubuntu-20.04.tar.xz",
|
||||
"clang+llvm-12.0.0-x86_64-linux-gnu-ubuntu-16.04.tar.xz",
|
||||
"clang+llvm-12.0.0-x86_64-apple-darwin.tar.xz",
|
||||
"clang+llvm-12.0.0-powerpc64le-linux-ubuntu-18.04.tar.xz",
|
||||
"clang+llvm-12.0.0-powerpc64le-linux-rhel-7.9.tar.xz",
|
||||
"clang+llvm-12.0.0-i386-unknown-freebsd12.tar.xz",
|
||||
"clang+llvm-12.0.0-i386-unknown-freebsd11.tar.xz",
|
||||
"clang+llvm-12.0.0-armv7a-linux-gnueabihf.tar.xz",
|
||||
"clang+llvm-12.0.0-amd64-unknown-freebsd12.tar.xz",
|
||||
"clang+llvm-12.0.0-amd64-unknown-freebsd11.tar.xz",
|
||||
"clang+llvm-12.0.0-aarch64-linux-gnu.tar.xz",
|
||||
"LLVM-12.0.0-woa64.exe",
|
||||
"LLVM-12.0.0-win64.exe",
|
||||
"LLVM-12.0.0-win32.exe"
|
||||
],
|
||||
"llvmorg-11.1.0": [
|
||||
"clang+llvm-11.1.0-x86_64-linux-gnu-ubuntu-20.10.tar.xz",
|
||||
"clang+llvm-11.1.0-x86_64-linux-gnu-ubuntu-16.04.tar.xz",
|
||||
"clang+llvm-11.1.0-powerpc64le-linux-ubuntu-18.04.tar.xz",
|
||||
"clang+llvm-11.1.0-powerpc64le-linux-rhel-7.4.tar.xz",
|
||||
"clang+llvm-11.1.0-i386-unknown-freebsd12.tar.xz",
|
||||
"clang+llvm-11.1.0-i386-unknown-freebsd11.tar.xz",
|
||||
"clang+llvm-11.1.0-armv7a-linux-gnueabihf.tar.xz",
|
||||
"clang+llvm-11.1.0-amd64-unknown-freebsd12.tar.xz",
|
||||
"clang+llvm-11.1.0-amd64-unknown-freebsd11.tar.xz",
|
||||
"clang+llvm-11.1.0-aarch64-linux-gnu.tar.xz",
|
||||
"LLVM-11.1.0-win64.exe",
|
||||
"LLVM-11.1.0-win32.exe"
|
||||
],
|
||||
"llvmorg-11.0.1": [
|
||||
"clang+llvm-11.0.1-x86_64-linux-sles12.4.tar.xz",
|
||||
"clang+llvm-11.0.1-x86_64-linux-gnu-ubuntu-20.10.tar.xz",
|
||||
"clang+llvm-11.0.1-x86_64-linux-gnu-ubuntu-16.04.tar.xz",
|
||||
"clang+llvm-11.0.1-powerpc64le-linux-ubuntu-18.04.tar.xz",
|
||||
"clang+llvm-11.0.1-powerpc64le-linux-rhel-7.4.tar.xz",
|
||||
"clang+llvm-11.0.1-i386-unknown-freebsd12.tar.xz",
|
||||
"clang+llvm-11.0.1-i386-unknown-freebsd11.tar.xz",
|
||||
"clang+llvm-11.0.1-armv7a-linux-gnueabihf.tar.xz",
|
||||
"clang+llvm-11.0.1-amd64-unknown-freebsd12.tar.xz",
|
||||
"clang+llvm-11.0.1-amd64-unknown-freebsd11.tar.xz",
|
||||
"clang+llvm-11.0.1-aarch64-linux-gnu.tar.xz",
|
||||
"LLVM-11.0.1-win64.exe",
|
||||
"LLVM-11.0.1-win32.exe"
|
||||
],
|
||||
"llvmorg-11.0.0": [
|
||||
"clang+llvm-11.0.1-rc2-x86_64-linux-gnu-ubuntu-20.10.tar.xz",
|
||||
"clang+llvm-11.0.0-x86_64-linux-sles12.4.tar.xz",
|
||||
"clang+llvm-11.0.0-x86_64-linux-gnu-ubuntu-20.04.tar.xz",
|
||||
"clang+llvm-11.0.0-x86_64-apple-darwin.tar.xz",
|
||||
"clang+llvm-11.0.0-sparcv9-sun-solaris2.11.tar.xz",
|
||||
"clang+llvm-11.0.0-powerpc64le-linux-ubuntu-16.04.tar.xz",
|
||||
"clang+llvm-11.0.0-powerpc64le-linux-rhel-7.4.tar.xz",
|
||||
"clang+llvm-11.0.0-i386-unknown-freebsd11.tar.xz",
|
||||
"clang+llvm-11.0.0-armv7a-linux-gnueabihf.tar.xz",
|
||||
"clang+llvm-11.0.0-amd64-unknown-freebsd11.tar.xz",
|
||||
"clang+llvm-11.0.0-amd64-pc-solaris2.11.tar.xz",
|
||||
"clang+llvm-11.0.0-aarch64-linux-gnu.tar.xz",
|
||||
"LLVM-11.0.0-win64.exe",
|
||||
"LLVM-11.0.0-win32.exe"
|
||||
],
|
||||
"llvmorg-10.0.1": [
|
||||
"clang+llvm-10.0.1-x86_64-linux-sles12.4.tar.xz",
|
||||
"clang+llvm-10.0.1-x86_64-linux-gnu-ubuntu-16.04.tar.xz",
|
||||
"clang+llvm-10.0.1-x86_64-apple-darwin.tar.xz",
|
||||
"clang+llvm-10.0.1-powerpc64le-linux-ubuntu-16.04.tar.xz",
|
||||
"clang+llvm-10.0.1-powerpc64le-linux-rhel-7.4.tar.xz",
|
||||
"clang+llvm-10.0.1-i386-unknown-freebsd11.tar.xz",
|
||||
"clang+llvm-10.0.1-armv7a-linux-gnueabihf.tar.xz",
|
||||
"clang+llvm-10.0.1-amd64-unknown-freebsd11.tar.xz",
|
||||
"clang+llvm-10.0.1-aarch64-linux-gnu.tar.xz"
|
||||
],
|
||||
"llvmorg-10.0.0": [
|
||||
"clang+llvm-10.0.0-x86_64-linux-sles11.3.tar.xz",
|
||||
"clang+llvm-10.0.0-x86_64-linux-gnu-ubuntu-18.04.tar.xz",
|
||||
"clang+llvm-10.0.0-x86_64-apple-darwin.tar.xz",
|
||||
"clang+llvm-10.0.0-sparcv9-sun-solaris2.11.tar.xz",
|
||||
"clang+llvm-10.0.0-powerpc64le-linux-ubuntu-16.04.tar.xz",
|
||||
"clang+llvm-10.0.0-powerpc64le-linux-rhel-7.4.tar.xz",
|
||||
"clang+llvm-10.0.0-i386-unknown-freebsd11.tar.xz",
|
||||
"clang+llvm-10.0.0-armv7a-linux-gnueabihf.tar.xz",
|
||||
"clang+llvm-10.0.0-amd64-unknown-freebsd11.tar.xz",
|
||||
"clang+llvm-10.0.0-amd64-pc-solaris2.11.tar.xz",
|
||||
"clang+llvm-10.0.0-aarch64-linux-gnu.tar.xz",
|
||||
"LLVM-10.0.0-win64.exe",
|
||||
"LLVM-10.0.0-win32.exe"
|
||||
],
|
||||
"llvmorg-9.0.1": [
|
||||
"clang+llvm-9.0.1-x86_64-linux-gnu-ubuntu-16.04.tar.xz",
|
||||
"clang+llvm-9.0.1-x86_64-apple-darwin.tar.xz",
|
||||
"clang+llvm-9.0.1-powerpc64le-linux-ubuntu-16.04.tar.xz",
|
||||
"clang+llvm-9.0.1-powerpc64le-linux-rhel-7.4.tar.xz",
|
||||
"clang+llvm-9.0.1-i386-unknown-freebsd11.tar.xz",
|
||||
"clang+llvm-9.0.1-armv7a-linux-gnueabihf.tar.xz",
|
||||
"clang+llvm-9.0.1-amd64-unknown-freebsd11.tar.xz",
|
||||
"clang+llvm-9.0.1-aarch64-linux-gnu.tar.xz",
|
||||
"LLVM-9.0.1-win64.exe",
|
||||
"LLVM-9.0.1-win32.exe"
|
||||
],
|
||||
"llvmorg-8.0.1": [
|
||||
"clang+llvm-8.0.1-x86_64-linux-sles11.3.tar.xz",
|
||||
"clang+llvm-8.0.1-x86_64-linux-gnu-ubuntu-14.04.tar.xz",
|
||||
"clang+llvm-8.0.1-powerpc64le-linux-ubuntu-16.04.tar.xz",
|
||||
"clang+llvm-8.0.1-powerpc64le-linux-rhel-7.4.tar.xz",
|
||||
"clang+llvm-8.0.1-i386-unknown-freebsd11.tar.xz",
|
||||
"clang+llvm-8.0.1-armv7a-linux-gnueabihf.tar.xz",
|
||||
"clang+llvm-8.0.1-amd64-unknown-freebsd11.tar.xz",
|
||||
"clang+llvm-8.0.1-aarch64-linux-gnu.tar.xz",
|
||||
"LLVM-8.0.1-win64.exe",
|
||||
"LLVM-8.0.1-win32.exe"
|
||||
],
|
||||
"llvmorg-7.1.0": [
|
||||
"clang+llvm-7.1.0-x86_64-linux-sles11.3.tar.xz",
|
||||
"clang+llvm-7.1.0-x86_64-linux-gnu-ubuntu-14.04.tar.xz",
|
||||
"clang+llvm-7.1.0-i386-unknown-freebsd11.tar.xz",
|
||||
"clang+llvm-7.1.0-armv7a-linux-gnueabihf.tar.xz",
|
||||
"clang+llvm-7.1.0-amd64-unknown-freebsd11.tar.xz",
|
||||
"clang+llvm-7.1.0-aarch64-linux-gnu.tar.xz",
|
||||
"LLVM-7.1.0-win64.exe",
|
||||
"LLVM-7.1.0-win32.exe"
|
||||
]
|
||||
}
|
|
@ -10,9 +10,13 @@ import { addUpdateAlternativesToRc, installAptPack } from "setup-apt"
|
|||
import { rcOptions } from "../cli-options.js"
|
||||
import { setupGcc } from "../gcc/gcc.js"
|
||||
import { setupMacOSSDK } from "../macos-sdk/macos-sdk.js"
|
||||
import { hasDnf } from "../utils/env/hasDnf.js"
|
||||
import { isArch } from "../utils/env/isArch.js"
|
||||
import { isUbuntu } from "../utils/env/isUbuntu.js"
|
||||
import { ubuntuVersion } from "../utils/env/ubuntu_version.js"
|
||||
import { type InstallationInfo, setupBin } from "../utils/setup/setupBin.js"
|
||||
import { setupDnfPack } from "../utils/setup/setupDnfPack.js"
|
||||
import { setupPacmanPack } from "../utils/setup/setupPacmanPack.js"
|
||||
import { semverCoerceIfInvalid } from "../utils/setup/version.js"
|
||||
import { getVersion } from "../versions/versions.js"
|
||||
import { LLVMPackages, setupLLVMApt } from "./llvm_installer.js"
|
||||
|
@ -82,6 +86,14 @@ async function llvmBinaryDeps_raw(majorVersion: number) {
|
|||
} else {
|
||||
await installAptPack([{ name: "libtinfo-dev" }])
|
||||
}
|
||||
} else if (isArch()) {
|
||||
// https://aur.archlinux.org/packages/ncurses5-compat-libs
|
||||
await setupPacmanPack("ncurses5-compat-libs", undefined, "yay")
|
||||
} else if (hasDnf()) {
|
||||
// https://packages.fedoraproject.org/pkgs/ncurses/ncurses-compat-libs/index.html
|
||||
await setupDnfPack([
|
||||
{ name: "ncurses-compat-libs" },
|
||||
])
|
||||
}
|
||||
}
|
||||
const llvmBinaryDeps = memoize(llvmBinaryDeps_raw, { promise: true })
|
||||
|
|
|
@ -0,0 +1,335 @@
|
|||
{
|
||||
"9.0.0": [
|
||||
"clang+llvm-9.0.0-x86_64-pc-linux-gnu.tar.xz",
|
||||
"clang+llvm-9.0.0-x86_64-linux-sles11.3.tar.xz",
|
||||
"clang+llvm-9.0.0-x86_64-linux-gnu-ubuntu-18.04.tar.xz",
|
||||
"clang+llvm-9.0.0-x86_64-linux-gnu-ubuntu-16.04.tar.xz",
|
||||
"clang+llvm-9.0.0-x86_64-linux-gnu-ubuntu-14.04.tar.xz",
|
||||
"clang+llvm-9.0.0-x86_64-darwin-apple.tar.xz",
|
||||
"clang+llvm-9.0.0-sparcv9-sun-solaris2.11.tar.xz",
|
||||
"clang+llvm-9.0.0-powerpc64le-linux-ubuntu-16.04.tar.xz",
|
||||
"clang+llvm-9.0.0-powerpc64le-linux-rhel-7.4.tar.xz",
|
||||
"clang+llvm-9.0.0-i386-unknown-freebsd11.tar.xz",
|
||||
"clang+llvm-9.0.0-armv7a-linux-gnueabihf.tar.xz",
|
||||
"clang+llvm-9.0.0-amd64-unknown-freebsd11.tar.xz",
|
||||
"clang+llvm-9.0.0-amd64-pc-solaris2.11.tar.xz",
|
||||
"clang+llvm-9.0.0-aarch64-linux-gnu.tar.xz",
|
||||
"LLVM-9.0.0-win64.exe",
|
||||
"LLVM-9.0.0-win32.exe"
|
||||
],
|
||||
"8.0.0": [
|
||||
"clang+llvm-8.0.0-x86_64-linux-sles11.3.tar.xz",
|
||||
"clang+llvm-8.0.0-x86_64-linux-gnu-ubuntu-18.04.tar.xz",
|
||||
"clang+llvm-8.0.0-x86_64-linux-gnu-ubuntu-16.04.tar.xz",
|
||||
"clang+llvm-8.0.0-x86_64-linux-gnu-ubuntu-14.04.tar.xz",
|
||||
"clang+llvm-8.0.0-x86_64-apple-darwin.tar.xz",
|
||||
"clang+llvm-8.0.0-powerpc64le-unknown-unknown.tar.xz",
|
||||
"clang+llvm-8.0.0-i386-unknown-freebsd11.tar.xz",
|
||||
"clang+llvm-8.0.0-armv7a-linux-gnueabihf.tar.xz",
|
||||
"clang+llvm-8.0.0-amd64-unknown-freebsd11.tar.xz",
|
||||
"clang+llvm-8.0.0-aarch64-linux-gnu.tar.xz",
|
||||
"LLVM-8.0.0-win64.exe",
|
||||
"LLVM-8.0.0-win32.exe"
|
||||
],
|
||||
"7.0.1": [
|
||||
"clang+llvm-7.0.1-x86_64-linux-sles11.3.tar.xz",
|
||||
"clang+llvm-7.0.1-x86_64-linux-gnu-ubuntu-18.04.tar.xz",
|
||||
"clang+llvm-7.0.1-x86_64-linux-gnu-ubuntu-16.04.tar.xz",
|
||||
"clang+llvm-7.0.1-x86_64-linux-gnu-ubuntu-14.04.tar.xz",
|
||||
"clang+llvm-7.0.1-powerpc64le-unknown-unknown.tar.xz",
|
||||
"clang+llvm-7.0.1-i386-unknown-freebsd11.tar.xz",
|
||||
"clang+llvm-7.0.1-armv7a-linux-gnueabihf.tar.xz",
|
||||
"clang+llvm-7.0.1-amd64-unknown-freebsd11.tar.xz",
|
||||
"clang+llvm-7.0.1-aarch64-linux-gnu.tar.xz",
|
||||
"LLVM-7.0.1-win64.exe",
|
||||
"LLVM-7.0.1-win32.exe"
|
||||
],
|
||||
"7.0.0": [
|
||||
"clang+llvm-7.0.0-x86_64-linux-sles12.3.tar.xz",
|
||||
"clang+llvm-7.0.0-x86_64-linux-sles11.3.tar.xz",
|
||||
"clang+llvm-7.0.0-x86_64-linux-gnu-ubuntu-16.04.tar.xz",
|
||||
"clang+llvm-7.0.0-x86_64-linux-gnu-ubuntu-14.04.tar.xz",
|
||||
"clang+llvm-7.0.0-x86_64-apple-darwin.tar.xz",
|
||||
"clang+llvm-7.0.0-powerpc64le-unknown-unknown.tar.xz",
|
||||
"clang+llvm-7.0.0-i386-unknown-freebsd11.tar.xz",
|
||||
"clang+llvm-7.0.0-armv7a-linux-gnueabihf.tar.xz",
|
||||
"clang+llvm-7.0.0-amd64-unknown-freebsd11.tar.xz",
|
||||
"clang+llvm-7.0.0-aarch64-linux-gnu.tar.xz",
|
||||
"LLVM-7.0.0-win64.exe",
|
||||
"LLVM-7.0.0-win32.exe"
|
||||
],
|
||||
"6.0.1": [
|
||||
"clang+llvm-6.0.1-x86_64-linux-sles12.3.tar.xz",
|
||||
"clang+llvm-6.0.1-x86_64-linux-sles11.3.tar.xz",
|
||||
"clang+llvm-6.0.1-x86_64-linux-gnu-ubuntu-16.04.tar.xz",
|
||||
"clang+llvm-6.0.1-x86_64-linux-gnu-ubuntu-14.04.tar.xz",
|
||||
"clang+llvm-6.0.1-i386-unknown-freebsd10.tar.xz",
|
||||
"clang+llvm-6.0.1-armv7a-linux-gnueabihf.tar.xz",
|
||||
"clang+llvm-6.0.1-amd64-unknown-freebsd10.tar.xz",
|
||||
"clang+llvm-6.0.1-aarch64-linux-gnu.tar.xz",
|
||||
"LLVM-6.0.1-win64.exe",
|
||||
"LLVM-6.0.1-win32.exe"
|
||||
],
|
||||
"6.0.0": [
|
||||
"clang+llvm-6.0.0-x86_64-linux-sles12.2.tar.xz",
|
||||
"clang+llvm-6.0.0-x86_64-linux-sles11.3.tar.xz",
|
||||
"clang+llvm-6.0.0-x86_64-linux-gnu-ubuntu-16.04.tar.xz",
|
||||
"clang+llvm-6.0.0-x86_64-linux-gnu-ubuntu-14.04.tar.xz",
|
||||
"clang+llvm-6.0.0-x86_64-linux-gnu-debian8.tar.xz",
|
||||
"clang+llvm-6.0.0-x86_64-linux-gnu-Fedora27.tar.xz",
|
||||
"clang+llvm-6.0.0-x86_64-apple-darwin.tar.xz",
|
||||
"clang+llvm-6.0.0-mipsel-linux-gnu.tar.xz",
|
||||
"clang+llvm-6.0.0-mips-linux-gnu.tar.xz",
|
||||
"clang+llvm-6.0.0-i686-linux-gnu-Fedora27.tar.xz",
|
||||
"clang+llvm-6.0.0-i386-unknown-freebsd-10.tar.xz",
|
||||
"clang+llvm-6.0.0-armv7a-linux-gnueabihf.tar.xz",
|
||||
"clang+llvm-6.0.0-amd64-unknown-freebsd-10.tar.xz",
|
||||
"clang+llvm-6.0.0-aarch64-linux-gnu.tar.xz",
|
||||
"LLVM-6.0.0-win64.exe",
|
||||
"LLVM-6.0.0-win32.exe"
|
||||
],
|
||||
"5.0.2": [
|
||||
"clang+llvm-5.0.2-x86_64-linux-sles11.3.tar.xz",
|
||||
"clang+llvm-5.0.2-x86_64-linux-gnu-ubuntu-16.04.tar.xz",
|
||||
"clang+llvm-5.0.2-x86_64-linux-gnu-ubuntu-14.04.tar.xz",
|
||||
"clang+llvm-5.0.2-x86_64-apple-darwin.tar.xz",
|
||||
"LLVM-5.0.2-win64.exe",
|
||||
"LLVM-5.0.2-win32.exe"
|
||||
],
|
||||
"5.0.1": [
|
||||
"clang+llvm-5.0.1-x86_64-linux-gnu-ubuntu-16.04.tar.xz",
|
||||
"clang+llvm-5.0.1-x86_64-linux-gnu-ubuntu-14.04.tar.xz",
|
||||
"clang+llvm-5.0.1-x86_64-linux-gnu-debian8.tar.xz",
|
||||
"clang+llvm-5.0.1-x86_64-linux-gnu-Fedora27.tar.xz",
|
||||
"clang+llvm-5.0.1-x86_64-apple-darwin.tar.xz",
|
||||
"clang+llvm-5.0.1-ppc64le-linux-gnu-Fedora-27.tar.xz",
|
||||
"clang+llvm-5.0.1-ppc64-linux-gnu-Fedora-27.tar.xz",
|
||||
"clang+llvm-5.0.1-mipsel-linux-gnu.tar.xz",
|
||||
"clang+llvm-5.0.1-mips-linux-gnu.tar.xz",
|
||||
"clang+llvm-5.0.1-linux-x86_64-sles12.2.tar.xz",
|
||||
"clang+llvm-5.0.1-linux-x86_64-sles11.3.tar.xz",
|
||||
"clang+llvm-5.0.1-i686-linux-gnu-Fedora-27.tar.xz",
|
||||
"clang+llvm-5.0.1-i386-unknown-freebsd10.tar.xz",
|
||||
"clang+llvm-5.0.1-armv7a-linux-gnueabihf.tar.xz",
|
||||
"clang+llvm-5.0.1-amd64-unknown-freebsd10.tar.xz",
|
||||
"clang+llvm-5.0.1-aarch64-linux-gnu.tar.xz",
|
||||
"LLVM-5.0.1-win64.exe",
|
||||
"LLVM-5.0.1-win32.exe"
|
||||
],
|
||||
"5.0.0": [
|
||||
"clang+llvm-5.0.0-x86_64-linux-gnu-debian8.tar.xz",
|
||||
"clang+llvm-5.0.0-x86_64-apple-darwin.tar.xz",
|
||||
"clang+llvm-5.0.0-mipsel-linux-gnu.tar.xz",
|
||||
"clang+llvm-5.0.0-mips-linux-gnu.tar.xz",
|
||||
"clang+llvm-5.0.0-linux-x86_64-ubuntu16.04.tar.xz",
|
||||
"clang+llvm-5.0.0-linux-x86_64-ubuntu14.04.tar.xz",
|
||||
"clang+llvm-5.0.0-linux-x86_64-sles11.3.tar.xz",
|
||||
"clang+llvm-5.0.0-i386-unknown-freebsd10.tar.xz",
|
||||
"clang+llvm-5.0.0-armv7a-linux-gnueabihf.tar.xz",
|
||||
"clang+llvm-5.0.0-amd64-unknown-freebsd10.tar.xz",
|
||||
"clang+llvm-5.0.0-aarch64-linux-gnu.tar.xz",
|
||||
"LLVM-5.0.0-win64.exe",
|
||||
"LLVM-5.0.0-win32.exe"
|
||||
],
|
||||
"4.0.1": [
|
||||
"clang+llvm-4.0.1-x86_64-linux-gnu-debian8.tar.xz",
|
||||
"clang+llvm-4.0.1-x86_64-linux-gnu-Fedora-25.tar.xz",
|
||||
"clang+llvm-4.0.1-x86_64-apple-darwin.tar.xz",
|
||||
"clang+llvm-4.0.1-ppc64le-linux-gnu-Fedora-25.tar.xz",
|
||||
"clang+llvm-4.0.1-ppc64-linux-gnu-Fedora-25.tar.xz",
|
||||
"clang+llvm-4.0.1-mipsel-linux-gnu.tar.xz",
|
||||
"clang+llvm-4.0.1-mips-linux-gnu.tar.xz",
|
||||
"clang+llvm-4.0.1-linux-x86_64-sles11.3.tar.xz",
|
||||
"clang+llvm-4.0.1-i386-unknown-freebsd10.tar.xz",
|
||||
"clang+llvm-4.0.1-armv7a-linux-gnueabihf.tar.xz",
|
||||
"clang+llvm-4.0.1-amd64-unknown-freebsd10.tar.xz",
|
||||
"clang+llvm-4.0.1-aarch64-linux-gnu.tar.xz",
|
||||
"LLVM-4.0.1-win64.exe",
|
||||
"LLVM-4.0.1-win32.exe"
|
||||
],
|
||||
"4.0.0": [
|
||||
"clang+llvm-4.0.0-x86_64-linux-gnu-ubuntu-16.10.tar.xz",
|
||||
"clang+llvm-4.0.0-x86_64-linux-gnu-ubuntu-16.04.tar.xz",
|
||||
"clang+llvm-4.0.0-x86_64-linux-gnu-ubuntu-14.04.tar.xz",
|
||||
"clang+llvm-4.0.0-x86_64-linux-gnu-debian8.tar.xz",
|
||||
"clang+llvm-4.0.0-x86_64-apple-darwin.tar.xz",
|
||||
"clang+llvm-4.0.0-mipsel-linux-gnu.tar.xz",
|
||||
"clang+llvm-4.0.0-mips-linux-gnu.tar.xz",
|
||||
"clang+llvm-4.0.0-i386-unknown-freebsd10.tar.xz",
|
||||
"clang+llvm-4.0.0-armv7a-linux-gnueabihf.tar.xz",
|
||||
"clang+llvm-4.0.0-amd64-unknown-freebsd10.tar.xz",
|
||||
"clang+llvm-4.0.0-aarch64-linux-gnu.tar.xz",
|
||||
"LLVM-4.0.0-win64.exe",
|
||||
"LLVM-4.0.0-win32.exe"
|
||||
],
|
||||
"3.9.1": [
|
||||
"clang+llvm-3.9.1-x86_64-linux-gnu-ubuntu-16.04.tar.xz",
|
||||
"clang+llvm-3.9.1-x86_64-linux-gnu-ubuntu-14.04.tar.xz",
|
||||
"clang+llvm-3.9.1-x86_64-linux-gnu-debian8.tar.xz",
|
||||
"clang+llvm-3.9.1-mipsel-linux-gnu.tar.xz",
|
||||
"clang+llvm-3.9.1-mips-linux-gnu.tar.xz",
|
||||
"clang+llvm-3.9.1-i386-unknown-freebsd10.tar.xz",
|
||||
"clang+llvm-3.9.1-armv7a-linux-gnueabihf.tar.xz",
|
||||
"clang+llvm-3.9.1-amd64-unknown-freebsd10.tar.xz",
|
||||
"clang+llvm-3.9.1-aarch64-linux-gnu.tar.xz",
|
||||
"LLVM-3.9.1-win64.exe",
|
||||
"LLVM-3.9.1-win32.exe"
|
||||
],
|
||||
"3.9.0": [
|
||||
"clang+llvm-3.9.0-x86_64-opensuse13.2.tar.xz",
|
||||
"clang+llvm-3.9.0-x86_64-linux-gnu-ubuntu-16.04.tar.xz",
|
||||
"clang+llvm-3.9.0-x86_64-linux-gnu-ubuntu-14.04.tar.xz",
|
||||
"clang+llvm-3.9.0-x86_64-linux-gnu-debian8.tar.xz",
|
||||
"clang+llvm-3.9.0-x86_64-fedora23.tar.xz",
|
||||
"clang+llvm-3.9.0-x86_64-apple-darwin.tar.xz",
|
||||
"clang+llvm-3.9.0-mipsel-linux-gnu.tar.xz",
|
||||
"clang+llvm-3.9.0-mips-linux-gnu.tar.xz",
|
||||
"clang+llvm-3.9.0-i686-fedora23.tar.xz",
|
||||
"clang+llvm-3.9.0-i586-opensuse13.2.tar.xz",
|
||||
"clang+llvm-3.9.0-i386-unknown-freebsd10.tar.xz",
|
||||
"clang+llvm-3.9.0-armv7a-linux-gnueabihf.tar.xz",
|
||||
"clang+llvm-3.9.0-amd64-unknown-freebsd10.tar.xz",
|
||||
"clang+llvm-3.9.0-aarch64-linux-gnu.tar.xz",
|
||||
"LLVM-3.9.0-win64.exe",
|
||||
"LLVM-3.9.0-win32.exe"
|
||||
],
|
||||
"3.8.1": [
|
||||
"clang+llvm-3.8.1-x86_64-opensuse13.2.tar.xz",
|
||||
"clang+llvm-3.8.1-x86_64-linux-gnu-ubuntu-16.04.tar.xz",
|
||||
"clang+llvm-3.8.1-x86_64-linux-gnu-ubuntu-14.04.tar.xz",
|
||||
"clang+llvm-3.8.1-x86_64-linux-gnu-debian8.tar.xz",
|
||||
"clang+llvm-3.8.1-x86_64-fedora22.tar.xz",
|
||||
"clang+llvm-3.8.1-mipsel-linux-gnu.tar.xz",
|
||||
"clang+llvm-3.8.1-mips-linux-gnu.tar.xz",
|
||||
"clang+llvm-3.8.1-linux-x86_64-sles11.3.tar.xz",
|
||||
"clang+llvm-3.8.1-linux-armhf-vivid.tar.xz",
|
||||
"clang+llvm-3.8.1-i686-fedora23.tar.xz",
|
||||
"clang+llvm-3.8.1-i586-opensuse13.2.tar.xz",
|
||||
"clang+llvm-3.8.1-armv7a-linux-gnueabihf.tar.xz",
|
||||
"clang+llvm-3.8.1-aarch64-linux-gnu.tar.xz",
|
||||
"LLVM-3.8.1-win64.exe",
|
||||
"LLVM-3.8.1-win32.exe"
|
||||
],
|
||||
"3.8.0": [
|
||||
"clang+llvm-3.8.0-x86_64-sles11.3-linux-gnu.tar.xz",
|
||||
"clang+llvm-3.8.0-x86_64-opensuse13.2.tar.xz",
|
||||
"clang+llvm-3.8.0-x86_64-linux-gnu-ubuntu-16.04.tar.xz",
|
||||
"clang+llvm-3.8.0-x86_64-linux-gnu-ubuntu-15.10.tar.xz",
|
||||
"clang+llvm-3.8.0-x86_64-linux-gnu-ubuntu-14.04.tar.xz",
|
||||
"clang+llvm-3.8.0-x86_64-linux-gnu-debian8.tar.xz",
|
||||
"clang+llvm-3.8.0-x86_64-fedora23.tar.xz",
|
||||
"clang+llvm-3.8.0-x86_64-apple-darwin.tar.xz",
|
||||
"clang+llvm-3.8.0-mipsel-linux-gnu.tar.xz",
|
||||
"clang+llvm-3.8.0-mips-linux-gnu.tar.xz",
|
||||
"clang+llvm-3.8.0-linux-x86_64-centos6.tar.xz",
|
||||
"clang+llvm-3.8.0-linux-armhf-vivid.tar.xz",
|
||||
"clang+llvm-3.8.0-i686-fedora23.tar.xz",
|
||||
"clang+llvm-3.8.0-i586-opensuse13.2.tar.xz",
|
||||
"clang+llvm-3.8.0-i386-unknown-freebsd10.tar.xz",
|
||||
"clang+llvm-3.8.0-armv7a-linux-gnueabihf.tar.xz",
|
||||
"clang+llvm-3.8.0-amd64-unknown-freebsd10.tar.xz",
|
||||
"clang+llvm-3.8.0-aarch64-linux-gnu.tar.xz",
|
||||
"LLVM-3.8.0-win64.exe",
|
||||
"LLVM-3.8.0-win32.exe"
|
||||
],
|
||||
"3.7.1": [
|
||||
"clang+llvm-3.7.1-x86_64-opensuse13.2.tar.xz",
|
||||
"clang+llvm-3.7.1-x86_64-linux-gnu-ubuntu-15.10.tar.xz",
|
||||
"clang+llvm-3.7.1-x86_64-linux-gnu-ubuntu-14.04.tar.xz",
|
||||
"clang+llvm-3.7.1-x86_64-linux-gnu-debian8.tar.xz",
|
||||
"clang+llvm-3.7.1-x86_64-fedora22.tar.xz",
|
||||
"clang+llvm-3.7.1-mipsel-linux-gnu.tar.xz",
|
||||
"clang+llvm-3.7.1-mips-linux-gnu.tar.xz",
|
||||
"clang+llvm-3.7.1-i686-fedora22.tar.xz",
|
||||
"clang+llvm-3.7.1-i586-opensuse13.2.tar.xz",
|
||||
"clang+llvm-3.7.1-i386-unknown-freebsd10.tar.xz",
|
||||
"clang+llvm-3.7.1-armv7a-linux-gnueabihf.tar.xz",
|
||||
"clang+llvm-3.7.1-amd64-unknown-freebsd10.tar.xz",
|
||||
"clang+llvm-3.7.1-aarch64-linux-gnu.tar.xz",
|
||||
"LLVM-3.7.1-win64.exe",
|
||||
"LLVM-3.7.1-win32.exe"
|
||||
],
|
||||
"3.7.0": [
|
||||
"clang+llvm-3.7.0-x86_64-opensuse13.2.tar.xz",
|
||||
"clang+llvm-3.7.0-x86_64-linux-gnu-ubuntu-14.04.tar.xz",
|
||||
"clang+llvm-3.7.0-x86_64-fedora22.tar.xz",
|
||||
"clang+llvm-3.7.0-x86_64-apple-darwin.tar.xz",
|
||||
"clang+llvm-3.7.0-mipsel-linux-gnu.tar.xz",
|
||||
"clang+llvm-3.7.0-mips-linux-gnu.tar.xz",
|
||||
"clang+llvm-3.7.0-i686-fedora22.tar.xz",
|
||||
"clang+llvm-3.7.0-i586-opensuse13.2.tar.xz",
|
||||
"clang+llvm-3.7.0-i386-unknown-freebsd10.tar.xz",
|
||||
"clang+llvm-3.7.0-armv7a-linux-gnueabihf.tar.xz",
|
||||
"clang+llvm-3.7.0-amd64-unknown-freebsd10.tar.xz",
|
||||
"clang+llvm-3.7.0-aarch64-linux-gnu.tar.xz",
|
||||
"LLVM-3.7.0-win64.exe",
|
||||
"LLVM-3.7.0-win32.exe"
|
||||
],
|
||||
"3.6.2": [
|
||||
"clang+llvm-3.6.2-x86_64-opensuse13.2.tar.xz",
|
||||
"clang+llvm-3.6.2-x86_64-linux-gnu-ubuntu-15.04.tar.xz",
|
||||
"clang+llvm-3.6.2-x86_64-linux-gnu-ubuntu-14.04.tar.xz",
|
||||
"clang+llvm-3.6.2-x86_64-fedora21.tar.xz",
|
||||
"clang+llvm-3.6.2-x86_64-apple-darwin.tar.xz",
|
||||
"clang+llvm-3.6.2-mipsel-linux-gnu.tar.xz",
|
||||
"clang+llvm-3.6.2-mips-linux-gnu.tar.xz",
|
||||
"clang+llvm-3.6.2-i586-opensuse13.2.tar.xz",
|
||||
"clang+llvm-3.6.2-i386-unknown-freebsd10.tar.xz",
|
||||
"clang+llvm-3.6.2-i386-fedora21.tar.xz",
|
||||
"clang+llvm-3.6.2-armv7a-linux-gnueabihf.tar.xz",
|
||||
"clang+llvm-3.6.2-amd64-unknown-freebsd10.tar.xz",
|
||||
"clang+llvm-3.6.2-aarch64-linux-gnu.tar.xz",
|
||||
"LLVM-3.6.2-win32.exe"
|
||||
],
|
||||
"3.6.1": [
|
||||
"clang+llvm-3.6.1-x86_64-opensuse13.2.tar.xz",
|
||||
"clang+llvm-3.6.1-x86_64-linux-gnu-ubuntu-15.04.tar.xz",
|
||||
"clang+llvm-3.6.1-x86_64-linux-gnu-ubuntu-14.04.tar.xz",
|
||||
"clang+llvm-3.6.1-x86_64-fedora21.tar.xz",
|
||||
"clang+llvm-3.6.1-x86_64-apple-darwin.tar.xz",
|
||||
"clang+llvm-3.6.1-mipsel-linux-gnu.tar.xz",
|
||||
"clang+llvm-3.6.1-mips-linux-gnu.tar.xz",
|
||||
"clang+llvm-3.6.1-i586-opensuse13.2.tar.xz",
|
||||
"clang+llvm-3.6.1-i386-unknown-freebsd10.tar.xz",
|
||||
"clang+llvm-3.6.1-i386-fedora21.tar.xz",
|
||||
"clang+llvm-3.6.1-armv7a-linux-gnueabihf.tar.xz",
|
||||
"clang+llvm-3.6.1-amd64-unknown-freebsd10.tar.xz",
|
||||
"clang+llvm-3.6.1-aarch64-linux-gnu.tar.xz",
|
||||
"LLVM-3.6.1-win32.exe"
|
||||
],
|
||||
"3.6.0": [
|
||||
"clang+llvm-3.6.0-x86_64-opensuse13.2.tar.xz",
|
||||
"clang+llvm-3.6.0-x86_64-linux-gnu-ubuntu-14.04.tar.xz",
|
||||
"clang+llvm-3.6.0-x86_64-fedora21.tar.xz",
|
||||
"clang+llvm-3.6.0-x86_64-apple-darwin.tar.xz",
|
||||
"clang+llvm-3.6.0-mipsel-linux-gnu.tar.xz",
|
||||
"clang+llvm-3.6.0-mips-linux-gnu.tar.xz",
|
||||
"clang+llvm-3.6.0-i686-fedora21.tar.xz",
|
||||
"clang+llvm-3.6.0-i586-opensuse13.2.tar.xz",
|
||||
"clang+llvm-3.6.0-i386-unknown-freebsd10.tar.xz",
|
||||
"clang+llvm-3.6.0-armv7a-linux-gnueabihf.tar.xz",
|
||||
"clang+llvm-3.6.0-amd64-unknown-freebsd10.tar.xz",
|
||||
"clang+llvm-3.6.0-aarch64-linux-gnu.tar.xz",
|
||||
"LLVM-3.6.0-win32.exe"
|
||||
],
|
||||
"3.5.2": [
|
||||
"clang+llvm-3.5.2-x86_64-linux-gnu-ubuntu-14.04.tar.xz",
|
||||
"clang+llvm-3.5.2-x86_64-apple-darwin.tar.xz",
|
||||
"clang+llvm-3.5.2-mipsel-linux-gnu.tar.xz",
|
||||
"clang+llvm-3.5.2-mips-linux-gnu.tar.xz",
|
||||
"clang+llvm-3.5.2-armv7a-linux-gnueabihf.tar.xz",
|
||||
"clang+llvm-3.5.2-aarch64-linux-gnu.tar.xz",
|
||||
"LLVM-3.5.2-win32.exe"
|
||||
],
|
||||
"3.5.1": [
|
||||
"clang+llvm-3.5.1-x86_64-opensuse13.1.tar.xz",
|
||||
"clang+llvm-3.5.1-x86_64-linux-gnu.tar.xz",
|
||||
"clang+llvm-3.5.1-x86_64-fedora20.tar.xz",
|
||||
"clang+llvm-3.5.1-mipsel-linux-gnu.tar.xz",
|
||||
"clang+llvm-3.5.1-mips-linux-gnu.tar.xz",
|
||||
"clang+llvm-3.5.1-i686-fedora20.tar.xz",
|
||||
"clang+llvm-3.5.1-i586-opensuse13.1.tar.xz",
|
||||
"clang+llvm-3.5.1-armv7a-linux-gnueabihf.tar.xz",
|
||||
"clang+llvm-3.5.1-aarch64-linux-gnu.tar.xz"
|
||||
]
|
||||
}
|
|
@ -1,329 +1,25 @@
|
|||
import { info, warning } from "ci-log"
|
||||
import { isUrlOnline } from "is-url-online"
|
||||
import path, { join } from "path"
|
||||
import { fileURLToPath } from "url"
|
||||
import { info } from "ci-log"
|
||||
import { addExeExt } from "patha"
|
||||
import semverLte from "semver/functions/lte"
|
||||
import { loadAssetList, matchAsset } from "../utils/asset/load-assets.js"
|
||||
import { arm64, armv7, powerpc64le, sparc64, x86, x86_64 } from "../utils/env/arch.js"
|
||||
import { hasDnf } from "../utils/env/hasDnf.js"
|
||||
import { isUbuntu } from "../utils/env/isUbuntu.js"
|
||||
import { ubuntuVersion } from "../utils/env/ubuntu_version.js"
|
||||
import { extractExe, extractTarByExe } from "../utils/setup/extract.js"
|
||||
import type { PackageInfo } from "../utils/setup/setupBin.js"
|
||||
import { getSpecificVersionAndUrl, getSpecificVersions, getVersions } from "../utils/setup/version.js"
|
||||
|
||||
// ================================================
|
||||
// Version
|
||||
// ================================================
|
||||
|
||||
/** The specific and minimum LLVM versions supported by this action. */
|
||||
export const VERSIONS: Set<string> = getVersions([
|
||||
"3.5.0",
|
||||
"3.5.1",
|
||||
"3.5.2",
|
||||
"3.6.0",
|
||||
"3.6.1",
|
||||
"3.6.2",
|
||||
"3.7.0",
|
||||
"3.7.1",
|
||||
"3.8.0",
|
||||
"3.8.1",
|
||||
"3.9.0",
|
||||
"3.9.1",
|
||||
"4.0.0",
|
||||
"4.0.1",
|
||||
"5.0.0",
|
||||
"5.0.1",
|
||||
"5.0.2",
|
||||
"6.0.0",
|
||||
"6.0.1",
|
||||
"7.0.0",
|
||||
"7.0.1",
|
||||
"7.1.0",
|
||||
"8.0.0",
|
||||
"8.0.1",
|
||||
"9.0.0",
|
||||
"9.0.1",
|
||||
"10.0.0",
|
||||
"10.0.1",
|
||||
"11.0.0",
|
||||
"11.0.1",
|
||||
"11.1.0",
|
||||
"12.0.0",
|
||||
"12.0.1",
|
||||
"13.0.0",
|
||||
"13.0.1",
|
||||
"14.0.0",
|
||||
"14.0.1",
|
||||
"14.0.2",
|
||||
"14.0.3",
|
||||
"14.0.4",
|
||||
"14.0.5",
|
||||
"14.0.6",
|
||||
"15.0.0",
|
||||
"15.0.1",
|
||||
"15.0.2",
|
||||
"15.0.3",
|
||||
"15.0.4",
|
||||
"15.0.5",
|
||||
"15.0.6",
|
||||
"15.0.7",
|
||||
"16.0.0",
|
||||
"16.0.1",
|
||||
"16.0.2",
|
||||
"16.0.3",
|
||||
"16.0.4",
|
||||
"16.0.5",
|
||||
"16.0.6",
|
||||
"17.0.1",
|
||||
"17.0.2",
|
||||
"17.0.3",
|
||||
"17.0.4",
|
||||
"17.0.5",
|
||||
"17.0.6",
|
||||
"18.1.0",
|
||||
"18.1.1",
|
||||
"18.1.2",
|
||||
"18.1.3",
|
||||
"18.1.4",
|
||||
"18.1.5",
|
||||
"18.1.6",
|
||||
"18.1.7",
|
||||
"18.1.8",
|
||||
])
|
||||
|
||||
/** The LLVM versions that were never released for the Windows platform. */
|
||||
const WIN32_MISSING: Set<string> = new Set(["10.0.1", "15.0.5", "15.0.6", "17.0.5"])
|
||||
|
||||
/** The LLVM versions that were never released for the Darwin platform. */
|
||||
const DARWIN_X64_MISSING = new Set([
|
||||
"3.5.1",
|
||||
"3.6.1",
|
||||
"3.6.2",
|
||||
"3.7.1",
|
||||
"3.8.1",
|
||||
"3.9.1",
|
||||
"6.0.1",
|
||||
"7.0.1",
|
||||
"7.1.0",
|
||||
"8.0.1",
|
||||
"11.0.1",
|
||||
"11.1.0",
|
||||
"12.0.1",
|
||||
"15.0.4",
|
||||
"15.0.5",
|
||||
"15.0.6",
|
||||
"16.0.0",
|
||||
"16.0.1",
|
||||
"16.0.2",
|
||||
"16.0.3",
|
||||
"16.0.4",
|
||||
"16.0.5",
|
||||
"16.0.6",
|
||||
"17.0.1",
|
||||
"17.0.2",
|
||||
"17.0.3",
|
||||
"17.0.4",
|
||||
"17.0.5",
|
||||
"17.0.6",
|
||||
"18.1.0",
|
||||
"18.1.1",
|
||||
"18.1.2",
|
||||
"18.1.3",
|
||||
"18.1.4",
|
||||
"18.1.5",
|
||||
"18.1.6",
|
||||
"18.1.7",
|
||||
"18.1.8",
|
||||
])
|
||||
|
||||
/**
|
||||
* The LLVM versions that should use the last RC version instead of the release version for the Linux (Ubuntu) platform.
|
||||
* This is useful when there were binaries released for the Linux (Ubuntu) platform for the last RC version but not for
|
||||
* the actual release version.
|
||||
*/
|
||||
const UBUNTU_RC: Map<string, string> = new Map()
|
||||
|
||||
/**
|
||||
* The (latest) Ubuntu versions for each LLVM version.
|
||||
*
|
||||
* https://github.com/llvm/llvm-project/releases/tag/llvmorg-14.0.1 or https://releases.llvm.org/14.0.1
|
||||
*/
|
||||
// TODO change based on ubuntu version
|
||||
const UBUNTU_X64_SUFFIX_MAP: { [key: string]: string } = {
|
||||
"3.5.0": "-ubuntu-14.04",
|
||||
"3.5.1": "",
|
||||
"3.5.2": "-ubuntu-14.04",
|
||||
"3.6.0": "-ubuntu-14.04",
|
||||
"3.6.1": "-ubuntu-14.04",
|
||||
"3.6.2": "-ubuntu-14.04",
|
||||
"3.7.0": "-ubuntu-14.04",
|
||||
"3.7.1": "-ubuntu-14.04",
|
||||
"3.8.0": "-ubuntu-16.04",
|
||||
"3.8.1": "-ubuntu-16.04",
|
||||
"3.9.0": "-ubuntu-16.04",
|
||||
"3.9.1": "-ubuntu-16.04",
|
||||
"4.0.0": "-ubuntu-16.04",
|
||||
"5.0.0": "-ubuntu16.04",
|
||||
"5.0.1": "-ubuntu-16.04",
|
||||
"5.0.2": "-ubuntu-16.04",
|
||||
"6.0.0": "-ubuntu-16.04",
|
||||
"6.0.1": "-ubuntu-16.04",
|
||||
"7.0.0": "-ubuntu-16.04",
|
||||
"7.0.1": "-ubuntu-18.04",
|
||||
"7.1.0": "-ubuntu-14.04",
|
||||
"8.0.0": "-ubuntu-18.04",
|
||||
"9.0.0": "-ubuntu-18.04",
|
||||
"9.0.1": "-ubuntu-16.04",
|
||||
"10.0.0": "-ubuntu-18.04",
|
||||
"10.0.1": "-ubuntu-16.04",
|
||||
"11.0.0": "-ubuntu-20.04",
|
||||
"11.0.1": "-ubuntu-16.04",
|
||||
"11.1.0": "-ubuntu-16.04",
|
||||
"12.0.0": "-ubuntu-20.04",
|
||||
"12.0.1": "-ubuntu-16.04",
|
||||
"13.0.0": "-ubuntu-20.04",
|
||||
"13.0.0-ubuntu-16.04": "-ubuntu-16.04",
|
||||
"13.0.0-ubuntu-20.04": "-ubuntu-20.04",
|
||||
"13.0.1": "-ubuntu-18.04",
|
||||
"13.0.1-ubuntu-18.04": "-ubuntu-18.04",
|
||||
"14.0.0": "-ubuntu-18.04",
|
||||
"15.0.2": "-rhel86",
|
||||
"15.0.5": "-ubuntu-18.04",
|
||||
"15.0.6": "-ubuntu-18.04",
|
||||
"16.0.0": "-ubuntu-18.04",
|
||||
"16.0.2": "-ubuntu-22.04",
|
||||
"16.0.3": "-ubuntu-22.04",
|
||||
"16.0.4": "-ubuntu-22.04",
|
||||
"17.0.2": "-ubuntu-22.04",
|
||||
"17.0.4": "-ubuntu-22.04",
|
||||
"17.0.5": "-ubuntu-22.04",
|
||||
"17.0.6": "-ubuntu-22.04",
|
||||
"18.1.4": "-ubuntu-18.04",
|
||||
"18.1.7": "-ubuntu-18.04",
|
||||
"18.1.8": "-ubuntu-18.04",
|
||||
}
|
||||
|
||||
/** The latest supported LLVM version for the Linux (Ubuntu) platform. */
|
||||
const MAX_UBUNTU: string = "18.1.8"
|
||||
|
||||
// ================================================
|
||||
// URL
|
||||
// ================================================
|
||||
|
||||
/** Gets a LLVM download URL for GitHub. */
|
||||
function getGitHubUrl(version: string, prefix: string, suffix: string): string {
|
||||
const file = `${prefix}${version}${suffix}`
|
||||
return `https://github.com/llvm/llvm-project/releases/download/llvmorg-${version}/${file}`
|
||||
}
|
||||
|
||||
/** Gets a LLVM download URL for https://releases.llvm.org. */
|
||||
function getReleaseUrl(version: string, prefix: string, suffix: string): string {
|
||||
const file = `${prefix}${version}${suffix}`
|
||||
return `https://releases.llvm.org/${version}/${file}`
|
||||
}
|
||||
|
||||
/** Gets an LLVM download URL for the Darwin platform. */
|
||||
function getDarwinUrl(version: string): string | null {
|
||||
if (DARWIN_X64_MISSING.has(version)) {
|
||||
return null
|
||||
}
|
||||
|
||||
const darwin = version === "9.0.0" ? "-darwin-apple" : "-apple-darwin"
|
||||
const prefix = "clang+llvm-"
|
||||
const suffix = `-x86_64${darwin}.tar.xz`
|
||||
if (semverLte(version, "9.0.1")) {
|
||||
return getReleaseUrl(version, prefix, suffix)
|
||||
} else {
|
||||
return getGitHubUrl(version, prefix, suffix)
|
||||
}
|
||||
}
|
||||
|
||||
/** Gets an LLVM download URL for the Linux (Ubuntu) platform. */
|
||||
export function getLinuxUrl(versionGiven: string): string {
|
||||
let version = versionGiven
|
||||
|
||||
const rc = UBUNTU_RC.get(version)
|
||||
if (rc !== undefined) {
|
||||
version = rc
|
||||
}
|
||||
|
||||
let linuxVersion: string
|
||||
// ubuntu-version is specified
|
||||
if (version.includes("ubuntu")) {
|
||||
const givenUbuntuVersion = version.replace(/-ubuntu-.*/, "")
|
||||
if (!VERSIONS.has(givenUbuntuVersion)) {
|
||||
throw new Error(`Unsupported Ubuntu version: ${givenUbuntuVersion}`)
|
||||
}
|
||||
linuxVersion = version.replace(givenUbuntuVersion, "")
|
||||
version = getSpecificVersions(VERSIONS, givenUbuntuVersion)[0]
|
||||
} else if (version !== "" && version in UBUNTU_X64_SUFFIX_MAP) {
|
||||
linuxVersion = UBUNTU_X64_SUFFIX_MAP[version]
|
||||
} else {
|
||||
// default to the maximum version
|
||||
linuxVersion = UBUNTU_X64_SUFFIX_MAP[MAX_UBUNTU]
|
||||
warning(`Falling back to LLVM version ${MAX_UBUNTU} ${linuxVersion} for the Ubuntu.`)
|
||||
}
|
||||
|
||||
const prefix = "clang+llvm-"
|
||||
|
||||
let suffix: string
|
||||
if (version === "5.0.0") {
|
||||
suffix = `-linux-x86_64${linuxVersion}.tar.xz`
|
||||
} else if (linuxVersion.includes("-rhel86")) {
|
||||
suffix = `-x86_64-unknown-linux-gnu${linuxVersion}.tar.xz`
|
||||
} else {
|
||||
suffix = `-x86_64-linux-gnu${linuxVersion}.tar.xz`
|
||||
}
|
||||
|
||||
if (semverLte(version, "9.0.1")) {
|
||||
return getReleaseUrl(version, prefix, suffix)
|
||||
} else {
|
||||
return getGitHubUrl(version, prefix, suffix)
|
||||
}
|
||||
}
|
||||
|
||||
/** Gets an LLVM download URL for the Windows platform. */
|
||||
async function getWin32Url(version: string): Promise<string | null> {
|
||||
if (WIN32_MISSING.has(version)) {
|
||||
return null
|
||||
}
|
||||
|
||||
const prefix = "LLVM-"
|
||||
const suffix = semverLte(version, "3.7.0") ? "-win32.exe" : "-win64.exe"
|
||||
|
||||
const olderThan9_1 = semverLte(version, "9.0.1")
|
||||
let url: string
|
||||
let fallback = false
|
||||
if (olderThan9_1) {
|
||||
url = getReleaseUrl(version, prefix, suffix)
|
||||
if (!(await isUrlOnline(url))) {
|
||||
fallback = true // fallback to github
|
||||
}
|
||||
}
|
||||
if (fallback || !olderThan9_1) {
|
||||
url = getGitHubUrl(version, prefix, suffix)
|
||||
}
|
||||
|
||||
return url!
|
||||
}
|
||||
|
||||
/** Gets an LLVM download URL. */
|
||||
export function getUrl(platform: string, version: string): string | null | Promise<string | null> {
|
||||
switch (platform) {
|
||||
case "darwin":
|
||||
return getDarwinUrl(version)
|
||||
case "linux":
|
||||
return getLinuxUrl(version)
|
||||
case "win32":
|
||||
return getWin32Url(version)
|
||||
default:
|
||||
return null
|
||||
}
|
||||
}
|
||||
const dirname = typeof __dirname === "string" ? __dirname : path.dirname(fileURLToPath(import.meta.url))
|
||||
|
||||
export async function getLLVMPackageInfo(
|
||||
version: string,
|
||||
platform: NodeJS.Platform,
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
_arch: string,
|
||||
arch: string,
|
||||
): Promise<PackageInfo> {
|
||||
const [specificVersion, url] = await getSpecificVersionAndUrl(VERSIONS, platform, version, getUrl)
|
||||
info(`specific llvm version: ${specificVersion}`)
|
||||
const url = await getLLVMAssetURL(platform, arch, version)
|
||||
info(`Downloading LLVM from ${url}`)
|
||||
|
||||
return {
|
||||
url,
|
||||
extractedFolderName: "",
|
||||
|
@ -336,3 +32,139 @@ export async function getLLVMPackageInfo(
|
|||
},
|
||||
}
|
||||
}
|
||||
|
||||
export async function getLLVMAssetURL(platform: string, arch: string, version: string) {
|
||||
const { keywords, optionalKeywords } = await getAssetKeywords(platform, arch)
|
||||
|
||||
// first check the github releases
|
||||
const llvmGitHubAssets = await loadAssetList(
|
||||
join(dirname, "github_llvm_llvm-project.json"),
|
||||
)
|
||||
const ghAsset = matchAsset(
|
||||
llvmGitHubAssets,
|
||||
{
|
||||
version,
|
||||
keywords,
|
||||
optionalKeywords,
|
||||
filterMapTag(tag) {
|
||||
return tag.replace(/^llvmorg-/, "")
|
||||
},
|
||||
},
|
||||
)
|
||||
|
||||
if (ghAsset !== undefined) {
|
||||
return `https://github.com/llvm/llvm-project/releases/download/${ghAsset.tag}/${ghAsset.name}`
|
||||
}
|
||||
|
||||
// check the llvm website
|
||||
const llvmWebsiteAssets = await loadAssetList(
|
||||
join(dirname, "llvm_org_releases.json"),
|
||||
)
|
||||
|
||||
const websiteAsset = matchAsset(
|
||||
llvmWebsiteAssets,
|
||||
{
|
||||
version,
|
||||
keywords,
|
||||
optionalKeywords,
|
||||
},
|
||||
)
|
||||
|
||||
if (websiteAsset !== undefined) {
|
||||
return `https://llvm.org/releases/${websiteAsset.tag}/${websiteAsset.name}`
|
||||
}
|
||||
|
||||
throw new Error(`No asset found for version ${version} matching ${keywords} and ${optionalKeywords}`)
|
||||
}
|
||||
|
||||
async function getAssetKeywords(platform: string, arch: string) {
|
||||
const keywords: string[] = []
|
||||
const optionalKeywords: string[] = []
|
||||
|
||||
switch (platform) {
|
||||
case "win32": {
|
||||
if (x86_64.includes(arch)) {
|
||||
keywords.push("win64")
|
||||
// TODO fallback to win32 if win64 is not available (e.g. for LLVM 3.6.2 and older)
|
||||
} else if (x86.includes(arch)) {
|
||||
keywords.push("win32")
|
||||
} else if (arm64.includes(arch)) {
|
||||
keywords.push("woa64")
|
||||
} else {
|
||||
info(`Using arch ${arch} for LLVM`)
|
||||
keywords.push(arch)
|
||||
}
|
||||
break
|
||||
}
|
||||
case "linux": {
|
||||
keywords.push("linux")
|
||||
|
||||
if (isUbuntu()) {
|
||||
optionalKeywords.push("ubuntu")
|
||||
|
||||
const ubuntuVer = await ubuntuVersion()
|
||||
if (ubuntuVer !== null) {
|
||||
optionalKeywords.push(`${ubuntuVer[0]}`)
|
||||
const ubuntuMin = ubuntuVer[1] < 10 ? `0${ubuntuVer[1]}` : `${ubuntuVer[1]}`
|
||||
|
||||
optionalKeywords.push(`${ubuntuVer[0]}.${ubuntuMin}`)
|
||||
optionalKeywords.push(`${ubuntuVer[0]}.${ubuntuMin}.${ubuntuVer[2]}`)
|
||||
}
|
||||
} else if (hasDnf()) {
|
||||
optionalKeywords.push("rhel")
|
||||
}
|
||||
|
||||
if (x86_64.includes(arch)) {
|
||||
keywords.push("x86_64")
|
||||
} else if (x86.includes(arch)) {
|
||||
keywords.push("x86")
|
||||
} else if (arm64.includes(arch)) {
|
||||
keywords.push("aarch64")
|
||||
} else if (armv7.includes(arch)) {
|
||||
keywords.push("armv7a")
|
||||
} else if (powerpc64le.includes(arch)) {
|
||||
keywords.push("powerpc64le")
|
||||
} else if (sparc64.includes(arch)) {
|
||||
keywords.push("sparc64")
|
||||
} else {
|
||||
info(`Using arch ${arch} for LLVM`)
|
||||
keywords.push(arch)
|
||||
}
|
||||
|
||||
break
|
||||
}
|
||||
case "darwin": {
|
||||
keywords.push("apple")
|
||||
|
||||
if (x86_64.includes(arch)) {
|
||||
keywords.push("x86_64")
|
||||
} else if (arm64.includes(arch)) {
|
||||
// allow falling back to x86_64 if arm64 is not available
|
||||
optionalKeywords.push("arm64")
|
||||
} else {
|
||||
info(`Using arch ${arch} for LLVM`)
|
||||
keywords.push(arch)
|
||||
}
|
||||
break
|
||||
}
|
||||
case "freebsd": {
|
||||
keywords.push("freebsd")
|
||||
|
||||
if (x86_64.includes(arch)) {
|
||||
keywords.push("amd64")
|
||||
} else if (x86.includes(arch)) {
|
||||
keywords.push("i386")
|
||||
} else {
|
||||
info(`Using arch ${arch} for LLVM`)
|
||||
keywords.push(arch)
|
||||
}
|
||||
|
||||
break
|
||||
}
|
||||
default:
|
||||
info(`Using ${platform} ${arch} for LLVM`)
|
||||
optionalKeywords.push(platform, arch)
|
||||
break
|
||||
}
|
||||
return { keywords, optionalKeywords }
|
||||
}
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
import { join } from "path"
|
||||
import { addPath } from "envosman"
|
||||
import { installAptPack } from "setup-apt"
|
||||
import { installBrewPack } from "setup-brew"
|
||||
import { getBrewDir, installBrewPack } from "setup-brew"
|
||||
import { rcOptions } from "../cli-options.js"
|
||||
import { hasDnf } from "../utils/env/hasDnf.js"
|
||||
import { isArch } from "../utils/env/isArch.js"
|
||||
|
@ -17,8 +18,10 @@ export async function setupMake(version: string, _setupDir: string, _arch: strin
|
|||
}
|
||||
case "darwin": {
|
||||
await installBrewPack("make", version)
|
||||
await addPath("/usr/local/opt/make/libexec/gnubin", rcOptions)
|
||||
return { binDir: "/usr/local/opt/make/libexec/gnubin" }
|
||||
|
||||
const gnuBinDir = join(getBrewDir(), "opt/make/libexec/gnubin")
|
||||
await addPath(gnuBinDir, rcOptions)
|
||||
return { binDir: gnuBinDir }
|
||||
}
|
||||
case "linux": {
|
||||
if (isArch()) {
|
||||
|
|
|
@ -1,24 +1,34 @@
|
|||
import { addExeExt } from "patha"
|
||||
import { arm64, x86, x86_64 } from "../utils/env/arch.js"
|
||||
import { type InstallationInfo, type PackageInfo, setupBin } from "../utils/setup/setupBin.js"
|
||||
|
||||
/** Get the platform name Ninja uses in their download links */
|
||||
function getNinjaPlatform(platform: NodeJS.Platform) {
|
||||
function getNinjaPlatformArch(platform: NodeJS.Platform, arch: string) {
|
||||
switch (platform) {
|
||||
case "win32":
|
||||
return "win"
|
||||
return x86_64.includes(arch)
|
||||
|| x86.includes(arch)
|
||||
? "win"
|
||||
: arm64.includes(arch)
|
||||
? "winarm64"
|
||||
: "win"
|
||||
case "darwin":
|
||||
return "mac"
|
||||
case "linux":
|
||||
return "linux"
|
||||
return x86_64.includes(arch)
|
||||
|| x86.includes(arch)
|
||||
? "linux"
|
||||
: arm64.includes(arch)
|
||||
? "linux-aarch64"
|
||||
: "linux"
|
||||
default:
|
||||
throw new Error(`Unsupported platform '${platform}'`)
|
||||
}
|
||||
}
|
||||
|
||||
/** Get the platform data for ninja */
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
function getNinjaPackageInfo(version: string, platform: NodeJS.Platform, _arch: string): PackageInfo {
|
||||
const ninjaPlatform = getNinjaPlatform(platform)
|
||||
function getNinjaPackageInfo(version: string, platform: NodeJS.Platform, arch: string): PackageInfo {
|
||||
const ninjaPlatform = getNinjaPlatformArch(platform, arch)
|
||||
return {
|
||||
binRelativeDir: "",
|
||||
binFileName: addExeExt("ninja"),
|
||||
|
|
|
@ -47,17 +47,19 @@ async function fetchGitHubAssetList(
|
|||
continue
|
||||
}
|
||||
|
||||
if (!(release.tag_name in assets)) {
|
||||
assets[release.tag_name] = []
|
||||
}
|
||||
const versionAssets: string[] = []
|
||||
|
||||
const assets_ref = assets[release.tag_name]
|
||||
// const assets_ref = assets[release.tag_name]!
|
||||
|
||||
for (const asset of release.assets) {
|
||||
if (filterAssets !== undefined && !filterAssets(asset.name)) {
|
||||
continue
|
||||
}
|
||||
assets_ref.push(asset.name)
|
||||
versionAssets.push(asset.name)
|
||||
}
|
||||
|
||||
if (versionAssets.length !== 0) {
|
||||
assets[release.tag_name] = versionAssets.sort().reverse()
|
||||
}
|
||||
}
|
||||
} catch (err) {
|
|
@ -0,0 +1,124 @@
|
|||
import { existsSync } from "fs"
|
||||
import { join } from "path"
|
||||
import { mkdir, readFile, readdir, writeFile } from "fs/promises"
|
||||
import { DownloaderHelper } from "node-downloader-helper"
|
||||
import JsonStringify from "safe-stable-stringify"
|
||||
import { compareVersion } from "../setup/version.ts"
|
||||
|
||||
type Options = {
|
||||
/**
|
||||
* The directory to download the HTML files
|
||||
*/
|
||||
htmlDownloadDir: string
|
||||
/**
|
||||
* The path to write the output json file
|
||||
*/
|
||||
path: string
|
||||
/**
|
||||
* A generator that returns the version and the URL of the asset to download
|
||||
*
|
||||
* The generator should return a tuple of the version and the URL
|
||||
*/
|
||||
getAssetVersionAndURL: () => Generator<[string, string], void, unknown>
|
||||
/**
|
||||
* Filter the assets
|
||||
*/
|
||||
filterAssets?: (asset: string) => boolean
|
||||
}
|
||||
|
||||
/**
|
||||
* Save the assets of the HTML files to a json file
|
||||
*
|
||||
* The assets are extracted from the href of the html files
|
||||
*/
|
||||
export async function saveHTMLAssets(opts: Options) {
|
||||
await fetchIndexFiles(opts)
|
||||
|
||||
const assets: Record<string, string[]> = await extractAssetsFromHTML(opts)
|
||||
|
||||
// sort the assets by version
|
||||
const jsonStringify = JsonStringify.configure({
|
||||
deterministic: compareVersion,
|
||||
})
|
||||
|
||||
// write the assets to a json file
|
||||
const data = jsonStringify(assets, null, 2)
|
||||
await writeFile(opts.path, data)
|
||||
}
|
||||
|
||||
async function fetchIndexFiles(opts: Options) {
|
||||
const promises: Promise<void>[] = []
|
||||
|
||||
await mkdir(opts.htmlDownloadDir, { recursive: true })
|
||||
|
||||
for (const [version, url] of opts.getAssetVersionAndURL()) {
|
||||
promises.push(fetchIndexFile(version, url, opts.htmlDownloadDir))
|
||||
}
|
||||
|
||||
await Promise.all(promises)
|
||||
}
|
||||
|
||||
async function fetchIndexFile(version: string, url: string, htmlDownloadDir: string) {
|
||||
try {
|
||||
if (existsSync(join(htmlDownloadDir, version))) {
|
||||
return
|
||||
}
|
||||
|
||||
const dl = new DownloaderHelper(
|
||||
url,
|
||||
htmlDownloadDir,
|
||||
{
|
||||
fileName: `${version}.html`,
|
||||
override: {
|
||||
skip: true,
|
||||
},
|
||||
timeout: 500,
|
||||
},
|
||||
)
|
||||
dl.on("start", () => {
|
||||
console.log(`Downloading ${version}`)
|
||||
})
|
||||
dl.on("error", (err) => {
|
||||
console.error(`Failed to download ${version}.html: ${err}`)
|
||||
})
|
||||
await dl.start()
|
||||
} catch (err) {
|
||||
console.error(err)
|
||||
}
|
||||
}
|
||||
|
||||
async function extractAssetsFromHTML(opts: Options) {
|
||||
const assets: Record<string, string[]> = {}
|
||||
|
||||
const linkRegex = /href="([^"]+)"/g // match all href in the html
|
||||
|
||||
const indexFiles = await readdir(opts.htmlDownloadDir)
|
||||
await Promise.all(indexFiles.map(async (indexFile) => {
|
||||
const version = indexFile.replace(".html", "")
|
||||
|
||||
const versionAssets: string[] = []
|
||||
|
||||
// read the html file
|
||||
const body = await readFile(`${opts.htmlDownloadDir}/${indexFile}`, "utf8")
|
||||
|
||||
// parse the html via regex
|
||||
let match: RegExpExecArray | null
|
||||
// biome-ignore lint/suspicious/noAssignInExpressions: ignore
|
||||
while ((match = linkRegex.exec(body)) !== null) {
|
||||
const asset = match[1]
|
||||
|
||||
if (opts.filterAssets !== undefined && !opts.filterAssets(asset)) {
|
||||
continue
|
||||
}
|
||||
|
||||
versionAssets.push(asset.replace("%2B", "+"))
|
||||
}
|
||||
|
||||
if (versionAssets.length !== 0) {
|
||||
// sort the names and update the assets
|
||||
assets[version] = versionAssets.sort().reverse()
|
||||
}
|
||||
}))
|
||||
|
||||
return assets
|
||||
}
|
|
@ -0,0 +1,149 @@
|
|||
import { readFile } from "fs/promises"
|
||||
|
||||
/**
|
||||
* The list of assets
|
||||
* @key tag The tag of the release
|
||||
* @value assets The names of the assets of the release
|
||||
*/
|
||||
export type Assets = Record<string, string[] | undefined>
|
||||
|
||||
/**
|
||||
* Load the list of assets from a json file
|
||||
*/
|
||||
export async function loadAssetList(path: string): Promise<Assets> {
|
||||
const data = await readFile(path, "utf-8")
|
||||
return JSON.parse(data)
|
||||
}
|
||||
|
||||
type MatchAssetOpts = {
|
||||
version: string
|
||||
keywords?: string[]
|
||||
optionalKeywords?: string[]
|
||||
filterMapTag?: (tag: string) => string | undefined
|
||||
filterName?: (asset: string) => boolean
|
||||
}
|
||||
|
||||
/**
|
||||
* Match the asset that matches the version and given keywords
|
||||
*/
|
||||
export function matchAsset(
|
||||
assets: Assets,
|
||||
opts: MatchAssetOpts,
|
||||
): { tag: string; name: string } | undefined {
|
||||
// get the list of versions
|
||||
const origTags = Object.keys(assets)
|
||||
|
||||
// filter/map the tags
|
||||
const versionMap: Map<string, string> = new Map()
|
||||
if (opts.filterMapTag === undefined) {
|
||||
for (const origTag of origTags) {
|
||||
versionMap.set(origTag, origTag)
|
||||
}
|
||||
} else {
|
||||
for (const origTag of origTags) {
|
||||
const mappedTag = opts.filterMapTag(origTag)
|
||||
if (mappedTag !== undefined) {
|
||||
versionMap.set(mappedTag, origTag)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (versionMap.size === 0) {
|
||||
return undefined
|
||||
}
|
||||
|
||||
// find the first tag that starts with the version
|
||||
// loop over the versions starting with the latest
|
||||
const candidateTags: string[] = []
|
||||
for (const [version, origTag] of versionMap.entries()) {
|
||||
if (version.startsWith(opts.version)) {
|
||||
candidateTags.push(origTag)
|
||||
}
|
||||
}
|
||||
|
||||
if (candidateTags.length === 0) {
|
||||
return undefined
|
||||
}
|
||||
|
||||
// Loop over the candidate tags and return the first one that has assets
|
||||
for (const candidateTag of candidateTags) {
|
||||
// get the list of assets
|
||||
let assetNames = assets[candidateTag]
|
||||
if (assetNames === undefined) {
|
||||
continue
|
||||
}
|
||||
|
||||
// filter the assets
|
||||
if (opts.filterName !== undefined) {
|
||||
assetNames = assetNames.filter(opts.filterName)
|
||||
}
|
||||
|
||||
if (assetNames.length === 0) {
|
||||
continue
|
||||
}
|
||||
|
||||
// check if this version contains the keywords and optional keywords in the asset name
|
||||
const match = matchAssetName(candidateTag, assetNames, opts)
|
||||
if (match !== undefined) {
|
||||
return match
|
||||
}
|
||||
}
|
||||
|
||||
return undefined
|
||||
}
|
||||
|
||||
function matchAssetName(tag: string, assetNames: string[], opts: MatchAssetOpts) {
|
||||
// if no keywords are given, return the first asset
|
||||
if (
|
||||
(opts.keywords === undefined
|
||||
|| opts.keywords.length === 0)
|
||||
&& (opts.optionalKeywords === undefined
|
||||
|| opts.optionalKeywords.length === 0)
|
||||
) {
|
||||
return { tag, name: assetNames[0] }
|
||||
}
|
||||
|
||||
// check if the asset contains all the keywords
|
||||
let candidates: string[] = []
|
||||
if (
|
||||
opts.keywords !== undefined
|
||||
&& opts.keywords.length !== 0
|
||||
) {
|
||||
for (const name of assetNames) {
|
||||
if (opts.keywords!.every((keyword) => name.includes(keyword))) {
|
||||
candidates.push(name)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
candidates = assetNames
|
||||
}
|
||||
|
||||
if (candidates.length === 0) {
|
||||
return undefined
|
||||
}
|
||||
|
||||
// prefer the candidates that contain more optional keywords
|
||||
if (
|
||||
opts.optionalKeywords !== undefined
|
||||
&& opts.optionalKeywords.length !== 0
|
||||
) {
|
||||
// rate the candidates based on the number of optional keywords they contain
|
||||
const candidateScores = candidates.map((name) => {
|
||||
let score = 0
|
||||
for (const keyword of opts.optionalKeywords!) {
|
||||
if (name.includes(keyword)) {
|
||||
score++
|
||||
}
|
||||
}
|
||||
return score
|
||||
})
|
||||
|
||||
// find the candidate with the highest score
|
||||
const maxScore = Math.max(...candidateScores)
|
||||
const maxIndex = candidateScores.indexOf(maxScore)
|
||||
return { tag, name: candidates[maxIndex] }
|
||||
}
|
||||
|
||||
// return the first candidate if no optional keywords are given
|
||||
return { tag, name: candidates[0] }
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
export const x86_64 = ["x64", "amd64", "x86_64", "win64", "64"]
|
||||
export const x86 = ["x86", "i386", "ia32", "win32", "32", "x32"]
|
||||
export const arm64 = ["aarch64", "arm64", "woa64", "arm"]
|
||||
export const armv7 = ["armv7", "armv7a"]
|
||||
export const powerpc64le = ["powerpc64le", "ppc64le"]
|
||||
export const sparc64 = ["sparc64"]
|
|
@ -42,12 +42,17 @@ function detectUsingOsVersion() {
|
|||
return null
|
||||
}
|
||||
|
||||
// #46~22.04.1-Ubuntu SMP ...
|
||||
// #40~22.04.3-Ubuntu SMP PREEMPT_DYNAMIC Tue Jul 30 17:30:19 UTC 2
|
||||
const osVersion: string = os.version()
|
||||
const versionSplitted = osVersion.split(".")
|
||||
const majorVersion = Number.parseInt(versionSplitted[0].replace("#", ""), 10)
|
||||
const minorVersion = Number.parseInt(versionSplitted[1].replace("~", ""), 10)
|
||||
const patchVersion = Number.parseInt(versionSplitted[2].split("-")[0], 10)
|
||||
// parse the version
|
||||
const versionMatch = osVersion.match(/(\d+)\.(\d+)\.(\d+)/)
|
||||
if (versionMatch === null) {
|
||||
return null
|
||||
}
|
||||
|
||||
const majorVersion = Number.parseInt(versionMatch[1], 10)
|
||||
const minorVersion = Number.parseInt(versionMatch[2], 10)
|
||||
const patchVersion = Number.parseInt(versionMatch[3], 10)
|
||||
|
||||
return [majorVersion, minorVersion, patchVersion]
|
||||
}
|
||||
|
|
|
@ -1,80 +0,0 @@
|
|||
import { readFile } from "fs/promises"
|
||||
|
||||
/**
|
||||
* The list of assets of a GitHub release
|
||||
* @key tag The tag of the release
|
||||
* @value assets The names of the assets of the release
|
||||
*/
|
||||
export type Assets = Record<string, string[]>
|
||||
|
||||
export async function loadGitHubAssetList(path: string): Promise<Assets> {
|
||||
const data = await readFile(path, "utf-8")
|
||||
return JSON.parse(data)
|
||||
}
|
||||
|
||||
type MatchAssetOpts = {
|
||||
version: string
|
||||
arch?: string
|
||||
filterTag?: (version: string) => boolean
|
||||
filterName?: (asset: string) => boolean
|
||||
}
|
||||
|
||||
/**
|
||||
* Match the asset that matches the version and arch
|
||||
*/
|
||||
export function matchAsset(
|
||||
assets: Assets,
|
||||
opts: MatchAssetOpts,
|
||||
): { tag: string; name: string } {
|
||||
// get the list of versions
|
||||
let tags = Object.keys(assets)
|
||||
|
||||
// filter the versions
|
||||
if (opts.filterTag !== undefined) {
|
||||
tags = tags.filter(opts.filterTag)
|
||||
}
|
||||
|
||||
if (tags.length === 0) {
|
||||
throw new Error(`no tag found for version ${opts.version}`)
|
||||
}
|
||||
|
||||
// find the first tag that starts with the version
|
||||
// loop over the versions starting with the latest
|
||||
let tag: string | undefined
|
||||
for (const mingwVersion of tags) {
|
||||
if (mingwVersion.startsWith(opts.version)) {
|
||||
tag = mingwVersion
|
||||
break
|
||||
}
|
||||
}
|
||||
if (tag === undefined) {
|
||||
throw new Error(`version ${opts.version} is not supported`)
|
||||
}
|
||||
|
||||
// get the list of assets
|
||||
let matchedNames = assets[tag]
|
||||
|
||||
// filter the assets
|
||||
if (opts.filterName !== undefined) {
|
||||
matchedNames = matchedNames.filter(opts.filterName)
|
||||
}
|
||||
|
||||
if (matchedNames.length === 0) {
|
||||
throw new Error(`no asset found for version ${opts.version} and arch ${opts.arch}`)
|
||||
}
|
||||
|
||||
// use the first asset if the arch is not specified
|
||||
if (opts.arch === undefined) {
|
||||
return { tag, name: matchedNames[0] }
|
||||
}
|
||||
|
||||
// find the asset that matches the arch
|
||||
for (const name of matchedNames) {
|
||||
// search each asset name for the arch
|
||||
if (name.includes(opts.arch)) {
|
||||
return { tag, name }
|
||||
}
|
||||
}
|
||||
|
||||
throw new Error(`arch ${opts.arch} could not be found among ${JSON.stringify(matchedNames)}`)
|
||||
}
|
|
@ -92,7 +92,7 @@ export function extractExe(file: string, dest: string) {
|
|||
export async function extractZip(file: string, dest: string) {
|
||||
// if unzip is available use it
|
||||
if (which.sync("unzip", { nothrow: true }) !== null) {
|
||||
await execa("unzip", [file, "-d", dest], { stdio: "inherit" })
|
||||
await execa("unzip", ["-q", file, "-d", dest], { stdio: "inherit" })
|
||||
await grantUserWriteAccess(dest)
|
||||
return dest
|
||||
}
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
import { execRootSync } from "admina"
|
||||
import { tmpdir } from "os"
|
||||
import { join } from "path"
|
||||
import { execRootSync, isRoot } from "admina"
|
||||
import { info, warning } from "ci-log"
|
||||
import { execa, execaSync } from "execa"
|
||||
import which from "which"
|
||||
|
@ -14,9 +16,8 @@ export async function setupPacmanPack(name: string, version?: string, aur?: stri
|
|||
|
||||
const pacman = "pacman"
|
||||
|
||||
if (aur === "yay" && which.sync("yay", { nothrow: true }) === null) {
|
||||
// TODO: install yay automatically
|
||||
throw new Error(`yay is needed for ${name}, but it is not installed, please install it manually first`)
|
||||
if (aur === "yay") {
|
||||
setupYay()
|
||||
}
|
||||
|
||||
// yay can't run as root, so skip update
|
||||
|
@ -33,9 +34,14 @@ export async function setupPacmanPack(name: string, version?: string, aur?: stri
|
|||
|
||||
const runInstall = (arg: string) => {
|
||||
if (aur === "yay") {
|
||||
// run yay as non-root, ERROR: Running makepkg as root is not allowed as it can cause permanent, catastrophic damage to your system.
|
||||
// run yay as non-root to fix ERROR: Running makepkg as root is not allowed as it can cause permanent, catastrophic damage to your system.
|
||||
if (isRoot() && createdBuilderUser) {
|
||||
// Run yay as builder user
|
||||
return execRootSync("su", ["-", "builder", "-c", `yay -S --noconfirm ${arg}`])
|
||||
} else {
|
||||
return execaSync(aur, ["-S", "--noconfirm", arg])
|
||||
}
|
||||
}
|
||||
return execRootSync(aur ?? pacman, ["-S", "--noconfirm", arg])
|
||||
}
|
||||
|
||||
|
@ -78,3 +84,54 @@ async function availablePacmanVersions(pacman: string, name: string) {
|
|||
}
|
||||
return availableVersions
|
||||
}
|
||||
|
||||
let createdBuilderUser = false
|
||||
|
||||
function setupYay() {
|
||||
if (which.sync("yay", { nothrow: true }) === null) {
|
||||
try {
|
||||
// Install prerequisites
|
||||
execRootSync("pacman", ["-S", "--noconfirm", "base-devel", "git"])
|
||||
|
||||
const yayBuildDir = join(tmpdir(), "yay")
|
||||
|
||||
execRootSync("mkdir", ["-p", yayBuildDir])
|
||||
|
||||
if (isRoot()) {
|
||||
// Create a non-root user to build yay
|
||||
warning("Creating a non-root user to build yay")
|
||||
execRootSync("useradd", ["-m", "-G", "wheel", "builder"])
|
||||
execRootSync("passwd", ["-d", "builder"])
|
||||
execRootSync("chown", ["-R", "builder:builder", yayBuildDir])
|
||||
execRootSync("bash", ["-c", `echo "builder ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers`])
|
||||
createdBuilderUser = true
|
||||
|
||||
// Clone the yay repository into a temporary directory
|
||||
execaSync("su", ["-", "builder", "-c", `git clone https://aur.archlinux.org/yay.git ${yayBuildDir}`], {
|
||||
stdio: "inherit",
|
||||
})
|
||||
|
||||
execaSync("su", ["-", "builder", "-c", `cd ${yayBuildDir} && makepkg -si --noconfirm`], {
|
||||
stdio: "inherit",
|
||||
})
|
||||
} else {
|
||||
// Clone the yay repository into a temporary directory
|
||||
execaSync("git", ["clone", "https://aur.archlinux.org/yay.git", yayBuildDir], {
|
||||
stdio: "inherit",
|
||||
cwd: tmpdir(),
|
||||
})
|
||||
|
||||
// Build and install yay
|
||||
execaSync("makepkg", ["-si", "--noconfirm"], {
|
||||
stdio: "inherit",
|
||||
cwd: yayBuildDir,
|
||||
})
|
||||
}
|
||||
|
||||
// clean-up
|
||||
execaSync("rm", ["-rf", yayBuildDir], { stdio: "inherit" })
|
||||
} catch (error) {
|
||||
throw new Error(`Failed to install yay: ${error}. Install yay manually and re-run the script.`)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -7,6 +7,7 @@ import { mkdirp } from "mkdirp"
|
|||
import { pathExists } from "path-exists"
|
||||
import { addExeExt } from "patha"
|
||||
import { installAptPack } from "setup-apt"
|
||||
import { installBrewPack } from "setup-brew"
|
||||
import { untildifyUser } from "untildify-user"
|
||||
import which from "which"
|
||||
import { rcOptions } from "../../cli-options.js"
|
||||
|
@ -186,6 +187,8 @@ export function setupPipPackSystem(name: string, addPythonPrefix = true) {
|
|||
} else if (isUbuntu()) {
|
||||
return installAptPack([{ name: addPythonPrefix ? `python3-${name}` : name }])
|
||||
}
|
||||
} else if (process.platform === "darwin") {
|
||||
return installBrewPack(name)
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
|
|
@ -1,27 +1,18 @@
|
|||
import { isArch } from "../utils/env/isArch.js"
|
||||
|
||||
// passing "" to a tool installed by a package manager (apt, brew, choco) will result in the default version of that package manager.
|
||||
// the directly downloaded tools require a given version ("" doesn't work).
|
||||
|
||||
function getLLVMDefault() {
|
||||
switch (process.platform) {
|
||||
case "win32":
|
||||
return "17.0.6"
|
||||
case "linux":
|
||||
// used for non-ubuntu (Fedora, Arch)
|
||||
// the suffixes relate to the suffix in the llvm releases
|
||||
return "17.0.6-ubuntu-22.04"
|
||||
case "darwin":
|
||||
return "15.0.3"
|
||||
default:
|
||||
return "17.0.6"
|
||||
}
|
||||
}
|
||||
const defaultLLVM = process.platform === "darwin" && process.arch === "x64"
|
||||
? "15.0.7"
|
||||
: "18.1.8"
|
||||
|
||||
/**
|
||||
* Default versions for the tools
|
||||
* DefaultUbuntuVersion overrides the default version for the tools on Ubuntu
|
||||
*/
|
||||
export const DefaultVersions: Record<string, string | undefined> = {
|
||||
llvm: getLLVMDefault(), // https://github.com/llvm/llvm-project/releases
|
||||
clangtidy: getLLVMDefault(),
|
||||
clangformat: getLLVMDefault(),
|
||||
// https://github.com/llvm/llvm-project/releases
|
||||
llvm: defaultLLVM,
|
||||
clangtidy: defaultLLVM,
|
||||
clangformat: defaultLLVM,
|
||||
ninja: "1.12.1", // https://github.com/ninja-build/ninja/releases
|
||||
cmake: "3.30.2", // https://github.com/Kitware/CMake/releases
|
||||
gcovr: "5.2", // "6.0", // https://pypi.org/project/gcovr/
|
||||
|
@ -34,7 +25,7 @@ export const DefaultVersions: Record<string, string | undefined> = {
|
|||
? "14.2.0posix-18.1.8-12.0.0-ucrt-r1"
|
||||
: "", // use the default version on Ubuntu, Fedora, Arch, macOS, etc.
|
||||
// mingw: isArch() ? "12.2.0-1" : "8", // https://archlinux.org/packages/extra/x86_64/mingw-w64-gcc/
|
||||
powershell: "7.4.5", // https://github.com/PowerShell/PowerShell/releases/tag/v7.4.5
|
||||
powershell: "7.4.5",
|
||||
}
|
||||
|
||||
export const MinVersions: Record<string, string | undefined> = {
|
||||
|
@ -45,38 +36,13 @@ export const MinVersions: Record<string, string | undefined> = {
|
|||
/// If an ubuntu versions is not in this map:
|
||||
// - the newer ubuntu versions use the first entry (e.g. v20),
|
||||
// - the older ones use ""
|
||||
export const DefaultLinuxVersion: Record<string, Record<number, string> | undefined> = {
|
||||
export const DefaultUbuntuVersion: Record<string, Record<number, string> | undefined> = {
|
||||
// https://packages.ubuntu.com/search?suite=all&arch=any&searchon=names&keywords=mingw-w64
|
||||
mingw: {
|
||||
24: "8.0.0-1",
|
||||
22: "8.0.0-1",
|
||||
20: "7.0.0-2",
|
||||
},
|
||||
// the suffixes relate to the suffix in the llvm releases
|
||||
llvm: {
|
||||
24: "17.0.6-ubuntu-22.04",
|
||||
22: "17.0.6-ubuntu-22.04",
|
||||
20: "17.0.6-ubuntu-22.04",
|
||||
18: "15.0.6-ubuntu-18.04",
|
||||
16: "15.0.6-ubuntu-18.04",
|
||||
14: "13.0.0-ubuntu-16.04",
|
||||
},
|
||||
clangtidy: {
|
||||
24: "17.0.6-ubuntu-22.04",
|
||||
22: "17.0.6-ubuntu-22.04",
|
||||
20: "17.0.6-ubuntu-22.04",
|
||||
18: "15.0.6-ubuntu-18.04",
|
||||
16: "15.0.6-ubuntu-18.04",
|
||||
14: "13.0.0-ubuntu-16.04",
|
||||
},
|
||||
clangformat: {
|
||||
24: "17.0.6-ubuntu-22.04",
|
||||
22: "17.0.6-ubuntu-22.04",
|
||||
20: "17.0.6-ubuntu-22.04",
|
||||
18: "15.0.6-ubuntu-18.04",
|
||||
16: "15.0.6-ubuntu-18.04",
|
||||
14: "13.0.0-ubuntu-16.04",
|
||||
},
|
||||
gcovr: {
|
||||
24: "6.0",
|
||||
22: "6.0",
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
import type { Opts } from "../cli-options.js"
|
||||
import type { Inputs } from "../tool.js"
|
||||
import { DefaultLinuxVersion, DefaultVersions } from "./default_versions.js"
|
||||
import { DefaultUbuntuVersion, DefaultVersions } from "./default_versions.js"
|
||||
|
||||
/** Get the default version if passed true or undefined, otherwise return the version itself */
|
||||
export function getVersion(name: string, version: string | undefined, osVersion: number[] | null = null) {
|
||||
if (isVersionDefault(version) && process.platform === "linux" && osVersion !== null && name in DefaultLinuxVersion) {
|
||||
return getDefaultLinuxVersion(osVersion, DefaultLinuxVersion[name]!)
|
||||
if (isVersionDefault(version) && process.platform === "linux" && osVersion !== null && name in DefaultUbuntuVersion) {
|
||||
return getDefaultLinuxVersion(osVersion, DefaultUbuntuVersion[name]!)
|
||||
} else if (isVersionDefault(version) && name in DefaultVersions) {
|
||||
return DefaultVersions[name] ?? ""
|
||||
} else if (version === "true") {
|
||||
|
|
Loading…
Reference in New Issue