Skip to content

Commit 1a07d69

Browse files
BernardXiongRbb666
authored andcommitted
[tools] add vsc_workspace target in scons.
1 parent 935e1b1 commit 1a07d69

File tree

3 files changed

+68
-5
lines changed

3 files changed

+68
-5
lines changed

tools/building.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,8 @@ def PrepareBuilding(env, root_directory, has_libcpu=False, remove_components = [
5858
AddOptions()
5959

6060
Env = env
61+
# export the default environment
62+
Export('env')
6163

6264
# prepare logging and set log
6365
logging.basicConfig(level=logging.INFO, format="%(message)s")
@@ -89,6 +91,7 @@ def PrepareBuilding(env, root_directory, has_libcpu=False, remove_components = [
8991
'vs':('msvc', 'cl'),
9092
'vs2012':('msvc', 'cl'),
9193
'vsc' : ('gcc', 'gcc'),
94+
'vsc_workspace':('gcc', 'gcc'),
9295
'cb':('keil', 'armcc'),
9396
'ua':('gcc', 'gcc'),
9497
'cdk':('gcc', 'gcc'),
@@ -848,6 +851,10 @@ def GenTargetProject(program = None):
848851
from vscpyocd import GenerateVSCodePyocdConfig
849852
GenerateVSCodePyocdConfig(GetOption('cmsispack'))
850853

854+
if GetOption('target') == 'vsc_workspace':
855+
from targets.vsc import GenerateVSCodeWorkspace
856+
GenerateVSCodeWorkspace(Env)
857+
851858
if GetOption('target') == 'cdk':
852859
from targets.cdk import CDKProject
853860
CDKProject(GetOption('project-name') + '.cdkproj', Projects)

tools/options.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ def AddOptions():
7373
AddOption('--target',
7474
dest = 'target',
7575
type = 'string',
76-
help = 'set target project: mdk/mdk4/mdk5/iar/vs/vsc/ua/cdk/ses/makefile/eclipse/codelite/cmake')
76+
help = 'set target project: mdk/mdk4/mdk5/iar/vs/vsc/ua/cdk/ses/makefile/eclipse/codelite/cmake/vsc_workspace')
7777
AddOption('--cmsispack',
7878
dest = 'cmsispack',
7979
type = 'string',

tools/targets/vsc.py

Lines changed: 60 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import json
3131
import utils
3232
import rtconfig
33+
from SCons.Script import *
3334

3435
from utils import _make_path_relative
3536
def find_first_node_with_two_children(tree):
@@ -216,14 +217,14 @@ def GenerateCFiles(env):
216217
cc = os.path.abspath(cc).replace('\\', '/')
217218

218219
config_obj = {}
219-
config_obj['name'] = 'rt-thread'
220+
config_obj['name'] = 'Linux'
220221
config_obj['defines'] = info['CPPDEFINES']
221222

222-
intelliSenseMode = 'gcc-arm'
223+
intelliSenseMode = 'linux-gcc-arm'
223224
if cc.find('aarch64') != -1:
224-
intelliSenseMode = 'gcc-arm64'
225+
intelliSenseMode = 'linux-gcc-arm64'
225226
elif cc.find('arm') != -1:
226-
intelliSenseMode = 'gcc-arm'
227+
intelliSenseMode = 'linux-gcc-arm'
227228
config_obj['intelliSenseMode'] = intelliSenseMode
228229
config_obj['compilerPath'] = cc
229230
config_obj['cStandard'] = "c99"
@@ -338,3 +339,58 @@ def GenerateVSCode(env):
338339
print('Done!')
339340

340341
return
342+
343+
def GenerateVSCodeWorkspace(env):
344+
"""
345+
Generate vscode.code files
346+
"""
347+
print('Update workspace files for VSCode...')
348+
349+
# get the launch directory
350+
cwd = GetLaunchDir()
351+
352+
# check if .vscode folder exists, if not, create it
353+
if not os.path.exists(os.path.join(cwd, '.vscode')):
354+
os.mkdir(os.path.join(cwd, '.vscode'))
355+
356+
vsc_file = open(os.path.join(cwd, '.vscode/c_cpp_properties.json'), 'w')
357+
if vsc_file:
358+
info = utils.ProjectInfo(env)
359+
360+
cc = os.path.join(rtconfig.EXEC_PATH, rtconfig.CC)
361+
cc = os.path.abspath(cc).replace('\\', '/')
362+
363+
config_obj = {}
364+
config_obj['name'] = 'Linux'
365+
config_obj['defines'] = info['CPPDEFINES']
366+
367+
intelliSenseMode = 'linux-gcc-arm'
368+
if cc.find('aarch64') != -1:
369+
intelliSenseMode = 'linux-gcc-arm64'
370+
elif cc.find('arm') != -1:
371+
intelliSenseMode = 'linux-gcc-arm'
372+
config_obj['intelliSenseMode'] = intelliSenseMode
373+
config_obj['compilerPath'] = cc
374+
config_obj['cStandard'] = "c99"
375+
config_obj['cppStandard'] = "c++11"
376+
377+
# format "a/b," to a/b. remove first quotation mark("),and remove end (",)
378+
includePath = []
379+
for i in info['CPPPATH']:
380+
if i[0] == '\"' and i[len(i) - 2:len(i)] == '\",':
381+
includePath.append(_make_path_relative(cwd, i[1:len(i) - 2]))
382+
else:
383+
includePath.append(_make_path_relative(cwd, i))
384+
# make sort for includePath
385+
includePath = sorted(includePath, key=lambda x: x.lower())
386+
config_obj['includePath'] = includePath
387+
388+
json_obj = {}
389+
json_obj['configurations'] = [config_obj]
390+
391+
vsc_file.write(json.dumps(json_obj, ensure_ascii=False, indent=4))
392+
vsc_file.close()
393+
394+
print('Done!')
395+
396+
return

0 commit comments

Comments
 (0)