From b3c9f7a0ff7434a5631cf03330e730d9d2b8b5cc Mon Sep 17 00:00:00 2001 From: Yingchi Long Date: Wed, 11 Sep 2024 20:13:59 +0800 Subject: [PATCH] chromium: refactor out configure library --- src/chromium/configure.ts | 166 ++++++++++++++------------------------ 1 file changed, 60 insertions(+), 106 deletions(-) diff --git a/src/chromium/configure.ts b/src/chromium/configure.ts index 7bddb71..f1044f3 100644 --- a/src/chromium/configure.ts +++ b/src/chromium/configure.ts @@ -3,97 +3,83 @@ */ 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) => [ - 'is_clang=true', - 'clang_use_chrome_plugins=false', - 'is_debug=false', - 'use_goma=false', - 'use_sysroot=false', - 'use_openh264=false', - 'use_allocator="none"', - 'use_libjpeg_turbo=true', - 'use_gnome_keyring=false', - 'use_unofficial_version_number=false', - 'enable_nacl=false', - 'enable_nacl_nonsfi=false', - 'enable_swiftshader=false', - 'enable_reading_list=false', - 'enable_iterator_debugging=false', - 'enable_hangout_services_extension=false', - 'optimize_webui=false', - 'treat_warnings_as_errors=false', - 'linux_use_bundled_binutils=false', - 'remove_webcore_debug_symbols=true', - 'use_gio=true', - 'use_vaapi=false', - 'use_pulseaudio=true', - 'link_pulseaudio=true', - 'enable_widevine=true', - 'v8_enable_backtrace=true', - 'use_system_zlib=true', - 'use_system_lcms2=true', - 'use_system_libjpeg=true', - 'use_system_harfbuzz=false', - 'use_jumbo_build=true', - 'jumbo_file_merge_limit=8', - 'concurrent_links=1', - 'proprietary_codecs=true', - 'ffmpeg_branding="Chrome"', - 'fieldtrial_testing_like_official_build=true', - 'host_cpu="sw_64"', - 'use_lld=false', - 'enable_dav1d_decoder=false', - 'rtc_include_dav1d_in_internal_decoder_factory=false', - 'dcheck_always_on=false', - 'enable_libaom=false', - `clang_base_path="${llvmInstall}"` -]; +function gnArgsToList(o: GNArgs) { + return [ + 'is_clang=true', + 'clang_use_chrome_plugins=false', + 'is_debug=false', + 'use_goma=false', + 'use_sysroot=false', + 'use_openh264=false', + 'use_allocator="none"', + 'use_libjpeg_turbo=true', + 'use_gnome_keyring=false', + 'use_unofficial_version_number=false', + 'enable_nacl=false', + 'enable_nacl_nonsfi=false', + 'enable_swiftshader=false', + 'enable_reading_list=false', + 'enable_iterator_debugging=false', + 'enable_hangout_services_extension=false', + 'optimize_webui=false', + 'treat_warnings_as_errors=false', + 'linux_use_bundled_binutils=false', + 'remove_webcore_debug_symbols=true', + 'use_gio=true', + 'use_vaapi=false', + 'use_pulseaudio=true', + 'link_pulseaudio=true', + 'enable_widevine=true', + 'v8_enable_backtrace=true', + 'use_system_zlib=true', + 'use_system_lcms2=true', + 'use_system_libjpeg=true', + 'use_system_harfbuzz=false', + 'use_jumbo_build=true', + 'jumbo_file_merge_limit=8', + 'concurrent_links=1', + 'proprietary_codecs=true', + 'ffmpeg_branding="Chrome"', + 'fieldtrial_testing_like_official_build=true', + 'host_cpu="sw_64"', + 'use_lld=false', + 'enable_dav1d_decoder=false', + 'rtc_include_dav1d_in_internal_decoder_factory=false', + 'dcheck_always_on=false', + 'enable_libaom=false', + `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'); @@ -101,36 +87,4 @@ async function enableSIMDFromSource() { const chromiumBuildGN = path.resolve(chromiumSource, 'build', 'config', 'compiler', 'BUILD.gn'); 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' - ] - )) } \ No newline at end of file