summaryrefslogtreecommitdiff
path: root/tools/gen-cmodules.py
diff options
context:
space:
mode:
authorAyke van Laethem <aykevanlaethem@gmail.com>2018-06-14 15:57:29 +0200
committerDamien George <damien.p.george@gmail.com>2019-03-08 22:49:00 +1100
commit2e516074daee76fb3e0710a893a0f40532bb3252 (patch)
treed871d641c10aff22e3d80ad4711310c4b7be4b31 /tools/gen-cmodules.py
parentcf22f4793cb04e8e63a0d11f479a69c9be6c93ba (diff)
py: Implement a module system for external, user C modules.
This system makes it a lot easier to include external libraries as static, native modules in MicroPython. Simply pass USER_C_MODULES (like FROZEN_MPY_DIR) as a make parameter.
Diffstat (limited to 'tools/gen-cmodules.py')
-rwxr-xr-xtools/gen-cmodules.py28
1 files changed, 28 insertions, 0 deletions
diff --git a/tools/gen-cmodules.py b/tools/gen-cmodules.py
new file mode 100755
index 000000000..524e3c03d
--- /dev/null
+++ b/tools/gen-cmodules.py
@@ -0,0 +1,28 @@
+#!/usr/bin/env python
+
+# Generate genhdr/cmodules.h for inclusion in py/objmodule.c.
+
+from __future__ import print_function
+
+import sys
+import os
+from glob import glob
+
+def update_modules(path):
+ modules = []
+ for module in sorted(os.listdir(path)):
+ if not os.path.isfile('%s/%s/micropython.mk' % (path, module)):
+ continue # not a module
+ modules.append(module)
+
+ # Print header file for all external modules.
+ print('// Automatically generated by genmodules.py.\n')
+ for module in modules:
+ print('extern const struct _mp_obj_module_t %s_user_cmodule;' % module)
+ print('\n#define MICROPY_EXTRA_BUILTIN_MODULES \\')
+ for module in modules:
+ print(' { MP_ROM_QSTR(MP_QSTR_%s), MP_ROM_PTR(&%s_user_cmodule) }, \\' % (module, module))
+ print()
+
+if __name__ == '__main__':
+ update_modules(sys.argv[1])