Skip to content

Commit b8f60da

Browse files
committed
clang work with k64f (nostartfiles)
1 parent 8da2970 commit b8f60da

File tree

3 files changed

+58
-39
lines changed

3 files changed

+58
-39
lines changed

hw/bsp/kinetis_k/family.c

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,5 +140,20 @@ void SysTick_Handler(void) {
140140
uint32_t board_millis(void) {
141141
return system_ticks;
142142
}
143+
#endif
144+
143145

146+
// Implement _start() since we use linker flag '-nostartfiles'.
147+
// Requires defined __STARTUP_CLEAR_BSS,
148+
extern int main(void);
149+
TU_ATTR_UNUSED void _start(void) {
150+
// called by startup code
151+
main();
152+
while (1) {}
153+
}
154+
155+
#ifdef __clang__
156+
void _exit (int __status) {
157+
while (1) {}
158+
}
144159
#endif

hw/bsp/kinetis_k/family.cmake

Lines changed: 43 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -22,48 +22,53 @@ set(FAMILY_MCUS KINETIS_K CACHE INTERNAL "")
2222
#------------------------------------
2323
# only need to be built ONCE for all examples
2424
function(add_board_target BOARD_TARGET)
25-
if (NOT TARGET ${BOARD_TARGET})
26-
add_library(${BOARD_TARGET} STATIC
27-
# driver
28-
${SDK_DIR}/drivers/gpio/fsl_gpio.c
29-
${SDK_DIR}/drivers/uart/fsl_uart.c
30-
${SDK_DIR}/devices/${MCU_VARIANT}/drivers/fsl_clock.c
31-
${SDK_DIR}/devices/${MCU_VARIANT}/system_${MCU_VARIANT}.c
32-
)
33-
target_compile_definitions(${BOARD_TARGET} PUBLIC
34-
)
35-
target_include_directories(${BOARD_TARGET} PUBLIC
36-
${CMSIS_DIR}/CMSIS/Core/Include
37-
${SDK_DIR}/devices/${MCU_VARIANT}
38-
${SDK_DIR}/devices/${MCU_VARIANT}/drivers
39-
${SDK_DIR}/drivers/common
40-
${SDK_DIR}/drivers/gpio
41-
${SDK_DIR}/drivers/port
42-
${SDK_DIR}/drivers/smc
43-
${SDK_DIR}/drivers/sysmpu
44-
${SDK_DIR}/drivers/uart
45-
)
25+
if (TARGET ${BOARD_TARGET})
26+
return()
27+
endif ()
4628

47-
update_board(${BOARD_TARGET})
29+
# LD_FILE and STARTUP_FILE can be defined in board.cmake
30+
set(LD_FILE_Clang ${LD_FILE_GNU})
31+
set(STARTUP_FILE_GNU ${SDK_DIR}/devices/${MCU_VARIANT}/gcc/startup_${MCU_VARIANT}.S)
32+
set(STARTUP_FILE_Clang ${STARTUP_FILE_GNU})
33+
34+
add_library(${BOARD_TARGET} STATIC
35+
${STARTUP_FILE_${CMAKE_C_COMPILER_ID}}
36+
${SDK_DIR}/drivers/gpio/fsl_gpio.c
37+
${SDK_DIR}/drivers/uart/fsl_uart.c
38+
${SDK_DIR}/devices/${MCU_VARIANT}/drivers/fsl_clock.c
39+
${SDK_DIR}/devices/${MCU_VARIANT}/system_${MCU_VARIANT}.c
40+
)
41+
target_compile_definitions(${BOARD_TARGET} PUBLIC
42+
__STARTUP_CLEAR_BSS
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}/drivers
48+
${SDK_DIR}/drivers/common
49+
${SDK_DIR}/drivers/gpio
50+
${SDK_DIR}/drivers/port
51+
${SDK_DIR}/drivers/smc
52+
${SDK_DIR}/drivers/sysmpu
53+
${SDK_DIR}/drivers/uart
54+
)
4855

49-
# LD_FILE and STARTUP_FILE can be defined in board.cmake
50-
set(STARTUP_FILE_GNU ${SDK_DIR}/devices/${MCU_VARIANT}/gcc/startup_${MCU_VARIANT}.S)
56+
update_board(${BOARD_TARGET})
5157

52-
target_sources(${BOARD_TARGET} PUBLIC
53-
${STARTUP_FILE_${CMAKE_C_COMPILER_ID}}
58+
if (CMAKE_C_COMPILER_ID STREQUAL "GNU")
59+
target_link_options(${BOARD_TARGET} PUBLIC
60+
"LINKER:--script=${LD_FILE_GNU}"
61+
--specs=nosys.specs --specs=nano.specs
62+
-nostartfiles
63+
)
64+
elseif (CMAKE_C_COMPILER_ID STREQUAL "Clang")
65+
target_link_options(${BOARD_TARGET} PUBLIC
66+
"LINKER:--script=${LD_FILE_GNU}"
67+
)
68+
elseif (CMAKE_C_COMPILER_ID STREQUAL "IAR")
69+
target_link_options(${BOARD_TARGET} PUBLIC
70+
"LINKER:--config=${LD_FILE_IAR}"
5471
)
55-
56-
if (CMAKE_C_COMPILER_ID STREQUAL "GNU")
57-
target_link_options(${BOARD_TARGET} PUBLIC
58-
"LINKER:--script=${LD_FILE_GNU}"
59-
# nanolib
60-
--specs=nosys.specs --specs=nano.specs
61-
)
62-
elseif (CMAKE_C_COMPILER_ID STREQUAL "IAR")
63-
target_link_options(${BOARD_TARGET} PUBLIC
64-
"LINKER:--config=${LD_FILE_IAR}"
65-
)
66-
endif ()
6772
endif ()
6873
endfunction()
6974

hw/bsp/kinetis_kl/family.cmake

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,5 +108,4 @@ function(family_configure_example TARGET RTOS)
108108

109109
# Flashing
110110
family_flash_jlink(${TARGET})
111-
#family_flash_nxplink(${TARGET})
112111
endfunction()

0 commit comments

Comments
 (0)