diff --git a/pkgs/c_compiler/lib/c_compiler.dart b/pkgs/c_compiler/lib/c_compiler.dart index c2945a9c1a..f6f90d188b 100644 --- a/pkgs/c_compiler/lib/c_compiler.dart +++ b/pkgs/c_compiler/lib/c_compiler.dart @@ -6,11 +6,3 @@ library; export 'src/cbuilder/cbuilder.dart'; -export 'src/native_toolchain/android_ndk.dart'; -export 'src/native_toolchain/apple_clang.dart'; -export 'src/native_toolchain/clang.dart'; -export 'src/native_toolchain/gcc.dart'; -export 'src/tool/tool.dart'; -export 'src/tool/tool_instance.dart'; -export 'src/tool/tool_requirement.dart'; -export 'src/tool/tool_resolver.dart'; diff --git a/pkgs/c_compiler/lib/src/cbuilder/cbuilder.dart b/pkgs/c_compiler/lib/src/cbuilder/cbuilder.dart index 7ab60c9a27..2d98481bd7 100644 --- a/pkgs/c_compiler/lib/src/cbuilder/cbuilder.dart +++ b/pkgs/c_compiler/lib/src/cbuilder/cbuilder.dart @@ -74,9 +74,9 @@ class CBuilder implements Builder { final outDir = buildConfig.outDir; final packageRoot = buildConfig.packageRoot; await Directory.fromUri(outDir).create(recursive: true); - final packaging = buildConfig.packaging.preferredPackaging.first; + final linkMode = buildConfig.linkModePreference.preferredLinkMode; final libUri = - outDir.resolve(buildConfig.target.os.libraryFileName(name, packaging)); + outDir.resolve(buildConfig.target.os.libraryFileName(name, linkMode)); final exeUri = outDir.resolve(buildConfig.target.os.executableFileName(name)); final sources = [ @@ -92,11 +92,11 @@ class CBuilder implements Builder { logger: logger, sources: sources, dynamicLibrary: - _type == _CBuilderType.library && packaging == Packaging.dynamic + _type == _CBuilderType.library && linkMode == LinkMode.dynamic ? libUri : null, staticLibrary: - _type == _CBuilderType.library && packaging == Packaging.static + _type == _CBuilderType.library && linkMode == LinkMode.static ? libUri : null, executable: _type == _CBuilderType.executable ? exeUri : null, @@ -106,7 +106,7 @@ class CBuilder implements Builder { if (assetName != null) { buildOutput.assets.add(Asset( name: assetName!, - packaging: packaging, + linkMode: linkMode, target: buildConfig.target, path: AssetAbsolutePath(libUri), )); diff --git a/pkgs/c_compiler/lib/src/cbuilder/run_cbuilder.dart b/pkgs/c_compiler/lib/src/cbuilder/run_cbuilder.dart index 9506ecdc0b..7d108d3e06 100644 --- a/pkgs/c_compiler/lib/src/cbuilder/run_cbuilder.dart +++ b/pkgs/c_compiler/lib/src/cbuilder/run_cbuilder.dart @@ -5,9 +5,12 @@ import 'package:logging/logging.dart'; import 'package:native_assets_cli/native_assets_cli.dart'; -import '../../c_compiler.dart'; +import '../native_toolchain/apple_clang.dart'; +import '../native_toolchain/clang.dart'; +import '../native_toolchain/gcc.dart'; import '../native_toolchain/msvc.dart'; import '../native_toolchain/xcode.dart'; +import '../tool/tool_instance.dart'; import '../utils/env_from_bat.dart'; import '../utils/run_process.dart'; import 'compiler_resolver.dart'; diff --git a/pkgs/c_compiler/test/cbuilder/cbuilder_cross_android_test.dart b/pkgs/c_compiler/test/cbuilder/cbuilder_cross_android_test.dart index 27ebf9163a..967b98f638 100644 --- a/pkgs/c_compiler/test/cbuilder/cbuilder_cross_android_test.dart +++ b/pkgs/c_compiler/test/cbuilder/cbuilder_cross_android_test.dart @@ -33,9 +33,9 @@ void main() { Target.androidX64: 'elf64-x86-64', }; - for (final packaging in Packaging.values) { + for (final linkMode in LinkMode.values) { for (final target in targets) { - test('Cbuilder $packaging library $target', () async { + test('Cbuilder $linkMode library $target', () async { await inTempDir((tempUri) async { final addCUri = packageUri.resolve('test/cbuilder/testfiles/add/src/add.c'); @@ -45,9 +45,9 @@ void main() { outDir: tempUri, packageRoot: tempUri, target: target, - packaging: packaging == Packaging.dynamic - ? PackagingPreference.dynamic - : PackagingPreference.static, + linkModePreference: linkMode == LinkMode.dynamic + ? LinkModePreference.dynamic + : LinkModePreference.static, ); final buildOutput = BuildOutput(); @@ -63,7 +63,7 @@ void main() { ); final libUri = - tempUri.resolve(target.os.libraryFileName(name, packaging)); + tempUri.resolve(target.os.libraryFileName(name, linkMode)); if (Platform.isLinux) { final result = await runProcess( executable: Uri.file('readelf'), diff --git a/pkgs/c_compiler/test/cbuilder/cbuilder_cross_ios_test.dart b/pkgs/c_compiler/test/cbuilder/cbuilder_cross_ios_test.dart index dd3c583f4f..7fb1e6a39e 100644 --- a/pkgs/c_compiler/test/cbuilder/cbuilder_cross_ios_test.dart +++ b/pkgs/c_compiler/test/cbuilder/cbuilder_cross_ios_test.dart @@ -29,10 +29,10 @@ void main() { Target.iOSArm64: 'arm64', }; - for (final packaging in Packaging.values) { + for (final linkMode in LinkMode.values) { for (final targetIOSSdk in IOSSdk.values) { for (final target in targets) { - test('Cbuilder $packaging library $targetIOSSdk $target', () async { + test('Cbuilder $linkMode library $targetIOSSdk $target', () async { await inTempDir((tempUri) async { final addCUri = packageUri.resolve('test/cbuilder/testfiles/add/src/add.c'); @@ -42,9 +42,9 @@ void main() { outDir: tempUri, packageRoot: tempUri, target: target, - packaging: packaging == Packaging.dynamic - ? PackagingPreference.dynamic - : PackagingPreference.static, + linkModePreference: linkMode == LinkMode.dynamic + ? LinkModePreference.dynamic + : LinkModePreference.static, targetIOSSdk: targetIOSSdk, ); final buildOutput = BuildOutput(); @@ -61,7 +61,7 @@ void main() { ); final libUri = - tempUri.resolve(target.os.libraryFileName(name, packaging)); + tempUri.resolve(target.os.libraryFileName(name, linkMode)); final result = await runProcess( executable: Uri.file('objdump'), arguments: ['-t', libUri.path], diff --git a/pkgs/c_compiler/test/cbuilder/cbuilder_cross_linux_host_test.dart b/pkgs/c_compiler/test/cbuilder/cbuilder_cross_linux_host_test.dart index a197fb99fe..9a4f34a723 100644 --- a/pkgs/c_compiler/test/cbuilder/cbuilder_cross_linux_host_test.dart +++ b/pkgs/c_compiler/test/cbuilder/cbuilder_cross_linux_host_test.dart @@ -34,9 +34,9 @@ void main() { Target.linuxX64: 'Advanced Micro Devices X86-64', }; - for (final packaging in Packaging.values) { + for (final linkMode in LinkMode.values) { for (final target in targets) { - test('Cbuilder $packaging library $target', () async { + test('Cbuilder $linkMode library $target', () async { await inTempDir((tempUri) async { final addCUri = packageUri.resolve('test/cbuilder/testfiles/add/src/add.c'); @@ -46,9 +46,9 @@ void main() { outDir: tempUri, packageRoot: tempUri, target: target, - packaging: packaging == Packaging.dynamic - ? PackagingPreference.dynamic - : PackagingPreference.static, + linkModePreference: linkMode == LinkMode.dynamic + ? LinkModePreference.dynamic + : LinkModePreference.static, ); final buildOutput = BuildOutput(); @@ -64,7 +64,7 @@ void main() { ); final libUri = - tempUri.resolve(target.os.libraryFileName(name, packaging)); + tempUri.resolve(target.os.libraryFileName(name, linkMode)); final result = await runProcess( executable: Uri.file('readelf'), arguments: ['-h', libUri.path], diff --git a/pkgs/c_compiler/test/cbuilder/cbuilder_cross_macos_host_test.dart b/pkgs/c_compiler/test/cbuilder/cbuilder_cross_macos_host_test.dart index e71cf286d3..b3d6ea8a57 100644 --- a/pkgs/c_compiler/test/cbuilder/cbuilder_cross_macos_host_test.dart +++ b/pkgs/c_compiler/test/cbuilder/cbuilder_cross_macos_host_test.dart @@ -31,9 +31,9 @@ void main() { Target.macOSX64: '64-bit x86-64', }; - for (final packaging in Packaging.values) { + for (final linkMode in LinkMode.values) { for (final target in targets) { - test('Cbuilder $packaging library $target', () async { + test('Cbuilder $linkMode library $target', () async { await inTempDir((tempUri) async { final addCUri = packageUri.resolve('test/cbuilder/testfiles/add/src/add.c'); @@ -43,9 +43,9 @@ void main() { outDir: tempUri, packageRoot: tempUri, target: target, - packaging: packaging == Packaging.dynamic - ? PackagingPreference.dynamic - : PackagingPreference.static, + linkModePreference: linkMode == LinkMode.dynamic + ? LinkModePreference.dynamic + : LinkModePreference.static, ); final buildOutput = BuildOutput(); @@ -61,7 +61,7 @@ void main() { ); final libUri = - tempUri.resolve(target.os.libraryFileName(name, packaging)); + tempUri.resolve(target.os.libraryFileName(name, linkMode)); final result = await runProcess( executable: Uri.file('objdump'), arguments: ['-t', libUri.path], diff --git a/pkgs/c_compiler/test/cbuilder/cbuilder_cross_windows_host_test.dart b/pkgs/c_compiler/test/cbuilder/cbuilder_cross_windows_host_test.dart index 3a4cde0b90..5112d3936b 100644 --- a/pkgs/c_compiler/test/cbuilder/cbuilder_cross_windows_host_test.dart +++ b/pkgs/c_compiler/test/cbuilder/cbuilder_cross_windows_host_test.dart @@ -40,13 +40,13 @@ void main() { }; const dumpbinFileType = { - Packaging.dynamic: 'DLL', - Packaging.static: 'LIBRARY', + LinkMode.dynamic: 'DLL', + LinkMode.static: 'LIBRARY', }; - for (final packaging in Packaging.values) { + for (final linkMode in LinkMode.values) { for (final target in targets) { - test('Cbuilder $packaging library $target', timeout: Timeout.factor(2), + test('Cbuilder $linkMode library $target', timeout: Timeout.factor(2), () async { await inTempDir((tempUri) async { final addCUri = @@ -57,9 +57,9 @@ void main() { outDir: tempUri, packageRoot: tempUri, target: target, - packaging: packaging == Packaging.dynamic - ? PackagingPreference.dynamic - : PackagingPreference.static, + linkModePreference: linkMode == LinkMode.dynamic + ? LinkModePreference.dynamic + : LinkModePreference.static, ); final buildOutput = BuildOutput(); @@ -75,7 +75,7 @@ void main() { ); final libUri = - tempUri.resolve(target.os.libraryFileName(name, packaging)); + tempUri.resolve(target.os.libraryFileName(name, linkMode)); expect(await File.fromUri(libUri).exists(), true); final result = await runProcess( executable: dumpbinUri, @@ -90,7 +90,7 @@ void main() { final fileType = result.stdout .split('\n') .firstWhere((e) => e.contains('File Type')); - expect(fileType, contains(dumpbinFileType[packaging])); + expect(fileType, contains(dumpbinFileType[linkMode])); }); }); } diff --git a/pkgs/c_compiler/test/cbuilder/cbuilder_test.dart b/pkgs/c_compiler/test/cbuilder/cbuilder_test.dart index cabf8e1301..8c70e45a84 100644 --- a/pkgs/c_compiler/test/cbuilder/cbuilder_test.dart +++ b/pkgs/c_compiler/test/cbuilder/cbuilder_test.dart @@ -29,7 +29,8 @@ void main() { outDir: tempUri, packageRoot: tempUri, target: Target.current, - packaging: PackagingPreference.dynamic, // Ignored by executables. + linkModePreference: + LinkModePreference.dynamic, // Ignored by executables. cc: cc, toolchainEnvScript: toolchainEnvScript, toolchainEnvScriptArgs: toolchainEnvScriptArgs, @@ -70,7 +71,7 @@ void main() { outDir: tempUri, packageRoot: tempUri, target: Target.current, - packaging: PackagingPreference.dynamic, + linkModePreference: LinkModePreference.dynamic, cc: cc, toolchainEnvScript: toolchainEnvScript, toolchainEnvScriptArgs: toolchainEnvScriptArgs, diff --git a/pkgs/c_compiler/test/cbuilder/compiler_resolver_test.dart b/pkgs/c_compiler/test/cbuilder/compiler_resolver_test.dart index 5dae0159bb..daa84cadaf 100644 --- a/pkgs/c_compiler/test/cbuilder/compiler_resolver_test.dart +++ b/pkgs/c_compiler/test/cbuilder/compiler_resolver_test.dart @@ -5,8 +5,9 @@ @OnPlatform({'windows': Timeout.factor(10)}) library; -import 'package:c_compiler/c_compiler.dart'; import 'package:c_compiler/src/cbuilder/compiler_resolver.dart'; +import 'package:c_compiler/src/native_toolchain/apple_clang.dart'; +import 'package:c_compiler/src/native_toolchain/clang.dart'; import 'package:c_compiler/src/native_toolchain/msvc.dart'; import 'package:c_compiler/src/tool/tool_error.dart'; import 'package:collection/collection.dart'; @@ -40,7 +41,7 @@ void main() { outDir: tempUri, packageRoot: tempUri, target: Target.current, - packaging: PackagingPreference.dynamic, + linkModePreference: LinkModePreference.dynamic, ar: ar, cc: cc, ld: ld, @@ -61,7 +62,7 @@ void main() { outDir: tempUri, packageRoot: tempUri, target: Target.windowsX64, - packaging: PackagingPreference.dynamic, + linkModePreference: LinkModePreference.dynamic, ); final resolver = CompilerResolver( buildConfig: buildConfig, diff --git a/pkgs/c_compiler/test/native_toolchain/apple_clang_test.dart b/pkgs/c_compiler/test/native_toolchain/apple_clang_test.dart index 3493a20d79..184e017fa3 100644 --- a/pkgs/c_compiler/test/native_toolchain/apple_clang_test.dart +++ b/pkgs/c_compiler/test/native_toolchain/apple_clang_test.dart @@ -7,7 +7,8 @@ library; import 'dart:io'; -import 'package:c_compiler/c_compiler.dart'; +import 'package:c_compiler/src/native_toolchain/apple_clang.dart'; +import 'package:c_compiler/src/tool/tool_requirement.dart'; import 'package:pub_semver/pub_semver.dart'; import 'package:test/test.dart'; diff --git a/pkgs/c_compiler/test/tool/tool_instance_test.dart b/pkgs/c_compiler/test/tool/tool_instance_test.dart index 4a82ef62de..abde1551db 100644 --- a/pkgs/c_compiler/test/tool/tool_instance_test.dart +++ b/pkgs/c_compiler/test/tool/tool_instance_test.dart @@ -2,7 +2,8 @@ // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. -import 'package:c_compiler/c_compiler.dart'; +import 'package:c_compiler/src/tool/tool.dart'; +import 'package:c_compiler/src/tool/tool_instance.dart'; import 'package:collection/collection.dart'; import 'package:pub_semver/pub_semver.dart'; import 'package:test/test.dart'; diff --git a/pkgs/c_compiler/test/tool/tool_resolver_test.dart b/pkgs/c_compiler/test/tool/tool_resolver_test.dart index 7c7fa89b1e..d54804d355 100644 --- a/pkgs/c_compiler/test/tool/tool_resolver_test.dart +++ b/pkgs/c_compiler/test/tool/tool_resolver_test.dart @@ -4,9 +4,13 @@ import 'dart:io'; -import 'package:c_compiler/c_compiler.dart'; +import 'package:c_compiler/src/native_toolchain/apple_clang.dart'; +import 'package:c_compiler/src/native_toolchain/clang.dart'; import 'package:c_compiler/src/native_toolchain/msvc.dart'; +import 'package:c_compiler/src/tool/tool.dart'; import 'package:c_compiler/src/tool/tool_error.dart'; +import 'package:c_compiler/src/tool/tool_instance.dart'; +import 'package:c_compiler/src/tool/tool_resolver.dart'; import 'package:native_assets_cli/native_assets_cli.dart'; import 'package:test/test.dart'; diff --git a/pkgs/native_assets_cli/lib/native_assets_cli.dart b/pkgs/native_assets_cli/lib/native_assets_cli.dart index 2986e641ef..b23ff3a2c1 100644 --- a/pkgs/native_assets_cli/lib/native_assets_cli.dart +++ b/pkgs/native_assets_cli/lib/native_assets_cli.dart @@ -11,7 +11,7 @@ export 'src/model/build_config.dart'; export 'src/model/build_output.dart'; export 'src/model/dependencies.dart'; export 'src/model/ios_sdk.dart'; +export 'src/model/link_mode.dart'; +export 'src/model/link_mode_preference.dart'; export 'src/model/metadata.dart'; -export 'src/model/packaging.dart'; -export 'src/model/packaging_preference.dart'; export 'src/model/target.dart'; diff --git a/pkgs/native_assets_cli/lib/src/model/asset.dart b/pkgs/native_assets_cli/lib/src/model/asset.dart index 265e3a785b..736511fe4f 100644 --- a/pkgs/native_assets_cli/lib/src/model/asset.dart +++ b/pkgs/native_assets_cli/lib/src/model/asset.dart @@ -6,7 +6,7 @@ import 'package:yaml/yaml.dart'; import '../utils/uri.dart'; import '../utils/yaml.dart'; -import 'packaging.dart'; +import 'link_mode.dart'; import 'target.dart'; abstract class AssetPath { @@ -76,7 +76,7 @@ class AssetAbsolutePath implements AssetPath { /// Asset is avaliable on a relative path. /// -/// If [Packaging] of an [Asset] is [Packaging.dynamic], +/// If [LinkMode] of an [Asset] is [LinkMode.dynamic], /// `Platform.script.resolve(uri)` will be used to load the asset at runtime. class AssetRelativePath implements AssetPath { final Uri uri; @@ -190,14 +190,14 @@ class AssetInExecutable implements AssetPath { } class Asset { - final Packaging packaging; + final LinkMode linkMode; final String name; final Target target; final AssetPath path; Asset({ required this.name, - required this.packaging, + required this.linkMode, required this.target, required this.path, }); @@ -206,7 +206,7 @@ class Asset { name: yamlMap[_nameKey] as String, path: AssetPath.fromYaml(yamlMap[_pathKey] as YamlMap), target: Target.fromString(yamlMap[_targetKey] as String), - packaging: Packaging.fromName(yamlMap[_packagingKey] as String), + linkMode: LinkMode.fromName(yamlMap[_linkModeKey] as String), ); static List listFromYamlString(String yaml) { @@ -226,14 +226,14 @@ class Asset { ]; Asset copyWith({ - Packaging? packaging, + LinkMode? linkMode, String? name, Target? target, AssetPath? path, }) => Asset( name: name ?? this.name, - packaging: packaging ?? this.packaging, + linkMode: linkMode ?? this.linkMode, target: target ?? this.target, path: path ?? this.path, ); @@ -244,17 +244,17 @@ class Asset { return false; } return other.name == name && - other.packaging == packaging && + other.linkMode == linkMode && other.target == target && other.path == path; } @override - int get hashCode => Object.hash(name, packaging, target, path); + int get hashCode => Object.hash(name, linkMode, target, path); Map toYaml() => { _nameKey: name, - _packagingKey: packaging.name, + _linkModeKey: linkMode.name, _pathKey: path.toYaml(), _targetKey: target.toString(), }; @@ -266,7 +266,7 @@ class Asset { String toYamlString() => yamlEncode(toYaml()); static const _nameKey = 'name'; - static const _packagingKey = 'packaging'; + static const _linkModeKey = 'link_mode'; static const _pathKey = 'path'; static const _targetKey = 'target'; @@ -281,8 +281,8 @@ extension AssetIterable on Iterable { String toYamlString() => yamlEncode(toYaml()); - Iterable wherePackaging(Packaging packaging) => - where((e) => e.packaging == packaging); + Iterable whereLinkMode(LinkMode linkMode) => + where((e) => e.linkMode == linkMode); Map> get assetsPerTarget { final result = >{}; diff --git a/pkgs/native_assets_cli/lib/src/model/build_config.dart b/pkgs/native_assets_cli/lib/src/model/build_config.dart index 2d648a6cf9..5fbe1344e1 100644 --- a/pkgs/native_assets_cli/lib/src/model/build_config.dart +++ b/pkgs/native_assets_cli/lib/src/model/build_config.dart @@ -8,8 +8,8 @@ import 'package:collection/collection.dart'; import '../utils/map.dart'; import '../utils/yaml.dart'; import 'ios_sdk.dart'; +import 'link_mode_preference.dart'; import 'metadata.dart'; -import 'packaging_preference.dart'; import 'target.dart'; class BuildConfig { @@ -47,6 +47,10 @@ class BuildConfig { Uri? get ar => _ar; late final Uri? _ar; + /// Preferred linkMode method for library. + LinkModePreference get linkModePreference => _linkModePreference; + late final LinkModePreference _linkModePreference; + /// Path to script that sets environment variables for [cc], [ld], and [ar]. Uri? get toolchainEnvScript => _toolchainEnvScript; late final Uri? _toolchainEnvScript; @@ -55,10 +59,6 @@ class BuildConfig { List? get toolchainEnvScriptArgs => _toolchainEnvScriptArgs; late final List? _toolchainEnvScriptArgs; - /// Preferred packaging method for library. - PackagingPreference get packaging => _packaging; - late final PackagingPreference _packaging; - /// Metadata from direct dependencies. /// /// The key in the map is the package name of the dependency. @@ -83,7 +83,7 @@ class BuildConfig { Uri? ld, Uri? toolchainEnvScript, List? toolchainEnvScriptArgs, - required PackagingPreference packaging, + required LinkModePreference linkModePreference, Map? dependencyMetadata, }) { final nonValidated = BuildConfig._() @@ -94,9 +94,9 @@ class BuildConfig { .._ar = ar .._cc = cc .._ld = ld + .._linkModePreference = linkModePreference .._toolchainEnvScript = toolchainEnvScript .._toolchainEnvScriptArgs = toolchainEnvScriptArgs - .._packaging = packaging .._dependencyMetadata = dependencyMetadata; final parsedConfigFile = nonValidated.toYaml(); final config = Config(fileParsed: parsedConfigFile); @@ -198,10 +198,10 @@ class BuildConfig { toolchainEnvScriptArgsConfigKey, splitEnvironmentPattern: ' ', ), - (config) => _packaging = PackagingPreference.fromString( + (config) => _linkModePreference = LinkModePreference.fromString( config.string( - PackagingPreference.configKey, - validValues: PackagingPreference.values.map((e) => '$e'), + LinkModePreference.configKey, + validValues: LinkModePreference.values.map((e) => '$e'), ), ), (config) => @@ -249,7 +249,7 @@ class BuildConfig { toolchainEnvScriptConfigKey: _toolchainEnvScript!.toFilePath(), if (_toolchainEnvScriptArgs != null) toolchainEnvScriptArgsConfigKey: _toolchainEnvScriptArgs!, - PackagingPreference.configKey: _packaging.toString(), + LinkModePreference.configKey: _linkModePreference.toString(), if (_dependencyMetadata != null) dependencyMetadataConfigKey: { for (final entry in _dependencyMetadata!.entries) @@ -274,7 +274,7 @@ class BuildConfig { if (other.toolchainEnvScript != toolchainEnvScript) return false; if (!ListEquality().equals( other.toolchainEnvScriptArgs, toolchainEnvScriptArgs)) return false; - if (other._packaging != _packaging) return false; + if (other._linkModePreference != _linkModePreference) return false; if (!DeepCollectionEquality() .equals(other._dependencyMetadata, _dependencyMetadata)) return false; return true; @@ -291,7 +291,7 @@ class BuildConfig { _ld, _toolchainEnvScript, ListEquality().hash(toolchainEnvScriptArgs), - _packaging, + _linkModePreference, DeepCollectionEquality().hash(_dependencyMetadata), ); diff --git a/pkgs/native_assets_cli/lib/src/model/packaging.dart b/pkgs/native_assets_cli/lib/src/model/link_mode.dart similarity index 56% rename from pkgs/native_assets_cli/lib/src/model/packaging.dart rename to pkgs/native_assets_cli/lib/src/model/link_mode.dart index 5cc734a4ae..a7f4d3d8e6 100644 --- a/pkgs/native_assets_cli/lib/src/model/packaging.dart +++ b/pkgs/native_assets_cli/lib/src/model/link_mode.dart @@ -2,21 +2,21 @@ // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. -class Packaging { +class LinkMode { final String name; - const Packaging._(this.name); + const LinkMode._(this.name); - static const Packaging dynamic = Packaging._('dynamic'); - static const Packaging static = Packaging._('static'); + static const LinkMode dynamic = LinkMode._('dynamic'); + static const LinkMode static = LinkMode._('static'); - /// Known values for [Packaging]. - static const List values = [ + /// Known values for [LinkMode]. + static const List values = [ dynamic, static, ]; - factory Packaging.fromName(String name) => + factory LinkMode.fromName(String name) => values.where((element) => element.name == name).first; @override diff --git a/pkgs/native_assets_cli/lib/src/model/packaging_preference.dart b/pkgs/native_assets_cli/lib/src/model/link_mode_preference.dart similarity index 54% rename from pkgs/native_assets_cli/lib/src/model/packaging_preference.dart rename to pkgs/native_assets_cli/lib/src/model/link_mode_preference.dart index d4660ba2e0..89a72ce9df 100644 --- a/pkgs/native_assets_cli/lib/src/model/packaging_preference.dart +++ b/pkgs/native_assets_cli/lib/src/model/link_mode_preference.dart @@ -2,63 +2,59 @@ // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. -import 'packaging.dart'; +import 'link_mode.dart'; -class PackagingPreference { +class LinkModePreference { final String name; final String description; - final List preferredPackaging; - final List potentialPackaging; + final LinkMode preferredLinkMode; + final List potentialLinkMode; - const PackagingPreference( + const LinkModePreference( this.name, this.description, { - required this.preferredPackaging, - required this.potentialPackaging, + required this.preferredLinkMode, + required this.potentialLinkMode, }); - factory PackagingPreference.fromString(String name) => + factory LinkModePreference.fromString(String name) => values.where((element) => element.name == name).first; - static const dynamic = PackagingPreference( + static const dynamic = LinkModePreference( 'dynamic', '''Provide native assets as dynamic libraries. Fails if not all native assets can only be provided as static library. Required to run Dart in JIT mode.''', - preferredPackaging: [Packaging.dynamic], - potentialPackaging: [Packaging.dynamic], + preferredLinkMode: LinkMode.dynamic, + potentialLinkMode: [LinkMode.dynamic], ); - static const static = PackagingPreference( + + static const static = LinkModePreference( 'static', '''Provide native assets as static libraries. Fails if not all native assets can only be provided as dynamic library. Required for potential link-time tree-shaking of native code. Therefore, preferred to in Dart AOT mode.''', - preferredPackaging: [Packaging.static], - potentialPackaging: [Packaging.static], + preferredLinkMode: LinkMode.static, + potentialLinkMode: [LinkMode.static], ); - static const preferDynamic = PackagingPreference( + + static const preferDynamic = LinkModePreference( 'prefer-dynamic', '''Provide native assets as dynamic libraries, if possible. Otherwise, build native assets as static libraries.''', - preferredPackaging: [Packaging.dynamic], - potentialPackaging: Packaging.values, + preferredLinkMode: LinkMode.dynamic, + potentialLinkMode: LinkMode.values, ); - static const preferStatic = PackagingPreference( + + static const preferStatic = LinkModePreference( 'prefer-static', '''Provide native assets as static libraries, if possible. Otherwise, build native assets as dynamic libraries. Preferred for AOT compilation, if there are any native assets which can only be provided as dynamic libraries.''', - preferredPackaging: [Packaging.static], - potentialPackaging: Packaging.values, - ); - static const all = PackagingPreference( - 'all', - '''Provide native assets as both dynamic and static libraries if supported. -Mostly useful for testing the build scripts.''', - preferredPackaging: Packaging.values, - potentialPackaging: Packaging.values, + preferredLinkMode: LinkMode.static, + potentialLinkMode: LinkMode.values, ); static const values = [ @@ -66,11 +62,10 @@ Mostly useful for testing the build scripts.''', static, preferDynamic, preferStatic, - all, ]; /// The `package:config` key preferably used. - static const String configKey = 'packaging'; + static const String configKey = 'link_mode_preference'; @override String toString() => name; diff --git a/pkgs/native_assets_cli/lib/src/model/target.dart b/pkgs/native_assets_cli/lib/src/model/target.dart index c9d0c204b4..341e358cbe 100644 --- a/pkgs/native_assets_cli/lib/src/model/target.dart +++ b/pkgs/native_assets_cli/lib/src/model/target.dart @@ -5,7 +5,7 @@ import 'dart:ffi' show Abi; import 'dart:io'; -import 'packaging.dart'; +import 'link_mode.dart'; /// The hardware architectures the Dart VM runs on. class Architecture { @@ -106,13 +106,6 @@ class OS { Abi.windowsX64: OS.windows, }; - /// Whether the [OS] is a OS for mobile devices. - bool get isMobile => this == OS.android || this == OS.iOS; - - /// Whether the [OS] is a OS for desktop devices. - bool get isDesktop => - this == OS.linux || this == OS.macOS || this == OS.windows; - /// Typical cross compilation between OSes. static const _osCrossCompilationDefault = { OS.macOS: [OS.macOS, OS.iOS, OS.android], @@ -134,11 +127,11 @@ class OS { return '$prefix$name.$extension'; } - String libraryFileName(String name, Packaging packaging) { - if (packaging == Packaging.dynamic) { + String libraryFileName(String name, LinkMode linkMode) { + if (linkMode == LinkMode.dynamic) { return dylibFileName(name); } - assert(packaging == Packaging.static); + assert(linkMode == LinkMode.static); return staticlibFileName(name); } diff --git a/pkgs/native_assets_cli/test/example/native_add_test.dart b/pkgs/native_assets_cli/test/example/native_add_test.dart index 7e0f355b47..17442fcdf7 100644 --- a/pkgs/native_assets_cli/test/example/native_add_test.dart +++ b/pkgs/native_assets_cli/test/example/native_add_test.dart @@ -33,7 +33,7 @@ void main() async { '-Dout_dir=${tempUri.toFilePath()}', '-Dpackage_root=${testPackageUri.toFilePath()}', '-Dtarget=${Target.current}', - '-Dpackaging=dynamic', + '-Dlink_mode_preference=dynamic', if (cc != null) '-Dcc=${cc!.toFilePath()}', if (toolchainEnvScript != null) '-D${BuildConfig.toolchainEnvScriptConfigKey}=' diff --git a/pkgs/native_assets_cli/test/model/asset_test.dart b/pkgs/native_assets_cli/test/model/asset_test.dart index d4175297f8..c542c5e3bf 100644 --- a/pkgs/native_assets_cli/test/model/asset_test.dart +++ b/pkgs/native_assets_cli/test/model/asset_test.dart @@ -17,82 +17,82 @@ void main() { name: 'foo', path: AssetAbsolutePath(fooUri), target: Target.androidX64, - packaging: Packaging.dynamic, + linkMode: LinkMode.dynamic, ), Asset( name: 'foo2', path: AssetRelativePath(foo2Uri), target: Target.androidX64, - packaging: Packaging.dynamic, + linkMode: LinkMode.dynamic, ), Asset( name: 'foo3', path: AssetSystemPath(foo3Uri), target: Target.androidX64, - packaging: Packaging.dynamic, + linkMode: LinkMode.dynamic, ), Asset( name: 'foo4', path: AssetInExecutable(), target: Target.androidX64, - packaging: Packaging.dynamic, + linkMode: LinkMode.dynamic, ), Asset( name: 'foo5', path: AssetInProcess(), target: Target.androidX64, - packaging: Packaging.dynamic, + linkMode: LinkMode.dynamic, ), Asset( name: 'bar', path: AssetAbsolutePath(barUri), target: Target.linuxArm64, - packaging: Packaging.static, + linkMode: LinkMode.static, ), Asset( name: 'bla', path: AssetAbsolutePath(blaUri), target: Target.windowsX64, - packaging: Packaging.dynamic, + linkMode: LinkMode.dynamic, ), ]; final assetsYamlEncoding = '''- name: foo - packaging: dynamic + link_mode: dynamic path: path_type: absolute uri: ${fooUri.toFilePath()} target: android_x64 - name: foo2 - packaging: dynamic + link_mode: dynamic path: path_type: relative uri: ${foo2Uri.toFilePath()} target: android_x64 - name: foo3 - packaging: dynamic + link_mode: dynamic path: path_type: system uri: ${foo3Uri.toFilePath()} target: android_x64 - name: foo4 - packaging: dynamic + link_mode: dynamic path: path_type: executable target: android_x64 - name: foo5 - packaging: dynamic + link_mode: dynamic path: path_type: process target: android_x64 - name: bar - packaging: static + link_mode: static path: path_type: absolute uri: ${barUri.toFilePath()} target: linux_arm64 - name: bla - packaging: dynamic + link_mode: dynamic path: path_type: absolute uri: ${blaUri.toFilePath()} @@ -157,8 +157,8 @@ native-assets: expect(equality.hash(assets) != equality.hash(assets2), true); }); - test('List wherePackaging', () async { - final assets2 = assets.wherePackaging(Packaging.dynamic); + test('List whereLinkMode', () async { + final assets2 = assets.whereLinkMode(LinkMode.dynamic); expect(assets2.length, 6); }); @@ -175,7 +175,7 @@ native-assets: assets.first.toYamlString(), ''' name: foo -packaging: dynamic +link_mode: dynamic path: path_type: absolute uri: ${fooUri.toFilePath()} diff --git a/pkgs/native_assets_cli/test/model/build_config_test.dart b/pkgs/native_assets_cli/test/model/build_config_test.dart index 15f745f11d..dcaf5df9a6 100644 --- a/pkgs/native_assets_cli/test/model/build_config_test.dart +++ b/pkgs/native_assets_cli/test/model/build_config_test.dart @@ -43,14 +43,14 @@ void main() async { cc: fakeClang, ld: fakeLd, ar: fakeAr, - packaging: PackagingPreference.preferStatic, + linkModePreference: LinkModePreference.preferStatic, ); final config2 = BuildConfig( outDir: tempUri.resolve('out2/'), packageRoot: tempUri, target: Target.androidArm64, - packaging: PackagingPreference.preferStatic, + linkModePreference: LinkModePreference.preferStatic, ); expect(config1, equals(config1)); @@ -62,7 +62,7 @@ void main() async { expect(config1.cc != config2.cc, true); expect(config1.ld != config2.ld, true); expect(config1.ar != config2.ar, true); - expect(config1.packaging, config2.packaging); + expect(config1.linkModePreference, config2.linkModePreference); expect(config1.dependencyMetadata, config2.dependencyMetadata); }); @@ -71,14 +71,14 @@ void main() async { outDir: tempUri.resolve('out2/'), packageRoot: tempUri.resolve('packageRoot/'), target: Target.androidArm64, - packaging: PackagingPreference.preferStatic, + linkModePreference: LinkModePreference.preferStatic, ); final config = Config(fileParsed: { 'out_dir': tempUri.resolve('out2/').toFilePath(), 'package_root': tempUri.resolve('packageRoot/').toFilePath(), 'target': 'android_arm64', - 'packaging': 'prefer-static', + 'link_mode_preference': 'prefer-static', }); final fromConfig = BuildConfig.fromConfig(config); @@ -93,7 +93,7 @@ void main() async { targetIOSSdk: IOSSdk.iPhoneOs, cc: fakeClang, ld: fakeLd, - packaging: PackagingPreference.preferStatic, + linkModePreference: LinkModePreference.preferStatic, ); final configFile = buildConfig1.toYaml(); @@ -107,7 +107,7 @@ void main() async { outDir: tempUri.resolve('out1/'), packageRoot: tempUri, target: Target.androidArm64, - packaging: PackagingPreference.preferStatic, + linkModePreference: LinkModePreference.preferStatic, dependencyMetadata: { 'bar': Metadata({ 'key': 'value', @@ -123,7 +123,7 @@ void main() async { outDir: tempUri.resolve('out1/'), packageRoot: tempUri, target: Target.androidArm64, - packaging: PackagingPreference.preferStatic, + linkModePreference: LinkModePreference.preferStatic, dependencyMetadata: { 'bar': Metadata({ 'key': 'value', @@ -148,7 +148,7 @@ void main() async { targetIOSSdk: IOSSdk.iPhoneOs, cc: fakeClang, ld: fakeLd, - packaging: PackagingPreference.preferStatic, + linkModePreference: LinkModePreference.preferStatic, // This map should be sorted on key for two layers. dependencyMetadata: { 'foo': Metadata({ @@ -171,9 +171,9 @@ dependency_metadata: - z - a ld: ${fakeLd.toFilePath()} +link_mode_preference: prefer-static out_dir: ${outDir.toFilePath()} package_root: ${tempUri.toFilePath()} -packaging: prefer-static target: ios_arm64 target_ios_sdk: iphoneos'''; expect(yamlString, equals(expectedYamlString)); @@ -195,7 +195,7 @@ target_ios_sdk: iphoneos'''; () => BuildConfig.fromConfig(Config(fileParsed: { 'package_root': tempUri.resolve('packageRoot/').toFilePath(), 'target': 'android_arm64', - 'packaging': 'prefer-static', + 'link_mode_preference': 'prefer-static', })), throwsFormatException, ); @@ -204,7 +204,7 @@ target_ios_sdk: iphoneos'''; 'out_dir': tempUri.resolve('out2/').toFilePath(), 'package_root': tempUri.resolve('packageRoot/').toFilePath(), 'target': 'android_arm64', - 'packaging': 'prefer-static', + 'link_mode_preference': 'prefer-static', 'dependency_metadata': { 'bar': {'key': 'value'}, 'foo': [], @@ -220,7 +220,7 @@ target_ios_sdk: iphoneos'''; 'out_dir': tempUri.resolve('out2/').toFilePath(), 'package_root': tempUri.resolve('packageRoot/').toFilePath(), 'target': [1, 2, 3, 4, 5], - 'packaging': 'prefer-static', + 'link_mode_preference': 'prefer-static', })); } on FormatException catch (e) { expect(e.toString(), stringContainsInOrder(['Config.string'])); @@ -235,7 +235,7 @@ target_ios_sdk: iphoneos'''; targetIOSSdk: IOSSdk.iPhoneOs, cc: fakeClang, ld: fakeLd, - packaging: PackagingPreference.preferStatic, + linkModePreference: LinkModePreference.preferStatic, ); config.toString(); }); @@ -245,7 +245,7 @@ target_ios_sdk: iphoneos'''; outDir: tempUri.resolve('out2/'), packageRoot: tempUri, target: Target.androidArm64, - packaging: PackagingPreference.preferStatic, + linkModePreference: LinkModePreference.preferStatic, ); final configFileContents = buildConfig.toYamlString(); final configUri = tempUri.resolve('config.yaml'); @@ -263,7 +263,7 @@ target_ios_sdk: iphoneos'''; outDir: tempUri.resolve('out1/'), packageRoot: tempUri, target: Target.androidArm64, - packaging: PackagingPreference.preferStatic, + linkModePreference: LinkModePreference.preferStatic, dependencyMetadata: { 'bar': Metadata({ 'key': {'key2': 'value'}, @@ -290,7 +290,7 @@ target_ios_sdk: iphoneos'''; cc: fakeCl, toolchainEnvScript: fakeVcVars, toolchainEnvScriptArgs: ['x64'], - packaging: PackagingPreference.dynamic, + linkModePreference: LinkModePreference.dynamic, ); final configFile = buildConfig1.toYaml(); diff --git a/pkgs/native_assets_cli/test/model/build_output_test.dart b/pkgs/native_assets_cli/test/model/build_output_test.dart index 6751416b6f..5b33d1fe9a 100644 --- a/pkgs/native_assets_cli/test/model/build_output_test.dart +++ b/pkgs/native_assets_cli/test/model/build_output_test.dart @@ -25,13 +25,13 @@ void main() { name: 'foo', path: AssetAbsolutePath(Uri(path: 'path/to/libfoo.so')), target: Target.androidX64, - packaging: Packaging.dynamic, + linkMode: LinkMode.dynamic, ), Asset( name: 'foo2', path: AssetRelativePath(Uri(path: 'path/to/libfoo2.so')), target: Target.androidX64, - packaging: Packaging.dynamic, + linkMode: LinkMode.dynamic, ), ], dependencies: Dependencies([ @@ -45,13 +45,13 @@ void main() { const yamlEncoding = '''timestamp: 2022-11-10 13:25:01.000 assets: - name: foo - packaging: dynamic + link_mode: dynamic path: path_type: absolute uri: path/to/libfoo.so target: android_x64 - name: foo2 - packaging: dynamic + link_mode: dynamic path: path_type: relative uri: path/to/libfoo2.so diff --git a/pkgs/native_assets_cli/test/model/packaging_test.dart b/pkgs/native_assets_cli/test/model/link_mode_test.dart similarity index 81% rename from pkgs/native_assets_cli/test/model/packaging_test.dart rename to pkgs/native_assets_cli/test/model/link_mode_test.dart index 398f760ef1..ba86d444c1 100644 --- a/pkgs/native_assets_cli/test/model/packaging_test.dart +++ b/pkgs/native_assets_cli/test/model/link_mode_test.dart @@ -6,7 +6,7 @@ import 'package:native_assets_cli/native_assets_cli.dart'; import 'package:test/test.dart'; void main() { - test('Packaging toString', () async { - Packaging.static.toString(); + test('LinkMode toString', () async { + LinkMode.static.toString(); }); } diff --git a/pkgs/native_assets_cli/test/model/target_test.dart b/pkgs/native_assets_cli/test/model/target_test.dart index 7a6e3ee94f..ce74672660 100644 --- a/pkgs/native_assets_cli/test/model/target_test.dart +++ b/pkgs/native_assets_cli/test/model/target_test.dart @@ -9,18 +9,13 @@ import 'package:native_assets_cli/native_assets_cli.dart'; import 'package:test/test.dart'; void main() { - test('OS accessors', () async { - expect(OS.android.isDesktop, false); - expect(OS.android.isMobile, true); - }); - test('OS naming conventions', () async { expect(OS.android.dylibFileName('foo'), 'libfoo.so'); expect(OS.android.staticlibFileName('foo'), 'libfoo.a'); expect(OS.windows.dylibFileName('foo'), 'foo.dll'); - expect(OS.windows.libraryFileName('foo', Packaging.dynamic), 'foo.dll'); + expect(OS.windows.libraryFileName('foo', LinkMode.dynamic), 'foo.dll'); expect(OS.windows.staticlibFileName('foo'), 'foo.lib'); - expect(OS.windows.libraryFileName('foo', Packaging.static), 'foo.lib'); + expect(OS.windows.libraryFileName('foo', LinkMode.static), 'foo.lib'); expect(OS.windows.executableFileName('foo'), 'foo.exe'); });