Perform test compiles during qmk doctor.

This commit is contained in:
Nick Brassel 2024-08-15 23:14:46 +10:00
parent b07a68230d
commit 19ce296eb2
No known key found for this signature in database

View File

@ -4,6 +4,8 @@ from enum import Enum
import re import re
import shutil import shutil
from subprocess import DEVNULL, TimeoutExpired from subprocess import DEVNULL, TimeoutExpired
from tempfile import TemporaryDirectory
from pathlib import Path
from milc import cli from milc import cli
from qmk import submodules from qmk import submodules
@ -44,7 +46,22 @@ def _check_arm_gcc_version():
version_number = ESSENTIAL_BINARIES['arm-none-eabi-gcc']['output'].strip() version_number = ESSENTIAL_BINARIES['arm-none-eabi-gcc']['output'].strip()
cli.log.info('Found arm-none-eabi-gcc version %s', version_number) 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=DEVNULL, stderr=None, input='int main() { return 0; }')
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
return CheckStatus.OK
def _check_avr_gcc_version(): def _check_avr_gcc_version():
@ -53,7 +70,22 @@ def _check_avr_gcc_version():
version_number = ESSENTIAL_BINARIES['avr-gcc']['output'].strip() version_number = ESSENTIAL_BINARIES['avr-gcc']['output'].strip()
cli.log.info('Found avr-gcc version %s', version_number) cli.log.info('Found avr-gcc version %s', version_number)
return CheckStatus.OK # Right now all known arm 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
return CheckStatus.OK
def _check_avrdude_version(): def _check_avrdude_version():