/* KLayout Layout Viewer Copyright (C) 2006-2017 Matthias Koefferlein This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef HDR_layNativePlugin #define HDR_layNativePlugin #include "layCommon.h" /** * @brief A struct to hold the data of the plugin * * Use it like this: * * @code * static NativePlugin plugin_desc = { * 0, // (void (*)()) pointer to autorun function or 0 if not present * 0, // (void (*)()) pointer to early autorun function or 0 if not present * "1.0", // (const char *) version information - should be given at least * 0 // (const char *) description or 0/empty if no description is given * }; * DECLARE_NATIVE_PLUGIN (plugin_desc); * @endcode */ struct NativePlugin { void (*autorun) (); void (*autorun_early) (); const char *version; const char *description; }; /** * @brief A typedef for the initialization function a plugin is supposed to expose. */ typedef void (*klp_init_func_t) (void (**autorun) (), void (**autorun_early) (), const char **version, const char **description); # if defined _WIN32 || defined __CYGWIN__ # define KLP_PUBLIC __declspec(dllexport) # else # if __GNUC__ >= 4 # define KLP_PUBLIC __attribute__ ((visibility ("default"))) # else # define KLP_PUBLIC # endif # endif #define DECLARE_NATIVE_PLUGIN(desc) \ extern "C" { \ KLP_PUBLIC void klp_init (void (**autorun) (), void (**autorun_early) (), const char **version, const char **description) { \ *autorun = desc.autorun; \ *autorun_early = desc.autorun_early; \ *version = desc.version; \ *description = desc.description; \ } \ } /** * @brief Some (opaque) types for representing some gsi classes in the native API */ struct klp_class_t { }; struct klp_method_t { }; /** * @brief The gsi API functions wrapped for the native API */ extern "C" { LAY_PUBLIC const klp_class_t *klp_class_by_name (const char *name); LAY_PUBLIC void *klp_create (const klp_class_t *cls); LAY_PUBLIC void klp_destroy (const klp_class_t *cls, void *obj); LAY_PUBLIC void *klp_clone (const klp_class_t *cls, const void *source); LAY_PUBLIC void klp_assign (const klp_class_t *cls, void *target, const void *source); LAY_PUBLIC void klp_require_api_version (const char *version); } #endif