mirror of
				https://github.com/espressif/esp-idf.git
				synced 2025-11-04 09:01:40 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			64 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			64 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
# Extension to generate the KConfig reference list
 | 
						|
import os.path
 | 
						|
import subprocess
 | 
						|
import sys
 | 
						|
 | 
						|
from .util import copy_if_modified
 | 
						|
 | 
						|
 | 
						|
def setup(app):
 | 
						|
    # The idf_build_system extension will emit this event once it
 | 
						|
    # has parsed the IDF project's information
 | 
						|
    app.connect('idf-info', generate_reference)
 | 
						|
 | 
						|
    return {'parallel_read_safe': True, 'parallel_write_safe': True, 'version': '0.1'}
 | 
						|
 | 
						|
 | 
						|
def generate_reference(app, project_description):
 | 
						|
    build_dir = os.path.dirname(app.doctreedir.rstrip(os.sep))
 | 
						|
 | 
						|
    # Generate 'kconfig.inc' file from components' Kconfig files
 | 
						|
    print('Generating kconfig.inc from kconfig contents')
 | 
						|
    kconfig_inc_path = '{}/inc/kconfig.inc'.format(build_dir)
 | 
						|
    temp_sdkconfig_path = '{}/sdkconfig.tmp'.format(build_dir)
 | 
						|
 | 
						|
    kconfigs = project_description['config_environment']['COMPONENT_KCONFIGS'].split(';')
 | 
						|
    kconfig_projbuilds = project_description['config_environment']['COMPONENT_KCONFIGS_PROJBUILD'].split(';')
 | 
						|
 | 
						|
    sdkconfig_renames = set()
 | 
						|
    # TODO: this should be generated in project description as well, if possible
 | 
						|
    for k in kconfigs + kconfig_projbuilds:
 | 
						|
        component_dir = os.path.dirname(k)
 | 
						|
        sdkconfig_rename = os.path.join(component_dir, 'sdkconfig.rename')
 | 
						|
        if os.path.exists(sdkconfig_rename):
 | 
						|
            sdkconfig_renames.add(sdkconfig_rename)
 | 
						|
 | 
						|
    kconfigs_source_path = '{}/inc/kconfigs_source.in'.format(build_dir)
 | 
						|
    kconfig_projbuilds_source_path = '{}/inc/kconfig_projbuilds_source.in'.format(build_dir)
 | 
						|
 | 
						|
    prepare_kconfig_files_args = [sys.executable,
 | 
						|
                                  '{}/tools/kconfig_new/prepare_kconfig_files.py'.format(app.config.idf_path),
 | 
						|
                                  '--env', 'COMPONENT_KCONFIGS={}'.format(' '.join(kconfigs)),
 | 
						|
                                  '--env', 'COMPONENT_KCONFIGS_PROJBUILD={}'.format(' '.join(kconfig_projbuilds)),
 | 
						|
                                  '--env', 'COMPONENT_KCONFIGS_SOURCE_FILE={}'.format(kconfigs_source_path),
 | 
						|
                                  '--env', 'COMPONENT_KCONFIGS_PROJBUILD_SOURCE_FILE={}'.format(kconfig_projbuilds_source_path),
 | 
						|
                                  ]
 | 
						|
    subprocess.check_call(prepare_kconfig_files_args)
 | 
						|
 | 
						|
    confgen_args = [sys.executable,
 | 
						|
                    '{}/tools/kconfig_new/confgen.py'.format(app.config.idf_path),
 | 
						|
                    '--kconfig', './Kconfig',
 | 
						|
                    '--sdkconfig-rename', './sdkconfig.rename',
 | 
						|
                    '--config', temp_sdkconfig_path,
 | 
						|
                    '--env', 'COMPONENT_KCONFIGS={}'.format(' '.join(kconfigs)),
 | 
						|
                    '--env', 'COMPONENT_KCONFIGS_PROJBUILD={}'.format(' '.join(kconfig_projbuilds)),
 | 
						|
                    '--env', 'COMPONENT_SDKCONFIG_RENAMES={}'.format(' '.join(sdkconfig_renames)),
 | 
						|
                    '--env', 'COMPONENT_KCONFIGS_SOURCE_FILE={}'.format(kconfigs_source_path),
 | 
						|
                    '--env', 'COMPONENT_KCONFIGS_PROJBUILD_SOURCE_FILE={}'.format(kconfig_projbuilds_source_path),
 | 
						|
                    '--env', 'IDF_PATH={}'.format(app.config.idf_path),
 | 
						|
                    '--env', 'IDF_TARGET={}'.format(app.config.idf_target),
 | 
						|
                    '--output', 'docs', kconfig_inc_path + '.in'
 | 
						|
                    ]
 | 
						|
    subprocess.check_call(confgen_args, cwd=app.config.idf_path)
 | 
						|
    copy_if_modified(kconfig_inc_path + '.in', kconfig_inc_path)
 |