Skip to content

Commit d1154ea

Browse files
authored
CMake refactor (#249)
* refactor linker scripts
1 parent 04e4d63 commit d1154ea

File tree

10 files changed

+47
-104
lines changed

10 files changed

+47
-104
lines changed

MXChip/AZ3166/app/CMakeLists.txt

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -31,19 +31,15 @@ target_link_libraries(${PROJECT_NAME}
3131
jsmn
3232
)
3333

34-
target_link_options(${PROJECT_NAME}
35-
PUBLIC
36-
-T${LINKER_SCRIPT} -Wl,-Map=${PROJECT_NAME}.map)
37-
38-
set_target_properties(${PROJECT_NAME}
39-
PROPERTIES
40-
LINK_DEPENDS ${LINKER_SCRIPT}
41-
SUFFIX ".elf"
42-
)
43-
4434
target_include_directories(${PROJECT_NAME}
4535
PUBLIC
4636
.
4737
)
4838

49-
post_build(${PROJECT_NAME})
39+
if(CMAKE_C_COMPILER_ID STREQUAL "IAR")
40+
message(FATAL_ERROR, "IAR is not currently implemented for this device")
41+
else()
42+
set_target_linker(${PROJECT_NAME} ${LINKER_SCRIPT})
43+
endif()
44+
45+
post_build(${PROJECT_NAME})

Microchip/ATSAME54-XPRO/app/CMakeLists.txt

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -25,24 +25,15 @@ target_link_libraries(${PROJECT_NAME}
2525
netxdriver
2626
)
2727

28-
set_target_properties(${PROJECT_NAME}
29-
PROPERTIES
30-
SUFFIX ".elf"
31-
)
32-
3328
target_include_directories(${PROJECT_NAME}
3429
PUBLIC
3530
.
3631
)
3732

38-
if(THREADX_TOOLCHAIN STREQUAL "iar")
39-
target_link_options(${PROJECT_NAME}
40-
PRIVATE
41-
--config ${CMAKE_CURRENT_LIST_DIR}/startup/iar/same54x20_flash.icf --map=${PROJECT_NAME}.map)
33+
if(CMAKE_C_COMPILER_ID STREQUAL "IAR")
34+
set_target_linker(${PROJECT_NAME} ${CMAKE_CURRENT_LIST_DIR}/startup/iar/same54x20_flash.icf)
4235
else()
43-
target_link_options(${PROJECT_NAME}
44-
PRIVATE
45-
-T${CMAKE_CURRENT_LIST_DIR}/startup/gnu/same54p20a_flash.ld -Wl,-Map=${PROJECT_NAME}.map)
36+
set_target_linker(${PROJECT_NAME} ${CMAKE_CURRENT_LIST_DIR}/startup/gnu/same54p20a_flash.ld)
4637
endif()
4738

4839
post_build(${PROJECT_NAME})

NXP/MIMXRT1050-EVKB/app/CMakeLists.txt

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -25,24 +25,15 @@ target_link_libraries(${PROJECT_NAME}
2525
netx_driver
2626
)
2727

28-
set_target_properties(${PROJECT_NAME}
29-
PROPERTIES
30-
SUFFIX ".elf"
31-
)
32-
3328
target_include_directories(${PROJECT_NAME}
3429
PUBLIC
3530
.
3631
)
3732

38-
if(THREADX_TOOLCHAIN STREQUAL "iar")
39-
target_link_options(${PROJECT_NAME}
40-
PRIVATE
41-
--config ${CMAKE_CURRENT_LIST_DIR}/startup/iar/MIMXRT1052xxxxx_flexspi_nor.icf --map=${PROJECT_NAME}.map)
33+
if(CMAKE_C_COMPILER_ID STREQUAL "IAR")
34+
set_target_linker(${PROJECT_NAME} ${CMAKE_CURRENT_LIST_DIR}/startup/iar/MIMXRT1052xxxxx_flexspi_nor.icf)
4235
else()
43-
target_link_options(${PROJECT_NAME}
44-
PRIVATE
45-
-T${CMAKE_CURRENT_LIST_DIR}/startup/gnu/MIMXRT1052xxxxx_flexspi_nor.ld -Wl,-Map=${PROJECT_NAME}.map)
36+
set_target_linker(${PROJECT_NAME} ${CMAKE_CURRENT_LIST_DIR}/startup/gnu/MIMXRT1052xxxxx_flexspi_nor.ld)
4637
endif()
4738

4839
post_build(${PROJECT_NAME})

NXP/MIMXRT1060-EVK/app/CMakeLists.txt

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -25,24 +25,15 @@ target_link_libraries(${PROJECT_NAME}
2525
netx_driver
2626
)
2727

28-
set_target_properties(${PROJECT_NAME}
29-
PROPERTIES
30-
SUFFIX ".elf"
31-
)
32-
3328
target_include_directories(${PROJECT_NAME}
3429
PUBLIC
3530
.
3631
)
3732

38-
if(THREADX_TOOLCHAIN STREQUAL "iar")
39-
target_link_options(${PROJECT_NAME}
40-
PRIVATE
41-
--config ${CMAKE_CURRENT_LIST_DIR}/startup/iar/MIMXRT1062xxxxx_flexspi_nor.icf --map=${PROJECT_NAME}.map)
33+
if(CMAKE_C_COMPILER_ID STREQUAL "IAR")
34+
set_target_linker(${PROJECT_NAME} ${CMAKE_CURRENT_LIST_DIR}/startup/iar/MIMXRT1062xxxxx_flexspi_nor.icf)
4235
else()
43-
target_link_options(${PROJECT_NAME}
44-
PRIVATE
45-
-T${CMAKE_CURRENT_LIST_DIR}/startup/gnu/MIMXRT1062xxxxx_flexspi_nor.ld -Wl,-Map=${PROJECT_NAME}.map)
36+
set_target_linker(${PROJECT_NAME} ${CMAKE_CURRENT_LIST_DIR}/startup/gnu/MIMXRT1062xxxxx_flexspi_nor.ld)
4637
endif()
4738

4839
post_build(${PROJECT_NAME})

Renesas/RSK_RX65N_2MB/app/CMakeLists.txt

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -27,25 +27,16 @@ target_link_libraries(${PROJECT_NAME}
2727
netx_driver
2828
)
2929

30-
set_target_properties(${PROJECT_NAME}
31-
PROPERTIES
32-
SUFFIX ".elf"
33-
)
34-
3530
target_include_directories(${PROJECT_NAME}
3631
PUBLIC
3732
.
3833
)
3934

40-
if(THREADX_TOOLCHAIN STREQUAL "iar")
35+
if(CMAKE_C_COMPILER_ID STREQUAL "IAR")
4136
message(FATAL_ERROR, "IAR is not currently implemented for this device")
4237
else()
43-
target_link_options(${PROJECT_NAME}
44-
PRIVATE
45-
-T${CMAKE_CURRENT_LIST_DIR}/startup/gnu/linker_script.ld
46-
-Wl,-Map=${PROJECT_NAME}.map
47-
-Wl,-e_PowerON_Reset
48-
)
38+
set_target_linker(${PROJECT_NAME} ${CMAKE_CURRENT_LIST_DIR}/startup/gnu/linker_script.ld)
39+
target_link_options(${PROJECT_NAME} PRIVATE -Wl,-e_PowerON_Reset)
4940
endif()
5041

5142
post_build(${PROJECT_NAME})

Renesas/RX65N_Cloud_Kit/app/CMakeLists.txt

Lines changed: 4 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -27,29 +27,16 @@ target_link_libraries(${PROJECT_NAME}
2727
netx_driver
2828
)
2929

30-
set_target_properties(${PROJECT_NAME}
31-
PROPERTIES
32-
SUFFIX ".elf"
33-
)
34-
3530
target_include_directories(${PROJECT_NAME}
3631
PUBLIC
3732
.
3833
)
3934

40-
if(THREADX_TOOLCHAIN STREQUAL "iar")
41-
target_link_options(${PROJECT_NAME}
42-
PRIVATE
43-
--config ${CMAKE_CURRENT_LIST_DIR}/startup/iar/linker_script.icf
44-
--map=${PROJECT_NAME}.map
45-
)
35+
if(CMAKE_C_COMPILER_ID STREQUAL "IAR")
36+
set_target_linker(${PROJECT_NAME} ${CMAKE_CURRENT_LIST_DIR}/startup/iar/linker_script.icf)
4637
else()
47-
target_link_options(${PROJECT_NAME}
48-
PRIVATE
49-
-T${CMAKE_CURRENT_LIST_DIR}/startup/gnu/linker_script.ld
50-
-Wl,-Map=${PROJECT_NAME}.map
51-
-Wl,-e_PowerON_Reset
52-
)
38+
set_target_linker(${PROJECT_NAME} ${CMAKE_CURRENT_LIST_DIR}/startup/gnu/linker_script.ld)
39+
target_link_options(${PROJECT_NAME} PRIVATE -Wl,-e_PowerON_Reset)
5340
endif()
5441

5542
post_build(${PROJECT_NAME})

STMicroelectronics/STM32L4_L4+/app/CMakeLists.txt

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -31,24 +31,15 @@ function(create_target TARGET STARTUP LINKER)
3131
jsmn
3232
)
3333

