chromium: refactor out configure library

This commit is contained in:
2024-09-11 20:13:59 +08:00
parent 2b34c4774c
commit b3c9f7a0ff

View File

@@ -3,21 +3,24 @@
*/
import { spawn } from 'child_process';
import * as crypto from 'crypto';
import * as fs from "fs";
import path from 'path';
import { promisifySpawn } from '../cli.js';
import * as gn from '../commands/gn.js';
import { systemdRunOptions } from '../commands/systemd.js';
import { lycEnv, projectRoot } from '../environment/index.js';
import { projectRoot } from '../environment/index.js';
import { chromiumSource } from '../chromium.js';
import { undefList } from '../commands/common.js';
export const chromiumSource = '/home/lyc/swchromium-102.0.5005.115';
export interface GNArgs {
clangBasePath: string;
symbolLevel?: 0 | 1 | 2;
};
/**
* Arguments to GN build, copied from README.
*
* Generate gn args from chromium's GNOptions.
* Some default args are copied from README
*/
export const gnArgs = (llvmInstall: string) => [
function gnArgsToList(o: GNArgs) {
return [
'is_clang=true',
'clang_use_chrome_plugins=false',
'is_debug=false',
@@ -60,40 +63,23 @@ export const gnArgs = (llvmInstall: string) => [
'rtc_include_dav1d_in_internal_decoder_factory=false',
'dcheck_always_on=false',
'enable_libaom=false',
`clang_base_path="${llvmInstall}"`
`clang_base_path="${o.clangBasePath}"`,
...undefList(o.symbolLevel, x => `symbol_level=${x}`),
];
}
/**
* Invoke meta-build system "gn", returns the process.
*/
export function configure(source: string, gnExe: string, outDir: string, gnArgs: string[]) {
export function configure(source: string, gnExe: string, outDir: string, gnArgs: GNArgs) {
return spawn(gnExe, [
'gen',
outDir,
...gn.generalOptions({ args: gnArgs }),
...gn.generalOptions({ args: gnArgsToList(gnArgs) }),
], { cwd: source });
}
const gnExe = path.resolve(chromiumSource, 'buildtools', 'linux64', 'gn-linux-sw64');
async function configureNoSIMD() {
const hash = '7081b8371ae6460baabc370de4570ebd7e67f923';
const outDir = path.resolve(chromiumSource, 'out', 'Release');
await promisifySpawn(configure(chromiumSource, gnExe, outDir, gnArgs(path.resolve(lycEnv.sharedLLVMInstall, hash))));
}
interface ConfigureOptions {
buildDir: string;
gnArgs: string[];
}
async function enableSIMDFromSource() {
export async function enableSIMDFromSource() {
const assets = path.resolve(projectRoot, 'assets');
@@ -102,35 +88,3 @@ async function enableSIMDFromSource() {
await fs.promises.copyFile(chromiumSIMDGN, chromiumBuildGN);
}
await invokeNinja();
async function invokeNinja() {
const hash = 'c9094783eb43868cdbcf26b3266b0231d8fbd6e6';
const uuid = crypto.randomUUID();
const buildDir = path.resolve(chromiumSource, 'out', hash, 'Release');
await enableSIMDFromSource();
const configureProcess = configure(chromiumSource, gnExe, buildDir, gnArgs(`/tmp/llvm-ly-install/${hash}`));
configureProcess.stdout.pipe(process.stdout);
configureProcess.stderr.pipe(process.stderr);
await promisifySpawn(configureProcess);
const systemdUnitName = uuid;
console.log(`Running chromium build (hash: ${hash}) as ${systemdUnitName}`);
await promisifySpawn(spawn('systemd-run',
[
...systemdRunOptions({ user: true, unit: systemdUnitName }),
'ninja',
'-C',
buildDir,
'chrome'
]
))
}