codon/stdlib/internal/dlopen.codon

48 lines
1.1 KiB
Python
Raw Normal View History

# Copyright (C) 2022-2023 Exaloop Inc. <https://exaloop.io>
2022-01-24 14:52:20 +08:00
2021-09-28 02:02:44 +08:00
@pure
@C
2022-01-24 14:52:20 +08:00
def seq_is_macos() -> bool:
pass
2021-09-28 02:02:44 +08:00
# <dlfcn.h>
from C import dlerror() -> cobj as c_dlerror
from C import dlopen(cobj, int) -> cobj as c_dlopen
from C import dlsym(cobj, cobj) -> cobj as c_dlsym
from C import dlclose(cobj) -> i32 as c_dlclose
2022-01-24 14:52:20 +08:00
2021-09-28 02:02:44 +08:00
RTLD_NOW = 2
RTLD_GLOBAL = 8 if seq_is_macos() else 256
JIT (#6) * Add JIT engine * More engine updates * Fix takeModule() * Parser JIT support [wip] * Fix class definition * Parser JIT support [wip] * Parser JIT support [wip] * Fix LLVM context conflict * Parser JIT support [wip] * Fix JIT engine * Parser JIT support [wip] * Doc fix * JIT fix * Fix JIT exceptions * Refactor * Add JIT status codes * Add compiler class * Better logging * Better logging * Update .gitignore * Add Jupyter Xeus support * Update JIT * Remove print * Update errors * Fix assert * Fix asserts * Update docgen signature * Update file system interface * Update plugin errors * Use numeric_limits * JIT refactor [wip] * Set JIT flag on LLVMVisitor * Update module opt * JIT imports * First Jupyter integration * Update JIT API to return outputs as string * Capture runtime exception output * Fix libbacktrace build * Initial Jupyter support * Format * Fix print * Support run-mode backtraces * Fix multithreaded backtrace * Update backtraces * Upgrade OpenMP * Add libunwind * Fix build * Fix build * Fix build * Fix build * Fix OpenMP & tests * Use libbacktrace instead of libunwind * Add debug listener * Remove unused include * Remove unused class * Fix backtraces * Update backtrace config * Fix debug info generation * Refactor backtraces * Fix ASAN flag * Fix JIT * Fix JIT backtraces * Fix JIT backtrace * Fix Jupyter, fix xeus build flags * Fix JIT output capture * Fix Jupyter * Fix Jupyter Python support * Add __repr_pretty__ support * Update JIT output capturing * Better backtrace method names * Support plugins in JIT mode Co-authored-by: Ibrahim Numanagić <ibrahimpasa@gmail.com>
2021-12-01 00:50:28 +08:00
RTLD_LOCAL = 0 if seq_is_macos() else 256
2021-09-28 02:02:44 +08:00
2022-01-24 14:52:20 +08:00
def dlext() -> str:
2021-09-28 02:02:44 +08:00
if seq_is_macos():
2022-01-24 14:52:20 +08:00
return "dylib"
2021-09-28 02:02:44 +08:00
else:
2022-01-24 14:52:20 +08:00
return "so"
2021-09-28 02:02:44 +08:00
@pure
2022-01-24 14:52:20 +08:00
def dlerror() -> str:
2021-09-28 02:02:44 +08:00
return str.from_ptr(c_dlerror())
def dlopen(name: str, flag: int = RTLD_NOW | RTLD_GLOBAL) -> cobj:
h = c_dlopen(cobj() if name == "" else name.c_str(), flag)
2021-09-28 02:02:44 +08:00
if h == cobj():
raise CError(dlerror())
return h
2022-01-24 14:52:20 +08:00
def dlsym(lib, name: str, Fn: type) -> Fn:
JIT (#6) * Add JIT engine * More engine updates * Fix takeModule() * Parser JIT support [wip] * Fix class definition * Parser JIT support [wip] * Parser JIT support [wip] * Fix LLVM context conflict * Parser JIT support [wip] * Fix JIT engine * Parser JIT support [wip] * Doc fix * JIT fix * Fix JIT exceptions * Refactor * Add JIT status codes * Add compiler class * Better logging * Better logging * Update .gitignore * Add Jupyter Xeus support * Update JIT * Remove print * Update errors * Fix assert * Fix asserts * Update docgen signature * Update file system interface * Update plugin errors * Use numeric_limits * JIT refactor [wip] * Set JIT flag on LLVMVisitor * Update module opt * JIT imports * First Jupyter integration * Update JIT API to return outputs as string * Capture runtime exception output * Fix libbacktrace build * Initial Jupyter support * Format * Fix print * Support run-mode backtraces * Fix multithreaded backtrace * Update backtraces * Upgrade OpenMP * Add libunwind * Fix build * Fix build * Fix build * Fix build * Fix OpenMP & tests * Use libbacktrace instead of libunwind * Add debug listener * Remove unused include * Remove unused class * Fix backtraces * Update backtrace config * Fix debug info generation * Refactor backtraces * Fix ASAN flag * Fix JIT * Fix JIT backtraces * Fix JIT backtrace * Fix Jupyter, fix xeus build flags * Fix JIT output capture * Fix Jupyter * Fix Jupyter Python support * Add __repr_pretty__ support * Update JIT output capturing * Better backtrace method names * Support plugins in JIT mode Co-authored-by: Ibrahim Numanagić <ibrahimpasa@gmail.com>
2021-12-01 00:50:28 +08:00
h = cobj()
if isinstance(lib, str):
h = dlopen(lib)
else:
h = lib
2021-09-28 02:02:44 +08:00
fn = c_dlsym(h, name.c_str())
if fn == cobj():
raise CError(dlerror())
return Fn(fn)
2022-02-16 23:51:16 +08:00
def dlclose(handle: cobj):
2021-09-28 02:02:44 +08:00
if c_dlclose(handle) != i32(0):
raise CError(dlerror())