diff --git a/mlir/include/mlir/ExecutionEngine/AsyncRuntime.h b/mlir/include/mlir/ExecutionEngine/AsyncRuntime.h --- a/mlir/include/mlir/ExecutionEngine/AsyncRuntime.h +++ b/mlir/include/mlir/ExecutionEngine/AsyncRuntime.h @@ -22,6 +22,21 @@ #define MLIR_ASYNCRUNTIME_DEFINE_FUNCTIONS #endif // mlir_async_runtime_EXPORTS +#ifdef _WIN32 +#ifndef MLIR_ASYNCRUNTIME_EXPORT +#ifdef mlir_async_runtime_EXPORTS +// We are building this library +#define MLIR_ASYNCRUNTIME_EXPORT __declspec(dllexport) +#else +// We are using this library +#define MLIR_ASYNCRUNTIME_EXPORT __declspec(dllimport) +#endif // mlir_async_runtime_EXPORTS +#endif // MLIR_ASYNCRUNTIME_EXPORT +#else +// Non-windows: use visibility attributes. +#define MLIR_ASYNCRUNTIME_EXPORT __attribute__((visibility("default"))) +#endif // _WIN32 + namespace mlir { namespace runtime { @@ -52,86 +67,104 @@ using RefCountedObjPtr = void *; // Adds references to reference counted runtime object. -extern "C" void mlirAsyncRuntimeAddRef(RefCountedObjPtr, int64_t); +extern "C" MLIR_ASYNCRUNTIME_EXPORT void + mlirAsyncRuntimeAddRef(RefCountedObjPtr, int64_t); // Drops references from reference counted runtime object. -extern "C" void mlirAsyncRuntimeDropRef(RefCountedObjPtr, int64_t); +extern "C" MLIR_ASYNCRUNTIME_EXPORT void + mlirAsyncRuntimeDropRef(RefCountedObjPtr, int64_t); // Create a new `async.token` in not-ready state. -extern "C" AsyncToken *mlirAsyncRuntimeCreateToken(); +extern "C" MLIR_ASYNCRUNTIME_EXPORT AsyncToken *mlirAsyncRuntimeCreateToken(); // Create a new `async.value` in not-ready state. Size parameter specifies the // number of bytes that will be allocated for the async value storage. Storage // is owned by the `async.value` and deallocated when the async value is // destructed (reference count drops to zero). -extern "C" AsyncValue *mlirAsyncRuntimeCreateValue(int64_t); +extern "C" MLIR_ASYNCRUNTIME_EXPORT AsyncValue * + mlirAsyncRuntimeCreateValue(int64_t); // Create a new `async.group` in empty state. -extern "C" AsyncGroup *mlirAsyncRuntimeCreateGroup(int64_t size); +extern "C" MLIR_ASYNCRUNTIME_EXPORT AsyncGroup * +mlirAsyncRuntimeCreateGroup(int64_t size); -extern "C" int64_t mlirAsyncRuntimeAddTokenToGroup(AsyncToken *, AsyncGroup *); +extern "C" MLIR_ASYNCRUNTIME_EXPORT int64_t +mlirAsyncRuntimeAddTokenToGroup(AsyncToken *, AsyncGroup *); // Switches `async.token` to ready state and runs all awaiters. -extern "C" void mlirAsyncRuntimeEmplaceToken(AsyncToken *); +extern "C" MLIR_ASYNCRUNTIME_EXPORT void +mlirAsyncRuntimeEmplaceToken(AsyncToken *); // Switches `async.value` to ready state and runs all awaiters. -extern "C" void mlirAsyncRuntimeEmplaceValue(AsyncValue *); +extern "C" MLIR_ASYNCRUNTIME_EXPORT void +mlirAsyncRuntimeEmplaceValue(AsyncValue *); // Switches `async.token` to error state and runs all awaiters. -extern "C" void mlirAsyncRuntimeSetTokenError(AsyncToken *); +extern "C" MLIR_ASYNCRUNTIME_EXPORT void +mlirAsyncRuntimeSetTokenError(AsyncToken *); // Switches `async.value` to error state and runs all awaiters. -extern "C" void mlirAsyncRuntimeSetValueError(AsyncValue *); +extern "C" MLIR_ASYNCRUNTIME_EXPORT void +mlirAsyncRuntimeSetValueError(AsyncValue *); // Returns true if token is in the error state. -extern "C" bool mlirAsyncRuntimeIsTokenError(AsyncToken *); +extern "C" MLIR_ASYNCRUNTIME_EXPORT bool +mlirAsyncRuntimeIsTokenError(AsyncToken *); // Returns true if value is in the error state. -extern "C" bool mlirAsyncRuntimeIsValueError(AsyncValue *); +extern "C" MLIR_ASYNCRUNTIME_EXPORT bool +mlirAsyncRuntimeIsValueError(AsyncValue *); // Returns true if group is in the error state (any of the tokens or values // added to the group are in the error state). -extern "C" bool mlirAsyncRuntimeIsGroupError(AsyncGroup *); +extern "C" MLIR_ASYNCRUNTIME_EXPORT bool +mlirAsyncRuntimeIsGroupError(AsyncGroup *); // Blocks the caller thread until the token becomes ready. -extern "C" void mlirAsyncRuntimeAwaitToken(AsyncToken *); +extern "C" MLIR_ASYNCRUNTIME_EXPORT void +mlirAsyncRuntimeAwaitToken(AsyncToken *); // Blocks the caller thread until the value becomes ready. -extern "C" void mlirAsyncRuntimeAwaitValue(AsyncValue *); +extern "C" MLIR_ASYNCRUNTIME_EXPORT void +mlirAsyncRuntimeAwaitValue(AsyncValue *); // Blocks the caller thread until the elements in the group become ready. -extern "C" void mlirAsyncRuntimeAwaitAllInGroup(AsyncGroup *); +extern "C" MLIR_ASYNCRUNTIME_EXPORT void +mlirAsyncRuntimeAwaitAllInGroup(AsyncGroup *); // Returns a pointer to the storage owned by the async value. -extern "C" ValueStorage mlirAsyncRuntimeGetValueStorage(AsyncValue *); +extern "C" MLIR_ASYNCRUNTIME_EXPORT ValueStorage +mlirAsyncRuntimeGetValueStorage(AsyncValue *); // Executes the task (coro handle + resume function) in one of the threads // managed by the runtime. -extern "C" void mlirAsyncRuntimeExecute(CoroHandle, CoroResume); +extern "C" MLIR_ASYNCRUNTIME_EXPORT void mlirAsyncRuntimeExecute(CoroHandle, + CoroResume); // Executes the task (coro handle + resume function) in one of the threads // managed by the runtime after the token becomes ready. -extern "C" void mlirAsyncRuntimeAwaitTokenAndExecute(AsyncToken *, CoroHandle, - CoroResume); +extern "C" MLIR_ASYNCRUNTIME_EXPORT void +mlirAsyncRuntimeAwaitTokenAndExecute(AsyncToken *, CoroHandle, CoroResume); // Executes the task (coro handle + resume function) in one of the threads // managed by the runtime after the value becomes ready. -extern "C" void mlirAsyncRuntimeAwaitValueAndExecute(AsyncValue *, CoroHandle, - CoroResume); +extern "C" MLIR_ASYNCRUNTIME_EXPORT void +mlirAsyncRuntimeAwaitValueAndExecute(AsyncValue *, CoroHandle, CoroResume); // Executes the task (coro handle + resume function) in one of the threads // managed by the runtime after the all members of the group become ready. -extern "C" void +extern "C" MLIR_ASYNCRUNTIME_EXPORT void mlirAsyncRuntimeAwaitAllInGroupAndExecute(AsyncGroup *, CoroHandle, CoroResume); // Returns the current number of available worker threads in the threadpool. -extern "C" int64_t mlirAsyncRuntimGetNumWorkerThreads(); +extern "C" MLIR_ASYNCRUNTIME_EXPORT int64_t +mlirAsyncRuntimGetNumWorkerThreads(); //===----------------------------------------------------------------------===// // Small async runtime support library for testing. //===----------------------------------------------------------------------===// -extern "C" void mlirAsyncRuntimePrintCurrentThreadId(); +extern "C" MLIR_ASYNCRUNTIME_EXPORT void mlirAsyncRuntimePrintCurrentThreadId(); } // namespace runtime } // namespace mlir