py: Always give noop defines when MICROPY_ROM_TEXT_COMPRESSION disabled.
This commit provides a typedef for mp_rom_error_text_t, and a macro define for MP_COMPRESSED_ROM_TEXT, when MICROPY_ROM_TEXT_COMPRESSION is disabled. This simplifies the configuration (it no longer has a special case for MICROPY_ENABLE_DYNRUNTIME) and makes it work for other cases that don't use compression (eg examples/embedding). This commit also ensures MICROPY_ROM_TEXT_COMPRESSION is defined during qstr processing.
This commit is contained in:
parent
5f0661b4fe
commit
2725a79192
20
py/misc.h
20
py/misc.h
@ -259,26 +259,21 @@ typedef union _mp_float_union_t {
|
|||||||
|
|
||||||
/** ROM string compression *************/
|
/** ROM string compression *************/
|
||||||
|
|
||||||
|
#if MICROPY_ROM_TEXT_COMPRESSION
|
||||||
|
|
||||||
#ifdef NO_QSTR
|
#ifdef NO_QSTR
|
||||||
|
|
||||||
// QSTR extraction sets NO_QSTR.
|
// Compression enabled but doing QSTR extraction.
|
||||||
// So leave MP_COMPRESSED_ROM_TEXT in place for makeqstrdefs.py / makecompresseddata.py to find them.
|
// So leave MP_COMPRESSED_ROM_TEXT in place for makeqstrdefs.py / makecompresseddata.py to find them.
|
||||||
|
|
||||||
// However, dynamic native modules also set NO_QSTR, so provide a dummy implementation.
|
|
||||||
#if MICROPY_ENABLE_DYNRUNTIME
|
|
||||||
typedef const char *mp_rom_error_text_t;
|
|
||||||
#define MP_COMPRESSED_ROM_TEXT(x) x
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
#if MICROPY_ROM_TEXT_COMPRESSION
|
// Compression enabled and doing a regular build.
|
||||||
|
// Map MP_COMPRESSED_ROM_TEXT to the compressed strings.
|
||||||
|
|
||||||
// Force usage of the MP_ERROR_TEXT macro by requiring an opaque type.
|
// Force usage of the MP_ERROR_TEXT macro by requiring an opaque type.
|
||||||
typedef struct {} *mp_rom_error_text_t;
|
typedef struct {} *mp_rom_error_text_t;
|
||||||
|
|
||||||
// Regular build -- map MP_COMPRESSED_ROM_TEXT to the compressed strings.
|
|
||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
inline __attribute__((always_inline)) const char *MP_COMPRESSED_ROM_TEXT(const char *msg) {
|
inline __attribute__((always_inline)) const char *MP_COMPRESSED_ROM_TEXT(const char *msg) {
|
||||||
@ -297,16 +292,17 @@ inline __attribute__((always_inline)) const char *MP_COMPRESSED_ROM_TEXT(const c
|
|||||||
return msg;
|
return msg;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
// Compression not enabled, just make it a no-op.
|
// Compression not enabled, just make it a no-op.
|
||||||
|
|
||||||
typedef const char *mp_rom_error_text_t;
|
typedef const char *mp_rom_error_text_t;
|
||||||
#define MP_COMPRESSED_ROM_TEXT(x) x
|
#define MP_COMPRESSED_ROM_TEXT(x) x
|
||||||
|
|
||||||
#endif // MICROPY_ROM_TEXT_COMPRESSION
|
#endif // MICROPY_ROM_TEXT_COMPRESSION
|
||||||
|
|
||||||
#endif // NO_QSTR
|
|
||||||
|
|
||||||
// Might add more types of compressed text in the future.
|
// Might add more types of compressed text in the future.
|
||||||
// For now, forward directly to MP_COMPRESSED_ROM_TEXT.
|
// For now, forward directly to MP_COMPRESSED_ROM_TEXT.
|
||||||
#define MP_ERROR_TEXT(x) (mp_rom_error_text_t)MP_COMPRESSED_ROM_TEXT(x)
|
#define MP_ERROR_TEXT(x) (mp_rom_error_text_t)MP_COMPRESSED_ROM_TEXT(x)
|
||||||
|
@ -7,20 +7,19 @@ endif
|
|||||||
# Extra deps that need to happen before object compilation.
|
# Extra deps that need to happen before object compilation.
|
||||||
OBJ_EXTRA_ORDER_DEPS =
|
OBJ_EXTRA_ORDER_DEPS =
|
||||||
|
|
||||||
|
ifeq ($(MICROPY_ROM_TEXT_COMPRESSION),1)
|
||||||
|
# If compression is enabled, trigger the build of compressed.data.h...
|
||||||
|
OBJ_EXTRA_ORDER_DEPS += $(HEADER_BUILD)/compressed.data.h
|
||||||
|
# ...and enable the MP_COMPRESSED_ROM_TEXT macro (used by MP_ERROR_TEXT).
|
||||||
|
CFLAGS += -DMICROPY_ROM_TEXT_COMPRESSION=1
|
||||||
|
endif
|
||||||
|
|
||||||
# QSTR generation uses the same CFLAGS, with these modifications.
|
# QSTR generation uses the same CFLAGS, with these modifications.
|
||||||
# Note: := to force evalulation immediately.
|
# Note: := to force evalulation immediately.
|
||||||
QSTR_GEN_CFLAGS := $(CFLAGS)
|
QSTR_GEN_CFLAGS := $(CFLAGS)
|
||||||
QSTR_GEN_CFLAGS += -DNO_QSTR
|
QSTR_GEN_CFLAGS += -DNO_QSTR
|
||||||
QSTR_GEN_CFLAGS += -I$(BUILD)/tmp
|
QSTR_GEN_CFLAGS += -I$(BUILD)/tmp
|
||||||
|
|
||||||
ifeq ($(MICROPY_ROM_TEXT_COMPRESSION),1)
|
|
||||||
# If compression is enabled, trigger the build of compressed.data.h...
|
|
||||||
OBJ_EXTRA_ORDER_DEPS += $(HEADER_BUILD)/compressed.data.h
|
|
||||||
# ...and enable the MP_COMPRESSED_ROM_TEXT macro (used by MP_ERROR_TEXT).
|
|
||||||
# Note, this doesn't get added to the QSTR_GEN_CFLAGS.
|
|
||||||
CFLAGS += -DMICROPY_ROM_TEXT_COMPRESSION=1
|
|
||||||
endif
|
|
||||||
|
|
||||||
# This file expects that OBJ contains a list of all of the object files.
|
# This file expects that OBJ contains a list of all of the object files.
|
||||||
# The directory portion of each object file is used to locate the source
|
# The directory portion of each object file is used to locate the source
|
||||||
# and should not contain any ..'s but rather be relative to the top of the
|
# and should not contain any ..'s but rather be relative to the top of the
|
||||||
|
@ -38,8 +38,9 @@
|
|||||||
#include "py/gc.h"
|
#include "py/gc.h"
|
||||||
#include "py/mperrno.h"
|
#include "py/mperrno.h"
|
||||||
|
|
||||||
// Extract the MP_MAX_UNCOMPRESSED_TEXT_LEN macro from "genhdr/compressed.data.h"
|
#if MICROPY_ROM_TEXT_COMPRESSION && !defined(NO_QSTR)
|
||||||
#if MICROPY_ROM_TEXT_COMPRESSION
|
// Extract the MP_MAX_UNCOMPRESSED_TEXT_LEN macro from "genhdr/compressed.data.h".
|
||||||
|
// Only need this if compression enabled and in a regular build (i.e. not during QSTR extraction).
|
||||||
#define MP_MATCH_COMPRESSED(...) // Ignore
|
#define MP_MATCH_COMPRESSED(...) // Ignore
|
||||||
#define MP_COMPRESSED_DATA(...) // Ignore
|
#define MP_COMPRESSED_DATA(...) // Ignore
|
||||||
#include "genhdr/compressed.data.h"
|
#include "genhdr/compressed.data.h"
|
||||||
|
Loading…
Reference in New Issue
Block a user