diff options
| author | Arthur Hanson Rasmusson <arthur@vgpu.io> | 2026-09-13 18:36:21 -0400 |
|---|---|---|
| committer | Arthur Hanson Rasmusson <arthur@vgpu.io> | 2026-09-13 18:36:21 -0400 |
| commit | 00e54c13c7c9030c4d5f7151467f2d85a3730e29 (patch) | |
| tree | 17a45239df8d2e4912ff3697ed06e85a10b969de /userspace/lib/Makefile | |
| download | open-iov-00e54c13c7c9030c4d5f7151467f2d85a3730e29.tar.gz open-iov-00e54c13c7c9030c4d5f7151467f2d85a3730e29.zip | |
Initial commit: Open-IOV vGPU-IO complete stack
- Firmware decompilation: GSP 570.144W (28.5MB ELF, RV64IMAC), 132 decompiled C files
- Kernel modules: nvidia.ko (34MB, OpenRM), open-iov-vfio.ko (2.8MB, VFIO mdev), gsp-vgpu.ko (1.8MB, guest driver)
- Userspace: libiov.so/libvgpu.so (76KB), example_vgpu (28KB), rpc_emulator.c
- PCI config space emulation (256B with PM, MSI, MSI-X, PCIe caps)
- 12 RPC types fully mapped from firmware decompilation
- BAR trap, WPR, scheduling, notification, migration emulation
- Helper scripts: load_vgpu_stack, create_mdev, launch_qemu_vgpu, test_vgpu_stack, setup_guest_driver, unload_vgpu_stack
- Architecture documentation
- Wiki: 10 technical documents
- Git LFS for large binaries (.ko, .bin, .iso, .img, .o, ghidra repos)
- nvidia-open-gpu-kernel-modules as submodule
Diffstat (limited to 'userspace/lib/Makefile')
| -rw-r--r-- | userspace/lib/Makefile | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/userspace/lib/Makefile b/userspace/lib/Makefile new file mode 100644 index 0000000..05bb05b --- /dev/null +++ b/userspace/lib/Makefile @@ -0,0 +1,89 @@ +# libiov - Userspace library for Open-IOV vGPU +# Makefile + +PREFIX ?= /usr/local +LIBDIR ?= $(PREFIX)/lib +INCLUDEDIR ?= $(PREFIX)/include +PKGCONFIGDIR ?= $(LIBDIR)/pkgconfig + +CC ?= gcc +CFLAGS ?= -O2 -g -Wall -Wextra -fPIC -I../include +LDFLAGS ?= -shared + +LIB_NAME = libiov.so +LIB_MAJOR = 1 +LIB_MINOR = 0 +LIB_PATCH = 0 +LIB_VERSION = $(LIB_MAJOR).$(LIB_MINOR).$(LIB_PATCH) +LIB_SONAME = $(LIB_NAME).$(LIB_MAJOR) + +# Compatibility symlinks for libvgpu +COMPAT_NAMES = libvgpu.so libvgpu.so.1 libvgpu.so.1.0.0 + +SRC_DIR = . +OBJ_DIR = obj +SRC = $(SRC_DIR)/libvgpu.c $(SRC_DIR)/rpc_emulator.c +OBJ = $(OBJ_DIR)/libvgpu.o $(OBJ_DIR)/rpc_emulator.o + +HEADERS = ../include/libvgpu.h rpc_emulator.h + +all: $(OBJ_DIR) $(LIB_NAME) compat-links + +$(OBJ_DIR): + mkdir -p $(OBJ_DIR) + +$(OBJ_DIR)/%.o: $(SRC_DIR)/%.c $(HEADERS) + $(CC) $(CFLAGS) -c $< -o $@ + +$(LIB_NAME): $(OBJ) + $(CC) $(LDFLAGS) -Wl,-soname,$(LIB_SONAME) -o $@ $^ + ln -sf $(LIB_NAME) $(LIB_SONAME) + ln -sf $(LIB_NAME) $(LIB_NAME).$(LIB_VERSION) + +# Create compatibility symlinks for libvgpu +compat-links: $(LIB_NAME) + @for link in $(COMPAT_NAMES); do \ + ln -sf $(LIB_NAME) $$link; \ + done + +install: all + install -d $(DESTDIR)$(LIBDIR) + install -d $(DESTDIR)$(INCLUDEDIR) + install -d $(DESTDIR)$(PKGCONFIGDIR) + install -m 755 $(LIB_NAME) $(DESTDIR)$(LIBDIR)/$(LIB_NAME).$(LIB_VERSION) + ln -sf $(LIB_NAME).$(LIB_VERSION) $(DESTDIR)$(LIBDIR)/$(LIB_SONAME) + ln -sf $(LIB_NAME).$(LIB_VERSION) $(DESTDIR)$(LIBDIR)/$(LIB_NAME) + # Install compatibility symlinks + @for link in $(COMPAT_NAMES); do \ + ln -sf $(LIB_NAME).$(LIB_VERSION) $(DESTDIR)$(LIBDIR)/$$link; \ + done + install -m 644 $(HEADERS) $(DESTDIR)$(INCLUDEDIR)/ + sed -e "s|@PREFIX@|$(PREFIX)|g" \ + -e "s|@LIBDIR@|$(LIBDIR)|g" \ + -e "s|@INCLUDEDIR@|$(INCLUDEDIR)|g" \ + -e "s|@VERSION@|$(LIB_VERSION)|g" \ + libvgpu.pc.in > $(DESTDIR)$(PKGCONFIGDIR)/libvgpu.pc + # Also create libiov.pc + sed -e "s|@PREFIX@|$(PREFIX)|g" \ + -e "s|@LIBDIR@|$(LIBDIR)|g" \ + -e "s|@INCLUDEDIR@|$(INCLUDEDIR)|g" \ + -e "s|@VERSION@|$(LIB_VERSION)|g" \ + -e "s|libvgpu|libiov|g" \ + libvgpu.pc.in > $(DESTDIR)$(PKGCONFIGDIR)/libiov.pc + +uninstall: + rm -f $(DESTDIR)$(LIBDIR)/$(LIB_NAME) + rm -f $(DESTDIR)$(LIBDIR)/$(LIB_SONAME) + rm -f $(DESTDIR)$(LIBDIR)/$(LIB_NAME).$(LIB_VERSION) + @for link in $(COMPAT_NAMES); do \ + rm -f $(DESTDIR)$(LIBDIR)/$$link; \ + done + rm -f $(DESTDIR)$(INCLUDEDIR)/libvgpu.h + rm -f $(DESTDIR)$(INCLUDEDIR)/rpc_emulator.h + rm -f $(DESTDIR)$(PKGCONFIGDIR)/libvgpu.pc + rm -f $(DESTDIR)$(PKGCONFIGDIR)/libiov.pc + +clean: + rm -rf $(OBJ_DIR) $(LIB_NAME) $(LIB_SONAME) $(LIB_NAME).$(LIB_VERSION) $(COMPAT_NAMES) + +.PHONY: all install uninstall clean compat-links
\ No newline at end of file |
