@@ -6,11 +6,11 @@ import 'dart:async';
6
6
import 'dart:io' ;
7
7
8
8
import 'package:logging/logging.dart' ;
9
- import 'package:native_assets_cli/locking.dart' ;
10
9
import 'package:native_assets_cli/native_assets_cli.dart' as api;
11
10
import 'package:native_assets_cli/native_assets_cli_internal.dart' ;
12
11
import 'package:package_config/package_config.dart' ;
13
12
13
+ import '../locking/locking.dart' ;
14
14
import '../model/build_dry_run_result.dart' ;
15
15
import '../model/build_result.dart' ;
16
16
import '../model/hook_result.dart' ;
@@ -263,13 +263,21 @@ class NativeAssetsBuildRunner {
263
263
);
264
264
final buildDirUri =
265
265
packageLayout.dartToolNativeAssetsBuilder.resolve ('$buildDirName /' );
266
- final outDirUri = buildDirUri.resolve ('out/' );
267
- final outDir = Directory .fromUri (outDirUri );
266
+ final outputDirectory = buildDirUri.resolve ('out/' );
267
+ final outDir = Directory .fromUri (outputDirectory );
268
268
if (! await outDir.exists ()) {
269
269
// TODO(https://dartbug.com/50565): Purge old or unused folders.
270
270
await outDir.create (recursive: true );
271
271
}
272
272
273
+ final outputDirectoryShared = packageLayout.dartToolNativeAssetsBuilder
274
+ .resolve ('shared/${package .name }/$hook /' );
275
+ final outDirShared = Directory .fromUri (outputDirectoryShared);
276
+ if (! await outDirShared.exists ()) {
277
+ // TODO(https://dartbug.com/50565): Purge old or unused folders.
278
+ await outDirShared.create (recursive: true );
279
+ }
280
+
273
281
if (hook == Hook .link) {
274
282
File ? resourcesFile;
275
283
if (resourceIdentifiers != null ) {
@@ -279,7 +287,8 @@ class NativeAssetsBuildRunner {
279
287
}
280
288
281
289
return LinkConfigImpl (
282
- outputDirectory: outDirUri,
290
+ outputDirectory: outputDirectory,
291
+ outputDirectoryShared: outputDirectoryShared,
283
292
packageName: package.name,
284
293
packageRoot: package.root,
285
294
targetOS: target.os,
@@ -297,7 +306,8 @@ class NativeAssetsBuildRunner {
297
306
);
298
307
} else {
299
308
return BuildConfigImpl (
300
- outputDirectory: outDirUri,
309
+ outputDirectory: outputDirectory,
310
+ outputDirectoryShared: outputDirectoryShared,
301
311
packageName: package.name,
302
312
packageRoot: package.root,
303
313
targetOS: target.os,
@@ -428,8 +438,11 @@ class NativeAssetsBuildRunner {
428
438
continue ;
429
439
}
430
440
// TODO(https://github.com/dart-lang/native/issues/1321): Should dry runs be cached?
431
- var (buildOutput, packageSuccess) = await runUnderDirectoryLock (
432
- Directory .fromUri (config.outputDirectory.parent),
441
+ var (buildOutput, packageSuccess) = await runUnderDirectoriesLock (
442
+ [
443
+ Directory .fromUri (config.outputDirectoryShared.parent),
444
+ Directory .fromUri (config.outputDirectory.parent),
445
+ ],
433
446
timeout: singleHookTimeout,
434
447
logger: logger,
435
448
() => _runHookForPackage (
@@ -482,8 +495,11 @@ class NativeAssetsBuildRunner {
482
495
PackageLayout packageLayout,
483
496
) async {
484
497
final outDir = config.outputDirectory;
485
- return await runUnderDirectoryLock (
486
- Directory .fromUri (config.outputDirectory.parent),
498
+ return await runUnderDirectoriesLock (
499
+ [
500
+ Directory .fromUri (config.outputDirectoryShared.parent),
501
+ Directory .fromUri (config.outputDirectory.parent),
502
+ ],
487
503
timeout: singleHookTimeout,
488
504
logger: logger,
489
505
() async {
@@ -784,15 +800,27 @@ ${compileResult.stdout}
784
800
hook: hook,
785
801
linkingEnabled: linkingEnabled,
786
802
);
803
+
787
804
final outDirUri = buildParentDir.resolve ('$buildDirName /out/' );
788
805
final outDir = Directory .fromUri (outDirUri);
789
806
if (! await outDir.exists ()) {
790
807
await outDir.create (recursive: true );
791
808
}
809
+
810
+ // Shared between dry run and wet run.
811
+ final outputDirectoryShared =
812
+ buildParentDir.resolve ('shared/${package .name }/$hook /out/' );
813
+ final outDirShared = Directory .fromUri (outputDirectoryShared);
814
+ if (! await outDirShared.exists ()) {
815
+ // TODO(https://dartbug.com/50565): Purge old or unused folders.
816
+ await outDirShared.create (recursive: true );
817
+ }
818
+
792
819
switch (hook) {
793
820
case Hook .build:
794
821
return BuildConfigImpl .dryRun (
795
822
outputDirectory: outDirUri,
823
+ outputDirectoryShared: outputDirectoryShared,
796
824
packageName: packageName,
797
825
packageRoot: packageRoot,
798
826
targetOS: targetOS,
@@ -803,6 +831,7 @@ ${compileResult.stdout}
803
831
case Hook .link:
804
832
return LinkConfigImpl .dryRun (
805
833
outputDirectory: outDirUri,
834
+ outputDirectoryShared: outputDirectoryShared,
806
835
packageName: packageName,
807
836
packageRoot: packageRoot,
808
837
targetOS: targetOS,
0 commit comments