34-
set_target_properties(${TARGET}
35-
PROPERTIES
36-
SUFFIX ".elf"
37-
)
38-
3934
target_include_directories(${TARGET}
4035
PUBLIC
4136
.
4237
)
4338

44-
if(THREADX_TOOLCHAIN STREQUAL "iar")
45-
target_link_options(${TARGET}
46-
PRIVATE
47-
--config ${CMAKE_CURRENT_LIST_DIR}/startup/iar/${LINKER}.icf --map=${TARGET}.map)
39+
if(CMAKE_C_COMPILER_ID STREQUAL "IAR")
40+
set_target_linker(${TARGET} ${CMAKE_CURRENT_LIST_DIR}/startup/iar/${LINKER}.icf)
4841
else()
49-
target_link_options(${TARGET}
50-
PRIVATE
51-
-T${CMAKE_CURRENT_LIST_DIR}/startup/gnu/${LINKER}.ld -Wl,-Map=${TARGET}.map)
42+
set_target_linker(${TARGET} ${CMAKE_CURRENT_LIST_DIR}/startup/gnu/${LINKER}.ld)
5243
endif()
5344

5445
post_build(${TARGET})

cmake/arm-gcc-cortex-toolchain.cmake

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,6 @@ else()
1717
set(TOOLCHAIN_EXT "")
1818
endif(WIN32)
1919

