Skip to content

Commit ffeeefc

Browse files
committed
cmake improvement, making app cmake general
1 parent 19ab3b2 commit ffeeefc

File tree

17 files changed

+68
-76
lines changed

17 files changed

+68
-76
lines changed

.github/workflows/build.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ jobs:
126126
matrix:
127127
board:
128128
# Alphabetical order by family
129-
#- 'metro_m7_1011'
129+
- 'metro_m7_1011'
130130
# - 'stm32f303disco' # overflows flash
131131
- 'stm32f411ve_discovery'
132132

.github/workflows/ci_set_matrix.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@ def set_matrix_json():
1818
if b.is_dir():
1919
matrix[p.name]['board'].append(b.name)
2020
# For quick testing by only build 1 espressif board
21-
# if p.name == 'espressif':
22-
# break
21+
if p.name == 'espressif':
22+
break
2323
print(json.dumps(matrix))
2424

2525

apps/blinky/CMakeLists.txt

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
#------------------------------------
2+
# Application
3+
# This file is meant to be include by add_subdirectory() in the root CMakeLists.txt
4+
#------------------------------------
5+
cmake_minimum_required(VERSION 3.17)
6+
7+
include(${FAMILY_PATH}/app.cmake)
8+
9+
add_executable(blinky
10+
blinky.c
11+
${FAMILY_PATH}/boards.c
12+
# ${FAMILY_PATH}/board_flash.c
13+
)
14+
target_include_directories(blinky PUBLIC
15+
${TOP}/src
16+
)
17+
target_compile_definitions(blinky PUBLIC
18+
BUILD_NO_TINYUSB
19+
)
20+
21+
family_configure_app(blinky)

apps/blinky/blinky.c

Lines changed: 6 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -32,34 +32,25 @@
3232
//--------------------------------------------------------------------+
3333
// MACRO TYPEDEF CONSTANT ENUM DECLARATION
3434
//--------------------------------------------------------------------+
35-
uint8_t const RGB_WRITING[] = { 0xcc, 0x66, 0x00 };
36-
uint8_t const RGB_OFF[] = { 0x00, 0x00, 0x00 };
35+
uint8_t const RGB_WRITING[] = { 0xcc, 0x66, 0x00 };
36+
uint8_t const RGB_OFF[] = { 0x00, 0x00, 0x00 };
3737
static volatile uint32_t _timer_count = 0;
3838

3939
int main(void) {
40-
TUF2_LOG1_LOCATION();
4140
board_init();
42-
TUF2_LOG1_LOCATION();
4341
board_timer_start(1);
4442

4543
while (1) {
4644
// nothing to do
4745
}
4846
}
4947

