From 7e900965fb63d386694b507bd1f16cc51e6d43c2 Mon Sep 17 00:00:00 2001 From: Daco Harkes Date: Thu, 20 Apr 2023 11:25:06 +0200 Subject: [PATCH 1/7] Remove internals from public API --- pkgs/c_compiler/lib/c_compiler.dart | 8 -------- pkgs/c_compiler/test/cbuilder/compiler_resolver_test.dart | 3 ++- .../test/native_toolchain/apple_clang_test.dart | 3 ++- pkgs/c_compiler/test/tool/tool_instance_test.dart | 3 ++- pkgs/c_compiler/test/tool/tool_resolver_test.dart | 6 +++++- 5 files changed, 11 insertions(+), 12 deletions(-) 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/test/cbuilder/compiler_resolver_test.dart b/pkgs/c_compiler/test/cbuilder/compiler_resolver_test.dart index 9ea2a0917c..9a48ba0375 100644 --- a/pkgs/c_compiler/test/cbuilder/compiler_resolver_test.dart +++ b/pkgs/c_compiler/test/cbuilder/compiler_resolver_test.dart @@ -2,8 +2,9 @@ // 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/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/tool/tool_error.dart'; import 'package:native_assets_cli/native_assets_cli.dart'; import 'package:test/test.dart'; 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 b8e18f515e..7d287b9dfd 100644 --- a/pkgs/c_compiler/test/tool/tool_resolver_test.dart +++ b/pkgs/c_compiler/test/tool/tool_resolver_test.dart @@ -4,8 +4,12 @@ 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/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'; From 678445e4a4fd349aea278950198c1b362a9e2c3e Mon Sep 17 00:00:00 2001 From: Daco Harkes Date: Thu, 20 Apr 2023 11:40:07 +0200 Subject: [PATCH 2/7] Rename `Packaging` to `LinkMode` --- .../c_compiler/lib/src/cbuilder/cbuilder.dart | 10 ++-- .../cbuilder/cbuilder_cross_android_test.dart | 12 ++--- .../cbuilder/cbuilder_cross_ios_test.dart | 12 ++--- .../cbuilder_cross_linux_host_test.dart | 12 ++--- .../cbuilder_cross_macos_host_test.dart | 12 ++--- .../test/cbuilder/cbuilder_test.dart | 4 +- .../test/cbuilder/compiler_resolver_test.dart | 4 +- .../lib/native_assets_cli.dart | 4 +- .../lib/src/model/asset.dart | 26 +++++----- .../lib/src/model/build_config.dart | 24 +++++----- .../model/{packaging.dart => link_mode.dart} | 14 +++--- ...ference.dart => link_mode_preference.dart} | 48 +++++++++---------- .../lib/src/model/target.dart | 8 ++-- .../test/example/native_add_test.dart | 2 +- .../test/model/asset_test.dart | 34 ++++++------- .../test/model/build_config_test.dart | 32 ++++++------- .../test/model/build_output_test.dart | 8 ++-- ...ackaging_test.dart => link_mode_test.dart} | 4 +- .../test/model/target_test.dart | 4 +- 19 files changed, 137 insertions(+), 137 deletions(-) rename pkgs/native_assets_cli/lib/src/model/{packaging.dart => link_mode.dart} (56%) rename pkgs/native_assets_cli/lib/src/model/{packaging_preference.dart => link_mode_preference.dart} (60%) rename pkgs/native_assets_cli/test/model/{packaging_test.dart => link_mode_test.dart} (81%) diff --git a/pkgs/c_compiler/lib/src/cbuilder/cbuilder.dart b/pkgs/c_compiler/lib/src/cbuilder/cbuilder.dart index fb5e72bf1d..a779cb9d4d 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.linkMode.preferredLinkMode.first; 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 = [ @@ -91,11 +91,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, @@ -105,7 +105,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/test/cbuilder/cbuilder_cross_android_test.dart b/pkgs/c_compiler/test/cbuilder/cbuilder_cross_android_test.dart index 27ebf9163a..5a162b537f 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, + linkMode: 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..da8e64fd14 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, + linkMode: 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..b88374c258 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, + linkMode: 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..6ff886ecfa 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, + linkMode: 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_test.dart b/pkgs/c_compiler/test/cbuilder/cbuilder_test.dart index fffadb32f9..2137b295b2 100644 --- a/pkgs/c_compiler/test/cbuilder/cbuilder_test.dart +++ b/pkgs/c_compiler/test/cbuilder/cbuilder_test.dart @@ -26,7 +26,7 @@ void main() { outDir: tempUri, packageRoot: tempUri, target: Target.current, - packaging: PackagingPreference.dynamic, // Ignored by executables. + linkMode: LinkModePreference.dynamic, // Ignored by executables. cc: cc, ); final buildOutput = BuildOutput(); @@ -62,7 +62,7 @@ void main() { outDir: tempUri, packageRoot: tempUri, target: Target.current, - packaging: PackagingPreference.dynamic, + linkMode: LinkModePreference.dynamic, cc: cc, ); final buildOutput = BuildOutput(); diff --git a/pkgs/c_compiler/test/cbuilder/compiler_resolver_test.dart b/pkgs/c_compiler/test/cbuilder/compiler_resolver_test.dart index 9a48ba0375..d2ee285388 100644 --- a/pkgs/c_compiler/test/cbuilder/compiler_resolver_test.dart +++ b/pkgs/c_compiler/test/cbuilder/compiler_resolver_test.dart @@ -30,7 +30,7 @@ void main() { outDir: tempUri, packageRoot: tempUri, target: Target.current, - packaging: PackagingPreference.dynamic, + linkMode: LinkModePreference.dynamic, ar: ar, cc: cc, ld: ld, @@ -50,7 +50,7 @@ void main() { outDir: tempUri, packageRoot: tempUri, target: Target.windowsX64, - packaging: PackagingPreference.dynamic, + linkMode: LinkModePreference.dynamic, ); final resolver = CompilerResolver( buildConfig: buildConfig, 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 b343cb9262..e2b36a46e4 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,9 +47,9 @@ class BuildConfig { Uri? get ar => _ar; late final Uri? _ar; - /// Preferred packaging method for library. - PackagingPreference get packaging => _packaging; - late final PackagingPreference _packaging; + /// Preferred linkMode method for library. + LinkModePreference get linkMode => _linkMode; + late final LinkModePreference _linkMode; /// Metadata from direct dependencies. /// @@ -73,7 +73,7 @@ class BuildConfig { Uri? ar, Uri? cc, Uri? ld, - required PackagingPreference packaging, + required LinkModePreference linkMode, Map? dependencyMetadata, }) { final nonValidated = BuildConfig._() @@ -84,7 +84,7 @@ class BuildConfig { .._ar = ar .._cc = cc .._ld = ld - .._packaging = packaging + .._linkMode = linkMode .._dependencyMetadata = dependencyMetadata; final parsedConfigFile = nonValidated.toYaml(); final config = Config(fileParsed: parsedConfigFile); @@ -171,10 +171,10 @@ class BuildConfig { (config) => _ar = config.optionalPath(arConfigKey, mustExist: true), (config) => _cc = config.optionalPath(ccConfigKey, mustExist: true), (config) => _ld = config.optionalPath(ldConfigKey, mustExist: true), - (config) => _packaging = PackagingPreference.fromString( + (config) => _linkMode = LinkModePreference.fromString( config.string( - PackagingPreference.configKey, - validValues: PackagingPreference.values.map((e) => '$e'), + LinkModePreference.configKey, + validValues: LinkModePreference.values.map((e) => '$e'), ), ), (config) => @@ -218,7 +218,7 @@ class BuildConfig { if (_ar != null) arConfigKey: _ar!.path, if (_cc != null) ccConfigKey: _cc!.path, if (_ld != null) ldConfigKey: _ld!.path, - PackagingPreference.configKey: _packaging.toString(), + LinkModePreference.configKey: _linkMode.toString(), if (_dependencyMetadata != null) dependencyMetadataConfigKey: { for (final entry in _dependencyMetadata!.entries) @@ -240,7 +240,7 @@ class BuildConfig { if (other._ar != _ar) return false; if (other._cc != _cc) return false; if (other._ld != _ld) return false; - if (other._packaging != _packaging) return false; + if (other._linkMode != _linkMode) return false; if (!DeepCollectionEquality() .equals(other._dependencyMetadata, _dependencyMetadata)) return false; return true; @@ -255,7 +255,7 @@ class BuildConfig { _ar, _cc, _ld, - _packaging, + _linkMode, 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 60% 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..6d818e212b 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,63 @@ // 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 List 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, + preferredLinkMode: [LinkMode.static], + potentialLinkMode: LinkMode.values, ); - static const all = PackagingPreference( + static const all = LinkModePreference( '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.values, + potentialLinkMode: LinkMode.values, ); static const values = [ @@ -70,7 +70,7 @@ Mostly useful for testing the build scripts.''', ]; /// The `package:config` key preferably used. - static const String configKey = 'packaging'; + static const String configKey = 'link_mode'; @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..e91bc1449c 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 { @@ -134,11 +134,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 b6c771ee9d..d50ab60d25 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.path}', '-Dpackage_root=${testPackageUri.path}', '-Dtarget=${Target.current}', - '-Dpackaging=dynamic', + '-Dlink_mode=dynamic', if (cc != null) '-Dcc=${cc!.toFilePath()}', ], workingDirectory: testPackageUri.path, diff --git a/pkgs/native_assets_cli/test/model/asset_test.dart b/pkgs/native_assets_cli/test/model/asset_test.dart index 3a12620185..87ccefb731 100644 --- a/pkgs/native_assets_cli/test/model/asset_test.dart +++ b/pkgs/native_assets_cli/test/model/asset_test.dart @@ -12,82 +12,82 @@ 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, ), Asset( name: 'foo3', path: AssetSystemPath(Uri(path: 'libfoo3.so')), 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(Uri(path: 'path/to/libbar.a')), target: Target.linuxArm64, - packaging: Packaging.static, + linkMode: LinkMode.static, ), Asset( name: 'bla', path: AssetAbsolutePath(Uri(path: 'path/with spaces/bla.dll')), target: Target.windowsX64, - packaging: Packaging.dynamic, + linkMode: LinkMode.dynamic, ), ]; const assetsYamlEncoding = '''- 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 target: android_x64 - name: foo3 - packaging: dynamic + link_mode: dynamic path: path_type: system uri: libfoo3.so 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: path/to/libbar.a target: linux_arm64 - name: bla - packaging: dynamic + link_mode: dynamic path: path_type: absolute uri: path/with spaces/bla.dll @@ -152,8 +152,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); }); @@ -170,7 +170,7 @@ native-assets: assets.first.toYamlString(), ''' name: foo -packaging: dynamic +link_mode: dynamic path: path_type: absolute uri: path/to/libfoo.so 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 d2ad3c90db..833844746b 100644 --- a/pkgs/native_assets_cli/test/model/build_config_test.dart +++ b/pkgs/native_assets_cli/test/model/build_config_test.dart @@ -37,14 +37,14 @@ void main() async { cc: fakeClang, ld: fakeLd, ar: fakeAr, - packaging: PackagingPreference.preferStatic, + linkMode: LinkModePreference.preferStatic, ); final config2 = BuildConfig( outDir: tempUri.resolve('out2/'), packageRoot: tempUri, target: Target.androidArm64, - packaging: PackagingPreference.preferStatic, + linkMode: LinkModePreference.preferStatic, ); expect(config1, equals(config1)); @@ -56,7 +56,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.linkMode, config2.linkMode); expect(config1.dependencyMetadata, config2.dependencyMetadata); }); @@ -65,14 +65,14 @@ void main() async { outDir: tempUri.resolve('out2/'), packageRoot: tempUri.resolve('packageRoot/'), target: Target.androidArm64, - packaging: PackagingPreference.preferStatic, + linkMode: LinkModePreference.preferStatic, ); final config = Config(fileParsed: { 'out_dir': tempUri.resolve('out2/').path, 'package_root': tempUri.resolve('packageRoot/').path, 'target': 'android_arm64', - 'packaging': 'prefer-static', + 'link_mode': 'prefer-static', }); final fromConfig = BuildConfig.fromConfig(config); @@ -87,7 +87,7 @@ void main() async { targetIOSSdk: IOSSdk.iPhoneOs, cc: fakeClang, ld: fakeLd, - packaging: PackagingPreference.preferStatic, + linkMode: LinkModePreference.preferStatic, ); final configFile = buildConfig1.toYaml(); @@ -101,7 +101,7 @@ void main() async { outDir: tempUri.resolve('out1/'), packageRoot: tempUri, target: Target.androidArm64, - packaging: PackagingPreference.preferStatic, + linkMode: LinkModePreference.preferStatic, dependencyMetadata: { 'bar': Metadata({ 'key': 'value', @@ -117,7 +117,7 @@ void main() async { outDir: tempUri.resolve('out1/'), packageRoot: tempUri, target: Target.androidArm64, - packaging: PackagingPreference.preferStatic, + linkMode: LinkModePreference.preferStatic, dependencyMetadata: { 'bar': Metadata({ 'key': 'value', @@ -142,7 +142,7 @@ void main() async { targetIOSSdk: IOSSdk.iPhoneOs, cc: fakeClang, ld: fakeLd, - packaging: PackagingPreference.preferStatic, + linkMode: LinkModePreference.preferStatic, // This map should be sorted on key for two layers. dependencyMetadata: { 'foo': Metadata({ @@ -165,9 +165,9 @@ dependency_metadata: - z - a ld: ${fakeLd.path} +link_mode: prefer-static out_dir: ${outDir.path} package_root: ${tempUri.path} -packaging: prefer-static target: ios_arm64 target_ios_sdk: iphoneos'''; expect(yamlString, equals(expectedYamlString)); @@ -189,7 +189,7 @@ target_ios_sdk: iphoneos'''; () => BuildConfig.fromConfig(Config(fileParsed: { 'package_root': tempUri.resolve('packageRoot/').path, 'target': 'android_arm64', - 'packaging': 'prefer-static', + 'link_mode': 'prefer-static', })), throwsFormatException, ); @@ -198,7 +198,7 @@ target_ios_sdk: iphoneos'''; 'out_dir': tempUri.resolve('out2/').path, 'package_root': tempUri.resolve('packageRoot/').path, 'target': 'android_arm64', - 'packaging': 'prefer-static', + 'link_mode': 'prefer-static', 'dependency_metadata': { 'bar': {'key': 'value'}, 'foo': [], @@ -214,7 +214,7 @@ target_ios_sdk: iphoneos'''; 'out_dir': tempUri.resolve('out2/').path, 'package_root': tempUri.resolve('packageRoot/').path, 'target': [1, 2, 3, 4, 5], - 'packaging': 'prefer-static', + 'link_mode': 'prefer-static', })); } on FormatException catch (e) { expect(e.toString(), stringContainsInOrder(['Config.string'])); @@ -229,7 +229,7 @@ target_ios_sdk: iphoneos'''; targetIOSSdk: IOSSdk.iPhoneOs, cc: fakeClang, ld: fakeLd, - packaging: PackagingPreference.preferStatic, + linkMode: LinkModePreference.preferStatic, ); config.toString(); }); @@ -239,7 +239,7 @@ target_ios_sdk: iphoneos'''; outDir: tempUri.resolve('out2/'), packageRoot: tempUri, target: Target.androidArm64, - packaging: PackagingPreference.preferStatic, + linkMode: LinkModePreference.preferStatic, ); final configFileContents = buildConfig.toYamlString(); final configUri = tempUri.resolve('config.yaml'); @@ -257,7 +257,7 @@ target_ios_sdk: iphoneos'''; outDir: tempUri.resolve('out1/'), packageRoot: tempUri, target: Target.androidArm64, - packaging: PackagingPreference.preferStatic, + linkMode: LinkModePreference.preferStatic, dependencyMetadata: { 'bar': Metadata({ 'key': {'key2': 'value'}, 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..9f21ff33de 100644 --- a/pkgs/native_assets_cli/test/model/target_test.dart +++ b/pkgs/native_assets_cli/test/model/target_test.dart @@ -18,9 +18,9 @@ void main() { 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'); }); From a1196305f89b80bf46454e21e018112923ed8020 Mon Sep 17 00:00:00 2001 From: Daco Harkes Date: Thu, 20 Apr 2023 11:51:21 +0200 Subject: [PATCH 3/7] rename link_mode to link_mode_preference in build config --- .../c_compiler/lib/src/cbuilder/cbuilder.dart | 2 +- .../cbuilder/cbuilder_cross_android_test.dart | 2 +- .../cbuilder/cbuilder_cross_ios_test.dart | 2 +- .../cbuilder_cross_linux_host_test.dart | 2 +- .../cbuilder_cross_macos_host_test.dart | 2 +- .../test/cbuilder/cbuilder_test.dart | 5 +-- .../test/cbuilder/compiler_resolver_test.dart | 4 +-- .../lib/src/model/build_config.dart | 16 +++++----- .../lib/src/model/link_mode_preference.dart | 2 +- .../test/example/native_add_test.dart | 2 +- .../test/model/build_config_test.dart | 32 +++++++++---------- 11 files changed, 36 insertions(+), 35 deletions(-) diff --git a/pkgs/c_compiler/lib/src/cbuilder/cbuilder.dart b/pkgs/c_compiler/lib/src/cbuilder/cbuilder.dart index a779cb9d4d..05ca4a5196 100644 --- a/pkgs/c_compiler/lib/src/cbuilder/cbuilder.dart +++ b/pkgs/c_compiler/lib/src/cbuilder/cbuilder.dart @@ -74,7 +74,7 @@ class CBuilder implements Builder { final outDir = buildConfig.outDir; final packageRoot = buildConfig.packageRoot; await Directory.fromUri(outDir).create(recursive: true); - final linkMode = buildConfig.linkMode.preferredLinkMode.first; + final linkMode = buildConfig.linkModePreference.preferredLinkMode.first; final libUri = outDir.resolve(buildConfig.target.os.libraryFileName(name, linkMode)); final exeUri = 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 5a162b537f..967b98f638 100644 --- a/pkgs/c_compiler/test/cbuilder/cbuilder_cross_android_test.dart +++ b/pkgs/c_compiler/test/cbuilder/cbuilder_cross_android_test.dart @@ -45,7 +45,7 @@ void main() { outDir: tempUri, packageRoot: tempUri, target: target, - linkMode: linkMode == LinkMode.dynamic + linkModePreference: linkMode == LinkMode.dynamic ? LinkModePreference.dynamic : LinkModePreference.static, ); 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 da8e64fd14..7fb1e6a39e 100644 --- a/pkgs/c_compiler/test/cbuilder/cbuilder_cross_ios_test.dart +++ b/pkgs/c_compiler/test/cbuilder/cbuilder_cross_ios_test.dart @@ -42,7 +42,7 @@ void main() { outDir: tempUri, packageRoot: tempUri, target: target, - linkMode: linkMode == LinkMode.dynamic + linkModePreference: linkMode == LinkMode.dynamic ? LinkModePreference.dynamic : LinkModePreference.static, targetIOSSdk: targetIOSSdk, 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 b88374c258..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 @@ -46,7 +46,7 @@ void main() { outDir: tempUri, packageRoot: tempUri, target: target, - linkMode: linkMode == LinkMode.dynamic + linkModePreference: linkMode == LinkMode.dynamic ? LinkModePreference.dynamic : LinkModePreference.static, ); 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 6ff886ecfa..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 @@ -43,7 +43,7 @@ void main() { outDir: tempUri, packageRoot: tempUri, target: target, - linkMode: linkMode == LinkMode.dynamic + linkModePreference: linkMode == LinkMode.dynamic ? LinkModePreference.dynamic : LinkModePreference.static, ); diff --git a/pkgs/c_compiler/test/cbuilder/cbuilder_test.dart b/pkgs/c_compiler/test/cbuilder/cbuilder_test.dart index 2137b295b2..62ca36c32d 100644 --- a/pkgs/c_compiler/test/cbuilder/cbuilder_test.dart +++ b/pkgs/c_compiler/test/cbuilder/cbuilder_test.dart @@ -26,7 +26,8 @@ void main() { outDir: tempUri, packageRoot: tempUri, target: Target.current, - linkMode: LinkModePreference.dynamic, // Ignored by executables. + linkModePreference: + LinkModePreference.dynamic, // Ignored by executables. cc: cc, ); final buildOutput = BuildOutput(); @@ -62,7 +63,7 @@ void main() { outDir: tempUri, packageRoot: tempUri, target: Target.current, - linkMode: LinkModePreference.dynamic, + linkModePreference: LinkModePreference.dynamic, cc: cc, ); final buildOutput = BuildOutput(); diff --git a/pkgs/c_compiler/test/cbuilder/compiler_resolver_test.dart b/pkgs/c_compiler/test/cbuilder/compiler_resolver_test.dart index d2ee285388..fe1f21432e 100644 --- a/pkgs/c_compiler/test/cbuilder/compiler_resolver_test.dart +++ b/pkgs/c_compiler/test/cbuilder/compiler_resolver_test.dart @@ -30,7 +30,7 @@ void main() { outDir: tempUri, packageRoot: tempUri, target: Target.current, - linkMode: LinkModePreference.dynamic, + linkModePreference: LinkModePreference.dynamic, ar: ar, cc: cc, ld: ld, @@ -50,7 +50,7 @@ void main() { outDir: tempUri, packageRoot: tempUri, target: Target.windowsX64, - linkMode: LinkModePreference.dynamic, + linkModePreference: LinkModePreference.dynamic, ); final resolver = CompilerResolver( buildConfig: buildConfig, 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 e2b36a46e4..d3abfca998 100644 --- a/pkgs/native_assets_cli/lib/src/model/build_config.dart +++ b/pkgs/native_assets_cli/lib/src/model/build_config.dart @@ -48,8 +48,8 @@ class BuildConfig { late final Uri? _ar; /// Preferred linkMode method for library. - LinkModePreference get linkMode => _linkMode; - late final LinkModePreference _linkMode; + LinkModePreference get linkModePreference => _linkModePreference; + late final LinkModePreference _linkModePreference; /// Metadata from direct dependencies. /// @@ -73,7 +73,7 @@ class BuildConfig { Uri? ar, Uri? cc, Uri? ld, - required LinkModePreference linkMode, + required LinkModePreference linkModePreference, Map? dependencyMetadata, }) { final nonValidated = BuildConfig._() @@ -84,7 +84,7 @@ class BuildConfig { .._ar = ar .._cc = cc .._ld = ld - .._linkMode = linkMode + .._linkModePreference = linkModePreference .._dependencyMetadata = dependencyMetadata; final parsedConfigFile = nonValidated.toYaml(); final config = Config(fileParsed: parsedConfigFile); @@ -171,7 +171,7 @@ class BuildConfig { (config) => _ar = config.optionalPath(arConfigKey, mustExist: true), (config) => _cc = config.optionalPath(ccConfigKey, mustExist: true), (config) => _ld = config.optionalPath(ldConfigKey, mustExist: true), - (config) => _linkMode = LinkModePreference.fromString( + (config) => _linkModePreference = LinkModePreference.fromString( config.string( LinkModePreference.configKey, validValues: LinkModePreference.values.map((e) => '$e'), @@ -218,7 +218,7 @@ class BuildConfig { if (_ar != null) arConfigKey: _ar!.path, if (_cc != null) ccConfigKey: _cc!.path, if (_ld != null) ldConfigKey: _ld!.path, - LinkModePreference.configKey: _linkMode.toString(), + LinkModePreference.configKey: _linkModePreference.toString(), if (_dependencyMetadata != null) dependencyMetadataConfigKey: { for (final entry in _dependencyMetadata!.entries) @@ -240,7 +240,7 @@ class BuildConfig { if (other._ar != _ar) return false; if (other._cc != _cc) return false; if (other._ld != _ld) return false; - if (other._linkMode != _linkMode) return false; + if (other._linkModePreference != _linkModePreference) return false; if (!DeepCollectionEquality() .equals(other._dependencyMetadata, _dependencyMetadata)) return false; return true; @@ -255,7 +255,7 @@ class BuildConfig { _ar, _cc, _ld, - _linkMode, + _linkModePreference, DeepCollectionEquality().hash(_dependencyMetadata), ); diff --git a/pkgs/native_assets_cli/lib/src/model/link_mode_preference.dart b/pkgs/native_assets_cli/lib/src/model/link_mode_preference.dart index 6d818e212b..fd9a5bc015 100644 --- a/pkgs/native_assets_cli/lib/src/model/link_mode_preference.dart +++ b/pkgs/native_assets_cli/lib/src/model/link_mode_preference.dart @@ -70,7 +70,7 @@ Mostly useful for testing the build scripts.''', ]; /// The `package:config` key preferably used. - static const String configKey = 'link_mode'; + static const String configKey = 'link_mode_preference'; @override String toString() => 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 d50ab60d25..eb40b8191b 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.path}', '-Dpackage_root=${testPackageUri.path}', '-Dtarget=${Target.current}', - '-Dlink_mode=dynamic', + '-Dlink_mode_preference=dynamic', if (cc != null) '-Dcc=${cc!.toFilePath()}', ], workingDirectory: testPackageUri.path, 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 833844746b..3a86cc78b9 100644 --- a/pkgs/native_assets_cli/test/model/build_config_test.dart +++ b/pkgs/native_assets_cli/test/model/build_config_test.dart @@ -37,14 +37,14 @@ void main() async { cc: fakeClang, ld: fakeLd, ar: fakeAr, - linkMode: LinkModePreference.preferStatic, + linkModePreference: LinkModePreference.preferStatic, ); final config2 = BuildConfig( outDir: tempUri.resolve('out2/'), packageRoot: tempUri, target: Target.androidArm64, - linkMode: LinkModePreference.preferStatic, + linkModePreference: LinkModePreference.preferStatic, ); expect(config1, equals(config1)); @@ -56,7 +56,7 @@ void main() async { expect(config1.cc != config2.cc, true); expect(config1.ld != config2.ld, true); expect(config1.ar != config2.ar, true); - expect(config1.linkMode, config2.linkMode); + expect(config1.linkModePreference, config2.linkModePreference); expect(config1.dependencyMetadata, config2.dependencyMetadata); }); @@ -65,14 +65,14 @@ void main() async { outDir: tempUri.resolve('out2/'), packageRoot: tempUri.resolve('packageRoot/'), target: Target.androidArm64, - linkMode: LinkModePreference.preferStatic, + linkModePreference: LinkModePreference.preferStatic, ); final config = Config(fileParsed: { 'out_dir': tempUri.resolve('out2/').path, 'package_root': tempUri.resolve('packageRoot/').path, 'target': 'android_arm64', - 'link_mode': 'prefer-static', + 'link_mode_preference': 'prefer-static', }); final fromConfig = BuildConfig.fromConfig(config); @@ -87,7 +87,7 @@ void main() async { targetIOSSdk: IOSSdk.iPhoneOs, cc: fakeClang, ld: fakeLd, - linkMode: LinkModePreference.preferStatic, + linkModePreference: LinkModePreference.preferStatic, ); final configFile = buildConfig1.toYaml(); @@ -101,7 +101,7 @@ void main() async { outDir: tempUri.resolve('out1/'), packageRoot: tempUri, target: Target.androidArm64, - linkMode: LinkModePreference.preferStatic, + linkModePreference: LinkModePreference.preferStatic, dependencyMetadata: { 'bar': Metadata({ 'key': 'value', @@ -117,7 +117,7 @@ void main() async { outDir: tempUri.resolve('out1/'), packageRoot: tempUri, target: Target.androidArm64, - linkMode: LinkModePreference.preferStatic, + linkModePreference: LinkModePreference.preferStatic, dependencyMetadata: { 'bar': Metadata({ 'key': 'value', @@ -142,7 +142,7 @@ void main() async { targetIOSSdk: IOSSdk.iPhoneOs, cc: fakeClang, ld: fakeLd, - linkMode: LinkModePreference.preferStatic, + linkModePreference: LinkModePreference.preferStatic, // This map should be sorted on key for two layers. dependencyMetadata: { 'foo': Metadata({ @@ -165,7 +165,7 @@ dependency_metadata: - z - a ld: ${fakeLd.path} -link_mode: prefer-static +link_mode_preference: prefer-static out_dir: ${outDir.path} package_root: ${tempUri.path} target: ios_arm64 @@ -189,7 +189,7 @@ target_ios_sdk: iphoneos'''; () => BuildConfig.fromConfig(Config(fileParsed: { 'package_root': tempUri.resolve('packageRoot/').path, 'target': 'android_arm64', - 'link_mode': 'prefer-static', + 'link_mode_preference': 'prefer-static', })), throwsFormatException, ); @@ -198,7 +198,7 @@ target_ios_sdk: iphoneos'''; 'out_dir': tempUri.resolve('out2/').path, 'package_root': tempUri.resolve('packageRoot/').path, 'target': 'android_arm64', - 'link_mode': 'prefer-static', + 'link_mode_preference': 'prefer-static', 'dependency_metadata': { 'bar': {'key': 'value'}, 'foo': [], @@ -214,7 +214,7 @@ target_ios_sdk: iphoneos'''; 'out_dir': tempUri.resolve('out2/').path, 'package_root': tempUri.resolve('packageRoot/').path, 'target': [1, 2, 3, 4, 5], - 'link_mode': 'prefer-static', + 'link_mode_preference': 'prefer-static', })); } on FormatException catch (e) { expect(e.toString(), stringContainsInOrder(['Config.string'])); @@ -229,7 +229,7 @@ target_ios_sdk: iphoneos'''; targetIOSSdk: IOSSdk.iPhoneOs, cc: fakeClang, ld: fakeLd, - linkMode: LinkModePreference.preferStatic, + linkModePreference: LinkModePreference.preferStatic, ); config.toString(); }); @@ -239,7 +239,7 @@ target_ios_sdk: iphoneos'''; outDir: tempUri.resolve('out2/'), packageRoot: tempUri, target: Target.androidArm64, - linkMode: LinkModePreference.preferStatic, + linkModePreference: LinkModePreference.preferStatic, ); final configFileContents = buildConfig.toYamlString(); final configUri = tempUri.resolve('config.yaml'); @@ -257,7 +257,7 @@ target_ios_sdk: iphoneos'''; outDir: tempUri.resolve('out1/'), packageRoot: tempUri, target: Target.androidArm64, - linkMode: LinkModePreference.preferStatic, + linkModePreference: LinkModePreference.preferStatic, dependencyMetadata: { 'bar': Metadata({ 'key': {'key2': 'value'}, From 1f33fae788fb48d9f0784c31e18e40fcbcb9394c Mon Sep 17 00:00:00 2001 From: Daco Harkes Date: Thu, 20 Apr 2023 11:55:41 +0200 Subject: [PATCH 4/7] Remove unused code --- pkgs/native_assets_cli/test/model/target_test.dart | 5 ----- 1 file changed, 5 deletions(-) diff --git a/pkgs/native_assets_cli/test/model/target_test.dart b/pkgs/native_assets_cli/test/model/target_test.dart index 9f21ff33de..ce74672660 100644 --- a/pkgs/native_assets_cli/test/model/target_test.dart +++ b/pkgs/native_assets_cli/test/model/target_test.dart @@ -9,11 +9,6 @@ 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'); From 04db0c040f31755bd4054adc3249c734af074eb8 Mon Sep 17 00:00:00 2001 From: Daco Harkes Date: Thu, 20 Apr 2023 12:35:05 +0200 Subject: [PATCH 5/7] Actually save the file --- pkgs/native_assets_cli/lib/src/model/target.dart | 7 ------- 1 file changed, 7 deletions(-) diff --git a/pkgs/native_assets_cli/lib/src/model/target.dart b/pkgs/native_assets_cli/lib/src/model/target.dart index e91bc1449c..341e358cbe 100644 --- a/pkgs/native_assets_cli/lib/src/model/target.dart +++ b/pkgs/native_assets_cli/lib/src/model/target.dart @@ -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], From 83b937e6f464e436c98bd2e475018171dd5c01de Mon Sep 17 00:00:00 2001 From: Daco Harkes Date: Fri, 28 Apr 2023 12:27:23 +0000 Subject: [PATCH 6/7] refactor new test --- .../cbuilder_cross_windows_host_test.dart | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) 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])); }); }); } From 46bfa6807629df990f04c9ab0b1fb15f772eedf1 Mon Sep 17 00:00:00 2001 From: Daco Harkes Date: Fri, 28 Apr 2023 12:45:36 +0000 Subject: [PATCH 7/7] Remove `LinkModePreference.all` We don't support building both anymore. --- .../c_compiler/lib/src/cbuilder/cbuilder.dart | 2 +- .../lib/src/model/link_mode_preference.dart | 21 +++++++------------ 2 files changed, 9 insertions(+), 14 deletions(-) diff --git a/pkgs/c_compiler/lib/src/cbuilder/cbuilder.dart b/pkgs/c_compiler/lib/src/cbuilder/cbuilder.dart index 522d411081..2d98481bd7 100644 --- a/pkgs/c_compiler/lib/src/cbuilder/cbuilder.dart +++ b/pkgs/c_compiler/lib/src/cbuilder/cbuilder.dart @@ -74,7 +74,7 @@ class CBuilder implements Builder { final outDir = buildConfig.outDir; final packageRoot = buildConfig.packageRoot; await Directory.fromUri(outDir).create(recursive: true); - final linkMode = buildConfig.linkModePreference.preferredLinkMode.first; + final linkMode = buildConfig.linkModePreference.preferredLinkMode; final libUri = outDir.resolve(buildConfig.target.os.libraryFileName(name, linkMode)); final exeUri = diff --git a/pkgs/native_assets_cli/lib/src/model/link_mode_preference.dart b/pkgs/native_assets_cli/lib/src/model/link_mode_preference.dart index fd9a5bc015..89a72ce9df 100644 --- a/pkgs/native_assets_cli/lib/src/model/link_mode_preference.dart +++ b/pkgs/native_assets_cli/lib/src/model/link_mode_preference.dart @@ -7,7 +7,7 @@ import 'link_mode.dart'; class LinkModePreference { final String name; final String description; - final List preferredLinkMode; + final LinkMode preferredLinkMode; final List potentialLinkMode; const LinkModePreference( @@ -25,39 +25,35 @@ class LinkModePreference { '''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.''', - preferredLinkMode: [LinkMode.dynamic], + preferredLinkMode: LinkMode.dynamic, potentialLinkMode: [LinkMode.dynamic], ); + 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.''', - preferredLinkMode: [LinkMode.static], + preferredLinkMode: LinkMode.static, potentialLinkMode: [LinkMode.static], ); + static const preferDynamic = LinkModePreference( 'prefer-dynamic', '''Provide native assets as dynamic libraries, if possible. Otherwise, build native assets as static libraries.''', - preferredLinkMode: [LinkMode.dynamic], + preferredLinkMode: LinkMode.dynamic, potentialLinkMode: LinkMode.values, ); + 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.''', - preferredLinkMode: [LinkMode.static], - potentialLinkMode: LinkMode.values, - ); - static const all = LinkModePreference( - 'all', - '''Provide native assets as both dynamic and static libraries if supported. -Mostly useful for testing the build scripts.''', - preferredLinkMode: LinkMode.values, + preferredLinkMode: LinkMode.static, potentialLinkMode: LinkMode.values, ); @@ -66,7 +62,6 @@ Mostly useful for testing the build scripts.''', static, preferDynamic, preferStatic, - all, ]; /// The `package:config` key preferably used.