acrn-hypervisor/misc/config_tools/board_config/board_cfg_gen.py

130 lines
3.8 KiB
Python
Executable File

# Copyright (C) 2019-2022 Intel Corporation.
#
# SPDX-License-Identifier: BSD-3-Clause
#
import os
import sys
sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), '..', 'library'))
import board_cfg_lib
import board_c
import board_info_h
import pci_devices_h
import acpi_platform_h
import acrn_config_utilities
ACRN_PATH = acrn_config_utilities.SOURCE_ROOT_DIR
ACRN_CONFIG_DEF = ACRN_PATH + "misc/config_tools/data/"
ACRN_DEFAULT_ACPI = ACRN_PATH + "hypervisor/include/arch/x86/asm/default_acpi_info.h"
GEN_FILE = ["pci_devices.h", "board.c", "platform_acpi_info.h", "misc_cfg.h",
"board_info.h", "vbar_base.h"]
def main(args):
"""
This is main function to start generate source code related with board
:param args: it is a command line args for the script
"""
err_dic = {}
(err_dic, params) = acrn_config_utilities.get_param(args)
if err_dic:
return err_dic
# check env
err_dic = acrn_config_utilities.prepare()
if err_dic:
return err_dic
acrn_config_utilities.BOARD_INFO_FILE = params['--board']
acrn_config_utilities.SCENARIO_INFO_FILE = params['--scenario']
acrn_config_utilities.get_vm_num(params['--scenario'])
acrn_config_utilities.get_load_order()
if acrn_config_utilities.VM_COUNT > acrn_config_utilities.MAX_VM_NUM:
err_dic['vm count'] = "The number of VMs in the scenario XML file should be no greater than " \
"hv.CAPACITIES.MAX_VM_NUM. Its current value is {}.".format(acrn_config_utilities.MAX_VM_NUM)
return err_dic
# check if this is the scenario config which matched board info
# get board name
(err_dic, board) = acrn_config_utilities.get_board_name()
if err_dic:
return err_dic
(err_dic, scenario) = acrn_config_utilities.get_scenario_name()
if err_dic:
return err_dic
board_cfg_lib.BOARD_NAME = board
output = ''
if params['--out']:
if os.path.isabs(params['--out']):
output = params['--out']
else:
output = ACRN_PATH + params['--out']
else:
output = ACRN_CONFIG_DEF
board_fix_dir = os.path.join(output, "boards/")
scen_board_dir = os.path.join(output, "scenarios/" + scenario + "/")
acrn_config_utilities.mkdir(board_fix_dir)
acrn_config_utilities.mkdir(scen_board_dir)
config_pci = board_fix_dir + GEN_FILE[0]
config_board = board_fix_dir + GEN_FILE[1]
config_acpi = board_fix_dir + GEN_FILE[2]
config_board_h = board_fix_dir + GEN_FILE[4]
# generate pci_devices.h
with open(config_pci, 'w+') as config:
pci_devices_h.generate_file(config)
# generate board_info.h
with open(config_board_h, 'w+') as config:
err_dic = board_info_h.generate_file(config)
if err_dic:
return err_dic
# generate board.c
with open(config_board, 'w+') as config:
err_dic = board_c.generate_file(config)
if err_dic:
return err_dic
# generate platform_acpi_info.h
with open(config_acpi, 'w+') as config:
acpi_platform_h.generate_file(config, ACRN_DEFAULT_ACPI)
if not err_dic:
print("Board configurations for {} is generated successfully.".format(board))
else:
print("Board configurations for {} is generated failed.".format(board))
return err_dic
def ui_entry_api(board_info, scenario_info, out=''):
arg_list = ['board_cfg_gen.py', '--board', board_info, '--scenario', scenario_info, '--out', out]
err_dic = acrn_config_utilities.prepare()
if err_dic:
return err_dic
err_dic = main(arg_list)
return err_dic
if __name__ == '__main__':
ARGS = sys.argv
err_dic = main(ARGS)
if err_dic:
for err_k, err_v in err_dic.items():
acrn_config_utilities.print_red("{}: {}".format(err_k, err_v), err=True)
sys.exit(1 if err_dic else 0)