summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorbernard <[email protected]>2025-06-30 06:17:18 +0800
committerRbb666 <[email protected]>2025-07-08 09:29:13 +0800
commit1a07d6926b684fd165651f8b6e2a3abc15c5ec75 (patch)
tree5207e6117f3498a161049dff4c405f94f8a8d713 /tools
parent935e1b1db1b472e945252ff62f69bf83feecb321 (diff)
[tools] add vsc_workspace target in scons.
Diffstat (limited to 'tools')
-rw-r--r--tools/building.py7
-rw-r--r--tools/options.py2
-rw-r--r--tools/targets/vsc.py64
3 files changed, 68 insertions, 5 deletions
diff --git a/tools/building.py b/tools/building.py
index f73c30d9b3..6e26a19e5f 100644
--- a/tools/building.py
+++ b/tools/building.py
@@ -58,6 +58,8 @@ def PrepareBuilding(env, root_directory, has_libcpu=False, remove_components = [
AddOptions()
Env = env
+ # export the default environment
+ Export('env')
# prepare logging and set log
logging.basicConfig(level=logging.INFO, format="%(message)s")
@@ -89,6 +91,7 @@ def PrepareBuilding(env, root_directory, has_libcpu=False, remove_components = [
'vs':('msvc', 'cl'),
'vs2012':('msvc', 'cl'),
'vsc' : ('gcc', 'gcc'),
+ 'vsc_workspace':('gcc', 'gcc'),
'cb':('keil', 'armcc'),
'ua':('gcc', 'gcc'),
'cdk':('gcc', 'gcc'),
@@ -848,6 +851,10 @@ def GenTargetProject(program = None):
from vscpyocd import GenerateVSCodePyocdConfig
GenerateVSCodePyocdConfig(GetOption('cmsispack'))
+ if GetOption('target') == 'vsc_workspace':
+ from targets.vsc import GenerateVSCodeWorkspace
+ GenerateVSCodeWorkspace(Env)
+
if GetOption('target') == 'cdk':
from targets.cdk import CDKProject
CDKProject(GetOption('project-name') + '.cdkproj', Projects)
diff --git a/tools/options.py b/tools/options.py
index 2a19e1ac0e..38bdb2f81b 100644
--- a/tools/options.py
+++ b/tools/options.py
@@ -73,7 +73,7 @@ def AddOptions():
AddOption('--target',
dest = 'target',
type = 'string',
- help = 'set target project: mdk/mdk4/mdk5/iar/vs/vsc/ua/cdk/ses/makefile/eclipse/codelite/cmake')
+ help = 'set target project: mdk/mdk4/mdk5/iar/vs/vsc/ua/cdk/ses/makefile/eclipse/codelite/cmake/vsc_workspace')
AddOption('--cmsispack',
dest = 'cmsispack',
type = 'string',
diff --git a/tools/targets/vsc.py b/tools/targets/vsc.py
index c005bcf053..31718ba944 100644
--- a/tools/targets/vsc.py
+++ b/tools/targets/vsc.py
@@ -30,6 +30,7 @@ import os
import json
import utils
import rtconfig
+from SCons.Script import *
from utils import _make_path_relative
def find_first_node_with_two_children(tree):
@@ -216,14 +217,14 @@ def GenerateCFiles(env):
cc = os.path.abspath(cc).replace('\\', '/')
config_obj = {}
- config_obj['name'] = 'rt-thread'
+ config_obj['name'] = 'Linux'
config_obj['defines'] = info['CPPDEFINES']
- intelliSenseMode = 'gcc-arm'
+ intelliSenseMode = 'linux-gcc-arm'
if cc.find('aarch64') != -1:
- intelliSenseMode = 'gcc-arm64'
+ intelliSenseMode = 'linux-gcc-arm64'
elif cc.find('arm') != -1:
- intelliSenseMode = 'gcc-arm'
+ intelliSenseMode = 'linux-gcc-arm'
config_obj['intelliSenseMode'] = intelliSenseMode
config_obj['compilerPath'] = cc
config_obj['cStandard'] = "c99"
@@ -338,3 +339,58 @@ def GenerateVSCode(env):
print('Done!')
return
+
+def GenerateVSCodeWorkspace(env):
+ """
+ Generate vscode.code files
+ """
+ print('Update workspace files for VSCode...')
+
+ # get the launch directory
+ cwd = GetLaunchDir()
+
+ # check if .vscode folder exists, if not, create it
+ if not os.path.exists(os.path.join(cwd, '.vscode')):
+ os.mkdir(os.path.join(cwd, '.vscode'))
+
+ vsc_file = open(os.path.join(cwd, '.vscode/c_cpp_properties.json'), 'w')
+ if vsc_file:
+ info = utils.ProjectInfo(env)
+
+ cc = os.path.join(rtconfig.EXEC_PATH, rtconfig.CC)
+ cc = os.path.abspath(cc).replace('\\', '/')
+
+ config_obj = {}
+ config_obj['name'] = 'Linux'
+ config_obj['defines'] = info['CPPDEFINES']
+
+ intelliSenseMode = 'linux-gcc-arm'
+ if cc.find('aarch64') != -1:
+ intelliSenseMode = 'linux-gcc-arm64'
+ elif cc.find('arm') != -1:
+ intelliSenseMode = 'linux-gcc-arm'
+ config_obj['intelliSenseMode'] = intelliSenseMode
+ config_obj['compilerPath'] = cc
+ config_obj['cStandard'] = "c99"
+ config_obj['cppStandard'] = "c++11"
+
+ # format "a/b," to a/b. remove first quotation mark("),and remove end (",)
+ includePath = []
+ for i in info['CPPPATH']:
+ if i[0] == '\"' and i[len(i) - 2:len(i)] == '\",':
+ includePath.append(_make_path_relative(cwd, i[1:len(i) - 2]))
+ else:
+ includePath.append(_make_path_relative(cwd, i))
+ # make sort for includePath
+ includePath = sorted(includePath, key=lambda x: x.lower())
+ config_obj['includePath'] = includePath
+
+ json_obj = {}
+ json_obj['configurations'] = [config_obj]
+
+ vsc_file.write(json.dumps(json_obj, ensure_ascii=False, indent=4))
+ vsc_file.close()
+
+ print('Done!')
+
+ return