Skip to content

Commit 0e380ec

Browse files
committed
trusted-firmware-m: Use cmake_parse_arguments in tfm_sign
Use cmake_parse_arguments() for more idiomatic code. This makes the code more readable and easier to extend with new options. Signed-off-by: BUDKE Gerson Fernando <[email protected]>
1 parent 4625673 commit 0e380ec

File tree

1 file changed

+66
-31
lines changed

1 file changed

+66
-31
lines changed

modules/trusted-firmware-m/CMakeLists.txt

Lines changed: 66 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -502,45 +502,67 @@ if (CONFIG_BUILD_WITH_TFM)
502502
endif()
503503
endif()
504504

505-
function(tfm_sign OUT_ARG SUFFIX HEADER TRAILER CONFIRM MAX_SECTORS INPUT_FILE OUTPUT_FILE)
506-
if(HEADER AND TRAILER)
505+
function(tfm_sign OUT_ARG)
506+
set(options HEADER TRAILER CONFIRM)
507+
set(oneValueArgs SUFFIX MAX_SECTORS INPUT_FILE OUTPUT_FILE)
508+
set(multiValueArgs "")
509+
510+
cmake_parse_arguments(
511+
TFM_SIGN_ARG
512+
"${options}"
513+
"${oneValueArgs}"
514+
"${multiValueArgs}"
515+
${ARGN}
516+
)
517+
518+
if(NOT DEFINED TFM_SIGN_ARG_SUFFIX OR
519+
NOT DEFINED TFM_SIGN_ARG_INPUT_FILE OR
520+
NOT DEFINED TFM_SIGN_ARG_OUTPUT_FILE)
521+
message(FATAL_ERROR "SUFFIX, INPUT_FILE and OUTPUT_FILE are required arguments")
522+
endif()
523+
524+
set(pad_args "")
525+
if(TFM_SIGN_ARG_HEADER AND TFM_SIGN_ARG_TRAILER)
507526
set(pad_args --pad --pad-header)
508-
elseif(HEADER)
527+
elseif(TFM_SIGN_ARG_HEADER)
509528
set(pad_args --pad-header)
510-
elseif(TRAILER)
529+
elseif(TFM_SIGN_ARG_TRAILER)
511530
set(pad_args --pad)
512531
endif()
513-
if(CONFIRM)
514-
# --confirm imply PAD
532+
533+
set(confirm "")
534+
if(TFM_SIGN_ARG_CONFIRM)
515535
set(confirm --confirm)
516536
endif()
537+
517538
# Secure + Non-secure images are signed the same way as a secure only
518539
# build, but with a different layout file.
519-
set(layout_file ${PREPROCESSED_FILE_${SUFFIX}})
520-
if(SUFFIX STREQUAL "S_NS")
521-
set(SUFFIX "S")
540+
set(layout_file ${PREPROCESSED_FILE_${TFM_SIGN_ARG_SUFFIX}})
541+
if(TFM_SIGN_ARG_SUFFIX STREQUAL "S_NS")
542+
set(TFM_SIGN_ARG_SUFFIX "S")
522543
endif()
523-
set (${OUT_ARG}
544+
545+
set(${OUT_ARG}
524546
# Add the MCUBoot script to the path so that if there is a version of imgtool in there then
525547
# it gets used over the system imgtool. Used so that imgtool from upstream
526548
# mcuboot is preferred over system imgtool
527549
${CMAKE_COMMAND} -E env PYTHONPATH=${ZEPHYR_MCUBOOT_MODULE_DIR}/scripts
528550
${PYTHON_EXECUTABLE} ${TFM_MCUBOOT_DIR}/scripts/wrapper/wrapper.py
529551
--layout ${layout_file}
530-
-k ${CONFIG_TFM_KEY_FILE_${SUFFIX}}
552+
-k ${CONFIG_TFM_KEY_FILE_${TFM_SIGN_ARG_SUFFIX}}
531553
--public-key-format ${TFM_PUBLIC_KEY_FORMAT}
532554
--align ${image_alignment}
533-
--max-sectors ${MAX_SECTORS}
534-
-v ${CONFIG_TFM_IMAGE_VERSION_${SUFFIX}}
555+
--max-sectors ${TFM_SIGN_ARG_MAX_SECTORS}
556+
-v ${CONFIG_TFM_IMAGE_VERSION_${TFM_SIGN_ARG_SUFFIX}}
535557
${pad_args}
536558
${confirm}
537-
${HEX_ADDR_ARGS_${SUFFIX}}
538-
${ADD_${SUFFIX}_IMAGE_MIN_VER}
559+
${HEX_ADDR_ARGS_${TFM_SIGN_ARG_SUFFIX}}
560+
${ADD_${TFM_SIGN_ARG_SUFFIX}_IMAGE_MIN_VER}
539561
-s ${CONFIG_TFM_IMAGE_SECURITY_COUNTER}
540562
--measured-boot-record
541563
-H ${CONFIG_ROM_START_OFFSET}
542-
${INPUT_FILE}
543-
${OUTPUT_FILE}
564+
${TFM_SIGN_ARG_INPUT_FILE}
565+
${TFM_SIGN_ARG_OUTPUT_FILE}
544566
PARENT_SCOPE)
545567
endfunction()
546568

@@ -576,8 +598,9 @@ if (CONFIG_BUILD_WITH_TFM)
576598
)
577599

