| # SPDX-License-Identifier: Apache-2.0 |
| |
| # See root CMakeLists.txt for description and expectations of these macros |
| |
| macro(toolchain_ld_baremetal) |
| |
| # LINKERFLAGPREFIX comes from linker/lld/target.cmake |
| zephyr_ld_options( |
| -nostdlib |
| -static |
| ${LINKERFLAGPREFIX},-X |
| ${LINKERFLAGPREFIX},-N |
| ) |
| |
| # Force LLVM to use built-in lld linker |
| if(NOT CONFIG_LLVM_USE_LD) |
| zephyr_ld_options( |
| -fuse-ld=lld |
| ) |
| endif() |
| |
| # Funny thing is if this is set to =error, some architectures will |
| # skip this flag even though the compiler flag check passes |
| # (e.g. ARC and Xtensa). So warning should be the default for now. |
| # |
| # Skip this for native application as Zephyr only provides |
| # additions to the host toolchain linker script. The relocation |
| # sections (.rel*) requires us to override those provided |
| # by host toolchain. As we can't account for all possible |
| # combination of compiler and linker on all machines used |
| # for development, it is better to turn this off. |
| # |
| # CONFIG_LINKER_ORPHAN_SECTION_PLACE is to place the orphan sections |
| # without any warnings or errors, which is the default behavior. |
| # So there is no need to explicitly set a linker flag. |
| if(CONFIG_LINKER_ORPHAN_SECTION_WARN) |
| zephyr_ld_options( |
| ${LINKERFLAGPREFIX},--orphan-handling=warn |
| ) |
| elseif(CONFIG_LINKER_ORPHAN_SECTION_ERROR) |
| zephyr_ld_options( |
| ${LINKERFLAGPREFIX},--orphan-handling=error |
| ) |
| endif() |
| |
| endmacro() |