Radix/runtimes/rocm/zmlxrocm.zig

53 lines
2.2 KiB
Zig
Raw Normal View History

const std = @import("std");
const stdx = @import("stdx");
pub export fn zmlxrocm_dlopen(filename: [*c]const u8, flags: c_int) ?*anyopaque {
const replacements: std.StaticStringMap([:0]const u8) = .initComptime(.{
.{ "librocm-core.so", "librocm-core.so.1" },
.{ "librocm_smi64.so", "librocm_smi64.so.7" },
.{ "libhsa-runtime64.so", "libhsa-runtime64.so.1" },
.{ "libhsa-amd-aqlprofile64.so", "libhsa-amd-aqlprofile64.so.1" },
.{ "libamd_comgr.so", "libamd_comgr.so.3" },
.{ "librocprofiler-register.so", "librocprofiler-register.so.0" },
.{ "libMIOpen.so", "libMIOpen.so.1" },
2025-12-23 17:24:34 +00:00
.{ "libMIOpen.so.1", "libMIOpen.so.1" },
.{ "librccl.so", "librccl.so.1" },
2025-12-23 17:24:34 +00:00
.{ "librocblas.so.4", "librocblas.so.4" },
.{ "librocblas.so", "librocblas.so.4" },
.{ "libroctracer64.so", "libroctracer64.so.4" },
.{ "libroctx64.so", "libroctx64.so.4" },
.{ "libhipblaslt.so", "libhipblaslt.so.0" },
.{ "libamdhip64.so", "libamdhip64.so.6" },
.{ "libhiprtc.so", "libhiprtc.so.6" },
});
var buf: [std.fs.max_path_bytes]u8 = undefined;
const new_filename: [*c]const u8 = if (filename) |f| blk: {
const replacement = replacements.get(std.fs.path.basename(std.mem.span(f))) orelse break :blk f;
break :blk stdx.fs.path.bufJoinZ(&buf, &.{
stdx.fs.selfSharedObjectDirPath(),
replacement,
}) catch unreachable;
} else null;
return std.c.dlopen(new_filename, @bitCast(flags));
}
pub export fn zmlxrocm_fopen64(pathname: [*c]const u8, mode: [*c]const u8) ?*std.c.FILE {
const replacements: std.StaticStringMap([]const u8) = .initComptime(.{
.{ "/opt/amdgpu/share/libdrm/amdgpu.ids", "../share/libdrm/amdgpu.ids" },
});
var buf: [std.fs.max_path_bytes]u8 = undefined;
const new_pathname: [*c]const u8 = blk: {
const replacement = replacements.get(std.mem.span(pathname)) orelse break :blk pathname;
break :blk stdx.fs.path.bufJoinZ(&buf, &.{
stdx.fs.selfSharedObjectDirPath(),
replacement,
}) catch unreachable;
};
return std.c.fopen64(new_pathname, mode);
}