-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
147 lines (124 loc) · 5.09 KB
/
CMakeLists.txt
File metadata and controls
147 lines (124 loc) · 5.09 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
cmake_minimum_required(VERSION 3.13)
# initialize the SDK based on PICO_SDK_PATH
# note: this must happen before project()
include(pico_sdk_import.cmake)
include(pico_extras_import_optional.cmake)
if (PICO_SDK_VERSION_STRING VERSION_LESS "2.0.0")
message(FATAL_ERROR "Raspberry Pi Pico SDK version 2.0.0 (or later) required. Your version is ${PICO_SDK_VERSION_STRING}")
endif()
# If you want debug output from USB (pass -DPICO_STDIO_USB=1) this ensures you don't lose any debug output while USB is set up
if (NOT DEFINED PICO_STDIO_USB_CONNECT_WAIT_TIMEOUT_MS)
set(PICO_STDIO_USB_CONNECT_WAIT_TIMEOUT_MS 3000)
endif()
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
SET(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} -Wl,--print-memory-usage")
SET(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} -Wl,--print-memory-usage")
set(PICO_DISPLAY_LIB_PATH ${CMAKE_CURRENT_LIST_DIR}/lib/pico-display-lib)
set(PICO_DISPLAY_LIB_CONFIG_PATH ${PICO_DISPLAY_LIB_PATH}/configs)
set(CHERRY_USB_PATH ${CMAKE_CURRENT_SOURCE_DIR}/lib/CherryUSB)
set(LZ4_PATH ${CMAKE_CURRENT_SOURCE_DIR}/lib/lz4)
set(PUD_SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/src)
# set the project name
project(pico-usb-display C CXX ASM)
# Initialize the Raspberry Pi Pico SDK
pico_sdk_init()
# ********** select the suitable config file **********
include(${PICO_DISPLAY_LIB_CONFIG_PATH}/pico_dm_qd3503728.cmake)
# include(${PICO_DISPLAY_LIB_CONFIG_PATH}/pico_dm_qd3503728_8bit.cmake)
# include(${PICO_DISPLAY_LIB_CONFIG_PATH}/pico_dm_yt350s006.cmake)
# include(${PICO_DISPLAY_LIB_CONFIG_PATH}/generic-ili9341.cmake)
# include(${PICO_DISPLAY_LIB_CONFIG_PATH}/generic-st7789v.cmake)
# All the public source files of this project
set(PUD_SOURCES
${CMAKE_CURRENT_LIST_DIR}/main.c
${PUD_SOURCE_DIR}/pud.c
)
# Include config files if exist
include(${PUD_SOURCE_DIR}/decoders/config.cmake)
# Add libs or source files in subdirs
add_subdirectory(${PICO_DISPLAY_LIB_PATH})
add_subdirectory(${PUD_SOURCE_DIR}/cherryusb)
add_subdirectory(${PUD_SOURCE_DIR}/decoders)
# Decoder selection
# Note: This affects the decoding rate.
# | Name | Format |
# 0 | tjpgd | jpeg |
# 1 | JPEGDEC | jpeg |
# 2 | lz4 | lz4 |
set(DECODER_TYPE 1)
add_executable(${PROJECT_NAME})
target_sources(${PROJECT_NAME} PRIVATE
${PUD_SOURCES}
)
target_include_directories(${PROJECT_NAME} PUBLIC
${CMAKE_CURRENT_LIST_DIR}
${CMAKE_CURRENT_LIST_DIR}/include
)
target_link_libraries(${PROJECT_NAME}
pico_stdlib
# pico_multicore
pico_unique_id
pico_bootsel_via_double_reset
# hardware_i2c
# hardware_spi
# hardware_pwm
hardware_clocks
pico-display-lib
cherryusb_device
jpegdec
lz4
FreeRTOS-Kernel-Heap3
)
target_compile_definitions(${PROJECT_NAME} PUBLIC DECODER_TYPE=${DECODER_TYPE})
pico_enable_stdio_usb(${PROJECT_NAME} 0)
pico_enable_stdio_uart(${PROJECT_NAME} 1)
pico_add_extra_outputs(${PROJECT_NAME})
# math(EXPR FLASH_CLK_KHZ "${FLASH_CLK_KHZ}")
# math(EXPR FLASH_CLK_MHZ "${FLASH_CLK_KHZ} / 1000")
# math(EXPR SYS_CLK_MHZ "${SYS_CLK_KHZ} / 1000")
math(EXPR TFT_BUS_CLK_MHZ "${TFT_BUS_CLK_KHZ} / 1000")
message(STATUS "
CPU speed : ${SYS_CLK_MHZ} MHz
Flash speed : ${FLASH_CLK_MHZ} MHz
BUS speed : ${TFT_BUS_CLK_MHZ} MHz"
)
# show target size info
add_custom_target(
print-memory-usage ALL
COMMAND arm-none-eabi-size -G ${CMAKE_PROJECT_NAME}.elf
DEPENDS ${CMAKE_BINARY_DIR}/${CMAKE_PROJECT_NAME}.elf
COMMENT "Print target size info"
DEPENDS ${PROJECT_NAME}
)
# FIXME: Temporary manual operation:
# First, You need to add `set auto-load safe-path .` in your `~/.config/gdb/gdbinit`
# Then you have to run `openocd -f interface/cmsis-dap.cfg -f target/rp2350.cfg` etc.
# in another window to start the debugger. Finally, in the build directory, run
# `gdb-multiarch ./rp2040-freertos-template.elf` to attach gdb to the debugger.
add_custom_target(
copy-gdbinit ALL
COMMAND cp ${CMAKE_CURRENT_LIST_DIR}/.gdbinit ${CMAKE_BINARY_DIR}/
DEPENDS ${CMAKE_BINARY_DIR}/${CMAKE_PROJECT_NAME}.elf
COMMENT "Copy .gdbinit to build directory"
DEPENDS ${PROJECT_NAME}
)
# add a firmware flash target
if(${PICO_BOARD} STREQUAL "pico" OR ${PICO_PLATFORM} STREQUAL "rp2040")
add_custom_target(
flash
COMMAND openocd -f interface/cmsis-dap.cfg -c "adapter speed 10000"
-f target/rp2040.cfg -s tcl -c "program ${CMAKE_PROJECT_NAME}.elf verify reset exit"
DEPENDS ${CMAKE_BINARY_DIR}/${CMAKE_PROJECT_NAME}.elf
COMMENT "Flashing firmware using CMSIS-DAP Debugger..."
DEPENDS ${PROJECT_NAME}
)
elseif(${PICO_BOARD} STREQUAL "pico2" OR ${PICO_PLATFORM} STREQUAL "rp2350")
add_custom_target(
flash
COMMAND openocd -f interface/cmsis-dap.cfg -c "adapter speed 10000"
-f target/rp2350.cfg -s tcl -c "program ${CMAKE_PROJECT_NAME}.elf verify reset exit"
DEPENDS ${CMAKE_BINARY_DIR}/${CMAKE_PROJECT_NAME}.elf
COMMENT "Flashing firmware using CMSIS-DAP Debugger..."
DEPENDS ${PROJECT_NAME}
)
endif()