[vm/ffi] Expand `Abi`s This CL expands the ABIs in the FFI transform and VM from 3 groups to 18 individual ABIs in preparation of adding ABI-specific integer sizes and structs. This increases const lists with offsets in the kernel representation from 3 to 18 elements. We do not expect significant size increases or performance regressions from this. The constants are deduplicated in Dart and the optimizer should optimize indexed lookups in const lists away. However, landing this separately will enable us to verify that assumption. This also moves `Abi` to its own file and makes it an opaque class with a predefined set of instances so that we do not depend on its internals. That will enable us to keep `pkg/vm/lib/transformations/ffi/abi.dart` consistent with the `Abi` abstraction to be introduced in `dart:ffi` later for specifying ABI-specific integer sizes. Bug: https://github.com/dart-lang/sdk/issues/42563 Bug: https://github.com/dart-lang/sdk/issues/42816 List of ABIs decided based on what's currently used (as Dart SDK target platform, or Flutter target platform, or G3 target) and added windows_arm64 in anticipation of (https://github.com/flutter/flutter/issues/53120). Excluded are macos_ia32 (https://github.com/dart-lang/sdk/issues/39810) because we discontinued support; and windows_arm, fuchsia_arm, fuchsia_ia32, ios_ia32, and macos_arm because these are unlikely to be added. TEST=pkg/front_end/testcases/*.expect TEST=tests/ffi/* Change-Id: I437707c18d8667490c063272a5f8a33d846e6061 Cq-Include-Trybots: luci.dart.try:vm-kernel-linux-debug-x64-try,vm-ffi-android-debug-arm-try,vm-kernel-mac-debug-x64-try,vm-kernel-nnbd-linux-debug-x64-try,vm-kernel-linux-debug-ia32-try,vm-kernel-precomp-linux-debug-x64-try,vm-kernel-reload-linux-debug-x64-try,vm-kernel-reload-rollback-linux-debug-x64-try,vm-kernel-win-debug-x64-try,vm-kernel-win-debug-ia32-try,vm-ffi-android-debug-arm64c-try,vm-kernel-mac-release-arm64-try,vm-precomp-ffi-qemu-linux-release-arm-try,vm-kernel-precomp-android-release-arm64c-try,vm-kernel-precomp-android-release-arm_x64-try Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/217184 Commit-Queue: Daco Harkes <dacoharkes@google.com> Reviewed-by: Ryan Macnak <rmacnak@google.com> Reviewed-by: Clement Skau <cskau@google.com>
Dart is:
Optimized for UI: Develop with a programming language specialized around the needs of user interface creation.
Productive: Make changes iteratively: use hot reload to see the result instantly in your running app.
Fast on all platforms: Compile to ARM & x64 machine code for mobile, desktop, and backend. Or compile to JavaScript for the web.
Dart's flexible compiler technology lets you run Dart code in different ways, depending on your target platform and goals:
Dart Native: For programs targeting devices (mobile, desktop, server, and more), Dart Native includes both a Dart VM with JIT (just-in-time) compilation and an AOT (ahead-of-time) compiler for producing machine code.
Dart Web: For programs targeting the web, Dart Web includes both a development time compiler (dartdevc) and a production time compiler (dart2js).
Dart is free and open source.
See LICENSE and PATENT_GRANT.
Visit dart.dev to learn more about the language, tools, and to find codelabs.
Browse pub.dev for more packages and libraries contributed by the community and the Dart team.
Our API reference documentation is published at api.dart.dev, based on the stable release. (We also publish docs from our beta and dev channels, as well as from the primary development branch).
If you want to build Dart yourself, here is a guide to getting the source, preparing your machine to build the SDK, and building.
There are more documents on our wiki.
The easiest way to contribute to Dart is to file issues.
You can also contribute patches, as described in Contributing.