Add VSCode integration script
- Python script to generate c_cpp_properties.json - Helps with IntelliSense for Switch development - Configures paths for devkitPro toolchain - Improves development experience
This commit is contained in:
parent
d28527f700
commit
41e49c2080
1 changed files with 83 additions and 0 deletions
83
gen-c_cpp_properties.json.py
Executable file
83
gen-c_cpp_properties.json.py
Executable file
|
|
@ -0,0 +1,83 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
# This program runs "make --dry-run" then processes the output to create a visual studio code
|
||||||
|
# c_cpp_properties.json file
|
||||||
|
|
||||||
|
import json
|
||||||
|
import os
|
||||||
|
import re
|
||||||
|
|
||||||
|
includePath = set()
|
||||||
|
defines = set()
|
||||||
|
otherOptions = set()
|
||||||
|
doubleDash = set()
|
||||||
|
outputJson = dict()
|
||||||
|
|
||||||
|
# Take a line from the make output
|
||||||
|
# split the line into a list by using whitespace
|
||||||
|
# search the list for tokens of
|
||||||
|
# -I (gcc include)
|
||||||
|
# -D (gcc #define)
|
||||||
|
# -- (I actually ignore these but I was curious what they all were)
|
||||||
|
# - (other - options which I keep track of ... but then ignore)
|
||||||
|
|
||||||
|
def processLine(lineData):
|
||||||
|
#print(f'Processing line: {lineData}')
|
||||||
|
linelist = lineData.split()
|
||||||
|
for i in linelist:
|
||||||
|
if(i[:2] == "-I"):
|
||||||
|
if(i[2:3] == '/'):
|
||||||
|
path = i[2:]
|
||||||
|
if os.path.isdir(path):
|
||||||
|
includePath.add(path)
|
||||||
|
else:
|
||||||
|
includePath.add(f"/usr/src/linux-headers-{kernelVersion}/{i[2:]}")
|
||||||
|
elif (i[:2] == "-D"):
|
||||||
|
defines.add(i[2:])
|
||||||
|
elif (i[:2] == "--"):
|
||||||
|
doubleDash.add(i)
|
||||||
|
elif (i[:1] == '-'):
|
||||||
|
otherOptions.add(i)
|
||||||
|
|
||||||
|
print("Gathering details from uname and make...")
|
||||||
|
# figure out which version of the kernel we are using
|
||||||
|
stream = os.popen('uname -r')
|
||||||
|
kernelVersion = stream.read()
|
||||||
|
# get rid of the \n from the uname command
|
||||||
|
kernelVersion = kernelVersion[:-1]
|
||||||
|
|
||||||
|
# run make to find #defines and -I includes
|
||||||
|
stream = os.popen('make --dry-run')
|
||||||
|
outstring = stream.read()
|
||||||
|
lines = outstring.split('\n')
|
||||||
|
|
||||||
|
|
||||||
|
for i in lines:
|
||||||
|
#print(f'Checking line: {i}')
|
||||||
|
# look for a line with " CC "... this is a super ghetto method
|
||||||
|
val = re.compile(r'\s+-o\s+').search(i)
|
||||||
|
if val:
|
||||||
|
processLine(i)
|
||||||
|
|
||||||
|
|
||||||
|
# Create the JSON
|
||||||
|
outputJson["configurations"] = []
|
||||||
|
|
||||||
|
configDict = {"name" : "Linux"}
|
||||||
|
configDict["includePath"] = list(includePath)
|
||||||
|
configDict["defines"] = list(defines)
|
||||||
|
configDict["intelliSenseMode"] = "gcc-arm64"
|
||||||
|
configDict["compilerPath"]= "/opt/devkitpro/devkitA64/bin/aarch64-none-elf-gcc"
|
||||||
|
configDict["cStandard"]= "c11"
|
||||||
|
configDict["cppStandard"] = "c++17"
|
||||||
|
|
||||||
|
outputJson["configurations"].append(configDict)
|
||||||
|
outputJson["version"] = 4
|
||||||
|
|
||||||
|
# Convert the Dictonary to a string of JSON
|
||||||
|
print("Dumping json...")
|
||||||
|
jsonMsg = json.dumps(outputJson, indent=2)
|
||||||
|
print("Done!")
|
||||||
|
# Save the JSON to the files
|
||||||
|
outF = open(".vscode/c_cpp_properties.json", "w")
|
||||||
|
outF.write(jsonMsg)
|
||||||
|
outF.close()
|
||||||
Loading…
Add table
Add a link
Reference in a new issue