blob: 4bee3cbfa0b9ed5cf28bd71d285d00630c57eefd [file]
#!/usr/bin/env python3
import argparse
import os
import shutil
import subprocess
import logging
import coloredlogs
_LOG = logging.getLogger(__name__)
ROOT = 'examples/all-clusters-app/esp32'
idf_path = os.environ['IDF_PATH']
class IDFExecutor:
"""Runs specified commands via an executor that activates the CHIP build environment."""
def __init__(self):
script_path = os.path.dirname(os.path.realpath(__file__))
self.chip_root = os.path.realpath(
os.path.join(script_path, '..', '..'))
logging.info("CHIP Root directory: %s" % self.chip_root)
self.run_cmd = os.path.join(
self.chip_root, "scripts", "run_in_build_env.sh")
logging.info("Executing via: %s" % self.run_cmd)
def execute(self, command):
os.chdir(self.chip_root)
subprocess.call(
[self.run_cmd, 'source "%s/export.sh"; cd %s; idf.py %s' % (idf_path, ROOT, command)])
def main():
"""Main task if executed standalone."""
parser = argparse.ArgumentParser(
description='Build all-clusters-app example')
parser.add_argument(
'--log-level',
default=logging.INFO,
type=lambda x: getattr(logging, x),
help='Configure the logging level.')
parser.add_argument(
'--clear-config',
default=None,
choices=['m5stack', 'devkit', 'curr', 'default'],
)
parser.add_argument(
'--generate-flash-script',
action='store_true',
)
args = parser.parse_args()
# Ensures somewhat pretty logging of what is going on
logging.basicConfig(
level=args.log_level,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
coloredlogs.install()
e = IDFExecutor()
if args.clear_config:
old_default_sdkconfig = None
clear_curr = args.clear_config != 'curr'
logging.info('Building a clear configuration')
if args.clear_config == "m5stack" or args.clear_config == "devkit":
desired_sdkconfig_name = 'sdkconfig_%s.defaults' % args.clear_config
logging.info('Using default' + desired_sdkconfig_name)
desired_sdkconfig = os.path.join(ROOT, desired_sdkconfig_name)
default_sdkconfig = os.path.join(ROOT, 'sdkconfig.defaults')
old_default_sdkconfig = os.path.join(
ROOT, 'sdkconfig.defaults.old')
shutil.copy(default_sdkconfig, old_default_sdkconfig)
shutil.copy(desired_sdkconfig, default_sdkconfig)
if clear_curr:
logging.info('Clearing current config')
sdkconfig = os.path.join(ROOT, 'sdkconfig')
os.remove(sdkconfig)
e.execute('menuconfig')
if old_default_sdkconfig is not None:
shutil.move(old_default_sdkconfig, default_sdkconfig)
logging.info('Compiling')
e.execute('build')
logging.info('Generating flash script')
if args.generate_flash_script:
e.execute('flashing_script')
if __name__ == '__main__':
# execute only if run as a script
main()