diff --git a/README.md b/README.md index e8449e64..05026d1b 100644 --- a/README.md +++ b/README.md @@ -72,6 +72,7 @@ Options: Default is "prod,optional" -p, --parallel Rebuild in parallel, this is enabled by default on macOS and Linux + -j, --jobs Run make in parallel. The value max will use all available CPU cores. Defaults to 1. -s, --sequential Rebuild modules sequentially, this is enabled by default on Windows -o, --only Only build specified module, or comma separated diff --git a/src/cli.ts b/src/cli.ts index caf8ea75..75c0c5a2 100644 --- a/src/cli.ts +++ b/src/cli.ts @@ -26,6 +26,7 @@ const argv = yargs(process.argv.slice(2)).version(false).options({ types: { alias: 't', type: 'string', description: 'The types of dependencies to rebuild. Comma separated list of "prod", "dev" and "optional". Default is "prod,optional"' }, parallel: { alias: 'p', type: 'boolean', description: 'Rebuild in parallel, this is enabled by default on macOS and Linux' }, sequential: { alias: 's', type: 'boolean', description: 'Rebuild modules sequentially, this is enabled by default on Windows' }, + jobs: {alias: 'j', type: 'string', description: 'Run make in parallel. The value max will use all available CPU cores. Defaults to 1.'}, debug: { alias: 'b', type: 'boolean', description: 'Build debug version of modules' }, 'prebuild-tag-prefix': { type: 'string', description: 'GitHub tag prefix passed to prebuild-install. Default is "v"' }, 'force-abi': { type: 'number', description: 'Override the ABI version for the version of Electron you are targeting. Only use when targeting Nightly releases.' }, @@ -122,6 +123,7 @@ process.on('unhandledRejection', handler); headerURL: argv.d as string, types: argv.t ? (argv.t as string).split(',') as ModuleType[] : ['prod', 'optional'], mode: argv.p ? 'parallel' : (argv.s ? 'sequential' : undefined), + jobs: argv.jobs as string, debug: argv.debug, prebuildTagPrefix: (argv.prebuildTagPrefix as string) || 'v', forceABI: argv.forceAbi as number, diff --git a/src/module-type/node-gyp/node-gyp.ts b/src/module-type/node-gyp/node-gyp.ts index a7c60737..1a3998c6 100644 --- a/src/module-type/node-gyp/node-gyp.ts +++ b/src/module-type/node-gyp/node-gyp.ts @@ -21,7 +21,8 @@ export class NodeGyp extends NativeModule { `--target=${this.rebuilder.electronVersion}`, `--arch=${this.rebuilder.arch}`, `--dist-url=${this.rebuilder.headerURL}`, - '--build-from-source' + '--build-from-source', + `--jobs=${this.rebuilder.jobs}`, ]; args.push(d.enabled ? '--verbose' : '--silent'); diff --git a/src/rebuild.ts b/src/rebuild.ts index 4d0dc179..f1da7cae 100644 --- a/src/rebuild.ts +++ b/src/rebuild.ts @@ -20,6 +20,7 @@ export interface RebuildOptions { headerURL?: string; types?: ModuleType[]; mode?: RebuildMode; + jobs?: string; debug?: boolean; useCache?: boolean; useElectronClang?: boolean; @@ -54,6 +55,7 @@ export class Rebuilder implements IRebuilder { public force: boolean; public headerURL: string; public mode: RebuildMode; + public jobs: string; public debug: boolean; public useCache: boolean; public cachePath: string; @@ -71,6 +73,7 @@ export class Rebuilder implements IRebuilder { this.force = options.force || false; this.headerURL = options.headerURL || 'https://www.electronjs.org/headers'; this.mode = options.mode || defaultMode; + this.jobs = options.jobs || '1'; this.debug = options.debug || false; this.useCache = options.useCache || false; this.useElectronClang = options.useElectronClang || false; diff --git a/src/types.ts b/src/types.ts index 393fee3d..19846b7a 100644 --- a/src/types.ts +++ b/src/types.ts @@ -20,6 +20,7 @@ export interface IRebuilder { headerURL: string; lifecycle: EventEmitter; mode: RebuildMode; + jobs: string; msvsVersion?: string; platform: string; prebuildTagPrefix: string;