7eac9f355e
This CL introduces dart_api_dl.h which exposes a subset of dart_api.h and dart_native_api.h for dynamic linking at runtime through the FFI. Dynamic linking is done through including dart_api_dl.cc in a shared library and passing NativeApi.initializeApiDLData to the init function. This CL also includes Native API versioning to deal with possible version skew between native api version against which native libraries are compiled and the version in the DartVM the code is run on. The subset of symbols in the CL includes handle related symbols, error related symbols, handle scope symbols, and native port sumbols. Design: http://go/dart-ffi-expose-dart-api Closes: https://github.com/dart-lang/sdk/issues/40607 Closes: https://github.com/dart-lang/sdk/issues/36858 Closes: https://github.com/dart-lang/sdk/issues/41319 Closes: https://github.com/flutter/flutter/issues/46887 Closes: https://github.com/flutter/flutter/issues/47061 Misc: Closes: https://github.com/dart-lang/sdk/issues/42260 Change-Id: I9e557808dbc99b341f23964cbddbb05f26d7a6c5 Cq-Include-Trybots: luci.dart.try:vm-ffi-android-debug-arm-try,vm-ffi-android-debug-arm64-try,app-kernel-linux-debug-x64-try,vm-kernel-linux-debug-ia32-try,vm-kernel-win-debug-x64-try,vm-kernel-win-debug-ia32-try,vm-kernel-precomp-linux-debug-x64-try,vm-dartkb-linux-release-x64-abi-try,vm-kernel-precomp-android-release-arm64-try,vm-kernel-asan-linux-release-x64-try,vm-kernel-msan-linux-release-x64-try,vm-kernel-precomp-msan-linux-release-x64-try,vm-kernel-linux-release-simarm-try,vm-kernel-linux-release-simarm64-try,vm-kernel-precomp-android-release-arm_x64-try,vm-kernel-precomp-obfuscate-linux-release-x64-try,dart-sdk-linux-try,analyzer-analysis-server-linux-try,analyzer-linux-release-try,front-end-linux-release-x64-try,vm-kernel-precomp-win-release-x64-try,vm-kernel-mac-debug-x64-try,vm-precomp-ffi-qemu-linux-release-arm-try,vm-kernel-nnbd-linux-debug-x64-try,analyzer-nnbd-linux-release-try,front-end-nnbd-linux-release-x64-try Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/145592 Commit-Queue: Daco Harkes <dacoharkes@google.com> Reviewed-by: Martin Kustermann <kustermann@google.com> Reviewed-by: Alexander Markov <alexmarkov@google.com>
68 lines
3.7 KiB
C
68 lines
3.7 KiB
C
/*
|
|
* Copyright (c) 2020, 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.
|
|
*/
|
|
|
|
#ifndef RUNTIME_INCLUDE_INTERNAL_DART_API_DL_IMPL_H_
|
|
#define RUNTIME_INCLUDE_INTERNAL_DART_API_DL_IMPL_H_
|
|
|
|
// dart_native_api.h symbols can be called on any thread.
|
|
#define DART_NATIVE_API_DL_SYMBOLS(F) \
|
|
/***** dart_native_api.h *****/ \
|
|
/* Dart_Port */ \
|
|
F(Dart_PostCObject) \
|
|
F(Dart_PostInteger) \
|
|
F(Dart_NewNativePort) \
|
|
F(Dart_CloseNativePort)
|
|
|
|
// dart_api.h symbols can only be called on Dart threads.
|
|
#define DART_API_DL_SYMBOLS(F) \
|
|
/***** dart_api.h *****/ \
|
|
/* Errors */ \
|
|
F(Dart_IsError) \
|
|
F(Dart_IsApiError) \
|
|
F(Dart_IsUnhandledExceptionError) \
|
|
F(Dart_IsCompilationError) \
|
|
F(Dart_IsFatalError) \
|
|
F(Dart_GetError) \
|
|
F(Dart_ErrorHasException) \
|
|
F(Dart_ErrorGetException) \
|
|
F(Dart_ErrorGetStackTrace) \
|
|
F(Dart_NewApiError) \
|
|
F(Dart_NewCompilationError) \
|
|
F(Dart_NewUnhandledExceptionError) \
|
|
F(Dart_PropagateError) \
|
|
/* Dart_Handle, Dart_PersistentHandle, Dart_WeakPersistentHandle */ \
|
|
F(Dart_NewPersistentHandle) \
|
|
F(Dart_SetPersistentHandle) \
|
|
F(Dart_HandleFromPersistent) \
|
|
F(Dart_DeletePersistentHandle) \
|
|
F(Dart_NewWeakPersistentHandle) \
|
|
F(Dart_HandleFromWeakPersistent) \
|
|
F(Dart_DeleteWeakPersistentHandle) \
|
|
/* Dart_Port */ \
|
|
F(Dart_Post) \
|
|
F(Dart_NewSendPort) \
|
|
F(Dart_SendPortGetId) \
|
|
/* Scopes */ \
|
|
F(Dart_EnterScope) \
|
|
F(Dart_ExitScope)
|
|
|
|
#define DART_API_ALL_DL_SYMBOLS(F) \
|
|
DART_NATIVE_API_DL_SYMBOLS(F) \
|
|
DART_API_DL_SYMBOLS(F)
|
|
|
|
struct DartApiEntry {
|
|
const char* name;
|
|
void (*function)();
|
|
};
|
|
|
|
struct DartApi {
|
|
const int major;
|
|
const int minor;
|
|
const DartApiEntry* const functions;
|
|
};
|
|
|
|
#endif /* RUNTIME_INCLUDE_INTERNAL_DART_API_DL_IMPL_H_ */ /* NOLINT */
|