You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
17 lines
883 B
17 lines
883 B
import importlib, pathlib
|
|
from tinygrad.helpers import system
|
|
|
|
root = (here:=pathlib.Path(__file__).parent).parents[2]
|
|
|
|
def load(name, dll, files, **kwargs):
|
|
if not (f:=(root/(path:=kwargs.pop("path", __name__)).replace('.','/')/f"{name}.py")).exists():
|
|
files = files() if callable(files) else files
|
|
f.write_text(importlib.import_module("tinygrad.runtime.support.autogen").gen(dll, files, **kwargs))
|
|
return importlib.import_module(f"{path}.{name.replace('/', '.')}")
|
|
|
|
def __getattr__(nm):
|
|
match nm:
|
|
case "libc": return load("libc", ["find_library('c')"], lambda: (
|
|
[i for i in system("dpkg -L libc6-dev").split() if 'sys/mman.h' in i or 'sys/syscall.h' in i] +
|
|
["/usr/include/string.h", "/usr/include/elf.h", "/usr/include/unistd.h", "/usr/include/asm-generic/mman-common.h"]), use_errno=True)
|
|
case _: raise AttributeError(f"no such autogen: {nm}")
|
|
|