@@ -47,6 +47,14 @@ class BuildConfig {
4747 Uri ? get ar => _ar;
4848 late final Uri ? _ar;
4949
50+ /// Path to script that sets environment variables for [cc] , [ld] , and [ar] .
51+ Uri ? get toolchainEnvScript => _toolchainEnvScript;
52+ late final Uri ? _toolchainEnvScript;
53+
54+ /// Arguments for [toolchainEnvScript] .
55+ List <String >? get toolchainEnvScriptArgs => _toolchainEnvScriptArgs;
56+ late final List <String >? _toolchainEnvScriptArgs;
57+
5058 /// Preferred packaging method for library.
5159 PackagingPreference get packaging => _packaging;
5260 late final PackagingPreference _packaging;
@@ -73,6 +81,8 @@ class BuildConfig {
7381 Uri ? ar,
7482 Uri ? cc,
7583 Uri ? ld,
84+ Uri ? toolchainEnvScript,
85+ List <String >? toolchainEnvScriptArgs,
7686 required PackagingPreference packaging,
7787 Map <String , Metadata >? dependencyMetadata,
7888 }) {
@@ -84,6 +94,8 @@ class BuildConfig {
8494 .._ar = ar
8595 .._cc = cc
8696 .._ld = ld
97+ .._toolchainEnvScript = toolchainEnvScript
98+ .._toolchainEnvScriptArgs = toolchainEnvScriptArgs
8799 .._packaging = packaging
88100 .._dependencyMetadata = dependencyMetadata;
89101 final parsedConfigFile = nonValidated.toYaml ();
@@ -143,10 +155,14 @@ class BuildConfig {
143155 static const arConfigKey = 'ar' ;
144156 static const ccConfigKey = 'cc' ;
145157 static const ldConfigKey = 'ld' ;
158+ static const toolchainEnvScriptConfigKey = 'toolchain_env_script' ;
159+ static const toolchainEnvScriptArgsConfigKey =
160+ 'toolchain_env_script_arguments' ;
146161 static const dependencyMetadataConfigKey = 'dependency_metadata' ;
147162
148163 List <void Function (Config )> _readFieldsFromConfig () {
149164 var targetSet = false ;
165+ var ccSet = false ;
150166 return [
151167 (config) => _config = config,
152168 (config) => _outDir = config.path (outDirConfigKey),
@@ -169,8 +185,19 @@ class BuildConfig {
169185 )
170186 : null ,
171187 (config) => _ar = config.optionalPath (arConfigKey, mustExist: true ),
172- (config) => _cc = config.optionalPath (ccConfigKey, mustExist: true ),
188+ (config) {
189+ _cc = config.optionalPath (ccConfigKey, mustExist: true );
190+ ccSet = true ;
191+ },
173192 (config) => _ld = config.optionalPath (ldConfigKey, mustExist: true ),
193+ (config) => _toolchainEnvScript =
194+ (ccSet && cc != null && cc! .toFilePath ().endsWith ('cl.exe' ))
195+ ? config.path (toolchainEnvScriptConfigKey, mustExist: true )
196+ : null ,
197+ (config) => _toolchainEnvScriptArgs = config.optionalStringList (
198+ toolchainEnvScriptArgsConfigKey,
199+ splitEnvironmentPattern: ' ' ,
200+ ),
174201 (config) => _packaging = PackagingPreference .fromString (
175202 config.string (
176203 PackagingPreference .configKey,
@@ -218,6 +245,10 @@ class BuildConfig {
218245 if (_ar != null ) arConfigKey: _ar! .toFilePath (),
219246 if (_cc != null ) ccConfigKey: _cc! .toFilePath (),
220247 if (_ld != null ) ldConfigKey: _ld! .toFilePath (),
248+ if (_toolchainEnvScript != null )
249+ toolchainEnvScriptConfigKey: _toolchainEnvScript! .toFilePath (),
250+ if (_toolchainEnvScriptArgs != null )
251+ toolchainEnvScriptArgsConfigKey: _toolchainEnvScriptArgs! ,
221252 PackagingPreference .configKey: _packaging.toString (),
222253 if (_dependencyMetadata != null )
223254 dependencyMetadataConfigKey: {
@@ -240,6 +271,9 @@ class BuildConfig {
240271 if (other._ar != _ar) return false ;
241272 if (other._cc != _cc) return false ;
242273 if (other._ld != _ld) return false ;
274+ if (other.toolchainEnvScript != toolchainEnvScript) return false ;
275+ if (! ListEquality <String >().equals (
276+ other.toolchainEnvScriptArgs, toolchainEnvScriptArgs)) return false ;
243277 if (other._packaging != _packaging) return false ;
244278 if (! DeepCollectionEquality ()
245279 .equals (other._dependencyMetadata, _dependencyMetadata)) return false ;
@@ -255,6 +289,8 @@ class BuildConfig {
255289 _ar,
256290 _cc,
257291 _ld,
292+ _toolchainEnvScript,
293+ ListEquality <String >().hash (toolchainEnvScriptArgs),
258294 _packaging,
259295 DeepCollectionEquality ().hash (_dependencyMetadata),
260296 );
0 commit comments