20-
# default to Release build
21-
if(NOT CMAKE_BUILD_TYPE)
22-
set(CMAKE_BUILD_TYPE "Debug" CACHE STRING "Choose the type of build, options are: Debug Release." FORCE)
23-
endif()
24-
2520
find_program(COMPILER_ON_PATH "${TARGET_TRIPLET}gcc${TOOLCHAIN_EXT}")
2621

2722
if(DEFINED ENV{ARM_GCC_PATH})
@@ -32,6 +27,8 @@ elseif(COMPILER_ON_PATH)
3227
# then check on the current path
3328
get_filename_component(ARM_TOOLCHAIN_PATH ${COMPILER_ON_PATH} DIRECTORY)
3429
message(STATUS "Using ARM GCC from path = ${ARM_TOOLCHAIN_PATH}")
30+
else()
31+
message(FATAL_ERROR "Unable to find ARM GCC. Either add to your PATH, or define ARM_GCC_PATH to the compiler location")
3532
endif()
3633

3734
# Perform compiler test with the static library
@@ -51,7 +48,7 @@ set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
5148
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
5249
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
5350

54-
set(CMAKE_COMMON_FLAGS "--specs=nano.specs -ffunction-sections -fdata-sections -fno-strict-aliasing -fno-builtin -fshort-enums -Wall -Wextra -Wuninitialized -Wshadow -Wdouble-promotion -Werror -Wno-unused-parameter")
51+
set(CMAKE_COMMON_FLAGS "--specs=nano.specs -ffunction-sections -fdata-sections -fno-strict-aliasing -fno-builtin -fshort-enums -Wall -Wextra -Wuninitialized -Wdouble-promotion -Werror -Wno-unused-parameter")
5552
set(CMAKE_C_FLAGS "${MCPU_FLAGS} ${VFP_FLAGS} ${CMAKE_COMMON_FLAGS}")
5653
set(CMAKE_CXX_FLAGS "${MCPU_FLAGS} ${VFP_FLAGS} ${CMAKE_COMMON_FLAGS}")
5754
set(CMAKE_ASM_FLAGS "${MCPU_FLAGS} ${VFP_FLAGS}")