578600
elseif(CONFIG_TFM_MCUBOOT_IMAGE_NUMBER STREQUAL "1")
579-
tfm_sign(sign_cmd_s_ns_hex S_NS TRUE TRUE TRUE ${S_NS_MAX_SECTORS} ${S_NS_HEX_FILE}
580-
${S_NS_SIGNED_HEX_FILE})
601+
tfm_sign(sign_cmd_s_ns_hex SUFFIX "S_NS"
602+
HEADER TRAILER CONFIRM MAX_SECTORS ${S_NS_MAX_SECTORS}
603+
INPUT_FILE ${S_NS_HEX_FILE} OUTPUT_FILE ${S_NS_SIGNED_HEX_FILE})
581604

582605
set_property(GLOBAL APPEND PROPERTY extra_post_build_commands
583606
COMMAND ${PYTHON_EXECUTABLE} ${ZEPHYR_BASE}/scripts/build/mergehex.py
@@ -602,21 +625,33 @@ if (CONFIG_BUILD_WITH_TFM)
602625

603626
else()
604627
if (CONFIG_TFM_USE_NS_APP)
605-
tfm_sign(sign_cmd_ns_hex NS TRUE TRUE TRUE ${S_NS_MAX_SECTORS} ${NS_HEX_APP_FILE}
606-
${NS_SIGNED_HEX_FILE})
607-
tfm_sign(sign_cmd_ns_bin NS TRUE TRUE FALSE ${S_NS_MAX_SECTORS} ${NS_BIN_APP_FILE}
608-
${NS_SIGNED_BIN_FILE})
628+
tfm_sign(sign_cmd_ns_hex SUFFIX "NS"
629+
HEADER TRAILER CONFIRM MAX_SECTORS ${S_NS_MAX_SECTORS}
630+
INPUT_FILE ${NS_HEX_APP_FILE}
631+
OUTPUT_FILE ${NS_SIGNED_HEX_FILE})
632+
tfm_sign(sign_cmd_ns_bin SUFFIX "NS"
633+
HEADER TRAILER MAX_SECTORS ${S_NS_MAX_SECTORS}
634+
INPUT_FILE ${NS_BIN_APP_FILE}
635+
OUTPUT_FILE ${NS_SIGNED_BIN_FILE})
609636
else()
610-
tfm_sign(sign_cmd_ns NS FALSE TRUE TRUE ${S_NS_MAX_SECTORS} ${NS_HEX_APP_FILE}
611-
${NS_SIGNED_HEX_FILE})
612-
tfm_sign(sign_cmd_ns_bin NS FALSE FALSE FALSE ${S_NS_MAX_SECTORS} ${NS_BIN_APP_FILE}
613-
${NS_SIGNED_BIN_FILE})
637+
tfm_sign(sign_cmd_ns_hex SUFFIX "NS"
638+
TRAILER CONFIRM MAX_SECTORS ${S_NS_MAX_SECTORS}
639+
INPUT_FILE ${NS_HEX_APP_FILE}
640+
OUTPUT_FILE ${NS_SIGNED_HEX_FILE})
641+
tfm_sign(sign_cmd_ns_bin SUFFIX "NS"
642+
MAX_SECTORS ${S_NS_MAX_SECTORS}
643+
INPUT_FILE ${NS_BIN_APP_FILE}
644+
OUTPUT_FILE ${NS_SIGNED_BIN_FILE})
614645
endif()
615646

616-
tfm_sign(sign_cmd_s_hex S TRUE TRUE TRUE ${S_NS_MAX_SECTORS}
617-
$<TARGET_PROPERTY:tfm,TFM_S_HEX_FILE> ${S_SIGNED_HEX_FILE})
618-
tfm_sign(sign_cmd_s_bin S TRUE TRUE FALSE ${S_NS_MAX_SECTORS}
619-
$<TARGET_PROPERTY:tfm,TFM_S_BIN_FILE> ${S_SIGNED_BIN_FILE})
647+
tfm_sign(sign_cmd_s_hex SUFFIX "S"
648+
HEADER TRAILER CONFIRM MAX_SECTORS ${S_NS_MAX_SECTORS}
649+
INPUT_FILE $<TARGET_PROPERTY:tfm,TFM_S_HEX_FILE>
650+
OUTPUT_FILE ${S_SIGNED_HEX_FILE})
651+
tfm_sign(sign_cmd_s_bin SUFFIX "S"
652+
HEADER TRAILER MAX_SECTORS ${S_NS_MAX_SECTORS}
653+
INPUT_FILE $<TARGET_PROPERTY:tfm,TFM_S_BIN_FILE>
654+
OUTPUT_FILE ${S_SIGNED_BIN_FILE})
620655

621656
#Create and sign for concatenated binary image, should align with the TF-M BL2
622657
set_property(GLOBAL APPEND PROPERTY extra_post_build_commands

0 commit comments

Comments
 (0)