cmake: move toolchain_ld_baremetal to linker properties.

Move linker flag setting from toolchain_ld_baremetal() to linker flag
properties as to follow the principle used in previos commits and from
PR#24851.

Signed-off-by: Torsten Rasmussen <Torsten.Rasmussen@nordicsemi.no>
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 540202f..d286637 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -385,6 +385,28 @@
 if(NOT CONFIG_NATIVE_BUILD)
   # @Intent: Set linker specific flags for bare metal target
   toolchain_ld_baremetal()
+
+  zephyr_link_libraries(PROPERTY baremetal)
+
+  # Note that some architectures will skip this flag if set to error, 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_link_libraries(PROPERTY orphan_warning)
+  elseif(CONFIG_LINKER_ORPHAN_SECTION_ERROR)
+    zephyr_link_libraries(PROPERTY orphan_error)
+  endif()
 endif()
 
 if(CONFIG_CPP)
diff --git a/cmake/linker/arcmwdt/linker_flags.cmake b/cmake/linker/arcmwdt/linker_flags.cmake
index bd8ec00..63aead6 100644
--- a/cmake/linker/arcmwdt/linker_flags.cmake
+++ b/cmake/linker/arcmwdt/linker_flags.cmake
@@ -4,6 +4,38 @@
 
 set_property(TARGET linker PROPERTY cpp_base -Hcplus)
 
+check_set_linker_property(TARGET linker PROPERTY baremetal
+                          -Hlld
+                          -Hnosdata
+                          -Xtimer0 # to suppress the warning message
+                          -Hnoxcheck_obj
+                          -Hnocplus
+                          -Hhostlib=
+                          -Hheap=0
+                          -Hnoivt
+                          -Hnocrt
+)
+
+# There are two options:
+# - We have full MWDT libc support and we link MWDT libc - this is default
+#   behavior and we don't need to do something for that.
+# - We use minimal libc provided by Zephyr itself. In that case we must not
+#   link MWDT libc, but we still need to link libmw
+if(CONFIG_MINIMAL_LIBC)
+  check_set_linker_property(TARGET linker APPEND PROPERTY baremetal
+                            -Hnolib
+                            -Hldopt=-lmw
+  )
+endif()
+
+check_set_linker_property(TARGET linker PROPERTY orphan_warning
+                          ${LINKERFLAGPREFIX},--orphan-handling=warn
+)
+
+check_set_linker_property(TARGET linker PROPERTY orphan_error
+                          ${LINKERFLAGPREFIX},--orphan-handling=error
+)
+
 # Extra warnings options for twister run
 set_property(TARGET linker PROPERTY warnings_as_errors -Wl,--fatal-warnings)
 
diff --git a/cmake/linker/arcmwdt/target.cmake b/cmake/linker/arcmwdt/target.cmake
index af14f89..997bc8a 100644
--- a/cmake/linker/arcmwdt/target.cmake
+++ b/cmake/linker/arcmwdt/target.cmake
@@ -110,51 +110,6 @@
 
 # linker options of temporary linkage for code generation
 macro(toolchain_ld_baremetal)