50-
void board_timer_handler(void)
51-
{
48+
void board_timer_handler(void) {
5249
_timer_count++;
53-
5450
if ((_timer_count & 0xfful) == 0) {
55-
// Fast toggle with both LED and RGB
56-
static bool is_on = false;
57-
is_on = !is_on;
51+
const uint32_t is_on = (_timer_count >> 8) & 0x1u;
5852

59-
// fast blink LED if available
6053
board_led_write(is_on ? 0xff : 0x000);
61-
62-
// blink RGB if available
6354
board_rgb_write(is_on ? RGB_WRITING : RGB_OFF);
6455
}
6556
}
@@ -75,9 +66,8 @@ void board_timer_handler(void)
7566
#include "SEGGER_RTT.h"
7667
#endif
7768

78-
__attribute__ ((used)) int _write (int fhdl, const void *buf, size_t count)
79-
{
80-
(void) fhdl;
69+
__attribute__ ((used)) int _write(int fhdl, const void* buf, size_t count) {
70+
(void)fhdl;
8171

8272
#if defined(LOGGER_RTT)
8373
SEGGER_RTT_Write(0, (char*) buf, (int) count);

ports/family_support.cmake

Lines changed: 16 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,9 @@ if (NOT DEFINED FAMILY)
5656
list(GET BOARD_PATH 0 FAMILY)
5757
endif ()
5858

59+
set(FAMILY_PATH ${TOP}/ports/${FAMILY} CACHE INTERNAL "FAMILY_PATH")
60+
set(BOARD_PATH ${TOP}/ports/${FAMILY}/boards/${BOARD} CACHE INTERNAL "BOARD_PATH")
61+
5962
# enable LTO if supported
6063
include(CheckIPOSupported)
6164
check_ipo_supported(RESULT IPO_SUPPORTED)
@@ -67,8 +70,12 @@ endif ()
6770
# Functions
6871
#------------------------------------
6972

70-
function(family_add_bin_hex TARGET)
71-
# placeholder, will be override by family specific
73+
# Generate bin/hex output, can be override by family specific
74+
function(family_gen_bin_hex TARGET)
75+
add_custom_command(TARGET ${TARGET} POST_BUILD
76+
COMMAND ${CMAKE_OBJCOPY} -Obinary $<TARGET_FILE:${TARGET}> $<TARGET_FILE_DIR:${TARGET}>/${TARGET}.bin
77+
COMMAND ${CMAKE_OBJCOPY} -Oihex $<TARGET_FILE:${TARGET}> $<TARGET_FILE_DIR:${TARGET}>/${TARGET}.hex
78+
VERBATIM)
7279
endfunction()
7380

7481
function(family_add_default_warnings TARGET)
@@ -122,7 +129,6 @@ function(family_add_default_warnings TARGET)
122129
endif ()
123130
endfunction()
124131

125-
126132
function(family_configure_common TARGET)
127133
# Add BOARD_${BOARD} define
128134
string(TOUPPER ${BOARD} BOARD_UPPER)
@@ -167,11 +173,9 @@ function(family_configure_common TARGET)
167173
)
168174

169175
# add hex, bin and uf2 targets
170-
family_add_bin_hex(${TARGET})
171-
176+
family_gen_bin_hex(${TARGET})
172177
endfunction()
173178

174-
175179
# Add tinyusb to example
176180
function(family_add_tinyusb TARGET OPT_MCU)
177181
# tinyusb's CMakeList.txt
@@ -206,33 +210,17 @@ function(family_configure_tinyuf2 TARGET OPT_MCU)
206210
)
207211
endfunction()
208212

209-
210-
# Add bin/hex output
211-
function(family_add_bin_hex TARGET)
213+
# generate .uf2 file from hex
214+
function(family_gen_uf2 TARGET FAMILY_ID)
212215
add_custom_command(TARGET ${TARGET} POST_BUILD
213-
COMMAND ${CMAKE_OBJCOPY} -Obinary $<TARGET_FILE:${TARGET}> $<TARGET_FILE_DIR:${TARGET}>/${TARGET}.bin
214-
COMMAND ${CMAKE_OBJCOPY} -Oihex $<TARGET_FILE:${TARGET}> $<TARGET_FILE_DIR:${TARGET}>/${TARGET}.hex
216+
COMMAND ${Python_EXECUTABLE} ${UF2CONV_PY} -f ${FAMILY_ID} -c -o $<TARGET_FILE_DIR:${TARGET}>/${TARGET}.uf2 $<TARGET_FILE_DIR:${TARGET}>/${TARGET}.hex
215217
VERBATIM)
216218
endfunction()
217219

218-
219-
# Add uf2 target, optional parameter is the extension of the binary file (default is hex)
220-
# If bin file is used, address is also required
221-
function(family_add_uf2 TARGET FAMILY_ID)
222-
set(BIN_EXT hex)
223-
set(ADDR_OPT "")
224-
if (ARGC GREATER 2)
225-
set(BIN_EXT ${ARGV2})
226-
if (BIN_EXT STREQUAL bin)
227-
set(ADDR_OPT "-b ${ARGV3}")
228-
endif ()
229-
endif ()
230-
231-
set(BIN_FILE $<TARGET_FILE_DIR:${TARGET}>/${TARGET}.${BIN_EXT})
232-
220+
# generate .uf2 file from bin with address
221+
function(family_gen_uf2_from_bin TARGET FAMILY_ID BIN_ADDR)
233222
add_custom_command(TARGET ${TARGET} POST_BUILD
234-
COMMAND echo ${Python_EXECUTABLE} ${UF2CONV_PY} -f ${FAMILY_ID} ${ADDR_OPT} -c -o $<TARGET_FILE_DIR:${TARGET}>/${TARGET}.uf2 ${BIN_FILE}
235-
COMMAND ${Python_EXECUTABLE} ${UF2CONV_PY} -f ${FAMILY_ID} ${ADDR_OPT} -c -o $<TARGET_FILE_DIR:${TARGET}>/${TARGET}.uf2 ${BIN_FILE}
223+
COMMAND ${Python_EXECUTABLE} ${UF2CONV_PY} -f ${FAMILY_ID} -b ${BIN_ADDR} -c -o $<TARGET_FILE_DIR:${TARGET}>/${TARGET}.uf2 $<TARGET_FILE_DIR:${TARGET}>/${TARGET}.bin
236224
VERBATIM)
237225
endfunction()
238226

ports/mimxrt10xx/CMakeLists.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,13 @@ family_configure_tinyuf2(tinyuf2 OPT_MCU_MIMXRT1XXX)
2424

2525
family_flash_sdp(tinyuf2)
2626
family_flash_jlink(tinyuf2 hex)
27-
family_add_uf2(tinyuf2 ${UF2_FAMILY_ID} bin ${UF2_ADDR})
27+
family_gen_uf2_from_bin(tinyuf2 ${UF2_FAMILY_ID} ${UF2_ADDR})
2828
family_flash_uf2(tinyuf2 ${UF2_FAMILY_ID})
2929

3030
#------------------------------------
3131
# Application (e.g self update)
3232
#------------------------------------
33+
add_subdirectory(${TOP}/apps/blinky ${CMAKE_BINARY_DIR}/apps/blinky)
3334
add_subdirectory(apps/erase_firmware)
3435

3536
if (BOARD STREQUAL metro_m7_1011)
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,24 @@
11
include_guard()
22

33
# override bin hex output
4-
function(family_add_bin_hex TARGET)
4+
function(family_gen_bin_hex TARGET)
55
add_custom_command(TARGET ${TARGET} POST_BUILD
66
COMMAND ${CMAKE_OBJCOPY} -O binary -R .flash_config -R .ivt $<TARGET_FILE:${TARGET}> $<TARGET_FILE_DIR:${TARGET}>/${TARGET}.bin
77
COMMAND ${CMAKE_OBJCOPY} -Oihex $<TARGET_FILE:${TARGET}> $<TARGET_FILE_DIR:${TARGET}>/${TARGET}.hex
88
VERBATIM)
99
endfunction()
1010

11-
function(configure_app TARGET)
11+
function(family_configure_app TARGET)
1212
family_configure_common(${TARGET})
1313
target_compile_definitions(${TARGET} PUBLIC
1414
BUILD_APPLICATION
1515
)
1616
target_link_options(${TARGET} PUBLIC
17-
"LINKER:--script=${CMAKE_CURRENT_FUNCTION_LIST_DIR}/../linker/${MCU_VARIANT}_ram.ld"
18-
"LINKER:--script=${CMAKE_CURRENT_FUNCTION_LIST_DIR}/memory.ld"
19-
"LINKER:--script=${CMAKE_CURRENT_FUNCTION_LIST_DIR}/../linker/common.ld"
17+
"LINKER:--script=${CMAKE_CURRENT_FUNCTION_LIST_DIR}/linker/${MCU_VARIANT}_ram.ld"
18+
"LINKER:--script=${CMAKE_CURRENT_FUNCTION_LIST_DIR}/linker/app.ld"
19+
"LINKER:--script=${CMAKE_CURRENT_FUNCTION_LIST_DIR}/linker/common.ld"
2020
)
2121

22-
family_add_uf2(${TARGET} ${UF2_FAMILY_ID})
22+
family_gen_uf2(${TARGET} ${UF2_FAMILY_ID})
2323
family_flash_uf2(${TARGET} ${UF2_FAMILY_ID})
24-
family_flash_jlink(${TARGET} hex)
2524
endfunction()

ports/mimxrt10xx/apps/erase_firmware/CMakeLists.txt

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,8 @@
44
#------------------------------------
55
cmake_minimum_required(VERSION 3.17)
66

7-
include(${CMAKE_CURRENT_LIST_DIR}/../app.cmake)
7+
include(${CMAKE_CURRENT_LIST_DIR}/../../app.cmake)
88

9-
#------------------------------------
10-
# Application
11-
#------------------------------------
129
add_executable(erase_firmware
1310
${TOP}/apps/erase_firmware/erase_firmware.c
1411
${CMAKE_CURRENT_LIST_DIR}/../../boards.c
@@ -20,4 +17,4 @@ target_compile_definitions(erase_firmware PUBLIC
2017
BUILD_NO_TINYUSB
2118
)
2219

23-
configure_app(erase_firmware)
20+
family_configure_app(erase_firmware)

ports/mimxrt10xx/apps/esp32programmer/CMakeLists.txt

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,8 @@
44
#------------------------------------
55
cmake_minimum_required(VERSION 3.17)
66

7-
include(${CMAKE_CURRENT_LIST_DIR}/../app.cmake)
7+
include(${CMAKE_CURRENT_LIST_DIR}/../../app.cmake)
88

9-
#------------------------------------
10-
# Application
11-
#------------------------------------
129
add_executable(esp32programmer
1310
main.c
1411
usb_descriptors.c
@@ -20,5 +17,5 @@ target_include_directories(esp32programmer PUBLIC
2017
${TOP}/src
2118
)
2219

23-
configure_app(esp32programmer)
20+
family_configure_app(esp32programmer)
2421
family_add_tinyusb(esp32programmer OPT_MCU_MIMXRT1XXX)

ports/mimxrt10xx/apps/factory_test/CMakeLists.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
#------------------------------------
55
cmake_minimum_required(VERSION 3.17)
66

7-
include(${CMAKE_CURRENT_LIST_DIR}/../app.cmake)
7+
include(${CMAKE_CURRENT_LIST_DIR}/../../app.cmake)
88

99
#------------------------------------
1010
# Application
@@ -21,5 +21,5 @@ target_include_directories(factory_test PUBLIC
2121
${TOP}/src
2222
)
2323

24-
configure_app(factory_test)
24+
family_configure_app(factory_test)
2525
family_add_tinyusb(factory_test OPT_MCU_MIMXRT1XXX)

0 commit comments

Comments
 (0)