cmake/arm-iar-cortex-toolchain.cmake

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,6 @@ if(NOT CMAKE_BUILD_TYPE)
88
set(CMAKE_BUILD_TYPE "Debug" CACHE STRING "Choose the type of build, options are: Debug Release." FORCE)
99
endif()
1010

11-
# Do some windows specific logic
12-
if(WIN32)
13-
# use the repo version of ninja on Windows as there is no Ninja installer
14-
set(CMAKE_MAKE_PROGRAM ${CMAKE_CURRENT_LIST_DIR}/ninja CACHE STRING "Ninja location")
15-
endif(WIN32)
16-
1711
# Set up the CMake variables for compiler and assembler
1812
set(CMAKE_C_COMPILER "${EWARM_ROOT_DIR}/bin/iccarm.exe" "${CPU_FLAGS} -e")
1913
set(CMAKE_CXX_COMPILER "${EWARM_ROOT_DIR}/bin/iccarm.exe" "${CPU_FLAGS} --c++")

cmake/utilities.cmake

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,32 @@
11
# Copyright (c) Microsoft Corporation.
22
# Licensed under the MIT License.
33

4-
cmake_minimum_required(VERSION 3.13 FATAL_ERROR)
5-
64
function(post_build TARGET)
7-
if(THREADX_TOOLCHAIN STREQUAL "iar")
5+
if(CMAKE_C_COMPILER_ID STREQUAL "IAR")
86
add_custom_target(${TARGET}.bin ALL
97
DEPENDS ${TARGET}
108
COMMAND ${CMAKE_IAR_ELFTOOL} --bin ${TARGET}.elf ${TARGET}.bin)
11-
else()
9+
elseif(CMAKE_C_COMPILER_ID STREQUAL "GNU")
1210
add_custom_target(${TARGET}.bin ALL
1311
DEPENDS ${TARGET}
1412
COMMAND ${CMAKE_OBJCOPY} -Obinary ${TARGET}.elf ${TARGET}.bin
1513
COMMAND ${CMAKE_OBJCOPY} -Oihex ${TARGET}.elf ${TARGET}.hex)
14+
else()
15+
message(FATAL_ERROR "Unknown CMAKE_C_COMPILER_ID ${CMAKE_C_COMPILER_ID}")
16+
endif()
17+
endfunction()
18+
19+
function(set_target_linker TARGET LINKER_SCRIPT)
20+
if(CMAKE_C_COMPILER_ID STREQUAL "IAR")
21+
target_link_options(${TARGET} PRIVATE --config ${LINKER_SCRIPT})
22+
target_link_options(${TARGET} PRIVATE --map=${TARGET}.map)
23+
elseif(CMAKE_C_COMPILER_ID STREQUAL "GNU")
24+
target_link_options(${TARGET} PRIVATE -T${LINKER_SCRIPT})
25+
target_link_options(${TARGET} PRIVATE -Wl,-Map=${TARGET}.map)
26+
set_target_properties(${TARGET} PROPERTIES SUFFIX ".elf")
27+
28+
else()
29+
message(FATAL_ERROR "Unknown CMAKE_C_COMPILER_ID ${CMAKE_C_COMPILER_ID}")
1630
endif()
1731
endfunction()
1832

0 commit comments

Comments
 (0)