-  zephyr_ld_options(
-    -Hlld
-    -Hnosdata
-    -Xtimer0 # to suppress the warning message
-    -Hnoxcheck_obj
-    -Hnocplus
-    -Hhostlib=
-    -Hheap=0
-    -Hnoivt
-    -Hnocrt
-  )
-
-  # There are two options:
-  # - We have full MWDT libc support and we link MWDT libc - this is default
-  #   behavior and we don't need to do something for that.
-  # - We use minimal libc provided by Zephyr itself. In that case we must not
-  #   link MWDT libc, but we still need to link libmw
-  if(CONFIG_MINIMAL_LIBC)
-    zephyr_ld_options(
-      -Hnolib
-      -Hldopt=-lmw
-    )
-  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)
-    message(WARNING "MWDT toolchain does not support
-           CONFIG_LINKER_ORPHAN_SECTION_WARN")
-  elseif(CONFIG_LINKER_ORPHAN_SECTION_ERROR)
-    zephyr_ld_options(
-      ${LINKERFLAGPREFIX}--orphan-handling=error)
-  endif()
 endmacro()
 
 # base linker options
diff --git a/cmake/linker/ld/linker_flags.cmake b/cmake/linker/ld/linker_flags.cmake
index f7d7a17..49bba26 100644
--- a/cmake/linker/ld/linker_flags.cmake
+++ b/cmake/linker/ld/linker_flags.cmake
@@ -11,6 +11,21 @@
   set_property(TARGET linker PROPERTY cpp_base -lstdc++)
 endif()
 
+check_set_linker_property(TARGET linker PROPERTY baremetal
+                          -nostdlib
+                          -static
+                          ${LINKERFLAGPREFIX},-X
+                          ${LINKERFLAGPREFIX},-N
+)
+
+check_set_linker_property(TARGET linker PROPERTY orphan_warning
+                          ${LINKERFLAGPREFIX},--orphan-handling=warn
+)
+
+check_set_linker_property(TARGET linker PROPERTY orphan_error
+                          ${LINKERFLAGPREFIX},--orphan-handling=error
+)
+
 check_set_linker_property(TARGET linker PROPERTY memusage "${LINKERFLAGPREFIX},--print-memory-usage")
 
 # -no-pie is not supported until binutils 2.37.
diff --git a/cmake/linker/ld/target_baremetal.cmake b/cmake/linker/ld/target_baremetal.cmake
index 76965ed..8d01edc 100644
--- a/cmake/linker/ld/target_baremetal.cmake
+++ b/cmake/linker/ld/target_baremetal.cmake
@@ -3,37 +3,4 @@
 # See root CMakeLists.txt for description and expectations of these macros
 
 macro(toolchain_ld_baremetal)
-
-  # LINKERFLAGPREFIX comes from linker/ld/target.cmake
-  zephyr_ld_options(
-    -nostdlib
-    -static
-    ${LINKERFLAGPREFIX},-X
-    ${LINKERFLAGPREFIX},-N
-  )
-
-  # 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()
diff --git a/cmake/linker/linker_flags_template.cmake b/cmake/linker/linker_flags_template.cmake
index 39db87e..870c597 100644
--- a/cmake/linker/linker_flags_template.cmake
+++ b/cmake/linker/linker_flags_template.cmake
@@ -11,6 +11,13 @@
 # using C++.
 set_property(TARGET linker PROPERTY cpp_base)
 
+# Base properties when building Zephyr for an embedded target (baremetal).
+set_property(TARGET linker PROPERTY baremetal)
+
+# Property for controlling linker reporting / handling when placing orphaned sections.
+set_property(TARGET linker PROPERTY orphan_warning)
+set_property(TARGET linker PROPERTY orphan_error)
+
 # coverage is a property holding the linker flag required for coverage support on the toolchain.
 # For example, on ld/gcc this would be: -lgcov
 # Set the property for the corresponding flags of the given toolchain.
diff --git a/cmake/linker/lld/linker_flags.cmake b/cmake/linker/lld/linker_flags.cmake
index 9183f60..f6e873a 100644
--- a/cmake/linker/lld/linker_flags.cmake
+++ b/cmake/linker/lld/linker_flags.cmake
@@ -9,6 +9,11 @@
   set_property(TARGET linker PROPERTY cpp_base -lc++ ${LINKERFLAGPREFIX},-z,norelro)
 endif()
 
+# Force LLVM to use built-in lld linker
+if(NOT CONFIG_LLVM_USE_LD)
+  check_set_linker_property(TARGET linker APPEND PROPERTY baremetal -fuse-ld=lld)
+endif()
+
 set_property(TARGET linker PROPERTY no_position_independent "${LINKERFLAGPREFIX},--no-pie")
 
 set_property(TARGET linker PROPERTY lto_arguments)
diff --git a/cmake/linker/lld/target_baremetal.cmake b/cmake/linker/lld/target_baremetal.cmake
index 6faf8f5..8d01edc 100644
--- a/cmake/linker/lld/target_baremetal.cmake
+++ b/cmake/linker/lld/target_baremetal.cmake
@@ -3,44 +3,4 @@
 # 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()
diff --git a/cmake/linker/xt-ld/linker_flags.cmake b/cmake/linker/xt-ld/linker_flags.cmake
index b812ed5..7657da4 100644
--- a/cmake/linker/xt-ld/linker_flags.cmake
+++ b/cmake/linker/xt-ld/linker_flags.cmake
@@ -11,6 +11,21 @@
   set_property(TARGET linker PROPERTY cpp_base -lstdc++)
 endif()
 
+check_set_linker_property(TARGET linker PROPERTY baremetal
+    -nostdlib
+    -static
+    ${LINKERFLAGPREFIX},-X
+    ${LINKERFLAGPREFIX},-N
+)
+
+check_set_linker_property(TARGET linker PROPERTY orphan_warning
+			  ${LINKERFLAGPREFIX},--orphan-handling=warn
+)
+
+check_set_linker_property(TARGET linker PROPERTY orphan_error
+			  ${LINKERFLAGPREFIX},--orphan-handling=error
+)
+
 set_property(TARGET linker PROPERTY partial_linking "-r")
 
 check_set_linker_property(TARGET linker PROPERTY no_relax ${LINKERFLAGPREFIX},--no-relax)