150 lines
5.5 KiB
Python
Executable File
150 lines
5.5 KiB
Python
Executable File
#!/usr/bin/env python
|
|
# -*- coding: UTF-8 -*-
|
|
# Copyright (c) HiSilicon (Shanghai) Technologies Co., Ltd. 2023-2023. All rights reserved.
|
|
|
|
import os, sys, shutil
|
|
import argparse
|
|
from kconfiglib import Kconfig
|
|
from menuconfig import menuconfig
|
|
|
|
root_path = os.path.join(os.path.dirname(os.path.abspath(__file__)) + os.path.sep + ".", "..", "..")
|
|
|
|
def mconf_set_env(style, conf, config_header, autoheader_header, output_path = None):
|
|
"""
|
|
Set Kconfig Env
|
|
"""
|
|
os.environ["MENUCONFIG_STYLE"] = style
|
|
os.environ["KCONFIG_CONFIG"] = conf
|
|
os.environ["KCONFIG_CONFIG_HEADER"] = config_header
|
|
os.environ["KCONFIG_AUTOHEADER"] = os.path.join("." if output_path == None else output_path, "mconfig.h")
|
|
os.environ["KCONFIG_AUTOHEADER_HEADER"] = autoheader_header
|
|
os.environ["CONFIG_"] = "CONFIG_"
|
|
|
|
def mconfig(command, chip, core, target, output, assignments = None, root=""):
|
|
if not root:
|
|
root = root_path
|
|
|
|
kconfig = os.path.join(root, "config.in")
|
|
print(kconfig)
|
|
print(os.getcwd())
|
|
|
|
display_style = "default selection=fg:white,bg:blue"
|
|
target = target.replace('-', "_")
|
|
target_conf = os.path.join(root, "build", "config", "target_config", chip, "menuconfig", core, "%s.config" % target)
|
|
config_header = '''# Generated by Kconfig Tool.
|
|
# Note: !!!This file can not be modify manually!!!
|
|
'''
|
|
autoheader_header = '''/* Copyright (c) HiSilicon (Shanghai) Technologies Co., Ltd. 2022-2022. All rights reserved. */
|
|
'''
|
|
mconf_set_env(display_style, target_conf, config_header, autoheader_header, output)
|
|
kconf = Kconfig(filename=kconfig)
|
|
|
|
if command == 'savemenuconfig':
|
|
kconf.load_config()
|
|
print(kconf.write_autoconf()) # save menu config
|
|
elif command == 'defconfig':
|
|
kconf.load_allconfig("alldef.config")
|
|
print(kconf.write_config()) # default config
|
|
elif command == 'allyesconfig':
|
|
kconf.warn = False
|
|
for sym in kconf.unique_defined_syms:
|
|
sym.set_value(1 if sym.choice else 2)
|
|
for choice in kconf.unique_choices:
|
|
choice.set_value(2)
|
|
kconf.warn = True
|
|
kconf.load_allconfig("allyes.config")
|
|
print(kconf.write_config()) # all yes config
|
|
elif command == 'allnoconfig':
|
|
kconf.warn = False
|
|
for sym in kconf.unique_defined_syms:
|
|
sym.set_value(2 if sym.is_allnoconfig_y else 0)
|
|
kconf.warn = True
|
|
kconf.load_allconfig("allno.config")
|
|
print(kconf.write_config()) # all no config
|
|
elif command == 'setconfig':
|
|
kconf.load_config()
|
|
for arg in args.assignments:
|
|
if "=" not in arg:
|
|
sys.exit("error: no '=' in assignment: '{}'".format(arg))
|
|
name, value = arg.split("=", 1)
|
|
|
|
sym = kconf.syms[name]
|
|
|
|
if not sym.set_value(value):
|
|
sys.exit("error: '{}' is an invalid value for the {} symbol {}"
|
|
.format(value, kconfiglib.TYPE_TO_STR[sym.orig_type],
|
|
name))
|
|
|
|
print(kconf.write_config())
|
|
elif command == 'reloadconfig':
|
|
kconf.load_config()
|
|
print(kconf.write_config())
|
|
else:
|
|
menuconfig(kconf) # menu config
|
|
|
|
if __name__ == "__main__":
|
|
parser = argparse.ArgumentParser(
|
|
formatter_class=argparse.RawDescriptionHelpFormatter,
|
|
description=__doc__)
|
|
|
|
parser.add_argument(
|
|
"--command",
|
|
default="menuconfig",
|
|
choices=["menuconfig", "savemenuconfig", "defconfig", "allyesconfig", "allnoconfig", "setconfig", "openproject"],
|
|
help="command to be used")
|
|
|
|
parser.add_argument(
|
|
"--chip",
|
|
default="bs25",
|
|
help="chips: bs25/bs21/ws63/ws53 ...")
|
|
|
|
parser.add_argument(
|
|
"--core",
|
|
default="acore",
|
|
help="cores: acore/bcore/ccore ...")
|
|
|
|
parser.add_argument(
|
|
"--target",
|
|
default="standard-bs25-app-evb",
|
|
help="targets: standard-bs25-app-evb ...")
|
|
|
|
parser.add_argument(
|
|
"--output",
|
|
help="The path of the mconfig.h file will be stored.")
|
|
|
|
parser.add_argument(
|
|
"assignments",
|
|
metavar="ASSIGNMENT",
|
|
nargs="*",
|
|
help="A 'NAME=value' assignment")
|
|
|
|
args = parser.parse_args()
|
|
|
|
if args.command == "openproject":
|
|
if os.path.exists("board.json"):
|
|
if os.path.exists(root_path + "/board.json"):
|
|
root_path + "/board.json"
|
|
pass
|
|
shutil.copyfile("board.json", root_path + "/board.json")
|
|
|
|
current_path = os.getcwd()
|
|
current_sample = "SAMPLE_SUPPORT_" + os.path.basename(current_path).upper()
|
|
os.chdir(root_path)
|
|
args.command = "setconfig"
|
|
args.assignments.clear()
|
|
args.assignments.append("SAMPLE_ENABLE=n")
|
|
mconfig(args.command, args.chip, args.core, args.target, args.output, args.assignments, root_path)
|
|
args.assignments.clear()
|
|
args.assignments.append("SAMPLE_ENABLE=y")
|
|
if "peripheral" in current_path:
|
|
args.assignments.append("ENABLE_PERIPHERAL_SAMPLE=y")
|
|
elif "products" in current_path:
|
|
args.assignments.append("ENABLE_PRODUCTS_SAMPLE=y")
|
|
else:
|
|
print("Not a valid sample directory")
|
|
exit(1)
|
|
args.assignments.append(current_sample + "=y")
|
|
|
|
|
|
|
|
mconfig(args.command, args.chip, args.core, args.target, args.output, args.assignments, root_path) |