mirror of
https://github.com/espressif/esp-idf.git
synced 2025-08-08 04:02:27 +00:00
feat(esp_tee): Support for ESP-TEE - the main
component
This commit is contained in:
76
components/esp_tee/scripts/secure_service_hdr.py
Normal file
76
components/esp_tee/scripts/secure_service_hdr.py
Normal file
@@ -0,0 +1,76 @@
|
||||
#!/usr/bin/env python
|
||||
# SPDX-FileCopyrightText: 2024 Espressif Systems (Shanghai) CO LTD
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
import argparse
|
||||
import re
|
||||
from typing import List
|
||||
from typing import Tuple
|
||||
|
||||
|
||||
def parse_services(secure_service_tbl: str) -> List[Tuple[str, str, str]]:
|
||||
services: List[Tuple[str, str, str]] = []
|
||||
pattern: re.Pattern = re.compile(r'^([0-9A-Fa-fXx]+)\s+\S+\s+(\S+)\s+(\d+)')
|
||||
with open(secure_service_tbl, 'r') as f:
|
||||
for line in f:
|
||||
if match := pattern.match(line):
|
||||
services.append((match.group(1), match.group(2), match.group(3)))
|
||||
return sorted(services, key=lambda x: int(x[0]))
|
||||
|
||||
|
||||
def generate_num_header(services: List[Tuple[str, str, str]], output_file: str) -> None:
|
||||
header_text: str = '''/**
|
||||
* This header file is used to generate secure service number macros.
|
||||
*
|
||||
* THIS FILE WAS AUTOMATICALLY GENERATED. DO NOT EDIT!
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
'''
|
||||
with open(output_file, 'w') as f:
|
||||
f.write(header_text)
|
||||
for nr, name, _ in services:
|
||||
f.write(f'#define SS_{name.upper()}\t{nr}\n')
|
||||
total: int = int(services[-1][0]) + 1 if services else 0
|
||||
f.write(f'\n#define MAX_SECURE_SERVICES\t{total}\n\n')
|
||||
|
||||
|
||||
def generate_dec_header(services: List[Tuple[str, str, str]], output_file: str) -> None:
|
||||
header_text: str = '''/**
|
||||
* This header file is used to provide function declarations
|
||||
* for compiling secure_service_table.c source file. Please do not
|
||||
* use it in application.
|
||||
*
|
||||
* THIS FILE WAS AUTOMATICALLY GENERATED. DO NOT EDIT!
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
'''
|
||||
with open(output_file, 'w') as f:
|
||||
f.write(header_text)
|
||||
for _, name, _ in services:
|
||||
f.write(f'void _ss_{name}(void);\n')
|
||||
f.write('''
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
''')
|
||||
|
||||
|
||||
def main() -> None:
|
||||
parser = argparse.ArgumentParser(description='Generate secure service headers')
|
||||
parser.add_argument('secure_service_tbl', type=str, help='Path to secure_service.tbl generated in build directory')
|
||||
parser.add_argument('secure_service_num_h', type=str, help='Path to secure_service_num.h header file')
|
||||
parser.add_argument('secure_service_dec_h', type=str, help='Path to secure_service_dec.h header file')
|
||||
args = parser.parse_args()
|
||||
|
||||
services: List[Tuple[str, str, str]] = parse_services(args.secure_service_tbl)
|
||||
generate_num_header(services, args.secure_service_num_h)
|
||||
generate_dec_header(services, args.secure_service_dec_h)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
Reference in New Issue
Block a user