| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- # 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)
|