Skip to content

Commit 81dd2b4

Browse files
authored
[native_assets_cli] BuildConfig.linkingEnabled (#1273)
1 parent 1e0e9db commit 81dd2b4

40 files changed

+250
-25
lines changed

pkgs/native_assets_builder/CHANGELOG.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1-
## 0.7.2-wip
1+
## 0.8.0-wip
22

3-
- Nothing yet.
3+
- `BuildRunner.build` and `BuildRunner.buildDryRun` now have a required
4+
`linkingEnabled` parameter.
45

56
## 0.7.1
67

pkgs/native_assets_builder/lib/src/build_runner/build_runner.dart

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ class NativeAssetsBuildRunner {
5454
PackageLayout? packageLayout,
5555
String? runPackageName,
5656
Iterable<String>? supportedAssetTypes,
57+
required bool linkingEnabled,
5758
}) async =>
5859
_run(
5960
hook: Hook.build,
@@ -70,6 +71,7 @@ class NativeAssetsBuildRunner {
7071
packageLayout: packageLayout,
7172
runPackageName: runPackageName,
7273
supportedAssetTypes: supportedAssetTypes,
74+
linkingEnabled: linkingEnabled,
7375
);
7476

7577
/// [workingDirectory] is expected to contain `.dart_tool`.
@@ -133,8 +135,10 @@ class NativeAssetsBuildRunner {
133135
String? runPackageName,
134136
Iterable<String>? supportedAssetTypes,
135137
BuildResult? buildResult,
138+
bool? linkingEnabled,
136139
}) async {
137140
assert(hook == Hook.link || buildResult == null);
141+
assert(hook == Hook.build || linkingEnabled == null);
138142

139143
packageLayout ??= await PackageLayout.fromRootPackageRoot(workingDirectory);
140144
final (buildPlan, packageGraph, planSuccess) = await _makePlan(
@@ -168,6 +172,7 @@ class NativeAssetsBuildRunner {
168172
buildMode,
169173
linkModePreference,
170174
dependencyMetadata,
175+
linkingEnabled,
171176
cCompilerConfig,
172177
targetIOSSdk,
173178
targetAndroidNdkApi,
@@ -201,6 +206,7 @@ class NativeAssetsBuildRunner {
201206
BuildModeImpl buildMode,
202207
LinkModePreferenceImpl linkModePreference,
203208
DependencyMetadata? dependencyMetadata,
209+
bool? linkingEnabled,
204210
CCompilerConfigImpl? cCompilerConfig,
205211
IOSSdkImpl? targetIOSSdk,
206212
int? targetAndroidNdkApi,
@@ -224,6 +230,7 @@ class NativeAssetsBuildRunner {
224230
targetAndroidNdkApi: targetAndroidNdkApi,
225231
supportedAssetTypes: supportedAssetTypes,
226232
hook: hook,
233+
linkingEnabled: linkingEnabled,
227234
);
228235
final buildDirUri =
229236
packageLayout.dartToolNativeAssetsBuilder.resolve('$buildDirName/');
@@ -273,6 +280,7 @@ class NativeAssetsBuildRunner {
273280
targetMacOSVersion: targetMacOSVersion,
274281
cCompiler: cCompilerConfig,
275282
dependencyMetadata: dependencyMetadata,
283+
linkingEnabled: linkingEnabled,
276284
targetAndroidNdkApi: targetAndroidNdkApi,
277285
);
278286
}
@@ -290,6 +298,7 @@ class NativeAssetsBuildRunner {
290298
required OSImpl targetOS,
291299
required Uri workingDirectory,
292300
required bool includeParentEnvironment,
301+
required bool linkingEnabled,
293302
PackageLayout? packageLayout,
294303
String? runPackageName,
295304
Iterable<String>? supportedAssetTypes,
@@ -303,6 +312,7 @@ class NativeAssetsBuildRunner {
303312
packageLayout: packageLayout,
304313
runPackageName: runPackageName,
305314
supportedAssetTypes: supportedAssetTypes,
315+
linkingEnabled: linkingEnabled,
306316
);
307317

308318
/// [workingDirectory] is expected to contain `.dart_tool`.
@@ -332,6 +342,7 @@ class NativeAssetsBuildRunner {
332342
runPackageName: runPackageName,
333343
supportedAssetTypes: supportedAssetTypes,
334344
buildDryRunResult: buildDryRunResult,
345+
linkingEnabled: null,
335346
);
336347

337348
Future<HookResult> _runDryRun({
@@ -344,6 +355,7 @@ class NativeAssetsBuildRunner {
344355
Iterable<String>? supportedAssetTypes,
345356
required Hook hook,
346357
BuildDryRunResult? buildDryRunResult,
358+
required bool? linkingEnabled,
347359
}) async {
348360
packageLayout ??= await PackageLayout.fromRootPackageRoot(workingDirectory);
349361
final (buildPlan, _, planSuccess) = await _makePlan(
@@ -367,6 +379,7 @@ class NativeAssetsBuildRunner {
367379
supportedAssetTypes: supportedAssetTypes,
368380
hook: hook,
369381
buildDryRunResult: buildDryRunResult,
382+
linkingEnabled: linkingEnabled,
370383
);
371384
var (buildOutput, packageSuccess) = await _runHookForPackage(
372385
hook,
@@ -538,6 +551,7 @@ ${e.message}
538551
required Hook hook,
539552
BuildDryRunResult? buildDryRunResult,
540553
Iterable<String>? supportedAssetTypes,
554+
required bool? linkingEnabled,
541555
}) async {
542556
final hookDirName = 'dry_run_${hook.name}_${targetOS}_$linkMode';
543557
final outDirUri = buildParentDir.resolve('$hookDirName/out/');
@@ -554,6 +568,7 @@ ${e.message}
554568
targetOS: targetOS,
555569
linkModePreference: linkMode,
556570
supportedAssetTypes: supportedAssetTypes,
571+
linkingEnabled: linkingEnabled,
557572
);
558573
case Hook.link:
559574
return LinkConfigImpl.dryRun(

pkgs/native_assets_builder/pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
name: native_assets_builder
22
description: >-
33
This package is the backend that invokes build hooks.
4-
version: 0.7.2-wip
4+
version: 0.8.0-wip
55
repository: https://github.com/dart-lang/native/tree/main/pkgs/native_assets_builder
66

77
publish_to: none

pkgs/native_assets_builder/test/build_runner/build_runner_build_dry_run_test.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ void main() async {
2828
packageUri,
2929
logger,
3030
dartExecutable,
31+
linkingEnabled: false,
3132
);
3233
final dryRunAssets = dryRunResult.assets.toList();
3334
final result = await build(

pkgs/native_assets_builder/test/build_runner/build_runner_cycle_test.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ void main() async {
2626
packageUri,
2727
createCapturingLogger(logMessages, level: Level.SEVERE),
2828
dartExecutable,
29+
linkingEnabled: false,
2930
);
3031
final fullLog = logMessages.join('\n');
3132
expect(result.success, false);

pkgs/native_assets_builder/test/build_runner/build_runner_reusability_test.dart

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,26 +33,30 @@ void main() async {
3333
linkModePreference: LinkModePreferenceImpl.dynamic,
3434
workingDirectory: packageUri,
3535
includeParentEnvironment: true,
36+
linkingEnabled: false,
3637
);
3738
await buildRunner.buildDryRun(
3839
targetOS: Target.current.os,
3940
linkModePreference: LinkModePreferenceImpl.dynamic,
4041
workingDirectory: packageUri,
4142
includeParentEnvironment: true,
43+
linkingEnabled: false,
4244
);
4345
await buildRunner.build(
4446
buildMode: BuildModeImpl.release,
4547
linkModePreference: LinkModePreferenceImpl.dynamic,
4648
target: Target.current,
4749
workingDirectory: packageUri,
4850
includeParentEnvironment: true,
51+
linkingEnabled: false,
4952
);
5053
await buildRunner.build(
5154
buildMode: BuildModeImpl.release,
5255
linkModePreference: LinkModePreferenceImpl.dynamic,
5356
target: Target.current,
5457
workingDirectory: packageUri,
5558
includeParentEnvironment: true,
59+
linkingEnabled: false,
5660
);
5761
});
5862
});

pkgs/native_assets_builder/test/build_runner/helpers.dart

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ Future<BuildResult> build(
4646
int? targetMacOSVersion,
4747
int? targetAndroidNdkApi,
4848
Target? target,
49+
bool linkingEnabled = false,
4950
}) async =>
5051
await runWithLog(capturedLogs, () async {
5152
final result = await NativeAssetsBuildRunner(
@@ -64,6 +65,7 @@ Future<BuildResult> build(
6465
targetIOSVersion: targetIOSVersion,
6566
targetMacOSVersion: targetMacOSVersion,
6667
targetAndroidNdkApi: targetAndroidNdkApi,
68+
linkingEnabled: linkingEnabled,
6769
);
6870

6971
if (result.success) {
@@ -155,6 +157,7 @@ Future<(BuildResult, LinkResult)> buildAndLink(
155157
targetIOSVersion: targetIOSVersion,
156158
targetMacOSVersion: targetMacOSVersion,
157159
targetAndroidNdkApi: targetAndroidNdkApi,
160+
linkingEnabled: true,
158161
);
159162

160163
if (!buildResult.success) {
@@ -217,6 +220,7 @@ Future<BuildDryRunResult> buildDryRun(
217220
bool includeParentEnvironment = true,
218221
List<String>? capturedLogs,
219222
PackageLayout? packageLayout,
223+
required bool linkingEnabled,
220224
}) async =>
221225
runWithLog(capturedLogs, () async {
222226
final result = await NativeAssetsBuildRunner(
@@ -228,6 +232,7 @@ Future<BuildDryRunResult> buildDryRun(
228232
workingDirectory: packageUri,
229233
includeParentEnvironment: includeParentEnvironment,
230234
packageLayout: packageLayout,
235+
linkingEnabled: linkingEnabled,
231236
);
232237
return result;
233238
});

pkgs/native_assets_builder/test/build_runner/link_dry_run_test.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ void main() async {
3030
packageUri,
3131
logger,
3232
dartExecutable,
33+
linkingEnabled: true,
3334
);
3435
expect(buildResult.assets.length, 0);
3536

@@ -70,6 +71,7 @@ void main() async {
7071
packageUri,
7172
logger,
7273
dartExecutable,
74+
linkingEnabled: true,
7375
);
7476
expect(buildResult.success, true);
7577
expect(_getNames(buildResult.assets), orderedEquals(builtHelperAssets));

pkgs/native_assets_builder/test/build_runner/link_test.dart

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ void main() async {
3030
packageUri,
3131
logger,
3232
dartExecutable,
33+
linkingEnabled: true,
3334
);
3435
expect(buildResult.assets.length, 0);
3536

@@ -40,6 +41,14 @@ void main() async {
4041
buildResult: buildResult,
4142
);
4243
expect(linkResult.assets.length, 2);
44+
45+
final buildNoLinkResult = await build(
46+
packageUri,
47+
logger,
48+
dartExecutable,
49+
linkingEnabled: false,
50+
);
51+
expect(buildNoLinkResult.assets.length, 4);
4352
});
4453
},
4554
);
@@ -70,6 +79,7 @@ void main() async {
7079
packageUri,
7180
logger,
7281
dartExecutable,
82+
linkingEnabled: true,
7383
);
7484
expect(buildResult.success, true);
7585
expect(_getNames(buildResult.assets), orderedEquals(builtHelperAssets));
@@ -106,6 +116,7 @@ void main() async {
106116
packageUri,
107117
logger,
108118
dartExecutable,
119+
linkingEnabled: true,
109120
);
110121
expect(buildResult.assets.length, 0);
111122
expect(buildResult.assetsForLinking.length, 0);

pkgs/native_assets_builder/test/build_runner/resources_test.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ void main() async {
3333
packageUri,
3434
logger,
3535
dartExecutable,
36+
linkingEnabled: true,
3637
);
3738

3839
Iterable<String> buildFiles() => Directory.fromUri(

pkgs/native_assets_builder/test_data/add_asset_link/hook/build.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@ import 'package:native_toolchain_c/native_toolchain_c.dart';
88

99
void main(List<String> arguments) async {
1010
await build(arguments, (config, output) async {
11+
if (!config.linkingEnabled) {
12+
throw Exception('Link hook must be run!');
13+
}
1114
final logger = Logger('')
1215
..level = Level.ALL
1316
..onRecord.listen((record) {

pkgs/native_assets_builder/test_data/complex_link/hook/build.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,6 @@ void main(List<String> args) async => build(args, (config, output) async {
1717
package: packageName,
1818
),
1919
),
20-
linkInPackage: 'complex_link',
20+
linkInPackage: config.linkingEnabled ? 'complex_link' : null,
2121
);
2222
});

pkgs/native_assets_builder/test_data/complex_link_helper/hook/build.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,6 @@ void main(List<String> args) async => build(args, (config, output) async {
2929
package: packageName,
3030
),
3131
),
32-
linkInPackage: 'complex_link',
32+
linkInPackage: config.linkingEnabled ? 'complex_link' : null,
3333
);
3434
});

pkgs/native_assets_builder/test_data/drop_dylib_link/hook/build.dart

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ void main(List<String> arguments) async {
1515
..onRecord.listen((record) {
1616
print('${record.level.name}: ${record.time}: ${record.message}');
1717
});
18+
final linkInPackage = config.linkingEnabled ? packageName : null;
1819
await CBuilder.library(
1920
name: 'add',
2021
assetName: 'dylib_add',
@@ -27,7 +28,7 @@ void main(List<String> arguments) async {
2728
config: config,
2829
output: output,
2930
logger: logger,
30-
linkInPackage: packageName,
31+
linkInPackage: linkInPackage,
3132
);
3233

3334
await CBuilder.library(
@@ -42,7 +43,7 @@ void main(List<String> arguments) async {
4243
config: config,
4344
output: output,
4445
logger: logger,
45-
linkInPackage: packageName,
46+
linkInPackage: linkInPackage,
4647
);
4748
});
4849
}

pkgs/native_assets_builder/test_data/fail_on_os_sdk_version_link/hook/build.dart

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@ void main(List<String> arguments) async {
1212
file: config.packageRoot.resolve('assets/data.json'),
1313
package: config.packageName,
1414
),
15-
linkInPackage: 'fail_on_os_sdk_version_linker',
15+
linkInPackage:
16+
config.linkingEnabled ? 'fail_on_os_sdk_version_linker' : null,
1617
);
1718
});
1819
}

pkgs/native_assets_builder/test_data/simple_link/hook/build.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,6 @@ void main(List<String> args) async => build(args, (config, output) async {
1717
package: packageName,
1818
),
1919
),
20-
linkInPackage: 'simple_link',
20+
linkInPackage: config.linkingEnabled ? 'simple_link' : null,
2121
);
2222
});

pkgs/native_assets_cli/CHANGELOG.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
## 0.6.2-wip
1+
## 0.7.0-wip
22

3-
- Nothing yet.
3+
- `BuildConfig` constructors now have a required `linkingEnabled` parameter.
44

55
## 0.6.1
66

pkgs/native_assets_cli/example/link/package_with_assets/hook/build.dart

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@ void main(List<String> args) async {
1919
file: config.packageRoot.resolve('assets/used_asset.json'),
2020
)
2121
];
22-
output.addAssets(allAssets, linkInPackage: packageName);
22+
output.addAssets(
23+
allAssets,
24+
linkInPackage: config.linkingEnabled ? packageName : null,
25+
);
2326
});
2427
}

0 commit comments

Comments
 (0)