Browse Source
Implementation and ztest for strsignal. Signed-off-by: Yong Cong Sin <ycsin@meta.com>pull/60551/head
9 changed files with 175 additions and 2 deletions
@ -0,0 +1,92 @@ |
|||||||
|
#!/usr/bin/env python3 |
||||||
|
# |
||||||
|
# Copyright (c) 2023 Meta |
||||||
|
# |
||||||
|
# SPDX-License-Identifier: Apache-2.0 |
||||||
|
|
||||||
|
import argparse |
||||||
|
import os |
||||||
|
import re |
||||||
|
|
||||||
|
|
||||||
|
def front_matter(): |
||||||
|
return f''' |
||||||
|
/* |
||||||
|
* This file is generated by {__file__} |
||||||
|
*/ |
||||||
|
|
||||||
|
#include <zephyr/posix/signal.h> |
||||||
|
''' |
||||||
|
|
||||||
|
|
||||||
|
def gen_strsignal_table(input, output): |
||||||
|
with open(input, 'r') as inf: |
||||||
|
|
||||||
|
highest_signo = 0 |
||||||
|
symbols = [] |
||||||
|
msgs = {} |
||||||
|
|
||||||
|
for line in inf.readlines(): |
||||||
|
# Select items of the form below (note: SIGNO is numeric) |
||||||
|
# #define SYMBOL SIGNO /**< MSG */ |
||||||
|
pat = r'^#define[\s]+(SIG[A-Z_]*)[\s]+([1-9][0-9]*)[\s]+/\*\*<[\s]+(.*)[\s]+\*/[\s]*$' |
||||||
|
match = re.match(pat, line) |
||||||
|
|
||||||
|
if not match: |
||||||
|
continue |
||||||
|
|
||||||
|
symbol = match[1] |
||||||
|
signo = int(match[2]) |
||||||
|
msg = match[3] |
||||||
|
|
||||||
|
symbols.append(symbol) |
||||||
|
msgs[symbol] = msg |
||||||
|
|
||||||
|
highest_signo = max(int(signo), highest_signo) |
||||||
|
|
||||||
|
try: |
||||||
|
os.makedirs(os.path.dirname(output)) |
||||||
|
except BaseException: |
||||||
|
# directory already present |
||||||
|
pass |
||||||
|
|
||||||
|
with open(output, 'w') as outf: |
||||||
|
|
||||||
|
print(front_matter(), file=outf) |
||||||
|
|
||||||
|
# Generate string table |
||||||
|
print( |
||||||
|
f'static const char *const strsignal_list[{highest_signo + 1}] = {{', file=outf) |
||||||
|
for symbol in symbols: |
||||||
|
print(f'\t[{symbol}] = "{msgs[symbol]}",', file=outf) |
||||||
|
|
||||||
|
print('};', file=outf) |
||||||
|
|
||||||
|
|
||||||
|
def parse_args(): |
||||||
|
parser = argparse.ArgumentParser(allow_abbrev=False) |
||||||
|
parser.add_argument( |
||||||
|
'-i', |
||||||
|
'--input', |
||||||
|
dest='input', |
||||||
|
required=True, |
||||||
|
help='input file (e.g. include/zephyr/posix/signal.h)') |
||||||
|
parser.add_argument( |
||||||
|
'-o', |
||||||
|
'--output', |
||||||
|
dest='output', |
||||||
|
required=True, |
||||||
|
help='output file (e.g. build/zephyr/misc/generated/lib/posix/strsignal_table.h)') |
||||||
|
|
||||||
|
args = parser.parse_args() |
||||||
|
|
||||||
|
return args |
||||||
|
|
||||||
|
|
||||||
|
def main(): |
||||||
|
args = parse_args() |
||||||
|
gen_strsignal_table(args.input, args.output) |
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__': |
||||||
|
main() |
Loading…
Reference in new issue