diff --git a/evm-config.schema.json b/evm-config.schema.json index fb366a24..f72b5153 100644 --- a/evm-config.schema.json +++ b/evm-config.schema.json @@ -12,6 +12,12 @@ "type": "string", "default": "electron" }, + "preserveSDK": { + "description": "Preserve the N most recent Xcode SDK versions", + "type": "integer", + "default": 5, + "minimum": 1 + }, "execName": { "description": "Name of the built executable to run", "type": "string", diff --git a/example-configs/evm.base.yml b/example-configs/evm.base.yml index 696f823e..25220255 100644 --- a/example-configs/evm.base.yml +++ b/example-configs/evm.base.yml @@ -1,5 +1,6 @@ root: /path/to/your/developer/folder reclient: remote_exec +preserveSDK: 5 remotes: electron: # SSH or HTTPS url diff --git a/src/e-init.js b/src/e-init.js index 9ac6ff04..fcff185b 100644 --- a/src/e-init.js +++ b/src/e-init.js @@ -67,6 +67,7 @@ function createConfig(options) { args: gn_args, out: options.out, }, + preserveSDK: 5, env: { CHROMIUM_BUILDTOOLS_PATH: path.resolve(root, 'src', 'buildtools'), GIT_CACHE_PATH: process.env.GIT_CACHE_PATH @@ -167,15 +168,6 @@ program checkGlobalGitConfig(); } - // ensure xcode is loaded - if (process.platform === 'darwin') { - if (options.onlySdk) { - ensureSDK(); - } else { - loadXcode(); - } - } - // ensure macOS SDKs are loaded if (process.platform === 'darwin') { ensureSDK(); diff --git a/src/evm-config.js b/src/evm-config.js index 283dc85e..fef0b844 100644 --- a/src/evm-config.js +++ b/src/evm-config.js @@ -215,11 +215,21 @@ function sanitizeConfig(name, config, overwrite = false) { changes.push(`fixed invalid property ${color.config('reclient: none')}`); } - if ('preserveXcode' in config) { + if (config.preserveXcode) { delete config.preserveXcode; changes.push(`removed ${color.config('preserveXcode')} property`); } + if (config.onlySdk) { + delete config.onlySdk; + changes.push(`removed ${color.config('onlySdk')} property`); + } + + if (!('preserveSDK' in config)) { + config.preserveSDK = 5; + changes.push(`added ${color.config('preserveSDK')} property`); + } + if (config.goma) { delete config.goma; changes.push(`removed deprecated ${color.config('goma')} property`); diff --git a/src/utils/sdk.js b/src/utils/sdk.js index a719aadd..c0e3f400 100644 --- a/src/utils/sdk.js +++ b/src/utils/sdk.js @@ -58,6 +58,22 @@ function getSDKVersion() { return json.MinimalDisplayName; } +function removeUnusedSDKs() { + const recent = fs + .readdirSync(SDKDir) + .map(sdk => { + const sdkPath = path.join(SDKDir, sdk); + const { atime } = fs.statSync(sdkPath); + return { name: xcodePath, atime }; + }) + .sort((a, b) => b.atime - a.atime); + + const { preserveSDK } = evmConfig.current(); + for (const { name } of recent.slice(preserveSDK)) { + deleteDir(name); + } +} + // Extract the SDK version from the toolchain file and normalize it. function extractSDKVersion(toolchainFile) { if (!fs.existsSync(toolchainFile)) { @@ -227,6 +243,8 @@ function ensureSDK() { deleteDir(SDKZip); + removeUnusedSDKs(); + return eventualVersionedPath; }