@@ -66,6 +66,7 @@ ALL_LVGL_SRC = $(shell find $(LVGL_DIR) -type f -name '*.h') $(LV_CONF_PATH)
6666LVGL_PP = $(BUILD ) /lvgl/lvgl.pp.c
6767LVGL_MPY = $(BUILD ) /lvgl/lv_mpy.c
6868LVGL_MPY_METADATA = $(BUILD ) /lvgl/lv_mpy.json
69+ LVGL_JSON = $(BUILD ) /lvgl/lvgl_api.json
6970CFLAGS_USERMOD += $(LV_CFLAGS )
7071
7172# MAKE SURE LV_CONF_PATH is a STRING
@@ -76,30 +77,68 @@ CFLAGS_USERMOD += -DLV_CONF_PATH='"$(LV_CONF_PATH)"'
7677# CFLAGS DEBUG
7778$(info CFLAGS_USERMOD is $(CFLAGS_USERMOD))
7879
79- $(LVGL_MPY ) : $(ALL_LVGL_SRC ) $(LVGL_BINDING_DIR ) /gen/gen_mpy.py
80+ # Generate LVGL API JSON for enhanced binding generation
81+ $(LVGL_JSON ) : $(ALL_LVGL_SRC )
82+ $(ECHO ) " LVGL-JSON $@ "
83+ $(Q ) mkdir -p $(dir $@ )
84+ $(Q ) if [ -f " $( LVGL_DIR) /scripts/gen_json/gen_json.py" ]; then \
85+ $(PYTHON ) $(LVGL_DIR ) /scripts/gen_json/gen_json.py \
86+ --output-path $@ \
87+ --lvgl-config $(LV_CONF_PATH ) ; \
88+ else \
89+ echo ' {}' > $@ ; \
90+ echo " Warning: LVGL JSON generator not found, using empty JSON" ; \
91+ fi
92+
93+ $(LVGL_MPY ) : $(ALL_LVGL_SRC ) $(LVGL_BINDING_DIR ) /gen/gen_mpy.py $(LVGL_JSON )
8094 $(ECHO ) " LVGL-GEN $@ "
8195 $(Q ) mkdir -p $(dir $@ )
8296 $(Q )$(CPP ) $(CFLAGS_USERMOD ) -DPYCPARSER -x c -I $(LVGL_BINDING_DIR ) /pycparser/utils/fake_libc_include $(INC ) $(LVGL_DIR ) /lvgl.h > $(LVGL_PP )
83- $(Q )$(PYTHON ) $(LVGL_BINDING_DIR ) /gen/gen_mpy.py -M lvgl -MP lv -MD $(LVGL_MPY_METADATA ) -E $(LVGL_PP ) $(LVGL_DIR ) /lvgl.h > $@
97+ $(Q )$(PYTHON ) $(LVGL_BINDING_DIR ) /gen/gen_mpy.py -M lvgl -MP lv -MD $(LVGL_MPY_METADATA ) -J $( LVGL_JSON ) - E $(LVGL_PP ) $(LVGL_DIR ) /lvgl.h > $@
8498
85- # Python stub file generation
86- LVGL_STUBS_DIR = $(BUILD ) /lvgl/stubs
99+ # Python stub file generation and packaging
100+ LVGL_STUBS_TEMPLATE_DIR = $(LVGL_BINDING_DIR ) /stubs
101+ LVGL_STUBS_BUILD_DIR = $(BUILD ) /lvgl/stubs-package
102+ LVGL_STUBS_DIR = $(LVGL_STUBS_BUILD_DIR ) /lvgl_stubs
87103LVGL_STUBS_FILE = $(LVGL_STUBS_DIR ) /lvgl.pyi
104+ LVGL_STUBS_WHEEL = $(LVGL_STUBS_BUILD_DIR ) /dist/lvgl_stubs-*.whl
88105
89- $(LVGL_STUBS_FILE ) : $(ALL_LVGL_SRC ) $(LVGL_BINDING_DIR ) /gen/gen_mpy.py
106+ # Copy stubs template and generate stub file
107+ $(LVGL_STUBS_FILE ) : $(LVGL_MPY_METADATA ) $(LVGL_BINDING_DIR ) /gen/gen_stubs.py $(LVGL_STUBS_TEMPLATE_DIR )
90108 $(ECHO ) " LVGL-STUBS $@ "
91- $(Q ) mkdir -p $(dir $@ )
92- $(Q ) mkdir -p $(dir $(LVGL_PP ) )
93- $(Q )$(CPP ) $(CFLAGS_USERMOD ) -DPYCPARSER -x c -I $(LVGL_BINDING_DIR ) /pycparser/utils/fake_libc_include $(INC ) $(LVGL_DIR ) /lvgl.h > $(LVGL_PP )
94- $(Q )$(PYTHON ) $(LVGL_BINDING_DIR ) /gen/gen_mpy.py -M lvgl -MP lv -MD $(LVGL_MPY_METADATA ) -S $(LVGL_STUBS_DIR ) -E $(LVGL_PP ) $(LVGL_DIR ) /lvgl.h > /dev/null
95-
96- .PHONY : LVGL_MPY lvgl-stubs
109+ $(Q ) mkdir -p $(LVGL_STUBS_BUILD_DIR )
110+ $(Q ) cp -r $(LVGL_STUBS_TEMPLATE_DIR ) /* $(LVGL_STUBS_BUILD_DIR ) /
111+ $(Q ) # Extract LVGL version and create __version__.py
112+ $(Q ) LVGL_MAJOR=$$(grep "LVGL_VERSION_MAJOR" $(LVGL_DIR ) /lv_version.h | grep -o '[0-9]\+' ) ; \
113+ LVGL_MINOR=$$(grep "LVGL_VERSION_MINOR" $(LVGL_DIR ) /lv_version.h | grep -o '[0-9]\+' ) ; \
114+ LVGL_PATCH=$$(grep "LVGL_VERSION_PATCH" $(LVGL_DIR ) /lv_version.h | grep -o '[0-9]\+' ) ; \
115+ LVGL_VERSION=" $$ {LVGL_MAJOR}.$$ {LVGL_MINOR}.$$ {LVGL_PATCH}" ; \
116+ echo " Setting LVGL stubs version to: $$ {LVGL_VERSION}" ; \
117+ echo " __version__ = \" $$ {LVGL_VERSION}\" " > $(LVGL_STUBS_DIR ) /__version__.py
118+ $(Q )$(PYTHON ) $(LVGL_BINDING_DIR ) /gen/gen_stubs.py \
119+ --metadata $(LVGL_MPY_METADATA ) \
120+ --stubs-dir $(LVGL_STUBS_DIR ) \
121+ --lvgl-dir $(LVGL_DIR ) \
122+ --module-name lvgl \
123+ --validate
124+
125+ # Build the wheel package
126+ $(LVGL_STUBS_WHEEL ) : $(LVGL_STUBS_FILE )
127+ $(ECHO ) " LVGL-WHEEL $@ "
128+ $(Q ) cd $(LVGL_STUBS_BUILD_DIR ) && $(PYTHON ) -m build --wheel
129+ $(Q ) touch $@
130+
131+ .PHONY : LVGL_MPY LVGL_STUBS LVGL_STUBS_WHEEL
97132LVGL_MPY : $(LVGL_MPY )
98133
99134# Generate Python stub files with documentation (slow - parses 200+ header files)
100- lvgl-stubs : $(LVGL_STUBS_FILE )
135+ LVGL_STUBS : $(LVGL_STUBS_FILE )
101136 @echo " Generated LVGL Python stub files in $( LVGL_STUBS_DIR) /"
102137
138+ # Generate Python stub files and build distributable wheel package
139+ LVGL_STUBS_WHEEL : $(LVGL_STUBS_WHEEL )
140+ @echo " Built LVGL Python stubs wheel package in $( LVGL_STUBS_BUILD_DIR) /dist/"
141+
103142CFLAGS_USERMOD += -Wno-unused-function
104143CFLAGS_EXTRA += -Wno-unused-function
105144SRC_USERMOD_LIB_C += $(subst $(TOP ) /,,$(shell find $(LVGL_DIR ) /src $(LVGL_DIR ) /examples $(LVGL_GENERIC_DRV_DIR ) -type f -name "* .c") )
0 commit comments