|
@@ -0,0 +1,87 @@
|
|
|
+import os
|
|
|
+import sys
|
|
|
+import shutil
|
|
|
+import yaml
|
|
|
+
|
|
|
+from SCons.Script import *
|
|
|
+
|
|
|
+# SCons AttachConfig Command Function
|
|
|
+def GenAttachConfigProject(program = None):
|
|
|
+ Rtt_Root = os.getcwd()
|
|
|
+ config_file = os.path.join(os.getcwd(), 'rtt_root', Rtt_Root, '.config')
|
|
|
+ config_bacakup = config_file+'.origin'
|
|
|
+ rtconfig_file = os.path.join(os.getcwd(), 'rtt_root', Rtt_Root, 'rtconfig.h')
|
|
|
+ rtconfig__bacakup = rtconfig_file+'.origin'
|
|
|
+ if GetOption('attach') == '?':
|
|
|
+ attachconfig=[]
|
|
|
+ GetAttachConfig("get",attachconfig,0)
|
|
|
+ print("\033[32m✅ AttachConfig has: \033[0m")
|
|
|
+ prefix=attachconfig[0]
|
|
|
+ for line in attachconfig:
|
|
|
+ temp_prefix=line.split(".", 1)
|
|
|
+ if prefix!=temp_prefix[0]:
|
|
|
+ print("\033[42m \033[30m------"+temp_prefix[0]+"------\033[0m")
|
|
|
+ prefix=temp_prefix[0]
|
|
|
+ print(line)
|
|
|
+
|
|
|
+
|
|
|
+ elif GetOption('attach') == 'default':
|
|
|
+ if os.path.exists(config_bacakup):
|
|
|
+ shutil.copyfile(config_bacakup, config_file)
|
|
|
+ os.remove(config_bacakup)
|
|
|
+ if os.path.exists(rtconfig__bacakup):
|
|
|
+ shutil.copyfile(rtconfig__bacakup, rtconfig_file)
|
|
|
+ os.remove(rtconfig__bacakup)
|
|
|
+ print("\033[32m✅ Default .config and rtconfig.h recovery success!\033[0m")
|
|
|
+ else:
|
|
|
+ attachconfig=GetOption('attach')
|
|
|
+ attachconfig_result=[]
|
|
|
+ GetAttachConfig("search",attachconfig,attachconfig_result)
|
|
|
+ if attachconfig_result==[]:
|
|
|
+ print("❌\033[31m Without this AttachConfig:"+attachconfig+"\033[0m")
|
|
|
+ return
|
|
|
+ if os.path.exists(config_bacakup)==False:
|
|
|
+ shutil.copyfile(config_file, config_bacakup)
|
|
|
+ if os.path.exists(rtconfig__bacakup)==False:
|
|
|
+ shutil.copyfile(rtconfig_file, rtconfig__bacakup)
|
|
|
+ with open(config_file, 'a') as destination:
|
|
|
+ for line in attachconfig_result:
|
|
|
+ destination.write(line + '\n')
|
|
|
+ from env_utility import defconfig
|
|
|
+ defconfig(Rtt_Root)
|
|
|
+ print("\033[32m✅ AttachConfig add success!\033[0m")
|
|
|
+
|
|
|
+def GetAttachConfig(action,attachconfig,attachconfig_result):
|
|
|
+ rtt_root = os.getcwd()
|
|
|
+ yml_files_content = []
|
|
|
+ directory = os.path.join(rtt_root, 'rtt_root', rtt_root, '.ci/attachconfig')
|
|
|
+ if os.path.exists(directory):
|
|
|
+ for root, dirs, files in os.walk(directory):
|
|
|
+ for filename in files:
|
|
|
+ if filename.endswith('attachconfig.yml'):
|
|
|
+ file_path = os.path.join(root, filename)
|
|
|
+ if os.path.exists(file_path):
|
|
|
+ try:
|
|
|
+ with open(file_path, 'r') as file:
|
|
|
+ content = yaml.safe_load(file)
|
|
|
+ if content is None:
|
|
|
+ continue
|
|
|
+ yml_files_content.append(content)
|
|
|
+ except yaml.YAMLError as e:
|
|
|
+ print(f"::error::Error parsing YAML file: {e}")
|
|
|
+ continue
|
|
|
+ except Exception as e:
|
|
|
+ print(f"::error::Error reading file: {e}")
|
|
|
+ continue
|
|
|
+ for projects in yml_files_content:
|
|
|
+ for name, details in projects.items():
|
|
|
+ if details.get("kconfig") is None:
|
|
|
+ continue
|
|
|
+ if(projects.get(name) is not None):
|
|
|
+ if action == "get":
|
|
|
+ attachconfig.append(name)
|
|
|
+ if action == "search" and name == attachconfig:
|
|
|
+ from ci.bsp_buildings import get_details_and_dependencies
|
|
|
+ detail_list=get_details_and_dependencies([name],projects)
|
|
|
+ for line in detail_list:
|
|
|
+ attachconfig_result.append(line)
|