Skip to content

Commit 762a4c7

Browse files
dcharkesCommit Queue
authored andcommitted
[deps] Roll dart-lang/native
This CL goes part of the way to support pub workspaces with native assets. This CL makes the `runPackageName` explicit in every invocation. This ensures not too many native assets are built. Moreover, this CL also makes `packageLayout` explicit, ensuring the right packages config file is used. A follow up PR should fix the checks w.r.t. the experiment not being enabled. For more info see: dart-lang/native#1911 TEST=pkg/dartdev/test/native Change-Id: I3c3123526e320abb8bb094116e58bb4340c4c052 Cq-Include-Trybots: luci.dart.try:pkg-linux-debug-try,pkg-linux-release-arm64-try,pkg-linux-release-try,pkg-mac-release-arm64-try,pkg-mac-release-try,pkg-win-release-arm64-try,pkg-win-release-try Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/405141 Commit-Queue: Daco Harkes <[email protected]> Reviewed-by: Ben Konyi <[email protected]>
1 parent 667730a commit 762a4c7

File tree

7 files changed

+77
-30
lines changed

7 files changed

+77
-30
lines changed

DEPS

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ vars = {
141141
"markdown_rev": "19aaded4300d24bedcbf52ade792b203ddf030b0",
142142
"material_color_utilities_rev": "799b6ba2f3f1c28c67cc7e0b4f18e0c7d7f3c03e",
143143
# dart-native-interop-team@ is rolling breaking changes manually while the assets features are in experimental.
144-
"native_rev": "ba34674d97ffe612a3df782e1695dab4e5010e66", # disable tools/rev_sdk_deps.dart
144+
"native_rev": "d1d9aa5e62d239580b8bf17e36db6d47c308fc89", # disable tools/rev_sdk_deps.dart
145145
"protobuf_rev": "b7dd58cdbd879beee4c3fbf8ee80fce8e97bad26",
146146
"pub_rev": "710265bae23ad5860f33287fba10b5c369f19a93", # disable tools/rev_sdk_deps.dart
147147
"shelf_rev": "bf799519cda2898a7c5af06dcfdd5fe6443afd79",

pkg/dartdev/lib/src/commands/build.dart

Lines changed: 13 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import 'package:front_end/src/api_prototype/compiler_options.dart'
1717
import 'package:native_assets_builder/native_assets_builder.dart';
1818
import 'package:native_assets_cli/code_assets_builder.dart';
1919
import 'package:native_assets_cli/data_assets_builder.dart';
20+
import 'package:package_config/package_config.dart' as package_config;
2021
import 'package:path/path.dart' as path;
2122
import 'package:vm/target_os.dart'; // For possible --target-os values.
2223

@@ -133,7 +134,14 @@ class BuildCommand extends DartdevCommand {
133134

134135
// Start native asset generation here.
135136
stdout.writeln('Building native assets.');
137+
final packageConfig = await findPackageConfigUri(sourceUri);
138+
final runPackageName = await findRootPackageName(sourceUri);
136139
final workingDirectory = Directory.current.uri;
140+
final packageLayout = PackageLayout.fromPackageConfig(
141+
LocalFileSystem(),
142+
await package_config.loadPackageConfigUri(packageConfig!),
143+
packageConfig,
144+
);
137145
final target = Target.current;
138146
final macOSConfig = target.os == OS.macOS
139147
? MacOSConfig(targetVersion: minimumSupportedMacOSVersion)
@@ -160,7 +168,8 @@ class BuildCommand extends DartdevCommand {
160168
...await validateCodeAssetBuildInput(config),
161169
],
162170
workingDirectory: workingDirectory,
163-
171+
packageLayout: packageLayout,
172+
runPackageName: runPackageName,
164173
linkingEnabled: true,
165174
buildAssetTypes: [
166175
CodeAsset.type,
@@ -181,7 +190,6 @@ class BuildCommand extends DartdevCommand {
181190

182191
final tempDir = Directory.systemTemp.createTempSync();
183192
try {
184-
final packageConfig = await packageConfigUri(sourceUri);
185193
String? recordedUsagesPath;
186194
if (recordUseEnabled) {
187195
recordedUsagesPath = path.join(tempDir.path, 'recorded_usages.json');
@@ -193,7 +201,7 @@ class BuildCommand extends DartdevCommand {
193201
verbose: verbose,
194202
verbosity: args.option('verbosity')!,
195203
defines: [],
196-
packages: packageConfig?.toFilePath(),
204+
packages: packageConfig.toFilePath(),
197205
targetOS: targetOS,
198206
enableExperiment: args.enabledExperiments.join(','),
199207
tempDir: tempDir,
@@ -220,6 +228,8 @@ class BuildCommand extends DartdevCommand {
220228
resourceIdentifiers:
221229
recordUseEnabled ? Uri.file(recordedUsagesPath!) : null,
222230
workingDirectory: workingDirectory,
231+
runPackageName: runPackageName,
232+
packageLayout: packageLayout,
223233
buildResult: buildResult,
224234
buildAssetTypes: [
225235
CodeAsset.type,
@@ -281,19 +291,3 @@ extension on String {
281291
String makeFolder() => endsWith('\\') || endsWith('/') ? this : '$this/';
282292
String removeDotDart() => replaceFirst(RegExp(r'\.dart$'), '');
283293
}
284-
285-
// TODO(https://github.com/dart-lang/package_config/issues/126): Expose this
286-
// logic in package:package_config.
287-
Future<Uri?> packageConfigUri(Uri uri) async {
288-
while (true) {
289-
final candidate = uri.resolve('.dart_tool/package_config.json');
290-
if (await File.fromUri(candidate).exists()) {
291-
return candidate;
292-
}
293-
final parent = uri.resolve('..');
294-
if (parent == uri) {
295-
return null;
296-
}
297-
uri = parent;
298-
}
299-
}

pkg/dartdev/lib/src/commands/compile.dart

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -563,7 +563,10 @@ Remove debugging information from the output and save it separately to the speci
563563
return 255;
564564
}
565565
} else {
566-
final assets = await compileNativeAssetsJit(verbose: verbose);
566+
final assets = await compileNativeAssetsJit(
567+
verbose: verbose,
568+
runPackageName: await findRootPackageName(Directory.current.uri),
569+
);
567570
if (assets == null) {
568571
stderr.writeln('Native assets build failed.');
569572
return 255;

pkg/dartdev/lib/src/commands/run.dart

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -376,7 +376,8 @@ class RunCommand extends DartdevCommand {
376376
return errorExitCode;
377377
}
378378
} else {
379-
final runPackageName = getPackageForCommand(mainCommand);
379+
final runPackageName = getPackageForCommand(mainCommand) ??
380+
await findRootPackageName(Directory.current.uri);
380381
final assetsYamlFileUri = await compileNativeAssetsJitYamlFile(
381382
verbose: verbose,
382383
runPackageName: runPackageName,

pkg/dartdev/lib/src/commands/test.dart

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
// BSD-style license that can be found in the LICENSE file.
44

55
import 'dart:async';
6+
import 'dart:io';
67

78
import 'package:args/args.dart';
89
import 'package:dartdev/src/experiments.dart';
@@ -52,7 +53,10 @@ Run "${runner!.executableName} help" to see global options.''');
5253
}
5354
} else {
5455
final assetsYamlFileUri =
55-
await compileNativeAssetsJitYamlFile(verbose: verbose);
56+
await compileNativeAssetsJitYamlFile(
57+
verbose: verbose,
58+
runPackageName: await findRootPackageName(Directory.current.uri),
59+
);
5660
if (assetsYamlFileUri == null) {
5761
log.stderr('Error: Compiling native assets failed.');
5862
return DartdevCommand.errorExitCode;

pkg/dartdev/lib/src/native_assets.dart

Lines changed: 51 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import 'package:native_assets_builder/native_assets_builder.dart';
1414
import 'package:native_assets_cli/code_assets_builder.dart';
1515
import 'package:native_assets_cli/data_assets_builder.dart';
1616
import 'package:native_assets_cli/native_assets_cli_internal.dart';
17+
import 'package:package_config/package_config.dart' as package_config;
1718

1819
import 'core.dart';
1920

@@ -23,25 +24,31 @@ import 'core.dart';
2324
/// [runPackageName] are built.
2425
Future<List<EncodedAsset>?> compileNativeAssetsJit({
2526
required bool verbose,
26-
String? runPackageName,
27+
required String runPackageName,
2728
}) async {
2829
final workingDirectory = Directory.current.uri;
30+
var packageConfig = await findPackageConfigUri(workingDirectory);
2931
// TODO(https://github.com/dart-lang/package_config/issues/126): Use
3032
// package config resolution from package:package_config.
31-
if (!await File.fromUri(
32-
workingDirectory.resolve('.dart_tool/package_config.json'))
33-
.exists()) {
34-
if (await File.fromUri(workingDirectory.resolve('pubspec.yaml')).exists()) {
33+
if (packageConfig == null) {
34+
final pubspecMaybe = await _findPubspec(workingDirectory);
35+
if (pubspecMaybe != null) {
3536
// Silently run `pub get`, this is what would happen in
3637
// `getExecutableForCommand` later.
3738
final result = await Process.run(sdk.dart, ['pub', 'get']);
3839
if (result.exitCode != 0) {
3940
return null;
4041
}
42+
packageConfig = await findPackageConfigUri(workingDirectory);
4143
} else {
4244
return null;
4345
}
4446
}
47+
final packageLayout = PackageLayout.fromPackageConfig(
48+
LocalFileSystem(),
49+
await package_config.loadPackageConfigUri(packageConfig!),
50+
packageConfig,
51+
);
4552
final nativeAssetsBuildRunner = NativeAssetsBuildRunner(
4653
// This always runs in JIT mode.
4754
dartExecutable: Uri.file(sdk.dart),
@@ -69,6 +76,7 @@ Future<List<EncodedAsset>?> compileNativeAssetsJit({
6976
],
7077
workingDirectory: workingDirectory,
7178
runPackageName: runPackageName,
79+
packageLayout: packageLayout,
7280
linkingEnabled: false,
7381
buildAssetTypes: [
7482
CodeAsset.type,
@@ -94,7 +102,7 @@ Future<List<EncodedAsset>?> compileNativeAssetsJit({
94102
/// Used in `dart run` and `dart test`.
95103
Future<Uri?> compileNativeAssetsJitYamlFile({
96104
required bool verbose,
97-
String? runPackageName,
105+
required String runPackageName,
98106
}) async {
99107
final assets = await compileNativeAssetsJit(
100108
verbose: verbose,
@@ -132,7 +140,7 @@ Future<bool> warnOnNativeAssets() async {
132140
}
133141
try {
134142
final packageLayout =
135-
await PackageLayout.fromRootPackageRoot(
143+
await PackageLayout.fromWorkingDirectory(
136144
const LocalFileSystem(),
137145
workingDirectory,
138146
);
@@ -199,3 +207,39 @@ CCompilerConfig? getCCompilerConfig() {
199207
}
200208
return null;
201209
}
210+
211+
// TODO(https://github.com/dart-lang/package_config/issues/126): Expose this
212+
// logic in package:package_config.
213+
Future<Uri?> findPackageConfigUri(Uri uri) async {
214+
while (true) {
215+
final candidate = uri.resolve('.dart_tool/package_config.json');
216+
final file = File.fromUri(candidate);
217+
if (await file.exists()) {
218+
return file.uri;
219+
}
220+
final parent = uri.resolve('..');
221+
if (parent == uri) {
222+
return null;
223+
}
224+
uri = parent;
225+
}
226+
}
227+
228+
Future<Uri?> _findPubspec(Uri uri) async {
229+
while (true) {
230+
final candidate = uri.resolve('pubspec.yaml');
231+
if (await File.fromUri(candidate).exists()) {
232+
return candidate;
233+
}
234+
final parent = uri.resolve('..');
235+
if (parent == uri) {
236+
return null;
237+
}
238+
uri = parent;
239+
}
240+
}
241+
242+
Future<String> findRootPackageName(Uri uri) async {
243+
final pubspec = await _findPubspec(uri);
244+
return pubspec!.resolve('./').pathSegments.lastWhere((e) => e.isNotEmpty);
245+
}

pkg/dartdev/pubspec.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ dependencies:
2929
meta: any
3030
native_assets_builder: any
3131
native_assets_cli: any
32+
package_config: any
3233
path: any
3334
pub: any
3435
unified_analytics: any

0 commit comments

Comments
 (0)