summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorDamien George <damien.p.george@gmail.com>2019-11-05 11:42:59 +1100
committerDamien George <damien.p.george@gmail.com>2019-12-12 20:15:28 +1100
commit16e591e412ec4be511180910f6f293fee01ad615 (patch)
tree1e5209850920d4a21c92ab549c57e313d1de51a1
parent83f9fb169e5d9b9304e06237a747a30d3ea53458 (diff)
downloadmicropython-16e591e412ec4be511180910f6f293fee01ad615.tar.gz
micropython-16e591e412ec4be511180910f6f293fee01ad615.zip
examples/natmod: Add uzlib example.
-rw-r--r--examples/natmod/uzlib/Makefile13
-rw-r--r--examples/natmod/uzlib/uzlib.c36
2 files changed, 49 insertions, 0 deletions
diff --git a/examples/natmod/uzlib/Makefile b/examples/natmod/uzlib/Makefile
new file mode 100644
index 0000000000..8761caf2dd
--- /dev/null
+++ b/examples/natmod/uzlib/Makefile
@@ -0,0 +1,13 @@
+# Location of top-level MicroPython directory
+MPY_DIR = ../../..
+
+# Name of module (different to built-in uzlib so it can coexist)
+MOD = uzlib_$(ARCH)
+
+# Source files (.c or .py)
+SRC = uzlib.c
+
+# Architecture to build for (x86, x64, armv7m, xtensa, xtensawin)
+ARCH = x64
+
+include $(MPY_DIR)/py/dynruntime.mk
diff --git a/examples/natmod/uzlib/uzlib.c b/examples/natmod/uzlib/uzlib.c
new file mode 100644
index 0000000000..4873171e5e
--- /dev/null
+++ b/examples/natmod/uzlib/uzlib.c
@@ -0,0 +1,36 @@
+#define MICROPY_ENABLE_DYNRUNTIME (1)
+#define MICROPY_PY_UZLIB (1)
+
+#include "py/dynruntime.h"
+
+#if !defined(__linux__)
+void *memset(void *s, int c, size_t n) {
+ return mp_fun_table.memset_(s, c, n);
+}
+#endif
+
+mp_obj_type_t decompio_type;
+
+#include "extmod/moduzlib.c"
+
+mp_map_elem_t decompio_locals_dict_table[3];
+STATIC MP_DEFINE_CONST_DICT(decompio_locals_dict, decompio_locals_dict_table);
+
+mp_obj_t mpy_init(mp_obj_fun_bc_t *self, size_t n_args, size_t n_kw, mp_obj_t *args) {
+ MP_DYNRUNTIME_INIT_ENTRY
+
+ decompio_type.base.type = mp_fun_table.type_type;
+ decompio_type.name = MP_QSTR_DecompIO;
+ decompio_type.make_new = decompio_make_new;
+ decompio_type.protocol = &decompio_stream_p;
+ decompio_locals_dict_table[0] = (mp_map_elem_t){ MP_OBJ_NEW_QSTR(MP_QSTR_read), MP_OBJ_FROM_PTR(&mp_stream_read_obj) };
+ decompio_locals_dict_table[1] = (mp_map_elem_t){ MP_OBJ_NEW_QSTR(MP_QSTR_readinto), MP_OBJ_FROM_PTR(&mp_stream_readinto_obj) };
+ decompio_locals_dict_table[2] = (mp_map_elem_t){ MP_OBJ_NEW_QSTR(MP_QSTR_readline), MP_OBJ_FROM_PTR(&mp_stream_unbuffered_readline_obj) };
+ decompio_type.locals_dict = (void*)&decompio_locals_dict;
+
+ mp_store_global(MP_QSTR___name__, MP_OBJ_NEW_QSTR(MP_QSTR_uzlib));
+ mp_store_global(MP_QSTR_decompress, MP_OBJ_FROM_PTR(&mod_uzlib_decompress_obj));
+ mp_store_global(MP_QSTR_DecompIO, MP_OBJ_FROM_PTR(&decompio_type));
+
+ MP_DYNRUNTIME_INIT_EXIT
+}