acd16c6aa7
This is an initial cut of a tool for automatically creating shims for C/C++ programs using the entry point annotations in Dart code. The tool has two required arguments: * the .dill file containing the kernel representation of the Dart code * the base path of the header and implementation files to create With a base path of 'dir/name', the header file is created as 'dir/name.h' and the implementation file is created as 'dir/name.cc'. In addition, 'dir/name.h' is used as a basis for creating a #ifndef/#define/#endif header guard around the header contents. The created shims are specific to a single package, either * a user-specified package, provided via '-p'/'--package', or * the package of the main method If the user does not specify a package and there is no main method in the .dill file, the tool fails. Each shim takes the following arguments in order when applicable: * the isolate in which to perform the requested operation, * the instantiated type of the generic class (for invoking, setting, or getting constructors, static methods, and static fields) * the instance (for invoking, getting, or setting instance methods and fields) * the type arguments (for retrieving nullable or non-nullable instantiated types of a generic class) * the arguments (for invoking, setting, or getting constructors, methods, and fields) The generated shims: * cache the package library, types for non-generic classes, and types for generic classes instantiated with default type arguments. The cached persistent handles are cleared if any of the methods are called with a different isolate from the one used to populate the cache. * automatically handle conversions between C int64_t <=> Dart int and C double <=> Dart double. By default, shims are not created for allocation or initializing uninitialized instances. To create such shims, use the '-u' command line argument. Currently, shims are not created for methods that take optional or named arguments. To report an error if a shim cannot be created for any entry points, use the '-e' command line argument. TEST=tests/standalone/embedder_samples_test Change-Id: Ibdf3b52d900ba98038528178485f295c5868ac9d Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/410500 Reviewed-by: Ivan Inozemtsev <iinozemtsev@google.com> Commit-Queue: Tess Strickland <sstrickl@google.com>
48 lines
1.4 KiB
C
48 lines
1.4 KiB
C
// Copyright (c) 2025, 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.
|
|
//
|
|
// Generated with:
|
|
// dart pkg/vm/tools/generate_entry_point_shims.dart \
|
|
// out/ReleaseX64/gen/samples/embedder/timer_aot.dart.dill \
|
|
// samples/embedder/timer
|
|
|
|
#ifndef SAMPLES_EMBEDDER_TIMER_H
|
|
#define SAMPLES_EMBEDDER_TIMER_H
|
|
|
|
#include "include/dart_engine.h"
|
|
|
|
#ifdef __cplusplus
|
|
#define PACKAGE_EXTERN_C extern "C"
|
|
#else
|
|
#define PACKAGE_EXTERN_C extern
|
|
#endif
|
|
|
|
#if defined(__CYGWIN__)
|
|
#error Tool chain and platform not supported.
|
|
#elif defined(_WIN32)
|
|
#define PACKAGE_EXPORT PACKAGE_EXTERN_C __declspec(dllexport)
|
|
#else
|
|
#if __GNUC__ >= 4
|
|
#define PACKAGE_EXPORT \
|
|
PACKAGE_EXTERN_C __attribute__((visibility("default"))) __attribute((used))
|
|
#else
|
|
#error Tool chain not supported.
|
|
#endif
|
|
#endif
|
|
|
|
// startTimer
|
|
PACKAGE_EXPORT void Call_startTimer(Dart_Isolate dart_isolate,
|
|
int64_t v_millis);
|
|
// stopTimer
|
|
PACKAGE_EXPORT void Call_stopTimer(Dart_Isolate dart_isolate);
|
|
// resetTimer
|
|
PACKAGE_EXPORT void Call_resetTimer(Dart_Isolate dart_isolate);
|
|
// ticks
|
|
PACKAGE_EXPORT int64_t Get_ticks(Dart_Isolate dart_isolate);
|
|
|
|
#undef PACKAGE_EXPORT
|
|
#undef PACKAGE_EXTERN_C
|
|
|
|
#endif // SAMPLES_EMBEDDER_TIMER_H
|