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 3bd69500352..9904e4bc3c4 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 @@ -4,10 +4,7 @@ import 'package:native_assets_builder/native_assets_builder.dart' hide NativeAssetsBuildRunner; -import 'package:native_assets_cli/native_assets_cli_internal.dart' - as native_assets_cli; -import 'package:native_assets_cli/native_assets_cli_internal.dart' - hide BuildMode; +import 'package:native_assets_cli/native_assets_cli_internal.dart'; import '../../../android/android_sdk.dart'; import '../../../base/common.dart'; @@ -30,7 +27,7 @@ Future dryRunNativeAssetsAndroid({ return null; } - final Uri buildUri_ = nativeAssetsBuildUri(projectUri, OS.android); + final Uri buildUri_ = nativeAssetsBuildUri(projectUri, OSImpl.android); final Iterable nativeAssetPaths = await dryRunNativeAssetsAndroidInternal( fileSystem, @@ -50,20 +47,20 @@ Future> dryRunNativeAssetsAndroidInternal( Uri projectUri, NativeAssetsBuildRunner buildRunner, ) async { - const OS targetOS = OS.android; + const OSImpl targetOS = OSImpl.android; globals.logger.printTrace('Dry running native assets for $targetOS.'); final DryRunResult dryRunResult = await buildRunner.dryRun( - linkModePreference: LinkModePreference.dynamic, + linkModePreference: LinkModePreferenceImpl.dynamic, targetOS: targetOS, workingDirectory: projectUri, includeParentEnvironment: true, ); ensureNativeAssetsBuildSucceed(dryRunResult); - final List nativeAssets = dryRunResult.assets; + final List nativeAssets = dryRunResult.assets; ensureNoLinkModeStatic(nativeAssets); globals.logger.printTrace('Dry running native assets for $targetOS done.'); - final Map assetTargetLocations = + final Map assetTargetLocations = _assetTargetLocations(nativeAssets); return assetTargetLocations.values; } @@ -80,7 +77,7 @@ Future<(Uri? nativeAssetsYaml, List dependencies)> required FileSystem fileSystem, required int targetAndroidNdkApi, }) async { - const OS targetOS = OS.android; + const OSImpl targetOS = OSImpl.android; final Uri buildUri_ = nativeAssetsBuildUri(projectUri, targetOS); if (!await nativeBuildRequired(buildRunner)) { final Uri nativeAssetsYaml = await writeNativeAssetsYaml( @@ -92,21 +89,21 @@ Future<(Uri? nativeAssetsYaml, List dependencies)> } final List targets = androidArchs.map(_getNativeTarget).toList(); - final native_assets_cli.BuildMode buildModeCli = + final BuildModeImpl buildModeCli = nativeAssetsBuildMode(buildMode); globals.logger .printTrace('Building native assets for $targets $buildModeCli.'); - final List nativeAssets = []; + final List nativeAssets = []; final Set dependencies = {}; for (final Target target in targets) { final BuildResult result = await buildRunner.build( - linkModePreference: LinkModePreference.dynamic, + linkModePreference: LinkModePreferenceImpl.dynamic, target: target, buildMode: buildModeCli, workingDirectory: projectUri, includeParentEnvironment: true, - cCompilerConfig: await buildRunner.ndkCCompilerConfig, + cCompilerConfig: await buildRunner.ndkCCompilerConfigImpl, targetAndroidNdkApi: targetAndroidNdkApi, ); ensureNativeAssetsBuildSucceed(result); @@ -115,7 +112,7 @@ Future<(Uri? nativeAssetsYaml, List dependencies)> } ensureNoLinkModeStatic(nativeAssets); globals.logger.printTrace('Building native assets for $targets done.'); - final Map assetTargetLocations = + final Map assetTargetLocations = _assetTargetLocations(nativeAssets); await _copyNativeAssetsAndroid(buildUri_, assetTargetLocations, fileSystem); final Uri nativeAssetsUri = await writeNativeAssetsYaml( @@ -127,7 +124,7 @@ Future<(Uri? nativeAssetsYaml, List dependencies)> Future _copyNativeAssetsAndroid( Uri buildUri, - Map assetTargetLocations, + Map assetTargetLocations, FileSystem fileSystem, ) async { if (assetTargetLocations.isNotEmpty) { @@ -141,9 +138,9 @@ Future _copyNativeAssetsAndroid( final Uri archUri = buildUri.resolve('jniLibs/lib/$jniArchDir/'); await fileSystem.directory(archUri).create(recursive: true); } - for (final MapEntry assetMapping + for (final MapEntry assetMapping in assetTargetLocations.entries) { - final Uri source = (assetMapping.key.path as AssetAbsolutePath).uri; + final Uri source = assetMapping.key.file!; final Uri target = (assetMapping.value.path as KernelAssetAbsolutePath).uri; final AndroidArch androidArch = _getAndroidArch(assetMapping.value.target); @@ -189,36 +186,37 @@ AndroidArch _getAndroidArch(Target target) { } } -Map _assetTargetLocations(List nativeAssets) { - return { - for (final Asset asset in nativeAssets) +Map _assetTargetLocations( + List nativeAssets) { + return { + for (final AssetImpl asset in nativeAssets) asset: _targetLocationAndroid(asset), }; } /// Converts the `path` of [asset] as output from a `build.dart` invocation to /// the path used inside the Flutter app bundle. -KernelAsset _targetLocationAndroid(Asset asset) { - final AssetPath path = asset.path; +KernelAsset _targetLocationAndroid(AssetImpl asset) { + final LinkModeImpl linkMode = (asset as NativeCodeAssetImpl).linkMode; final KernelAssetPath kernelAssetPath; - switch (path) { - case AssetSystemPath _: - kernelAssetPath = KernelAssetSystemPath(path.uri); - case AssetInExecutable _: + switch (linkMode) { + case DynamicLoadingSystemImpl _: + kernelAssetPath = KernelAssetSystemPath(linkMode.uri); + case LookupInExecutableImpl _: kernelAssetPath = KernelAssetInExecutable(); - case AssetInProcess _: + case LookupInProcessImpl _: kernelAssetPath = KernelAssetInProcess(); - case AssetAbsolutePath _: - final String fileName = path.uri.pathSegments.last; + case DynamicLoadingBundledImpl _: + final String fileName = asset.file!.pathSegments.last; kernelAssetPath = KernelAssetAbsolutePath(Uri(path: fileName)); default: throw Exception( - 'Unsupported asset path type ${path.runtimeType} in asset $asset', + 'Unsupported asset link mode $linkMode in asset $asset', ); } return KernelAsset( id: asset.id, - target: asset.target, + target: Target.fromArchitectureAndOS(asset.architecture!, asset.os), path: kernelAssetPath, ); } @@ -231,17 +229,19 @@ KernelAsset _targetLocationAndroid(Asset asset) { /// assets feature is disabled, or none of the packages have native assets, a /// missing NDK is okay. @override -Future cCompilerConfigAndroid() async { +Future cCompilerConfigAndroid() async { final AndroidSdk? androidSdk = AndroidSdk.locateAndroidSdk(); if (androidSdk == null) { throwToolExit('Android SDK could not be found.'); } - final CCompilerConfig result = CCompilerConfig( - cc: _toOptionalFileUri(androidSdk.getNdkClangPath()), - ar: _toOptionalFileUri(androidSdk.getNdkArPath()), - ld: _toOptionalFileUri(androidSdk.getNdkLdPath()), + final CCompilerConfigImpl result = CCompilerConfigImpl( + compiler: _toOptionalFileUri(androidSdk.getNdkClangPath()), + archiver: _toOptionalFileUri(androidSdk.getNdkArPath()), + linker: _toOptionalFileUri(androidSdk.getNdkLdPath()), ); - if (result.cc == null || result.ar == null || result.ld == null) { + if (result.compiler == null || + result.archiver == null || + result.linker == null) { throwToolExit('Android NDK Clang could not be found.'); } 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 b69c4017659..2962e6b82fc 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 @@ -4,10 +4,7 @@ import 'package:native_assets_builder/native_assets_builder.dart' hide NativeAssetsBuildRunner; -import 'package:native_assets_cli/native_assets_cli_internal.dart' - hide BuildMode; -import 'package:native_assets_cli/native_assets_cli_internal.dart' - as native_assets_cli; +import 'package:native_assets_cli/native_assets_cli_internal.dart'; import '../../../base/file_system.dart'; import '../../../build_info.dart'; @@ -30,7 +27,7 @@ Future dryRunNativeAssetsIOS({ return null; } - final Uri buildUri = nativeAssetsBuildUri(projectUri, OS.iOS); + final Uri buildUri = nativeAssetsBuildUri(projectUri, OSImpl.iOS); final Iterable assetTargetLocations = await dryRunNativeAssetsIOSInternal( fileSystem, projectUri, @@ -49,16 +46,16 @@ Future> dryRunNativeAssetsIOSInternal( Uri projectUri, NativeAssetsBuildRunner buildRunner, ) async { - const OS targetOS = OS.iOS; + const OSImpl targetOS = OSImpl.iOS; globals.logger.printTrace('Dry running native assets for $targetOS.'); final DryRunResult dryRunResult = await buildRunner.dryRun( - linkModePreference: LinkModePreference.dynamic, + linkModePreference: LinkModePreferenceImpl.dynamic, targetOS: targetOS, workingDirectory: projectUri, includeParentEnvironment: true, ); ensureNativeAssetsBuildSucceed(dryRunResult); - final List nativeAssets = dryRunResult.assets; + final List nativeAssets = dryRunResult.assets; ensureNoLinkModeStatic(nativeAssets); globals.logger.printTrace('Dry running native assets for $targetOS done.'); return _assetTargetLocations(nativeAssets).values; @@ -81,20 +78,20 @@ Future> buildNativeAssetsIOS({ } final List targets = darwinArchs.map(_getNativeTarget).toList(); - final native_assets_cli.BuildMode buildModeCli = nativeAssetsBuildMode(buildMode); + final BuildModeImpl buildModeCli = nativeAssetsBuildMode(buildMode); - const OS targetOS = OS.iOS; + const OSImpl targetOS = OSImpl.iOS; final Uri buildUri = nativeAssetsBuildUri(projectUri, targetOS); - final IOSSdk iosSdk = _getIOSSdk(environmentType); + final IOSSdkImpl iosSdk = _getIOSSdkImpl(environmentType); globals.logger.printTrace('Building native assets for $targets $buildModeCli.'); - final List nativeAssets = []; + final List nativeAssets = []; final Set dependencies = {}; for (final Target target in targets) { final BuildResult result = await buildRunner.build( - linkModePreference: LinkModePreference.dynamic, + linkModePreference: LinkModePreferenceImpl.dynamic, target: target, - targetIOSSdk: iosSdk, + targetIOSSdkImpl: iosSdk, buildMode: buildModeCli, workingDirectory: projectUri, includeParentEnvironment: true, @@ -106,7 +103,8 @@ Future> buildNativeAssetsIOS({ } ensureNoLinkModeStatic(nativeAssets); globals.logger.printTrace('Building native assets for $targets done.'); - final Map> fatAssetTargetLocations = _fatAssetTargetLocations(nativeAssets); + final Map> fatAssetTargetLocations = + _fatAssetTargetLocations(nativeAssets); await _copyNativeAssetsIOS( buildUri, fatAssetTargetLocations, @@ -115,7 +113,8 @@ Future> buildNativeAssetsIOS({ fileSystem, ); - final Map assetTargetLocations = _assetTargetLocations(nativeAssets); + final Map assetTargetLocations = + _assetTargetLocations(nativeAssets); await writeNativeAssetsYaml( KernelAssets(assetTargetLocations.values), yamlParentDirectory, @@ -124,12 +123,12 @@ Future> buildNativeAssetsIOS({ return dependencies.toList(); } -IOSSdk _getIOSSdk(EnvironmentType environmentType) { +IOSSdkImpl _getIOSSdkImpl(EnvironmentType environmentType) { switch (environmentType) { case EnvironmentType.physical: - return IOSSdk.iPhoneOs; + return IOSSdkImpl.iPhoneOS; case EnvironmentType.simulator: - return IOSSdk.iPhoneSimulator; + return IOSSdkImpl.iPhoneSimulator; } } @@ -145,11 +144,13 @@ Target _getNativeTarget(DarwinArch darwinArch) { } } -Map> _fatAssetTargetLocations(List nativeAssets) { +Map> _fatAssetTargetLocations( + List nativeAssets) { final Set alreadyTakenNames = {}; - final Map> result = >{}; + final Map> result = + >{}; final Map idToPath = {}; - for (final Asset asset in nativeAssets) { + for (final AssetImpl asset in nativeAssets) { // Use same target path for all assets with the same id. final KernelAssetPath path = idToPath[asset.id] ?? _targetLocationIOS( @@ -157,44 +158,45 @@ Map> _fatAssetTargetLocations(List nativeAss alreadyTakenNames, ).path; idToPath[asset.id] = path; - result[path] ??= []; + result[path] ??= []; result[path]!.add(asset); } return result; } -Map _assetTargetLocations(List nativeAssets) { +Map _assetTargetLocations( + List nativeAssets) { final Set alreadyTakenNames = {}; - return { - for (final Asset asset in nativeAssets) + return { + for (final AssetImpl asset in nativeAssets) asset: _targetLocationIOS(asset, alreadyTakenNames), }; } -KernelAsset _targetLocationIOS(Asset asset, Set alreadyTakenNames) { - final AssetPath path = asset.path; +KernelAsset _targetLocationIOS(AssetImpl asset, Set alreadyTakenNames) { + final LinkModeImpl linkMode = (asset as NativeCodeAssetImpl).linkMode; final KernelAssetPath kernelAssetPath; - switch (path) { - case AssetSystemPath _: - kernelAssetPath = KernelAssetSystemPath(path.uri); - case AssetInExecutable _: + switch (linkMode) { + case DynamicLoadingSystemImpl _: + kernelAssetPath = KernelAssetSystemPath(linkMode.uri); + case LookupInExecutableImpl _: kernelAssetPath = KernelAssetInExecutable(); - case AssetInProcess _: + case LookupInProcessImpl _: kernelAssetPath = KernelAssetInProcess(); - case AssetAbsolutePath _: - final String fileName = path.uri.pathSegments.last; + case DynamicLoadingBundledImpl _: + final String fileName = asset.file!.pathSegments.last; kernelAssetPath = KernelAssetAbsolutePath(frameworkUri( fileName, alreadyTakenNames, )); default: throw Exception( - 'Unsupported asset path type ${path.runtimeType} in asset $asset', + 'Unsupported asset link mode $linkMode in asset $asset', ); } return KernelAsset( id: asset.id, - target: asset.target, + target: Target.fromArchitectureAndOS(asset.architecture!, asset.os), path: kernelAssetPath, ); } @@ -211,7 +213,7 @@ final KernelAssetPath kernelAssetPath; /// in xcode_backend.dart. Future _copyNativeAssetsIOS( Uri buildUri, - Map> assetTargetLocations, + Map> assetTargetLocations, String? codesignIdentity, BuildMode buildMode, FileSystem fileSystem, @@ -219,12 +221,11 @@ Future _copyNativeAssetsIOS( if (assetTargetLocations.isNotEmpty) { globals.logger .printTrace('Copying native assets to ${buildUri.toFilePath()}.'); - for (final MapEntry> assetMapping + for (final MapEntry> assetMapping in assetTargetLocations.entries) { final Uri target = (assetMapping.key as KernelAssetAbsolutePath).uri; final List sources = [ - for (final Asset source in assetMapping.value) - (source.path as AssetAbsolutePath).uri + for (final AssetImpl source in assetMapping.value) source.file! ]; final Uri targetUri = buildUri.resolveUri(target); final File dylibFile = fileSystem.file(targetUri); 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 c0646b3cbe6..ee4be081dc6 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 @@ -4,8 +4,7 @@ import 'package:native_assets_builder/native_assets_builder.dart' hide NativeAssetsBuildRunner; -import 'package:native_assets_cli/native_assets_cli_internal.dart' - hide BuildMode; +import 'package:native_assets_cli/native_assets_cli_internal.dart'; import '../../../base/common.dart'; import '../../../base/file_system.dart'; @@ -29,7 +28,7 @@ Future dryRunNativeAssetsLinux({ projectUri: projectUri, flutterTester: flutterTester, fileSystem: fileSystem, - os: OS.linux, + os: OSImpl.linux, ); } @@ -44,7 +43,7 @@ Future> dryRunNativeAssetsLinuxInternal( projectUri, flutterTester, buildRunner, - OS.linux, + OSImpl.linux, ); } @@ -71,7 +70,7 @@ Future<(Uri? nativeAssetsYaml, List dependencies)> buildNativeAssetsLinux({ /// Flutter expects `clang++` to be on the path on Linux hosts. /// /// Search for the accompanying `clang`, `ar`, and `ld`. -Future cCompilerConfigLinux() async { +Future cCompilerConfigLinux() async { const String kClangPlusPlusBinary = 'clang++'; const String kClangBinary = 'clang'; const String kArBinary = 'llvm-ar'; @@ -93,9 +92,9 @@ Future cCompilerConfigLinux() async { } binaryPaths[binary] = binaryFile.uri; } - return CCompilerConfig( - ar: binaryPaths[kArBinary], - cc: binaryPaths[kClangBinary], - ld: binaryPaths[kLdBinary], + return CCompilerConfigImpl( + archiver: binaryPaths[kArBinary], + compiler: binaryPaths[kClangBinary], + linker: binaryPaths[kLdBinary], ); } 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 8b74c533515..1575279fd78 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 @@ -4,10 +4,7 @@ import 'package:native_assets_builder/native_assets_builder.dart' hide NativeAssetsBuildRunner; -import 'package:native_assets_cli/native_assets_cli_internal.dart' - hide BuildMode; -import 'package:native_assets_cli/native_assets_cli_internal.dart' - as native_assets_cli; +import 'package:native_assets_cli/native_assets_cli_internal.dart'; import '../../../base/file_system.dart'; import '../../../build_info.dart'; @@ -30,7 +27,7 @@ Future dryRunNativeAssetsMacOS({ return null; } - final Uri buildUri = nativeAssetsBuildUri(projectUri, OS.macOS); + final Uri buildUri = nativeAssetsBuildUri(projectUri, OSImpl.macOS); final Iterable nativeAssetPaths = await dryRunNativeAssetsMacOSInternal( fileSystem, projectUri, @@ -51,22 +48,23 @@ Future> dryRunNativeAssetsMacOSInternal( bool flutterTester, NativeAssetsBuildRunner buildRunner, ) async { - const OS targetOS = OS.macOS; + const OSImpl targetOS = OSImpl.macOS; final Uri buildUri = nativeAssetsBuildUri(projectUri, targetOS); globals.logger.printTrace('Dry running native assets for $targetOS.'); final DryRunResult dryRunResult = await buildRunner.dryRun( - linkModePreference: LinkModePreference.dynamic, + linkModePreference: LinkModePreferenceImpl.dynamic, targetOS: targetOS, workingDirectory: projectUri, includeParentEnvironment: true, ); ensureNativeAssetsBuildSucceed(dryRunResult); - final List nativeAssets = dryRunResult.assets; + final List nativeAssets = dryRunResult.assets; ensureNoLinkModeStatic(nativeAssets); globals.logger.printTrace('Dry running native assets for $targetOS done.'); final Uri? absolutePath = flutterTester ? buildUri : null; - final Map assetTargetLocations = _assetTargetLocations( + final Map assetTargetLocations = + _assetTargetLocations( nativeAssets, absolutePath, ); @@ -90,7 +88,7 @@ Future<(Uri? nativeAssetsYaml, List dependencies)> buildNativeAssetsMacOS({ Uri? yamlParentDirectory, required FileSystem fileSystem, }) async { - const OS targetOS = OS.macOS; + const OSImpl targetOS = OSImpl.macOS; final Uri buildUri = nativeAssetsBuildUri(projectUri, targetOS); if (!await nativeBuildRequired(buildRunner)) { final Uri nativeAssetsYaml = await writeNativeAssetsYaml( @@ -104,16 +102,16 @@ Future<(Uri? nativeAssetsYaml, List dependencies)> buildNativeAssetsMacOS({ final List targets = darwinArchs != null ? darwinArchs.map(_getNativeTarget).toList() : [Target.current]; - final native_assets_cli.BuildMode buildModeCli = + final BuildModeImpl buildModeCli = nativeAssetsBuildMode(buildMode); globals.logger .printTrace('Building native assets for $targets $buildModeCli.'); - final List nativeAssets = []; + final List nativeAssets = []; final Set dependencies = {}; for (final Target target in targets) { final BuildResult result = await buildRunner.build( - linkModePreference: LinkModePreference.dynamic, + linkModePreference: LinkModePreferenceImpl.dynamic, target: target, buildMode: buildModeCli, workingDirectory: projectUri, @@ -127,9 +125,9 @@ Future<(Uri? nativeAssetsYaml, List dependencies)> buildNativeAssetsMacOS({ ensureNoLinkModeStatic(nativeAssets); globals.logger.printTrace('Building native assets for $targets done.'); final Uri? absolutePath = flutterTester ? buildUri : null; - final Map assetTargetLocations = + final Map assetTargetLocations = _assetTargetLocations(nativeAssets, absolutePath); - final Map> fatAssetTargetLocations = + final Map> fatAssetTargetLocations = _fatAssetTargetLocations(nativeAssets, absolutePath); if (flutterTester) { await _copyNativeAssetsMacOSFlutterTester( @@ -168,15 +166,15 @@ Target _getNativeTarget(DarwinArch darwinArch) { } } -Map> _fatAssetTargetLocations( - List nativeAssets, +Map> _fatAssetTargetLocations( + List nativeAssets, Uri? absolutePath, ) { final Set alreadyTakenNames = {}; - final Map> result = - >{}; + final Map> result = + >{}; final Map idToPath = {}; - for (final Asset asset in nativeAssets) { + for (final AssetImpl asset in nativeAssets) { // Use same target path for all assets with the same id. final KernelAssetPath path = idToPath[asset.id] ?? _targetLocationMacOS( @@ -185,39 +183,39 @@ Map> _fatAssetTargetLocations( alreadyTakenNames, ).path; idToPath[asset.id] = path; - result[path] ??= []; + result[path] ??= []; result[path]!.add(asset); } return result; } -Map _assetTargetLocations( - List nativeAssets, +Map _assetTargetLocations( + List nativeAssets, Uri? absolutePath, ) { final Set alreadyTakenNames = {}; - return { - for (final Asset asset in nativeAssets) + return { + for (final AssetImpl asset in nativeAssets) asset: _targetLocationMacOS(asset, absolutePath, alreadyTakenNames), }; } KernelAsset _targetLocationMacOS( - Asset asset, + AssetImpl asset, Uri? absolutePath, Set alreadyTakenNames, ) { - final AssetPath path = asset.path; + final LinkModeImpl linkMode = (asset as NativeCodeAssetImpl).linkMode; final KernelAssetPath kernelAssetPath; - switch (path) { - case AssetSystemPath _: - kernelAssetPath = KernelAssetSystemPath(path.uri); - case AssetInExecutable _: + switch (linkMode) { + case DynamicLoadingSystemImpl _: + kernelAssetPath = KernelAssetSystemPath(linkMode.uri); + case LookupInExecutableImpl _: kernelAssetPath = KernelAssetInExecutable(); - case AssetInProcess _: + case LookupInProcessImpl _: kernelAssetPath = KernelAssetInProcess(); - case AssetAbsolutePath _: - final String fileName = path.uri.pathSegments.last; + case DynamicLoadingBundledImpl _: + final String fileName = asset.file!.pathSegments.last; Uri uri; if (absolutePath != null) { // Flutter tester needs full host paths. @@ -231,12 +229,12 @@ KernelAsset _targetLocationMacOS( kernelAssetPath = KernelAssetAbsolutePath(uri); default: throw Exception( - 'Unsupported asset path type ${path.runtimeType} in asset $asset', + 'Unsupported asset link mode $linkMode in asset $asset', ); } return KernelAsset( id: asset.id, - target: asset.target, + target: Target.fromArchitectureAndOS(asset.architecture!, asset.os), path: kernelAssetPath, ); } @@ -256,7 +254,7 @@ KernelAsset _targetLocationMacOS( /// in macos_assemble.sh. Future _copyNativeAssetsMacOS( Uri buildUri, - Map> assetTargetLocations, + Map> assetTargetLocations, String? codesignIdentity, BuildMode buildMode, FileSystem fileSystem, @@ -265,12 +263,11 @@ Future _copyNativeAssetsMacOS( globals.logger.printTrace( 'Copying native assets to ${buildUri.toFilePath()}.', ); - for (final MapEntry> assetMapping + for (final MapEntry> assetMapping in assetTargetLocations.entries) { final Uri target = (assetMapping.key as KernelAssetAbsolutePath).uri; final List sources = [ - for (final Asset source in assetMapping.value) - (source.path as AssetAbsolutePath).uri, + for (final AssetImpl source in assetMapping.value) source.file!, ]; final Uri targetUri = buildUri.resolveUri(target); final String name = targetUri.pathSegments.last; @@ -326,7 +323,7 @@ Future _copyNativeAssetsMacOS( /// Code signing is also done here. Future _copyNativeAssetsMacOSFlutterTester( Uri buildUri, - Map> assetTargetLocations, + Map> assetTargetLocations, String? codesignIdentity, BuildMode buildMode, FileSystem fileSystem, @@ -335,12 +332,11 @@ Future _copyNativeAssetsMacOSFlutterTester( globals.logger.printTrace( 'Copying native assets to ${buildUri.toFilePath()}.', ); - for (final MapEntry> assetMapping + for (final MapEntry> assetMapping in assetTargetLocations.entries) { final Uri target = (assetMapping.key as KernelAssetAbsolutePath).uri; final List sources = [ - for (final Asset source in assetMapping.value) - (source.path as AssetAbsolutePath).uri, + for (final AssetImpl source in assetMapping.value) source.file!, ]; final Uri targetUri = buildUri.resolveUri(target); final File dylibFile = fileSystem.file(targetUri); 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 9f3c42521d8..b564ce75c2d 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 @@ -4,8 +4,7 @@ // Shared logic between iOS and macOS implementations of native assets. -import 'package:native_assets_cli/native_assets_cli_internal.dart' - hide BuildMode; +import 'package:native_assets_cli/native_assets_cli_internal.dart'; import '../../../base/common.dart'; import '../../../base/file_system.dart'; @@ -131,7 +130,7 @@ Future codesignDylib( /// Flutter expects `xcrun` to be on the path on macOS hosts. /// /// Use the `clang`, `ar`, and `ld` that would be used if run with `xcrun`. -Future cCompilerConfigMacOS() async { +Future cCompilerConfigMacOS() async { final ProcessResult xcrunResult = await globals.processManager.run( ['xcrun', 'clang', '--version'], ); @@ -142,10 +141,10 @@ Future cCompilerConfigMacOS() async { .firstWhere((String s) => s.startsWith('InstalledDir: ')) .split(' ') .last; - return CCompilerConfig( - cc: Uri.file('$installPath/clang'), - ar: Uri.file('$installPath/ar'), - ld: Uri.file('$installPath/ld'), + return CCompilerConfigImpl( + compiler: Uri.file('$installPath/clang'), + archiver: Uri.file('$installPath/ar'), + linker: Uri.file('$installPath/ld'), ); } 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 a39fd699d0b..f644246fda5 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 @@ -9,6 +9,7 @@ import 'package:native_assets_builder/native_assets_builder.dart' as native_assets_builder show NativeAssetsBuildRunner; import 'package:native_assets_builder/native_assets_builder.dart' hide NativeAssetsBuildRunner; +import 'package:native_assets_cli/native_assets_cli.dart'; import 'package:native_assets_cli/native_assets_cli_internal.dart'; import 'package:package_config/package_config_types.dart'; @@ -46,28 +47,28 @@ abstract class NativeAssetsBuildRunner { /// Runs all [packagesWithNativeAssets] `build.dart` in dry run. Future dryRun({ required bool includeParentEnvironment, - required LinkModePreference linkModePreference, - required OS targetOS, + required LinkModePreferenceImpl linkModePreference, + required OSImpl targetOS, required Uri workingDirectory, }); /// Runs all [packagesWithNativeAssets] `build.dart`. Future build({ required bool includeParentEnvironment, - required BuildMode buildMode, - required LinkModePreference linkModePreference, + required BuildModeImpl buildMode, + required LinkModePreferenceImpl linkModePreference, required Target target, required Uri workingDirectory, - CCompilerConfig? cCompilerConfig, + CCompilerConfigImpl? cCompilerConfig, int? targetAndroidNdkApi, - IOSSdk? targetIOSSdk, + IOSSdkImpl? targetIOSSdkImpl, }); /// 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 ndkCCompilerConfigImpl; } /// Uses `package:native_assets_builder` for its implementation. @@ -125,8 +126,8 @@ class NativeAssetsBuildRunnerImpl implements NativeAssetsBuildRunner { @override Future dryRun({ required bool includeParentEnvironment, - required LinkModePreference linkModePreference, - required OS targetOS, + required LinkModePreferenceImpl linkModePreference, + required OSImpl targetOS, required Uri workingDirectory, }) { final PackageLayout packageLayout = PackageLayout.fromPackageConfig( @@ -136,7 +137,7 @@ class NativeAssetsBuildRunnerImpl implements NativeAssetsBuildRunner { return _buildRunner.dryRun( includeParentEnvironment: includeParentEnvironment, linkModePreference: linkModePreference, - targetOs: targetOS, + targetOS: targetOS, workingDirectory: workingDirectory, packageLayout: packageLayout, ); @@ -145,13 +146,13 @@ class NativeAssetsBuildRunnerImpl implements NativeAssetsBuildRunner { @override Future build({ required bool includeParentEnvironment, - required BuildMode buildMode, - required LinkModePreference linkModePreference, + required BuildModeImpl buildMode, + required LinkModePreferenceImpl linkModePreference, required Target target, required Uri workingDirectory, - CCompilerConfig? cCompilerConfig, + CCompilerConfigImpl? cCompilerConfig, int? targetAndroidNdkApi, - IOSSdk? targetIOSSdk, + IOSSdkImpl? targetIOSSdkImpl, }) { final PackageLayout packageLayout = PackageLayout.fromPackageConfig( packageConfig, @@ -164,14 +165,14 @@ class NativeAssetsBuildRunnerImpl implements NativeAssetsBuildRunner { linkModePreference: linkModePreference, target: target, targetAndroidNdkApi: targetAndroidNdkApi, - targetIOSSdk: targetIOSSdk, + targetIOSSdk: targetIOSSdkImpl, workingDirectory: workingDirectory, packageLayout: packageLayout, ); } @override - late final Future cCompilerConfig = () { + late final Future cCompilerConfig = () { if (globals.platform.isMacOS || globals.platform.isIOS) { return cCompilerConfigMacOS(); } @@ -182,13 +183,13 @@ class NativeAssetsBuildRunnerImpl implements NativeAssetsBuildRunner { return cCompilerConfigWindows(); } if (globals.platform.isAndroid) { - throwToolExit('Should use ndkCCompilerConfig for Android.'); + throwToolExit('Should use ndkCCompilerConfigImpl for Android.'); } throwToolExit('Unknown target OS.'); }(); @override - late final Future ndkCCompilerConfig = () { + late final Future ndkCCompilerConfigImpl = () { return cCompilerConfigAndroid(); }(); } @@ -212,14 +213,14 @@ Future writeNativeAssetsYaml( } /// Select the native asset build mode for a given Flutter build mode. -BuildMode nativeAssetsBuildMode(build_info.BuildMode buildMode) { +BuildModeImpl nativeAssetsBuildMode(build_info.BuildMode buildMode) { switch (buildMode) { case build_info.BuildMode.debug: - return BuildMode.debug; + return BuildModeImpl.debug; case build_info.BuildMode.jitRelease: case build_info.BuildMode.profile: case build_info.BuildMode.release: - return BuildMode.release; + return BuildModeImpl.release; } } @@ -294,10 +295,12 @@ Future ensureNoNativeAssetsOrOsIsSupported( /// https://github.com/dart-lang/sdk/issues/49418. /// /// Therefore, ensure all `build.dart` scripts return only dynamic libraries. -void ensureNoLinkModeStatic(List nativeAssets) { - final Iterable staticAssets = nativeAssets.where((Asset e) => e.linkMode == LinkMode.static); +void ensureNoLinkModeStatic(List nativeAssets) { + final Iterable staticAssets = nativeAssets.where((AssetImpl e) => + e is NativeCodeAssetImpl && e.linkMode == StaticLinkingImpl()); if (staticAssets.isNotEmpty) { - final String assetIds = staticAssets.map((Asset a) => a.id).toSet().join(', '); + final String assetIds = + staticAssets.map((AssetImpl a) => a.id).toSet().join(', '); throwToolExit( 'Native asset(s) $assetIds have their link mode set to static, ' 'but this is not yet supported. ' @@ -308,7 +311,7 @@ void ensureNoLinkModeStatic(List nativeAssets) { /// This should be the same for different archs, debug/release, etc. /// It should work for all macOS. -Uri nativeAssetsBuildUri(Uri projectUri, OS os) { +Uri nativeAssetsBuildUri(Uri projectUri, OSImpl os) { final String buildDir = build_info.getBuildDirectory(); return projectUri.resolve('$buildDir/native_assets/$os/'); } @@ -455,7 +458,8 @@ Future dryRunNativeAssetsMultipleOSes({ final Uri buildUri = buildUriMultiple(projectUri); final Iterable nativeAssetPaths = [ if (targetPlatforms.contains(build_info.TargetPlatform.darwin) || - (targetPlatforms.contains(build_info.TargetPlatform.tester) && OS.current == OS.macOS)) + (targetPlatforms.contains(build_info.TargetPlatform.tester) && + OSImpl.current == OSImpl.macOS)) ...await dryRunNativeAssetsMacOSInternal( fileSystem, projectUri, @@ -464,7 +468,8 @@ Future dryRunNativeAssetsMultipleOSes({ ), if (targetPlatforms.contains(build_info.TargetPlatform.linux_arm64) || targetPlatforms.contains(build_info.TargetPlatform.linux_x64) || - (targetPlatforms.contains(build_info.TargetPlatform.tester) && OS.current == OS.linux)) + (targetPlatforms.contains(build_info.TargetPlatform.tester) && + OSImpl.current == OSImpl.linux)) ...await dryRunNativeAssetsLinuxInternal( fileSystem, projectUri, @@ -473,7 +478,8 @@ Future dryRunNativeAssetsMultipleOSes({ ), if (targetPlatforms.contains(build_info.TargetPlatform.windows_arm64) || targetPlatforms.contains(build_info.TargetPlatform.windows_x64) || - (targetPlatforms.contains(build_info.TargetPlatform.tester) && OS.current == OS.windows)) + (targetPlatforms.contains(build_info.TargetPlatform.tester) && + OSImpl.current == OSImpl.windows)) ...await dryRunNativeAssetsWindowsInternal( fileSystem, projectUri, @@ -521,7 +527,7 @@ Future dryRunNativeAssetsSingleArchitecture({ required Uri projectUri, bool flutterTester = false, required FileSystem fileSystem, - required OS os, + required OSImpl os, }) async { if (!await nativeBuildRequired(buildRunner)) { return null; @@ -548,24 +554,25 @@ Future> dryRunNativeAssetsSingleArchitectureInternal( Uri projectUri, bool flutterTester, NativeAssetsBuildRunner buildRunner, - OS targetOS, + OSImpl targetOS, ) async { final Uri buildUri = nativeAssetsBuildUri(projectUri, targetOS); globals.logger.printTrace('Dry running native assets for $targetOS.'); final DryRunResult dryRunResult = await buildRunner.dryRun( - linkModePreference: LinkModePreference.dynamic, + linkModePreference: LinkModePreferenceImpl.dynamic, targetOS: targetOS, workingDirectory: projectUri, includeParentEnvironment: true, ); ensureNativeAssetsBuildSucceed(dryRunResult); - final List nativeAssets = dryRunResult.assets; + final List nativeAssets = dryRunResult.assets; ensureNoLinkModeStatic(nativeAssets); globals.logger.printTrace('Dry running native assets for $targetOS done.'); final Uri? absolutePath = flutterTester ? buildUri : null; - final Map assetTargetLocations = _assetTargetLocationsSingleArchitecture( + final Map assetTargetLocations = + _assetTargetLocationsSingleArchitecture( nativeAssets, absolutePath, ); @@ -589,7 +596,7 @@ Future<(Uri? nativeAssetsYaml, List dependencies)> buildNativeAssetsSingleA required FileSystem fileSystem, }) async { final Target target = targetPlatform != null ? _getNativeTarget(targetPlatform) : Target.current; - final OS targetOS = target.os; + final OSImpl targetOS = target.os; final Uri buildUri = nativeAssetsBuildUri(projectUri, targetOS); final Directory buildDir = fileSystem.directory(buildUri); if (!await buildDir.exists()) { @@ -605,11 +612,11 @@ Future<(Uri? nativeAssetsYaml, List dependencies)> buildNativeAssetsSingleA return (nativeAssetsYaml, []); } - final BuildMode buildModeCli = nativeAssetsBuildMode(buildMode); + final BuildModeImpl buildModeCli = nativeAssetsBuildMode(buildMode); globals.logger.printTrace('Building native assets for $target $buildModeCli.'); final BuildResult result = await buildRunner.build( - linkModePreference: LinkModePreference.dynamic, + linkModePreference: LinkModePreferenceImpl.dynamic, target: target, buildMode: buildModeCli, workingDirectory: projectUri, @@ -617,12 +624,13 @@ Future<(Uri? nativeAssetsYaml, List dependencies)> buildNativeAssetsSingleA cCompilerConfig: await buildRunner.cCompilerConfig, ); ensureNativeAssetsBuildSucceed(result); - final List nativeAssets = result.assets; + final List nativeAssets = result.assets; final Set dependencies = result.dependencies.toSet(); ensureNoLinkModeStatic(nativeAssets); globals.logger.printTrace('Building native assets for $target done.'); final Uri? absolutePath = flutterTester ? buildUri : null; - final Map assetTargetLocations = _assetTargetLocationsSingleArchitecture(nativeAssets, absolutePath); + final Map assetTargetLocations = + _assetTargetLocationsSingleArchitecture(nativeAssets, absolutePath); await _copyNativeAssetsSingleArchitecture( buildUri, assetTargetLocations, @@ -637,12 +645,12 @@ Future<(Uri? nativeAssetsYaml, List dependencies)> buildNativeAssetsSingleA return (nativeAssetsUri, dependencies.toList()); } -Map _assetTargetLocationsSingleArchitecture( - List nativeAssets, +Map _assetTargetLocationsSingleArchitecture( + List nativeAssets, Uri? absolutePath, ) { - return { - for (final Asset asset in nativeAssets) + return { + for (final AssetImpl asset in nativeAssets) asset: _targetLocationSingleArchitecture( asset, absolutePath, @@ -650,18 +658,24 @@ Map _assetTargetLocationsSingleArchitecture( }; } -KernelAsset _targetLocationSingleArchitecture(Asset asset, Uri? absolutePath) { - final AssetPath path = asset.path; +KernelAsset _targetLocationSingleArchitecture( + AssetImpl asset, Uri? absolutePath) { + if (asset is! NativeCodeAssetImpl) { + throw Exception( + 'Unsupported asset type ${asset.runtimeType}', + ); + } + final LinkModeImpl linkMode = asset.linkMode; final KernelAssetPath kernelAssetPath; - switch (path) { - case AssetSystemPath _: - kernelAssetPath = KernelAssetSystemPath(path.uri); - case AssetInExecutable _: + switch (linkMode) { + case DynamicLoadingSystemImpl _: + kernelAssetPath = KernelAssetSystemPath(linkMode.uri); + case LookupInExecutableImpl _: kernelAssetPath = KernelAssetInExecutable(); - case AssetInProcess _: + case LookupInProcessImpl _: kernelAssetPath = KernelAssetInProcess(); - case AssetAbsolutePath _: - final String fileName = path.uri.pathSegments.last; + case DynamicLoadingBundledImpl _: + final String fileName = asset.file!.pathSegments.last; Uri uri; if (absolutePath != null) { // Flutter tester needs full host paths. @@ -675,12 +689,12 @@ KernelAsset _targetLocationSingleArchitecture(Asset asset, Uri? absolutePath) { kernelAssetPath = KernelAssetAbsolutePath(uri); default: throw Exception( - 'Unsupported asset path type ${path.runtimeType} in asset $asset', + 'Unsupported asset link mode ${linkMode.runtimeType} in asset $asset', ); } return KernelAsset( id: asset.id, - target: asset.target, + target: Target.fromArchitectureAndOS(asset.architecture!, asset.os), path: kernelAssetPath, ); } @@ -727,7 +741,7 @@ Future _copyNativeAssetsSingleArchitecture( buildDir.createSync(recursive: true); } for (final MapEntry assetMapping in assetTargetLocations.entries) { - final Uri source = (assetMapping.key.path as AssetAbsolutePath).uri; + final Uri source = assetMapping.key.file!; final Uri target = (assetMapping.value.path as KernelAssetAbsolutePath).uri; final Uri targetUri = buildUri.resolveUri(target); final String targetFullPath = targetUri.toFilePath(); 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 98fd21ab0f0..11703c4f288 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 @@ -4,8 +4,7 @@ import 'package:native_assets_builder/native_assets_builder.dart' hide NativeAssetsBuildRunner; -import 'package:native_assets_cli/native_assets_cli_internal.dart' - hide BuildMode; +import 'package:native_assets_cli/native_assets_cli_internal.dart'; import '../../../base/file_system.dart'; import '../../../build_info.dart'; @@ -28,7 +27,7 @@ Future dryRunNativeAssetsWindows({ projectUri: projectUri, flutterTester: flutterTester, fileSystem: fileSystem, - os: OS.windows, + os: OSImpl.windows, ); } @@ -43,7 +42,7 @@ Future> dryRunNativeAssetsWindowsInternal( projectUri, flutterTester, buildRunner, - OS.windows, + OSImpl.windows, ); } @@ -68,7 +67,7 @@ Future<(Uri? nativeAssetsYaml, List dependencies)> ); } -Future cCompilerConfigWindows() async { +Future cCompilerConfigWindows() async { final VisualStudio visualStudio = VisualStudio( fileSystem: globals.fs, platform: globals.platform, @@ -77,10 +76,10 @@ Future cCompilerConfigWindows() async { osUtils: globals.os, ); - return CCompilerConfig( - cc: _toOptionalFileUri(visualStudio.clPath), - ld: _toOptionalFileUri(visualStudio.linkPath), - ar: _toOptionalFileUri(visualStudio.libPath), + return CCompilerConfigImpl( + compiler: _toOptionalFileUri(visualStudio.clPath), + linker: _toOptionalFileUri(visualStudio.linkPath), + archiver: _toOptionalFileUri(visualStudio.libPath), envScript: _toOptionalFileUri(visualStudio.vcvarsPath), envScriptArgs: [], ); diff --git a/packages/flutter_tools/pubspec.yaml b/packages/flutter_tools/pubspec.yaml index 179f6987572..951c37446d8 100644 --- a/packages/flutter_tools/pubspec.yaml +++ b/packages/flutter_tools/pubspec.yaml @@ -54,10 +54,10 @@ dependencies: async: 2.11.0 unified_analytics: 5.8.8 - cli_config: 0.1.2 + cli_config: 0.2.0 graphs: 2.3.1 - native_assets_builder: 0.5.0 - native_assets_cli: 0.4.2 + native_assets_builder: 0.6.1 + native_assets_cli: 0.5.3 # We depend on very specific internal implementation details of the # 'test' package, which change between versions, so when upgrading @@ -120,4 +120,4 @@ dartdoc: # Exclude this package from the hosted API docs. nodoc: true -# PUBSPEC CHECKSUM: df1d +# PUBSPEC CHECKSUM: ba20 diff --git a/packages/flutter_tools/templates/package_ffi/build.dart.tmpl b/packages/flutter_tools/templates/package_ffi/build.dart.tmpl deleted file mode 100644 index 3fe2224500d..00000000000 --- a/packages/flutter_tools/templates/package_ffi/build.dart.tmpl +++ /dev/null @@ -1,24 +0,0 @@ -import 'package:native_toolchain_c/native_toolchain_c.dart'; -import 'package:logging/logging.dart'; -import 'package:native_assets_cli/native_assets_cli.dart'; - -const packageName = '{{projectName}}'; - -void main(List args) async { - final buildConfig = await BuildConfig.fromArgs(args); - final buildOutput = BuildOutput(); - final cbuilder = CBuilder.library( - name: packageName, - assetId: - 'package:$packageName/${packageName}_bindings_generated.dart', - sources: [ - 'src/$packageName.c', - ], - ); - await cbuilder.run( - buildConfig: buildConfig, - buildOutput: buildOutput, - logger: Logger('')..onRecord.listen((record) => print(record.message)), - ); - await buildOutput.writeToFile(outDir: buildConfig.outDir); -} diff --git a/packages/flutter_tools/templates/package_ffi/hook/build.dart.tmpl b/packages/flutter_tools/templates/package_ffi/hook/build.dart.tmpl new file mode 100644 index 00000000000..61c244d5802 --- /dev/null +++ b/packages/flutter_tools/templates/package_ffi/hook/build.dart.tmpl @@ -0,0 +1,26 @@ +import 'package:native_toolchain_c/native_toolchain_c.dart'; +import 'package:logging/logging.dart'; +import 'package:native_assets_cli/native_assets_cli.dart'; + +const packageName = '{{projectName}}'; + +void main(List args) async { + await build(args, (config, output) async { + final packageName = config.packageName; + final cbuilder = CBuilder.library( + name: packageName, + assetName: '${packageName}_bindings_generated.dart', + sources: [ + 'src/$packageName.c', + ], + dartBuildFiles: ['hook/build.dart'], + ); + await cbuilder.run( + buildConfig: config, + buildOutput: output, + logger: Logger('') + ..level = Level.ALL + ..onRecord.listen((record) => print(record.message)), + ); + }); +} diff --git a/packages/flutter_tools/templates/package_ffi/pubspec.yaml.tmpl b/packages/flutter_tools/templates/package_ffi/pubspec.yaml.tmpl index 5fb6a487bab..da476e70f7e 100644 --- a/packages/flutter_tools/templates/package_ffi/pubspec.yaml.tmpl +++ b/packages/flutter_tools/templates/package_ffi/pubspec.yaml.tmpl @@ -7,10 +7,10 @@ environment: sdk: {{dartSdkVersionBounds}} dependencies: - cli_config: ^0.1.2 + cli_config: ^0.2.0 logging: ^1.2.0 - native_assets_cli: ^0.4.2 - native_toolchain_c: ^0.3.4+1 + native_assets_cli: ^0.5.3 + native_toolchain_c: ^0.4.1 dev_dependencies: ffi: ^2.1.0 diff --git a/packages/flutter_tools/templates/template_manifest.json b/packages/flutter_tools/templates/template_manifest.json index b43e75d4228..a42c182fc23 100644 --- a/packages/flutter_tools/templates/template_manifest.json +++ b/packages/flutter_tools/templates/template_manifest.json @@ -252,9 +252,9 @@ "templates/package_ffi/.gitignore.tmpl", "templates/package_ffi/.metadata.tmpl", "templates/package_ffi/analysis_options.yaml.tmpl", - "templates/package_ffi/build.dart.tmpl", "templates/package_ffi/CHANGELOG.md.tmpl", "templates/package_ffi/ffigen.yaml.tmpl", + "templates/package_ffi/hook/build.dart.tmpl", "templates/package_ffi/lib/projectName_bindings_generated.dart.tmpl", "templates/package_ffi/lib/projectName.dart.tmpl", "templates/package_ffi/LICENSE.tmpl", 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 6391d4c59b1..17fb07bba9f 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 @@ -15,10 +15,7 @@ import 'package:flutter_tools/src/build_system/build_system.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/android/native_assets.dart'; -import 'package:native_assets_cli/native_assets_cli_internal.dart' - as native_assets_cli; -import 'package:native_assets_cli/native_assets_cli_internal.dart' - hide BuildMode, Target; +import 'package:native_assets_cli/native_assets_cli_internal.dart'; import 'package:package_config/package_config_types.dart'; import '../../../src/common.dart'; @@ -128,18 +125,20 @@ void main() { Package('bar', projectUri), ], dryRunResult: FakeNativeAssetsBuilderResult( - assets: [ - Asset( + assets: [ + NativeCodeAssetImpl( id: 'package:bar/bar.dart', - linkMode: LinkMode.dynamic, - target: native_assets_cli.Target.macOSArm64, - path: AssetAbsolutePath(Uri.file('libbar.so')), + linkMode: DynamicLoadingBundledImpl(), + os: OSImpl.macOS, + architecture: ArchitectureImpl.arm64, + file: Uri.file('libbar.so'), ), - Asset( + NativeCodeAssetImpl( id: 'package:bar/bar.dart', - linkMode: LinkMode.dynamic, - target: native_assets_cli.Target.macOSX64, - path: AssetAbsolutePath(Uri.file('libbar.so')), + linkMode: DynamicLoadingBundledImpl(), + os: OSImpl.macOS, + architecture: ArchitectureImpl.x64, + file: Uri.file('libbar.so'), ), ], ), @@ -237,12 +236,13 @@ void main() { Package('bar', projectUri), ], buildResult: FakeNativeAssetsBuilderResult( - assets: [ - Asset( + assets: [ + NativeCodeAssetImpl( id: 'package:bar/bar.dart', - linkMode: LinkMode.dynamic, - target: native_assets_cli.Target.androidArm64, - path: AssetAbsolutePath(Uri.file('libbar.so')), + linkMode: DynamicLoadingBundledImpl(), + os: OSImpl.android, + architecture: ArchitectureImpl.arm64, + file: Uri.file('libbar.so'), ), ], ), @@ -382,6 +382,6 @@ class _BuildRunnerWithoutNdk extends FakeNativeAssetsBuildRunner { }); @override - Future get ndkCCompilerConfig async => + Future get ndkCCompilerConfigImpl async => throwToolExit('Android NDK Clang could not be found.'); } 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 ef4fc8cb08a..243eeb323d7 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 @@ -130,18 +130,20 @@ void main() { final NativeAssetsBuildRunner buildRunner = FakeNativeAssetsBuildRunner( packagesWithNativeAssetsResult: [Package('foo', iosEnvironment.buildDir.uri)], - buildResult: FakeNativeAssetsBuilderResult(assets: [ - native_assets_cli.Asset( - id: 'package:foo/foo.dart', - linkMode: native_assets_cli.LinkMode.dynamic, - target: native_assets_cli.Target.iOSArm64, - path: native_assets_cli.AssetAbsolutePath( - Uri.file('foo.framework/foo'), + buildResult: FakeNativeAssetsBuilderResult( + assets: [ + native_assets_cli.NativeCodeAssetImpl( + id: 'package:foo/foo.dart', + linkMode: native_assets_cli.DynamicLoadingBundledImpl(), + os: native_assets_cli.OSImpl.iOS, + architecture: native_assets_cli.ArchitectureImpl.arm64, + file: Uri.file('foo.framework/foo'), ), - ) - ], dependencies: [ - Uri.file('src/foo.c'), - ]), + ], + dependencies: [ + Uri.file('src/foo.c'), + ], + ), ); await NativeAssets(buildRunner: buildRunner).build(iosEnvironment); @@ -191,23 +193,27 @@ void main() { packagesWithNativeAssetsResult: [ Package('foo', androidEnvironment.buildDir.uri) ], - buildResult: - FakeNativeAssetsBuilderResult(assets: [ - if (hasAssets) - native_assets_cli.Asset( - id: 'package:foo/foo.dart', - linkMode: native_assets_cli.LinkMode.dynamic, - target: native_assets_cli.Target.androidArm64, - path: native_assets_cli.AssetAbsolutePath( - Uri.file('libfoo.so'), + buildResult: FakeNativeAssetsBuilderResult( + assets: [ + if (hasAssets) + native_assets_cli.NativeCodeAssetImpl( + id: 'package:foo/foo.dart', + linkMode: native_assets_cli.DynamicLoadingBundledImpl(), + os: native_assets_cli.OSImpl.android, + architecture: native_assets_cli.ArchitectureImpl.arm64, + file: Uri.file('libfoo.so'), ), - ) - ], dependencies: [ - Uri.file('src/foo.c'), - ]), + ], + dependencies: [ + Uri.file('src/foo.c'), + ], + ), ); await NativeAssets(buildRunner: buildRunner).build(androidEnvironment); - expect(buildRunner.lastBuildMode, native_assets_cli.BuildMode.release); + expect( + buildRunner.lastBuildMode, + native_assets_cli.BuildModeImpl.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 6da128deb3f..c3dd78062d1 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 @@ -21,35 +21,36 @@ class FakeNativeAssetsBuildRunner implements NativeAssetsBuildRunner { this.onBuild, this.dryRunResult = const FakeNativeAssetsBuilderResult(), this.buildResult = const FakeNativeAssetsBuilderResult(), - CCompilerConfig? cCompilerConfigResult, - CCompilerConfig? ndkCCompilerConfigResult, - }) : cCompilerConfigResult = cCompilerConfigResult ?? CCompilerConfig(), - ndkCCompilerConfigResult = ndkCCompilerConfigResult ?? CCompilerConfig(); + CCompilerConfigImpl? cCompilerConfigResult, + CCompilerConfigImpl? ndkCCompilerConfigImplResult, + }) : cCompilerConfigResult = cCompilerConfigResult ?? CCompilerConfigImpl(), + ndkCCompilerConfigImplResult = + ndkCCompilerConfigImplResult ?? CCompilerConfigImpl(); final native_assets_builder.BuildResult Function(Target)? onBuild; final native_assets_builder.BuildResult buildResult; final native_assets_builder.DryRunResult dryRunResult; final bool hasPackageConfigResult; final List packagesWithNativeAssetsResult; - final CCompilerConfig cCompilerConfigResult; - final CCompilerConfig ndkCCompilerConfigResult; + final CCompilerConfigImpl cCompilerConfigResult; + final CCompilerConfigImpl ndkCCompilerConfigImplResult; int buildInvocations = 0; int dryRunInvocations = 0; int hasPackageConfigInvocations = 0; int packagesWithNativeAssetsInvocations = 0; - BuildMode? lastBuildMode; + BuildModeImpl? lastBuildMode; @override Future build({ required bool includeParentEnvironment, - required BuildMode buildMode, - required LinkModePreference linkModePreference, + required BuildModeImpl buildMode, + required LinkModePreferenceImpl linkModePreference, required Target target, required Uri workingDirectory, - CCompilerConfig? cCompilerConfig, + CCompilerConfigImpl? cCompilerConfig, int? targetAndroidNdkApi, - IOSSdk? targetIOSSdk, + IOSSdkImpl? targetIOSSdkImpl, }) async { buildInvocations++; lastBuildMode = buildMode; @@ -59,8 +60,8 @@ class FakeNativeAssetsBuildRunner implements NativeAssetsBuildRunner { @override Future dryRun({ required bool includeParentEnvironment, - required LinkModePreference linkModePreference, - required OS targetOS, + required LinkModePreferenceImpl linkModePreference, + required OSImpl targetOS, required Uri workingDirectory, }) async { dryRunInvocations++; @@ -80,22 +81,24 @@ class FakeNativeAssetsBuildRunner implements NativeAssetsBuildRunner { } @override - Future get cCompilerConfig async => cCompilerConfigResult; + Future get cCompilerConfig async => + cCompilerConfigResult; @override - Future get ndkCCompilerConfig async => cCompilerConfigResult; + Future get ndkCCompilerConfigImpl async => + cCompilerConfigResult; } final class FakeNativeAssetsBuilderResult implements native_assets_builder.BuildResult { const FakeNativeAssetsBuilderResult({ - this.assets = const [], + this.assets = const [], this.dependencies = const [], this.success = true, }); @override - final List assets; + final List assets; @override final List dependencies; diff --git a/packages/flutter_tools/test/general.shard/isolated/hot_test.dart b/packages/flutter_tools/test/general.shard/isolated/hot_test.dart index 03957db464e..0ac9beda340 100644 --- a/packages/flutter_tools/test/general.shard/isolated/hot_test.dart +++ b/packages/flutter_tools/test/general.shard/isolated/hot_test.dart @@ -14,9 +14,7 @@ import 'package:flutter_tools/src/resident_devtools_handler.dart'; import 'package:flutter_tools/src/resident_runner.dart'; import 'package:flutter_tools/src/run_hot.dart'; import 'package:native_assets_cli/native_assets_cli_internal.dart' - hide BuildMode, Target; -import 'package:native_assets_cli/native_assets_cli_internal.dart' - as native_assets_cli; + hide Target; import 'package:package_config/package_config.dart'; import 'package:unified_analytics/unified_analytics.dart'; @@ -65,12 +63,20 @@ void main() { Package('bar', fileSystem.currentDirectory.uri), ], dryRunResult: FakeNativeAssetsBuilderResult( - assets: [ - Asset( + assets: [ + NativeCodeAssetImpl( id: 'package:bar/bar.dart', - linkMode: LinkMode.dynamic, - target: native_assets_cli.Target.macOSArm64, - path: AssetAbsolutePath(Uri.file('bar.dylib')), + linkMode: DynamicLoadingBundledImpl(), + os: OSImpl.macOS, + architecture: ArchitectureImpl.arm64, + file: Uri.file('bar.dylib'), + ), + NativeCodeAssetImpl( + id: 'package:bar/bar.dart', + linkMode: DynamicLoadingBundledImpl(), + os: OSImpl.macOS, + architecture: ArchitectureImpl.x64, + file: Uri.file('bar.dylib'), ), ], ), @@ -124,12 +130,20 @@ void main() { Package('bar', fileSystem.currentDirectory.uri), ], dryRunResult: FakeNativeAssetsBuilderResult( - assets: [ - Asset( + assets: [ + NativeCodeAssetImpl( id: 'package:bar/bar.dart', - linkMode: LinkMode.dynamic, - target: native_assets_cli.Target.macOSArm64, - path: AssetAbsolutePath(Uri.file('bar.dylib')), + linkMode: DynamicLoadingBundledImpl(), + os: OSImpl.macOS, + architecture: ArchitectureImpl.arm64, + file: Uri.file('bar.dylib'), + ), + NativeCodeAssetImpl( + id: 'package:bar/bar.dart', + linkMode: DynamicLoadingBundledImpl(), + os: OSImpl.macOS, + architecture: ArchitectureImpl.x64, + file: Uri.file('bar.dylib'), ), ], ), 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 f76ed542043..d1320657569 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/features.dart'; import 'package:flutter_tools/src/globals.dart' as globals; import 'package:flutter_tools/src/isolated/native_assets/ios/native_assets.dart'; import 'package:native_assets_cli/native_assets_cli_internal.dart' - hide BuildMode, Target; + hide Target; import 'package:native_assets_cli/native_assets_cli_internal.dart' as native_assets_cli; import 'package:package_config/package_config_types.dart'; @@ -127,18 +127,20 @@ void main() { Package('bar', projectUri), ], dryRunResult: FakeNativeAssetsBuilderResult( - assets: [ - Asset( + assets: [ + NativeCodeAssetImpl( id: 'package:bar/bar.dart', - linkMode: LinkMode.dynamic, - target: native_assets_cli.Target.macOSArm64, - path: AssetAbsolutePath(Uri.file('libbar.dylib')), + linkMode: DynamicLoadingBundledImpl(), + os: OSImpl.macOS, + architecture: ArchitectureImpl.arm64, + file: Uri.file('libbar.dylib'), ), - Asset( + NativeCodeAssetImpl( id: 'package:bar/bar.dart', - linkMode: LinkMode.dynamic, - target: native_assets_cli.Target.macOSX64, - path: AssetAbsolutePath(Uri.file('libbar.dylib')), + linkMode: DynamicLoadingBundledImpl(), + os: OSImpl.macOS, + architecture: ArchitectureImpl.x64, + file: Uri.file('libbar.dylib'), ), ], ), @@ -265,12 +267,13 @@ void main() { Package('bar', projectUri), ], onBuild: (native_assets_cli.Target target) => FakeNativeAssetsBuilderResult( - assets: [ - Asset( + assets: [ + NativeCodeAssetImpl( id: 'package:bar/bar.dart', - linkMode: LinkMode.dynamic, - target: target, - path: AssetAbsolutePath(Uri.file('${target.architecture}/libbar.dylib')), + linkMode: DynamicLoadingBundledImpl(), + os: target.os, + architecture: target.architecture, + file: Uri.file('${target.architecture}/libbar.dylib'), ), ], ), 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 6806919da07..99579559e8d 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 @@ -18,9 +18,7 @@ import 'package:flutter_tools/src/globals.dart' as globals; import 'package:flutter_tools/src/isolated/native_assets/linux/native_assets.dart'; import 'package:flutter_tools/src/isolated/native_assets/native_assets.dart'; import 'package:native_assets_cli/native_assets_cli_internal.dart' - hide BuildMode, Target; -import 'package:native_assets_cli/native_assets_cli_internal.dart' - as native_assets_cli; + hide Target; import 'package:package_config/package_config_types.dart'; import '../../../src/common.dart'; @@ -165,18 +163,20 @@ void main() { Package('bar', projectUri), ], dryRunResult: FakeNativeAssetsBuilderResult( - assets: [ - Asset( + assets: [ + NativeCodeAssetImpl( id: 'package:bar/bar.dart', - linkMode: LinkMode.dynamic, - target: native_assets_cli.Target.linuxX64, - path: AssetAbsolutePath(Uri.file('libbar.so')), + linkMode: DynamicLoadingBundledImpl(), + os: OSImpl.linux, + architecture: ArchitectureImpl.x64, + file: Uri.file('libbar.so'), ), - Asset( + NativeCodeAssetImpl( id: 'package:bar/bar.dart', - linkMode: LinkMode.dynamic, - target: native_assets_cli.Target.linuxArm64, - path: AssetAbsolutePath(Uri.file('libbar.so')), + linkMode: DynamicLoadingBundledImpl(), + os: OSImpl.linux, + architecture: ArchitectureImpl.arm64, + file: Uri.file('libbar.so'), ), ], ), @@ -284,12 +284,13 @@ void main() { Package('bar', projectUri), ], buildResult: FakeNativeAssetsBuilderResult( - assets: [ - Asset( + assets: [ + NativeCodeAssetImpl( id: 'package:bar/bar.dart', - linkMode: LinkMode.dynamic, - target: native_assets_cli.Target.linuxX64, - path: AssetAbsolutePath(dylibAfterCompiling.uri), + linkMode: DynamicLoadingBundledImpl(), + os: OSImpl.linux, + architecture: ArchitectureImpl.x64, + file: dylibAfterCompiling.uri, ), ], ), @@ -337,18 +338,20 @@ void main() { Package('bar', projectUri), ], dryRunResult: FakeNativeAssetsBuilderResult( - assets: [ - Asset( + assets: [ + NativeCodeAssetImpl( id: 'package:bar/bar.dart', - linkMode: LinkMode.static, - target: native_assets_cli.Target.macOSArm64, - path: AssetAbsolutePath(Uri.file('bar.a')), + linkMode: StaticLinkingImpl(), + os: OSImpl.macOS, + architecture: ArchitectureImpl.arm64, + file: Uri.file('bar.a'), ), - Asset( + NativeCodeAssetImpl( id: 'package:bar/bar.dart', - linkMode: LinkMode.static, - target: native_assets_cli.Target.macOSX64, - path: AssetAbsolutePath(Uri.file('bar.a')), + linkMode: StaticLinkingImpl(), + os: OSImpl.macOS, + architecture: ArchitectureImpl.x64, + file: Uri.file('bar.a'), ), ], ), @@ -460,12 +463,13 @@ void main() { ); final NativeAssetsBuildRunner runner = NativeAssetsBuildRunnerImpl(projectUri, packageConfig, fileSystem, logger); - final CCompilerConfig result = await runner.cCompilerConfig; - expect(result.cc, Uri.file('/some/path/to/clang')); + final CCompilerConfigImpl result = await runner.cCompilerConfig; + expect(result.compiler, Uri.file('/some/path/to/clang')); }); } class _BuildRunnerWithoutClang extends FakeNativeAssetsBuildRunner { @override - Future get cCompilerConfig async => throwToolExit('Failed to find clang++ on the PATH.'); + Future get cCompilerConfig async => + throwToolExit('Failed to find clang++ on the PATH.'); } 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 6105febf261..f59fde6f867 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 @@ -16,7 +16,7 @@ import 'package:flutter_tools/src/globals.dart' as globals; import 'package:flutter_tools/src/isolated/native_assets/macos/native_assets.dart'; import 'package:flutter_tools/src/isolated/native_assets/native_assets.dart'; import 'package:native_assets_cli/native_assets_cli_internal.dart' - hide BuildMode, Target; + hide Target; import 'package:native_assets_cli/native_assets_cli_internal.dart' as native_assets_cli; import 'package:package_config/package_config_types.dart'; @@ -146,18 +146,20 @@ void main() { Package('bar', projectUri), ], dryRunResult: FakeNativeAssetsBuilderResult( - assets: [ - Asset( + assets: [ + NativeCodeAssetImpl( id: 'package:bar/bar.dart', - linkMode: LinkMode.dynamic, - target: native_assets_cli.Target.macOSArm64, - path: AssetAbsolutePath(Uri.file('libbar.dylib')), + linkMode: DynamicLoadingBundledImpl(), + os: OSImpl.macOS, + architecture: ArchitectureImpl.arm64, + file: Uri.file('libbar.dylib'), ), - Asset( + NativeCodeAssetImpl( id: 'package:bar/bar.dart', - linkMode: LinkMode.dynamic, - target: native_assets_cli.Target.macOSX64, - path: AssetAbsolutePath(Uri.file('libbar.dylib')), + linkMode: DynamicLoadingBundledImpl(), + os: OSImpl.macOS, + architecture: ArchitectureImpl.x64, + file: Uri.file('libbar.dylib'), ), ], ), @@ -302,12 +304,13 @@ void main() { Package('bar', projectUri), ], onBuild: (native_assets_cli.Target target) => FakeNativeAssetsBuilderResult( - assets: [ - Asset( + assets: [ + NativeCodeAssetImpl( id: 'package:bar/bar.dart', - linkMode: LinkMode.dynamic, - target: target, - path: AssetAbsolutePath(Uri.file('${target.architecture}/libbar.dylib')), + linkMode: DynamicLoadingBundledImpl(), + os: target.os, + architecture: target.architecture, + file: Uri.file('${target.architecture}/libbar.dylib'), ), ], ), @@ -355,18 +358,20 @@ void main() { Package('bar', projectUri), ], dryRunResult: FakeNativeAssetsBuilderResult( - assets: [ - Asset( + assets: [ + NativeCodeAssetImpl( id: 'package:bar/bar.dart', - linkMode: LinkMode.static, - target: native_assets_cli.Target.macOSArm64, - path: AssetAbsolutePath(Uri.file('bar.a')), + linkMode: StaticLinkingImpl(), + os: OSImpl.macOS, + architecture: ArchitectureImpl.arm64, + file: Uri.file('bar.a'), ), - Asset( + NativeCodeAssetImpl( id: 'package:bar/bar.dart', - linkMode: LinkMode.static, - target: native_assets_cli.Target.macOSX64, - path: AssetAbsolutePath(Uri.file('bar.a')), + linkMode: StaticLinkingImpl(), + os: OSImpl.macOS, + architecture: ArchitectureImpl.x64, + file: Uri.file('bar.a'), ), ], ), @@ -479,9 +484,9 @@ InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault fileSystem, logger, ); - final CCompilerConfig result = await runner.cCompilerConfig; + final CCompilerConfigImpl result = await runner.cCompilerConfig; expect( - result.cc, + result.compiler, Uri.file( '/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang', ), 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 15c8d587f3e..fd27541d9f5 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 @@ -17,9 +17,7 @@ import 'package:flutter_tools/src/globals.dart' as globals; import 'package:flutter_tools/src/isolated/native_assets/native_assets.dart'; import 'package:flutter_tools/src/isolated/native_assets/windows/native_assets.dart'; import 'package:native_assets_cli/native_assets_cli_internal.dart' - hide BuildMode, Target; -import 'package:native_assets_cli/native_assets_cli_internal.dart' - as native_assets_cli; + hide Target; import 'package:package_config/package_config_types.dart'; import '../../../src/common.dart'; @@ -145,12 +143,13 @@ void main() { Package('bar', projectUri), ], dryRunResult: FakeNativeAssetsBuilderResult( - assets: [ - Asset( + assets: [ + NativeCodeAssetImpl( id: 'package:bar/bar.dart', - linkMode: LinkMode.dynamic, - target: native_assets_cli.Target.windowsX64, - path: AssetAbsolutePath(Uri.file('bar.dll')), + linkMode: DynamicLoadingBundledImpl(), + os: OSImpl.windows, + architecture: ArchitectureImpl.x64, + file: Uri.file('bar.dll'), ), ], ), @@ -255,12 +254,13 @@ void main() { Package('bar', projectUri), ], buildResult: FakeNativeAssetsBuilderResult( - assets: [ - Asset( + assets: [ + NativeCodeAssetImpl( id: 'package:bar/bar.dart', - linkMode: LinkMode.dynamic, - target: native_assets_cli.Target.windowsX64, - path: AssetAbsolutePath(dylibAfterCompiling.uri), + linkMode: DynamicLoadingBundledImpl(), + os: OSImpl.windows, + architecture: ArchitectureImpl.x64, + file: dylibAfterCompiling.uri, ), ], ), @@ -308,12 +308,13 @@ void main() { Package('bar', projectUri), ], dryRunResult: FakeNativeAssetsBuilderResult( - assets: [ - Asset( + assets: [ + NativeCodeAssetImpl( id: 'package:bar/bar.dart', - linkMode: LinkMode.static, - target: native_assets_cli.Target.windowsX64, - path: AssetAbsolutePath(Uri.file(OS.windows.staticlibFileName('bar'))), + linkMode: StaticLinkingImpl(), + os: OSImpl.windows, + architecture: ArchitectureImpl.x64, + file: Uri.file(OSImpl.windows.staticlibFileName('bar')), ), ], ), @@ -492,10 +493,19 @@ void main() { fileSystem, logger, ); - final CCompilerConfig result = await runner.cCompilerConfig; - expect(result.cc?.toFilePath(), msvcBinDir.childFile('cl.exe').uri.toFilePath()); - expect(result.ar?.toFilePath(), msvcBinDir.childFile('lib.exe').uri.toFilePath()); - expect(result.ld?.toFilePath(), msvcBinDir.childFile('link.exe').uri.toFilePath()); + final CCompilerConfigImpl 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.dart b/packages/flutter_tools/test/integration.shard/isolated/native_assets_test.dart index 898fa92185a..1551663e0f5 100644 --- a/packages/flutter_tools/test/integration.shard/isolated/native_assets_test.dart +++ b/packages/flutter_tools/test/integration.shard/isolated/native_assets_test.dart @@ -227,16 +227,17 @@ void main() { testWithoutContext('flutter build $buildSubcommand error on static libraries', () async { await inTempDir((Directory tempDirectory) async { final Directory packageDirectory = await createTestProject(packageName, tempDirectory); - final File buildDotDart = packageDirectory.childFile('build.dart'); + final File buildDotDart = + packageDirectory.childDirectory('hook').childFile('build.dart'); final String buildDotDartContents = await buildDotDart.readAsString(); // Overrides the build to output static libraries. final String buildDotDartContentsNew = buildDotDartContents.replaceFirst( - 'final buildConfig = await BuildConfig.fromArgs(args);', + 'await build(args, (config, output) async {', ''' - final buildConfig = await BuildConfig.fromArgs([ - '-D${LinkModePreference.configKey}=${LinkModePreference.static}', + await build([ + '-D${LinkModePreferenceImpl.configKey}=${LinkModePreferenceImpl.static}', ...args, - ]); + ], (config, output) async { ''', ); expect(buildDotDartContentsNew, isNot(buildDotDartContents)); @@ -344,7 +345,7 @@ void expectDylibIsBundledIos(Directory appDirectory, String buildMode) { /// Sample path: build/linux/x64/release/bundle/lib/libmy_package.so void expectDylibIsBundledLinux(Directory appDirectory, String buildMode) { // Linux does not support cross compilation, so always only check current architecture. - final String architecture = Architecture.current.dartPlatform; + final String architecture = ArchitectureImpl.current.dartPlatform; final Directory appBundle = appDirectory .childDirectory('build') .childDirectory(hostOs) @@ -354,7 +355,8 @@ void expectDylibIsBundledLinux(Directory appDirectory, String buildMode) { expect(appBundle, exists); final Directory dylibsFolder = appBundle.childDirectory('lib'); expect(dylibsFolder, exists); - final File dylib = dylibsFolder.childFile(OS.linux.dylibFileName(packageName)); + final File dylib = + dylibsFolder.childFile(OSImpl.linux.dylibFileName(packageName)); expect(dylib, exists); } @@ -363,7 +365,7 @@ void expectDylibIsBundledLinux(Directory appDirectory, String buildMode) { /// Sample path: build\windows\x64\runner\Debug\my_package_example.exe void expectDylibIsBundledWindows(Directory appDirectory, String buildMode) { // Linux does not support cross compilation, so always only check current architecture. - final String architecture = Architecture.current.dartPlatform; + final String architecture = ArchitectureImpl.current.dartPlatform; final Directory appBundle = appDirectory .childDirectory('build') .childDirectory(hostOs) @@ -371,7 +373,8 @@ void expectDylibIsBundledWindows(Directory appDirectory, String buildMode) { .childDirectory('runner') .childDirectory(buildMode.upperCaseFirst()); expect(appBundle, exists); - final File dylib = appBundle.childFile(OS.windows.dylibFileName(packageName)); + final File dylib = + appBundle.childFile(OSImpl.windows.dylibFileName(packageName)); expect(dylib, exists); } @@ -401,7 +404,8 @@ void expectDylibIsBundledAndroid(Directory appDirectory, String buildMode) { if (buildMode != 'debug') { expect(archDir.childFile('libapp.so'), exists); } - final File dylib = archDir.childFile(OS.android.dylibFileName(packageName)); + final File dylib = + archDir.childFile(OSImpl.android.dylibFileName(packageName)); expect(dylib, exists); } } @@ -424,14 +428,14 @@ void expectDylibIsBundledWithFrameworks(Directory appDirectory, String buildMode void expectCCompilerIsConfigured(Directory appDirectory) { final Directory nativeAssetsBuilderDir = appDirectory.childDirectory('.dart_tool/native_assets_builder/'); for (final Directory subDir in nativeAssetsBuilderDir.listSync().whereType()) { - final File config = subDir.childFile('config.yaml'); + final File config = subDir.childFile('config.json'); expect(config, exists); final String contents = config.readAsStringSync(); // Dry run does not pass compiler info. - if (contents.contains('dry_run: true')) { + if (contents.contains('"dry_run": true')) { continue; } - expect(contents, contains('cc: ')); + expect(contents, contains('"cc": ')); } }