rules.mk 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264
  1. # Quantum Painter Configurables
  2. QUANTUM_PAINTER_DRIVERS ?=
  3. QUANTUM_PAINTER_ANIMATIONS_ENABLE ?= yes
  4. QUANTUM_PAINTER_LVGL_INTEGRATION ?= no
  5. # The list of permissible drivers that can be listed in QUANTUM_PAINTER_DRIVERS
  6. VALID_QUANTUM_PAINTER_DRIVERS := \
  7. surface \
  8. ili9163_spi \
  9. ili9341_spi \
  10. ili9486_spi \
  11. ili9488_spi \
  12. st7735_spi \
  13. st7789_spi \
  14. gc9a01_spi \
  15. gc9107_spi \
  16. ssd1351_spi \
  17. sh1106_i2c \
  18. sh1106_spi \
  19. ld7032_i2c \
  20. ld7032_spi
  21. #-------------------------------------------------------------------------------
  22. OPT_DEFS += -DQUANTUM_PAINTER_ENABLE
  23. COMMON_VPATH += $(QUANTUM_DIR)/painter \
  24. $(QUANTUM_DIR)/unicode
  25. SRC += \
  26. $(QUANTUM_DIR)/unicode/utf8.c \
  27. $(QUANTUM_DIR)/color.c \
  28. $(QUANTUM_DIR)/painter/qp.c \
  29. $(QUANTUM_DIR)/painter/qp_internal.c \
  30. $(QUANTUM_DIR)/painter/qp_stream.c \
  31. $(QUANTUM_DIR)/painter/qgf.c \
  32. $(QUANTUM_DIR)/painter/qff.c \
  33. $(QUANTUM_DIR)/painter/qp_draw_core.c \
  34. $(QUANTUM_DIR)/painter/qp_draw_codec.c \
  35. $(QUANTUM_DIR)/painter/qp_draw_circle.c \
  36. $(QUANTUM_DIR)/painter/qp_draw_ellipse.c \
  37. $(QUANTUM_DIR)/painter/qp_draw_image.c \
  38. $(QUANTUM_DIR)/painter/qp_draw_text.c
  39. # Check if people want animations... enable the defered exec if so.
  40. ifeq ($(strip $(QUANTUM_PAINTER_ANIMATIONS_ENABLE)), yes)
  41. DEFERRED_EXEC_ENABLE := yes
  42. OPT_DEFS += -DQUANTUM_PAINTER_ANIMATIONS_ENABLE
  43. endif
  44. # Comms flags
  45. QUANTUM_PAINTER_NEEDS_COMMS_DUMMY ?= no
  46. QUANTUM_PAINTER_NEEDS_COMMS_SPI ?= no
  47. QUANTUM_PAINTER_NEEDS_COMMS_I2C ?= no
  48. # Handler for each driver
  49. define handle_quantum_painter_driver
  50. CURRENT_PAINTER_DRIVER := $1
  51. ifeq ($$(filter $$(strip $$(CURRENT_PAINTER_DRIVER)),$$(VALID_QUANTUM_PAINTER_DRIVERS)),)
  52. $$(error "$$(CURRENT_PAINTER_DRIVER)" is not a valid Quantum Painter driver)
  53. else ifeq ($$(strip $$(CURRENT_PAINTER_DRIVER)),surface)
  54. QUANTUM_PAINTER_NEEDS_SURFACE := yes
  55. else ifeq ($$(strip $$(CURRENT_PAINTER_DRIVER)),ili9163_spi)
  56. QUANTUM_PAINTER_NEEDS_COMMS_SPI := yes
  57. QUANTUM_PAINTER_NEEDS_COMMS_SPI_DC_RESET := yes
  58. OPT_DEFS += -DQUANTUM_PAINTER_ILI9163_ENABLE -DQUANTUM_PAINTER_ILI9163_SPI_ENABLE
  59. COMMON_VPATH += \
  60. $(DRIVER_PATH)/painter/tft_panel \
  61. $(DRIVER_PATH)/painter/ili9xxx
  62. SRC += \
  63. $(DRIVER_PATH)/painter/tft_panel/qp_tft_panel.c \
  64. $(DRIVER_PATH)/painter/ili9xxx/qp_ili9163.c \
  65. else ifeq ($$(strip $$(CURRENT_PAINTER_DRIVER)),ili9341_spi)
  66. QUANTUM_PAINTER_NEEDS_COMMS_SPI := yes
  67. QUANTUM_PAINTER_NEEDS_COMMS_SPI_DC_RESET := yes
  68. OPT_DEFS += -DQUANTUM_PAINTER_ILI9341_ENABLE -DQUANTUM_PAINTER_ILI9341_SPI_ENABLE
  69. COMMON_VPATH += \
  70. $(DRIVER_PATH)/painter/tft_panel \
  71. $(DRIVER_PATH)/painter/ili9xxx
  72. SRC += \
  73. $(DRIVER_PATH)/painter/tft_panel/qp_tft_panel.c \
  74. $(DRIVER_PATH)/painter/ili9xxx/qp_ili9341.c \
  75. else ifeq ($$(strip $$(CURRENT_PAINTER_DRIVER)),ili9486_spi)
  76. QUANTUM_PAINTER_NEEDS_COMMS_SPI := yes
  77. QUANTUM_PAINTER_NEEDS_COMMS_SPI_DC_RESET := yes
  78. OPT_DEFS += -DQUANTUM_PAINTER_ILI9486_ENABLE -DQUANTUM_PAINTER_ILI9486_SPI_ENABLE
  79. COMMON_VPATH += \
  80. $(DRIVER_PATH)/painter/tft_panel \
  81. $(DRIVER_PATH)/painter/ili9xxx
  82. SRC += \
  83. $(DRIVER_PATH)/painter/tft_panel/qp_tft_panel.c \
  84. $(DRIVER_PATH)/painter/ili9xxx/qp_ili9486.c \
  85. else ifeq ($$(strip $$(CURRENT_PAINTER_DRIVER)),ili9488_spi)
  86. QUANTUM_PAINTER_NEEDS_COMMS_SPI := yes
  87. QUANTUM_PAINTER_NEEDS_COMMS_SPI_DC_RESET := yes
  88. OPT_DEFS += -DQUANTUM_PAINTER_ILI9488_ENABLE -DQUANTUM_PAINTER_ILI9488_SPI_ENABLE
  89. COMMON_VPATH += \
  90. $(DRIVER_PATH)/painter/tft_panel \
  91. $(DRIVER_PATH)/painter/ili9xxx
  92. SRC += \
  93. $(DRIVER_PATH)/painter/tft_panel/qp_tft_panel.c \
  94. $(DRIVER_PATH)/painter/ili9xxx/qp_ili9488.c \
  95. else ifeq ($$(strip $$(CURRENT_PAINTER_DRIVER)),st7735_spi)
  96. QUANTUM_PAINTER_NEEDS_COMMS_SPI := yes
  97. QUANTUM_PAINTER_NEEDS_COMMS_SPI_DC_RESET := yes
  98. OPT_DEFS += -DQUANTUM_PAINTER_ST7735_ENABLE -DQUANTUM_PAINTER_ST7735_SPI_ENABLE
  99. COMMON_VPATH += \
  100. $(DRIVER_PATH)/painter/tft_panel \
  101. $(DRIVER_PATH)/painter/st77xx
  102. SRC += \
  103. $(DRIVER_PATH)/painter/tft_panel/qp_tft_panel.c \
  104. $(DRIVER_PATH)/painter/st77xx/qp_st7735.c
  105. else ifeq ($$(strip $$(CURRENT_PAINTER_DRIVER)),st7789_spi)
  106. QUANTUM_PAINTER_NEEDS_COMMS_SPI := yes
  107. QUANTUM_PAINTER_NEEDS_COMMS_SPI_DC_RESET := yes
  108. OPT_DEFS += -DQUANTUM_PAINTER_ST7789_ENABLE -DQUANTUM_PAINTER_ST7789_SPI_ENABLE
  109. COMMON_VPATH += \
  110. $(DRIVER_PATH)/painter/tft_panel \
  111. $(DRIVER_PATH)/painter/st77xx
  112. SRC += \
  113. $(DRIVER_PATH)/painter/tft_panel/qp_tft_panel.c \
  114. $(DRIVER_PATH)/painter/st77xx/qp_st7789.c
  115. else ifeq ($$(strip $$(CURRENT_PAINTER_DRIVER)),gc9a01_spi)
  116. QUANTUM_PAINTER_NEEDS_COMMS_SPI := yes
  117. QUANTUM_PAINTER_NEEDS_COMMS_SPI_DC_RESET := yes
  118. OPT_DEFS += -DQUANTUM_PAINTER_GC9A01_ENABLE -DQUANTUM_PAINTER_GC9A01_SPI_ENABLE
  119. COMMON_VPATH += \
  120. $(DRIVER_PATH)/painter/tft_panel \
  121. $(DRIVER_PATH)/painter/gc9xxx
  122. SRC += \
  123. $(DRIVER_PATH)/painter/tft_panel/qp_tft_panel.c \
  124. $(DRIVER_PATH)/painter/gc9xxx/qp_gc9a01.c
  125. else ifeq ($$(strip $$(CURRENT_PAINTER_DRIVER)),gc9107_spi)
  126. QUANTUM_PAINTER_NEEDS_COMMS_SPI := yes
  127. QUANTUM_PAINTER_NEEDS_COMMS_SPI_DC_RESET := yes
  128. OPT_DEFS += -DQUANTUM_PAINTER_GC9107_ENABLE -DQUANTUM_PAINTER_GC9107_SPI_ENABLE
  129. COMMON_VPATH += \
  130. $(DRIVER_PATH)/painter/tft_panel \
  131. $(DRIVER_PATH)/painter/gc9xxx
  132. SRC += \
  133. $(DRIVER_PATH)/painter/tft_panel/qp_tft_panel.c \
  134. $(DRIVER_PATH)/painter/gc9xxx/qp_gc9107.c
  135. else ifeq ($$(strip $$(CURRENT_PAINTER_DRIVER)),ssd1351_spi)
  136. QUANTUM_PAINTER_NEEDS_COMMS_SPI := yes
  137. QUANTUM_PAINTER_NEEDS_COMMS_SPI_DC_RESET := yes
  138. OPT_DEFS += -DQUANTUM_PAINTER_SSD1351_ENABLE -DQUANTUM_PAINTER_SSD1351_SPI_ENABLE
  139. COMMON_VPATH += \
  140. $(DRIVER_PATH)/painter/tft_panel \
  141. $(DRIVER_PATH)/painter/ssd1351
  142. SRC += \
  143. $(DRIVER_PATH)/painter/tft_panel/qp_tft_panel.c \
  144. $(DRIVER_PATH)/painter/ssd1351/qp_ssd1351.c
  145. else ifeq ($$(strip $$(CURRENT_PAINTER_DRIVER)),sh1106_spi)
  146. QUANTUM_PAINTER_NEEDS_SURFACE := yes
  147. QUANTUM_PAINTER_NEEDS_COMMS_SPI := yes
  148. QUANTUM_PAINTER_NEEDS_COMMS_SPI_DC_RESET := yes
  149. OPT_DEFS += -DQUANTUM_PAINTER_SH1106_ENABLE -DQUANTUM_PAINTER_SH1106_SPI_ENABLE
  150. COMMON_VPATH += \
  151. $(DRIVER_PATH)/painter/oled_panel \
  152. $(DRIVER_PATH)/painter/sh1106
  153. SRC += \
  154. $(DRIVER_PATH)/painter/oled_panel/qp_oled_panel.c \
  155. $(DRIVER_PATH)/painter/sh1106/qp_sh1106.c
  156. else ifeq ($$(strip $$(CURRENT_PAINTER_DRIVER)),sh1106_i2c)
  157. QUANTUM_PAINTER_NEEDS_SURFACE := yes
  158. QUANTUM_PAINTER_NEEDS_COMMS_I2C := yes
  159. OPT_DEFS += -DQUANTUM_PAINTER_SH1106_ENABLE -DQUANTUM_PAINTER_SH1106_I2C_ENABLE
  160. COMMON_VPATH += \
  161. $(DRIVER_PATH)/painter/oled_panel \
  162. $(DRIVER_PATH)/painter/sh1106
  163. SRC += \
  164. $(DRIVER_PATH)/painter/oled_panel/qp_oled_panel.c \
  165. $(DRIVER_PATH)/painter/sh1106/qp_sh1106.c
  166. else ifeq ($$(strip $$(CURRENT_PAINTER_DRIVER)),ld7032_spi)
  167. QUANTUM_PAINTER_NEEDS_SURFACE := yes
  168. QUANTUM_PAINTER_NEEDS_COMMS_SPI := yes
  169. QUANTUM_PAINTER_NEEDS_COMMS_SPI_DC_RESET := yes
  170. OPT_DEFS += -DQUANTUM_PAINTER_LD7032_ENABLE -DQUANTUM_PAINTER_LD7032_SPI_ENABLE
  171. COMMON_VPATH += \
  172. $(DRIVER_PATH)/painter/oled_panel \
  173. $(DRIVER_PATH)/painter/ld7032
  174. SRC += \
  175. $(DRIVER_PATH)/painter/oled_panel/qp_oled_panel.c \
  176. $(DRIVER_PATH)/painter/ld7032/qp_ld7032.c
  177. else ifeq ($$(strip $$(CURRENT_PAINTER_DRIVER)),ld7032_i2c)
  178. QUANTUM_PAINTER_NEEDS_SURFACE := yes
  179. QUANTUM_PAINTER_NEEDS_COMMS_I2C := yes
  180. OPT_DEFS += -DQUANTUM_PAINTER_LD7032_ENABLE -DQUANTUM_PAINTER_LD7032_I2C_ENABLE
  181. COMMON_VPATH += \
  182. $(DRIVER_PATH)/painter/oled_panel \
  183. $(DRIVER_PATH)/painter/ld7032
  184. SRC += \
  185. $(DRIVER_PATH)/painter/oled_panel/qp_oled_panel.c \
  186. $(DRIVER_PATH)/painter/ld7032/qp_ld7032.c
  187. endif
  188. endef
  189. # Iterate through the listed drivers for the build, including what's necessary
  190. $(foreach qp_driver,$(QUANTUM_PAINTER_DRIVERS),$(eval $(call handle_quantum_painter_driver,$(qp_driver))))
  191. # If a surface is needed, set up the required files
  192. ifeq ($(strip $(QUANTUM_PAINTER_NEEDS_SURFACE)), yes)
  193. QUANTUM_PAINTER_NEEDS_COMMS_DUMMY := yes
  194. OPT_DEFS += -DQUANTUM_PAINTER_SURFACE_ENABLE
  195. COMMON_VPATH += \
  196. $(DRIVER_PATH)/painter/generic
  197. SRC += \
  198. $(DRIVER_PATH)/painter/generic/qp_surface_common.c \
  199. $(DRIVER_PATH)/painter/generic/qp_surface_mono1bpp.c \
  200. $(DRIVER_PATH)/painter/generic/qp_surface_rgb565.c
  201. endif
  202. # If dummy comms is needed, set up the required files
  203. ifeq ($(strip $(QUANTUM_PAINTER_NEEDS_COMMS_DUMMY)), yes)
  204. OPT_DEFS += -DQUANTUM_PAINTER_DUMMY_COMMS_ENABLE
  205. VPATH += $(DRIVER_PATH)/painter/comms
  206. SRC += \
  207. $(QUANTUM_DIR)/painter/qp_comms.c \
  208. $(DRIVER_PATH)/painter/comms/qp_comms_dummy.c
  209. endif
  210. # If SPI comms is needed, set up the required files
  211. ifeq ($(strip $(QUANTUM_PAINTER_NEEDS_COMMS_SPI)), yes)
  212. OPT_DEFS += -DQUANTUM_PAINTER_SPI_ENABLE
  213. SPI_DRIVER_REQUIRED = yes
  214. VPATH += $(DRIVER_PATH)/painter/comms
  215. SRC += \
  216. $(QUANTUM_DIR)/painter/qp_comms.c \
  217. $(DRIVER_PATH)/painter/comms/qp_comms_spi.c
  218. ifeq ($(strip $(QUANTUM_PAINTER_NEEDS_COMMS_SPI_DC_RESET)), yes)
  219. OPT_DEFS += -DQUANTUM_PAINTER_SPI_DC_RESET_ENABLE
  220. endif
  221. endif
  222. # If I2C comms is needed, set up the required files
  223. ifeq ($(strip $(QUANTUM_PAINTER_NEEDS_COMMS_I2C)), yes)
  224. OPT_DEFS += -DQUANTUM_PAINTER_I2C_ENABLE
  225. I2C_DRIVER_REQUIRED = yes
  226. VPATH += $(DRIVER_PATH)/painter/comms
  227. SRC += \
  228. $(QUANTUM_DIR)/painter/qp_comms.c \
  229. $(DRIVER_PATH)/painter/comms/qp_comms_i2c.c
  230. endif
  231. # Check if LVGL needs to be enabled
  232. ifeq ($(strip $(QUANTUM_PAINTER_LVGL_INTEGRATION)), yes)
  233. include $(QUANTUM_DIR)/painter/lvgl/rules.mk
  234. endif