mirror of
https://github.com/projectacrn/acrn-hypervisor.git
synced 2025-06-20 12:42:54 +00:00
Check git environment only when '--enable_commit' option was set. Tracked-On: #3854 Signed-off-by: Wei Liu <weix.w.liu@intel.com> Acked-by: Victor Sun <victor.sun@intel.com>
176 lines
5.7 KiB
Python
Executable File
176 lines
5.7 KiB
Python
Executable File
# Copyright (C) 2019 Intel Corporation. All rights reserved.
|
|
#
|
|
# SPDX-License-Identifier: BSD-3-Clause
|
|
#
|
|
|
|
import os
|
|
import sys
|
|
import copy
|
|
sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), '..', 'library'))
|
|
from scenario_item import HwInfo, VmInfo
|
|
import scenario_cfg_lib
|
|
import vm_configurations_c
|
|
import vm_configurations_h
|
|
import pci_dev_c
|
|
|
|
ACRN_PATH = scenario_cfg_lib.SOURCE_ROOT_DIR
|
|
SCENARIO_PATH = ACRN_PATH + 'hypervisor/scenarios'
|
|
GEN_FILE = ["vm_configurations.h", "vm_configurations.c", "pci_dev.c"]
|
|
|
|
|
|
def get_scenario_item_values(board_info, scenario_info):
|
|
"""
|
|
Get items which capable multi select for user
|
|
:param board_info: it is a file what contains board information for script to read from
|
|
"""
|
|
scenario_item_values = {}
|
|
hw_info = HwInfo(board_info)
|
|
|
|
# get vm count
|
|
scenario_cfg_lib.SCENARIO_INFO_FILE = scenario_info
|
|
scenario_cfg_lib.BOARD_INFO_FILE = board_info
|
|
scenario_cfg_lib.VM_COUNT = scenario_cfg_lib.get_vm_num(scenario_info)
|
|
|
|
# pre scenario
|
|
guest_flags = copy.deepcopy(scenario_cfg_lib.GUEST_FLAG)
|
|
guest_flags.remove('0UL')
|
|
scenario_item_values["vm,vcpu_affinity"] = hw_info.get_processor_val()
|
|
scenario_item_values["vm,guest_flags"] = guest_flags
|
|
scenario_item_values["vm,clos"] = hw_info.get_clos_val()
|
|
scenario_item_values["vm,os_config,kern_type"] = scenario_cfg_lib.KERN_TYPE_LIST
|
|
scenario_item_values.update(scenario_cfg_lib.avl_vuart_ui_select(scenario_info))
|
|
|
|
# pre board_private
|
|
scenario_item_values["vm,board_private,rootfs"] = scenario_cfg_lib.get_rootdev_info(board_info)
|
|
scenario_item_values["vm,board_private,console"] = scenario_cfg_lib.get_ttys_info(board_info)
|
|
|
|
# os config
|
|
scenario_item_values["vm,os_config,rootfs"] = scenario_cfg_lib.get_rootdev_info(board_info)
|
|
|
|
return scenario_item_values
|
|
|
|
|
|
def validate_scenario_setting(board_info, scenario_info):
|
|
"""
|
|
This is validate the data setting from scenario xml
|
|
:param board_info: it is a file what contains board information for script to read from
|
|
:param scenario_info: it is a file what user have already setting to
|
|
:return: return a dictionary contain errors
|
|
"""
|
|
scenario_cfg_lib.ERR_LIST = {}
|
|
scenario_cfg_lib.BOARD_INFO_FILE = board_info
|
|
scenario_cfg_lib.SCENARIO_INFO_FILE = scenario_info
|
|
|
|
vm_info = VmInfo(board_info, scenario_info)
|
|
|
|
vm_info.get_info()
|
|
|
|
vm_info.check_item()
|
|
|
|
return (scenario_cfg_lib.ERR_LIST, vm_info)
|
|
|
|
|
|
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 = {}
|
|
config_srcs = []
|
|
|
|
(err_dic, board_info_file, scenario_info_file, enable_commit) = scenario_cfg_lib.get_param(args)
|
|
if err_dic:
|
|
return err_dic
|
|
|
|
# check env
|
|
err_dic = scenario_cfg_lib.prepare(enable_commit)
|
|
if err_dic:
|
|
return err_dic
|
|
|
|
scenario_cfg_lib.BOARD_INFO_FILE = board_info_file
|
|
scenario_cfg_lib.SCENARIO_INFO_FILE = scenario_info_file
|
|
|
|
# get scenario name
|
|
(err_dic, scenario) = scenario_cfg_lib.get_scenario_name()
|
|
if err_dic:
|
|
return err_dic
|
|
|
|
# check if this is the scenario config which matched board info
|
|
(err_dic, status) = scenario_cfg_lib.is_config_file_match()
|
|
if not status:
|
|
err_dic['scenario config: Not match'] = "The board xml and scenario xml should be matched!"
|
|
return err_dic
|
|
|
|
vm_config_h = SCENARIO_PATH + '/' + scenario + '/' + GEN_FILE[0]
|
|
vm_config_c = SCENARIO_PATH + '/' + scenario + '/' + GEN_FILE[1]
|
|
pci_config_c = SCENARIO_PATH + '/' + scenario + '/' + GEN_FILE[2]
|
|
|
|
config_srcs.append(vm_config_h)
|
|
config_srcs.append(vm_config_c)
|
|
if scenario == "logical_partition":
|
|
config_srcs.append(pci_config_c)
|
|
|
|
# parse the scenario.xml
|
|
get_scenario_item_values(board_info_file, scenario_info_file)
|
|
(err_dic, vm_info) = validate_scenario_setting(board_info_file, scenario_info_file)
|
|
if err_dic:
|
|
scenario_cfg_lib.print_red("Validate the scenario item failue", err=True)
|
|
return err_dic
|
|
|
|
# generate vm_configuration.h
|
|
with open(vm_config_h, 'w') as config:
|
|
vm_configurations_h.generate_file(scenario, vm_info, config)
|
|
|
|
# generate vm_configuration.c
|
|
with open(vm_config_c, 'w') as config:
|
|
err_dic = vm_configurations_c.generate_file(scenario, vm_info, config)
|
|
if err_dic:
|
|
return err_dic
|
|
|
|
# generate pci_dev.c if scenario is logical_partition
|
|
if scenario == 'logical_partition':
|
|
with open(pci_config_c, 'w') as config:
|
|
pci_dev_c.generate_file(config)
|
|
|
|
config_str = 'Config files'
|
|
gen_str = 'generated'
|
|
# move changes to patch, and apply to the source code
|
|
if enable_commit:
|
|
err_dic = scenario_cfg_lib.gen_patch(config_srcs, scenario)
|
|
config_str = 'Config patch'
|
|
gen_str = 'committed'
|
|
|
|
if not err_dic:
|
|
print("{} for {} is {} successfully!".format(config_str, scenario, gen_str))
|
|
else:
|
|
print("{} for {} is failed".format(config_str, scenario))
|
|
|
|
return err_dic
|
|
|
|
|
|
def ui_entry_api(board_info, scenario_info, enable_commit=False):
|
|
|
|
git_env_check = False
|
|
arg_list = ['board_cfg_gen.py', '--board', board_info, '--scenario', scenario_info]
|
|
if enable_commit:
|
|
arg_list.append('--enable_commit')
|
|
git_env_check = True
|
|
|
|
err_dic = scenario_cfg_lib.prepare(git_env_check)
|
|
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():
|
|
scenario_cfg_lib.print_red("{}: {}".format(err_k, err_v), err=True)
|
|
|