mirror of
				https://github.com/espressif/esp-idf.git
				synced 2025-11-04 00:51:42 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			51 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			51 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
#!/usr/bin/env python
 | 
						|
# SPDX-FileCopyrightText: 2024 Espressif Systems (Shanghai) CO LTD
 | 
						|
# SPDX-License-Identifier: Apache-2.0
 | 
						|
import argparse
 | 
						|
import re
 | 
						|
import sys
 | 
						|
from typing import Dict
 | 
						|
from typing import Tuple
 | 
						|
 | 
						|
 | 
						|
def emit(nr: int, entry: str, nargs: str) -> str:
 | 
						|
    return f'__SECURE_SERVICE({nr}, {entry}, {nargs})'
 | 
						|
 | 
						|
 | 
						|
def main() -> None:
 | 
						|
    parser = argparse.ArgumentParser(description='Generate secure service table')
 | 
						|
    parser.add_argument('input_file', type=str, help='Path to input file')
 | 
						|
    parser.add_argument('output_file', type=str, help='Path to output file')
 | 
						|
    args = parser.parse_args()
 | 
						|
 | 
						|
    services: Dict[int, Tuple[str, str, str]] = {}
 | 
						|
    pattern: re.Pattern = re.compile(r'^([0-9A-Fa-fXx]+)\s+(\S+)\s+(\S+)\s+(\d+)')
 | 
						|
 | 
						|
    # Single pass through file to collect services and check duplicates
 | 
						|
    with open(args.input_file, 'r') as f:
 | 
						|
        for line in f:
 | 
						|
            if match := pattern.match(line):
 | 
						|
                nr = int(match.group(1))
 | 
						|
                if nr in services:
 | 
						|
                    print('ERROR: Found duplicate secure service numbers, exiting...')
 | 
						|
                    sys.exit(1)
 | 
						|
                services[nr] = (match.group(2), match.group(3), match.group(4))
 | 
						|
 | 
						|
    # Generate output
 | 
						|
    with open(args.output_file, 'w') as f:
 | 
						|
        f.write('''/**
 | 
						|
  * This header file is used to define secure services.
 | 
						|
  *
 | 
						|
  * THIS FILE WAS AUTOMATICALLY GENERATED. DO NOT EDIT!
 | 
						|
  */
 | 
						|
 | 
						|
#pragma once
 | 
						|
''')
 | 
						|
        for nr in sorted(services):
 | 
						|
            _, name, nargs = services[nr]
 | 
						|
            f.write(emit(nr, name, nargs) + '\n')
 | 
						|
 | 
						|
 | 
						|
if __name__ == '__main__':
 | 
						|
    main()
 |