cmake: Toolchain abstraction: Introduce toolchain_ld_configure_files

No functional change expected.

This is motivated by the wish to abstract Zephyr's usage of toolchains,
permitting non-intrusive porting to other (commercial) toolchains.

Signed-off-by: Mark Ruvald Pedersen <mped@oticon.com>
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 1df19d5..1672389 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1029,21 +1029,8 @@
   $<$<COMPILE_LANGUAGE:C>:-std=${CSTD}>
 )
 
-configure_file(
-     $ENV{ZEPHYR_BASE}/include/arch/common/app_data_alignment.ld
-     ${PROJECT_BINARY_DIR}/include/generated/app_data_alignment.ld)
-
-configure_file(
-     $ENV{ZEPHYR_BASE}/include/linker/app_smem.ld
-     ${PROJECT_BINARY_DIR}/include/generated/app_smem.ld)
-
-configure_file(
-     $ENV{ZEPHYR_BASE}/include/linker/app_smem_aligned.ld
-     ${PROJECT_BINARY_DIR}/include/generated/app_smem_aligned.ld)
-
-configure_file(
-     $ENV{ZEPHYR_BASE}/include/linker/app_smem_unaligned.ld
-     ${PROJECT_BINARY_DIR}/include/generated/app_smem_unaligned.ld)
+# @Intent: Configure linker scripts, i.e. generate linker scripts with variables substituted
+toolchain_ld_configure_files()
 
 if(CONFIG_USERSPACE)
   set(APP_SMEM_ALIGNED_LD "${PROJECT_BINARY_DIR}/include/generated/app_smem_aligned.ld")
diff --git a/cmake/linker/ld/target.cmake b/cmake/linker/ld/target.cmake
index b2fcce3..0c82474 100644
--- a/cmake/linker/ld/target.cmake
+++ b/cmake/linker/ld/target.cmake
@@ -58,3 +58,4 @@
 include(${ZEPHYR_BASE}/cmake/linker/${LINKER}/target_baremetal.cmake)
 include(${ZEPHYR_BASE}/cmake/linker/${LINKER}/target_cpp.cmake)
 include(${ZEPHYR_BASE}/cmake/linker/${LINKER}/target_relocation.cmake)
+include(${ZEPHYR_BASE}/cmake/linker/${LINKER}/target_configure.cmake)
diff --git a/cmake/linker/ld/target_configure.cmake b/cmake/linker/ld/target_configure.cmake
new file mode 100644
index 0000000..7d02fb5
--- /dev/null
+++ b/cmake/linker/ld/target_configure.cmake
@@ -0,0 +1,21 @@
+# SPDX-License-Identifier: Apache-2.0
+
+# See root CMakeLists.txt for description and expectations of these macros
+
+macro(toolchain_ld_configure_files)
+  configure_file(
+       $ENV{ZEPHYR_BASE}/include/arch/common/app_data_alignment.ld
+       ${PROJECT_BINARY_DIR}/include/generated/app_data_alignment.ld)
+
+  configure_file(
+       $ENV{ZEPHYR_BASE}/include/linker/app_smem.ld
+       ${PROJECT_BINARY_DIR}/include/generated/app_smem.ld)
+
+  configure_file(
+       $ENV{ZEPHYR_BASE}/include/linker/app_smem_aligned.ld
+       ${PROJECT_BINARY_DIR}/include/generated/app_smem_aligned.ld)
+
+  configure_file(
+       $ENV{ZEPHYR_BASE}/include/linker/app_smem_unaligned.ld
+       ${PROJECT_BINARY_DIR}/include/generated/app_smem_unaligned.ld)
+endmacro()