@@ -9,6 +9,8 @@ import 'package:dartdev/src/sdk.dart';
99import 'package:dartdev/src/utils.dart' ;
1010import 'package:logging/logging.dart' ;
1111import 'package:native_assets_builder/native_assets_builder.dart' ;
12+ import 'package:native_assets_cli/code_assets_builder.dart' ;
13+ import 'package:native_assets_cli/data_assets_builder.dart' ;
1214import 'package:native_assets_cli/native_assets_cli_internal.dart' ;
1315
1416import 'core.dart' ;
@@ -17,7 +19,7 @@ import 'core.dart';
1719///
1820/// If provided, only native assets of all transitive dependencies of
1921/// [runPackageName] are built.
20- Future <( bool success, List <EncodedAsset > assets) > compileNativeAssetsJit ({
22+ Future <List <EncodedAsset >? > compileNativeAssetsJit ({
2123 required bool verbose,
2224 String ? runPackageName,
2325}) async {
@@ -32,10 +34,10 @@ Future<(bool success, List<EncodedAsset> assets)> compileNativeAssetsJit({
3234 // `getExecutableForCommand` later.
3335 final result = await Process .run (sdk.dart, ['pub' , 'get' ]);
3436 if (result.exitCode != 0 ) {
35- return ( true , < EncodedAsset > []) ;
37+ return null ;
3638 }
3739 } else {
38- return ( true , < EncodedAsset > []) ;
40+ return null ;
3941 }
4042 }
4143 final nativeAssetsBuildRunner = NativeAssetsBuildRunner (
@@ -46,17 +48,26 @@ Future<(bool success, List<EncodedAsset> assets)> compileNativeAssetsJit({
4648 final target = Target .current;
4749 final targetMacOSVersion =
4850 target.os == OS .macOS ? minimumSupportedMacOSVersion : null ;
51+ final cCompilerConfig = getCCompilerConfig ();
4952 final buildResult = await nativeAssetsBuildRunner.build (
53+ configCreator: () => BuildConfigBuilder ()
54+ ..setupCodeConfig (
55+ targetArchitecture: target.architecture,
56+ // When running in JIT mode, only dynamic libraries are supported.
57+ linkModePreference: LinkModePreference .dynamic ,
58+ targetMacOSVersion: targetMacOSVersion,
59+ cCompilerConfig: cCompilerConfig,
60+ ),
61+ configValidator: (config) async => [
62+ ...await validateCodeAssetBuildConfig (config),
63+ ...await validateDataAssetBuildConfig (config),
64+ ],
5065 workingDirectory: workingDirectory,
51- // When running in JIT mode, only the host OS needs to be build.
52- target: target,
53- // When running in JIT mode, only dynamic libraries are supported.
54- linkModePreference: LinkModePreference .dynamic ,
66+ targetOS: target.os,
5567 // Dart has no concept of release vs debug, default to release.
5668 buildMode: BuildMode .release,
5769 includeParentEnvironment: true ,
5870 runPackageName: runPackageName,
59- targetMacOSVersion: targetMacOSVersion,
6071 linkingEnabled: false ,
6172 supportedAssetTypes: [
6273 CodeAsset .type,
@@ -66,14 +77,11 @@ Future<(bool success, List<EncodedAsset> assets)> compileNativeAssetsJit({
6677 ...await validateCodeAssetBuildOutput (config, output),
6778 ],
6879 applicationAssetValidator: (assets) async => [
69- ...await validateCodeAssetsInApplication (assets),
80+ ...await validateCodeAssetInApplication (assets),
7081 ],
7182 );
72-
73- return (
74- buildResult.success,
75- buildResult.encodedAssets,
76- );
83+ if (buildResult == null ) return null ;
84+ return buildResult.encodedAssets;
7785}
7886
7987/// Compiles all native assets for host OS in JIT mode, and creates the
@@ -83,17 +91,15 @@ Future<(bool success, List<EncodedAsset> assets)> compileNativeAssetsJit({
8391/// [runPackageName] are built.
8492///
8593/// Used in `dart run` and `dart test` .
86- Future <( bool success, Uri ? nativeAssetsYaml) > compileNativeAssetsJitYamlFile ({
94+ Future <Uri ?> compileNativeAssetsJitYamlFile ({
8795 required bool verbose,
8896 String ? runPackageName,
8997}) async {
90- final (success, assets) = await compileNativeAssetsJit (
98+ final assets = await compileNativeAssetsJit (
9199 verbose: verbose,
92100 runPackageName: runPackageName,
93101 );
94- if (! success) {
95- return (false , null );
96- }
102+ if (assets == null ) return null ;
97103 final codeAssets = assets
98104 .where ((e) => e.type == CodeAsset .type)
99105 .map (CodeAsset .fromEncoded)
@@ -118,7 +124,7 @@ Future<(bool success, Uri? nativeAssetsYaml)> compileNativeAssetsJitYamlFile({
118124${kernelAssets .toNativeAssetsFile ()}''' ;
119125 final assetFile = File (assetsUri.toFilePath ());
120126 await assetFile.writeAsString (nativeAssetsYaml);
121- return ( true , assetsUri) ;
127+ return assetsUri;
122128}
123129
124130KernelAsset _targetLocation (CodeAsset asset) {
@@ -199,3 +205,35 @@ Logger logger(bool verbose) => Logger('')
199205 log.trace (record.message);
200206 }
201207 });
208+
209+ CCompilerConfig ? getCCompilerConfig () {
210+ // Specifically for running our tests on Dart CI with the test runner, we
211+ // recognize specific variables to setup the C Compiler configuration.
212+ final env = Platform .environment;
213+ final cc = env['DART_HOOK_TESTING_C_COMPILER__CC' ];
214+ final ar = env['DART_HOOK_TESTING_C_COMPILER__AR' ];
215+ final ld = env['DART_HOOK_TESTING_C_COMPILER__LD' ];
216+ final envScript = env['DART_HOOK_TESTING_C_COMPILER__ENV_SCRIPT' ];
217+ final envScriptArgs =
218+ env['DART_HOOK_TESTING_C_COMPILER__ENV_SCRIPT_ARGUMENTS' ]
219+ ? .split (' ' )
220+ .map ((arg) => arg.trim ())
221+ .where ((arg) => arg.isNotEmpty)
222+ .toList ();
223+ final hasEnvScriptArgs = envScriptArgs != null && envScriptArgs.isNotEmpty;
224+
225+ if (cc != null ||
226+ ar != null ||
227+ ld != null ||
228+ envScript != null ||
229+ hasEnvScriptArgs) {
230+ return CCompilerConfig (
231+ archiver: ar != null ? Uri .file (ar) : null ,
232+ compiler: cc != null ? Uri .file (cc) : null ,
233+ envScript: envScript != null ? Uri .file (envScript) : null ,
234+ envScriptArgs: hasEnvScriptArgs ? envScriptArgs : null ,
235+ linker: ld != null ? Uri .file (ld) : null ,
236+ );
237+ }
238+ return null ;
239+ }
0 commit comments