|
1 | 1 | #ifndef __MODULE_H__
|
2 | 2 | #define __MODULE_H__
|
3 | 3 |
|
4 |
| -#include "lrotable.h" |
5 | 4 | #include "sdkconfig.h"
|
| 5 | +#include "lrotable.h" |
6 | 6 |
|
7 | 7 | /* Registering a module within NodeMCU is really easy these days!
|
8 | 8 | *
|
|
33 | 33 | */
|
34 | 34 |
|
35 | 35 | #define MODULE_EXPAND_(x) x
|
36 |
| -#define MODULE_PASTE_(x, y) x##y |
37 |
| -#define MODULE_EXPAND_PASTE_(x, y) MODULE_PASTE_(x, y) |
| 36 | +#define MODULE_PASTE_(x,y) x##y |
| 37 | +#define MODULE_EXPAND_PASTE_(x,y) MODULE_PASTE_(x,y) |
38 | 38 |
|
39 | 39 | #ifdef LUA_CROSS_COMPILER
|
40 | 40 | #ifdef _MSC_VER
|
|
46 | 46 | #define __STRINGIFY(x) #x
|
47 | 47 | #define __TOSTRING(x) __STRINGIFY(x)
|
48 | 48 | #define __ROSECNAME(s) __TOSTRING(__TOTOK(s))
|
49 |
| -#define LOCK_IN_SECTION(s) __declspec(allocate(__ROSECNAME(s))) |
| 49 | +#define LOCK_IN_SECTION(s) __declspec ( allocate( __ROSECNAME(s) ) ) |
50 | 50 | #else
|
51 |
| -#define LOCK_IN_SECTION(s) __attribute__((used, unused, section(".rodata1." #s))) |
| 51 | +#define LOCK_IN_SECTION(s) __attribute__((used,unused,section(".rodata1." #s))) |
52 | 52 | #endif
|
53 | 53 | #else
|
54 |
| -#define LOCK_IN_SECTION(s) __attribute__((used, unused, section(".lua_" #s))) |
| 54 | +#define LOCK_IN_SECTION(s) __attribute__((used,unused,section(".lua_" #s))) |
55 | 55 | #endif
|
56 | 56 | /* For the ROM table, we name the variable according to ( | denotes concat):
|
57 | 57 | * cfgname | _module_selected | CONFIG_LUA_MODULE_##cfgname
|
|
63 | 63 | * letting the build system detect automatically (via nm) which modules need
|
64 | 64 | * to be linked in.
|
65 | 65 | */
|
66 |
| -#define NODEMCU_MODULE(cfgname, luaname, map, initfunc) \ |
67 |
| - const LOCK_IN_SECTION(libs) \ |
68 |
| - luaR_entry MODULE_PASTE_(lua_lib_, cfgname) = {luaname, LRO_FUNCVAL(initfunc)}; \ |
69 |
| - const LOCK_IN_SECTION(rotable) \ |
70 |
| - luaR_entry MODULE_EXPAND_PASTE_(cfgname, MODULE_EXPAND_PASTE_(_module_selected, MODULE_PASTE_(CONFIG_LUA_MODULE_, cfgname))) = {luaname, LRO_ROVAL(map##_map)} |
| 66 | +#define NODEMCU_MODULE(cfgname, luaname, map, initfunc) \ |
| 67 | + const LOCK_IN_SECTION(libs) \ |
| 68 | + luaR_entry MODULE_PASTE_(lua_lib_,cfgname) = { luaname, LRO_FUNCVAL(initfunc) }; \ |
| 69 | + const LOCK_IN_SECTION(rotable) \ |
| 70 | + luaR_entry MODULE_EXPAND_PASTE_(cfgname,MODULE_EXPAND_PASTE_(_module_selected,MODULE_PASTE_(CONFIG_LUA_MODULE_,cfgname))) \ |
| 71 | + = {luaname, LRO_ROVAL(map ## _map)} |
71 | 72 | #endif
|
72 | 73 |
|
| 74 | + |
| 75 | +// helper stringing macros |
73 | 76 | #define xstr(s) str(s)
|
74 | 77 | #define str(s) #s
|
75 | 78 |
|
| 79 | +// EXTMODNAME is injected by the generated component.mk |
76 | 80 | #ifdef EXTMODNAME
|
77 | 81 | #define MODNAME xstr(EXTMODNAME)
|
78 | 82 | #else
|
79 | 83 | #define MODNAME "module"
|
80 | 84 | #endif
|
81 | 85 |
|
| 86 | +// use NODEMCU_MODULE_METATABLE() to generate a unique metatable name for your objects: |
82 | 87 | #define NODEMCU_MODULE_METATABLE() MODULE_EXPAND_(MODNAME xstr(__COUNTER__))
|
83 | 88 |
|
| 89 | +// NODEMCU_MODULE_STD() defines the entry points for an external module: |
84 | 90 | #define NODEMCU_MODULE_STD() \
|
85 | 91 | static const LOCK_IN_SECTION(libs) \
|
86 | 92 | luaR_entry lua_lib_module = {MODNAME, LRO_FUNCVAL(module_init)}; \
|
|
0 commit comments