57 lines
1.5 KiB
Python
57 lines
1.5 KiB
Python
|
#!/usr/bin/env python3
|
||
|
#
|
||
|
# Copyright (c) 2021 Nordic Semiconductor NA
|
||
|
#
|
||
|
# SPDX-License-Identifier: Apache-2.0
|
||
|
|
||
|
"""Check minimal libc error numbers against newlib.
|
||
|
|
||
|
This script loads the errno.h included in Zephyr's minimal libc and checks its
|
||
|
contents against the SDK's newlib errno.h. This is done to ensure that both C
|
||
|
libraries are aligned at all times.
|
||
|
"""
|
||
|
|
||
|
|
||
|
import os
|
||
|
from pathlib import Path
|
||
|
import re
|
||
|
import sys
|
||
|
|
||
|
def parse_errno(path):
|
||
|
with open(path, 'r') as f:
|
||
|
r = re.compile(r'^\s*#define\s+([A-Z]+)\s+([0-9]+)')
|
||
|
errnos = []
|
||
|
for line in f:
|
||
|
m = r.match(line)
|
||
|
if m:
|
||
|
errnos.append(m.groups())
|
||
|
|
||
|
return errnos
|
||
|
|
||
|
def main():
|
||
|
|
||
|
minimal = Path("lib/libc/minimal/include/errno.h")
|
||
|
newlib = Path("arm-zephyr-eabi/arm-zephyr-eabi/include/sys/errno.h")
|
||
|
|
||
|
try:
|
||
|
minimal = os.environ['ZEPHYR_BASE'] / minimal
|
||
|
newlib = os.environ['ZEPHYR_SDK_INSTALL_DIR'] / newlib
|
||
|
except KeyError as e:
|
||
|
print(f'Environment variable missing: {e}', file=sys.stderr)
|
||
|
sys.exit(1)
|
||
|
|
||
|
minimal = parse_errno(minimal)
|
||
|
newlib = parse_errno(newlib)
|
||
|
|
||
|
for e in minimal:
|
||
|
if e[0] not in [x[0] for x in newlib] or e[1] != next(
|
||
|
filter(lambda _e: _e[0] == e[0], newlib))[1]:
|
||
|
print('Invalid entry in errno.h:', file=sys.stderr)
|
||
|
print(f'{e[0]} (with value {e[1]})', file=sys.stderr)
|
||
|
sys.exit(1)
|
||
|
|
||
|
print('errno.h validated correctly')
|
||
|
|
||
|
if __name__ == "__main__":
|
||
|
main()
|