Skip to content
Permalink
Browse files

cmake: Toolchain abstraction: Abstraction of binary tool, strip.

This abstracts the interface for generation of the strip command
line, by naming the desired actions instead of directly setting the
command parameters, which then opens up for other binary tool sets
which may require different arguments to achieve the desired result.

The intent here is to abstract Zephyr's dependence on toolchains,
thus allowing for easier porting to other, perhaps commercial,
toolchains and/or usecases.

No functional change expected.

Signed-off-by: Danny Oerndrup <daor@demant.com>
  • Loading branch information...
daor-oti authored and aescolar committed Aug 1, 2019
1 parent 919df01 commit 9336e3ee2cbf3da70f2634822c99e344ff51bb65
@@ -1377,14 +1377,23 @@ if(CONFIG_OUTPUT_STAT)
endif()

if(CONFIG_BUILD_OUTPUT_STRIPPED)
set(out_stripped_cmd "")
set(out_stripped_byprod "")
bintools_strip(
RESULT_CMD_LIST out_stripped_cmd
RESULT_BYPROD_LIST out_stripped_byprod
STRIP_ALL
FILE_INPUT ${KERNEL_ELF_NAME}
FILE_OUTPUT ${KERNEL_STRIP_NAME}
)
list(APPEND
post_build_commands
COMMAND
${CMAKE_STRIP} --strip-all ${KERNEL_ELF_NAME} -o ${KERNEL_STRIP_NAME}
${out_stripped_cmd}
)
list(APPEND
post_build_byproducts
${KERNEL_STRIP_NAME}
${out_stripped_byprod}
)
endif()

@@ -18,3 +18,4 @@ include(${ZEPHYR_BASE}/cmake/bintools/gnu/target_memusage.cmake)
include(${ZEPHYR_BASE}/cmake/bintools/gnu/target_objcopy.cmake)
include(${ZEPHYR_BASE}/cmake/bintools/gnu/target_objdump.cmake)
include(${ZEPHYR_BASE}/cmake/bintools/gnu/target_readelf.cmake)
include(${ZEPHYR_BASE}/cmake/bintools/gnu/target_strip.cmake)
@@ -0,0 +1,62 @@
# SPDX-License-Identifier: Apache-2.0

# Construct a commandline suitable for calling the toolchain binary tools
# version of strip.
#
# Usage:
# bintools_strip(
# RESULT_CMD_LIST <List of commands to be executed, usually after build>
# RESULT_BYPROD_LIST <List of command output byproducts>
#
# STRIP_ALL <When present, remove relocation and symbol info>
# STRIP_DEBUG <When present, remove debugging symbols and sections>
# STRIP_DWO <When present, remove DWARF .dwo sections>
#
# FILE_INPUT <The input file>
# FILE_OUTPUT <The output file>
# )
function(bintools_strip)
cmake_parse_arguments(
# Prefix of output variables
BINTOOLS_STRIP
# List of argument names without values, hence boolean
"STRIP_ALL;STRIP_DEBUG;STRIP_DWO"
# List of argument names with one value
"RESULT_CMD_LIST;RESULT_BYPROD_LIST;FILE_INPUT;FILE_OUTPUT"
# List of argument names with multible values
""
# Parser input
${ARGN}
)

if(NOT DEFINED BINTOOLS_STRIP_RESULT_CMD_LIST OR NOT DEFINED ${BINTOOLS_STRIP_RESULT_CMD_LIST})
message(FATAL_ERROR "RESULT_CMD_LIST is required.")
elseif(NOT DEFINED BINTOOLS_STRIP_FILE_INPUT OR NOT DEFINED BINTOOLS_STRIP_FILE_OUTPUT)
message(FATAL_ERROR "Both FILE_INPUT and FILE_OUTPUT are required.")
endif()

# Handle stripping
set(strip_what "")
if(${BINTOOLS_STRIP_STRIP_ALL})
set(strip_what "--strip-all")
elseif(${BINTOOLS_STRIP_STRIP_DEBUG})
set(strip_what "--strip-debug")
elseif(${BINTOOLS_STRIP_STRIP_DWO})
set(strip_what "--strip-dwo")
endif()

# Handle output
set(strip_output -o ${BINTOOLS_STRIP_FILE_OUTPUT})

# Construct the command
set(strip_cmd
# Base command
COMMAND ${CMAKE_STRIP} ${strip_what}
# Input and Output
${BINTOOLS_STRIP_FILE_INPUT} ${strip_output}
)

# Place command in the parent provided variable
set(${BINTOOLS_STRIP_RESULT_CMD_LIST} ${strip_cmd} PARENT_SCOPE)

endfunction(bintools_strip)
@@ -15,3 +15,4 @@ include(${ZEPHYR_BASE}/cmake/bintools/gnu/target_memusage.cmake)
include(${ZEPHYR_BASE}/cmake/bintools/gnu/target_objcopy.cmake)
include(${ZEPHYR_BASE}/cmake/bintools/gnu/target_objdump.cmake)
include(${ZEPHYR_BASE}/cmake/bintools/gnu/target_readelf.cmake)
include(${ZEPHYR_BASE}/cmake/bintools/gnu/target_strip.cmake)
@@ -19,3 +19,4 @@ include(${ZEPHYR_BASE}/cmake/bintools/gnu/target_memusage.cmake)
include(${ZEPHYR_BASE}/cmake/bintools/gnu/target_objcopy.cmake)
include(${ZEPHYR_BASE}/cmake/bintools/gnu/target_objdump.cmake)
include(${ZEPHYR_BASE}/cmake/bintools/gnu/target_readelf.cmake)
include(${ZEPHYR_BASE}/cmake/bintools/gnu/target_strip.cmake)

0 comments on commit 9336e3e

Please sign in to comment.
You can’t perform that action at this time.