klayout/src/lay/layNativePlugin.h

98 lines
2.9 KiB
C

/*
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