mirror of
https://github.com/RT-Thread/rt-thread.git
synced 2026-05-26 14:06:06 +08:00
[scons] ci.attachconfig.yml is used in combination with scons
This commit is contained in:
@@ -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)
|
||||||
+5
-1
@@ -33,7 +33,6 @@ import operator
|
|||||||
import rtconfig
|
import rtconfig
|
||||||
import platform
|
import platform
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
from SCons.Script import *
|
from SCons.Script import *
|
||||||
from utils import _make_path_relative
|
from utils import _make_path_relative
|
||||||
from mkdist import do_copy_file
|
from mkdist import do_copy_file
|
||||||
@@ -336,6 +335,11 @@ def PrepareBuilding(env, root_directory, has_libcpu=False, remove_components = [
|
|||||||
else:
|
else:
|
||||||
print('--global-macros arguments are illegal!')
|
print('--global-macros arguments are illegal!')
|
||||||
|
|
||||||
|
if GetOption('attach'):
|
||||||
|
from attachconfig import GenAttachConfigProject
|
||||||
|
GenAttachConfigProject()
|
||||||
|
exit(0)
|
||||||
|
|
||||||
if GetOption('genconfig'):
|
if GetOption('genconfig'):
|
||||||
from env_utility import genconfig
|
from env_utility import genconfig
|
||||||
genconfig()
|
genconfig()
|
||||||
|
|||||||
@@ -141,3 +141,10 @@ def AddOptions():
|
|||||||
action = 'store_true',
|
action = 'store_true',
|
||||||
default = False,
|
default = False,
|
||||||
help = 'make compile_commands.json')
|
help = 'make compile_commands.json')
|
||||||
|
AddOption('--attach',
|
||||||
|
dest = 'attach',
|
||||||
|
type = 'string',
|
||||||
|
help = 'View attachconfig or add attach to.config.'+\
|
||||||
|
'e.g. scons --attach=? View all attachconfig for the current bsp.'+\
|
||||||
|
' or scons --attach=component.cherryusb_cdc Set option component.cherryusb_cdc inside attachconfig to.config.'+\
|
||||||
|
' or scons --attach=default Restore.config and rtconfig to before attch was set.')
|
||||||
Reference in New Issue
Block a user