stm32/boards/make-pins.py: Don't generate qstrs.

Qstrs are picked up from the generated pin source files in the usual qstr
processing stage.

Similarly for the stm constant qstrs.

This work was funded through GitHub Sponsors.

Signed-off-by: Jim Mussared <jim.mussared@gmail.com>
This commit is contained in:
Jim Mussared 2023-08-03 15:21:32 +10:00 committed by Damien George
parent c3c7c602da
commit fc54d25a45
4 changed files with 17 additions and 80 deletions

View File

@ -25,12 +25,11 @@ include ../../py/mkenv.mk
-include mpconfigport.mk -include mpconfigport.mk
include $(BOARD_DIR)/mpconfigboard.mk include $(BOARD_DIR)/mpconfigboard.mk
# Files that are generated and needed before the QSTR build.
QSTR_GENERATED_HEADERS = $(GEN_PINS_QSTR) $(GEN_STMCONST_QSTR)
# qstr definitions (must come before including py.mk) # qstr definitions (must come before including py.mk)
QSTR_DEFS += qstrdefsport.h $(QSTR_GENERATED_HEADERS) QSTR_DEFS += qstrdefsport.h
QSTR_GLOBAL_DEPENDENCIES += mpconfigboard_common.h $(BOARD_DIR)/mpconfigboard.h $(QSTR_GENERATED_HEADERS)
# Files that are generated and needed before the QSTR build.
QSTR_GLOBAL_DEPENDENCIES += mpconfigboard_common.h $(BOARD_DIR)/mpconfigboard.h $(GEN_STMCONST_HDR)
# MicroPython feature configurations # MicroPython feature configurations
MICROPY_ROM_TEXT_COMPRESSION ?= 1 MICROPY_ROM_TEXT_COMPRESSION ?= 1
@ -71,7 +70,6 @@ BOARD_PINS = $(BOARD_DIR)/pins.csv
PREFIX_FILE = boards/stm32f4xx_prefix.c PREFIX_FILE = boards/stm32f4xx_prefix.c
GEN_PINS_SRC = $(BUILD)/pins_$(BOARD).c GEN_PINS_SRC = $(BUILD)/pins_$(BOARD).c
GEN_PINS_HDR = $(HEADER_BUILD)/pins.h GEN_PINS_HDR = $(HEADER_BUILD)/pins.h
GEN_PINS_QSTR = $(BUILD)/pins_qstr.h
GEN_PINS_AF_CONST = $(HEADER_BUILD)/pins_af_const.h GEN_PINS_AF_CONST = $(HEADER_BUILD)/pins_af_const.h
GEN_PINS_AF_DEFS = $(HEADER_BUILD)/pins_af_defs.h GEN_PINS_AF_DEFS = $(HEADER_BUILD)/pins_af_defs.h
GEN_PINS_AF_PY = $(BUILD)/pins_af.py GEN_PINS_AF_PY = $(BUILD)/pins_af.py
@ -86,7 +84,6 @@ GEN_CDCINF_HEADER = $(HEADER_BUILD)/pybcdc_inf.h
GEN_PLLFREQTABLE_HDR = $(HEADER_BUILD)/pllfreqtable.h GEN_PLLFREQTABLE_HDR = $(HEADER_BUILD)/pllfreqtable.h
GEN_STMCONST_HDR = $(HEADER_BUILD)/modstm_const.h GEN_STMCONST_HDR = $(HEADER_BUILD)/modstm_const.h
GEN_STMCONST_QSTR = $(BUILD)/modstm_qstr.h
GEN_STMCONST_MPZ = $(HEADER_BUILD)/modstm_mpz.h GEN_STMCONST_MPZ = $(HEADER_BUILD)/modstm_mpz.h
CMSIS_MCU_HDR = $(STM32LIB_CMSIS_ABS)/Include/$(CMSIS_MCU_LOWER).h CMSIS_MCU_HDR = $(STM32LIB_CMSIS_ABS)/Include/$(CMSIS_MCU_LOWER).h
@ -655,7 +652,7 @@ $(BUILD)/firmware.elf: $(OBJ)
$(call GENERATE_ELF,$@,$^) $(call GENERATE_ELF,$@,$^)
# List of sources for qstr extraction # List of sources for qstr extraction
SRC_QSTR += $(SRC_C) $(SRC_CXX) $(SHARED_SRC_C) SRC_QSTR += $(SRC_C) $(SRC_CXX) $(SHARED_SRC_C) $(GEN_PINS_SRC)
# Append any auto-generated sources that are needed by sources listed in # Append any auto-generated sources that are needed by sources listed in
# SRC_QSTR # SRC_QSTR
SRC_QSTR_AUTO_DEPS += $(GEN_CDCINF_HEADER) SRC_QSTR_AUTO_DEPS += $(GEN_CDCINF_HEADER)
@ -676,13 +673,12 @@ main.c: $(GEN_CDCINF_HEADER)
# Use a pattern rule here so that make will only call make-pins.py once to make # Use a pattern rule here so that make will only call make-pins.py once to make
# both pins_$(BOARD).c and pins.h # both pins_$(BOARD).c and pins.h
$(BUILD)/%_$(BOARD).c $(HEADER_BUILD)/%.h $(HEADER_BUILD)/%_af_const.h $(HEADER_BUILD)/%_af_defs.h $(BUILD)/%_qstr.h: $(BOARD_DIR)/%.csv $(MAKE_PINS) $(AF_FILE) $(PREFIX_FILE) | $(HEADER_BUILD) $(BUILD)/%_$(BOARD).c $(HEADER_BUILD)/%.h $(HEADER_BUILD)/%_af_const.h $(HEADER_BUILD)/%_af_defs.h: $(BOARD_DIR)/%.csv $(MAKE_PINS) $(AF_FILE) $(PREFIX_FILE) | $(HEADER_BUILD)
$(ECHO) "GEN $@" $(ECHO) "GEN $@"
$(Q)$(PYTHON) $(MAKE_PINS) --board $(BOARD_PINS) --af $(AF_FILE) \ $(Q)$(PYTHON) $(MAKE_PINS) --board $(BOARD_PINS) --af $(AF_FILE) \
--prefix $(PREFIX_FILE) --hdr $(GEN_PINS_HDR) --hdr-obj-decls \ --prefix $(PREFIX_FILE) --hdr $(GEN_PINS_HDR) --hdr-obj-decls \
--qstr $(GEN_PINS_QSTR) --af-const $(GEN_PINS_AF_CONST) \ --af-const $(GEN_PINS_AF_CONST) --af-defs $(GEN_PINS_AF_DEFS) \
--af-defs $(GEN_PINS_AF_DEFS) --af-defs-cmp-strings \ --af-defs-cmp-strings --af-py $(GEN_PINS_AF_PY) > $(GEN_PINS_SRC)
--af-py $(GEN_PINS_AF_PY) > $(GEN_PINS_SRC)
modmachine.c: $(GEN_PLLFREQTABLE_HDR) modmachine.c: $(GEN_PLLFREQTABLE_HDR)
$(GEN_PLLFREQTABLE_HDR): $(PLLVALUES) | $(HEADER_BUILD) $(GEN_PLLFREQTABLE_HDR): $(PLLVALUES) | $(HEADER_BUILD)
@ -690,11 +686,9 @@ $(GEN_PLLFREQTABLE_HDR): $(PLLVALUES) | $(HEADER_BUILD)
$(Q)$(PYTHON) $(PLLVALUES) -c -m $(CMSIS_MCU_LOWER) file:$(BOARD_DIR)/stm32$(MCU_SERIES)xx_hal_conf.h > $@ $(Q)$(PYTHON) $(PLLVALUES) -c -m $(CMSIS_MCU_LOWER) file:$(BOARD_DIR)/stm32$(MCU_SERIES)xx_hal_conf.h > $@
$(BUILD)/modstm.o: $(GEN_STMCONST_HDR) $(BUILD)/modstm.o: $(GEN_STMCONST_HDR)
# Use a pattern rule here so that make will only call make-stmconst.py once to $(HEADER_BUILD)/modstm_const.h: $(CMSIS_MCU_HDR) make-stmconst.py | $(HEADER_BUILD)
# make both modstm_const.h and modstm_qstr.h
$(HEADER_BUILD)/%_const.h $(BUILD)/%_qstr.h: $(CMSIS_MCU_HDR) make-stmconst.py | $(HEADER_BUILD)
$(ECHO) "GEN stmconst $@" $(ECHO) "GEN stmconst $@"
$(Q)$(PYTHON) make-stmconst.py --qstr $(GEN_STMCONST_QSTR) --mpz $(GEN_STMCONST_MPZ) $(CMSIS_MCU_HDR) > $(GEN_STMCONST_HDR) $(Q)$(PYTHON) make-stmconst.py --mpz $(GEN_STMCONST_MPZ) $(CMSIS_MCU_HDR) > $(GEN_STMCONST_HDR)
$(GEN_CDCINF_HEADER): $(GEN_CDCINF_FILE) $(FILE2H) | $(HEADER_BUILD) $(GEN_CDCINF_HEADER): $(GEN_CDCINF_FILE) $(FILE2H) | $(HEADER_BUILD)
$(ECHO) "GEN $@" $(ECHO) "GEN $@"

