[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Minios-devel] [UNIKRAFT/LIBMICROPYTHON PATCH 5/7] Add header files
Reviewed-by: Vlad-Andrei Badoiu <vlad_andrei.badoiu@xxxxxxxxxxxxxxx> On 08.10.2019 11:04, Felipe Huici wrote: > Add header files, including mpconfigport.h, Micropython's config file. > > Signed-off-by: Felipe Huici <felipe.huici@xxxxxxxxx> > --- > include/modlwip.h | 111 ++++++++++++++ > include/mpconfigport.h | 320 +++++++++++++++++++++++++++++++++++++++++ > 2 files changed, 431 insertions(+) > create mode 100644 include/modlwip.h > create mode 100644 include/mpconfigport.h > > diff --git a/include/modlwip.h b/include/modlwip.h > new file mode 100644 > index 0000000..f754686 > --- /dev/null > +++ b/include/modlwip.h > @@ -0,0 +1,111 @@ > +/* > + * This file is part of the Micro Python project, http://micropython.org/ > + * > + * The MIT License (MIT) > + * > + * Copyright (c) 2013, 2014 Damien P. George > + * Copyright (c) 2015 Galen Hazelwood > + * > + * Permission is hereby granted, free of charge, to any person obtaining a > copy > + * of this software and associated documentation files (the "Software"), to > deal > + * in the Software without restriction, including without limitation the > rights > + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell > + * copies of the Software, and to permit persons to whom the Software is > + * furnished to do so, subject to the following conditions: > + * > + * The above copyright notice and this permission notice shall be included in > + * all copies or substantial portions of the Software. > + * > + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR > + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, > + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL > THE > + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER > + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING > FROM, > + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN > + * THE SOFTWARE. > + */ > + > +#include <string.h> > +#include <errno.h> > +#include <stdio.h> > + > +#include "py/nlr.h" > +#include "py/objlist.h" > +#include "py/runtime.h" > +#include "py/stream.h" > +#include "py/mphal.h" > + > +#include "netutils.h" > + > +#include "lwip/init.h" > +#include "lwip/timers.h" > +#include "lwip/tcp.h" > +#include "lwip/udp.h" > +#include "lwip/dns.h" > +#include "lwip/tcp_impl.h" > +#include "lwip/netif.h" > +#include "lwip/inet.h" > +#include "lwip/prot/ethernet.h" > +//#include <mini-os/lwip-net.h> > + > +typedef struct _lwip_socket_obj_t { > + mp_obj_base_t base; > + > + volatile union { > + struct tcp_pcb *tcp; > + struct udp_pcb *udp; > + } pcb; > + volatile union { > + struct pbuf *pbuf; > + struct tcp_pcb *connection; > + } incoming; > + mp_obj_t callback; > + byte peer[4]; > + mp_uint_t peer_port; > + mp_uint_t timeout; > + uint16_t leftover_count; > + > + uint8_t domain; > + uint8_t type; > + > + #define STATE_NEW 0 > + #define STATE_CONNECTING 1 > + #define STATE_CONNECTED 2 > + #define STATE_PEER_CLOSED 3 > + // Negative value is lwIP error > + int8_t state; > +} lwip_socket_obj_t; > + > +struct mcargs { > + struct eth_addr mac; > + struct netif netif; > + ip4_addr_t ip; > + ip4_addr_t mask; > + ip4_addr_t gw; > + #if LWIP_DNS > + ip4_addr_t dns0; > + ip4_addr_t dns1; > + #endif > +} args; > + > + > +void lwip_socket_print(const mp_print_t *print, mp_obj_t self_in, > mp_print_kind_t kind); > +mp_obj_t lwip_socket_close(mp_obj_t self_in); > +mp_obj_t lwip_socket_bind(mp_obj_t self_in, mp_obj_t addr_in); > +mp_obj_t lwip_socket_listen(mp_obj_t self_in, mp_obj_t backlog_in); > +mp_obj_t lwip_socket_accept(mp_obj_t self_in); > +mp_obj_t lwip_socket_connect(mp_obj_t self_in, mp_obj_t addr_in); > +void lwip_socket_check_connected(lwip_socket_obj_t *socket); > +mp_obj_t lwip_socket_send(mp_obj_t self_in, mp_obj_t buf_in); > +mp_obj_t lwip_socket_recv(mp_obj_t self_in, mp_obj_t len_in); > +mp_obj_t lwip_socket_sendto(mp_obj_t self_in, mp_obj_t data_in, mp_obj_t > addr_in); > +mp_obj_t lwip_socket_recvfrom(mp_obj_t self_in, mp_obj_t len_in); > +mp_obj_t lwip_socket_sendall(mp_obj_t self_in, mp_obj_t buf_in); > +mp_obj_t lwip_socket_settimeout(mp_obj_t self_in, mp_obj_t timeout_in); > +mp_obj_t lwip_socket_setblocking(mp_obj_t self_in, mp_obj_t flag_in); > +mp_obj_t lwip_socket_setsockopt(mp_uint_t n_args, const mp_obj_t *args); > +mp_obj_t lwip_socket_makefile(mp_uint_t n_args, const mp_obj_t *args); > +mp_uint_t lwip_socket_read(mp_obj_t self_in, void *buf, mp_uint_t size, int > *errcode); > +mp_uint_t lwip_socket_write(mp_obj_t self_in, const void *buf, mp_uint_t > size, int *errcode); > +mp_obj_t lwip_socket_make_new(const mp_obj_type_t *type, mp_uint_t n_args, > mp_uint_t n_kw, const mp_obj_t *args); > +mp_obj_t lwip_getaddrinfo(mp_obj_t host_in, mp_obj_t port_in); > diff --git a/include/mpconfigport.h b/include/mpconfigport.h > new file mode 100644 > index 0000000..050255d > --- /dev/null > +++ b/include/mpconfigport.h > @@ -0,0 +1,320 @@ > +/* > + * This file is part of the MicroPython project, http://micropython.org/ > + * > + * The MIT License (MIT) > + * > + * Copyright (c) 2013, 2014 Damien P. George > + * > + * Permission is hereby granted, free of charge, to any person obtaining a > copy > + * of this software and associated documentation files (the "Software"), to > deal > + * in the Software without restriction, including without limitation the > rights > + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell > + * copies of the Software, and to permit persons to whom the Software is > + * furnished to do so, subject to the following conditions: > + * > + * The above copyright notice and this permission notice shall be included in > + * all copies or substantial portions of the Software. > + * > + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR > + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, > + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL > THE > + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER > + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING > FROM, > + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN > + * THE SOFTWARE. > + */ > + > +// options to control how MicroPython is built > +#define MICROPY_HW_BOARD_NAME "unix" > +#define MICROPY_HW_MCU_NAME "unknown-cpu" > + > +#define MICROPY_ALLOC_PATH_MAX (PATH_MAX) > +#define MICROPY_PERSISTENT_CODE_LOAD (1) > +#if !defined(MICROPY_EMIT_X64) && defined(__x86_64__) > + #define MICROPY_EMIT_X64 (1) > +#endif > +#if !defined(MICROPY_EMIT_X86) && defined(__i386__) > + #define MICROPY_EMIT_X86 (1) > +#endif > +#if !defined(MICROPY_EMIT_THUMB) && defined(__thumb2__) > + #define MICROPY_EMIT_THUMB (1) > + #define MICROPY_MAKE_POINTER_CALLABLE(p) ((void*)((mp_uint_t)(p) | 1)) > +#endif > +// Some compilers define __thumb2__ and __arm__ at the same time, let > +// autodetected thumb2 emitter have priority. > +#if !defined(MICROPY_EMIT_ARM) && defined(__arm__) && !defined(__thumb2__) > + #define MICROPY_EMIT_ARM (1) > +#endif > +#define MICROPY_COMP_MODULE_CONST (1) > +#define MICROPY_COMP_TRIPLE_TUPLE_ASSIGN (1) > +#define MICROPY_COMP_RETURN_IF_EXPR (1) > +#define MICROPY_ENABLE_GC (0) > +#define MICROPY_ENABLE_FINALISER (0) > +#define MICROPY_STACK_CHECK (1) > +#define MICROPY_MALLOC_USES_ALLOCATED_SIZE (1) > +#define MICROPY_MEM_STATS (1) > +#define MICROPY_DEBUG_PRINTERS (1) > +// Printing debug to stderr may give tests which > +// check stdout a chance to pass, etc. > +#define MICROPY_DEBUG_PRINTER_DEST mp_stderr_print > +#define MICROPY_READER_POSIX (1) > +#define MICROPY_USE_READLINE_HISTORY (1) > +#define MICROPY_HELPER_REPL (1) > +#define MICROPY_REPL_EMACS_KEYS (1) > +#define MICROPY_REPL_AUTO_INDENT (1) > +#define MICROPY_HELPER_LEXER_UNIX (1) > +#define MICROPY_ENABLE_SOURCE_LINE (1) > +#define MICROPY_FLOAT_IMPL (MICROPY_FLOAT_IMPL_DOUBLE) > +#define MICROPY_LONGINT_IMPL (MICROPY_LONGINT_IMPL_MPZ) > +#define MICROPY_STREAMS_NON_BLOCK (1) > +#define MICROPY_STREAMS_POSIX_API (1) > +#define MICROPY_OPT_COMPUTED_GOTO (1) > +#ifndef MICROPY_OPT_CACHE_MAP_LOOKUP_IN_BYTECODE > +#define MICROPY_OPT_CACHE_MAP_LOOKUP_IN_BYTECODE (1) > +#endif > +#define MICROPY_CAN_OVERRIDE_BUILTINS (1) > +#define MICROPY_PY_FUNCTION_ATTRS (1) > +#define MICROPY_PY_DESCRIPTORS (1) > +#define MICROPY_PY_BUILTINS_STR_UNICODE (1) > +#define MICROPY_PY_BUILTINS_STR_CENTER (1) > +#define MICROPY_PY_BUILTINS_STR_PARTITION (1) > +#define MICROPY_PY_BUILTINS_STR_SPLITLINES (1) > +#define MICROPY_PY_BUILTINS_MEMORYVIEW (1) > +#define MICROPY_PY_BUILTINS_FROZENSET (1) > +#define MICROPY_PY_BUILTINS_COMPILE (1) > +#define MICROPY_PY_BUILTINS_NOTIMPLEMENTED (1) > +#define MICROPY_PY_BUILTINS_INPUT (1) > +#define MICROPY_PY_BUILTINS_POW3 (1) > +#define MICROPY_PY_MICROPYTHON_MEM_INFO (1) > +#define MICROPY_PY_ALL_SPECIAL_METHODS (1) > +#define MICROPY_PY_ARRAY_SLICE_ASSIGN (1) > +#define MICROPY_PY_BUILTINS_SLICE_ATTRS (1) > +#define MICROPY_PY_SYS_EXIT (1) > +#if defined(__APPLE__) && defined(__MACH__) > + #define MICROPY_PY_SYS_PLATFORM "darwin" > +#else > + #define MICROPY_PY_SYS_PLATFORM "linux" > +#endif > +#define MICROPY_PY_SYS_MAXSIZE (1) > +#define MICROPY_PY_SYS_STDFILES (1) > +#define MICROPY_PY_SYS_EXC_INFO (1) > +#define MICROPY_PY_COLLECTIONS_ORDEREDDICT (1) > +#ifndef MICROPY_PY_MATH_SPECIAL_FUNCTIONS > +#define MICROPY_PY_MATH_SPECIAL_FUNCTIONS (1) > +#endif > +#define MICROPY_PY_CMATH (1) > +#define MICROPY_PY_IO_FILEIO (1) > +#define MICROPY_PY_IO_RESOURCE_STREAM (1) > +#define MICROPY_PY_GC_COLLECT_RETVAL (1) > +#define MICROPY_MODULE_FROZEN_STR (1) > + > +#define MICROPY_STACKLESS (0) > +#define MICROPY_STACKLESS_STRICT (0) > + > +#define MICROPY_PY_OS_STATVFS (1) > +#define MICROPY_PY_UTIME (1) > +#define MICROPY_PY_UTIME_MP_HAL (1) > +#define MICROPY_PY_UERRNO (1) > +#define MICROPY_PY_UCTYPES (1) > +#define MICROPY_PY_UZLIB (1) > +#define MICROPY_PY_UJSON (1) > +#define MICROPY_PY_URE (1) > +#define MICROPY_PY_UHEAPQ (1) > +#define MICROPY_PY_UTIMEQ (1) > +#define MICROPY_PY_UHASHLIB (1) > +#if MICROPY_PY_USSL && MICROPY_SSL_AXTLS > +#define MICROPY_PY_UHASHLIB_SHA1 (1) > +#endif > +#define MICROPY_PY_UBINASCII (1) > +#define MICROPY_PY_UBINASCII_CRC32 (1) > +#define MICROPY_PY_URANDOM (1) > +#ifndef MICROPY_PY_USELECT_POSIX > +#define MICROPY_PY_USELECT_POSIX (1) > +#endif > +#define MICROPY_PY_WEBSOCKET (1) > +#define MICROPY_PY_MACHINE (1) > +#define MICROPY_PY_MACHINE_PULSE (1) > +#define MICROPY_MACHINE_MEM_GET_READ_ADDR mod_machine_mem_get_addr > +#define MICROPY_MACHINE_MEM_GET_WRITE_ADDR mod_machine_mem_get_addr > + > +#define MICROPY_FATFS_ENABLE_LFN (1) > +#define MICROPY_FATFS_RPATH (2) > +#define MICROPY_FATFS_MAX_SS (4096) > +#define MICROPY_FATFS_LFN_CODE_PAGE (437) /* 1=SFN/ANSI 437=LFN/U.S.(OEM) > */ > +#define MICROPY_VFS_FAT (0) > + > +// Define to MICROPY_ERROR_REPORTING_DETAILED to get function, etc. > +// names in exception messages (may require more RAM). > +#define MICROPY_ERROR_REPORTING (MICROPY_ERROR_REPORTING_DETAILED) > +#define MICROPY_WARNINGS (1) > +#define MICROPY_PY_STR_BYTES_CMP_WARN (1) > + > +// Define to 1 to use undertested inefficient GC helper implementation > +// (if more efficient arch-specific one is not available). > +#ifndef MICROPY_GCREGS_SETJMP > + #ifdef __mips__ > + #define MICROPY_GCREGS_SETJMP (1) > + #else > + #define MICROPY_GCREGS_SETJMP (0) > + #endif > +#endif > + > +#define MICROPY_ENABLE_EMERGENCY_EXCEPTION_BUF (1) > +#define MICROPY_EMERGENCY_EXCEPTION_BUF_SIZE (256) > +#define MICROPY_KBD_EXCEPTION (1) > +#define MICROPY_ASYNC_KBD_INTR (1) > + > +extern const struct _mp_obj_module_t mp_module_machine; > +extern const struct _mp_obj_module_t mp_module_os; > +extern const struct _mp_obj_module_t mp_module_uos_vfs; > +extern const struct _mp_obj_module_t mp_module_uselect; > +extern const struct _mp_obj_module_t mp_module_time; > +extern const struct _mp_obj_module_t mp_module_termios; > +extern const struct _mp_obj_module_t mp_module_socket; > +extern const struct _mp_obj_module_t mp_module_ffi; > +extern const struct _mp_obj_module_t mp_module_jni; > + > +#if MICROPY_PY_UOS_VFS > +#define MICROPY_PY_UOS_VFS_DEF { MP_ROM_QSTR(MP_QSTR_uos_vfs), > MP_ROM_PTR(&mp_module_uos_vfs) }, > +#else > +#define MICROPY_PY_UOS_VFS_DEF > +#endif > +#if MICROPY_PY_FFI > +#define MICROPY_PY_FFI_DEF { MP_ROM_QSTR(MP_QSTR_ffi), > MP_ROM_PTR(&mp_module_ffi) }, > +#else > +#define MICROPY_PY_FFI_DEF > +#endif > +#if MICROPY_PY_JNI > +#define MICROPY_PY_JNI_DEF { MP_ROM_QSTR(MP_QSTR_jni), > MP_ROM_PTR(&mp_module_jni) }, > +#else > +#define MICROPY_PY_JNI_DEF > +#endif > +#if MICROPY_PY_UTIME > +#define MICROPY_PY_UTIME_DEF { MP_ROM_QSTR(MP_QSTR_utime), > MP_ROM_PTR(&mp_module_time) }, > +#else > +#define MICROPY_PY_UTIME_DEF > +#endif > +#if MICROPY_PY_TERMIOS > +#define MICROPY_PY_TERMIOS_DEF { MP_ROM_QSTR(MP_QSTR_termios), > MP_ROM_PTR(&mp_module_termios) }, > +#else > +#define MICROPY_PY_TERMIOS_DEF > +#endif > +#if MICROPY_PY_SOCKET > +#define MICROPY_PY_SOCKET_DEF { MP_ROM_QSTR(MP_QSTR_usocket), > MP_ROM_PTR(&mp_module_socket) }, > +#else > +#define MICROPY_PY_SOCKET_DEF > +#endif > +#if MICROPY_PY_USELECT_POSIX > +#define MICROPY_PY_USELECT_DEF { MP_ROM_QSTR(MP_QSTR_uselect), > MP_ROM_PTR(&mp_module_uselect) }, > +#else > +#define MICROPY_PY_USELECT_DEF > +#endif > + > +#define MICROPY_PORT_BUILTIN_MODULES \ > + MICROPY_PY_FFI_DEF \ > + MICROPY_PY_JNI_DEF \ > + MICROPY_PY_UTIME_DEF \ > + MICROPY_PY_SOCKET_DEF \ > + { MP_ROM_QSTR(MP_QSTR_umachine), MP_ROM_PTR(&mp_module_machine) }, \ > + { MP_ROM_QSTR(MP_QSTR_uos), MP_ROM_PTR(&mp_module_os) }, \ > + MICROPY_PY_UOS_VFS_DEF \ > + MICROPY_PY_USELECT_DEF \ > + MICROPY_PY_TERMIOS_DEF \ > + > +// type definitions for the specific machine > + > +// For size_t and ssize_t > +#include <unistd.h> > + > +// assume that if we already defined the obj repr then we also defined types > +#ifndef MICROPY_OBJ_REPR > +#ifdef __LP64__ > +typedef long mp_int_t; // must be pointer size > +typedef unsigned long mp_uint_t; // must be pointer size > +#else > +// These are definitions for machines where sizeof(int) == sizeof(void*), > +// regardless of actual size. > +typedef int mp_int_t; // must be pointer size > +typedef unsigned int mp_uint_t; // must be pointer size > +#endif > +#endif > + > +// Cannot include <sys/types.h>, as it may lead to symbol name clashes > +#if _FILE_OFFSET_BITS == 64 && !defined(__LP64__) > +typedef long long mp_off_t; > +#else > +typedef long mp_off_t; > +#endif > + > +void mp_unix_alloc_exec(size_t min_size, void** ptr, size_t *size); > +void mp_unix_free_exec(void *ptr, size_t size); > +void mp_unix_mark_exec(void); > +#define MP_PLAT_ALLOC_EXEC(min_size, ptr, size) mp_unix_alloc_exec(min_size, > ptr, size) > +#define MP_PLAT_FREE_EXEC(ptr, size) mp_unix_free_exec(ptr, size) > +#ifndef MICROPY_FORCE_PLAT_ALLOC_EXEC > +// Use MP_PLAT_ALLOC_EXEC for any executable memory allocation, including > for FFI > +// (overriding libffi own implementation) > +#define MICROPY_FORCE_PLAT_ALLOC_EXEC (1) > +#endif > + > +#if MICROPY_PY_OS_DUPTERM > +#define MP_PLAT_PRINT_STRN(str, len) mp_hal_stdout_tx_strn_cooked(str, len) > +#else > +#define MP_PLAT_PRINT_STRN(str, len) do { ssize_t ret = write(1, str, len); > (void)ret; } while (0) > +#endif > + > +#ifdef __linux__ > +// Can access physical memory using /dev/mem > +#define MICROPY_PLAT_DEV_MEM (1) > +#endif > + > +// Assume that select() call, interrupted with a signal, and erroring > +// with EINTR, updates remaining timeout value. > +#define MICROPY_SELECT_REMAINING_TIME (1) > + > +#ifdef __ANDROID__ > +#include <android/api-level.h> > +#if __ANDROID_API__ < 4 > +// Bionic libc in Android 1.5 misses these 2 functions > +#define MP_NEED_LOG2 (1) > +#define nan(x) NAN > +#endif > +#endif > + > +#define MICROPY_PORT_BUILTINS \ > + { MP_ROM_QSTR(MP_QSTR_open), MP_ROM_PTR(&mp_builtin_open_obj) }, > + > +#define MP_STATE_PORT MP_STATE_VM > + > +#define MICROPY_PORT_ROOT_POINTERS \ > + const char *readline_hist[50]; \ > + void *mmap_region_head; \ > + > +// We need to provide a declaration/definition of alloca() > +// unless support for it is disabled. > +#if !defined(MICROPY_NO_ALLOCA) || MICROPY_NO_ALLOCA == 0 > +#ifdef __FreeBSD__ > +#include <stdlib.h> > +#else > +#include <alloca.h> > +#endif > +#endif > + > +// From "man readdir": "Under glibc, programs can check for the availability > +// of the fields [in struct dirent] not defined in POSIX.1 by testing whether > +// the macros [...], _DIRENT_HAVE_D_TYPE are defined." > +// Other libc's don't define it, but proactively assume that dirent->d_type > +// is available on a modern *nix system. > +#ifndef _DIRENT_HAVE_D_TYPE > +#define _DIRENT_HAVE_D_TYPE (1) > +#endif > +// This macro is not provided by glibc but we need it so ports that don't > have > +// dirent->d_ino can disable the use of this field. > +#ifndef _DIRENT_HAVE_D_INO > +#define _DIRENT_HAVE_D_INO (1) > +#endif > + > +#ifndef __APPLE__ > +// For debugging purposes, make printf() available to any source file. > +#include <stdio.h> > +#endif _______________________________________________ Minios-devel mailing list Minios-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/minios-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |