blob: c9347c4f1d8d9c229473322e0e7560c4aae246c9 [file] [log] [blame]
Imre Kisa74aaf92021-12-14 17:13:06 +01001#-------------------------------------------------------------------------------
Imre Kis7dfd4972022-10-27 16:55:57 +02002# Copyright (c) 2020-2023, Arm Limited and Contributors. All rights reserved.
Imre Kisa74aaf92021-12-14 17:13:06 +01003#
4# SPDX-License-Identifier: BSD-3-Clause
5#
6#-------------------------------------------------------------------------------
7
Gyorgy Szingfd03e0a2023-07-27 20:04:24 +02008include(${CMAKE_CURRENT_LIST_DIR}/Uuid.cmake)
9
Imre Kisa74aaf92021-12-14 17:13:06 +010010#[===[.rst:
11.. cmake:command:: export_sp
12
13 .. code:: cmake
14
Imre Kis686bd272021-12-15 19:19:02 +010015 export_sp(
Jelle Sels4960c412023-02-01 09:43:24 +010016 SP_FFA_UUID_CANON <uuid_str_canon>
Balint Dobszayc9daea92022-06-15 15:17:11 +020017 SP_NAME <name> MK_IN <.mk path>
Gabor Toth7e4babe2024-03-14 11:09:19 +010018 SP_BOOT_ORDER <number>
Imre Kis686bd272021-12-15 19:19:02 +010019 DTS_IN <DTS path>
20 DTS_MEM_REGIONS <Memory region manifest path>
21 JSON_IN <JSON path>
22 )
Imre Kisa74aaf92021-12-14 17:13:06 +010023
24 INPUTS:
25
Jelle Sels4960c412023-02-01 09:43:24 +010026 ``SP_FFA_UUID_CANON``
27 The FF-A UUID of the SP as a canonical string.
Jelle Selsc85a0c22022-12-07 14:04:49 +010028
29 ``SP_BIN_UUID_CANON``
30 The UUID of the SP binary a canonical string. When not set use the
Jelle Sels4960c412023-02-01 09:43:24 +010031 SP_FFA_UUID_CANON as the SP_BIN_UUID_CANON.
Balint Dobszayc9daea92022-06-15 15:17:11 +020032
Gabor Toth7e4babe2024-03-14 11:09:19 +010033 ``SP_BOOT_ORDER``
34 Boot-order of the SP. 0 will be booted first.
35
Imre Kisa74aaf92021-12-14 17:13:06 +010036 ``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
Imre Kis686bd272021-12-15 19:19:02 +010045 `DTS_MEM_REGIONS`
46 Optional, Memory region manifest file
47
Imre Kisa74aaf92021-12-14 17:13:06 +010048 ``JSON_IN``
49 Optional, SP layout JSON file template for TF-A
50
51#]===]
52function (export_sp)
53 set(options)
Gabor Toth7e4babe2024-03-14 11:09:19 +010054 set(oneValueArgs SP_FFA_UUID_CANON SP_BIN_UUID_CANON SP_BOOT_ORDER SP_NAME MK_IN DTS_IN DTS_MEM_REGIONS JSON_IN)
Imre Kisa74aaf92021-12-14 17:13:06 +010055 set(multiValueArgs)
56 cmake_parse_arguments(EXPORT "${options}" "${oneValueArgs}"
57 "${multiValueArgs}" ${ARGN} )
58
Jelle Sels4960c412023-02-01 09:43:24 +010059 if(NOT DEFINED EXPORT_SP_FFA_UUID_CANON)
60 message(FATAL_ERROR "export_sp: mandatory parameter SP_FFA_UUID_CANON not defined!")
Balint Dobszayc9daea92022-06-15 15:17:11 +020061 endif()
Jelle Selsc85a0c22022-12-07 14:04:49 +010062 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
Jelle Sels4960c412023-02-01 09:43:24 +010064 set(EXPORT_SP_BIN_UUID_CANON ${EXPORT_SP_FFA_UUID_CANON})
Jelle Selsc85a0c22022-12-07 14:04:49 +010065 endif()
Gabor Toth7e4babe2024-03-14 11:09:19 +010066 if(NOT DEFINED EXPORT_SP_BOOT_ORDER)
67 message(FATAL_ERROR "export_sp: mandatory parameter SP_BOOT_ORDER not defined!")
68 endif()
Imre Kisa74aaf92021-12-14 17:13:06 +010069 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
Balint Dobszayc9daea92022-06-15 15:17:11 +020081 # In the SP manifest DT the UUID format is four uint32 numbers (little-endian)
Gyorgy Szingfd03e0a2023-07-27 20:04:24 +020082 # Create a litte endian 4 digit octests representation.
Jelle Sels4960c412023-02-01 09:43:24 +010083 uuid_canon_to_le_words(UUID ${EXPORT_SP_FFA_UUID_CANON} RES _le_words)
Gyorgy Szingfd03e0a2023-07-27 20:04:24 +020084 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}")
Imre Kisa74aaf92021-12-14 17:13:06 +010087
Imre Kisa74aaf92021-12-14 17:13:06 +010088 # 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 "/")
Jelle Selsc85a0c22022-12-07 14:04:49 +010092 configure_file(${EXPORT_DTS_IN} ${CMAKE_CURRENT_BINARY_DIR}/${EXPORT_SP_BIN_UUID_CANON}_before_preprocessing.dts @ONLY NEWLINE_STYLE UNIX)
Imre Kisa74aaf92021-12-14 17:13:06 +010093
Imre Kis7dfd4972022-10-27 16:55:57 +020094 compiler_preprocess_file(
Jelle Selsc85a0c22022-12-07 14:04:49 +010095 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
Imre Kis7dfd4972022-10-27 16:55:57 +020097 TARGET ${EXPORT_SP_NAME}
98 )
99
Jelle Selsc85a0c22022-12-07 14:04:49 +0100100 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()
Imre Kis686bd272021-12-15 19:19:02 +0100105
Imre Kisa74aaf92021-12-14 17:13:06 +0100106 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()
Imre Kis686bd272021-12-15 19:19:02 +0100110endfunction()