forked from firka/flutter
Make flutter_tools use newest package:{native_assets_builder,native_assets_cli,native_toolchain_c} (#158214)
Almost all of the code is just adopting to changes to the APIs of `package:native_assets_builder`, `package:native_assets_cli` and `package:native_toolchain_c` There's only two semantic changes * Removes a test that checks for a verification error if a build hook produces a static library if the preferred linking mode is dynamic: => The test is written in a very hacky way. By monkey patching the build config.json that flutter build actually made. This monkey patching relies on package:cli_config which is now no longer used. => The actual code that checks for this mismatch lives in dart-lang/native repository and is tested there. So there's really no need to duplicate that. * The `package:native_assets_builder` no longer knows about code assets. This is something a user of that package (e.g. flutter tools) adds. Now the dry-run functionality will invoke build hooks who produce code assets without an architecture. => The `package:native_assets_builder` used to expand such a code asset to N different code assets (one for each supported architecture) => This logic was now moved to flutter tools. => In the near future we're going to this dry-run complexity, which will then also get rid of this uglyness (of expanding to all archs of an OS).
This commit is contained in:
committed by
GitHub
parent
22a7afd99a
commit
3a83e43ede
@@ -3,12 +3,12 @@
|
||||
// found in the LICENSE file.
|
||||
|
||||
import 'package:logging/logging.dart';
|
||||
import 'package:native_assets_cli/native_assets_cli.dart';
|
||||
import 'package:native_assets_cli/code_assets.dart';
|
||||
import 'package:native_assets_cli/code_assets_builder.dart';
|
||||
import 'package:native_toolchain_c/native_toolchain_c.dart';
|
||||
|
||||
|
||||
void main(List<String> args) async {
|
||||
await build(args, (BuildConfig config, BuildOutput output) async {
|
||||
await build(args, (BuildConfig config, BuildOutputBuilder output) async {
|
||||
final String assetName;
|
||||
if (config.linkingEnabled) {
|
||||
// The link hook will be run. So emit an asset with a name that is
|
||||
@@ -30,7 +30,7 @@ void main(List<String> args) async {
|
||||
],
|
||||
dartBuildFiles: <String>['hook/build.dart'],
|
||||
);
|
||||
final BuildOutput outputCatcher = BuildOutput();
|
||||
final BuildOutputBuilder outputCatcher = BuildOutputBuilder();
|
||||
await cbuilder.run(
|
||||
config: config,
|
||||
output: outputCatcher,
|
||||
@@ -38,10 +38,11 @@ void main(List<String> args) async {
|
||||
..level = Level.ALL
|
||||
..onRecord.listen((LogRecord record) => print(record.message)),
|
||||
);
|
||||
output.addDependencies(outputCatcher.dependencies);
|
||||
final BuildOutput catchedOutput = BuildOutput(outputCatcher.json);
|
||||
output.addDependencies(catchedOutput.dependencies);
|
||||
// Send the asset to hook/link.dart or immediately for bundling.
|
||||
output.addAsset(
|
||||
outputCatcher.assets.single,
|
||||
output.codeAssets.add(
|
||||
catchedOutput.codeAssets.single,
|
||||
linkInPackage: config.linkingEnabled ? 'link_hook' : null,
|
||||
);
|
||||
});
|
||||
|
||||
@@ -2,13 +2,13 @@
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
import 'package:native_assets_cli/native_assets_cli.dart';
|
||||
import 'package:native_assets_cli/code_assets.dart';
|
||||
|
||||
void main(List<String> args) async {
|
||||
await link(args, (LinkConfig config, LinkOutput output) async {
|
||||
final NativeCodeAsset asset = config.assets.single as NativeCodeAsset;
|
||||
await link(args, (LinkConfig config, LinkOutputBuilder output) async {
|
||||
final CodeAsset asset = config.codeAssets.single;
|
||||
final String packageName = config.packageName;
|
||||
output.addAsset(NativeCodeAsset(
|
||||
output.codeAssets.add(CodeAsset(
|
||||
package: packageName,
|
||||
// Change the asset id to something that is used.
|
||||
name: '${packageName}_bindings_generated.dart',
|
||||
|
||||
@@ -6,10 +6,9 @@ environment:
|
||||
sdk: '>=3.5.0-154.0.dev <4.0.0'
|
||||
|
||||
dependencies:
|
||||
cli_config: 0.2.0
|
||||
logging: 1.2.0
|
||||
native_assets_cli: 0.8.0
|
||||
native_toolchain_c: 0.5.4
|
||||
native_assets_cli: 0.9.0
|
||||
native_toolchain_c: 0.6.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"
|
||||
@@ -68,4 +67,4 @@ dev_dependencies:
|
||||
quiver: 3.2.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
||||
yaml_edit: 2.2.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
|
||||
|
||||
# PUBSPEC CHECKSUM: ddf6
|
||||
# PUBSPEC CHECKSUM: a89a
|
||||
|
||||
@@ -3,8 +3,7 @@
|
||||
// found in the LICENSE file.
|
||||
|
||||
import 'package:native_assets_builder/native_assets_builder.dart';
|
||||
import 'package:native_assets_cli/native_assets_cli.dart';
|
||||
import 'package:native_assets_cli/native_assets_cli_internal.dart';
|
||||
import 'package:native_assets_cli/code_assets_builder.dart';
|
||||
|
||||
import '../../../android/android_sdk.dart';
|
||||
import '../../../android/gradle_utils.dart';
|
||||
@@ -19,7 +18,7 @@ int targetAndroidNdkApi(Map<String, String> environmentDefines) {
|
||||
|
||||
Future<void> copyNativeCodeAssetsAndroid(
|
||||
Uri buildUri,
|
||||
Map<NativeCodeAssetImpl, KernelAsset> assetTargetLocations,
|
||||
Map<CodeAsset, KernelAsset> assetTargetLocations,
|
||||
FileSystem fileSystem,
|
||||
) async {
|
||||
if (assetTargetLocations.isNotEmpty) {
|
||||
@@ -33,7 +32,7 @@ Future<void> copyNativeCodeAssetsAndroid(
|
||||
final Uri archUri = buildUri.resolve('jniLibs/lib/$jniArchDir/');
|
||||
await fileSystem.directory(archUri).create(recursive: true);
|
||||
}
|
||||
for (final MapEntry<NativeCodeAssetImpl, KernelAsset> assetMapping
|
||||
for (final MapEntry<CodeAsset, KernelAsset> assetMapping
|
||||
in assetTargetLocations.entries) {
|
||||
final Uri source = assetMapping.key.file!;
|
||||
final Uri target = (assetMapping.value.path as KernelAssetAbsolutePath).uri;
|
||||
@@ -71,17 +70,17 @@ AndroidArch _getAndroidArch(Target target) {
|
||||
};
|
||||
}
|
||||
|
||||
Map<NativeCodeAssetImpl, KernelAsset> assetTargetLocationsAndroid(
|
||||
List<NativeCodeAssetImpl> nativeAssets) {
|
||||
return <NativeCodeAssetImpl, KernelAsset>{
|
||||
for (final NativeCodeAssetImpl asset in nativeAssets)
|
||||
Map<CodeAsset, KernelAsset> assetTargetLocationsAndroid(
|
||||
List<CodeAsset> nativeAssets) {
|
||||
return <CodeAsset, KernelAsset>{
|
||||
for (final CodeAsset 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(NativeCodeAssetImpl asset) {
|
||||
KernelAsset _targetLocationAndroid(CodeAsset asset) {
|
||||
final LinkMode linkMode = asset.linkMode;
|
||||
final KernelAssetPath kernelAssetPath;
|
||||
switch (linkMode) {
|
||||
@@ -113,12 +112,12 @@ KernelAsset _targetLocationAndroid(NativeCodeAssetImpl asset) {
|
||||
/// Should only be invoked if a native assets build is performed. If the native
|
||||
/// assets feature is disabled, or none of the packages have native assets, a
|
||||
/// missing NDK is okay.
|
||||
Future<CCompilerConfigImpl> cCompilerConfigAndroid() async {
|
||||
Future<CCompilerConfig> cCompilerConfigAndroid() async {
|
||||
final AndroidSdk? androidSdk = AndroidSdk.locateAndroidSdk();
|
||||
if (androidSdk == null) {
|
||||
throwToolExit('Android SDK could not be found.');
|
||||
}
|
||||
final CCompilerConfigImpl result = CCompilerConfigImpl(
|
||||
final CCompilerConfig result = CCompilerConfig(
|
||||
compiler: _toOptionalFileUri(androidSdk.getNdkClangPath()),
|
||||
archiver: _toOptionalFileUri(androidSdk.getNdkArPath()),
|
||||
linker: _toOptionalFileUri(androidSdk.getNdkLdPath()),
|
||||
|
||||
@@ -3,8 +3,7 @@
|
||||
// found in the LICENSE file.
|
||||
|
||||
import 'package:native_assets_builder/native_assets_builder.dart';
|
||||
import 'package:native_assets_cli/native_assets_cli.dart';
|
||||
import 'package:native_assets_cli/native_assets_cli_internal.dart';
|
||||
import 'package:native_assets_cli/code_assets_builder.dart';
|
||||
|
||||
import '../../../base/file_system.dart';
|
||||
import '../../../build_info.dart' hide BuildMode;
|
||||
@@ -15,10 +14,10 @@ import '../macos/native_assets_host.dart';
|
||||
// TODO(dcharkes): Fetch minimum iOS version from somewhere. https://github.com/flutter/flutter/issues/145104
|
||||
const int targetIOSVersion = 12;
|
||||
|
||||
IOSSdkImpl getIOSSdk(EnvironmentType environmentType) {
|
||||
IOSSdk getIOSSdk(EnvironmentType environmentType) {
|
||||
return switch (environmentType) {
|
||||
EnvironmentType.physical => IOSSdkImpl.iPhoneOS,
|
||||
EnvironmentType.simulator => IOSSdkImpl.iPhoneSimulator,
|
||||
EnvironmentType.physical => IOSSdk.iPhoneOS,
|
||||
EnvironmentType.simulator => IOSSdk.iPhoneSimulator,
|
||||
};
|
||||
}
|
||||
|
||||
@@ -31,13 +30,13 @@ Target getNativeIOSTarget(DarwinArch darwinArch) {
|
||||
};
|
||||
}
|
||||
|
||||
Map<KernelAssetPath, List<NativeCodeAssetImpl>> fatAssetTargetLocationsIOS(
|
||||
List<NativeCodeAssetImpl> nativeAssets) {
|
||||
Map<KernelAssetPath, List<CodeAsset>> fatAssetTargetLocationsIOS(
|
||||
List<CodeAsset> nativeAssets) {
|
||||
final Set<String> alreadyTakenNames = <String>{};
|
||||
final Map<KernelAssetPath, List<NativeCodeAssetImpl>> result =
|
||||
<KernelAssetPath, List<NativeCodeAssetImpl>>{};
|
||||
final Map<KernelAssetPath, List<CodeAsset>> result =
|
||||
<KernelAssetPath, List<CodeAsset>>{};
|
||||
final Map<String, KernelAssetPath> idToPath = <String, KernelAssetPath>{};
|
||||
for (final NativeCodeAssetImpl asset in nativeAssets) {
|
||||
for (final CodeAsset asset in nativeAssets) {
|
||||
// Use same target path for all assets with the same id.
|
||||
final KernelAssetPath path = idToPath[asset.id] ??
|
||||
_targetLocationIOS(
|
||||
@@ -45,19 +44,18 @@ Map<KernelAssetPath, List<NativeCodeAssetImpl>> fatAssetTargetLocationsIOS(
|
||||
alreadyTakenNames,
|
||||
).path;
|
||||
idToPath[asset.id] = path;
|
||||
result[path] ??= <NativeCodeAssetImpl>[];
|
||||
result[path] ??= <CodeAsset>[];
|
||||
result[path]!.add(asset);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
Map<NativeCodeAssetImpl, KernelAsset> assetTargetLocationsIOS(
|
||||
List<NativeCodeAssetImpl> nativeAssets) {
|
||||
Map<CodeAsset, KernelAsset> assetTargetLocationsIOS(
|
||||
List<CodeAsset> nativeAssets) {
|
||||
final Set<String> alreadyTakenNames = <String>{};
|
||||
final Map<String, KernelAssetPath> idToPath = <String, KernelAssetPath>{};
|
||||
final Map<NativeCodeAssetImpl, KernelAsset> result =
|
||||
<NativeCodeAssetImpl, KernelAsset>{};
|
||||
for (final NativeCodeAssetImpl asset in nativeAssets) {
|
||||
final Map<CodeAsset, KernelAsset> result = <CodeAsset, KernelAsset>{};
|
||||
for (final CodeAsset asset in nativeAssets) {
|
||||
final KernelAssetPath path =
|
||||
idToPath[asset.id] ?? _targetLocationIOS(asset, alreadyTakenNames).path;
|
||||
idToPath[asset.id] = path;
|
||||
@@ -70,8 +68,7 @@ Map<NativeCodeAssetImpl, KernelAsset> assetTargetLocationsIOS(
|
||||
return result;
|
||||
}
|
||||
|
||||
KernelAsset _targetLocationIOS(
|
||||
NativeCodeAssetImpl asset, Set<String> alreadyTakenNames) {
|
||||
KernelAsset _targetLocationIOS(CodeAsset asset, Set<String> alreadyTakenNames) {
|
||||
final LinkMode linkMode = asset.linkMode;
|
||||
final KernelAssetPath kernelAssetPath;
|
||||
switch (linkMode) {
|
||||
@@ -113,7 +110,7 @@ KernelAsset _targetLocationIOS(
|
||||
/// in xcode_backend.dart.
|
||||
Future<void> copyNativeCodeAssetsIOS(
|
||||
Uri buildUri,
|
||||
Map<KernelAssetPath, List<NativeCodeAssetImpl>> assetTargetLocations,
|
||||
Map<KernelAssetPath, List<CodeAsset>> assetTargetLocations,
|
||||
String? codesignIdentity,
|
||||
build_info.BuildMode buildMode,
|
||||
FileSystem fileSystem,
|
||||
@@ -125,11 +122,11 @@ Future<void> copyNativeCodeAssetsIOS(
|
||||
final Map<String, String> oldToNewInstallNames = <String, String>{};
|
||||
final List<(File, String, Directory)> dylibs = <(File, String, Directory)>[];
|
||||
|
||||
for (final MapEntry<KernelAssetPath, List<NativeCodeAssetImpl>> assetMapping
|
||||
for (final MapEntry<KernelAssetPath, List<CodeAsset>> assetMapping
|
||||
in assetTargetLocations.entries) {
|
||||
final Uri target = (assetMapping.key as KernelAssetAbsolutePath).uri;
|
||||
final List<File> sources = <File>[
|
||||
for (final NativeCodeAssetImpl source in assetMapping.value)
|
||||
for (final CodeAsset source in assetMapping.value)
|
||||
fileSystem.file(source.file)
|
||||
];
|
||||
final Uri targetUri = buildUri.resolveUri(target);
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
import 'package:native_assets_cli/native_assets_cli_internal.dart';
|
||||
import 'package:native_assets_cli/code_assets_builder.dart';
|
||||
|
||||
import '../../../base/common.dart';
|
||||
import '../../../base/file_system.dart';
|
||||
@@ -12,7 +12,7 @@ import '../../../globals.dart' as globals;
|
||||
/// Flutter expects `clang++` to be on the path on Linux hosts.
|
||||
///
|
||||
/// Search for the accompanying `clang`, `ar`, and `ld`.
|
||||
Future<CCompilerConfigImpl> cCompilerConfigLinux() async {
|
||||
Future<CCompilerConfig> cCompilerConfigLinux() async {
|
||||
const String kClangPlusPlusBinary = 'clang++';
|
||||
const String kClangBinary = 'clang';
|
||||
const String kArBinary = 'llvm-ar';
|
||||
@@ -34,7 +34,7 @@ Future<CCompilerConfigImpl> cCompilerConfigLinux() async {
|
||||
}
|
||||
binaryPaths[binary] = binaryFile.uri;
|
||||
}
|
||||
return CCompilerConfigImpl(
|
||||
return CCompilerConfig(
|
||||
archiver: binaryPaths[kArBinary],
|
||||
compiler: binaryPaths[kClangBinary],
|
||||
linker: binaryPaths[kLdBinary],
|
||||
|
||||
@@ -3,8 +3,7 @@
|
||||
// found in the LICENSE file.
|
||||
|
||||
import 'package:native_assets_builder/native_assets_builder.dart';
|
||||
import 'package:native_assets_cli/native_assets_cli.dart';
|
||||
import 'package:native_assets_cli/native_assets_cli_internal.dart';
|
||||
import 'package:native_assets_cli/code_assets_builder.dart';
|
||||
|
||||
import '../../../base/file_system.dart';
|
||||
import '../../../build_info.dart' hide BuildMode;
|
||||
@@ -24,15 +23,15 @@ Target getNativeMacOSTarget(DarwinArch darwinArch) {
|
||||
};
|
||||
}
|
||||
|
||||
Map<KernelAssetPath, List<NativeCodeAssetImpl>> fatAssetTargetLocationsMacOS(
|
||||
List<NativeCodeAssetImpl> nativeAssets,
|
||||
Map<KernelAssetPath, List<CodeAsset>> fatAssetTargetLocationsMacOS(
|
||||
List<CodeAsset> nativeAssets,
|
||||
Uri? absolutePath,
|
||||
) {
|
||||
final Set<String> alreadyTakenNames = <String>{};
|
||||
final Map<KernelAssetPath, List<NativeCodeAssetImpl>> result =
|
||||
<KernelAssetPath, List<NativeCodeAssetImpl>>{};
|
||||
final Map<KernelAssetPath, List<CodeAsset>> result =
|
||||
<KernelAssetPath, List<CodeAsset>>{};
|
||||
final Map<String, KernelAssetPath> idToPath = <String, KernelAssetPath>{};
|
||||
for (final NativeCodeAssetImpl asset in nativeAssets) {
|
||||
for (final CodeAsset asset in nativeAssets) {
|
||||
// Use same target path for all assets with the same id.
|
||||
final KernelAssetPath path = idToPath[asset.id] ??
|
||||
_targetLocationMacOS(
|
||||
@@ -41,20 +40,20 @@ Map<KernelAssetPath, List<NativeCodeAssetImpl>> fatAssetTargetLocationsMacOS(
|
||||
alreadyTakenNames,
|
||||
).path;
|
||||
idToPath[asset.id] = path;
|
||||
result[path] ??= <NativeCodeAssetImpl>[];
|
||||
result[path] ??= <CodeAsset>[];
|
||||
result[path]!.add(asset);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
Map<NativeCodeAssetImpl, KernelAsset> assetTargetLocationsMacOS(
|
||||
List<NativeCodeAssetImpl> nativeAssets,
|
||||
Map<CodeAsset, KernelAsset> assetTargetLocationsMacOS(
|
||||
List<CodeAsset> nativeAssets,
|
||||
Uri? absolutePath,
|
||||
) {
|
||||
final Set<String> alreadyTakenNames = <String>{};
|
||||
final Map<String, KernelAssetPath> idToPath = <String, KernelAssetPath>{};
|
||||
final Map<NativeCodeAssetImpl, KernelAsset> result = <NativeCodeAssetImpl, KernelAsset>{};
|
||||
for (final NativeCodeAssetImpl asset in nativeAssets) {
|
||||
final Map<CodeAsset, KernelAsset> result = <CodeAsset, KernelAsset>{};
|
||||
for (final CodeAsset asset in nativeAssets) {
|
||||
final KernelAssetPath path = idToPath[asset.id] ??
|
||||
_targetLocationMacOS(asset, absolutePath, alreadyTakenNames).path;
|
||||
idToPath[asset.id] = path;
|
||||
@@ -68,7 +67,7 @@ Map<NativeCodeAssetImpl, KernelAsset> assetTargetLocationsMacOS(
|
||||
}
|
||||
|
||||
KernelAsset _targetLocationMacOS(
|
||||
NativeCodeAssetImpl asset,
|
||||
CodeAsset asset,
|
||||
Uri? absolutePath,
|
||||
Set<String> alreadyTakenNames,
|
||||
) {
|
||||
@@ -123,7 +122,7 @@ KernelAsset _targetLocationMacOS(
|
||||
/// in macos_assemble.sh.
|
||||
Future<void> copyNativeCodeAssetsMacOS(
|
||||
Uri buildUri,
|
||||
Map<KernelAssetPath, List<NativeCodeAssetImpl>> assetTargetLocations,
|
||||
Map<KernelAssetPath, List<CodeAsset>> assetTargetLocations,
|
||||
String? codesignIdentity,
|
||||
build_info.BuildMode buildMode,
|
||||
FileSystem fileSystem,
|
||||
@@ -136,11 +135,11 @@ Future<void> copyNativeCodeAssetsMacOS(
|
||||
final Map<String, String> oldToNewInstallNames = <String, String>{};
|
||||
final List<(File, String, Directory)> dylibs = <(File, String, Directory)>[];
|
||||
|
||||
for (final MapEntry<KernelAssetPath, List<NativeCodeAssetImpl>> assetMapping
|
||||
for (final MapEntry<KernelAssetPath, List<CodeAsset>> assetMapping
|
||||
in assetTargetLocations.entries) {
|
||||
final Uri target = (assetMapping.key as KernelAssetAbsolutePath).uri;
|
||||
final List<File> sources = <File>[
|
||||
for (final NativeCodeAssetImpl source in assetMapping.value) fileSystem.file(source.file),
|
||||
for (final CodeAsset source in assetMapping.value) fileSystem.file(source.file),
|
||||
];
|
||||
final Uri targetUri = buildUri.resolveUri(target);
|
||||
final String name = targetUri.pathSegments.last;
|
||||
@@ -217,7 +216,7 @@ Future<void> copyNativeCodeAssetsMacOS(
|
||||
/// Code signing is also done here.
|
||||
Future<void> copyNativeCodeAssetsMacOSFlutterTester(
|
||||
Uri buildUri,
|
||||
Map<KernelAssetPath, List<NativeCodeAssetImpl>> assetTargetLocations,
|
||||
Map<KernelAssetPath, List<CodeAsset>> assetTargetLocations,
|
||||
String? codesignIdentity,
|
||||
build_info.BuildMode buildMode,
|
||||
FileSystem fileSystem,
|
||||
@@ -230,11 +229,11 @@ Future<void> copyNativeCodeAssetsMacOSFlutterTester(
|
||||
final Map<String, String> oldToNewInstallNames = <String, String>{};
|
||||
final List<(File, String)> dylibs = <(File, String)>[];
|
||||
|
||||
for (final MapEntry<KernelAssetPath, List<NativeCodeAssetImpl>> assetMapping
|
||||
for (final MapEntry<KernelAssetPath, List<CodeAsset>> assetMapping
|
||||
in assetTargetLocations.entries) {
|
||||
final Uri target = (assetMapping.key as KernelAssetAbsolutePath).uri;
|
||||
final List<File> sources = <File>[
|
||||
for (final NativeCodeAssetImpl source in assetMapping.value) fileSystem.file(source.file),
|
||||
for (final CodeAsset source in assetMapping.value) fileSystem.file(source.file),
|
||||
];
|
||||
final Uri targetUri = buildUri.resolveUri(target);
|
||||
final File dylibFile = fileSystem.file(targetUri);
|
||||
|
||||
@@ -4,8 +4,7 @@
|
||||
|
||||
// Shared logic between iOS and macOS implementations of native assets.
|
||||
|
||||
import 'package:native_assets_cli/native_assets_cli.dart';
|
||||
import 'package:native_assets_cli/native_assets_cli_internal.dart';
|
||||
import 'package:native_assets_cli/code_assets_builder.dart';
|
||||
|
||||
import '../../../base/common.dart';
|
||||
import '../../../base/file_system.dart';
|
||||
@@ -178,7 +177,7 @@ Future<void> 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<CCompilerConfigImpl> cCompilerConfigMacOS() async {
|
||||
Future<CCompilerConfig> cCompilerConfigMacOS() async {
|
||||
final ProcessResult xcrunResult = await globals.processManager.run(
|
||||
<String>['xcrun', 'clang', '--version'],
|
||||
);
|
||||
@@ -189,7 +188,7 @@ Future<CCompilerConfigImpl> cCompilerConfigMacOS() async {
|
||||
.firstWhere((String s) => s.startsWith('InstalledDir: '))
|
||||
.split(' ')
|
||||
.last;
|
||||
return CCompilerConfigImpl(
|
||||
return CCompilerConfig(
|
||||
compiler: Uri.file('$installPath/clang'),
|
||||
archiver: Uri.file('$installPath/ar'),
|
||||
linker: Uri.file('$installPath/ld'),
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
|
||||
import 'package:logging/logging.dart' as logging;
|
||||
import 'package:native_assets_builder/native_assets_builder.dart';
|
||||
import 'package:native_assets_cli/native_assets_cli.dart';
|
||||
import 'package:native_assets_cli/code_assets_builder.dart';
|
||||
import 'package:native_assets_cli/native_assets_cli_internal.dart';
|
||||
import 'package:package_config/package_config_types.dart';
|
||||
|
||||
@@ -34,12 +34,12 @@ import 'windows/native_assets.dart';
|
||||
/// If any of the dependencies change, then the Dart build should be performed
|
||||
/// again.
|
||||
final class DartBuildResult {
|
||||
const DartBuildResult({required this.codeAssets, required this.dependencies});
|
||||
const DartBuildResult(this.codeAssets, this.dependencies);
|
||||
const DartBuildResult.empty()
|
||||
: codeAssets = const <NativeCodeAssetImpl>[],
|
||||
: codeAssets = const <CodeAsset>[],
|
||||
dependencies = const <Uri>[];
|
||||
|
||||
final List<NativeCodeAssetImpl> codeAssets;
|
||||
final List<CodeAsset> codeAssets;
|
||||
final List<Uri> dependencies;
|
||||
}
|
||||
|
||||
@@ -109,7 +109,7 @@ Future<(DartBuildResult, Uri)> runFlutterSpecificDartBuild({
|
||||
final String? codesignIdentity =
|
||||
environmentDefines[build_info.kCodesignIdentity];
|
||||
|
||||
final Map<NativeCodeAssetImpl, KernelAsset> assetTargetLocations =
|
||||
final Map<CodeAsset, KernelAsset> assetTargetLocations =
|
||||
_assetTargetLocationsForOS(
|
||||
targetOS, result.codeAssets, flutterTester, buildUri);
|
||||
await _copyNativeCodeAssetsForOS(targetOS, buildUri, buildMode, fileSystem,
|
||||
@@ -130,8 +130,8 @@ Future<Uri?> runFlutterSpecificDartDryRunOnPlatforms({
|
||||
return null;
|
||||
}
|
||||
|
||||
final Map<NativeCodeAssetImpl, KernelAsset> assetTargetLocations =
|
||||
<NativeCodeAssetImpl, KernelAsset>{};
|
||||
final Map<CodeAsset, KernelAsset> assetTargetLocations =
|
||||
<CodeAsset, KernelAsset>{};
|
||||
for (final build_info.TargetPlatform targetPlatform in targetPlatforms) {
|
||||
// This dry-run functionality is only used in the `flutter run`
|
||||
// implementation (not in `flutter build` or `flutter test`).
|
||||
@@ -142,7 +142,7 @@ Future<Uri?> runFlutterSpecificDartDryRunOnPlatforms({
|
||||
final bool flutterTester =
|
||||
targetPlatform == build_info.TargetPlatform.tester;
|
||||
|
||||
final OSImpl targetOS = _getNativeOSFromTargetPlatfrorm(targetPlatform);
|
||||
final OS targetOS = _getNativeOSFromTargetPlatfrorm(targetPlatform);
|
||||
if (targetOS != OS.macOS &&
|
||||
targetOS != OS.windows &&
|
||||
targetOS != OS.linux &&
|
||||
@@ -194,48 +194,48 @@ abstract interface class FlutterNativeAssetsBuildRunner {
|
||||
Future<List<Package>> packagesWithNativeAssets();
|
||||
|
||||
/// Runs all [packagesWithNativeAssets] `build.dart` in dry run.
|
||||
Future<BuildDryRunResult> buildDryRun({
|
||||
Future<BuildDryRunResult?> buildDryRun({
|
||||
required List<String> supportedAssetTypes,
|
||||
required BuildConfigCreator configCreator,
|
||||
required BuildValidator buildValidator,
|
||||
required bool includeParentEnvironment,
|
||||
required LinkModePreferenceImpl linkModePreference,
|
||||
required OSImpl targetOS,
|
||||
required OS targetOS,
|
||||
required Uri workingDirectory,
|
||||
});
|
||||
|
||||
/// Runs all [packagesWithNativeAssets] `build.dart`.
|
||||
Future<BuildResult> build({
|
||||
Future<BuildResult?> build({
|
||||
required List<String> supportedAssetTypes,
|
||||
required BuildConfigValidator configValidator,
|
||||
required BuildConfigCreator configCreator,
|
||||
required BuildValidator buildValidator,
|
||||
required ApplicationAssetValidator applicationAssetValidator,
|
||||
required bool includeParentEnvironment,
|
||||
required BuildModeImpl buildMode,
|
||||
required LinkModePreferenceImpl linkModePreference,
|
||||
required Target target,
|
||||
required BuildMode buildMode,
|
||||
required OS targetOS,
|
||||
required Uri workingDirectory,
|
||||
CCompilerConfigImpl? cCompilerConfig,
|
||||
int? targetAndroidNdkApi,
|
||||
int? targetIOSVersion,
|
||||
int? targetMacOSVersion,
|
||||
IOSSdkImpl? targetIOSSdkImpl,
|
||||
required bool linkingEnabled,
|
||||
});
|
||||
|
||||
/// Runs all [packagesWithNativeAssets] `link.dart`.
|
||||
Future<LinkResult> link({
|
||||
Future<LinkResult?> link({
|
||||
required List<String> supportedAssetTypes,
|
||||
required LinkConfigValidator configValidator,
|
||||
required LinkConfigCreator configCreator,
|
||||
required LinkValidator linkValidator,
|
||||
required ApplicationAssetValidator applicationAssetValidator,
|
||||
required bool includeParentEnvironment,
|
||||
required BuildModeImpl buildMode,
|
||||
required LinkModePreferenceImpl linkModePreference,
|
||||
required Target target,
|
||||
required BuildMode buildMode,
|
||||
required OS targetOS,
|
||||
required Uri workingDirectory,
|
||||
required BuildResult buildResult,
|
||||
CCompilerConfigImpl? cCompilerConfig,
|
||||
int? targetAndroidNdkApi,
|
||||
int? targetIOSVersion,
|
||||
int? targetMacOSVersion,
|
||||
IOSSdkImpl? targetIOSSdkImpl,
|
||||
});
|
||||
|
||||
/// The C compiler config to use for compilation.
|
||||
Future<CCompilerConfigImpl> get cCompilerConfig;
|
||||
Future<CCompilerConfig> get cCompilerConfig;
|
||||
|
||||
/// The NDK compiler to use to use for compilation for Android.
|
||||
Future<CCompilerConfigImpl> get ndkCCompilerConfigImpl;
|
||||
Future<CCompilerConfig> get ndkCCompilerConfig;
|
||||
}
|
||||
|
||||
/// Uses `package:native_assets_builder` for its implementation.
|
||||
@@ -294,10 +294,12 @@ class FlutterNativeAssetsBuildRunnerImpl implements FlutterNativeAssetsBuildRunn
|
||||
}
|
||||
|
||||
@override
|
||||
Future<BuildDryRunResult> buildDryRun({
|
||||
Future<BuildDryRunResult?> buildDryRun({
|
||||
required List<String> supportedAssetTypes,
|
||||
required BuildConfigCreator configCreator,
|
||||
required BuildValidator buildValidator,
|
||||
required bool includeParentEnvironment,
|
||||
required LinkModePreferenceImpl linkModePreference,
|
||||
required OSImpl targetOS,
|
||||
required OS targetOS,
|
||||
required Uri workingDirectory,
|
||||
}) {
|
||||
final PackageLayout packageLayout = PackageLayout.fromPackageConfig(
|
||||
@@ -305,8 +307,10 @@ class FlutterNativeAssetsBuildRunnerImpl implements FlutterNativeAssetsBuildRunn
|
||||
Uri.file(packageConfigPath),
|
||||
);
|
||||
return _buildRunner.buildDryRun(
|
||||
supportedAssetTypes: supportedAssetTypes,
|
||||
configCreator: configCreator,
|
||||
buildValidator: buildValidator,
|
||||
includeParentEnvironment: includeParentEnvironment,
|
||||
linkModePreference: linkModePreference,
|
||||
targetOS: targetOS,
|
||||
workingDirectory: workingDirectory,
|
||||
packageLayout: packageLayout,
|
||||
@@ -315,17 +319,16 @@ class FlutterNativeAssetsBuildRunnerImpl implements FlutterNativeAssetsBuildRunn
|
||||
}
|
||||
|
||||
@override
|
||||
Future<BuildResult> build({
|
||||
Future<BuildResult?> build({
|
||||
required List<String> supportedAssetTypes,
|
||||
required BuildConfigValidator configValidator,
|
||||
required BuildConfigCreator configCreator,
|
||||
required BuildValidator buildValidator,
|
||||
required ApplicationAssetValidator applicationAssetValidator,
|
||||
required bool includeParentEnvironment,
|
||||
required BuildModeImpl buildMode,
|
||||
required LinkModePreferenceImpl linkModePreference,
|
||||
required Target target,
|
||||
required BuildMode buildMode,
|
||||
required OS targetOS,
|
||||
required Uri workingDirectory,
|
||||
CCompilerConfigImpl? cCompilerConfig,
|
||||
int? targetIOSVersion,
|
||||
int? targetMacOSVersion,
|
||||
int? targetAndroidNdkApi,
|
||||
IOSSdkImpl? targetIOSSdkImpl,
|
||||
required bool linkingEnabled,
|
||||
}) {
|
||||
final PackageLayout packageLayout = PackageLayout.fromPackageConfig(
|
||||
@@ -333,57 +336,54 @@ class FlutterNativeAssetsBuildRunnerImpl implements FlutterNativeAssetsBuildRunn
|
||||
Uri.file(packageConfigPath),
|
||||
);
|
||||
return _buildRunner.build(
|
||||
supportedAssetTypes: supportedAssetTypes,
|
||||
configCreator: configCreator,
|
||||
configValidator: configValidator,
|
||||
buildValidator: buildValidator,
|
||||
applicationAssetValidator: applicationAssetValidator,
|
||||
buildMode: buildMode,
|
||||
cCompilerConfig: cCompilerConfig,
|
||||
includeParentEnvironment: includeParentEnvironment,
|
||||
linkModePreference: linkModePreference,
|
||||
target: target,
|
||||
targetAndroidNdkApi: targetAndroidNdkApi,
|
||||
targetIOSSdk: targetIOSSdkImpl,
|
||||
targetOS: targetOS,
|
||||
workingDirectory: workingDirectory,
|
||||
packageLayout: packageLayout,
|
||||
targetIOSVersion: targetIOSVersion,
|
||||
targetMacOSVersion: targetMacOSVersion,
|
||||
linkingEnabled: linkingEnabled,
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<LinkResult> link({
|
||||
Future<LinkResult?> link({
|
||||
required List<String> supportedAssetTypes,
|
||||
required LinkConfigValidator configValidator,
|
||||
required LinkConfigCreator configCreator,
|
||||
required LinkValidator linkValidator,
|
||||
required ApplicationAssetValidator applicationAssetValidator,
|
||||
required bool includeParentEnvironment,
|
||||
required BuildModeImpl buildMode,
|
||||
required LinkModePreferenceImpl linkModePreference,
|
||||
required Target target,
|
||||
required BuildMode buildMode,
|
||||
required OS targetOS,
|
||||
required Uri workingDirectory,
|
||||
required BuildResult buildResult,
|
||||
CCompilerConfigImpl? cCompilerConfig,
|
||||
int? targetAndroidNdkApi,
|
||||
int? targetIOSVersion,
|
||||
int? targetMacOSVersion,
|
||||
IOSSdkImpl? targetIOSSdkImpl,
|
||||
}) {
|
||||
final PackageLayout packageLayout = PackageLayout.fromPackageConfig(
|
||||
packageConfig,
|
||||
Uri.file(packageConfigPath),
|
||||
);
|
||||
return _buildRunner.link(
|
||||
supportedAssetTypes: supportedAssetTypes,
|
||||
configCreator: configCreator,
|
||||
configValidator: configValidator,
|
||||
linkValidator: linkValidator,
|
||||
applicationAssetValidator: applicationAssetValidator,
|
||||
buildMode: buildMode,
|
||||
cCompilerConfig: cCompilerConfig,
|
||||
includeParentEnvironment: includeParentEnvironment,
|
||||
linkModePreference: linkModePreference,
|
||||
target: target,
|
||||
targetAndroidNdkApi: targetAndroidNdkApi,
|
||||
targetIOSSdk: targetIOSSdkImpl,
|
||||
targetOS: targetOS,
|
||||
workingDirectory: workingDirectory,
|
||||
packageLayout: packageLayout,
|
||||
buildResult: buildResult,
|
||||
targetIOSVersion: targetIOSVersion,
|
||||
targetMacOSVersion: targetMacOSVersion,
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
late final Future<CCompilerConfigImpl> cCompilerConfig = () {
|
||||
late final Future<CCompilerConfig> cCompilerConfig = () {
|
||||
if (globals.platform.isMacOS || globals.platform.isIOS) {
|
||||
return cCompilerConfigMacOS();
|
||||
}
|
||||
@@ -400,7 +400,7 @@ class FlutterNativeAssetsBuildRunnerImpl implements FlutterNativeAssetsBuildRunn
|
||||
}();
|
||||
|
||||
@override
|
||||
late final Future<CCompilerConfigImpl> ndkCCompilerConfigImpl = () {
|
||||
late final Future<CCompilerConfig> ndkCCompilerConfig = () {
|
||||
return cCompilerConfigAndroid();
|
||||
}();
|
||||
}
|
||||
@@ -423,14 +423,14 @@ Future<Uri> writeNativeAssetsYaml(
|
||||
}
|
||||
|
||||
/// Select the native asset build mode for a given Flutter build mode.
|
||||
BuildModeImpl _nativeAssetsBuildMode(build_info.BuildMode buildMode) {
|
||||
BuildMode _nativeAssetsBuildMode(build_info.BuildMode buildMode) {
|
||||
switch (buildMode) {
|
||||
case build_info.BuildMode.debug:
|
||||
return BuildModeImpl.debug;
|
||||
return BuildMode.debug;
|
||||
case build_info.BuildMode.jitRelease:
|
||||
case build_info.BuildMode.profile:
|
||||
case build_info.BuildMode.release:
|
||||
return BuildModeImpl.release;
|
||||
return BuildMode.release;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -448,7 +448,6 @@ Future<bool> _hasNoPackageConfig(FlutterNativeAssetsBuildRunner buildRunner) asy
|
||||
return !packageConfigExists;
|
||||
}
|
||||
|
||||
|
||||
Future<bool> _nativeBuildRequired(FlutterNativeAssetsBuildRunner buildRunner) async {
|
||||
if (await _hasNoPackageConfig(buildRunner)) {
|
||||
return false;
|
||||
@@ -547,7 +546,6 @@ class HotRunnerNativeAssetsBuilderImpl implements HotRunnerNativeAssetsBuilder {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// With `flutter run -d all` we need a place to store the native assets
|
||||
/// mapping for multiple OSes combined.
|
||||
Uri _buildUriMultiple(Uri projectUri) {
|
||||
@@ -555,12 +553,12 @@ Uri _buildUriMultiple(Uri projectUri) {
|
||||
return projectUri.resolve('$buildDir/native_assets/multiple/');
|
||||
}
|
||||
|
||||
Map<NativeCodeAssetImpl, KernelAsset> _assetTargetLocationsWindowsLinux(
|
||||
List<NativeCodeAssetImpl> assets,
|
||||
Map<CodeAsset, KernelAsset> _assetTargetLocationsWindowsLinux(
|
||||
List<CodeAsset> assets,
|
||||
Uri? absolutePath,
|
||||
) {
|
||||
return <NativeCodeAssetImpl, KernelAsset>{
|
||||
for (final NativeCodeAssetImpl asset in assets)
|
||||
return <CodeAsset, KernelAsset>{
|
||||
for (final CodeAsset asset in assets)
|
||||
asset: _targetLocationSingleArchitecture(
|
||||
asset,
|
||||
absolutePath,
|
||||
@@ -569,7 +567,7 @@ Map<NativeCodeAssetImpl, KernelAsset> _assetTargetLocationsWindowsLinux(
|
||||
}
|
||||
|
||||
KernelAsset _targetLocationSingleArchitecture(
|
||||
NativeCodeAssetImpl asset, Uri? absolutePath) {
|
||||
CodeAsset asset, Uri? absolutePath) {
|
||||
final LinkMode linkMode = asset.linkMode;
|
||||
final KernelAssetPath kernelAssetPath;
|
||||
switch (linkMode) {
|
||||
@@ -604,8 +602,8 @@ KernelAsset _targetLocationSingleArchitecture(
|
||||
);
|
||||
}
|
||||
|
||||
Map<NativeCodeAssetImpl, KernelAsset> _assetTargetLocationsForOS(OS targetOS,
|
||||
List<NativeCodeAssetImpl> codeAssets, bool flutterTester, Uri buildUri) {
|
||||
Map<CodeAsset, KernelAsset> _assetTargetLocationsForOS(
|
||||
OS targetOS, List<CodeAsset> codeAssets, bool flutterTester, Uri buildUri) {
|
||||
switch (targetOS) {
|
||||
case OS.windows:
|
||||
case OS.linux:
|
||||
@@ -628,11 +626,10 @@ Future<void> _copyNativeCodeAssetsForOS(
|
||||
Uri buildUri,
|
||||
build_info.BuildMode buildMode,
|
||||
FileSystem fileSystem,
|
||||
Map<NativeCodeAssetImpl, KernelAsset> assetTargetLocations,
|
||||
Map<CodeAsset, KernelAsset> assetTargetLocations,
|
||||
String? codesignIdentity,
|
||||
bool flutterTester) async {
|
||||
final List<NativeCodeAssetImpl> codeAssets =
|
||||
assetTargetLocations.keys.toList();
|
||||
final List<CodeAsset> codeAssets = assetTargetLocations.keys.toList();
|
||||
switch (targetOS) {
|
||||
case OS.windows:
|
||||
case OS.linux:
|
||||
@@ -687,7 +684,7 @@ Future<DartBuildResult> _runDartBuild({
|
||||
required FlutterNativeAssetsBuildRunner buildRunner,
|
||||
required List<Target> targets,
|
||||
required Uri projectUri,
|
||||
required BuildModeImpl buildMode,
|
||||
required BuildMode buildMode,
|
||||
required FileSystem fileSystem,
|
||||
required OS targetOS,
|
||||
}) async {
|
||||
@@ -697,7 +694,7 @@ Future<DartBuildResult> _runDartBuild({
|
||||
: targets.toList().toString();
|
||||
globals.logger
|
||||
.printTrace('Building native assets for $targetString $buildMode.');
|
||||
final List<Asset> assets = <Asset>[];
|
||||
final List<EncodedAsset> assets = <EncodedAsset>[];
|
||||
final Set<Uri> dependencies = <Uri>{};
|
||||
final build_info.EnvironmentType? environmentType;
|
||||
if (targetOS == OS.iOS) {
|
||||
@@ -710,8 +707,8 @@ Future<DartBuildResult> _runDartBuild({
|
||||
environmentType = null;
|
||||
}
|
||||
|
||||
final CCompilerConfigImpl cCompilerConfig = targetOS == OS.android
|
||||
? await buildRunner.ndkCCompilerConfigImpl
|
||||
final CCompilerConfig cCompilerConfig = targetOS == OS.android
|
||||
? await buildRunner.ndkCCompilerConfig
|
||||
: await buildRunner.cCompilerConfig;
|
||||
|
||||
final String? codesignIdentity = environmentDefines[build_info.kCodesignIdentity];
|
||||
@@ -720,81 +717,122 @@ Future<DartBuildResult> _runDartBuild({
|
||||
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 IOSSdkImpl? iOSSdkImpl = targetOS == OS.iOS ? getIOSSdk(environmentType!) : null;
|
||||
final IOSSdk? iOSSdk = targetOS == OS.iOS ? getIOSSdk(environmentType!) : null;
|
||||
|
||||
for (final Target target in targets) {
|
||||
final BuildResult buildResult = await buildRunner.build(
|
||||
linkModePreference: LinkModePreferenceImpl.dynamic,
|
||||
target: target,
|
||||
final BuildResult? buildResult = await buildRunner.build(
|
||||
supportedAssetTypes: <String>[CodeAsset.type],
|
||||
configCreator: () => BuildConfigBuilder()
|
||||
..setupCodeConfig(
|
||||
targetArchitecture: target.architecture,
|
||||
linkModePreference: LinkModePreference.dynamic,
|
||||
cCompilerConfig: cCompilerConfig,
|
||||
targetAndroidNdkApi: androidNdkApi,
|
||||
targetIOSVersion: iOSVersion,
|
||||
targetMacOSVersion: macOSVersion,
|
||||
targetIOSSdk: iOSSdk,
|
||||
),
|
||||
configValidator: (BuildConfig config) async => <String>[
|
||||
...await validateCodeAssetBuildConfig(config),
|
||||
],
|
||||
buildValidator: (BuildConfig config, BuildOutput output) async => <String>[
|
||||
...await validateCodeAssetBuildOutput(config, output),
|
||||
],
|
||||
applicationAssetValidator: (List<EncodedAsset> assets) async => <String>[
|
||||
...await validateCodeAssetInApplication(assets),
|
||||
],
|
||||
targetOS: target.os,
|
||||
buildMode: buildMode,
|
||||
workingDirectory: projectUri,
|
||||
includeParentEnvironment: true,
|
||||
linkingEnabled: linkingEnabled,
|
||||
cCompilerConfig: cCompilerConfig,
|
||||
targetAndroidNdkApi: androidNdkApi,
|
||||
targetIOSVersion: iOSVersion,
|
||||
targetMacOSVersion: macOSVersion,
|
||||
targetIOSSdkImpl: iOSSdkImpl,
|
||||
);
|
||||
if (!buildResult.success) {
|
||||
if (buildResult == null) {
|
||||
_throwNativeAssetsBuildFailed();
|
||||
}
|
||||
assets.addAll(buildResult.assets);
|
||||
assets.addAll(buildResult.encodedAssets);
|
||||
dependencies.addAll(buildResult.dependencies);
|
||||
if (linkingEnabled) {
|
||||
final LinkResult linkResult = await buildRunner.link(
|
||||
linkModePreference: LinkModePreferenceImpl.dynamic,
|
||||
target: target,
|
||||
buildMode: buildMode,
|
||||
final LinkResult? linkResult = await buildRunner.link(
|
||||
supportedAssetTypes: <String>[CodeAsset.type],
|
||||
configCreator: () => LinkConfigBuilder()
|
||||
..setupCodeConfig(
|
||||
targetArchitecture: target.architecture,
|
||||
linkModePreference: LinkModePreference.dynamic,
|
||||
cCompilerConfig: cCompilerConfig,
|
||||
targetAndroidNdkApi: androidNdkApi,
|
||||
targetIOSVersion: iOSVersion,
|
||||
targetMacOSVersion: macOSVersion,
|
||||
targetIOSSdk: iOSSdk,
|
||||
),
|
||||
configValidator: (LinkConfig config) async => <String>[
|
||||
...await validateCodeAssetLinkConfig(config),
|
||||
],
|
||||
linkValidator: (LinkConfig config, LinkOutput output) async => <String>[
|
||||
...await validateCodeAssetLinkOutput(config, output),
|
||||
],
|
||||
applicationAssetValidator: (List<EncodedAsset> assets) async => <String>[
|
||||
...await validateCodeAssetInApplication(assets),
|
||||
],
|
||||
workingDirectory: projectUri,
|
||||
includeParentEnvironment: true,
|
||||
buildResult: buildResult,
|
||||
cCompilerConfig: cCompilerConfig,
|
||||
targetAndroidNdkApi: androidNdkApi,
|
||||
targetIOSVersion: iOSVersion,
|
||||
targetMacOSVersion: macOSVersion,
|
||||
targetIOSSdkImpl: iOSSdkImpl,
|
||||
targetOS: targetOS,
|
||||
buildMode: buildMode,
|
||||
);
|
||||
if (!linkResult.success) {
|
||||
if (linkResult == null) {
|
||||
_throwNativeAssetsLinkFailed();
|
||||
}
|
||||
assets.addAll(linkResult.assets);
|
||||
assets.addAll(linkResult.encodedAssets);
|
||||
dependencies.addAll(linkResult.dependencies);
|
||||
}
|
||||
}
|
||||
|
||||
final List<NativeCodeAssetImpl> codeAssets =
|
||||
assets.whereType<NativeCodeAssetImpl>().toList();
|
||||
final List<CodeAsset> codeAssets = assets
|
||||
.where((EncodedAsset asset) => asset.type == CodeAsset.type)
|
||||
.map<CodeAsset>(CodeAsset.fromEncoded)
|
||||
.toList();
|
||||
globals.logger
|
||||
.printTrace('Building native assets for $targetString $buildMode done.');
|
||||
return DartBuildResult(codeAssets: codeAssets, dependencies: dependencies.toList());
|
||||
return DartBuildResult(codeAssets, dependencies.toList());
|
||||
}
|
||||
|
||||
Future<DartBuildResult> _runDartDryRunBuild({
|
||||
required FlutterNativeAssetsBuildRunner buildRunner,
|
||||
required Uri projectUri,
|
||||
required FileSystem fileSystem,
|
||||
required OSImpl targetOS,
|
||||
required OS targetOS,
|
||||
}) async {
|
||||
globals.logger.printTrace('Dry running native assets for $targetOS.');
|
||||
final List<Asset> assets = <Asset>[];
|
||||
final List<EncodedAsset> assets = <EncodedAsset>[];
|
||||
final Set<Uri> dependencies = <Uri>{};
|
||||
|
||||
final BuildDryRunResult buildResult = await buildRunner.buildDryRun(
|
||||
linkModePreference: LinkModePreferenceImpl.dynamic,
|
||||
targetOS: targetOS,
|
||||
final BuildDryRunResult? buildResult = await buildRunner.buildDryRun(
|
||||
supportedAssetTypes: <String>[CodeAsset.type],
|
||||
configCreator: () => BuildConfigBuilder()
|
||||
..setupCodeConfig(
|
||||
targetArchitecture: null,
|
||||
linkModePreference: LinkModePreference.dynamic,
|
||||
),
|
||||
buildValidator: (BuildConfig config, BuildOutput output) async => <String>[
|
||||
...await validateCodeAssetBuildOutput(config, output),
|
||||
],
|
||||
workingDirectory: projectUri,
|
||||
targetOS: targetOS,
|
||||
includeParentEnvironment: true,
|
||||
);
|
||||
if (!buildResult.success) {
|
||||
if (buildResult == null) {
|
||||
_throwNativeAssetsBuildDryRunFailed();
|
||||
}
|
||||
assets.addAll(buildResult.assets);
|
||||
assets.addAll(buildResult.encodedAssets);
|
||||
|
||||
final List<NativeCodeAssetImpl> codeAssets =
|
||||
assets.whereType<NativeCodeAssetImpl>().toList();
|
||||
final List<CodeAsset> codeAssets = assets
|
||||
.where((EncodedAsset asset) => asset.type == CodeAsset.type)
|
||||
.map<CodeAsset>(CodeAsset.fromEncoded)
|
||||
.toList();
|
||||
globals.logger.printTrace('Dry running native assets for $targetOS done.');
|
||||
return DartBuildResult(codeAssets: codeAssets, dependencies: dependencies.toList());
|
||||
return DartBuildResult(
|
||||
_expandCodeAssetsToAllArchitectures(codeAssets),
|
||||
dependencies.toList());
|
||||
}
|
||||
|
||||
List<Target> _targetsForOS(build_info.TargetPlatform targetPlatform,
|
||||
@@ -865,7 +903,7 @@ Target _getNativeTarget(build_info.TargetPlatform targetPlatform) {
|
||||
|
||||
Future<void> _copyNativeCodeAssetsToBundleOnWindowsLinux(
|
||||
Uri buildUri,
|
||||
Map<NativeCodeAssetImpl, KernelAsset> assetTargetLocations,
|
||||
Map<CodeAsset, KernelAsset> assetTargetLocations,
|
||||
build_info.BuildMode buildMode,
|
||||
FileSystem fileSystem,
|
||||
) async {
|
||||
@@ -876,7 +914,7 @@ Future<void> _copyNativeCodeAssetsToBundleOnWindowsLinux(
|
||||
if (!buildDir.existsSync()) {
|
||||
buildDir.createSync(recursive: true);
|
||||
}
|
||||
for (final MapEntry<NativeCodeAssetImpl, KernelAsset> assetMapping in assetTargetLocations.entries) {
|
||||
for (final MapEntry<CodeAsset, KernelAsset> assetMapping in assetTargetLocations.entries) {
|
||||
final Uri source = assetMapping.key.file!;
|
||||
final Uri target = (assetMapping.value.path as KernelAssetAbsolutePath).uri;
|
||||
final Uri targetUri = buildUri.resolveUri(target);
|
||||
@@ -906,35 +944,34 @@ Never _throwNativeAssetsLinkFailed() {
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
OSImpl _getNativeOSFromTargetPlatfrorm(build_info.TargetPlatform platform) {
|
||||
OS _getNativeOSFromTargetPlatfrorm(build_info.TargetPlatform platform) {
|
||||
switch (platform) {
|
||||
case build_info.TargetPlatform.ios:
|
||||
return OSImpl.iOS;
|
||||
return OS.iOS;
|
||||
case build_info.TargetPlatform.darwin:
|
||||
return OSImpl.macOS;
|
||||
return OS.macOS;
|
||||
case build_info.TargetPlatform.linux_x64:
|
||||
case build_info.TargetPlatform.linux_arm64:
|
||||
return OSImpl.linux;
|
||||
return OS.linux;
|
||||
case build_info.TargetPlatform.windows_x64:
|
||||
case build_info.TargetPlatform.windows_arm64:
|
||||
return OSImpl.windows;
|
||||
return OS.windows;
|
||||
case build_info.TargetPlatform.fuchsia_arm64:
|
||||
case build_info.TargetPlatform.fuchsia_x64:
|
||||
return OSImpl.fuchsia;
|
||||
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:
|
||||
return OSImpl.android;
|
||||
return OS.android;
|
||||
case build_info.TargetPlatform.tester:
|
||||
if (const LocalPlatform().isMacOS) {
|
||||
return OSImpl.macOS;
|
||||
return OS.macOS;
|
||||
} else if (const LocalPlatform().isLinux) {
|
||||
return OSImpl.linux;
|
||||
return OS.linux;
|
||||
} else if (const LocalPlatform().isWindows) {
|
||||
return OSImpl.windows;
|
||||
return OS.windows;
|
||||
} else {
|
||||
throw StateError('Unknown operating system');
|
||||
}
|
||||
@@ -984,3 +1021,52 @@ String? _emptyToNull(String? input) {
|
||||
}
|
||||
return input;
|
||||
}
|
||||
|
||||
List<CodeAsset> _expandCodeAssetsToAllArchitectures(List<CodeAsset> codeAssets) {
|
||||
assert(codeAssets.every((CodeAsset asset) => asset.architecture == null));
|
||||
return <CodeAsset>[
|
||||
for (final CodeAsset codeAsset in codeAssets)
|
||||
for (final Architecture architecture in codeAsset.os.architectures)
|
||||
codeAsset.copyWith(architecture: architecture),
|
||||
];
|
||||
}
|
||||
|
||||
extension OSArchitectures on OS {
|
||||
Set<Architecture> get architectures => _osTargets[this]!;
|
||||
}
|
||||
|
||||
const Map<OS, Set<Architecture>> _osTargets = <OS, Set<Architecture>>{
|
||||
OS.android: <Architecture>{
|
||||
Architecture.arm,
|
||||
Architecture.arm64,
|
||||
Architecture.ia32,
|
||||
Architecture.x64,
|
||||
Architecture.riscv64,
|
||||
},
|
||||
OS.fuchsia: <Architecture>{
|
||||
Architecture.arm64,
|
||||
Architecture.x64,
|
||||
},
|
||||
OS.iOS: <Architecture>{
|
||||
Architecture.arm,
|
||||
Architecture.arm64,
|
||||
Architecture.x64,
|
||||
},
|
||||
OS.linux: <Architecture>{
|
||||
Architecture.arm,
|
||||
Architecture.arm64,
|
||||
Architecture.ia32,
|
||||
Architecture.riscv32,
|
||||
Architecture.riscv64,
|
||||
Architecture.x64,
|
||||
},
|
||||
OS.macOS: <Architecture>{
|
||||
Architecture.arm64,
|
||||
Architecture.x64,
|
||||
},
|
||||
OS.windows: <Architecture>{
|
||||
Architecture.arm64,
|
||||
Architecture.ia32,
|
||||
Architecture.x64,
|
||||
},
|
||||
};
|
||||
|
||||
@@ -2,12 +2,12 @@
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
import 'package:native_assets_cli/native_assets_cli_internal.dart';
|
||||
import 'package:native_assets_cli/code_assets_builder.dart';
|
||||
|
||||
import '../../../globals.dart' as globals;
|
||||
import '../../../windows/visual_studio.dart';
|
||||
|
||||
Future<CCompilerConfigImpl> cCompilerConfigWindows() async {
|
||||
Future<CCompilerConfig> cCompilerConfigWindows() async {
|
||||
final VisualStudio visualStudio = VisualStudio(
|
||||
fileSystem: globals.fs,
|
||||
platform: globals.platform,
|
||||
@@ -16,7 +16,7 @@ Future<CCompilerConfigImpl> cCompilerConfigWindows() async {
|
||||
osUtils: globals.os,
|
||||
);
|
||||
|
||||
return CCompilerConfigImpl(
|
||||
return CCompilerConfig(
|
||||
compiler: _toOptionalFileUri(visualStudio.clPath),
|
||||
linker: _toOptionalFileUri(visualStudio.linkPath),
|
||||
archiver: _toOptionalFileUri(visualStudio.libPath),
|
||||
|
||||
@@ -23,8 +23,8 @@ const Map<String, String> kManuallyPinnedDependencies = <String, String>{
|
||||
'flutter_gallery_assets': '1.0.2', // Tests depend on the exact version.
|
||||
'flutter_template_images': '4.2.0', // Must always exactly match flutter_tools template.
|
||||
'google_mobile_ads': '5.1.0', // https://github.com/flutter/flutter/issues/156912
|
||||
'native_assets_builder': '0.8.3', // Under active development with breaking changes until 1.0.0. Manually rolled by @dcharkes.
|
||||
'native_assets_cli': '0.8.0', // Under active development with breaking changes until 1.0.0. Manually rolled by @dcharkes.
|
||||
'native_assets_builder': '0.9.0', // 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.
|
||||
'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
|
||||
|
||||
@@ -54,10 +54,9 @@ dependencies:
|
||||
async: 2.11.0
|
||||
unified_analytics: 6.1.4
|
||||
|
||||
cli_config: 0.2.0
|
||||
graphs: 2.3.2
|
||||
native_assets_builder: 0.8.3
|
||||
native_assets_cli: 0.8.0
|
||||
native_assets_builder: 0.9.0
|
||||
native_assets_cli: 0.9.0
|
||||
|
||||
# We depend on very specific internal implementation details of the
|
||||
# 'test' package, which change between versions, so when upgrading
|
||||
@@ -122,4 +121,4 @@ dartdoc:
|
||||
# Exclude this package from the hosted API docs.
|
||||
nodoc: true
|
||||
|
||||
# PUBSPEC CHECKSUM: 3825
|
||||
# PUBSPEC CHECKSUM: 2ec9
|
||||
|
||||
@@ -7,10 +7,9 @@ environment:
|
||||
sdk: {{dartSdkVersionBounds}}
|
||||
|
||||
dependencies:
|
||||
cli_config: ^0.2.0
|
||||
logging: ^1.2.0
|
||||
native_assets_cli: ^0.8.0
|
||||
native_toolchain_c: ^0.5.4
|
||||
native_assets_cli: ^0.9.0
|
||||
native_toolchain_c: ^0.6.0
|
||||
|
||||
dev_dependencies:
|
||||
ffi: ^2.1.3
|
||||
|
||||
@@ -16,7 +16,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/native_assets.dart';
|
||||
import 'package:native_assets_cli/native_assets_cli_internal.dart';
|
||||
import 'package:native_assets_cli/code_assets_builder.dart' hide BuildMode;
|
||||
import 'package:package_config/package_config_types.dart';
|
||||
|
||||
import '../../../src/common.dart';
|
||||
@@ -71,13 +71,14 @@ void main() {
|
||||
packagesWithNativeAssetsResult: <Package>[
|
||||
Package('bar', projectUri),
|
||||
],
|
||||
buildResult: FakeFlutterNativeAssetsBuilderResult(
|
||||
assets: <AssetImpl>[
|
||||
NativeCodeAssetImpl(
|
||||
id: 'package:bar/bar.dart',
|
||||
linkMode: DynamicLoadingBundledImpl(),
|
||||
os: OSImpl.android,
|
||||
architecture: ArchitectureImpl.arm64,
|
||||
buildResult: FakeFlutterNativeAssetsBuilderResult.fromAssets(
|
||||
codeAssets: <CodeAsset>[
|
||||
CodeAsset(
|
||||
package: 'bar',
|
||||
name: 'bar.dart',
|
||||
linkMode: DynamicLoadingBundled(),
|
||||
os: OS.android,
|
||||
architecture: Architecture.arm64,
|
||||
file: Uri.file('libbar.so'),
|
||||
),
|
||||
],
|
||||
@@ -182,6 +183,6 @@ class _BuildRunnerWithoutNdk extends FakeFlutterNativeAssetsBuildRunner {
|
||||
});
|
||||
|
||||
@override
|
||||
Future<CCompilerConfigImpl> get ndkCCompilerConfigImpl async =>
|
||||
Future<CCompilerConfig> get ndkCCompilerConfig async =>
|
||||
throwToolExit('Android NDK Clang could not be found.');
|
||||
}
|
||||
|
||||
@@ -13,8 +13,8 @@ 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/native_assets_cli_internal.dart'
|
||||
as native_assets_cli;
|
||||
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:package_config/package_config.dart' show Package;
|
||||
|
||||
import '../../../../src/common.dart';
|
||||
@@ -192,13 +192,14 @@ void main() {
|
||||
|
||||
final FlutterNativeAssetsBuildRunner buildRunner = FakeFlutterNativeAssetsBuildRunner(
|
||||
packagesWithNativeAssetsResult: <Package>[Package('foo', iosEnvironment.buildDir.uri)],
|
||||
buildResult: FakeFlutterNativeAssetsBuilderResult(
|
||||
assets: <native_assets_cli.AssetImpl>[
|
||||
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,
|
||||
buildResult: FakeFlutterNativeAssetsBuilderResult.fromAssets(
|
||||
codeAssets: <CodeAsset>[
|
||||
CodeAsset(
|
||||
package: 'foo',
|
||||
name: 'foo.dart',
|
||||
linkMode: DynamicLoadingBundled(),
|
||||
os: OS.iOS,
|
||||
architecture: Architecture.arm64,
|
||||
file: Uri.file('foo.framework/foo'),
|
||||
),
|
||||
],
|
||||
@@ -255,14 +256,15 @@ void main() {
|
||||
packagesWithNativeAssetsResult: <Package>[
|
||||
Package('foo', androidEnvironment.buildDir.uri)
|
||||
],
|
||||
buildResult: FakeFlutterNativeAssetsBuilderResult(
|
||||
assets: <native_assets_cli.AssetImpl>[
|
||||
buildResult: FakeFlutterNativeAssetsBuilderResult.fromAssets(
|
||||
codeAssets: <CodeAsset>[
|
||||
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,
|
||||
CodeAsset(
|
||||
package: 'foo',
|
||||
name: 'foo.dart',
|
||||
linkMode: DynamicLoadingBundled(),
|
||||
os: OS.android,
|
||||
architecture: Architecture.arm64,
|
||||
file: Uri.file('libfoo.so'),
|
||||
),
|
||||
],
|
||||
@@ -274,7 +276,7 @@ void main() {
|
||||
await NativeAssets(buildRunner: buildRunner).build(androidEnvironment);
|
||||
expect(
|
||||
buildRunner.lastBuildMode,
|
||||
native_assets_cli.BuildModeImpl.release,
|
||||
native_assets_cli.BuildMode.release,
|
||||
);
|
||||
},
|
||||
);
|
||||
|
||||
@@ -4,13 +4,12 @@
|
||||
|
||||
import 'package:file/file.dart';
|
||||
import 'package:flutter_tools/src/base/logger.dart';
|
||||
import 'package:flutter_tools/src/build_info.dart';
|
||||
import 'package:flutter_tools/src/build_info.dart' hide BuildMode;
|
||||
import 'package:flutter_tools/src/isolated/native_assets/native_assets.dart';
|
||||
import 'package:flutter_tools/src/resident_runner.dart';
|
||||
import 'package:flutter_tools/src/run_hot.dart';
|
||||
import 'package:native_assets_builder/native_assets_builder.dart'
|
||||
as native_assets_builder;
|
||||
import 'package:native_assets_cli/native_assets_cli_internal.dart';
|
||||
import 'package:native_assets_builder/native_assets_builder.dart';
|
||||
import 'package:native_assets_cli/code_assets_builder.dart';
|
||||
import 'package:package_config/package_config_types.dart';
|
||||
|
||||
/// Mocks all logic instead of using `package:native_assets_builder`, which
|
||||
@@ -24,71 +23,96 @@ class FakeFlutterNativeAssetsBuildRunner
|
||||
this.buildDryRunResult = const FakeFlutterNativeAssetsBuilderResult(),
|
||||
this.buildResult = const FakeFlutterNativeAssetsBuilderResult(),
|
||||
this.linkResult = const FakeFlutterNativeAssetsBuilderResult(),
|
||||
CCompilerConfigImpl? cCompilerConfigResult,
|
||||
CCompilerConfigImpl? ndkCCompilerConfigImplResult,
|
||||
}) : cCompilerConfigResult = cCompilerConfigResult ?? CCompilerConfigImpl(),
|
||||
ndkCCompilerConfigImplResult =
|
||||
ndkCCompilerConfigImplResult ?? CCompilerConfigImpl();
|
||||
CCompilerConfig? cCompilerConfigResult,
|
||||
CCompilerConfig? ndkCCompilerConfigResult,
|
||||
}) : cCompilerConfigResult = cCompilerConfigResult ?? CCompilerConfig(),
|
||||
ndkCCompilerConfigResult =
|
||||
ndkCCompilerConfigResult ?? CCompilerConfig();
|
||||
|
||||
final native_assets_builder.BuildResult Function(Target)? onBuild;
|
||||
final native_assets_builder.BuildResult buildResult;
|
||||
final native_assets_builder.LinkResult linkResult;
|
||||
final native_assets_builder.BuildDryRunResult buildDryRunResult;
|
||||
final BuildResult? Function(BuildConfig)? onBuild;
|
||||
final BuildResult? buildResult;
|
||||
final LinkResult? linkResult;
|
||||
final BuildDryRunResult? buildDryRunResult;
|
||||
final bool hasPackageConfigResult;
|
||||
final List<Package> packagesWithNativeAssetsResult;
|
||||
final CCompilerConfigImpl cCompilerConfigResult;
|
||||
final CCompilerConfigImpl ndkCCompilerConfigImplResult;
|
||||
final CCompilerConfig cCompilerConfigResult;
|
||||
final CCompilerConfig ndkCCompilerConfigResult;
|
||||
|
||||
int buildInvocations = 0;
|
||||
int buildDryRunInvocations = 0;
|
||||
int linkInvocations = 0;
|
||||
int hasPackageConfigInvocations = 0;
|
||||
int packagesWithNativeAssetsInvocations = 0;
|
||||
BuildModeImpl? lastBuildMode;
|
||||
BuildMode? lastBuildMode;
|
||||
|
||||
@override
|
||||
Future<native_assets_builder.BuildResult> build({
|
||||
Future<BuildResult?> build({
|
||||
required List<String> supportedAssetTypes,
|
||||
required BuildConfigValidator configValidator,
|
||||
required BuildConfigCreator configCreator,
|
||||
required BuildValidator buildValidator,
|
||||
required ApplicationAssetValidator applicationAssetValidator,
|
||||
required bool includeParentEnvironment,
|
||||
required BuildModeImpl buildMode,
|
||||
required LinkModePreferenceImpl linkModePreference,
|
||||
required Target target,
|
||||
required BuildMode buildMode,
|
||||
required OS targetOS,
|
||||
required Uri workingDirectory,
|
||||
CCompilerConfigImpl? cCompilerConfig,
|
||||
int? targetAndroidNdkApi,
|
||||
int? targetIOSVersion,
|
||||
int? targetMacOSVersion,
|
||||
IOSSdkImpl? targetIOSSdkImpl,
|
||||
required bool linkingEnabled,
|
||||
}) async {
|
||||
buildInvocations++;
|
||||
lastBuildMode = buildMode;
|
||||
return onBuild?.call(target) ?? buildResult;
|
||||
BuildResult? result = buildResult;
|
||||
for (final Package package in packagesWithNativeAssetsResult) {
|
||||
final BuildConfigBuilder configBuilder = configCreator()
|
||||
..setupHookConfig(
|
||||
packageRoot: package.root,
|
||||
packageName: package.name,
|
||||
targetOS: targetOS,
|
||||
supportedAssetTypes: supportedAssetTypes,
|
||||
buildMode: buildMode,
|
||||
)
|
||||
..setupBuildConfig(
|
||||
dryRun: false,
|
||||
linkingEnabled: linkingEnabled,
|
||||
)
|
||||
..setupBuildRunConfig(
|
||||
outputDirectory: Uri.parse('build-out-dir'),
|
||||
outputDirectoryShared: Uri.parse('build-out-dir-shared'),
|
||||
);
|
||||
final BuildConfig buildConfig = BuildConfig(configBuilder.json);
|
||||
if (onBuild != null) {
|
||||
result = onBuild!(buildConfig);
|
||||
}
|
||||
lastBuildMode = buildConfig.buildMode;
|
||||
buildInvocations++;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@override
|
||||
Future<native_assets_builder.LinkResult> link({
|
||||
Future<LinkResult?> link({
|
||||
required List<String> supportedAssetTypes,
|
||||
required LinkConfigCreator configCreator,
|
||||
required LinkConfigValidator configValidator,
|
||||
required LinkValidator linkValidator,
|
||||
required ApplicationAssetValidator applicationAssetValidator,
|
||||
required bool includeParentEnvironment,
|
||||
required BuildModeImpl buildMode,
|
||||
required LinkModePreferenceImpl linkModePreference,
|
||||
required Target target,
|
||||
required BuildMode buildMode,
|
||||
required OS targetOS,
|
||||
required Uri workingDirectory,
|
||||
required native_assets_builder.BuildResult buildResult,
|
||||
CCompilerConfigImpl? cCompilerConfig,
|
||||
int? targetAndroidNdkApi,
|
||||
int? targetIOSVersion,
|
||||
int? targetMacOSVersion,
|
||||
IOSSdkImpl? targetIOSSdkImpl,
|
||||
required BuildResult buildResult,
|
||||
}) async {
|
||||
linkInvocations++;
|
||||
lastBuildMode = buildMode;
|
||||
for (final Package _ in packagesWithNativeAssetsResult) {
|
||||
lastBuildMode = buildMode;
|
||||
linkInvocations++;
|
||||
}
|
||||
return linkResult;
|
||||
}
|
||||
|
||||
@override
|
||||
Future<native_assets_builder.BuildDryRunResult> buildDryRun({
|
||||
Future<BuildDryRunResult?> buildDryRun({
|
||||
required List<String> supportedAssetTypes,
|
||||
required ConfigCreator configCreator,
|
||||
required BuildValidator buildValidator,
|
||||
required bool includeParentEnvironment,
|
||||
required LinkModePreferenceImpl linkModePreference,
|
||||
required OSImpl targetOS,
|
||||
required OS targetOS,
|
||||
required Uri workingDirectory,
|
||||
}) async {
|
||||
buildDryRunInvocations++;
|
||||
@@ -108,37 +132,38 @@ class FakeFlutterNativeAssetsBuildRunner
|
||||
}
|
||||
|
||||
@override
|
||||
Future<CCompilerConfigImpl> get cCompilerConfig async =>
|
||||
cCompilerConfigResult;
|
||||
Future<CCompilerConfig> get cCompilerConfig async => cCompilerConfigResult;
|
||||
|
||||
@override
|
||||
Future<CCompilerConfigImpl> get ndkCCompilerConfigImpl async =>
|
||||
cCompilerConfigResult;
|
||||
Future<CCompilerConfig> get ndkCCompilerConfig async => cCompilerConfigResult;
|
||||
}
|
||||
|
||||
final class FakeFlutterNativeAssetsBuilderResult
|
||||
implements
|
||||
native_assets_builder.BuildResult,
|
||||
native_assets_builder.BuildDryRunResult,
|
||||
native_assets_builder.LinkResult {
|
||||
implements BuildResult, BuildDryRunResult, LinkResult {
|
||||
const FakeFlutterNativeAssetsBuilderResult({
|
||||
this.assets = const <AssetImpl>[],
|
||||
this.assetsForLinking = const <String, List<AssetImpl>>{},
|
||||
this.encodedAssets = const <EncodedAsset>[],
|
||||
this.encodedAssetsForLinking = const <String, List<EncodedAsset>>{},
|
||||
this.dependencies = const <Uri>[],
|
||||
this.success = true,
|
||||
});
|
||||
|
||||
@override
|
||||
final List<AssetImpl> assets;
|
||||
factory FakeFlutterNativeAssetsBuilderResult.fromAssets({
|
||||
List<CodeAsset> codeAssets = const <CodeAsset>[],
|
||||
List<Uri> dependencies = const <Uri>[],
|
||||
}) {
|
||||
return FakeFlutterNativeAssetsBuilderResult(
|
||||
encodedAssets: <EncodedAsset>[
|
||||
for (final CodeAsset codeAsset in codeAssets) codeAsset.encode(),
|
||||
], dependencies: dependencies);
|
||||
}
|
||||
|
||||
@override
|
||||
final Map<String, List<AssetImpl>> assetsForLinking;
|
||||
final List<EncodedAsset> encodedAssets;
|
||||
|
||||
@override
|
||||
final Map<String, List<EncodedAsset>> encodedAssetsForLinking;
|
||||
|
||||
@override
|
||||
final List<Uri> dependencies;
|
||||
|
||||
@override
|
||||
final bool success;
|
||||
}
|
||||
|
||||
class FakeHotRunnerNativeAssetsBuilder implements HotRunnerNativeAssetsBuilder {
|
||||
|
||||
@@ -13,8 +13,7 @@ import 'package:flutter_tools/src/features.dart';
|
||||
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 Target;
|
||||
import 'package:native_assets_cli/code_assets_builder.dart';
|
||||
import 'package:package_config/package_config.dart';
|
||||
import 'package:unified_analytics/unified_analytics.dart';
|
||||
|
||||
@@ -62,20 +61,22 @@ void main() {
|
||||
packagesWithNativeAssetsResult: <Package>[
|
||||
Package('bar', fileSystem.currentDirectory.uri),
|
||||
],
|
||||
buildDryRunResult: FakeFlutterNativeAssetsBuilderResult(
|
||||
assets: <AssetImpl>[
|
||||
NativeCodeAssetImpl(
|
||||
id: 'package:bar/bar.dart',
|
||||
linkMode: DynamicLoadingBundledImpl(),
|
||||
os: OSImpl.macOS,
|
||||
architecture: ArchitectureImpl.arm64,
|
||||
buildDryRunResult: FakeFlutterNativeAssetsBuilderResult.fromAssets(
|
||||
codeAssets: <CodeAsset>[
|
||||
CodeAsset(
|
||||
package: 'bar',
|
||||
name: 'bar.dart',
|
||||
linkMode: DynamicLoadingBundled(),
|
||||
os: OS.macOS,
|
||||
architecture: Architecture.arm64,
|
||||
file: Uri.file('bar.dylib'),
|
||||
),
|
||||
NativeCodeAssetImpl(
|
||||
id: 'package:bar/bar.dart',
|
||||
linkMode: DynamicLoadingBundledImpl(),
|
||||
os: OSImpl.macOS,
|
||||
architecture: ArchitectureImpl.x64,
|
||||
CodeAsset(
|
||||
package: 'bar',
|
||||
name: 'bar.dart',
|
||||
linkMode: DynamicLoadingBundled(),
|
||||
os: OS.macOS,
|
||||
architecture: Architecture.x64,
|
||||
file: Uri.file('bar.dylib'),
|
||||
),
|
||||
],
|
||||
@@ -131,20 +132,22 @@ void main() {
|
||||
packagesWithNativeAssetsResult: <Package>[
|
||||
Package('bar', fileSystem.currentDirectory.uri),
|
||||
],
|
||||
buildDryRunResult: FakeFlutterNativeAssetsBuilderResult(
|
||||
assets: <AssetImpl>[
|
||||
NativeCodeAssetImpl(
|
||||
id: 'package:bar/bar.dart',
|
||||
linkMode: DynamicLoadingBundledImpl(),
|
||||
os: OSImpl.macOS,
|
||||
architecture: ArchitectureImpl.arm64,
|
||||
buildDryRunResult: FakeFlutterNativeAssetsBuilderResult.fromAssets(
|
||||
codeAssets: <CodeAsset>[
|
||||
CodeAsset(
|
||||
package: 'bar',
|
||||
name: 'bar.dart',
|
||||
linkMode: DynamicLoadingBundled(),
|
||||
os: OS.macOS,
|
||||
architecture: Architecture.arm64,
|
||||
file: Uri.file('bar.dylib'),
|
||||
),
|
||||
NativeCodeAssetImpl(
|
||||
id: 'package:bar/bar.dart',
|
||||
linkMode: DynamicLoadingBundledImpl(),
|
||||
os: OSImpl.macOS,
|
||||
architecture: ArchitectureImpl.x64,
|
||||
CodeAsset(
|
||||
package: 'bar',
|
||||
name: 'bar.dart',
|
||||
linkMode: DynamicLoadingBundled(),
|
||||
os: OS.macOS,
|
||||
architecture: Architecture.x64,
|
||||
file: Uri.file('bar.dylib'),
|
||||
),
|
||||
],
|
||||
|
||||
@@ -14,9 +14,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/native_assets.dart';
|
||||
import 'package:native_assets_cli/native_assets_cli_internal.dart' hide Target;
|
||||
import 'package:native_assets_cli/native_assets_cli_internal.dart'
|
||||
as native_assets_cli;
|
||||
import 'package:native_assets_cli/code_assets_builder.dart' hide BuildMode;
|
||||
import 'package:package_config/package_config_types.dart';
|
||||
|
||||
import '../../../src/common.dart';
|
||||
@@ -168,22 +166,24 @@ void main() {
|
||||
packagesWithNativeAssetsResult: <Package>[
|
||||
Package('bar', projectUri),
|
||||
],
|
||||
onBuild: (native_assets_cli.Target target) =>
|
||||
FakeFlutterNativeAssetsBuilderResult(
|
||||
assets: <AssetImpl>[
|
||||
NativeCodeAssetImpl(
|
||||
id: 'package:bar/bar.dart',
|
||||
linkMode: DynamicLoadingBundledImpl(),
|
||||
os: target.os,
|
||||
architecture: target.architecture,
|
||||
file: Uri.file('${target.architecture}/libbar.dylib'),
|
||||
onBuild: (BuildConfig config) =>
|
||||
FakeFlutterNativeAssetsBuilderResult.fromAssets(
|
||||
codeAssets: <CodeAsset>[
|
||||
CodeAsset(
|
||||
package: 'bar',
|
||||
name: 'bar.dart',
|
||||
linkMode: DynamicLoadingBundled(),
|
||||
os: config.targetOS,
|
||||
architecture: config.codeConfig.targetArchitecture,
|
||||
file: Uri.file('${config.codeConfig.targetArchitecture}/libbar.dylib'),
|
||||
),
|
||||
NativeCodeAssetImpl(
|
||||
id: 'package:buz/buz.dart',
|
||||
linkMode: DynamicLoadingBundledImpl(),
|
||||
os: target.os,
|
||||
architecture: target.architecture,
|
||||
file: Uri.file('${target.architecture}/libbuz.dylib'),
|
||||
CodeAsset(
|
||||
package: 'buz',
|
||||
name: 'buz.dart',
|
||||
linkMode: DynamicLoadingBundled(),
|
||||
os: config.targetOS,
|
||||
architecture: config.codeConfig.targetArchitecture,
|
||||
file: Uri.file('${config.codeConfig.targetArchitecture}/libbuz.dylib'),
|
||||
),
|
||||
],
|
||||
),
|
||||
|
||||
@@ -15,8 +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/native_assets_cli_internal.dart'
|
||||
hide Target;
|
||||
import 'package:native_assets_cli/code_assets_builder.dart' hide BuildMode;
|
||||
import 'package:package_config/package_config_types.dart';
|
||||
|
||||
import '../../../src/common.dart';
|
||||
@@ -112,13 +111,13 @@ void main() {
|
||||
);
|
||||
final FlutterNativeAssetsBuildRunner runner =
|
||||
FlutterNativeAssetsBuildRunnerImpl(projectUri, packageConfigFile.path, packageConfig, fileSystem, logger);
|
||||
final CCompilerConfigImpl result = await runner.cCompilerConfig;
|
||||
final CCompilerConfig result = await runner.cCompilerConfig;
|
||||
expect(result.compiler, Uri.file('/some/path/to/clang'));
|
||||
});
|
||||
}
|
||||
|
||||
class _BuildRunnerWithoutClang extends FakeFlutterNativeAssetsBuildRunner {
|
||||
@override
|
||||
Future<CCompilerConfigImpl> get cCompilerConfig async =>
|
||||
Future<CCompilerConfig> get cCompilerConfig async =>
|
||||
throwToolExit('Failed to find clang++ on the PATH.');
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
// found in the LICENSE file.
|
||||
|
||||
import 'package:flutter_tools/src/isolated/native_assets/macos/native_assets_host.dart';
|
||||
import 'package:native_assets_cli/native_assets_cli.dart';
|
||||
import 'package:native_assets_cli/code_assets_builder.dart';
|
||||
|
||||
import '../../../src/common.dart';
|
||||
|
||||
|
||||
@@ -14,9 +14,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/native_assets_cli_internal.dart' hide Target;
|
||||
import 'package:native_assets_cli/native_assets_cli_internal.dart'
|
||||
as native_assets_cli;
|
||||
import 'package:native_assets_cli/code_assets_builder.dart' hide BuildMode;
|
||||
import 'package:package_config/package_config_types.dart';
|
||||
|
||||
import '../../../src/common.dart';
|
||||
@@ -50,7 +48,7 @@ void main() {
|
||||
});
|
||||
|
||||
for (final bool flutterTester in <bool>[false, true]) {
|
||||
final bool isArm64 = native_assets_cli.ArchitectureImpl.current == ArchitectureImpl.arm64;
|
||||
final bool isArm64 = Architecture.current == Architecture.arm64;
|
||||
|
||||
String testName = '';
|
||||
if (flutterTester) {
|
||||
@@ -274,22 +272,24 @@ void main() {
|
||||
packagesWithNativeAssetsResult: <Package>[
|
||||
Package('bar', projectUri),
|
||||
],
|
||||
onBuild: (native_assets_cli.Target target) =>
|
||||
FakeFlutterNativeAssetsBuilderResult(
|
||||
assets: <AssetImpl>[
|
||||
NativeCodeAssetImpl(
|
||||
id: 'package:bar/bar.dart',
|
||||
linkMode: DynamicLoadingBundledImpl(),
|
||||
os: target.os,
|
||||
architecture: target.architecture,
|
||||
file: Uri.file('${target.architecture}/libbar.dylib'),
|
||||
onBuild: (BuildConfig config) =>
|
||||
FakeFlutterNativeAssetsBuilderResult.fromAssets(
|
||||
codeAssets: <CodeAsset>[
|
||||
CodeAsset(
|
||||
package: 'bar',
|
||||
name: 'bar.dart',
|
||||
linkMode: DynamicLoadingBundled(),
|
||||
os: config.targetOS,
|
||||
architecture: config.codeConfig.targetArchitecture,
|
||||
file: Uri.file('${config.codeConfig.targetArchitecture}/libbar.dylib'),
|
||||
),
|
||||
NativeCodeAssetImpl(
|
||||
id: 'package:buz/buz.dart',
|
||||
linkMode: DynamicLoadingBundledImpl(),
|
||||
os: target.os,
|
||||
architecture: target.architecture,
|
||||
file: Uri.file('${target.architecture}/libbuz.dylib'),
|
||||
CodeAsset(
|
||||
package: 'buz',
|
||||
name: 'buz.dart',
|
||||
linkMode: DynamicLoadingBundled(),
|
||||
os: config.targetOS,
|
||||
architecture: config.codeConfig.targetArchitecture,
|
||||
file: Uri.file('${config.codeConfig.targetArchitecture}/libbuz.dylib'),
|
||||
),
|
||||
],
|
||||
),
|
||||
@@ -395,7 +395,7 @@ InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault
|
||||
fileSystem,
|
||||
logger,
|
||||
);
|
||||
final CCompilerConfigImpl result = await runner.cCompilerConfig;
|
||||
final CCompilerConfig result = await runner.cCompilerConfig;
|
||||
expect(
|
||||
result.compiler,
|
||||
Uri.file(
|
||||
|
||||
@@ -13,7 +13,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/native_assets.dart';
|
||||
import 'package:native_assets_cli/native_assets_cli_internal.dart';
|
||||
import 'package:native_assets_cli/code_assets_builder.dart' hide BuildMode;
|
||||
import 'package:package_config/package_config_types.dart';
|
||||
|
||||
import '../../src/common.dart';
|
||||
@@ -144,13 +144,13 @@ void main() {
|
||||
packagesWithNativeAssetsResult: <Package>[
|
||||
Package('bar', projectUri),
|
||||
],
|
||||
buildDryRunResult: FakeFlutterNativeAssetsBuilderResult(
|
||||
assets: <AssetImpl>[
|
||||
NativeCodeAssetImpl(
|
||||
id: 'package:bar/bar.dart',
|
||||
linkMode: DynamicLoadingBundledImpl(),
|
||||
os: OSImpl.windows,
|
||||
architecture: ArchitectureImpl.x64,
|
||||
buildDryRunResult: FakeFlutterNativeAssetsBuilderResult.fromAssets(
|
||||
codeAssets: <CodeAsset>[
|
||||
CodeAsset(
|
||||
package: 'bar',
|
||||
name: 'bar.dart',
|
||||
linkMode: DynamicLoadingBundled(),
|
||||
os: OS.windows,
|
||||
file: Uri.file('bar.dll'),
|
||||
),
|
||||
],
|
||||
@@ -259,9 +259,7 @@ void main() {
|
||||
packagesWithNativeAssetsResult: <Package>[
|
||||
Package('bar', projectUri),
|
||||
],
|
||||
buildDryRunResult: const FakeFlutterNativeAssetsBuilderResult(
|
||||
success: false,
|
||||
),
|
||||
buildDryRunResult: null,
|
||||
),
|
||||
),
|
||||
throwsToolExit(
|
||||
@@ -293,9 +291,7 @@ void main() {
|
||||
packagesWithNativeAssetsResult: <Package>[
|
||||
Package('bar', projectUri),
|
||||
],
|
||||
buildResult: const FakeFlutterNativeAssetsBuilderResult(
|
||||
success: false,
|
||||
),
|
||||
buildResult: null,
|
||||
),
|
||||
),
|
||||
throwsToolExit(
|
||||
@@ -304,5 +300,4 @@ void main() {
|
||||
),
|
||||
);
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
@@ -14,7 +14,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/native_assets_cli_internal.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:package_config/package_config_types.dart';
|
||||
|
||||
@@ -81,13 +81,14 @@ void main() {
|
||||
packagesWithNativeAssetsResult: <Package>[
|
||||
Package('bar', projectUri),
|
||||
],
|
||||
buildResult: FakeFlutterNativeAssetsBuilderResult(
|
||||
assets: <AssetImpl>[
|
||||
NativeCodeAssetImpl(
|
||||
id: 'package:bar/bar.dart',
|
||||
linkMode: DynamicLoadingBundledImpl(),
|
||||
os: OSImpl.windows,
|
||||
architecture: ArchitectureImpl.x64,
|
||||
buildResult: FakeFlutterNativeAssetsBuilderResult.fromAssets(
|
||||
codeAssets: <CodeAsset>[
|
||||
CodeAsset(
|
||||
package: 'bar',
|
||||
name: 'bar.dart',
|
||||
linkMode: DynamicLoadingBundled(),
|
||||
os: OS.windows,
|
||||
architecture: Architecture.x64,
|
||||
file: dylibAfterCompiling.uri,
|
||||
),
|
||||
],
|
||||
@@ -116,7 +117,7 @@ void main() {
|
||||
]),
|
||||
);
|
||||
final String expectedDirectory = flutterTester
|
||||
? native_assets_cli.OSImpl.current.toString()
|
||||
? native_assets_cli.OS.current.toString()
|
||||
: 'windows';
|
||||
expect(nativeAssetsYaml,
|
||||
flutterTester
|
||||
@@ -246,7 +247,7 @@ void main() {
|
||||
fileSystem,
|
||||
logger,
|
||||
);
|
||||
final CCompilerConfigImpl result = await runner.cCompilerConfig;
|
||||
final CCompilerConfig result = await runner.cCompilerConfig;
|
||||
expect(
|
||||
result.compiler?.toFilePath(),
|
||||
msvcBinDir.childFile('cl.exe').uri.toFilePath(),
|
||||
|
||||
@@ -19,7 +19,7 @@ import 'package:file/file.dart';
|
||||
import 'package:file_testing/file_testing.dart';
|
||||
import 'package:flutter_tools/src/base/logger.dart';
|
||||
import 'package:flutter_tools/src/base/os.dart';
|
||||
import 'package:native_assets_cli/native_assets_cli_internal.dart';
|
||||
import 'package:native_assets_cli/code_assets_builder.dart';
|
||||
|
||||
import '../../src/common.dart';
|
||||
import '../test_utils.dart' show fileSystem, platform;
|
||||
@@ -222,47 +222,6 @@ void main() {
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
// This could be an hermetic unit test if the native_assets_builder
|
||||
// could mock process runs and file system.
|
||||
// https://github.com/dart-lang/native/issues/90.
|
||||
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.childDirectory('hook').childFile('build.dart');
|
||||
final String buildDotDartContents = await buildDotDart.readAsString();
|
||||
// Overrides the build to output static libraries.
|
||||
final String buildDotDartContentsNew = buildDotDartContents.replaceFirst(
|
||||
'await build(args, (config, output) async {',
|
||||
'''
|
||||
await build([
|
||||
'-D${LinkModePreferenceImpl.configKey}=${LinkModePreferenceImpl.static}',
|
||||
...args,
|
||||
], (config, output) async {
|
||||
''',
|
||||
);
|
||||
expect(buildDotDartContentsNew, isNot(buildDotDartContents));
|
||||
await buildDotDart.writeAsString(buildDotDartContentsNew);
|
||||
final Directory exampleDirectory = packageDirectory.childDirectory('example');
|
||||
|
||||
final ProcessResult result = processManager.runSync(
|
||||
<String>[
|
||||
flutterBin,
|
||||
'build',
|
||||
buildSubcommand,
|
||||
if (buildSubcommand == 'ios') '--no-codesign',
|
||||
'-v', // Requires verbose mode for error.
|
||||
],
|
||||
workingDirectory: exampleDirectory.path,
|
||||
);
|
||||
expect(
|
||||
(result.stdout as String) + (result.stderr as String),
|
||||
contains('has a link mode "static", which is not allowed by by the config link mode preference "dynamic"'),
|
||||
);
|
||||
expect(result.exitCode, isNot(0));
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
for (final String add2appBuildSubcommand in add2appBuildSubcommands) {
|
||||
@@ -421,7 +380,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 = ArchitectureImpl.current.dartPlatform;
|
||||
final String architecture = Architecture.current.name;
|
||||
final Directory appBundle = appDirectory
|
||||
.childDirectory('build')
|
||||
.childDirectory(hostOs)
|
||||
@@ -432,7 +391,7 @@ void expectDylibIsBundledLinux(Directory appDirectory, String buildMode) {
|
||||
final Directory dylibsFolder = appBundle.childDirectory('lib');
|
||||
expect(dylibsFolder, exists);
|
||||
final File dylib =
|
||||
dylibsFolder.childFile(OSImpl.linux.dylibFileName(packageName));
|
||||
dylibsFolder.childFile(OS.linux.dylibFileName(packageName));
|
||||
expect(dylib, exists);
|
||||
}
|
||||
|
||||
@@ -441,7 +400,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 = ArchitectureImpl.current.dartPlatform;
|
||||
final String architecture = Architecture.current.name;
|
||||
final Directory appBundle = appDirectory
|
||||
.childDirectory('build')
|
||||
.childDirectory(hostOs)
|
||||
@@ -450,7 +409,7 @@ void expectDylibIsBundledWindows(Directory appDirectory, String buildMode) {
|
||||
.childDirectory(buildMode.upperCaseFirst());
|
||||
expect(appBundle, exists);
|
||||
final File dylib =
|
||||
appBundle.childFile(OSImpl.windows.dylibFileName(packageName));
|
||||
appBundle.childFile(OS.windows.dylibFileName(packageName));
|
||||
expect(dylib, exists);
|
||||
}
|
||||
|
||||
@@ -481,7 +440,7 @@ void expectDylibIsBundledAndroid(Directory appDirectory, String buildMode) {
|
||||
expect(archDir.childFile('libapp.so'), exists);
|
||||
}
|
||||
final File dylib =
|
||||
archDir.childFile(OSImpl.android.dylibFileName(packageName));
|
||||
archDir.childFile(OS.android.dylibFileName(packageName));
|
||||
expect(dylib, exists);
|
||||
}
|
||||
}
|
||||
@@ -504,6 +463,13 @@ 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<Directory>()) {
|
||||
// We only want to look at build/link hook invocation directories. The
|
||||
// `/shared/*` directory allows the individual hooks to store data that is
|
||||
// reusable across different build/link confiurations.
|
||||
if (subDir.path.endsWith('shared')) {
|
||||
continue;
|
||||
}
|
||||
|
||||
final File config = subDir.childFile('config.json');
|
||||
expect(config, exists);
|
||||
final String contents = config.readAsStringSync();
|
||||
|
||||
Reference in New Issue
Block a user