From f9b4593d11a4fe98ae8d670a9231b07c2af7cd22 Mon Sep 17 00:00:00 2001 From: Saran Tunyasuvunakool Date: Mon, 3 Oct 2022 10:39:59 -0700 Subject: [PATCH] Add macro for dynamic library plugin initializer definition. PiperOrigin-RevId: 478544478 Change-Id: Idc899eef25261f2cb0b8317a84989cea2d8c2243 --- include/mujoco/mjplugin.h | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/include/mujoco/mjplugin.h b/include/mujoco/mjplugin.h index be303364..b5c68383 100644 --- a/include/mujoco/mjplugin.h +++ b/include/mujoco/mjplugin.h @@ -58,4 +58,31 @@ struct mjpPlugin_ { }; typedef struct mjpPlugin_ mjpPlugin; +#if defined(__has_attribute) + +#if __has_attribute(constructor) +#define mjPLUGIN_DYNAMIC_LIBRARY_INIT \ + __attribute__((constructor)) static void _mjplugin_init(void) +#endif + +#elif defined(_MSC_VER) + +#ifndef mjDLLMAIN +#define mjDLLMAIN DllMain +#endif + +// NOLINTBEGIN(runtime/int) +#define mjPLUGIN_DYNAMIC_LIBRARY_INIT \ + static void _mjplugin_dllmain(void); \ + static int __stdcall mjDLLMAIN(void* hinst, unsigned long reason, void* reserved) { \ + if (reason == 1) { \ + _mjplugin_dllmain(); \ + } \ + return 1; \ + } \ + static void _mjplugin_dllmain(void) +// NOLINTEND(runtime/int) + +#endif // defined(_MSC_VER) + #endif // MUJOCO_INCLUDE_MJPLUGIN_H_