dart-lang / native

Dart packages related to FFI and native assets bundling.
BSD 3-Clause "New" or "Revised" License
83 stars 27 forks source link

Add link.dart hook #827

Closed mosuem closed 3 weeks ago

mosuem commented 6 months ago

Support a hook/link.dart script, which executes after kernel compilation. The SDK changes to make this work are in https://dart-review.googlesource.com/c/sdk/+/338380.

The link script receives as input a list of assets produced by hook/build.dart scripts. In a hook/build.dart, users can specify if an asset should be sent to a link script, and give the name of the package containing that script. All assets destined for a particular link script are collected and given as input.

In https://github.com/dart-lang/native/pull/1117, the link scripts get as additional input tree shaking information collected during kernel compilation, to enable link scripts to remove or add assets based on usage of symbols in Dart code.


Contribution guidelines:
- See our [contributor guide](https://github.com/dart-lang/.github/blob/main/CONTRIBUTING.md) for general expectations for PRs. - Larger or significant changes should be discussed in an issue before creating a PR. - Contributions to our repos should follow the [Dart style guide](https://dart.dev/guides/language/effective-dart) and use `dart format`. - Most changes should add an entry to the changelog and may need to [rev the pubspec package version](https://github.com/dart-lang/sdk/wiki/External-Package-Maintenance#making-a-change). - Changes to packages require [corresponding tests](https://github.com/dart-lang/.github/blob/main/CONTRIBUTING.md#Testing). Note that many Dart repos have a weekly cadence for reviewing PRs - please allow for some latency before initial review feedback.
github-actions[bot] commented 4 months ago

PR Health

Breaking changes :heavy_check_mark:

Details | Package | Change | Current Version | New Version | Needed Version | Looking good? | | :--- | :--- | ---: | ---: | ---: | ---: | |native_assets_cli|Breaking|0.5.4|0.6.0-wip|0.6.0|:heavy_check_mark:|

Changelog Entry :heavy_check_mark:

Details | Package | Changed Files | | :--- | :--- | Changes to files need to be [accounted for](https://github.com/dart-lang/ecosystem/wiki/Changelog) in their respective changelogs.

Coverage :warning:

Details | File | Coverage | | :--- | :--- | |pkgs/native_assets_cli/example/build/local_asset/hook/build.dart| :broken_heart: Not covered | |pkgs/native_assets_cli/example/build/native_add_app/bin/native_add_app.dart| :broken_heart: Not covered | |pkgs/native_assets_cli/example/build/native_add_app/test/native_add_library_test.dart| :broken_heart: Not covered | |pkgs/native_assets_cli/example/build/native_add_library/hook/build.dart| :broken_heart: Not covered | |pkgs/native_assets_cli/example/build/native_add_library/lib/native_add_library.dart| :broken_heart: Not covered | |pkgs/native_assets_cli/example/build/native_add_library/test/native_add_library_test.dart| :broken_heart: Not covered | |pkgs/native_assets_cli/example/build/use_dart_api/hook/build.dart| :broken_heart: Not covered | |pkgs/native_assets_cli/example/build/use_dart_api/lib/src/use_dart_api_bindings_generated.dart| :broken_heart: Not covered | |pkgs/native_assets_cli/example/build/use_dart_api/lib/use_dart_api.dart| :broken_heart: Not covered | |pkgs/native_assets_cli/example/build/use_dart_api/test/use_dart_api_test.dart| :broken_heart: Not covered | |pkgs/native_assets_cli/example/link/app_with_asset_treeshaking/bin/app_with_asset_treeshaking.dart| :broken_heart: Not covered | |pkgs/native_assets_cli/example/link/app_with_asset_treeshaking/lib/app_with_asset_treeshaking.dart| :broken_heart: Not covered | |pkgs/native_assets_cli/example/link/package_with_assets/hook/build.dart| :broken_heart: Not covered | |pkgs/native_assets_cli/example/link/package_with_assets/hook/link.dart| :broken_heart: Not covered | |pkgs/native_assets_cli/example/link/package_with_assets/lib/package_with_assets.dart| :broken_heart: Not covered | |pkgs/native_assets_cli/lib/native_assets_cli.dart| :broken_heart: Not covered | |pkgs/native_assets_cli/lib/native_assets_cli_internal.dart| :broken_heart: Not covered | |pkgs/native_assets_cli/lib/src/api/build.dart| :green_heart: 100 % | |pkgs/native_assets_cli/lib/src/api/build_config.dart| :green_heart: 100 % | |pkgs/native_assets_cli/lib/src/api/build_output.dart| :green_heart: 100 % | |pkgs/native_assets_cli/lib/src/api/data_asset.dart| :green_heart: 100 % | |pkgs/native_assets_cli/lib/src/api/hook_config.dart| :broken_heart: Not covered | |pkgs/native_assets_cli/lib/src/api/link.dart| :broken_heart: 0 % :arrow_down: NaN % | |pkgs/native_assets_cli/lib/src/api/link_config.dart| :green_heart: 100 % | |pkgs/native_assets_cli/lib/src/api/link_output.dart| :broken_heart: 0 % :arrow_down: NaN % | |pkgs/native_assets_cli/lib/src/model/asset.dart| :green_heart: 100 % | |pkgs/native_assets_cli/lib/src/model/build_config.dart| :green_heart: 94 % | |pkgs/native_assets_cli/lib/src/model/data_asset.dart| :green_heart: 92 % | |pkgs/native_assets_cli/lib/src/model/dependencies.dart| :green_heart: 100 % | |pkgs/native_assets_cli/lib/src/model/hook.dart| :broken_heart: 0 % :arrow_down: NaN % | |pkgs/native_assets_cli/lib/src/model/hook_config.dart| :green_heart: 98 % | |pkgs/native_assets_cli/lib/src/model/hook_output.dart| :green_heart: 95 % | |pkgs/native_assets_cli/lib/src/model/link_config.dart| :green_heart: 88 % | |pkgs/native_assets_cli/lib/src/model/native_code_asset.dart| :green_heart: 99 % | |pkgs/native_assets_cli/lib/src/model/resource_identifiers.dart| :green_heart: 77 % | |pkgs/native_assets_cli/lib/src/utils/json.dart| :green_heart: 100 % | This check for [test coverage](https://github.com/dart-lang/ecosystem/wiki/Test-Coverage) is informational (issues shown here will not fail the PR). This check can be disabled by tagging the PR with `skip-coverage-check`.

License Headers :warning:

Details ``` // Copyright (c) 2024, the Dart project authors. Please see the AUTHORS file // 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. ``` | Files | | :--- | |pkgs/native_assets_cli/test/model/checksum_test.dart| All source files should start with a [license header](https://github.com/dart-lang/ecosystem/wiki/License-Header).
Unrelated files missing license headers | Files | | :--- | |pkgs/ffi/example/main.dart| |pkgs/ffigen/example/libclang-example/generated_bindings.dart| |pkgs/ffigen/example/shared_bindings/generate.dart| |pkgs/ffigen/example/shared_bindings/lib/generated/a_gen.dart| |pkgs/ffigen/example/shared_bindings/lib/generated/a_shared_b_gen.dart| |pkgs/ffigen/example/shared_bindings/lib/generated/base_gen.dart| |pkgs/ffigen/example/simple/generated_bindings.dart| |pkgs/ffigen/lib/src/config_provider/config_spec.dart| |pkgs/ffigen/lib/src/header_parser/clang_bindings/clang_bindings.dart| |pkgs/ffigen/test/collision_tests/expected_bindings/_expected_decl_decl_collision_bindings.dart| |pkgs/ffigen/test/collision_tests/expected_bindings/_expected_decl_symbol_address_collision_bindings.dart| |pkgs/ffigen/test/collision_tests/expected_bindings/_expected_decl_type_name_collision_bindings.dart| |pkgs/ffigen/test/collision_tests/expected_bindings/_expected_reserved_keyword_collision_bindings.dart| |pkgs/ffigen/test/header_parser_tests/expected_bindings/_expected_comment_markup_bindings.dart| |pkgs/ffigen/test/header_parser_tests/expected_bindings/_expected_dart_handle_bindings.dart| |pkgs/ffigen/test/header_parser_tests/expected_bindings/_expected_forward_decl_bindings.dart| |pkgs/ffigen/test/header_parser_tests/expected_bindings/_expected_functions_bindings.dart| |pkgs/ffigen/test/header_parser_tests/expected_bindings/_expected_imported_types_bindings.dart| |pkgs/ffigen/test/header_parser_tests/expected_bindings/_expected_native_func_typedef_bindings.dart| |pkgs/ffigen/test/header_parser_tests/expected_bindings/_expected_opaque_dependencies_bindings.dart| |pkgs/ffigen/test/header_parser_tests/expected_bindings/_expected_packed_structs_bindings.dart| |pkgs/ffigen/test/header_parser_tests/expected_bindings/_expected_regress_384_bindings.dart| |pkgs/ffigen/test/header_parser_tests/expected_bindings/_expected_struct_fptr_fields_bindings.dart| |pkgs/ffigen/test/header_parser_tests/expected_bindings/_expected_typedef_bindings.dart| |pkgs/ffigen/test/header_parser_tests/expected_bindings/_expected_unions_bindings.dart| |pkgs/ffigen/test/header_parser_tests/expected_bindings/_expected_varargs_bindings.dart| |pkgs/ffigen/test/large_integration_tests/_expected_cjson_bindings.dart| |pkgs/ffigen/test/large_integration_tests/_expected_libclang_bindings.dart| |pkgs/ffigen/test/large_integration_tests/_expected_sqlite_bindings.dart| |pkgs/ffigen/test/native_test/_expected_native_test_bindings.dart| |pkgs/jni/lib/src/lang/jcharacter.dart| |pkgs/jni/lib/src/third_party/generated_bindings.dart| |pkgs/jni/lib/src/third_party/global_env_extensions.dart| |pkgs/jni/lib/src/third_party/jni_bindings_generated.dart| |pkgs/jnigen/android_test_runner/lib/main.dart| |pkgs/jnigen/example/in_app_java/lib/android_utils.dart| |pkgs/jnigen/example/kotlin_plugin/example/lib/main.dart| |pkgs/jnigen/example/kotlin_plugin/lib/kotlin_bindings.dart| |pkgs/jnigen/example/kotlin_plugin/lib/kotlin_plugin.dart| |pkgs/jnigen/example/pdfbox_plugin/lib/pdfbox_plugin.dart| |pkgs/jnigen/example/pdfbox_plugin/lib/src/third_party/org/apache/pdfbox/pdmodel/PDDocument.dart| |pkgs/jnigen/example/pdfbox_plugin/lib/src/third_party/org/apache/pdfbox/pdmodel/PDDocumentInformation.dart| |pkgs/jnigen/example/pdfbox_plugin/lib/src/third_party/org/apache/pdfbox/pdmodel/_package.dart| |pkgs/jnigen/example/pdfbox_plugin/lib/src/third_party/org/apache/pdfbox/text/PDFTextStripper.dart| |pkgs/jnigen/example/pdfbox_plugin/lib/src/third_party/org/apache/pdfbox/text/_package.dart| |pkgs/jnigen/lib/src/bindings/descriptor.dart| |pkgs/jnigen/lib/src/elements/elements.g.dart| |pkgs/jnigen/test/jackson_core_test/third_party/bindings/com/fasterxml/jackson/core/_package.dart| |pkgs/jnigen/tool/command_runner.dart|
This check can be disabled by tagging the PR with `skip-license-check`.

Package publish validation :heavy_check_mark:

Details | Package | Version | Status | | :--- | ---: | :--- | | package:ffi | 2.1.2 | already published at pub.dev | | package:ffigen | 12.0.0-wip | WIP (no publish necessary) | | package:jni | 0.9.1-wip | WIP (no publish necessary) | | package:jnigen | 0.9.0 | already published at pub.dev | | package:native_assets_cli | 0.6.0-wip | WIP (no publish necessary) | | package:objective_c | 0.0.1-wip | WIP (no publish necessary) | | package:swiftgen | 0.0.1-wip | WIP (no publish necessary) | Documentation at https://github.com/dart-lang/ecosystem/wiki/Publishing-automation.
github-actions[bot] commented 4 months ago

Package publishing

Package Version Status Publish tag (post-merge)
package:native_assets_builder 0.4.0 ready to publish native_assets_builder-v0.4.0
package:native_assets_cli 0.5.0 ready to publish native_assets_cli-v0.5.0
package:ffi 2.1.2 already published at pub.dev
package:ffigen 12.0.0-wip WIP (no publish necessary)
package:jni 0.8.0-wip WIP (no publish necessary)
package:jnigen 0.8.0-wip WIP (no publish necessary)
package:native_toolchain_c 0.3.5-wip WIP (no publish necessary)

Documentation at https://github.com/dart-lang/ecosystem/wiki/Publishing-automation.

coveralls commented 2 months ago

Coverage Status

coverage: 90.88% (-0.4%) from 91.317% when pulling e3d9b0ee0316150c982d47d706cb0868523b30f7 on addLinkingScript into 95d226d290d4d5c583c4e45b04048442f244c656 on main.

dcharkes commented 3 weeks ago

TODO: Rename build_{runner/planner}.dart to {runner, planner}.dart

Can you update the PR description with a list of changes?