Skip to content

Commit

Permalink
cmake: stop destroying intermediate link maps like zephyr_prebuilt.map
Browse files Browse the repository at this point in the history
The different linker steps are all hardcoded to the output filename
"zephyr.map" and only the last one survives.

Un-harcode.

This removes some confusion when trying to follow who builds
what/when/how and it stops destroying intermediate linking information
useful when tracing/debugging new features or issues in the build.

Signed-off-by: Marc Herbert <[email protected]>
  • Loading branch information
marc-hb authored and andrewboie committed Jun 17, 2019
1 parent c47bf1f commit 0370c9b
Showing 1 changed file with 14 additions and 5 deletions.
19 changes: 14 additions & 5 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,9 @@ enable_language(C CXX ASM)
check_c_compiler_flag("" toolchain_is_ok)
assert(toolchain_is_ok "The toolchain is unable to build a dummy C file. See CMakeError.log.")

# In some cases the "final" things are not used at all and "_prebuilt"
# is the last station. See "logical_target_for_zephyr_elf" below for
# details.
set(CMAKE_EXECUTABLE_SUFFIX .elf)
set(ZEPHYR_PREBUILT_EXECUTABLE zephyr_prebuilt)
set(ZEPHYR_FINAL_EXECUTABLE zephyr_final)
Expand Down Expand Up @@ -1057,7 +1060,7 @@ if(CONFIG_USERSPACE)
add_executable( app_smem_unaligned_prebuilt misc/empty_file.c)
toolchain_ld_link_elf(
TARGET_ELF app_smem_unaligned_prebuilt
OUTPUT_MAP ${PROJECT_BINARY_DIR}/${KERNEL_MAP_NAME}
OUTPUT_MAP ${PROJECT_BINARY_DIR}/app_smem_unaligned_prebuilt.map
LIBRARIES_PRE_SCRIPT ""
LINKER_SCRIPT ${PROJECT_BINARY_DIR}/linker_app_smem_unaligned.cmd
LIBRARIES_POST_SCRIPT ""
Expand Down Expand Up @@ -1109,7 +1112,7 @@ if(CONFIG_USERSPACE AND CONFIG_ARM)
add_executable( priv_stacks_prebuilt misc/empty_file.c)
toolchain_ld_link_elf(
TARGET_ELF priv_stacks_prebuilt
OUTPUT_MAP ${PROJECT_BINARY_DIR}/${KERNEL_MAP_NAME}
OUTPUT_MAP ${PROJECT_BINARY_DIR}/priv_stacks_prebuilt.map
LIBRARIES_PRE_SCRIPT ""
LINKER_SCRIPT ${PROJECT_BINARY_DIR}/linker_priv_stacks.cmd
LIBRARIES_POST_SCRIPT ""
Expand All @@ -1123,7 +1126,7 @@ endif()
add_executable( ${ZEPHYR_PREBUILT_EXECUTABLE} misc/empty_file.c)
toolchain_ld_link_elf(
TARGET_ELF ${ZEPHYR_PREBUILT_EXECUTABLE}
OUTPUT_MAP ${PROJECT_BINARY_DIR}/${KERNEL_MAP_NAME}
OUTPUT_MAP ${PROJECT_BINARY_DIR}/${ZEPHYR_PREBUILT_EXECUTABLE}.map
LIBRARIES_PRE_SCRIPT ""
LINKER_SCRIPT ${PROJECT_BINARY_DIR}/linker.cmd
LIBRARIES_POST_SCRIPT ${PRIV_STACK_LIB}
Expand Down Expand Up @@ -1166,7 +1169,7 @@ else()
add_executable( ${ZEPHYR_FINAL_EXECUTABLE} misc/empty_file.c ${GKSF})
toolchain_ld_link_elf(
TARGET_ELF ${ZEPHYR_FINAL_EXECUTABLE}
OUTPUT_MAP ${PROJECT_BINARY_DIR}/${KERNEL_MAP_NAME}
OUTPUT_MAP ${PROJECT_BINARY_DIR}/${ZEPHYR_FINAL_EXECUTABLE}.map
LIBRARIES_PRE_SCRIPT ${GKOF}
LINKER_SCRIPT ${PROJECT_BINARY_DIR}/linker_pass_final.cmd
LIBRARIES_POST_SCRIPT ""
Expand All @@ -1183,7 +1186,7 @@ endif()
# application to know what the name of the final elf target is.
set(logical_target_for_zephyr_elf ${logical_target_for_zephyr_elf} PARENT_SCOPE)

# Override the base name of final .elf so:
# Override the base name of the last, "logical" .elf output (and last .map) so:
# 1. it doesn't depend on the number of passes above and the
# post_build_commands below can always find it no matter which is it;
# 2. it can be defined in Kconfig
Expand All @@ -1192,6 +1195,12 @@ set_target_properties(${logical_target_for_zephyr_elf} PROPERTIES OUTPUT_NAME ${
set(post_build_commands "")
set(post_build_byproducts "")

list(APPEND
post_build_commands
COMMAND
cmake -E rename ${logical_target_for_zephyr_elf}.map ${KERNEL_MAP_NAME}
)

if(NOT CONFIG_BUILD_NO_GAP_FILL)
# Use ';' as separator to get proper space in resulting command.
set(GAP_FILL "--gap-fill;0xff")
Expand Down

0 comments on commit 0370c9b

Please sign in to comment.