436a9631fc
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
40 lines
2.1 KiB
JavaScript
40 lines
2.1 KiB
JavaScript
import { spawn } from '@malept/cross-spawn-promise';
|
|
import crypto from 'node:crypto';
|
|
import debug from 'debug';
|
|
import fs from 'graceful-fs';
|
|
import path from 'node:path';
|
|
import { ELECTRON_GYP_DIR } from './constants.js';
|
|
import { fetch } from './fetcher.js';
|
|
import { promisifiedGracefulFs } from './promisifiedGracefulFs.js';
|
|
const d = debug('electron-rebuild');
|
|
const sysrootArchAliases = {
|
|
x64: 'amd64',
|
|
ia32: 'i386',
|
|
};
|
|
const SYSROOT_BASE_URL = 'https://dev-cdn.electronjs.org/linux-sysroots';
|
|
export async function downloadLinuxSysroot(electronVersion, targetArch) {
|
|
d('fetching sysroot for Electron:', electronVersion);
|
|
const sysrootDir = path.resolve(ELECTRON_GYP_DIR, `${electronVersion}-sysroot`);
|
|
if (fs.existsSync(path.resolve(sysrootDir, 'lib')))
|
|
return sysrootDir;
|
|
await fs.promises.mkdir(sysrootDir, { recursive: true });
|
|
const linuxArch = sysrootArchAliases[targetArch] || targetArch;
|
|
const electronSysroots = JSON.parse(await fetch(`https://raw.githubusercontent.com/electron/electron/v${electronVersion}/script/sysroots.json`, 'text'));
|
|
const { Sha1Sum: sha, Tarball: fileName } = electronSysroots[`sid_${linuxArch}`] || electronSysroots[`bullseye_${linuxArch}`];
|
|
const sysrootURL = `${SYSROOT_BASE_URL}/${sha}/${fileName}`;
|
|
const sysrootBuffer = await fetch(sysrootURL, 'buffer');
|
|
const actualSha = crypto.createHash('SHA1').update(sysrootBuffer).digest('hex');
|
|
d('expected sha:', sha);
|
|
d('actual sha:', actualSha);
|
|
if (sha !== actualSha)
|
|
throw new Error(`Attempted to download the linux sysroot for ${electronVersion} but the SHA checksum did not match`);
|
|
d('writing sysroot to disk');
|
|
const tmpTarFile = path.resolve(ELECTRON_GYP_DIR, `${electronVersion}-${fileName}`);
|
|
if (fs.existsSync(tmpTarFile))
|
|
await fs.promises.rm(tmpTarFile, { recursive: true, force: true });
|
|
await promisifiedGracefulFs.writeFile(tmpTarFile, sysrootBuffer);
|
|
d('decompressing sysroot');
|
|
await spawn('tar', ['-xf', tmpTarFile, '-C', sysrootDir], { stdio: 'ignore' });
|
|
return sysrootDir;
|
|
}
|
|
//# sourceMappingURL=sysroot-fetcher.js.map
|