summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhathach <[email protected]>2024-04-22 20:09:54 +0700
committerhathach <[email protected]>2024-04-22 20:09:54 +0700
commitfd059ee24dd0e5d7a678b1bd4c0c3b611dd4ee0f (patch)
tree85c66d55140c0a3ece773de7a24936f972a018a1
parent06c81d8bee7bdf820c4fcaecc06f470061b63b24 (diff)
clang compile with lpc40
-rw-r--r--hw/bsp/lpc17/boards/lpcxpresso1769/lpc1769.ld18
-rw-r--r--hw/bsp/lpc17/boards/mbed1768/lpc1768.ld18
-rw-r--r--hw/bsp/lpc40/boards/ea4088_quickstart/lpc4088.ld20
-rw-r--r--hw/bsp/lpc40/family.cmake16
4 files changed, 45 insertions, 27 deletions
diff --git a/hw/bsp/lpc17/boards/lpcxpresso1769/lpc1769.ld b/hw/bsp/lpc17/boards/lpcxpresso1769/lpc1769.ld
index ba0543f09..a6c35c157 100644
--- a/hw/bsp/lpc17/boards/lpcxpresso1769/lpc1769.ld
+++ b/hw/bsp/lpc17/boards/lpcxpresso1769/lpc1769.ld
@@ -181,15 +181,15 @@ SECTIONS
/* ## Create checksum value (used in startup) ## */
/* This cause issue with clang linker, so it is disabled */
/* MemManage_Handler, BusFault_Handler, UsageFault_Handler may not be defined */
-/* PROVIDE(__valid_user_code_checksum = 0 -*/
-/* (_vStackTop*/
-/* + (ResetISR + 1)*/
-/* + (NMI_Handler + 1)*/
-/* + (HardFault_Handler + 1)*/
-/* + (( DEFINED(MemManage_Handler) ? MemManage_Handler : 0 ) + 1)*/
-/* + (( DEFINED(BusFault_Handler) ? BusFault_Handler : 0 ) + 1)*/
-/* + (( DEFINED(UsageFault_Handler) ? UsageFault_Handler : 0 ) + 1)*/
-/* ) );*/
+ PROVIDE(__valid_user_code_checksum = 0 -
+ (_vStackTop
+ + (ResetISR + 1)
+ + (NMI_Handler + 1)
+ + (HardFault_Handler + 1)
+ + (( DEFINED(MemManage_Handler) ? MemManage_Handler : 0 ) + 1)
+ + (( DEFINED(BusFault_Handler) ? BusFault_Handler : 0 ) + 1)
+ + (( DEFINED(UsageFault_Handler) ? UsageFault_Handler : 0 ) + 1)
+ ) );
/* Provide basic symbols giving location and size of main text
* block, including initial values of RW data sections. Note that
diff --git a/hw/bsp/lpc17/boards/mbed1768/lpc1768.ld b/hw/bsp/lpc17/boards/mbed1768/lpc1768.ld
index ba0543f09..a6c35c157 100644
--- a/hw/bsp/lpc17/boards/mbed1768/lpc1768.ld
+++ b/hw/bsp/lpc17/boards/mbed1768/lpc1768.ld
@@ -181,15 +181,15 @@ SECTIONS
/* ## Create checksum value (used in startup) ## */
/* This cause issue with clang linker, so it is disabled */
/* MemManage_Handler, BusFault_Handler, UsageFault_Handler may not be defined */
-/* PROVIDE(__valid_user_code_checksum = 0 -*/
-/* (_vStackTop*/
-/* + (ResetISR + 1)*/
-/* + (NMI_Handler + 1)*/
-/* + (HardFault_Handler + 1)*/
-/* + (( DEFINED(MemManage_Handler) ? MemManage_Handler : 0 ) + 1)*/
-/* + (( DEFINED(BusFault_Handler) ? BusFault_Handler : 0 ) + 1)*/
-/* + (( DEFINED(UsageFault_Handler) ? UsageFault_Handler : 0 ) + 1)*/
-/* ) );*/
+ PROVIDE(__valid_user_code_checksum = 0 -
+ (_vStackTop
+ + (ResetISR + 1)
+ + (NMI_Handler + 1)
+ + (HardFault_Handler + 1)
+ + (( DEFINED(MemManage_Handler) ? MemManage_Handler : 0 ) + 1)
+ + (( DEFINED(BusFault_Handler) ? BusFault_Handler : 0 ) + 1)
+ + (( DEFINED(UsageFault_Handler) ? UsageFault_Handler : 0 ) + 1)
+ ) );
/* Provide basic symbols giving location and size of main text
* block, including initial values of RW data sections. Note that
diff --git a/hw/bsp/lpc40/boards/ea4088_quickstart/lpc4088.ld b/hw/bsp/lpc40/boards/ea4088_quickstart/lpc4088.ld
index 5897707f6..55b60e1e7 100644
--- a/hw/bsp/lpc40/boards/ea4088_quickstart/lpc4088.ld
+++ b/hw/bsp/lpc40/boards/ea4088_quickstart/lpc4088.ld
@@ -140,7 +140,7 @@ SECTIONS
*(COMMON)
. = ALIGN(4) ;
_ebss = .;
- PROVIDE(end = .);
+/* PROVIDE(end = .);*/
} > RamLoc64
/* NOINIT section for RamPeriph32 */
@@ -159,7 +159,23 @@ SECTIONS
. = ALIGN(4) ;
_end_noinit = .;
} > RamLoc64
- PROVIDE(_pvHeapStart = DEFINED(__user_heap_base) ? __user_heap_base : .);
+
+ /* hathach add heap section for clang */
+ .heap (NOLOAD): {
+ __heap_start = .;
+ __HeapBase = .;
+ __heap_base = .;
+ __end = .;
+ PROVIDE(end = .);
+ PROVIDE(_end = .);
+ PROVIDE(__end__ = .);
+ KEEP(*(.heap*))
+ __HeapLimit = .;
+ __heap_limit = .;
+ __heap_end = .;
+ } > RamLoc64
+
+/* PROVIDE(_pvHeapStart = DEFINED(__user_heap_base) ? __user_heap_base : .);*/
PROVIDE(_vStackTop = DEFINED(__user_stack_top) ? __user_stack_top : __top_RamLoc64 - 0);
/* ## Create checksum value (used in startup) ## */
diff --git a/hw/bsp/lpc40/family.cmake b/hw/bsp/lpc40/family.cmake
index fce9772b6..4c14da8a7 100644
--- a/hw/bsp/lpc40/family.cmake
+++ b/hw/bsp/lpc40/family.cmake
@@ -1,6 +1,7 @@
include_guard()
set(SDK_DIR ${TOP}/hw/mcu/nxp/lpcopen/lpc40xx/lpc_chip_40xx)
+set(CMSIS_DIR ${TOP}/lib/CMSIS_5)
# include board specific
include(${CMAKE_CURRENT_LIST_DIR}/boards/${BOARD}/board.cmake)
@@ -9,7 +10,7 @@ include(${CMAKE_CURRENT_LIST_DIR}/boards/${BOARD}/board.cmake)
set(CMAKE_SYSTEM_PROCESSOR cortex-m4 CACHE INTERNAL "System Processor")
set(CMAKE_TOOLCHAIN_FILE ${TOP}/examples/build_system/cmake/toolchain/arm_${TOOLCHAIN}.cmake)
-set(FAMILY_MCUS LPC18XX CACHE INTERNAL "")
+set(FAMILY_MCUS LPC40XX CACHE INTERNAL "")
#------------------------------------
@@ -32,9 +33,6 @@ function(add_board_target BOARD_TARGET)
${SDK_DIR}/src/sysinit_17xx_40xx.c
${SDK_DIR}/src/uart_17xx_40xx.c
)
- target_compile_options(${BOARD_TARGET} PUBLIC
- -nostdlib
- )
target_compile_definitions(${BOARD_TARGET} PUBLIC
__USE_LPCOPEN
CORE_M4
@@ -42,16 +40,20 @@ function(add_board_target BOARD_TARGET)
)
target_include_directories(${BOARD_TARGET} PUBLIC
${SDK_DIR}/inc
+ ${CMSIS_DIR}/CMSIS/Core/Include
)
update_board(${BOARD_TARGET})
if (CMAKE_C_COMPILER_ID STREQUAL "GNU")
+ target_compile_options(${BOARD_TARGET} PUBLIC -nostdlib)
+ target_link_options(${BOARD_TARGET} PUBLIC
+ "LINKER:--script=${LD_FILE_GNU}"
+ --specs=nosys.specs --specs=nano.specs
+ )
+ elseif (CMAKE_C_COMPILER_ID STREQUAL "Clang")
target_link_options(${BOARD_TARGET} PUBLIC
"LINKER:--script=${LD_FILE_GNU}"
- # nanolib
- --specs=nosys.specs
- --specs=nano.specs
)
elseif (CMAKE_C_COMPILER_ID STREQUAL "IAR")
target_link_options(${BOARD_TARGET} PUBLIC