Skip to content

Commit 2542108

Browse files
authored
[native_assets_cli] Move targetOS to CodeConfig (#1806)
Next refactoring in: * #1738 We move `config.targetOS` to `config.codeConfig.targetOS`. Other asset types might not get access on the target OS. This will require a manual roll into dartdev and flutter tools due to the targetOS now having to be passed in via `setupCodeConfig` instead of the base config. The native assets builder will still emit the same JSON if code assets are supported. Since both Dart and Flutter support code assets currently, this will not break anything. Once data assets for web in Flutter are added, all existing build hooks that assume code assets are always supported will break.
1 parent 2cecc88 commit 2542108

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

53 files changed

+251
-205
lines changed

pkgs/native_assets_builder/CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
- Removed support for dry run (Flutter no long requires it).
44
- Various fixes to caching.
5+
- **Breaking change** `BuildConfig.targetOS` is now only provided if
6+
`buildAssetTypes` contains the code asset.
57

68
## 0.9.0
79

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

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,6 @@ class NativeAssetsBuildRunner {
9292
required BuildConfigValidator configValidator,
9393
required BuildValidator buildValidator,
9494
required ApplicationAssetValidator applicationAssetValidator,
95-
required OS targetOS,
9695
required Uri workingDirectory,
9796
PackageLayout? packageLayout,
9897
String? runPackageName,
@@ -121,7 +120,6 @@ class NativeAssetsBuildRunner {
121120

122121
final configBuilder = configCreator()
123122
..setupHookConfig(
124-
targetOS: targetOS,
125123
buildAssetTypes: buildAssetTypes,
126124
packageName: package.name,
127125
packageRoot: packageLayout.packageRoot(package.name),
@@ -197,7 +195,6 @@ class NativeAssetsBuildRunner {
197195
required LinkConfigCreator configCreator,
198196
required LinkConfigValidator configValidator,
199197
required LinkValidator linkValidator,
200-
required OS targetOS,
201198
required Uri workingDirectory,
202199
required ApplicationAssetValidator applicationAssetValidator,
203200
PackageLayout? packageLayout,
@@ -220,7 +217,6 @@ class NativeAssetsBuildRunner {
220217
for (final package in buildPlan) {
221218
final configBuilder = configCreator()
222219
..setupHookConfig(
223-
targetOS: targetOS,
224220
buildAssetTypes: buildAssetTypes,
225221
packageName: package.name,
226222
packageRoot: packageLayout.packageRoot(package.name),

pkgs/native_assets_builder/test/build_runner/build_runner_reusability_test.dart

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,12 @@ void main() async {
3030
BuildConfigBuilder configCreator() => BuildConfigBuilder()
3131
..setupCodeConfig(
3232
targetArchitecture: Architecture.current,
33+
targetOS: OS.current,
3334
linkModePreference: LinkModePreference.dynamic,
3435
);
3536

3637
await buildRunner.build(
3738
configCreator: configCreator,
38-
targetOS: OS.current,
3939
workingDirectory: packageUri,
4040
linkingEnabled: false,
4141
buildAssetTypes: [],
@@ -45,7 +45,6 @@ void main() async {
4545
);
4646
await buildRunner.build(
4747
configCreator: configCreator,
48-
targetOS: OS.current,
4948
workingDirectory: packageUri,
5049
linkingEnabled: false,
5150
buildAssetTypes: [],

pkgs/native_assets_builder/test/build_runner/concurrency_shared_test_helper.dart

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,14 @@ void main(List<String> args) async {
2020
logger: logger,
2121
dartExecutable: dartExecutable,
2222
).build(
23-
configCreator: BuildConfigBuilder.new,
24-
targetOS: target.os,
23+
// Set up the code config, so that the builds for different targets are
24+
// in different directories.
25+
configCreator: () => BuildConfigBuilder()
26+
..setupCodeConfig(
27+
targetArchitecture: target.architecture,
28+
targetOS: target.os,
29+
linkModePreference: LinkModePreference.dynamic,
30+
),
2531
workingDirectory: packageUri,
2632
linkingEnabled: false,
2733
buildAssetTypes: [DataAsset.type],

pkgs/native_assets_builder/test/build_runner/concurrency_test_helper.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,11 @@ void main(List<String> args) async {
2828
configCreator: () => BuildConfigBuilder()
2929
..setupCodeConfig(
3030
targetArchitecture: Architecture.current,
31+
targetOS: OS.current,
3132
linkModePreference: LinkModePreference.dynamic,
3233
cCompilerConfig: dartCICompilerConfig,
3334
targetMacOSVersion: OS.current == OS.macOS ? defaultMacOSVersion : null,
3435
),
35-
targetOS: OS.current,
3636
workingDirectory: packageUri,
3737
linkingEnabled: false,
3838
buildAssetTypes: [CodeAsset.type, DataAsset.type],

pkgs/native_assets_builder/test/build_runner/helpers.dart

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ Future<BuildResult?> build(
5959
if (buildAssetTypes.contains(CodeAsset.type)) {
6060
configBuilder.setupCodeConfig(
6161
targetArchitecture: target?.architecture ?? Architecture.current,
62+
targetOS: targetOS,
6263
linkModePreference: linkModePreference,
6364
cCompilerConfig: cCompilerConfig ?? dartCICompilerConfig,
6465
targetIOSSdk: targetIOSSdk,
@@ -71,7 +72,6 @@ Future<BuildResult?> build(
7172
return configBuilder;
7273
},
7374
configValidator: configValidator,
74-
targetOS: targetOS,
7575
workingDirectory: packageUri,
7676
packageLayout: packageLayout,
7777
runPackageName: runPackageName,
@@ -124,6 +124,7 @@ Future<LinkResult?> link(
124124
if (buildAssetTypes.contains(CodeAsset.type)) {
125125
configBuilder.setupCodeConfig(
126126
targetArchitecture: target?.architecture ?? Architecture.current,
127+
targetOS: target?.os ?? OS.current,
127128
linkModePreference: linkModePreference,
128129
cCompilerConfig: cCompilerConfig ?? dartCICompilerConfig,
129130
targetIOSSdk: targetIOSSdk,
@@ -136,7 +137,6 @@ Future<LinkResult?> link(
136137
return configBuilder;
137138
},
138139
configValidator: configValidator,
139-
targetOS: target?.os ?? OS.current,
140140
workingDirectory: packageUri,
141141
packageLayout: packageLayout,
142142
buildResult: buildResult,
@@ -185,6 +185,7 @@ Future<(BuildResult?, LinkResult?)> buildAndLink(
185185
configCreator: () => BuildConfigBuilder()
186186
..setupCodeConfig(
187187
targetArchitecture: target?.architecture ?? Architecture.current,
188+
targetOS: target?.os ?? OS.current,
188189
linkModePreference: linkModePreference,
189190
cCompilerConfig: cCompilerConfig ?? dartCICompilerConfig,
190191
targetIOSSdk: targetIOSSdk,
@@ -193,7 +194,6 @@ Future<(BuildResult?, LinkResult?)> buildAndLink(
193194
targetAndroidNdkApi: targetAndroidNdkApi,
194195
),
195196
configValidator: buildConfigValidator,
196-
targetOS: target?.os ?? OS.current,
197197
workingDirectory: packageUri,
198198
packageLayout: packageLayout,
199199
runPackageName: runPackageName,
@@ -217,6 +217,7 @@ Future<(BuildResult?, LinkResult?)> buildAndLink(
217217
configCreator: () => LinkConfigBuilder()
218218
..setupCodeConfig(
219219
targetArchitecture: target?.architecture ?? Architecture.current,
220+
targetOS: target?.os ?? OS.current,
220221
linkModePreference: linkModePreference,
221222
cCompilerConfig: cCompilerConfig,
222223
targetIOSSdk: targetIOSSdk,
@@ -225,7 +226,6 @@ Future<(BuildResult?, LinkResult?)> buildAndLink(
225226
targetAndroidNdkApi: targetAndroidNdkApi,
226227
),
227228
configValidator: linkConfigValidator,
228-
targetOS: target?.os ?? OS.current,
229229
workingDirectory: packageUri,
230230
packageLayout: packageLayout,
231231
buildResult: buildResult,

pkgs/native_assets_builder/test/test_data/native_dynamic_linking_test.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@ void main() async {
3434
..setupHookConfig(
3535
packageName: name,
3636
packageRoot: testPackageUri,
37-
targetOS: OS.current,
3837
buildAssetTypes: [CodeAsset.type],
3938
)
4039
..setupBuildConfig(dryRun: false, linkingEnabled: false)
@@ -44,6 +43,7 @@ void main() async {
4443
)
4544
..setupCodeConfig(
4645
targetArchitecture: Architecture.current,
46+
targetOS: OS.current,
4747
linkModePreference: LinkModePreference.dynamic,
4848
cCompilerConfig: cCompiler,
4949
);

pkgs/native_assets_builder/test/test_data/transformer_test.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,6 @@ void main() async {
4949
..setupHookConfig(
5050
packageName: packageName,
5151
packageRoot: packageUri,
52-
targetOS: OS.current,
5352
buildAssetTypes: [DataAsset.type],
5453
)
5554
..setupBuildConfig(dryRun: false, linkingEnabled: false)
@@ -59,6 +58,7 @@ void main() async {
5958
)
6059
..setupCodeConfig(
6160
targetArchitecture: architecture,
61+
targetOS: OS.current,
6262
linkModePreference: LinkModePreference.dynamic,
6363
);
6464

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,15 +14,15 @@ const minMacOSVersionForThisPackage = 13;
1414

1515
void main(List<String> arguments) async {
1616
await build(arguments, (config, output) async {
17-
if (config.targetOS == OS.android) {
17+
if (config.codeConfig.targetOS == OS.android) {
1818
if (config.codeConfig.targetAndroidNdkApi! <
1919
minNdkApiVersionForThisPackage) {
2020
throw UnsupportedError(
2121
'The native assets for this package require at '
2222
'least Android NDK API level $minNdkApiVersionForThisPackage.',
2323
);
2424
}
25-
} else if (config.targetOS == OS.iOS) {
25+
} else if (config.codeConfig.targetOS == OS.iOS) {
2626
final iosVersion = config.codeConfig.targetIOSVersion;
2727
// iosVersion is nullable to deal with version skew.
2828
if (iosVersion != null && iosVersion < minIosVersionForThisPackage) {
@@ -31,7 +31,7 @@ void main(List<String> arguments) async {
3131
'least iOS version $minIosVersionForThisPackage.',
3232
);
3333
}
34-
} else if (config.targetOS == OS.macOS) {
34+
} else if (config.codeConfig.targetOS == OS.macOS) {
3535
final macosVersion = config.codeConfig.targetMacOSVersion;
3636
// macosVersion is nullable to deal with version skew.
3737
if (macosVersion != null &&

pkgs/native_assets_builder/test_data/fail_on_os_sdk_version_linker/hook/link.dart

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,15 +14,15 @@ const minMacOSVersionForThisPackage = 13;
1414

1515
void main(List<String> arguments) async {
1616
await link(arguments, (config, output) async {
17-
if (config.targetOS == OS.android) {
17+
if (config.codeConfig.targetOS == OS.android) {
1818
if (config.codeConfig.targetAndroidNdkApi! <
1919
minNdkApiVersionForThisPackage) {
2020
throw UnsupportedError(
2121
'The native assets for this package require at '
2222
'least Android NDK API level $minNdkApiVersionForThisPackage.',
2323
);
2424
}
25-
} else if (config.targetOS == OS.iOS) {
25+
} else if (config.codeConfig.targetOS == OS.iOS) {
2626
final iosVersion = config.codeConfig.targetIOSVersion;
2727
// iosVersion is nullable to deal with version skew.
2828
if (iosVersion != null && iosVersion < minIosVersionForThisPackage) {
@@ -31,7 +31,7 @@ void main(List<String> arguments) async {
3131
'least iOS version $minIosVersionForThisPackage.',
3232
);
3333
}
34-
} else if (config.targetOS == OS.macOS) {
34+
} else if (config.codeConfig.targetOS == OS.macOS) {
3535
final macosVersion = config.codeConfig.targetMacOSVersion;
3636
// macosVersion is nullable to deal with version skew.
3737
if (macosVersion != null &&

pkgs/native_assets_cli/CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99
it can be controlled in the build hook together with the `OptimizationLevel`.
1010
Most likely, every package should ship with `release`. `BuildMode.debug`
1111
should only be used while developing the package locally.
12+
- **Breaking change** Move `HookConfig.targetOS` to `CodeConfig`. `DataAsset`s
13+
and other asset types might now support varying on the target OS.
1214
- **Breaking change**: Change the behavior of `testBuildHook` and
1315
`testCodeBuildHook`; instead of defining tests, these methods should now be
1416
called from within tests.

pkgs/native_assets_cli/example/build/local_asset/hook/build.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ Future<void> main(List<String> args) async {
3838
name: 'asset.txt',
3939
file: assetPath,
4040
linkMode: DynamicLoadingBundled(),
41-
os: config.targetOS,
41+
os: config.codeConfig.targetOS,
4242
architecture:
4343
// ignore: deprecated_member_use
4444
config.dryRun ? null : config.codeConfig.targetArchitecture,

pkgs/native_assets_cli/lib/code_assets.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,3 +32,4 @@ export 'src/code_assets/link_mode.dart'
3232
LookupInProcess,
3333
StaticLinking;
3434
export 'src/code_assets/link_mode_preference.dart' show LinkModePreference;
35+
export 'src/code_assets/os.dart' show OS;

pkgs/native_assets_cli/lib/native_assets_cli.dart

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,4 +21,3 @@ export 'src/config.dart'
2121
LinkOutputBuilder;
2222
export 'src/encoded_asset.dart' show EncodedAsset;
2323
export 'src/metadata.dart';
24-
export 'src/os.dart' show OS;

pkgs/native_assets_cli/lib/src/api/build.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ import '../validation.dart';
8282
/// name: 'asset.txt',
8383
/// file: assetPath,
8484
/// linkMode: DynamicLoadingBundled(),
85-
/// os: config.targetOS,
85+
/// os: config.codeConfig.targetOS,
8686
/// architecture: config.codeConfig.targetArchitecture,
8787
/// ),
8888
/// );

pkgs/native_assets_cli/lib/src/code_assets/code_asset.dart

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,11 @@
55
import '../config.dart';
66
import '../encoded_asset.dart';
77
import '../json_utils.dart';
8-
import '../os.dart';
98
import '../utils/json.dart';
109
import '../utils/map.dart';
11-
1210
import 'architecture.dart';
1311
import 'link_mode.dart';
12+
import 'os.dart';
1413

1514
/// A code asset which respects the native application binary interface (ABI).
1615
///

pkgs/native_assets_cli/lib/src/code_assets/config.dart

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,12 @@
44

55
import '../config.dart';
66
import '../json_utils.dart';
7-
87
import 'architecture.dart';
98
import 'c_compiler_config.dart';
109
import 'code_asset.dart';
1110
import 'ios_sdk.dart';
1211
import 'link_mode_preference.dart';
12+
import 'os.dart';
1313

1414
/// Extension to the [BuildConfig] providing access to configuration specific to
1515
/// code assets (only available if code assets are supported).
@@ -48,6 +48,9 @@ class CodeConfig {
4848
final int? targetAndroidNdkApi;
4949
final IOSSdk? targetIOSSdk;
5050

51+
/// The operating system being compiled for.
52+
final OS targetOS;
53+
5154
CodeConfig(HookConfig config)
5255
: linkModePreference = LinkModePreference.fromString(
5356
config.json.string(_linkModePreferenceKey)),
@@ -56,6 +59,7 @@ class CodeConfig {
5659
? null
5760
: Architecture.fromString(config.json.string(_targetArchitectureKey,
5861
validValues: Architecture.values.map((a) => a.name))),
62+
targetOS = OS.fromString(config.json.string(_targetOSConfigKey)),
5963
cCompiler = switch (config.json.optionalMap(_compilerKey)) {
6064
final Map<String, Object?> map => CCompilerConfig.fromJson(map),
6165
null => CCompilerConfig(),
@@ -121,6 +125,7 @@ extension type CodeAssetLinkOutputBuilderAdd._(LinkOutputBuilder _output) {
121125
extension CodeAssetBuildConfigBuilder on HookConfigBuilder {
122126
void setupCodeConfig({
123127
required Architecture? targetArchitecture,
128+
required OS targetOS,
124129
required LinkModePreference linkModePreference,
125130
CCompilerConfig? cCompilerConfig,
126131
int? targetIOSVersion,
@@ -131,6 +136,7 @@ extension CodeAssetBuildConfigBuilder on HookConfigBuilder {
131136
if (targetArchitecture != null) {
132137
json[_targetArchitectureKey] = targetArchitecture.toString();
133138
}
139+
json[_targetOSConfigKey] = targetOS.toString();
134140
json[_linkModePreferenceKey] = linkModePreference.toString();
135141
if (cCompilerConfig != null) {
136142
json[_compilerKey] = cCompilerConfig.toJson();
@@ -170,9 +176,10 @@ extension CodeAssetLinkOutput on LinkOutput {
170176
}
171177

172178
const String _compilerKey = 'c_compiler';
179+
const String _linkModePreferenceKey = 'link_mode_preference';
180+
const String _targetAndroidNdkApiKey = 'target_android_ndk_api';
173181
const String _targetArchitectureKey = 'target_architecture';
174182
const String _targetIOSSdkKey = 'target_ios_sdk';
175-
const String _linkModePreferenceKey = 'link_mode_preference';
176183
const String _targetIOSVersionKey = 'target_ios_version';
177184
const String _targetMacOSVersionKey = 'target_macos_version';
178-
const String _targetAndroidNdkApiKey = 'target_android_ndk_api';
185+
const String _targetOSConfigKey = 'target_os';

pkgs/native_assets_cli/lib/src/code_assets/testing.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ Future<void> testCodeBuildHook({
4242
linkModePreference: linkModePreference ?? LinkModePreference.dynamic,
4343
cCompilerConfig: cCompiler,
4444
targetArchitecture: targetArchitecture ?? Architecture.current,
45+
targetOS: targetOS ?? OS.current,
4546
targetIOSSdk: targetIOSSdk,
4647
targetIOSVersion: targetIOSVersion,
4748
targetMacOSVersion: targetMacOSVersion,
@@ -58,7 +59,6 @@ Future<void> testCodeBuildHook({
5859

5960
await check(config, output);
6061
},
61-
targetOS: targetOS,
6262
buildAssetTypes: buildAssetTypes,
6363
linkingEnabled: linkingEnabled,
6464
);

0 commit comments

Comments
 (0)