cutekit/osdk/rules.py

49 lines
2.1 KiB
Python
Raw Normal View History

2023-01-31 20:09:28 +00:00
class Rule:
id: str
fileIn: list[str]
fileOut: list[str]
rule: str
2023-02-02 22:05:45 +00:00
args: list[str]
deps: str | None = None
2023-01-31 20:09:28 +00:00
2023-02-02 22:05:45 +00:00
def __init__(self, id: str, fileIn: list[str], fileOut: list[str], rule: str, args: list[str] = [], deps: str | None = None):
2023-01-31 20:09:28 +00:00
self.id = id
self.fileIn = fileIn
self.fileOut = fileOut
self.rule = rule
2023-02-02 22:05:45 +00:00
self.args = args
self.deps = deps
2023-01-31 20:09:28 +00:00
rules: dict[str, Rule] = {
"cc": Rule("cc", ["*.c"], ["*.o"], "-c -o $out $in -MD -MF $out.d $flags $cincs $cdefs", ["-std=gnu2x",
2023-02-06 10:14:32 +00:00
"-Wall",
"-Wextra",
"-Werror"], "$out.d"),
"cxx": Rule("cxx", ["*.cpp", "*.cc", "*.cxx"], ["*.o"], "-c -o $out $in -MD -MF $out.d $flags $cincs $cdefs", ["-std=gnu++2b",
2023-02-06 10:14:32 +00:00
"-Wall",
"-Wextra",
"-Werror",
"-fno-exceptions",
"-fno-rtti"], "$out.d"),
"as": Rule("as", ["*.s", "*.asm", "*.S"], ["*.o"], "-o $out $in $flags"),
"ar": Rule("ar", ["*.o"], ["*.a"], "$flags $out $in"),
"ld": Rule("ld", ["*.o", "*.a"], ["*.out"], "-o $out $in $flags"),
}
2023-01-31 20:09:28 +00:00
def append(rule: Rule):
rules[rule.id] = rule
def byFileIn(fileIn: str) -> Rule | None:
for key in rules:
rule = rules[key]
for ext in rule.fileIn:
if fileIn.endswith(ext[1:]):
2023-01-31 20:09:28 +00:00
return rule
return None
def byId(id: str) -> Rule | None:
return rules.get(id, None)