Files
stm8stest/extra_script.py

62 lines
2.1 KiB
Python

Import("env")
def gen_clangd(target, source, env):
_ = target
_ = source
from subprocess import run
import shlex
from pathlib import Path
SDCC = run(shlex.split("which sdcc"), capture_output=True).stdout.decode().strip()
# SDCC = '/home/fpasqua/.platformio/packages/toolchain-sdcc/bin/sdcc'
p = Path(SDCC).parent.parent # toolchain root
SDCC_INCLUDE = p / 'share' / 'sdcc' / 'include'
# SDCC_INCLUDE = '/home/fpasqua/.platformio/packages/toolchain-sdcc/share/sdcc/include/'
GETDEFINEFLAGS = '-E -dM -mstm8 -x c /dev/null'
res = run([SDCC] + shlex.split(GETDEFINEFLAGS), capture_output=True)
res.check_returncode()
defines_raw = res.stdout.decode().strip().split('\n')
defines = [d.replace('#define ', '-D').replace(' ', '=') for d in defines_raw]
sdcc_defines = ", ".join(defines)
sdccext_defines = ", ".join(['-D__trap=', '-D__interrupt(x)='])
SUPPRESSED = [
"clang-diagnostic-main-return-type",
"clang-diagnostic-empty-body",
"pp_including_mainfile_in_preamble",
]
with open('.clangd', 'w') as f:
f.writelines([
'CompileFlags:\n',
f' Add: [-I{SDCC_INCLUDE}, {sdcc_defines}, {sdccext_defines}]\n'
' Remove: [--opt-code-size, -mstm8]\n',
'Index:\n',
' StandardLibrary: No\n',
'Diagnostics:\n',
' Suppress:\n',
*[f' - "{s}"\n' for s in SUPPRESSED],
' UnusedIncludes: None\n',
])
print("Project .clangd created")
o = run(shlex.split(f'ln -s -f {env["PROJECT_DIR"]}/.clangd .clangd'), cwd=p)
o.check_returncode()
print(f"Symlink to toolchain {p / '.clangd'} done.")
# include toolchain paths
env.Replace(COMPILATIONDB_INCLUDE_TOOLCHAIN=True)
# custom .clangd initialization
env.AddCustomTarget(
name='clangd',
dependencies=None,
actions=gen_clangd,
title='Gen .clangd',
description='Generate required files for clangd to work properly.',
always_build=True,
)
# TODO: add target to load the .clangd in the sdcc toolchain too