Skip to content

Commit bb795e6

Browse files
committed
update cmake to build with IAR for g0 and g4
1 parent fcf7791 commit bb795e6

File tree

20 files changed

+416
-312
lines changed

20 files changed

+416
-312
lines changed

hw/bsp/family_support.cmake

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ function(family_configure_common TARGET)
108108
COMMAND ${CMAKE_SIZE} $<TARGET_FILE:${TARGET}>
109109
)
110110

111-
if (CMAKE_C_COMPILER_ID STREQUAL "GCC")
111+
if (CMAKE_C_COMPILER_ID STREQUAL "GNU")
112112
# Generate map file
113113
target_link_options(${TARGET} PUBLIC
114114
# link map

hw/bsp/imxrt/family.cmake

Lines changed: 72 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -4,75 +4,91 @@ if (NOT BOARD)
44
message(FATAL_ERROR "BOARD not specified")
55
endif ()
66

7-
# enable LTO
8-
set(CMAKE_INTERPROCEDURAL_OPTIMIZATION TRUE)
7+
set(SDK_DIR ${TOP}/hw/mcu/nxp/mcux-sdk)
8+
set(CMSIS_DIR ${TOP}/lib/CMSIS_5)
9+
10+
# include board specific
11+
include(${CMAKE_CURRENT_LIST_DIR}/boards/${BOARD}/board.cmake)
912

1013
# toolchain set up
1114
set(CMAKE_SYSTEM_PROCESSOR cortex-m7 CACHE INTERNAL "System Processor")
1215
set(CMAKE_TOOLCHAIN_FILE ${TOP}/tools/cmake/toolchain/arm_${TOOLCHAIN}.cmake)
1316

1417
set(FAMILY_MCUS MIMXRT CACHE INTERNAL "")
1518

16-
# include board specific
17-
include(${CMAKE_CURRENT_LIST_DIR}/boards/${BOARD}/board.cmake)
19+
# enable LTO if supported
20+
include(CheckIPOSupported)
21+
check_ipo_supported(RESULT IPO_SUPPORTED)
22+
if (IPO_SUPPORTED)
23+
set(CMAKE_INTERPROCEDURAL_OPTIMIZATION TRUE)
24+
endif ()
1825

1926

2027
#------------------------------------
2128
# BOARD_TARGET
2229
#------------------------------------
2330
# only need to be built ONCE for all examples
24-
set(BOARD_TARGET board_${BOARD})
25-
if (NOT TARGET ${BOARD_TARGET})
26-
set(SDK_DIR ${TOP}/hw/mcu/nxp/mcux-sdk)
27-
set(CMSIS_DIR ${TOP}/lib/CMSIS_5)
28-
29-
add_library(${BOARD_TARGET} STATIC
30-
${SDK_DIR}/drivers/common/fsl_common.c
31-
${SDK_DIR}/drivers/igpio/fsl_gpio.c
32-
${SDK_DIR}/drivers/lpuart/fsl_lpuart.c
33-
${SDK_DIR}/devices/${MCU_VARIANT}/system_${MCU_VARIANT}.c
34-
${SDK_DIR}/devices/${MCU_VARIANT}/xip/fsl_flexspi_nor_boot.c
35-
${SDK_DIR}/devices/${MCU_VARIANT}/project_template/clock_config.c
36-
${SDK_DIR}/devices/${MCU_VARIANT}/drivers/fsl_clock.c
37-
)
38-
target_compile_definitions(${BOARD_TARGET} PUBLIC
39-
__ARMVFP__=0
40-
__ARMFPV5__=0
41-
XIP_EXTERNAL_FLASH=1
42-
XIP_BOOT_HEADER_ENABLE=1
43-
)
44-
target_include_directories(${BOARD_TARGET} PUBLIC
45-
${CMSIS_DIR}/CMSIS/Core/Include
46-
${SDK_DIR}/devices/${MCU_VARIANT}
47-
${SDK_DIR}/devices/${MCU_VARIANT}/project_template
48-
${SDK_DIR}/devices/${MCU_VARIANT}/drivers
49-
${SDK_DIR}/drivers/common
50-
${SDK_DIR}/drivers/igpio
51-
${SDK_DIR}/drivers/lpuart
52-
)
53-
update_board(${BOARD_TARGET})
31+
function(add_board_target BOARD_TARGET)
32+
if (NOT TARGET ${BOARD_TARGET})
33+
add_library(${BOARD_TARGET} STATIC
34+
${SDK_DIR}/drivers/common/fsl_common.c
35+
${SDK_DIR}/drivers/igpio/fsl_gpio.c
36+
${SDK_DIR}/drivers/lpuart/fsl_lpuart.c
37+
${SDK_DIR}/devices/${MCU_VARIANT}/system_${MCU_VARIANT}.c
38+
${SDK_DIR}/devices/${MCU_VARIANT}/xip/fsl_flexspi_nor_boot.c
39+
${SDK_DIR}/devices/${MCU_VARIANT}/project_template/clock_config.c
40+
${SDK_DIR}/devices/${MCU_VARIANT}/drivers/fsl_clock.c
41+
)
42+
target_compile_definitions(${BOARD_TARGET} PUBLIC
43+
__ARMVFP__=0
44+
__ARMFPV5__=0
45+
XIP_EXTERNAL_FLASH=1
46+
XIP_BOOT_HEADER_ENABLE=1
47+
)
48+
target_include_directories(${BOARD_TARGET} PUBLIC
49+
${CMSIS_DIR}/CMSIS/Core/Include
50+
${SDK_DIR}/devices/${MCU_VARIANT}
51+
${SDK_DIR}/devices/${MCU_VARIANT}/project_template
52+
${SDK_DIR}/devices/${MCU_VARIANT}/drivers
53+
${SDK_DIR}/drivers/common
54+
${SDK_DIR}/drivers/igpio
55+
${SDK_DIR}/drivers/lpuart
56+
)
5457

55-
if (NOT DEFINED LD_FILE_${TOOLCHAIN})
56-
set(LD_FILE_GCC ${SDK_DIR}/devices/${MCU_VARIANT}/gcc/${MCU_VARIANT}xxxxx_flexspi_nor.ld)
57-
endif ()
58+
update_board(${BOARD_TARGET})
59+
60+
# LD_FILE and STARTUP_FILE can be defined in board.cmake
61+
if (NOT DEFINED LD_FILE_${CMAKE_C_COMPILER_ID})
62+
set(LD_FILE_GNU ${SDK_DIR}/devices/${MCU_VARIANT}/gcc/${MCU_VARIANT}xxxxx_flexspi_nor.ld)
63+
#set(LD_FILE_IAR ${SDK_DIR}/devices/${MCU_VARIANT}/gcc/${MCU_VARIANT}xxxxx_flexspi_nor.ld)
64+
endif ()
65+
66+
if (NOT DEFINED STARTUP_FILE_${CMAKE_C_COMPILER_ID})
67+
set(STARTUP_FILE_GNU ${SDK_DIR}/devices/${MCU_VARIANT}/gcc/startup_${MCU_VARIANT}.S)
68+
#set(STARTUP_FILE_IAR ${SDK_DIR}/devices/${MCU_VARIANT}/gcc/startup_${MCU_VARIANT}.S)
69+
endif ()
5870

59-
if (TOOLCHAIN STREQUAL "gcc")
6071
target_sources(${BOARD_TARGET} PUBLIC
61-
${SDK_DIR}/devices/${MCU_VARIANT}/gcc/startup_${MCU_VARIANT}.S
72+
${STARTUP_FILE_${CMAKE_C_COMPILER_ID}}
6273
)
63-
target_link_options(${BOARD_TARGET} PUBLIC
64-
"LINKER:--script=${LD_FILE_GCC}"
65-
# nanolib
66-
--specs=nosys.specs
67-
--specs=nano.specs
68-
# force linker to look for these symbols
69-
-Wl,-uimage_vector_table
70-
-Wl,-ug_boot_data
71-
)
72-
else ()
73-
# TODO support IAR
74+
75+
if (CMAKE_C_COMPILER_ID STREQUAL "GNU")
76+
target_link_options(${BOARD_TARGET} PUBLIC
77+
"LINKER:--script=${LD_FILE_GNU}"
78+
# nanolib
79+
--specs=nosys.specs
80+
--specs=nano.specs
81+
# force linker to look for these symbols
82+
-Wl,-uimage_vector_table
83+
-Wl,-ug_boot_data
84+
)
85+
elseif (CMAKE_C_COMPILER_ID STREQUAL "IAR")
86+
target_link_options(${BOARD_TARGET} PUBLIC
87+
"LINKER:--config=${LD_FILE_IAR}"
88+
)
89+
endif ()
7490
endif ()
75-
endif () # BOARD_TARGET
91+
endfunction()
7692

7793

7894
#------------------------------------
@@ -81,6 +97,9 @@ endif () # BOARD_TARGET
8197
function(family_configure_example TARGET)
8298
family_configure_common(${TARGET})
8399

100+
# Board target
101+
add_board_target(board_${BOARD})
102+
84103
#---------- Port Specific ----------
85104
# These files are built for each example since it depends on example's tusb_config.h
86105
target_sources(${TARGET} PUBLIC
@@ -103,12 +122,11 @@ function(family_configure_example TARGET)
103122
family_add_tinyusb(${TARGET} OPT_MCU_MIMXRT)
104123

105124
# Link dependencies
106-
target_link_libraries(${TARGET} PUBLIC ${BOARD_TARGET} ${TARGET}-tinyusb)
125+
target_link_libraries(${TARGET} PUBLIC board_${BOARD} ${TARGET}-tinyusb)
107126

108127
# Flashing
109128
family_flash_jlink(${TARGET})
110-
family_flash_nxplink(${TARGET})
111-
#family_flash_pyocd(${TARGET})
129+
#family_flash_nxplink(${TARGET})
112130
endfunction()
113131

114132

hw/bsp/lpc18/boards/lpcxpresso18s37/board.cmake

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ set(JLINK_DEVICE LPC18S37)
44
set(PYOCD_TARGET LPC18S37)
55
set(NXPLINK_DEVICE LPC18S37:LPCXPRESSO18S37)
66

7-
set(LD_FILE_GCC ${CMAKE_CURRENT_LIST_DIR}/lpc1837.ld)
7+
set(LD_FILE_GNU ${CMAKE_CURRENT_LIST_DIR}/lpc1837.ld)
88

99
function(update_board TARGET)
1010
# nothing to do

hw/bsp/lpc18/boards/mcb1800/board.cmake

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ set(JLINK_DEVICE LPC1857)
44
set(PYOCD_TARGET LPC1857)
55
set(NXPLINK_DEVICE LPC1857:MCB1857)
66

7-
set(LD_FILE_GCC ${CMAKE_CURRENT_LIST_DIR}/lpc1857.ld)
7+
set(LD_FILE_GNU ${CMAKE_CURRENT_LIST_DIR}/lpc1857.ld)
88

99
function(update_board TARGET)
1010
# nothing to do

hw/bsp/lpc18/family.cmake

Lines changed: 49 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -6,57 +6,65 @@ endif ()
66

77
set(SDK_DIR ${TOP}/hw/mcu/nxp/lpcopen/lpc18xx/lpc_chip_18xx)
88

9-
# enable LTO
10-
set(CMAKE_INTERPROCEDURAL_OPTIMIZATION TRUE)
9+
# include board specific
10+
include(${CMAKE_CURRENT_LIST_DIR}/boards/${BOARD}/board.cmake)
1111

1212
# toolchain set up
1313
set(CMAKE_SYSTEM_PROCESSOR cortex-m3 CACHE INTERNAL "System Processor")
1414
set(CMAKE_TOOLCHAIN_FILE ${TOP}/tools/cmake/toolchain/arm_${TOOLCHAIN}.cmake)
1515

1616
set(FAMILY_MCUS LPC18XX CACHE INTERNAL "")
1717

18-
# include board specific
19-
include(${CMAKE_CURRENT_LIST_DIR}/boards/${BOARD}/board.cmake)
18+
# enable LTO if supported
19+
include(CheckIPOSupported)
20+
check_ipo_supported(RESULT IPO_SUPPORTED)
21+
if (IPO_SUPPORTED)
22+
set(CMAKE_INTERPROCEDURAL_OPTIMIZATION TRUE)
23+
endif ()
2024

2125

2226
#------------------------------------
2327
# BOARD_TARGET
2428
#------------------------------------
2529
# only need to be built ONCE for all examples
26-
set(BOARD_TARGET board_${BOARD})
27-
if (NOT TARGET ${BOARD_TARGET})
28-
add_library(${BOARD_TARGET} STATIC
29-
${SDK_DIR}/../gcc/cr_startup_lpc18xx.c
30-
${SDK_DIR}/src/chip_18xx_43xx.c
31-
${SDK_DIR}/src/clock_18xx_43xx.c
32-
${SDK_DIR}/src/gpio_18xx_43xx.c
33-
${SDK_DIR}/src/sysinit_18xx_43xx.c
34-
${SDK_DIR}/src/uart_18xx_43xx.c
35-
)
36-
target_compile_options(${BOARD_TARGET} PUBLIC
37-
-nostdlib
38-
)
39-
target_compile_definitions(${BOARD_TARGET} PUBLIC
40-
__USE_LPCOPEN
41-
CORE_M3
42-
)
43-
target_include_directories(${BOARD_TARGET} PUBLIC
44-
${SDK_DIR}/inc
45-
${SDK_DIR}/inc/config_18xx
46-
)
47-
update_board(${BOARD_TARGET})
48-
49-
if (TOOLCHAIN STREQUAL "gcc")
50-
target_link_options(${BOARD_TARGET} PUBLIC
51-
"LINKER:--script=${LD_FILE_GCC}"
52-
# nanolib
53-
--specs=nosys.specs
54-
--specs=nano.specs
30+
function(add_board_target BOARD_TARGET)
31+
if (NOT TARGET ${BOARD_TARGET})
32+
add_library(${BOARD_TARGET} STATIC
33+
${SDK_DIR}/../gcc/cr_startup_lpc18xx.c
34+
${SDK_DIR}/src/chip_18xx_43xx.c
35+
${SDK_DIR}/src/clock_18xx_43xx.c
36+
${SDK_DIR}/src/gpio_18xx_43xx.c
37+
${SDK_DIR}/src/sysinit_18xx_43xx.c
38+
${SDK_DIR}/src/uart_18xx_43xx.c
39+
)
40+
target_compile_options(${BOARD_TARGET} PUBLIC
41+
-nostdlib
42+
)
43+
target_compile_definitions(${BOARD_TARGET} PUBLIC
44+
__USE_LPCOPEN
45+
CORE_M3
46+
)
47+
target_include_directories(${BOARD_TARGET} PUBLIC
48+
${SDK_DIR}/inc
49+
${SDK_DIR}/inc/config_18xx
5550
)
56-
else ()
57-
# TODO support IAR
51+
52+
update_board(${BOARD_TARGET})
53+
54+
if (CMAKE_C_COMPILER_ID STREQUAL "GNU")
55+
target_link_options(${BOARD_TARGET} PUBLIC
56+
"LINKER:--script=${LD_FILE_GNU}"
57+
# nanolib
58+
--specs=nosys.specs
59+
--specs=nano.specs
60+
)
61+
elseif (CMAKE_C_COMPILER_ID STREQUAL "IAR")
62+
target_link_options(${BOARD_TARGET} PUBLIC
63+
"LINKER:--config=${LD_FILE_IAR}"
64+
)
65+
endif ()
5866
endif ()
59-
endif () # BOARD_TARGET
67+
endfunction()
6068

6169

6270
#------------------------------------
@@ -65,6 +73,9 @@ endif () # BOARD_TARGET
6573
function(family_configure_example TARGET)
6674
family_configure_common(${TARGET})
6775

76+
# Board target
77+
add_board_target(board_${BOARD})
78+
6879
#---------- Port Specific ----------
6980
# These files are built for each example since it depends on example's tusb_config.h
7081
target_sources(${TARGET} PUBLIC
@@ -87,10 +98,11 @@ function(family_configure_example TARGET)
8798
family_add_tinyusb(${TARGET} OPT_MCU_LPC18XX)
8899

89100
# Link dependencies
90-
target_link_libraries(${TARGET} PUBLIC ${BOARD_TARGET} ${TARGET}-tinyusb)
101+
target_link_libraries(${TARGET} PUBLIC board_${BOARD} ${TARGET}-tinyusb)
91102

92103
# Flashing
93104
family_flash_jlink(${TARGET})
105+
#family_flash_nxplink(${TARGET})
94106
endfunction()
95107

96108

hw/bsp/lpc55/boards/double_m33_express/board.cmake

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ set(JLINK_DEVICE LPC55S69)
55
set(PYOCD_TARGET LPC55S69)
66
set(NXPLINK_DEVICE LPC55S69:LPCXpresso55S69)
77

8-
set(LD_FILE_GCC ${CMAKE_CURRENT_LIST_DIR}/LPC55S69_cm33_core0_uf2.ld)
8+
set(LD_FILE_GNU ${CMAKE_CURRENT_LIST_DIR}/LPC55S69_cm33_core0_uf2.ld)
99

1010
function(update_board TARGET)
1111
target_compile_definitions(${TARGET} PUBLIC

0 commit comments

Comments
 (0)