Merge pull request #223 from tchaikov/llvm-60 [skip ci]

fix: use higher priority when installing llvm alternatives
This commit is contained in:
Amin Yahyaabadi 2024-01-22 01:19:06 -08:00 committed by GitHub
commit d5a5fcb4a9
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 20 additions and 18 deletions

View File

@ -78,7 +78,7 @@ function getGccPackageInfo(version: string, platform: NodeJS.Platform, arch: str
} }
// eslint-disable-next-line @typescript-eslint/no-unused-vars // eslint-disable-next-line @typescript-eslint/no-unused-vars
export async function setupGcc(version: string, setupDir: string, arch: string) { export async function setupGcc(version: string, setupDir: string, arch: string, priority: number = 40) {
let installationInfo: InstallationInfo | undefined let installationInfo: InstallationInfo | undefined
switch (process.platform) { switch (process.platform) {
case "win32": { case "win32": {
@ -139,7 +139,7 @@ export async function setupGcc(version: string, setupDir: string, arch: string)
} }
} }
if (installationInfo !== undefined) { if (installationInfo !== undefined) {
await activateGcc(version, installationInfo.binDir) await activateGcc(version, installationInfo.binDir, priority)
return installationInfo return installationInfo
} }
return undefined return undefined
@ -199,7 +199,7 @@ async function setupChocoMingw(version: string, arch: string): Promise<Installat
return undefined return undefined
} }
async function activateGcc(version: string, binDir: string) { async function activateGcc(version: string, binDir: string, priority: number = 40) {
const promises: Promise<void | ExecaReturnValue<string>>[] = [] const promises: Promise<void | ExecaReturnValue<string>>[] = []
// Setup gcc as the compiler // Setup gcc as the compiler
@ -223,10 +223,10 @@ async function activateGcc(version: string, binDir: string) {
if (isUbuntu()) { if (isUbuntu()) {
promises.push( promises.push(
updateAptAlternatives("cc", `${binDir}/gcc-${majorVersion}`), updateAptAlternatives("cc", `${binDir}/gcc-${majorVersion}`, priority),
updateAptAlternatives("cxx", `${binDir}/g++-${majorVersion}`), updateAptAlternatives("cxx", `${binDir}/g++-${majorVersion}`, priority),
updateAptAlternatives("gcc", `${binDir}/gcc-${majorVersion}`), updateAptAlternatives("gcc", `${binDir}/gcc-${majorVersion}`, priority),
updateAptAlternatives("g++", `${binDir}/g++-${majorVersion}`), updateAptAlternatives("g++", `${binDir}/g++-${majorVersion}`, priority),
) )
} }
} else { } else {
@ -234,10 +234,10 @@ async function activateGcc(version: string, binDir: string) {
if (isUbuntu()) { if (isUbuntu()) {
promises.push( promises.push(
updateAptAlternatives("cc", `${binDir}/gcc-${version}`), updateAptAlternatives("cc", `${binDir}/gcc-${version}`, priority),
updateAptAlternatives("cxx", `${binDir}/g++-${version}`), updateAptAlternatives("cxx", `${binDir}/g++-${version}`, priority),
updateAptAlternatives("gcc", `${binDir}/gcc-${version}`), updateAptAlternatives("gcc", `${binDir}/gcc-${version}`, priority),
updateAptAlternatives("g++", `${binDir}/g++-${version}`), updateAptAlternatives("g++", `${binDir}/g++-${version}`, priority),
) )
} }
} }

View File

@ -82,8 +82,9 @@ const llvmBinaryDeps = memoize(llvmBinaryDeps_raw, { isPromise: true })
async function setupLLVMDeps_raw(arch: string) { async function setupLLVMDeps_raw(arch: string) {
if (process.platform === "linux") { if (process.platform === "linux") {
// using llvm requires ld, an up to date libstdc++, etc. So, install gcc first // using llvm requires ld, an up to date libstdc++, etc. So, install gcc first,
await setupGcc(getVersion("gcc", undefined, await ubuntuVersion()), "", arch) // but with a lower priority than the one used by activateLLVM()
await setupGcc(getVersion("gcc", undefined, await ubuntuVersion()), "", arch, 40)
} }
} }
const setupLLVMDeps = memoize(setupLLVMDeps_raw, { isPromise: true }) const setupLLVMDeps = memoize(setupLLVMDeps_raw, { isPromise: true })
@ -125,9 +126,10 @@ export async function activateLLVM(directory: string) {
// } // }
if (isUbuntu()) { if (isUbuntu()) {
const priority = 60
actPromises.push( actPromises.push(
updateAptAlternatives("cc", `${directory}/bin/clang`), updateAptAlternatives("cc", `${directory}/bin/clang`, priority),
updateAptAlternatives("cxx", `${directory}/bin/clang++`), updateAptAlternatives("cxx", `${directory}/bin/clang++`, priority),
updateAptAlternatives("clang", `${directory}/bin/clang`), updateAptAlternatives("clang", `${directory}/bin/clang`),
updateAptAlternatives("clang++", `${directory}/bin/clang++`), updateAptAlternatives("clang++", `${directory}/bin/clang++`),
updateAptAlternatives("lld", `${directory}/bin/lld`), updateAptAlternatives("lld", `${directory}/bin/lld`),

View File

@ -219,14 +219,14 @@ export async function addAptKeyViaDownload(name: string, url: string) {
return fileName return fileName
} }
export async function updateAptAlternatives(name: string, path: string) { export async function updateAptAlternatives(name: string, path: string, priority: number = 40) {
if (GITHUB_ACTIONS) { if (GITHUB_ACTIONS) {
return execRoot("update-alternatives", ["--install", `/usr/bin/${name}`, name, path, "40"]) return execRoot("update-alternatives", ["--install", `/usr/bin/${name}`, name, path, priority.toString()])
} else { } else {
await setupCppInProfile() await setupCppInProfile()
return appendFile( return appendFile(
cpprc_path, cpprc_path,
`\nif [ $UID -eq 0 ]; then update-alternatives --install /usr/bin/${name} ${name} ${path} 40; fi\n`, `\nif [ $UID -eq 0 ]; then update-alternatives --install /usr/bin/${name} ${name} ${path} ${priority}; fi\n`,
) )
} }
} }