From 27ba2f279075a9a66b48ce78d94d2999b06d6e26 Mon Sep 17 00:00:00 2001 From: Daco Harkes Date: Thu, 2 Jan 2025 20:26:02 +0100 Subject: [PATCH] [native assets] Roll dependencies (#160672) This PR rolls in a number of breaking changes from dart-lang/native: * `BuildMode` is no longer part of the protocol, so Flutter no longer passes it in. * This means all code dealing with the name conflict between `native_assets_cli.BuildMode` and `flutter_tools.BuildMode` has been cleaned up. * Also, the logs no longer mention the build mode. * The tests still exercise both modes, because linking only happens in release mode. * `OS` is no longer part of the main protocol, but of the "code" "protocol extension". * The code now aligns more with `OS?` being nullable in a bunch of places, since it is nullable if there's no code assets. * The OS-specific config is nested in an object per OS. * `CCompilerConfig`s fields are non-nullable now. * So instead of passing an object with nullable fields around, a null instead of the object is returned in various places. * `FileSystem` is now passed in to the native assets builder. This PR contains no feature changes. This PR will need to be followed up by restricting what environment variables are passed in (similar to https://github.com/dart-lang/native/pull/1764), I will do this in a follow up PR. Tests: * All existing features should be covered by existing tests. --- .../link_hook/hook/build.dart | 2 +- .../link_hook/hook/link.dart | 2 +- dev/integration_tests/link_hook/pubspec.yaml | 74 ++--- .../native_assets/android/native_assets.dart | 17 +- .../native_assets/ios/native_assets.dart | 5 +- .../native_assets/linux/native_assets.dart | 12 +- .../native_assets/macos/native_assets.dart | 7 +- .../macos/native_assets_host.dart | 6 +- .../isolated/native_assets/native_assets.dart | 289 +++++++++--------- .../native_assets/test/native_assets.dart | 2 +- .../native_assets/windows/native_assets.dart | 20 +- .../lib/src/update_packages_pins.dart | 4 +- packages/flutter_tools/pubspec.yaml | 12 +- .../templates/package_ffi/pubspec.yaml.tmpl | 4 +- .../test/projectName_test.dart.tmpl | 3 +- .../isolated/android/native_assets_test.dart | 6 +- .../targets/native_assets_test.dart | 4 +- .../fake_native_assets_build_runner.dart | 34 +-- .../isolated/ios/native_assets_test.dart | 10 +- .../isolated/linux/native_assets_test.dart | 4 +- .../isolated/macos/native_assets_test.dart | 12 +- .../isolated/native_assets_test.dart | 2 +- .../isolated/windows/native_assets_test.dart | 16 +- .../isolated/native_assets_test_utils.dart | 6 +- 24 files changed, 267 insertions(+), 286 deletions(-) diff --git a/dev/integration_tests/link_hook/hook/build.dart b/dev/integration_tests/link_hook/hook/build.dart index 9c50b1f2a6..5f5d1cef2e 100644 --- a/dev/integration_tests/link_hook/hook/build.dart +++ b/dev/integration_tests/link_hook/hook/build.dart @@ -9,7 +9,7 @@ import 'package:native_toolchain_c/native_toolchain_c.dart'; void main(List args) async { await build(args, (BuildConfig config, BuildOutputBuilder output) async { - if (!config.supportedAssetTypes.contains(CodeAsset.type)) { + if (!config.buildAssetTypes.contains(CodeAsset.type)) { return; } diff --git a/dev/integration_tests/link_hook/hook/link.dart b/dev/integration_tests/link_hook/hook/link.dart index 7793e71410..d507626c3f 100644 --- a/dev/integration_tests/link_hook/hook/link.dart +++ b/dev/integration_tests/link_hook/hook/link.dart @@ -6,7 +6,7 @@ import 'package:native_assets_cli/code_assets.dart'; void main(List args) async { await link(args, (LinkConfig config, LinkOutputBuilder output) async { - if (!config.supportedAssetTypes.contains(CodeAsset.type)) { + if (!config.buildAssetTypes.contains(CodeAsset.type)) { return; } final CodeAsset asset = config.codeAssets.single; diff --git a/dev/integration_tests/link_hook/pubspec.yaml b/dev/integration_tests/link_hook/pubspec.yaml index 678726d655..f53157364c 100644 --- a/dev/integration_tests/link_hook/pubspec.yaml +++ b/dev/integration_tests/link_hook/pubspec.yaml @@ -1,5 +1,5 @@ name: link_hook -description: "A new Dart FFI package project." +description: 'A new Dart FFI package project.' version: 0.0.1 environment: @@ -7,53 +7,21 @@ environment: dependencies: logging: 1.3.0 - native_assets_cli: 0.9.0 - native_toolchain_c: 0.6.0 + native_assets_cli: 0.10.0 + native_toolchain_c: 0.7.0 - _fe_analyzer_shared: 76.0.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - analyzer: 6.11.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - args: 2.6.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" async: 2.12.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - boolean_selector: 2.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" collection: 1.19.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - convert: 3.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - coverage: 1.11.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" crypto: 3.0.6 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" file: 7.0.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - frontend_server_client: 4.0.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" glob: 2.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - http_multi_server: 3.2.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - http_parser: 4.1.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - io: 1.0.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - js: 0.7.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - matcher: 0.12.17 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" meta: 1.15.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - mime: 1.0.6 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - node_preamble: 2.0.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - package_config: 2.1.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" path: 1.9.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - pool: 1.5.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" pub_semver: 2.1.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - shelf: 1.4.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - shelf_packages_handler: 3.0.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - shelf_static: 1.1.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - shelf_web_socket: 2.0.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - source_map_stack_trace: 2.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - source_maps: 0.10.13 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" source_span: 1.10.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - stack_trace: 1.12.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - stream_channel: 2.1.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" string_scanner: 1.4.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" term_glyph: 1.2.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - test_api: 0.7.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - test_core: 0.6.8 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" typed_data: 1.4.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - vm_service: 14.3.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - watcher: 1.1.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - web: 1.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - web_socket: 0.1.6 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - web_socket_channel: 3.0.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - webkit_inspection_protocol: 1.2.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" yaml: 3.1.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" dev_dependencies: @@ -62,10 +30,42 @@ dev_dependencies: flutter_lints: 5.0.0 test: 1.25.14 + _fe_analyzer_shared: 76.0.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + analyzer: 6.11.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + args: 2.6.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + boolean_selector: 2.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" cli_util: 0.4.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + convert: 3.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + coverage: 1.11.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" dart_style: 2.3.7 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - lints: 5.1.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + frontend_server_client: 4.0.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + http_multi_server: 3.2.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + http_parser: 4.1.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + io: 1.0.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + js: 0.7.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + lints: 5.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + matcher: 0.12.17 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + mime: 1.0.6 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + node_preamble: 2.0.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + package_config: 2.1.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + pool: 1.5.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" quiver: 3.2.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + shelf: 1.4.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + shelf_packages_handler: 3.0.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + shelf_static: 1.1.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + shelf_web_socket: 2.0.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + source_map_stack_trace: 2.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + source_maps: 0.10.13 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + stack_trace: 1.12.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + stream_channel: 2.1.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + test_api: 0.7.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + test_core: 0.6.8 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + vm_service: 14.3.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + watcher: 1.1.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + web: 1.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + web_socket: 0.1.6 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + web_socket_channel: 3.0.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + webkit_inspection_protocol: 1.2.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" yaml_edit: 2.2.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" -# PUBSPEC CHECKSUM: 3044 +# PUBSPEC CHECKSUM: 016c diff --git a/packages/flutter_tools/lib/src/isolated/native_assets/android/native_assets.dart b/packages/flutter_tools/lib/src/isolated/native_assets/android/native_assets.dart index 9ce2230d5e..77465d943e 100644 --- a/packages/flutter_tools/lib/src/isolated/native_assets/android/native_assets.dart +++ b/packages/flutter_tools/lib/src/isolated/native_assets/android/native_assets.dart @@ -9,7 +9,7 @@ import '../../../android/android_sdk.dart'; import '../../../android/gradle_utils.dart'; import '../../../base/common.dart'; import '../../../base/file_system.dart'; -import '../../../build_info.dart' hide BuildMode; +import '../../../build_info.dart'; int targetAndroidNdkApi(Map environmentDefines) { return int.parse(environmentDefines[kMinSdkVersion] ?? minSdkVersion); @@ -105,14 +105,17 @@ Future cCompilerConfigAndroid() async { if (androidSdk == null) { throwToolExit('Android SDK could not be found.'); } - final CCompilerConfig result = CCompilerConfig( - compiler: _toOptionalFileUri(androidSdk.getNdkClangPath()), - archiver: _toOptionalFileUri(androidSdk.getNdkArPath()), - linker: _toOptionalFileUri(androidSdk.getNdkLdPath()), - ); - if (result.compiler == null || result.archiver == null || result.linker == null) { + final Uri? compiler = _toOptionalFileUri(androidSdk.getNdkClangPath()); + final Uri? archiver = _toOptionalFileUri(androidSdk.getNdkArPath()); + final Uri? linker = _toOptionalFileUri(androidSdk.getNdkLdPath()); + if (compiler == null || archiver == null || linker == null) { throwToolExit('Android NDK Clang could not be found.'); } + final CCompilerConfig result = CCompilerConfig( + compiler: compiler, + archiver: archiver, + linker: linker, + ); return result; } diff --git a/packages/flutter_tools/lib/src/isolated/native_assets/ios/native_assets.dart b/packages/flutter_tools/lib/src/isolated/native_assets/ios/native_assets.dart index 9e0e4bd332..c041f04996 100644 --- a/packages/flutter_tools/lib/src/isolated/native_assets/ios/native_assets.dart +++ b/packages/flutter_tools/lib/src/isolated/native_assets/ios/native_assets.dart @@ -6,8 +6,7 @@ import 'package:native_assets_builder/native_assets_builder.dart'; import 'package:native_assets_cli/code_assets_builder.dart'; import '../../../base/file_system.dart'; -import '../../../build_info.dart' hide BuildMode; -import '../../../build_info.dart' as build_info; +import '../../../build_info.dart'; import '../macos/native_assets_host.dart'; // TODO(dcharkes): Fetch minimum iOS version from somewhere. https://github.com/flutter/flutter/issues/145104 @@ -100,7 +99,7 @@ Future copyNativeCodeAssetsIOS( Uri buildUri, Map> assetTargetLocations, String? codesignIdentity, - build_info.BuildMode buildMode, + BuildMode buildMode, FileSystem fileSystem, ) async { assert(assetTargetLocations.isNotEmpty); diff --git a/packages/flutter_tools/lib/src/isolated/native_assets/linux/native_assets.dart b/packages/flutter_tools/lib/src/isolated/native_assets/linux/native_assets.dart index 82e4d4f89e..3504eff41b 100644 --- a/packages/flutter_tools/lib/src/isolated/native_assets/linux/native_assets.dart +++ b/packages/flutter_tools/lib/src/isolated/native_assets/linux/native_assets.dart @@ -37,9 +37,11 @@ Future cCompilerConfigLinux() async { } binaryPaths[binary] = binaryFile.uri; } - return CCompilerConfig( - archiver: binaryPaths[kArBinary], - compiler: binaryPaths[kClangBinary], - linker: binaryPaths[kLdBinary], - ); + final Uri? archiver = binaryPaths[kArBinary]; + final Uri? compiler = binaryPaths[kClangBinary]; + final Uri? linker = binaryPaths[kLdBinary]; + if (archiver == null || compiler == null || linker == null) { + throwToolExit('Clang could not be found.'); + } + return CCompilerConfig(archiver: archiver, compiler: compiler, linker: linker); } diff --git a/packages/flutter_tools/lib/src/isolated/native_assets/macos/native_assets.dart b/packages/flutter_tools/lib/src/isolated/native_assets/macos/native_assets.dart index ca872ff7e7..e8257a24ab 100644 --- a/packages/flutter_tools/lib/src/isolated/native_assets/macos/native_assets.dart +++ b/packages/flutter_tools/lib/src/isolated/native_assets/macos/native_assets.dart @@ -6,8 +6,7 @@ import 'package:native_assets_builder/native_assets_builder.dart'; import 'package:native_assets_cli/code_assets_builder.dart'; import '../../../base/file_system.dart'; -import '../../../build_info.dart' hide BuildMode; -import '../../../build_info.dart' as build_info; +import '../../../build_info.dart'; import 'native_assets_host.dart'; // TODO(dcharkes): Fetch minimum MacOS version from somewhere. https://github.com/flutter/flutter/issues/145104 @@ -116,7 +115,7 @@ Future copyNativeCodeAssetsMacOS( Uri buildUri, Map> assetTargetLocations, String? codesignIdentity, - build_info.BuildMode buildMode, + BuildMode buildMode, FileSystem fileSystem, ) async { assert(assetTargetLocations.isNotEmpty); @@ -204,7 +203,7 @@ Future copyNativeCodeAssetsMacOSFlutterTester( Uri buildUri, Map> assetTargetLocations, String? codesignIdentity, - build_info.BuildMode buildMode, + BuildMode buildMode, FileSystem fileSystem, ) async { assert(assetTargetLocations.isNotEmpty); diff --git a/packages/flutter_tools/lib/src/isolated/native_assets/macos/native_assets_host.dart b/packages/flutter_tools/lib/src/isolated/native_assets/macos/native_assets_host.dart index 4ee588fbd4..f24070ad54 100644 --- a/packages/flutter_tools/lib/src/isolated/native_assets/macos/native_assets_host.dart +++ b/packages/flutter_tools/lib/src/isolated/native_assets/macos/native_assets_host.dart @@ -9,7 +9,7 @@ import 'package:native_assets_cli/code_assets_builder.dart'; import '../../../base/common.dart'; import '../../../base/file_system.dart'; import '../../../base/io.dart'; -import '../../../build_info.dart' as build_info; +import '../../../build_info.dart'; import '../../../convert.dart'; import '../../../globals.dart' as globals; @@ -136,7 +136,7 @@ Future> getInstallNamesDylib(File dylibFile) async { Future codesignDylib( String? codesignIdentity, - build_info.BuildMode buildMode, + BuildMode buildMode, FileSystemEntity target, ) async { if (codesignIdentity == null || codesignIdentity.isEmpty) { @@ -147,7 +147,7 @@ Future codesignDylib( '--force', '--sign', codesignIdentity, - if (buildMode != build_info.BuildMode.release) ...[ + if (buildMode != BuildMode.release) ...[ // Mimic Xcode's timestamp codesigning behavior on non-release binaries. '--timestamp=none', ], diff --git a/packages/flutter_tools/lib/src/isolated/native_assets/native_assets.dart b/packages/flutter_tools/lib/src/isolated/native_assets/native_assets.dart index 6a7a9d0c58..e2d9a2224e 100644 --- a/packages/flutter_tools/lib/src/isolated/native_assets/native_assets.dart +++ b/packages/flutter_tools/lib/src/isolated/native_assets/native_assets.dart @@ -14,7 +14,7 @@ import '../../base/common.dart'; import '../../base/file_system.dart'; import '../../base/logger.dart'; import '../../base/platform.dart'; -import '../../build_info.dart' as build_info; +import '../../build_info.dart'; import '../../build_system/exceptions.dart'; import '../../cache.dart'; import '../../convert.dart'; @@ -69,7 +69,7 @@ final class DartBuildResult { Future runFlutterSpecificDartBuild({ required Map environmentDefines, required FlutterNativeAssetsBuildRunner buildRunner, - required build_info.TargetPlatform targetPlatform, + required TargetPlatform targetPlatform, required Uri projectUri, required FileSystem fileSystem, }) async { @@ -77,7 +77,7 @@ Future runFlutterSpecificDartBuild({ final Uri buildUri = nativeAssetsBuildUri(projectUri, targetOS); final Directory buildDir = fileSystem.directory(buildUri); - final bool flutterTester = targetPlatform == build_info.TargetPlatform.tester; + final bool flutterTester = targetPlatform == TargetPlatform.tester; if (!await buildDir.exists()) { // Ensure the folder exists so the native build system can copy it even @@ -89,7 +89,7 @@ Future runFlutterSpecificDartBuild({ return const DartBuildResult.empty(); } - final build_info.BuildMode buildMode = _getBuildMode(environmentDefines, flutterTester); + final BuildMode buildMode = _getBuildMode(environmentDefines, flutterTester); final List architectures = flutterTester ? [Architecture.current] @@ -102,7 +102,7 @@ Future runFlutterSpecificDartBuild({ buildRunner: buildRunner, architectures: architectures, projectUri: projectUri, - buildMode: _nativeAssetsBuildMode(buildMode), + linkingEnabled: _nativeAssetsLinkingEnabled(buildMode), fileSystem: fileSystem, targetOS: targetOS, ); @@ -112,17 +112,17 @@ Future runFlutterSpecificDartBuild({ Future installCodeAssets({ required DartBuildResult dartBuildResult, required Map environmentDefines, - required build_info.TargetPlatform targetPlatform, + required TargetPlatform targetPlatform, required Uri projectUri, required FileSystem fileSystem, required Uri nativeAssetsFileUri, }) async { final OS targetOS = getNativeOSFromTargetPlatform(targetPlatform); final Uri buildUri = nativeAssetsBuildUri(projectUri, targetOS); - final bool flutterTester = targetPlatform == build_info.TargetPlatform.tester; - final build_info.BuildMode buildMode = _getBuildMode(environmentDefines, flutterTester); + final bool flutterTester = targetPlatform == TargetPlatform.tester; + final BuildMode buildMode = _getBuildMode(environmentDefines, flutterTester); - final String? codesignIdentity = environmentDefines[build_info.kCodesignIdentity]; + final String? codesignIdentity = environmentDefines[kCodesignIdentity]; final Map assetTargetLocations = assetTargetLocationsForOS( targetOS, dartBuildResult.codeAssets, @@ -161,37 +161,33 @@ abstract interface class FlutterNativeAssetsBuildRunner { /// Runs all [packagesWithNativeAssets] `build.dart`. Future build({ - required List supportedAssetTypes, + required List buildAssetTypes, required BuildConfigValidator configValidator, required BuildConfigCreator configCreator, required BuildValidator buildValidator, required ApplicationAssetValidator applicationAssetValidator, required bool includeParentEnvironment, - required BuildMode buildMode, - required OS targetOS, required Uri workingDirectory, required bool linkingEnabled, }); /// Runs all [packagesWithNativeAssets] `link.dart`. Future link({ - required List supportedAssetTypes, + required List buildAssetTypes, required LinkConfigValidator configValidator, required LinkConfigCreator configCreator, required LinkValidator linkValidator, required ApplicationAssetValidator applicationAssetValidator, required bool includeParentEnvironment, - required BuildMode buildMode, - required OS targetOS, required Uri workingDirectory, required BuildResult buildResult, }); /// The C compiler config to use for compilation. - Future get cCompilerConfig; + Future get cCompilerConfig; /// The NDK compiler to use to use for compilation for Android. - Future get ndkCCompilerConfig; + Future get ndkCCompilerConfig; } /// Uses `package:native_assets_builder` for its implementation. @@ -230,6 +226,10 @@ class FlutterNativeAssetsBuildRunnerImpl implements FlutterNativeAssetsBuildRunn late final NativeAssetsBuildRunner _buildRunner = NativeAssetsBuildRunner( logger: _logger, dartExecutable: _dartExecutable, + fileSystem: fileSystem, + // TODO(dcharkes): Filter the environment with + // NativeAssetsBuildRunner.hookEnvironmentVariablesFilter. + hookEnvironment: const LocalPlatform().environment, ); @override @@ -240,6 +240,7 @@ class FlutterNativeAssetsBuildRunnerImpl implements FlutterNativeAssetsBuildRunn @override Future> packagesWithNativeAssets() async { final PackageLayout packageLayout = PackageLayout.fromPackageConfig( + fileSystem, packageConfig, Uri.file(packageConfigPath), ); @@ -249,33 +250,28 @@ class FlutterNativeAssetsBuildRunnerImpl implements FlutterNativeAssetsBuildRunn return packageLayout.packagesWithAssets(Hook.build); } - @override @override Future build({ - required List supportedAssetTypes, + required List buildAssetTypes, required BuildConfigValidator configValidator, required BuildConfigCreator configCreator, required BuildValidator buildValidator, required ApplicationAssetValidator applicationAssetValidator, required bool includeParentEnvironment, - required BuildMode buildMode, - required OS targetOS, required Uri workingDirectory, required bool linkingEnabled, }) { final PackageLayout packageLayout = PackageLayout.fromPackageConfig( + fileSystem, packageConfig, Uri.file(packageConfigPath), ); return _buildRunner.build( - supportedAssetTypes: supportedAssetTypes, + buildAssetTypes: buildAssetTypes, configCreator: configCreator, configValidator: configValidator, buildValidator: buildValidator, applicationAssetValidator: applicationAssetValidator, - buildMode: buildMode, - includeParentEnvironment: includeParentEnvironment, - targetOS: targetOS, workingDirectory: workingDirectory, packageLayout: packageLayout, linkingEnabled: linkingEnabled, @@ -284,30 +280,26 @@ class FlutterNativeAssetsBuildRunnerImpl implements FlutterNativeAssetsBuildRunn @override Future link({ - required List supportedAssetTypes, + required List buildAssetTypes, required LinkConfigValidator configValidator, required LinkConfigCreator configCreator, required LinkValidator linkValidator, required ApplicationAssetValidator applicationAssetValidator, required bool includeParentEnvironment, - required BuildMode buildMode, - required OS targetOS, required Uri workingDirectory, required BuildResult buildResult, }) { final PackageLayout packageLayout = PackageLayout.fromPackageConfig( + fileSystem, packageConfig, Uri.file(packageConfigPath), ); return _buildRunner.link( - supportedAssetTypes: supportedAssetTypes, + buildAssetTypes: buildAssetTypes, configCreator: configCreator, configValidator: configValidator, linkValidator: linkValidator, applicationAssetValidator: applicationAssetValidator, - buildMode: buildMode, - includeParentEnvironment: includeParentEnvironment, - targetOS: targetOS, workingDirectory: workingDirectory, packageLayout: packageLayout, buildResult: buildResult, @@ -315,7 +307,7 @@ class FlutterNativeAssetsBuildRunnerImpl implements FlutterNativeAssetsBuildRunn } @override - late final Future cCompilerConfig = () { + late final Future cCompilerConfig = () { if (globals.platform.isMacOS || globals.platform.isIOS) { return cCompilerConfigMacOS(); } @@ -377,15 +369,18 @@ String _toNativeAssetsJsonFile(List kernelAssets) { return jsonEncode(jsonContents); } -/// Select the native asset build mode for a given Flutter build mode. -BuildMode _nativeAssetsBuildMode(build_info.BuildMode buildMode) { +/// Whether link hooks should be run. +/// +/// Link hooks should only be run for AOT Dart builds, which is the non-debug +/// modes in Flutter. +bool _nativeAssetsLinkingEnabled(BuildMode buildMode) { switch (buildMode) { - case build_info.BuildMode.debug: - return BuildMode.debug; - case build_info.BuildMode.jitRelease: - case build_info.BuildMode.profile: - case build_info.BuildMode.release: - return BuildMode.release; + case BuildMode.debug: + return false; + case BuildMode.jitRelease: + case BuildMode.profile: + case BuildMode.release: + return true; } } @@ -456,7 +451,7 @@ Future ensureNoNativeAssetsOrOsIsSupported( /// This should be the same for different archs, debug/release, etc. /// It should work for all macOS. Uri nativeAssetsBuildUri(Uri projectUri, OS os) { - final String buildDir = build_info.getBuildDirectory(); + final String buildDir = getBuildDirectory(); return projectUri.resolve('$buildDir/native_assets/$os/'); } @@ -529,7 +524,7 @@ Map assetTargetLocationsForOS( Future _copyNativeCodeAssetsForOS( OS targetOS, Uri buildUri, - build_info.BuildMode buildMode, + BuildMode buildMode, FileSystem fileSystem, Map assetTargetLocations, String? codesignIdentity, @@ -604,59 +599,61 @@ Future _runDartBuild({ required FlutterNativeAssetsBuildRunner buildRunner, required List architectures, required Uri projectUri, - required BuildMode buildMode, required FileSystem fileSystem, required OS? targetOS, + required bool linkingEnabled, }) async { - final bool linkingEnabled = buildMode == BuildMode.release; - final String architectureString = architectures.length == 1 ? architectures.single.toString() : architectures.toList().toString(); - globals.logger.printTrace('Building native assets for $targetOS $architectureString $buildMode.'); + globals.logger.printTrace('Building native assets for $targetOS $architectureString.'); final List assets = []; final Set dependencies = {}; - final build_info.EnvironmentType? environmentType; + final EnvironmentType? environmentType; if (targetOS == OS.iOS) { - final String? sdkRoot = environmentDefines[build_info.kSdkRoot]; + final String? sdkRoot = environmentDefines[kSdkRoot]; if (sdkRoot == null) { - throw MissingDefineException(build_info.kSdkRoot, 'native_assets'); + throw MissingDefineException(kSdkRoot, 'native_assets'); } environmentType = xcode.environmentTypeFromSdkroot(sdkRoot, fileSystem); } else { environmentType = null; } - final CCompilerConfig cCompilerConfig = + final CCompilerConfig? cCompilerConfig = targetOS == OS.android ? await buildRunner.ndkCCompilerConfig : await buildRunner.cCompilerConfig; - final String? codesignIdentity = environmentDefines[build_info.kCodesignIdentity]; + final String? codesignIdentity = environmentDefines[kCodesignIdentity]; assert(codesignIdentity == null || targetOS == OS.iOS || targetOS == OS.macOS); - final int? androidNdkApi = - targetOS == OS.android ? targetAndroidNdkApi(environmentDefines) : null; - final int? iOSVersion = targetOS == OS.iOS ? targetIOSVersion : null; - final int? macOSVersion = targetOS == OS.macOS ? targetMacOSVersion : null; - final IOSSdk? iOSSdk = targetOS == OS.iOS ? getIOSSdk(environmentType!) : null; - + final AndroidConfig? androidConfig = + targetOS == OS.android + ? AndroidConfig(targetNdkApi: targetAndroidNdkApi(environmentDefines)) + : null; + final IOSConfig? iosConfig = + targetOS == OS.iOS + ? IOSConfig(targetVersion: targetIOSVersion, targetSdk: getIOSSdk(environmentType!)) + : null; + final MacOSConfig? macOSConfig = + targetOS == OS.macOS ? MacOSConfig(targetVersion: targetMacOSVersion) : null; for (final Architecture architecture in architectures) { final BuildResult? buildResult = await buildRunner.build( - supportedAssetTypes: [CodeAsset.type], + buildAssetTypes: [CodeAsset.type], configCreator: () => BuildConfigBuilder()..setupCodeConfig( targetArchitecture: architecture, linkModePreference: LinkModePreference.dynamic, cCompilerConfig: cCompilerConfig, - targetAndroidNdkApi: androidNdkApi, - targetIOSVersion: iOSVersion, - targetMacOSVersion: macOSVersion, - targetIOSSdk: iOSSdk, + targetOS: targetOS!, + androidConfig: androidConfig, + iOSConfig: iosConfig, + macOSConfig: macOSConfig, ), configValidator: (BuildConfig config) async => [...await validateCodeAssetBuildConfig(config)], @@ -668,8 +665,6 @@ Future _runDartBuild({ (List assets) async => [ ...await validateCodeAssetInApplication(assets), ], - targetOS: targetOS!, - buildMode: buildMode, workingDirectory: projectUri, includeParentEnvironment: true, linkingEnabled: linkingEnabled, @@ -682,17 +677,17 @@ Future _runDartBuild({ assets.addAll(buildResult.encodedAssets); } else { final LinkResult? linkResult = await buildRunner.link( - supportedAssetTypes: [CodeAsset.type], + buildAssetTypes: [CodeAsset.type], configCreator: () => LinkConfigBuilder()..setupCodeConfig( targetArchitecture: architecture, linkModePreference: LinkModePreference.dynamic, cCompilerConfig: cCompilerConfig, - targetAndroidNdkApi: androidNdkApi, - targetIOSVersion: iOSVersion, - targetMacOSVersion: macOSVersion, - targetIOSSdk: iOSSdk, + targetOS: targetOS!, + androidConfig: androidConfig, + iOSConfig: iosConfig, + macOSConfig: macOSConfig, ), configValidator: (LinkConfig config) async => [...await validateCodeAssetLinkConfig(config)], @@ -707,8 +702,6 @@ Future _runDartBuild({ workingDirectory: projectUri, includeParentEnvironment: true, buildResult: buildResult, - targetOS: targetOS, - buildMode: buildMode, ); if (linkResult == null) { _throwNativeAssetsLinkFailed(); @@ -723,14 +716,12 @@ Future _runDartBuild({ .where((EncodedAsset asset) => asset.type == CodeAsset.type) .map(CodeAsset.fromEncoded) .toList(); - globals.logger.printTrace( - 'Building native assets for $targetOS $architectureString $buildMode done.', - ); + globals.logger.printTrace('Building native assets for $targetOS $architectureString done.'); return DartBuildResult(codeAssets, dependencies.toList()); } List _architecturesForOS( - build_info.TargetPlatform targetPlatform, + TargetPlatform targetPlatform, OS targetOS, Map environmentDefines, ) { @@ -740,25 +731,20 @@ List _architecturesForOS( case OS.windows: return [_getNativeArchitecture(targetPlatform)]; case OS.macOS: - final List darwinArchs = + final List darwinArchs = _emptyToNull( - environmentDefines[build_info.kDarwinArchs], - )?.split(' ').map(build_info.getDarwinArchForName).toList() ?? - [build_info.DarwinArch.x86_64, build_info.DarwinArch.arm64]; + environmentDefines[kDarwinArchs], + )?.split(' ').map(getDarwinArchForName).toList() ?? + [DarwinArch.x86_64, DarwinArch.arm64]; return darwinArchs.map(getNativeMacOSArchitecture).toList(); case OS.android: - final String? androidArchsEnvironment = environmentDefines[build_info.kAndroidArchs]; - final List androidArchs = _androidArchs( - targetPlatform, - androidArchsEnvironment, - ); + final String? androidArchsEnvironment = environmentDefines[kAndroidArchs]; + final List androidArchs = _androidArchs(targetPlatform, androidArchsEnvironment); return androidArchs.map(getNativeAndroidArchitecture).toList(); case OS.iOS: - final List iosArchs = - _emptyToNull( - environmentDefines[build_info.kIosArchs], - )?.split(' ').map(build_info.getIOSArchForName).toList() ?? - [build_info.DarwinArch.arm64]; + final List iosArchs = + _emptyToNull(environmentDefines[kIosArchs])?.split(' ').map(getIOSArchForName).toList() ?? + [DarwinArch.arm64]; return iosArchs.map(getNativeIOSArchitecture).toList(); default: // TODO(dacoharkes): Implement other OSes. https://github.com/flutter/flutter/issues/129757 @@ -767,25 +753,25 @@ List _architecturesForOS( } } -Architecture _getNativeArchitecture(build_info.TargetPlatform targetPlatform) { +Architecture _getNativeArchitecture(TargetPlatform targetPlatform) { switch (targetPlatform) { - case build_info.TargetPlatform.linux_x64: - case build_info.TargetPlatform.windows_x64: + case TargetPlatform.linux_x64: + case TargetPlatform.windows_x64: return Architecture.x64; - case build_info.TargetPlatform.linux_arm64: - case build_info.TargetPlatform.windows_arm64: + case TargetPlatform.linux_arm64: + case TargetPlatform.windows_arm64: return Architecture.arm64; - case build_info.TargetPlatform.android: - case build_info.TargetPlatform.ios: - case build_info.TargetPlatform.darwin: - case build_info.TargetPlatform.fuchsia_arm64: - case build_info.TargetPlatform.fuchsia_x64: - case build_info.TargetPlatform.tester: - case build_info.TargetPlatform.web_javascript: - case build_info.TargetPlatform.android_arm: - case build_info.TargetPlatform.android_arm64: - case build_info.TargetPlatform.android_x64: - case build_info.TargetPlatform.android_x86: + case TargetPlatform.android: + case TargetPlatform.ios: + case TargetPlatform.darwin: + case TargetPlatform.fuchsia_arm64: + case TargetPlatform.fuchsia_x64: + case TargetPlatform.tester: + case TargetPlatform.web_javascript: + case TargetPlatform.android_arm: + case TargetPlatform.android_arm64: + case TargetPlatform.android_x64: + case TargetPlatform.android_x86: throw Exception('Unknown targetPlatform: $targetPlatform.'); } } @@ -793,7 +779,7 @@ Architecture _getNativeArchitecture(build_info.TargetPlatform targetPlatform) { Future _copyNativeCodeAssetsToBundleOnWindowsLinux( Uri buildUri, Map assetTargetLocations, - build_info.BuildMode buildMode, + BuildMode buildMode, FileSystem fileSystem, ) async { assert(assetTargetLocations.isNotEmpty); @@ -819,28 +805,28 @@ Never _throwNativeAssetsLinkFailed() { throwToolExit('Linking native assets failed. See the logs for more details.'); } -OS getNativeOSFromTargetPlatform(build_info.TargetPlatform platform) { +OS getNativeOSFromTargetPlatform(TargetPlatform platform) { switch (platform) { - case build_info.TargetPlatform.ios: + case TargetPlatform.ios: return OS.iOS; - case build_info.TargetPlatform.darwin: + case TargetPlatform.darwin: return OS.macOS; - case build_info.TargetPlatform.linux_x64: - case build_info.TargetPlatform.linux_arm64: + case TargetPlatform.linux_x64: + case TargetPlatform.linux_arm64: return OS.linux; - case build_info.TargetPlatform.windows_x64: - case build_info.TargetPlatform.windows_arm64: + case TargetPlatform.windows_x64: + case TargetPlatform.windows_arm64: return OS.windows; - case build_info.TargetPlatform.fuchsia_arm64: - case build_info.TargetPlatform.fuchsia_x64: + case TargetPlatform.fuchsia_arm64: + case TargetPlatform.fuchsia_x64: return OS.fuchsia; - case build_info.TargetPlatform.android: - case build_info.TargetPlatform.android_arm: - case build_info.TargetPlatform.android_arm64: - case build_info.TargetPlatform.android_x64: - case build_info.TargetPlatform.android_x86: + case TargetPlatform.android: + case TargetPlatform.android_arm: + case TargetPlatform.android_arm64: + case TargetPlatform.android_x64: + case TargetPlatform.android_x86: return OS.android; - case build_info.TargetPlatform.tester: + case TargetPlatform.tester: if (const LocalPlatform().isMacOS) { return OS.macOS; } else if (const LocalPlatform().isLinux) { @@ -850,39 +836,36 @@ OS getNativeOSFromTargetPlatform(build_info.TargetPlatform platform) { } else { throw StateError('Unknown operating system'); } - case build_info.TargetPlatform.web_javascript: + case TargetPlatform.web_javascript: throw StateError('No dart builds for web yet.'); } } -List _androidArchs( - build_info.TargetPlatform targetPlatform, - String? androidArchsEnvironment, -) { +List _androidArchs(TargetPlatform targetPlatform, String? androidArchsEnvironment) { switch (targetPlatform) { - case build_info.TargetPlatform.android_arm: - return [build_info.AndroidArch.armeabi_v7a]; - case build_info.TargetPlatform.android_arm64: - return [build_info.AndroidArch.arm64_v8a]; - case build_info.TargetPlatform.android_x64: - return [build_info.AndroidArch.x86_64]; - case build_info.TargetPlatform.android_x86: - return [build_info.AndroidArch.x86]; - case build_info.TargetPlatform.android: + case TargetPlatform.android_arm: + return [AndroidArch.armeabi_v7a]; + case TargetPlatform.android_arm64: + return [AndroidArch.arm64_v8a]; + case TargetPlatform.android_x64: + return [AndroidArch.x86_64]; + case TargetPlatform.android_x86: + return [AndroidArch.x86]; + case TargetPlatform.android: if (androidArchsEnvironment == null) { - throw MissingDefineException(build_info.kAndroidArchs, 'native_assets'); + throw MissingDefineException(kAndroidArchs, 'native_assets'); } - return androidArchsEnvironment.split(' ').map(build_info.getAndroidArchForName).toList(); - case build_info.TargetPlatform.darwin: - case build_info.TargetPlatform.fuchsia_arm64: - case build_info.TargetPlatform.fuchsia_x64: - case build_info.TargetPlatform.ios: - case build_info.TargetPlatform.linux_arm64: - case build_info.TargetPlatform.linux_x64: - case build_info.TargetPlatform.tester: - case build_info.TargetPlatform.web_javascript: - case build_info.TargetPlatform.windows_x64: - case build_info.TargetPlatform.windows_arm64: + return androidArchsEnvironment.split(' ').map(getAndroidArchForName).toList(); + case TargetPlatform.darwin: + case TargetPlatform.fuchsia_arm64: + case TargetPlatform.fuchsia_x64: + case TargetPlatform.ios: + case TargetPlatform.linux_arm64: + case TargetPlatform.linux_x64: + case TargetPlatform.tester: + case TargetPlatform.web_javascript: + case TargetPlatform.windows_x64: + case TargetPlatform.windows_arm64: throwToolExit('Unsupported Android target platform: $targetPlatform.'); } } @@ -920,13 +903,13 @@ const Map> _osTargets = >{ OS.windows: {Architecture.arm64, Architecture.ia32, Architecture.x64}, }; -build_info.BuildMode _getBuildMode(Map environmentDefines, bool isFlutterTester) { +BuildMode _getBuildMode(Map environmentDefines, bool isFlutterTester) { if (isFlutterTester) { - return build_info.BuildMode.debug; + return BuildMode.debug; } - final String? environmentBuildMode = environmentDefines[build_info.kBuildMode]; + final String? environmentBuildMode = environmentDefines[kBuildMode]; if (environmentBuildMode == null) { - throw MissingDefineException(build_info.kBuildMode, 'native_assets'); + throw MissingDefineException(kBuildMode, 'native_assets'); } - return build_info.BuildMode.fromCliName(environmentBuildMode); + return BuildMode.fromCliName(environmentBuildMode); } diff --git a/packages/flutter_tools/lib/src/isolated/native_assets/test/native_assets.dart b/packages/flutter_tools/lib/src/isolated/native_assets/test/native_assets.dart index 7d12c2ce17..a09a057bcc 100644 --- a/packages/flutter_tools/lib/src/isolated/native_assets/test/native_assets.dart +++ b/packages/flutter_tools/lib/src/isolated/native_assets/test/native_assets.dart @@ -4,7 +4,7 @@ // Logic for native assets shared between all host OSes. -import 'package:native_assets_cli/native_assets_cli.dart'; +import 'package:native_assets_cli/code_assets.dart' show OS; import '../../../base/platform.dart'; import '../../../build_info.dart'; diff --git a/packages/flutter_tools/lib/src/isolated/native_assets/windows/native_assets.dart b/packages/flutter_tools/lib/src/isolated/native_assets/windows/native_assets.dart index 2da8894873..63164e8b58 100644 --- a/packages/flutter_tools/lib/src/isolated/native_assets/windows/native_assets.dart +++ b/packages/flutter_tools/lib/src/isolated/native_assets/windows/native_assets.dart @@ -7,7 +7,7 @@ import 'package:native_assets_cli/code_assets_builder.dart'; import '../../../globals.dart' as globals; import '../../../windows/visual_studio.dart'; -Future cCompilerConfigWindows() async { +Future cCompilerConfigWindows() async { final VisualStudio visualStudio = VisualStudio( fileSystem: globals.fs, platform: globals.platform, @@ -16,11 +16,21 @@ Future cCompilerConfigWindows() async { osUtils: globals.os, ); + final Uri? compiler = _toOptionalFileUri(visualStudio.clPath); + final Uri? archiver = _toOptionalFileUri(visualStudio.libPath); + final Uri? linker = _toOptionalFileUri(visualStudio.linkPath); + final Uri? envScript = _toOptionalFileUri(visualStudio.vcvarsPath); + + if (compiler == null || archiver == null || linker == null || envScript == null) { + // Visual Studio might not be installed, don't exit tool. + return null; + } + return CCompilerConfig( - compiler: _toOptionalFileUri(visualStudio.clPath), - linker: _toOptionalFileUri(visualStudio.linkPath), - archiver: _toOptionalFileUri(visualStudio.libPath), - envScript: _toOptionalFileUri(visualStudio.vcvarsPath), + compiler: compiler, + archiver: archiver, + linker: linker, + envScript: envScript, envScriptArgs: [], ); } diff --git a/packages/flutter_tools/lib/src/update_packages_pins.dart b/packages/flutter_tools/lib/src/update_packages_pins.dart index 38a7b1e548..a5c355e017 100644 --- a/packages/flutter_tools/lib/src/update_packages_pins.dart +++ b/packages/flutter_tools/lib/src/update_packages_pins.dart @@ -27,9 +27,9 @@ const Map kManuallyPinnedDependencies = { 'intl': '0.19.0', // 0.20.0 introduces new transitive dependencies that are not (yet) cleared in Flutter's allow list. 'native_assets_builder': - '0.9.0', // Under active development with breaking changes until 1.0.0. Manually rolled by @dcharkes. + '0.10.2', // Under active development with breaking changes until 1.0.0. Manually rolled by @dcharkes. 'native_assets_cli': - '0.9.0', // Under active development with breaking changes until 1.0.0. Manually rolled by @dcharkes. + '0.10.0', // Under active development with breaking changes until 1.0.0. Manually rolled by @dcharkes. 'material_color_utilities': '0.11.1', // Keep pinned to latest until 1.0.0. 'leak_tracker': '10.0.8', // https://github.com/flutter/devtools/issues/3951 'leak_tracker_testing': '3.0.1', // https://github.com/flutter/devtools/issues/3951 diff --git a/packages/flutter_tools/pubspec.yaml b/packages/flutter_tools/pubspec.yaml index d7b71568df..ee4717cfe3 100644 --- a/packages/flutter_tools/pubspec.yaml +++ b/packages/flutter_tools/pubspec.yaml @@ -55,8 +55,8 @@ dependencies: unified_analytics: 7.0.1 graphs: 2.3.2 - native_assets_builder: 0.9.0 - native_assets_cli: 0.9.0 + native_assets_builder: 0.10.2 + native_assets_cli: 0.10.0 # We depend on very specific internal implementation details of the # 'test' package, which change between versions, so when upgrading @@ -85,10 +85,8 @@ dependencies: glob: 2.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" http_parser: 4.1.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" io: 1.0.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - js: 0.7.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" json_rpc_2: 3.0.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" matcher: 0.12.17 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - node_preamble: 2.0.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" petitparser: 6.0.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" platform: 3.1.6 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" shelf_packages_handler: 3.0.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -101,7 +99,6 @@ dependencies: string_scanner: 1.4.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" sync_http: 0.3.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" term_glyph: 1.2.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - test: 1.25.14 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" typed_data: 1.4.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" vm_service_interface: 2.0.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" watcher: 1.1.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -115,10 +112,13 @@ dev_dependencies: pubspec_parse: 1.4.0 checked_yaml: 2.0.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + js: 0.7.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" json_annotation: 4.9.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + node_preamble: 2.0.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + test: 1.25.14 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" dartdoc: # Exclude this package from the hosted API docs. nodoc: true -# PUBSPEC CHECKSUM: c6ec +# PUBSPEC CHECKSUM: a23f diff --git a/packages/flutter_tools/templates/package_ffi/pubspec.yaml.tmpl b/packages/flutter_tools/templates/package_ffi/pubspec.yaml.tmpl index a14c84d5f9..fb99bc8965 100644 --- a/packages/flutter_tools/templates/package_ffi/pubspec.yaml.tmpl +++ b/packages/flutter_tools/templates/package_ffi/pubspec.yaml.tmpl @@ -8,8 +8,8 @@ environment: dependencies: logging: ^1.2.0 - native_assets_cli: ^0.9.0 - native_toolchain_c: ^0.6.0 + native_assets_cli: ^0.10.0 + native_toolchain_c: ^0.7.0 dev_dependencies: ffi: ^2.1.3 diff --git a/packages/flutter_tools/templates/package_ffi/test/projectName_test.dart.tmpl b/packages/flutter_tools/templates/package_ffi/test/projectName_test.dart.tmpl index f19bce25aa..030fc9d247 100644 --- a/packages/flutter_tools/templates/package_ffi/test/projectName_test.dart.tmpl +++ b/packages/flutter_tools/templates/package_ffi/test/projectName_test.dart.tmpl @@ -4,8 +4,7 @@ import 'package:{{projectName}}/{{projectName}}.dart'; void main() { test('invoke native function', () { - // Tests are run in debug mode. - expect(sum(24, 18), 1042); + expect(sum(24, 18), 42); }); test('invoke async native callback', () async { diff --git a/packages/flutter_tools/test/general.shard/isolated/android/native_assets_test.dart b/packages/flutter_tools/test/general.shard/isolated/android/native_assets_test.dart index 3cffbdf005..b5a04e81c4 100644 --- a/packages/flutter_tools/test/general.shard/isolated/android/native_assets_test.dart +++ b/packages/flutter_tools/test/general.shard/isolated/android/native_assets_test.dart @@ -17,7 +17,7 @@ import 'package:flutter_tools/src/build_system/targets/native_assets.dart'; import 'package:flutter_tools/src/features.dart'; import 'package:flutter_tools/src/globals.dart' as globals; import 'package:flutter_tools/src/isolated/native_assets/native_assets.dart'; -import 'package:native_assets_cli/code_assets_builder.dart' hide BuildMode; +import 'package:native_assets_cli/code_assets_builder.dart'; import 'package:package_config/package_config_types.dart'; import '../../../src/common.dart'; @@ -108,8 +108,8 @@ void main() { expect( (globals.logger as BufferLogger).traceText, stringContainsInOrder([ - 'Building native assets for android arm64 $buildMode.', - 'Building native assets for android arm64 $buildMode done.', + 'Building native assets for android arm64.', + 'Building native assets for android arm64 done.', ]), ); diff --git a/packages/flutter_tools/test/general.shard/isolated/build_system/targets/native_assets_test.dart b/packages/flutter_tools/test/general.shard/isolated/build_system/targets/native_assets_test.dart index 6fc9da0c2a..b27898b2ac 100644 --- a/packages/flutter_tools/test/general.shard/isolated/build_system/targets/native_assets_test.dart +++ b/packages/flutter_tools/test/general.shard/isolated/build_system/targets/native_assets_test.dart @@ -13,8 +13,7 @@ import 'package:flutter_tools/src/build_system/exceptions.dart'; import 'package:flutter_tools/src/build_system/targets/native_assets.dart'; import 'package:flutter_tools/src/features.dart'; import 'package:flutter_tools/src/isolated/native_assets/native_assets.dart'; -import 'package:native_assets_cli/code_assets_builder.dart' hide BuildMode; -import 'package:native_assets_cli/native_assets_cli.dart' as native_assets_cli show BuildMode; +import 'package:native_assets_cli/code_assets_builder.dart'; import 'package:package_config/package_config.dart' show Package; import '../../../../src/common.dart'; @@ -279,7 +278,6 @@ void main() { linkResult: FakeFlutterNativeAssetsBuilderResult.fromAssets(codeAssets: codeAssets), ); await DartBuildForNative(buildRunner: buildRunner).build(androidEnvironment); - expect(buildRunner.lastBuildMode, native_assets_cli.BuildMode.release); }, ); } diff --git a/packages/flutter_tools/test/general.shard/isolated/fake_native_assets_build_runner.dart b/packages/flutter_tools/test/general.shard/isolated/fake_native_assets_build_runner.dart index de6ed7809a..bf95e0558d 100644 --- a/packages/flutter_tools/test/general.shard/isolated/fake_native_assets_build_runner.dart +++ b/packages/flutter_tools/test/general.shard/isolated/fake_native_assets_build_runner.dart @@ -19,10 +19,9 @@ class FakeFlutterNativeAssetsBuildRunner implements FlutterNativeAssetsBuildRunn this.onLink, this.buildResult = const FakeFlutterNativeAssetsBuilderResult(), this.linkResult = const FakeFlutterNativeAssetsBuilderResult(), - CCompilerConfig? cCompilerConfigResult, - CCompilerConfig? ndkCCompilerConfigResult, - }) : cCompilerConfigResult = cCompilerConfigResult ?? CCompilerConfig(), - ndkCCompilerConfigResult = ndkCCompilerConfigResult ?? CCompilerConfig(); + this.cCompilerConfigResult, + this.ndkCCompilerConfigResult, + }); final BuildResult? Function(BuildConfig)? onBuild; final LinkResult? Function(LinkConfig)? onLink; @@ -30,25 +29,22 @@ class FakeFlutterNativeAssetsBuildRunner implements FlutterNativeAssetsBuildRunn final LinkResult? linkResult; final bool hasPackageConfigResult; final List packagesWithNativeAssetsResult; - final CCompilerConfig cCompilerConfigResult; - final CCompilerConfig ndkCCompilerConfigResult; + final CCompilerConfig? cCompilerConfigResult; + final CCompilerConfig? ndkCCompilerConfigResult; int buildInvocations = 0; int linkInvocations = 0; int hasPackageConfigInvocations = 0; int packagesWithNativeAssetsInvocations = 0; - BuildMode? lastBuildMode; @override Future build({ - required List supportedAssetTypes, + required List buildAssetTypes, required BuildConfigValidator configValidator, required BuildConfigCreator configCreator, required BuildValidator buildValidator, required ApplicationAssetValidator applicationAssetValidator, required bool includeParentEnvironment, - required BuildMode buildMode, - required OS targetOS, required Uri workingDirectory, required bool linkingEnabled, }) async { @@ -59,9 +55,7 @@ class FakeFlutterNativeAssetsBuildRunner implements FlutterNativeAssetsBuildRunn ..setupHookConfig( packageRoot: package.root, packageName: package.name, - targetOS: targetOS, - supportedAssetTypes: supportedAssetTypes, - buildMode: buildMode, + buildAssetTypes: buildAssetTypes, ) ..setupBuildConfig(dryRun: false, linkingEnabled: linkingEnabled) ..setupBuildRunConfig( @@ -72,7 +66,6 @@ class FakeFlutterNativeAssetsBuildRunner implements FlutterNativeAssetsBuildRunn if (onBuild != null) { result = onBuild!(buildConfig); } - lastBuildMode = buildConfig.buildMode; buildInvocations++; } return result; @@ -80,14 +73,12 @@ class FakeFlutterNativeAssetsBuildRunner implements FlutterNativeAssetsBuildRunn @override Future link({ - required List supportedAssetTypes, + required List buildAssetTypes, required LinkConfigCreator configCreator, required LinkConfigValidator configValidator, required LinkValidator linkValidator, required ApplicationAssetValidator applicationAssetValidator, required bool includeParentEnvironment, - required BuildMode buildMode, - required OS targetOS, required Uri workingDirectory, required BuildResult buildResult, }) async { @@ -98,9 +89,7 @@ class FakeFlutterNativeAssetsBuildRunner implements FlutterNativeAssetsBuildRunn ..setupHookConfig( packageRoot: package.root, packageName: package.name, - targetOS: targetOS, - supportedAssetTypes: supportedAssetTypes, - buildMode: buildMode, + buildAssetTypes: buildAssetTypes, ) ..setupLinkRunConfig( outputDirectory: Uri.parse('build-out-dir'), @@ -111,7 +100,6 @@ class FakeFlutterNativeAssetsBuildRunner implements FlutterNativeAssetsBuildRunn if (onLink != null) { result = onLink!(buildConfig); } - lastBuildMode = buildMode; linkInvocations++; } return result; @@ -130,10 +118,10 @@ class FakeFlutterNativeAssetsBuildRunner implements FlutterNativeAssetsBuildRunn } @override - Future get cCompilerConfig async => cCompilerConfigResult; + Future get cCompilerConfig async => cCompilerConfigResult; @override - Future get ndkCCompilerConfig async => cCompilerConfigResult; + Future get ndkCCompilerConfig async => cCompilerConfigResult; } final class FakeFlutterNativeAssetsBuilderResult implements BuildResult, LinkResult { diff --git a/packages/flutter_tools/test/general.shard/isolated/ios/native_assets_test.dart b/packages/flutter_tools/test/general.shard/isolated/ios/native_assets_test.dart index 261fbbc91c..dad124e114 100644 --- a/packages/flutter_tools/test/general.shard/isolated/ios/native_assets_test.dart +++ b/packages/flutter_tools/test/general.shard/isolated/ios/native_assets_test.dart @@ -15,7 +15,7 @@ import 'package:flutter_tools/src/build_system/targets/native_assets.dart'; import 'package:flutter_tools/src/features.dart'; import 'package:flutter_tools/src/globals.dart' as globals; import 'package:flutter_tools/src/isolated/native_assets/native_assets.dart'; -import 'package:native_assets_cli/code_assets_builder.dart' hide BuildMode; +import 'package:native_assets_cli/code_assets_builder.dart'; import 'package:package_config/package_config_types.dart'; import '../../../src/common.dart'; @@ -185,14 +185,14 @@ void main() { packagesWithNativeAssetsResult: [Package('bar', projectUri)], onBuild: (BuildConfig config) => FakeFlutterNativeAssetsBuilderResult.fromAssets( - codeAssets: codeAssets(config.targetOS, config.codeConfig), + codeAssets: codeAssets(config.codeConfig.targetOS, config.codeConfig), ), onLink: (LinkConfig config) => buildMode == BuildMode.debug ? null : FakeFlutterNativeAssetsBuilderResult.fromAssets( - codeAssets: codeAssets(config.targetOS, config.codeConfig), + codeAssets: codeAssets(config.codeConfig.targetOS, config.codeConfig), ), ); final Map environmentDefines = { @@ -218,8 +218,8 @@ void main() { expect( (globals.logger as BufferLogger).traceText, stringContainsInOrder([ - 'Building native assets for ios [arm64, x64] $buildMode.', - 'Building native assets for ios [arm64, x64] $buildMode done.', + 'Building native assets for ios [arm64, x64].', + 'Building native assets for ios [arm64, x64] done.', ]), ); expect(environment.buildDir.childFile(InstallCodeAssets.nativeAssetsFilename), exists); diff --git a/packages/flutter_tools/test/general.shard/isolated/linux/native_assets_test.dart b/packages/flutter_tools/test/general.shard/isolated/linux/native_assets_test.dart index 3631a02d9a..d08b8331f1 100644 --- a/packages/flutter_tools/test/general.shard/isolated/linux/native_assets_test.dart +++ b/packages/flutter_tools/test/general.shard/isolated/linux/native_assets_test.dart @@ -15,7 +15,7 @@ import 'package:flutter_tools/src/dart/package_map.dart'; import 'package:flutter_tools/src/features.dart'; import 'package:flutter_tools/src/globals.dart' as globals; import 'package:flutter_tools/src/isolated/native_assets/native_assets.dart'; -import 'package:native_assets_cli/code_assets_builder.dart' hide BuildMode; +import 'package:native_assets_cli/code_assets_builder.dart'; import 'package:package_config/package_config_types.dart'; import '../../../src/common.dart'; @@ -118,7 +118,7 @@ void main() { fileSystem, logger, ); - final CCompilerConfig result = await runner.cCompilerConfig; + final CCompilerConfig result = (await runner.cCompilerConfig)!; expect(result.compiler, Uri.file('/some/path/to/clang')); }, ); diff --git a/packages/flutter_tools/test/general.shard/isolated/macos/native_assets_test.dart b/packages/flutter_tools/test/general.shard/isolated/macos/native_assets_test.dart index 9567e78d07..c978a5bc3b 100644 --- a/packages/flutter_tools/test/general.shard/isolated/macos/native_assets_test.dart +++ b/packages/flutter_tools/test/general.shard/isolated/macos/native_assets_test.dart @@ -15,7 +15,7 @@ import 'package:flutter_tools/src/dart/package_map.dart'; import 'package:flutter_tools/src/features.dart'; import 'package:flutter_tools/src/globals.dart' as globals; import 'package:flutter_tools/src/isolated/native_assets/native_assets.dart'; -import 'package:native_assets_cli/code_assets_builder.dart' hide BuildMode; +import 'package:native_assets_cli/code_assets_builder.dart'; import 'package:package_config/package_config_types.dart'; import '../../../src/common.dart'; @@ -281,14 +281,14 @@ void main() { packagesWithNativeAssetsResult: [Package('bar', projectUri)], onBuild: (BuildConfig config) => FakeFlutterNativeAssetsBuilderResult.fromAssets( - codeAssets: codeAssets(config.targetOS, config.codeConfig), + codeAssets: codeAssets(config.codeConfig.targetOS, config.codeConfig), ), onLink: (LinkConfig config) => buildMode == BuildMode.debug ? null : FakeFlutterNativeAssetsBuilderResult.fromAssets( - codeAssets: codeAssets(config.targetOS, config.codeConfig), + codeAssets: codeAssets(config.codeConfig.targetOS, config.codeConfig), ), ); final Map environmentDefines = { @@ -324,8 +324,8 @@ void main() { expect( (globals.logger as BufferLogger).traceText, stringContainsInOrder([ - 'Building native assets for macos $expectedArchsBeingBuilt $buildMode.', - 'Building native assets for macos $expectedArchsBeingBuilt $buildMode done.', + 'Building native assets for macos $expectedArchsBeingBuilt.', + 'Building native assets for macos $expectedArchsBeingBuilt done.', ]), ); final String nativeAssetsFileContent = @@ -403,7 +403,7 @@ InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault fileSystem, logger, ); - final CCompilerConfig result = await runner.cCompilerConfig; + final CCompilerConfig result = (await runner.cCompilerConfig)!; expect( result.compiler, Uri.file( diff --git a/packages/flutter_tools/test/general.shard/isolated/native_assets_test.dart b/packages/flutter_tools/test/general.shard/isolated/native_assets_test.dart index d65ad71c66..1760cc440e 100644 --- a/packages/flutter_tools/test/general.shard/isolated/native_assets_test.dart +++ b/packages/flutter_tools/test/general.shard/isolated/native_assets_test.dart @@ -14,7 +14,7 @@ import 'package:flutter_tools/src/build_system/targets/native_assets.dart'; import 'package:flutter_tools/src/features.dart'; import 'package:flutter_tools/src/globals.dart' as globals; import 'package:flutter_tools/src/isolated/native_assets/native_assets.dart'; -import 'package:native_assets_cli/code_assets_builder.dart' hide BuildMode; +import 'package:native_assets_cli/code_assets_builder.dart'; import 'package:package_config/package_config_types.dart'; import '../../src/common.dart'; diff --git a/packages/flutter_tools/test/general.shard/isolated/windows/native_assets_test.dart b/packages/flutter_tools/test/general.shard/isolated/windows/native_assets_test.dart index 281fb43163..61612dae0c 100644 --- a/packages/flutter_tools/test/general.shard/isolated/windows/native_assets_test.dart +++ b/packages/flutter_tools/test/general.shard/isolated/windows/native_assets_test.dart @@ -15,8 +15,8 @@ import 'package:flutter_tools/src/dart/package_map.dart'; import 'package:flutter_tools/src/features.dart'; import 'package:flutter_tools/src/globals.dart' as globals; import 'package:flutter_tools/src/isolated/native_assets/native_assets.dart'; -import 'package:native_assets_cli/code_assets_builder.dart' hide BuildMode; -import 'package:native_assets_cli/native_assets_cli_internal.dart' as native_assets_cli; +import 'package:native_assets_cli/code_assets.dart' as native_assets_cli; +import 'package:native_assets_cli/code_assets_builder.dart'; import 'package:package_config/package_config_types.dart'; import '../../../src/common.dart'; @@ -136,8 +136,8 @@ void main() { expect( (globals.logger as BufferLogger).traceText, stringContainsInOrder([ - 'Building native assets for $expectedOS $expectedArch $buildMode.', - 'Building native assets for $expectedOS $expectedArch $buildMode done.', + 'Building native assets for $expectedOS $expectedArch.', + 'Building native assets for $expectedOS $expectedArch done.', ]), ); expect( @@ -270,10 +270,10 @@ void main() { fileSystem, logger, ); - final CCompilerConfig result = await runner.cCompilerConfig; - expect(result.compiler?.toFilePath(), msvcBinDir.childFile('cl.exe').uri.toFilePath()); - expect(result.archiver?.toFilePath(), msvcBinDir.childFile('lib.exe').uri.toFilePath()); - expect(result.linker?.toFilePath(), msvcBinDir.childFile('link.exe').uri.toFilePath()); + final CCompilerConfig result = (await runner.cCompilerConfig)!; + expect(result.compiler.toFilePath(), msvcBinDir.childFile('cl.exe').uri.toFilePath()); + expect(result.archiver.toFilePath(), msvcBinDir.childFile('lib.exe').uri.toFilePath()); + expect(result.linker.toFilePath(), msvcBinDir.childFile('link.exe').uri.toFilePath()); expect(result.envScript, isNotNull); expect(result.envScriptArgs, isNotNull); }, diff --git a/packages/flutter_tools/test/integration.shard/isolated/native_assets_test_utils.dart b/packages/flutter_tools/test/integration.shard/isolated/native_assets_test_utils.dart index 0da56e74d4..5c09eda738 100644 --- a/packages/flutter_tools/test/integration.shard/isolated/native_assets_test_utils.dart +++ b/packages/flutter_tools/test/integration.shard/isolated/native_assets_test_utils.dart @@ -189,7 +189,7 @@ void main(List args) async { await build(args, (config, output) async { final packageName = config.packageName; - if (!config.supportedAssetTypes.contains(CodeAsset.type)) { + if (!config.buildAssetTypes.contains(CodeAsset.type)) { return; } final builders = [ @@ -221,7 +221,7 @@ void main(List args) async { } extension on BuildConfig { - List dynamicLinkingFlags(String libraryName) => switch (targetOS) { + List dynamicLinkingFlags(String libraryName) => switch (codeConfig.targetOS) { OS.macOS || OS.iOS => [ '-L${outputDirectory.toFilePath()}', '-l$libraryName', @@ -234,7 +234,7 @@ extension on BuildConfig { OS.windows => [ outputDirectory.resolve('$libraryName.lib').toFilePath() ], - _ => throw UnimplementedError('Unsupported OS: $targetOS'), + _ => throw UnimplementedError('Unsupported OS: ${codeConfig.targetOS}'), }; } ''';