1#------------------------------------------------------------------------------- 2# Copyright (c) 2020-2023, Arm Limited and Contributors. All rights reserved. 3# 4# SPDX-License-Identifier: BSD-3-Clause 5# 6#------------------------------------------------------------------------------- 7 8include(${CMAKE_CURRENT_LIST_DIR}/Uuid.cmake) 9 10#[===[.rst: 11.. cmake:command:: export_sp 12 13 .. code:: cmake 14 15 export_sp( 16 SP_FFA_UUID_CANON <uuid_str_canon> 17 SP_NAME <name> MK_IN <.mk path> 18 SP_BOOT_ORDER <number> 19 DTS_IN <DTS path> 20 DTS_MEM_REGIONS <Memory region manifest path> 21 JSON_IN <JSON path> 22 ) 23 24 INPUTS: 25 26 ``SP_FFA_UUID_CANON`` 27 The FF-A UUID of the SP as a canonical string. 28 29 ``SP_BIN_UUID_CANON`` 30 The UUID of the SP binary a canonical string. When not set use the 31 SP_FFA_UUID_CANON as the SP_BIN_UUID_CANON. 32 33 ``SP_BOOT_ORDER`` 34 Boot-order of the SP. 0 will be booted first. 35 36 ``SP_NAME`` 37 The name of the SP. 38 39 ``MK_IN`` 40 Optional, Makefile template for OP-TEE build 41 42 ``DTS_IN`` 43 Manifest file template 44 45 `DTS_MEM_REGIONS` 46 Optional, Memory region manifest file 47 48 ``JSON_IN`` 49 Optional, SP layout JSON file template for TF-A 50 51#]===] 52function (export_sp) 53 set(options) 54 set(oneValueArgs SP_FFA_UUID_CANON SP_BIN_UUID_CANON SP_BOOT_ORDER SP_NAME MK_IN DTS_IN DTS_MEM_REGIONS JSON_IN) 55 set(multiValueArgs) 56 cmake_parse_arguments(EXPORT "${options}" "${oneValueArgs}" 57 "${multiValueArgs}" ${ARGN} ) 58 59 if(NOT DEFINED EXPORT_SP_FFA_UUID_CANON) 60 message(FATAL_ERROR "export_sp: mandatory parameter SP_FFA_UUID_CANON not defined!") 61 endif() 62 if(NOT DEFINED EXPORT_SP_BIN_UUID_CANON) 63 # We use the same UUID for the binary and FF-A if the UUID of the SP binary is not set 64 set(EXPORT_SP_BIN_UUID_CANON ${EXPORT_SP_FFA_UUID_CANON}) 65 endif() 66 if(NOT DEFINED EXPORT_SP_BOOT_ORDER) 67 message(FATAL_ERROR "export_sp: mandatory parameter SP_BOOT_ORDER not defined!") 68 endif() 69 if(NOT DEFINED EXPORT_SP_NAME) 70 message(FATAL_ERROR "export_sp: mandatory parameter SP_NAME not defined!") 71 endif() 72 if(NOT DEFINED EXPORT_DTS_IN) 73 message(FATAL_ERROR "export_sp: mandatory parameter DTS_IN not defined!") 74 endif() 75 76 if (DEFINED EXPORT_MK_IN) 77 configure_file(${EXPORT_MK_IN} ${CMAKE_CURRENT_BINARY_DIR}/${EXPORT_SP_NAME}.mk @ONLY NEWLINE_STYLE UNIX) 78 install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${EXPORT_SP_NAME}.mk DESTINATION ${TS_ENV}/lib/make) 79 endif() 80 81 # In the SP manifest DT the UUID format is four uint32 numbers (little-endian) 82 # Create a litte endian 4 digit octests representation. 83 uuid_canon_to_le_words(UUID ${EXPORT_SP_FFA_UUID_CANON} RES _le_words) 84 list(JOIN _le_words " 0x" _uuid_le) 85 set(SP_UUID_LE " 0x${_uuid_le}" PARENT_SCOPE) 86 set(EXPORT_SP_UUID_DT " 0x${_uuid_le}") 87 88 # The .dts file is a standalone structure, thus it should have the /dts-v1/ tag and it 89 # starts with the root node. 90 set(DTS_TAG "/dts-v1/;") 91 set(DTS_NODE "/") 92 configure_file(${EXPORT_DTS_IN} ${CMAKE_CURRENT_BINARY_DIR}/${EXPORT_SP_BIN_UUID_CANON}_before_preprocessing.dts @ONLY NEWLINE_STYLE UNIX) 93 94 compiler_preprocess_file( 95 SRC ${CMAKE_CURRENT_BINARY_DIR}/${EXPORT_SP_BIN_UUID_CANON}_before_preprocessing.dts 96 DST ${CMAKE_CURRENT_BINARY_DIR}/${EXPORT_SP_BIN_UUID_CANON}.dts 97 TARGET ${EXPORT_SP_NAME} 98 ) 99 100 install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${EXPORT_SP_BIN_UUID_CANON}.dts DESTINATION ${TS_ENV}/manifest) 101 102 if (DEFINED EXPORT_DTS_MEM_REGIONS) 103 install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${EXPORT_DTS_MEM_REGIONS} DESTINATION ${TS_ENV}/manifest) 104 endif() 105 106 if (DEFINED EXPORT_JSON_IN) 107 configure_file(${EXPORT_JSON_IN} ${CMAKE_CURRENT_BINARY_DIR}/${EXPORT_SP_NAME}.json @ONLY NEWLINE_STYLE UNIX) 108 install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${EXPORT_SP_NAME}.json DESTINATION ${TS_ENV}/json) 109 endif() 110endfunction() 111