Compare commits

...
Sign in to create a new pull request.
Author SHA1 Message Date
Nick Brassel
9c396f7427
Explicitly include newlib.h, use some defines from it. Invoke some binutils to verify that's working too. 2024-08-16 08:55:13 +10:00
Nick Brassel
c934d2b66c
Update lib/python/qmk/cli/doctor/check.py
Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com>
2024-08-16 08:40:00 +10:00
Nick Brassel
80254c99ec
Consistency. 2024-08-15 23:19:53 +10:00
Nick Brassel
19ce296eb2
Perform test compiles during qmk doctor. 2024-08-15 23:14:46 +10:00

View file

@ -4,6 +4,8 @@ from enum import Enum
import re
import shutil
from subprocess import DEVNULL, TimeoutExpired
from tempfile import TemporaryDirectory
from pathlib import Path
from milc import cli
from qmk import submodules
@ -44,7 +46,31 @@ def _check_arm_gcc_version():
version_number = ESSENTIAL_BINARIES['arm-none-eabi-gcc']['output'].strip()
cli.log.info('Found arm-none-eabi-gcc version %s', version_number)
return CheckStatus.OK # Right now all known arm versions are ok
# Right now all known ARM versions are ok, so check that it can produce binaries
return _check_arm_gcc_installation()
def _check_arm_gcc_installation():
"""Returns OK if the arm-none-eabi-gcc is fully installed and can produce binaries.
"""
with TemporaryDirectory() as temp_dir:
temp_file = Path(temp_dir) / 'test.elf'
args = ['arm-none-eabi-gcc', '-mcpu=cortex-m0', '-mthumb', '-mno-thumb-interwork', '--specs=nosys.specs', '--specs=nano.specs', '-x', 'c', '-o', str(temp_file), '-']
result = cli.run(args, stdin=None, stdout=None, stderr=None, input='#include <newlib.h>\nint main() { return __NEWLIB__ * __NEWLIB_MINOR__ * __NEWLIB_PATCHLEVEL__; }')
if result.returncode != 0:
cli.log.error(f'Failed to compile a simple program with arm-none-eabi-gcc, return code {result.returncode}')
cli.log.error(f'Command: {" ".join(args)}')
return CheckStatus.ERROR
args = ['arm-none-eabi-size', str(temp_file)]
result = cli.run(args, stdin=None, stdout=None, stderr=None, input='int main() { return 0; }')
if result.returncode != 0:
cli.log.error(f'Failed to execute arm-none-eabi-size, perhaps corrupt arm-none-eabi-binutils, return code {result.returncode}')
cli.log.error(f'Command: {" ".join(args)}')
return CheckStatus.ERROR
return CheckStatus.OK
def _check_avr_gcc_version():
@ -53,7 +79,31 @@ def _check_avr_gcc_version():
version_number = ESSENTIAL_BINARIES['avr-gcc']['output'].strip()
cli.log.info('Found avr-gcc version %s', version_number)
return CheckStatus.OK
# Right now all known AVR versions are ok, so check that it can produce binaries
return _check_avr_gcc_installation()
def _check_avr_gcc_installation():
"""Returns OK if the avr-gcc is fully installed and can produce binaries.
"""
with TemporaryDirectory() as temp_dir:
temp_file = Path(temp_dir) / 'test.elf'
args = ['avr-gcc', '-mmcu=atmega32u4', '-x', 'c', '-o', str(temp_file), '-']
result = cli.run(args, stdin=None, stdout=None, stderr=None, input='int main() { return 0; }')
if result.returncode != 0:
cli.log.error(f'Failed to compile a simple program with avr-gcc, return code {result.returncode}')
cli.log.error(f'Command: {" ".join(args)}')
return CheckStatus.ERROR
args = ['avr-size', str(temp_file)]
result = cli.run(args, stdin=None, stdout=None, stderr=None, input='int main() { return 0; }')
if result.returncode != 0:
cli.log.error(f'Failed to execute avr-size, perhaps corrupt avr-binutils, return code {result.returncode}')
cli.log.error(f'Command: {" ".join(args)}')
return CheckStatus.ERROR
return CheckStatus.OK
def _check_avrdude_version():