From f8ea6c652744b71aabfa3016792501f5c43b958b Mon Sep 17 00:00:00 2001 From: Bernard Xiong Date: Mon, 11 Nov 2024 09:14:53 +0800 Subject: [PATCH] [tools] add project.json generation in vsc.py. (#9632) * [tools] fix the SDK path issue in env script. * [tools] add project.json generation in vsc.py. * [tools] provide correct and clear comments in vsc.py --- tools/vsc.py | 42 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) diff --git a/tools/vsc.py b/tools/vsc.py index bbb0debc6c..7d23f17958 100644 --- a/tools/vsc.py +++ b/tools/vsc.py @@ -30,6 +30,7 @@ import os import json import utils import rtconfig + from utils import _make_path_relative def delete_repeatelist(data): @@ -39,7 +40,7 @@ def delete_repeatelist(data): def GenerateCFiles(env): """ - Generate c_cpp_properties files + Generate c_cpp_properties.json and build/compile_commands.json files """ if not os.path.exists('.vscode'): os.mkdir('.vscode') @@ -113,8 +114,47 @@ def GenerateCFiles(env): vsc_space_file.close() return +def GenerateProjectFiles(env): + """ + Generate project.json file + """ + if not os.path.exists('.vscode'): + os.mkdir('.vscode') + + project = env['project'] + vsc_file = open('.vscode/project.json', 'w') + if vsc_file: + groups = [] + for group in project: + if len(group['src']) > 0: + item = {} + item['name'] = group['name'] + item['path'] = _make_path_relative(os.getcwd(), group['path']) + item['files'] = [] + + for fn in group['src']: + item['files'].append(str(fn)) + + # append SConscript if exist + if os.path.exists(os.path.join(item['path'], 'SConscript')): + item['files'].append(os.path.join(item['path'], 'SConscript')) + + groups.append(item) + + json_dict = {} + json_dict['RT-Thread'] = env['RTT_ROOT'] + json_dict['Groups'] = groups + + # write groups to project.json + vsc_file.write(json.dumps(json_dict, ensure_ascii=False, indent=4)) + vsc_file.close() + + return + def GenerateVSCode(env): print('Update setting files for VSCode...') + + GenerateProjectFiles(env) GenerateCFiles(env) print('Done!')