View File

@ -188,9 +188,6 @@ class AlternateFunction(object):
) )
print_conditional_endif(cond_var) print_conditional_endif(cond_var)
def qstr_list(self):
return [self.mux_name()]
class Pin(object): class Pin(object):
"""Holds the information associated with a pin.""" """Holds the information associated with a pin."""
@ -301,13 +298,6 @@ class Pin(object):
if self.alt_fn_count > 0: if self.alt_fn_count > 0:
hdr_file.write("extern const pin_af_obj_t pin_{:s}_af[];\n".format(n)) hdr_file.write("extern const pin_af_obj_t pin_{:s}_af[];\n".format(n))
def qstr_list(self):
result = []
for alt_fn in self.alt_fn:
if alt_fn.is_supported():
result += alt_fn.qstr_list()
return result
class NamedPin(object): class NamedPin(object):
def __init__(self, name, pin): def __init__(self, name, pin):
@ -462,26 +452,6 @@ class Pins(object):
) )
) )
def print_qstr(self, qstr_filename):
with open(qstr_filename, "wt") as qstr_file:
qstr_set = set([])
for named_pin in self.cpu_pins:
pin = named_pin.pin()
if pin.is_board_pin():
qstr_set |= set(pin.qstr_list())
qstr_set |= set([named_pin.name()])
for named_pin in self.board_pins:
if not named_pin.is_hidden():
qstr_set |= set([named_pin.name()])
for qstr in sorted(qstr_set):
cond_var = None
if qstr.startswith("AF"):
af_words = qstr.split("_")
cond_var = conditional_var(af_words[1])
print_conditional_if(cond_var, file=qstr_file)
print("Q({})".format(qstr), file=qstr_file)
print_conditional_endif(cond_var, file=qstr_file)
def print_af_hdr(self, af_const_filename): def print_af_hdr(self, af_const_filename):
with open(af_const_filename, "wt") as af_const_file: with open(af_const_filename, "wt") as af_const_file:
af_hdr_set = set([]) af_hdr_set = set([])
@ -597,13 +567,6 @@ def main():
help="Specifies beginning portion of generated pins file", help="Specifies beginning portion of generated pins file",
default="stm32f4xx_prefix.c", default="stm32f4xx_prefix.c",
) )
parser.add_argument(
"-q",
"--qstr",
dest="qstr_filename",
help="Specifies name of generated qstr header file",
default="build/pins_qstr.h",
)
parser.add_argument( parser.add_argument(
"-r", "-r",
"--hdr", "--hdr",
@ -640,7 +603,6 @@ def main():
for i in range(1, 4): for i in range(1, 4):
pins.print_adc(i) pins.print_adc(i)
pins.print_header(args.hdr_filename, args.hdr_obj_decls) pins.print_header(args.hdr_filename, args.hdr_obj_decls)
pins.print_qstr(args.qstr_filename)
pins.print_af_hdr(args.af_const_filename) pins.print_af_hdr(args.af_const_filename)
pins.print_af_py(args.af_py_filename) pins.print_af_py(args.af_py_filename)
pins.print_af_defs(args.af_defs_filename, args.af_defs_cmp_strings) pins.print_af_defs(args.af_defs_filename, args.af_defs_cmp_strings)

View File

@ -183,22 +183,20 @@ def print_int_obj(val, needed_mpzs):
needed_mpzs.add(val) needed_mpzs.add(val)
def print_periph(periph_name, periph_val, needed_qstrs, needed_mpzs): def print_periph(periph_name, periph_val, needed_mpzs):
qstr = periph_name.upper() qstr = periph_name.upper()
print("{ MP_ROM_QSTR(MP_QSTR_%s), " % qstr, end="") print("{ MP_ROM_QSTR(MP_QSTR_%s), " % qstr, end="")
print_int_obj(periph_val, needed_mpzs) print_int_obj(periph_val, needed_mpzs)
print(" },") print(" },")
needed_qstrs.add(qstr)
def print_regs(reg_name, reg_defs, needed_qstrs, needed_mpzs): def print_regs(reg_name, reg_defs, needed_mpzs):
reg_name = reg_name.upper() reg_name = reg_name.upper()
for r in reg_defs: for r in reg_defs:
qstr = reg_name + "_" + r[0] qstr = reg_name + "_" + r[0]
print("{ MP_ROM_QSTR(MP_QSTR_%s), " % qstr, end="") print("{ MP_ROM_QSTR(MP_QSTR_%s), " % qstr, end="")
print_int_obj(r[1], needed_mpzs) print_int_obj(r[1], needed_mpzs)
print(" }, // %s-bits, %s" % (r[2], r[3])) print(" }, // %s-bits, %s" % (r[2], r[3]))
needed_qstrs.add(qstr)
# This version of print regs groups registers together into submodules (eg GPIO submodule). # This version of print regs groups registers together into submodules (eg GPIO submodule).
@ -208,7 +206,7 @@ def print_regs(reg_name, reg_defs, needed_qstrs, needed_mpzs):
# As such, we don't use this version. # As such, we don't use this version.
# And for the number of constants we have, this function seems to use about the same amount # And for the number of constants we have, this function seems to use about the same amount
# of ROM as print_regs. # of ROM as print_regs.
def print_regs_as_submodules(reg_name, reg_defs, modules, needed_qstrs): def print_regs_as_submodules(reg_name, reg_defs, modules):
mod_name_lower = reg_name.lower() + "_" mod_name_lower = reg_name.lower() + "_"
mod_name_upper = mod_name_lower.upper() mod_name_upper = mod_name_lower.upper()
modules.append((mod_name_lower, mod_name_upper)) modules.append((mod_name_lower, mod_name_upper))
@ -220,14 +218,12 @@ STATIC const mp_rom_map_elem_t stm_%s_globals_table[] = {
""" """
% (mod_name_lower, mod_name_upper) % (mod_name_lower, mod_name_upper)
) )
needed_qstrs.add(mod_name_upper)
for r in reg_defs: for r in reg_defs:
print( print(
" { MP_ROM_QSTR(MP_QSTR_%s), MP_ROM_INT(%#x) }, // %s-bits, %s" " { MP_ROM_QSTR(MP_QSTR_%s), MP_ROM_INT(%#x) }, // %s-bits, %s"
% (r[0], r[1], r[2], r[3]) % (r[0], r[1], r[2], r[3])
) )
needed_qstrs.add(r[0])
print( print(
"""}; """};
@ -247,13 +243,6 @@ const mp_obj_module_t stm_%s_obj = {
def main(): def main():
cmd_parser = argparse.ArgumentParser(description="Extract ST constants from a C header file.") cmd_parser = argparse.ArgumentParser(description="Extract ST constants from a C header file.")
cmd_parser.add_argument("file", nargs=1, help="input file") cmd_parser.add_argument("file", nargs=1, help="input file")
cmd_parser.add_argument(
"-q",
"--qstr",
dest="qstr_filename",
default="build/stmconst_qstr.h",
help="Specified the name of the generated qstr header file",
)
cmd_parser.add_argument( cmd_parser.add_argument(
"--mpz", "--mpz",
dest="mpz_filename", dest="mpz_filename",
@ -269,14 +258,13 @@ def main():
reg_defs["GPIO"].append(["BSRRL", 0x18, 16, "legacy register"]) reg_defs["GPIO"].append(["BSRRL", 0x18, 16, "legacy register"])
reg_defs["GPIO"].append(["BSRRH", 0x1A, 16, "legacy register"]) reg_defs["GPIO"].append(["BSRRH", 0x1A, 16, "legacy register"])
needed_qstrs = set()
needed_mpzs = set() needed_mpzs = set()
print("// Automatically generated from %s by make-stmconst.py" % args.file[0]) print("// Automatically generated from %s by make-stmconst.py" % args.file[0])
print("") print("")
for periph_name, periph_val in periphs: for periph_name, periph_val in periphs:
print_periph(periph_name, periph_val, needed_qstrs, needed_mpzs) print_periph(periph_name, periph_val, needed_mpzs)
for reg in ( for reg in (
"ADC", "ADC",
@ -309,8 +297,8 @@ def main():
"IPCC", "IPCC",
): ):
if reg in reg_defs: if reg in reg_defs:
print_regs(reg, reg_defs[reg], needed_qstrs, needed_mpzs) print_regs(reg, reg_defs[reg], needed_mpzs)
# print_regs_as_submodules(reg, reg_defs[reg], modules, needed_qstrs) # print_regs_as_submodules(reg, reg_defs[reg], modules)
# print("#define MOD_STM_CONST_MODULES \\") # print("#define MOD_STM_CONST_MODULES \\")
# for mod_lower, mod_upper in modules: # for mod_lower, mod_upper in modules:
@ -318,12 +306,6 @@ def main():
print("") print("")
with open(args.qstr_filename, "wt") as qstr_file:
print("#if MICROPY_PY_STM_CONST", file=qstr_file)
for qstr in sorted(needed_qstrs):
print("Q({})".format(qstr), file=qstr_file)
print("#endif // MICROPY_PY_STM_CONST", file=qstr_file)
with open(args.mpz_filename, "wt") as mpz_file: with open(args.mpz_filename, "wt") as mpz_file:
for mpz in sorted(needed_mpzs): for mpz in sorted(needed_mpzs):
assert 0 <= mpz <= 0xFFFFFFFF assert 0 <= mpz <= 0xFFFFFFFF

View File

@ -227,7 +227,6 @@ GEN_QSTRDEFS_GENERATED = $(HEADER_BUILD)/qstrdefs.generated.h
GEN_ROOT_POINTERS = $(HEADER_BUILD)/root_pointers.h GEN_ROOT_POINTERS = $(HEADER_BUILD)/root_pointers.h
GEN_PINS_SRC = $(BUILD)/pins_$(BOARD).c GEN_PINS_SRC = $(BUILD)/pins_$(BOARD).c
GEN_PINS_HDR = $(HEADER_BUILD)/pins.h GEN_PINS_HDR = $(HEADER_BUILD)/pins.h
GEN_PINS_QSTR = $(HEADER_BUILD)/pins_qstr.h
GEN_PINS_AF_CONST = $(HEADER_BUILD)/pins_af_const.h GEN_PINS_AF_CONST = $(HEADER_BUILD)/pins_af_const.h
GEN_PINS_AF_DEFS = $(HEADER_BUILD)/pins_af_defs.h GEN_PINS_AF_DEFS = $(HEADER_BUILD)/pins_af_defs.h
GEN_PINS_AF_PY = $(BUILD)/pins_af.py GEN_PINS_AF_PY = $(BUILD)/pins_af.py
@ -246,7 +245,7 @@ $(GEN_ROOT_POINTERS): | $(HEADER_BUILD)
$(GEN_PINS_AF_DEFS): $(BOARD_PINS) $(MAKE_PINS) ../$(AF_FILE) $(PREFIX_FILE) | $(HEADER_BUILD) $(GEN_PINS_AF_DEFS): $(BOARD_PINS) $(MAKE_PINS) ../$(AF_FILE) $(PREFIX_FILE) | $(HEADER_BUILD)
$(ECHO) "GEN $@" $(ECHO) "GEN $@"
$(Q)$(PYTHON) $(MAKE_PINS) --board $(BOARD_PINS) --af ../$(AF_FILE) \ $(Q)$(PYTHON) $(MAKE_PINS) --board $(BOARD_PINS) --af ../$(AF_FILE) \
--prefix $(PREFIX_FILE) --hdr $(GEN_PINS_HDR) --qstr $(GEN_PINS_QSTR) \ --prefix $(PREFIX_FILE) --hdr $(GEN_PINS_HDR) \
--af-const $(GEN_PINS_AF_CONST) --af-defs $(GEN_PINS_AF_DEFS) \ --af-const $(GEN_PINS_AF_CONST) --af-defs $(GEN_PINS_AF_DEFS) \
--af-py $(GEN_PINS_AF_PY) > $(GEN_PINS_SRC) --af-py $(GEN_PINS_AF_PY) > $(GEN_PINS_SRC)