@@ -166,6 +166,7 @@ PYDFU = $(TOP)/tools/pydfu.py
166166PYBRICKSDEV = pybricksdev
167167METADATA = $(PBTOP ) /tools/metadata.py
168168MEDIA_CONVERT = $(PBTOP ) /lib/pbio/src/image/media.py
169+ FONT_CONVERT = $(PBTOP ) /lib/pbio/src/image/fontconvert.py
169170CREDITS_CONVERT = $(PBTOP ) /bricks/ev3/make_credits.py
170171OPENOCD ?= openocd
171172OPENOCD_CONFIG ?= openocd_stm32$(PB_MCU_SERIES_LCASE ) .cfg
@@ -528,12 +529,68 @@ ifneq ($(PB_MCU_FAMILY),TIAM1808)
528529SRC_S += lib/pbio/platform/$(PBIO_PLATFORM ) /startup.s
529530endif
530531
532+ vpath % .bmp $(PBTOP )
533+ vpath % .jpg $(PBTOP )
534+ vpath % .png $(PBTOP )
535+ vpath % .svg $(PBTOP )
536+ MEDIA_SRC = $(sort $(addprefix lib/pbio/src/image/media/,\
537+ lms2012/_app_ir_control_12.bmp \
538+ lms2012/_app_ir_control_34.bmp \
539+ lms2012/_app_motor_control_ad.bmp \
540+ lms2012/_app_motor_control_bc.bmp \
541+ lms2012/_port_view_empty.bmp \
542+ lms2012/_port_view_ev3_color_ambient.bmp \
543+ lms2012/_port_view_ev3_color_color.bmp \
544+ lms2012/_port_view_ev3_color_reflection.bmp \
545+ lms2012/_port_view_ev3_gyro.bmp \
546+ lms2012/_port_view_ev3_ir_beacon.bmp \
547+ lms2012/_port_view_ev3_ir_button.bmp \
548+ lms2012/_port_view_ev3_ir_proximity.bmp \
549+ lms2012/_port_view_ev3_motor_large.bmp \
550+ lms2012/_port_view_ev3_motor_medium.bmp \
551+ lms2012/_port_view_ev3_touch.bmp \
552+ lms2012/_port_view_ev3_ultrasonic.bmp \
553+ lms2012/_port_view_p0_bottom.bmp \
554+ lms2012/_port_view_p0_top.bmp \
555+ lms2012/_port_view_p1.bmp \
556+ lms2012/_port_view_p2.bmp \
557+ lms2012/_port_view_p3.bmp \
558+ lms2012/_port_view_p4.bmp \
559+ lms2012/_port_view_pa.bmp \
560+ lms2012/_port_view_pb.bmp \
561+ lms2012/_port_view_pc.bmp \
562+ lms2012/_port_view_pd.bmp \
563+ ui/_accept24.svg \
564+ ui/_accept24_fill.svg \
565+ ui/_off20.svg \
566+ ui/_port_view_nxt_color_ambient.svg \
567+ ui/_port_view_nxt_color_color.svg \
568+ ui/_port_view_nxt_color_reflection.svg \
569+ ui/_port_view_nxt_light_ambient.svg \
570+ ui/_port_view_nxt_light_reflection.svg \
571+ ui/_port_view_nxt_sound.svg \
572+ ui/_pybricks_join.png \
573+ ui/_reject24.svg \
574+ ui/_reject24_fill.svg \
575+ ui/_rotate_ccw18.svg \
576+ ui/_rotate_cw18.svg \
577+ ui/_usb_host.svg \
578+ ui/_wrench17.svg \
579+ ) )
580+ MEDIA_GEN_C = $(patsubst lib/pbio/src/image/media/% , $(BUILD ) /media/% .c, $(basename $(MEDIA_SRC ) ) )
581+
531582ifeq ($(PB_MEDIA ) ,1)
532583PYBRICKS_PYBRICKS_SRC_C += $(BUILD ) /pb_type_image_attributes.c
533- PBIO_SRC_C += $(BUILD ) /pbio_image_media.c
584+ PBIO_SRC_C += $(MEDIA_GEN_C )
534585PBIO_SRC_C += $(BUILD ) /hmi_ev3_ui_credits.c
535586endif
536587
588+ ifeq ($(PB_FONTS ) ,1)
589+ PBIO_SRC_C += $(BUILD ) /font_liberationsans_regular_14.c
590+ PBIO_SRC_C += $(BUILD ) /font_terminus_normal_16.c
591+ PBIO_SRC_C += $(BUILD ) /font_mono_8x5_8.c
592+ endif
593+
537594OBJ = $(PY_O )
538595OBJ += $(addprefix $(BUILD ) /, $(SRC_S:.s=.o ) )
539596OBJ += $(addprefix $(BUILD ) /, $(PY_EXTRA_SRC_C:.c=.o ) )
@@ -637,9 +694,50 @@ else
637694FW_SECTIONS :=
638695endif
639696
640- $(BUILD ) /pbio_image_media.c $(BUILD ) /pb_type_image_attributes.c : $(MEDIA_CONVERT )
697+ # Force media list regeneration if list of media sources changed.
698+ -include $(BUILD ) /media_src_gen.mk
699+ MEDIA_REGEN := $(if $(strip $(filter-out $(MEDIA_SRC ) ,$(MEDIA_SRC_GEN ) ) $(filter-out $(MEDIA_SRC_GEN ) ,$(MEDIA_SRC ) ) ) ,media-regen)
700+ media-regen :
701+ .PHONY : media-regen
702+ .SECONDARY : $(MEDIA_GEN_C )
703+
704+ $(BUILD ) /media/% .c : lib/pbio/src/image/media/% .bmp $(MEDIA_CONVERT )
705+ $(ECHO ) " GEN $@ "
706+ $(Q ) mkdir -p $(dir $@ )
707+ $(Q )$(PYTHON ) $(MEDIA_CONVERT ) -o $@ $<
708+
709+ $(BUILD ) /media/% .c : lib/pbio/src/image/media/% .jpg $(MEDIA_CONVERT )
710+ $(ECHO ) " GEN $@ "
711+ $(Q ) mkdir -p $(dir $@ )
712+ $(Q )$(PYTHON ) $(MEDIA_CONVERT ) -o $@ $<
713+
714+ $(BUILD ) /media/% .c : lib/pbio/src/image/media/% .png $(MEDIA_CONVERT )
715+ $(ECHO ) " GEN $@ "
716+ $(Q ) mkdir -p $(dir $@ )
717+ $(Q )$(PYTHON ) $(MEDIA_CONVERT ) -o $@ $<
718+
719+ $(BUILD ) /media/% .c : lib/pbio/src/image/media/% .svg $(MEDIA_CONVERT )
720+ $(ECHO ) " GEN $@ "
721+ $(Q ) mkdir -p $(dir $@ )
722+ $(Q )$(PYTHON ) $(MEDIA_CONVERT ) -o $@ $<
723+
724+ $(BUILD ) /pbio_image_media.h $(BUILD ) /pb_type_image_attributes.c & : $(MEDIA_CONVERT ) $(MEDIA_REGEN )
641725 $(ECHO ) " Generating image media files"
642- $(Q )$(PYTHON ) $(MEDIA_CONVERT ) $(BUILD )
726+ $(Q ) mkdir -p $(BUILD )
727+ $(Q )$(PYTHON ) $(MEDIA_CONVERT ) --decls $(BUILD ) /pbio_image_media.h --attrs $(BUILD ) /pb_type_image_attributes.c $(MEDIA_SRC )
728+ $(ECHO ) " MEDIA_SRC_GEN = $( MEDIA_SRC) " > $(BUILD ) /media_src_gen.mk
729+
730+ $(BUILD ) /font_liberationsans_regular_14.c : $(PBTOP ) /lib/pbio/src/image/fonts/LiberationSans-Regular.ttf $(FONT_CONVERT )
731+ $(ECHO ) " GEN $@ "
732+ $(Q )$(PYTHON ) $(FONT_CONVERT ) $< 14 > $@
733+
734+ $(BUILD ) /font_terminus_normal_16.c : $(PBTOP ) /lib/pbio/src/image/fonts/terminus-normal.otb $(FONT_CONVERT )
735+ $(ECHO ) " GEN $@ "
736+ $(Q )$(PYTHON ) $(FONT_CONVERT ) $< 16 > $@
737+
738+ $(BUILD ) /font_mono_8x5_8.c : $(PBTOP ) /lib/pbio/src/image/fonts/mono_8x5.png $(FONT_CONVERT )
739+ $(ECHO ) " GEN $@ "
740+ $(Q )$(PYTHON ) $(FONT_CONVERT ) --image $< 8 > $@
643741
644742$(BUILD ) /hmi_ev3_ui_credits.c : $(CREDITS_CONVERT )
645743 $(ECHO ) " Generating EV3 credits file"
@@ -710,4 +808,6 @@ deploy-openocd: $(BUILD)/firmware-base.bin
710808 $(ECHO ) " Writing $< to the board via ST-LINK using OpenOCD"
711809 $(Q )$(OPENOCD ) -f $(OPENOCD_CONFIG ) -c " stm_flash $< $( TEXT0_ADDR) "
712810
811+ .DELETE_ON_ERROR :
812+
713813include $(TOP ) /py/mkrules.mk
0 commit comments