1# Copyright (c) 2024 Nordic Semiconductor
2#
3# SPDX-License-Identifier: Apache-2.0
4
5check_set_linker_property(TARGET linker PROPERTY base
6                          ${LINKERFLAGPREFIX},--gc-sections
7                          ${LINKERFLAGPREFIX},--build-id=none
8)
9
10check_set_linker_property(TARGET linker PROPERTY baremetal
11                          -nostdlib
12                          -static
13                          ${LINKERFLAGPREFIX},-X
14                          ${LINKERFLAGPREFIX},-N
15)
16
17check_set_linker_property(TARGET linker PROPERTY orphan_warning
18                          ${LINKERFLAGPREFIX},--orphan-handling=warn
19)
20
21check_set_linker_property(TARGET linker PROPERTY orphan_error
22                          ${LINKERFLAGPREFIX},--orphan-handling=error
23)
24
25check_set_linker_property(TARGET linker PROPERTY memusage "${LINKERFLAGPREFIX},--print-memory-usage")
26
27check_set_linker_property(TARGET linker PROPERTY sanitizer_undefined -fsanitize=undefined)
28check_set_linker_property(TARGET linker PROPERTY sanitizer_undefined_trap -fsanitize-undefined-trap-on-error)
29check_set_linker_property(TARGET linker PROPERTY sanitizer_undefined_library)
30
31# -no-pie is not supported until binutils 2.37.
32# If -no-pie is passed to old binutils <= 2.36, it is parsed
33# as separate arguments -n and -o, which results in output file
34# called "-pie".
35if("${GNULD_VERSION_STRING}" VERSION_GREATER_EQUAL 2.37)
36  set_property(TARGET linker PROPERTY no_position_independent "${LINKERFLAGPREFIX},-no-pie")
37else()
38  set_property(TARGET linker PROPERTY no_position_independent)
39endif()
40
41set_property(TARGET linker PROPERTY partial_linking "-r")
42
43set_property(TARGET linker PROPERTY lto_arguments -flto=auto -fno-ipa-sra -ffunction-sections -fdata-sections)
44
45check_set_linker_property(TARGET linker PROPERTY no_relax ${LINKERFLAGPREFIX},--no-relax)
46
47check_set_linker_property(TARGET linker PROPERTY sort_alignment
48                          ${LINKERFLAGPREFIX},--sort-common=descending
49                          ${LINKERFLAGPREFIX},--sort-section=alignment
50)
51
52# Some linker flags might not be purely ld specific, but a combination of
53# linker and compiler, such as:
54# --coverage for clang
55# --gcov for gcc
56# So load those flags now.
57include(${ZEPHYR_BASE}/cmake/linker/${LINKER}/${COMPILER}/linker_flags.cmake OPTIONAL)
58