From 93509ac8c7ea7ac92b8b95453e7c5f13dcbc7099 Mon Sep 17 00:00:00 2001 From: Damien George Date: Fri, 27 Dec 2019 22:47:01 +1100 Subject: [PATCH] stm32: Add configuration to build in nanbox mode. Most stm32 boards can now be built in nan-boxing mode via: $ make NANBOX=1 Note that if float is enabled then it will be forced to double-precision. Also, native emitters will be disabled. --- ports/stm32/Makefile | 9 +++++++ ports/stm32/mpconfigport.h | 5 +++- ports/stm32/mpconfigport_nanbox.h | 43 +++++++++++++++++++++++++++++++ 3 files changed, 56 insertions(+), 1 deletion(-) create mode 100644 ports/stm32/mpconfigport_nanbox.h diff --git a/ports/stm32/Makefile b/ports/stm32/Makefile index c9fdc7b0d2..6a6242df53 100644 --- a/ports/stm32/Makefile +++ b/ports/stm32/Makefile @@ -95,6 +95,15 @@ CFLAGS += -I$(BOARD_DIR) CFLAGS += -DSTM32_HAL_H='' CFLAGS += -DMICROPY_HW_VTOR=$(TEXT0_ADDR) +# Configure for nan-boxing object model if requested +ifeq ($(NANBOX),1) +CFLAGS += -DMP_CONFIGFILE='"mpconfigport_nanbox.h"' +ifneq ($(MICROPY_FLOAT_IMPL),none) +MICROPY_FLOAT_IMPL = double +endif +endif + +# Configure floating point support ifeq ($(MICROPY_FLOAT_IMPL),double) CFLAGS += -DMICROPY_FLOAT_IMPL=MICROPY_FLOAT_IMPL_DOUBLE else diff --git a/ports/stm32/mpconfigport.h b/ports/stm32/mpconfigport.h index 4b5b0e054f..52cca0dca1 100644 --- a/ports/stm32/mpconfigport.h +++ b/ports/stm32/mpconfigport.h @@ -305,11 +305,14 @@ struct _mp_bluetooth_nimble_root_pointers_t; #define MP_SSIZE_MAX (0x7fffffff) +// Assume that if we already defined the obj repr then we also defined these items +#ifndef MICROPY_OBJ_REPR #define UINT_FMT "%u" #define INT_FMT "%d" - typedef int mp_int_t; // must be pointer size typedef unsigned int mp_uint_t; // must be pointer size +#endif + typedef long mp_off_t; #define MP_PLAT_PRINT_STRN(str, len) mp_hal_stdout_tx_strn_cooked(str, len) diff --git a/ports/stm32/mpconfigport_nanbox.h b/ports/stm32/mpconfigport_nanbox.h new file mode 100644 index 0000000000..f36d55aca9 --- /dev/null +++ b/ports/stm32/mpconfigport_nanbox.h @@ -0,0 +1,43 @@ +/* + * This file is part of the MicroPython project, http://micropython.org/ + * + * The MIT License (MIT) + * + * Copyright (c) 2019 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. + */ + +#include + +// Select nan-boxing object model +#define MICROPY_OBJ_REPR (MICROPY_OBJ_REPR_D) + +// Native emitters don't work with nan-boxing +#define MICROPY_EMIT_THUMB (0) +#define MICROPY_EMIT_INLINE_THUMB (0) + +// Types needed for nan-boxing +#define UINT_FMT "%llu" +#define INT_FMT "%lld" +typedef int64_t mp_int_t; +typedef uint64_t mp_uint_t; + +// Include base configuration file for rest of configuration +#include