mirror of https://github.com/KLayout/klayout.git
98 lines
2.9 KiB
C
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
|
|
|