summaryrefslogtreecommitdiffstats
path: root/Makefile
diff options
context:
space:
mode:
Diffstat (limited to 'Makefile')
-rw-r--r--Makefile127
1 files changed, 127 insertions, 0 deletions
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..ae7a8e2
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,127 @@
+# Open-IOV Top-Level Build System
+# Builds: kernel module (open-iov-vfio.ko), userspace lib (open-iov.so), examples, tests
+
+SHELL := /bin/bash
+
+# Directories
+KERNEL_DIR := kernel
+USERSPACE_DIR := userspace
+FIRMWARE_DIR := firmware/57X-GSP/570.144
+
+# Kernel module
+KERNEL_MODULE := open-iov-vfio.ko
+KERNEL_MODULE_SRC := $(KERNEL_DIR)/$(KERNEL_MODULE)
+
+# Userspace library
+USERSPACE_LIB := libiov.so
+USERSPACE_LIB_SRC := $(USERSPACE_DIR)/lib/$(USERSPACE_LIB)
+USERSPACE_LIB_LINK := $(USERSPACE_DIR)/lib/libvgpu.so # compat symlink
+
+# Examples
+EXAMPLES := example_vgpu
+
+# Default target
+.PHONY: all kernel userspace examples tests clean install firmware-check help
+
+all: kernel userspace examples
+
+help:
+ @echo "Open-IOV Build System"
+ @echo ""
+ @echo "Targets:"
+ @echo " all - Build kernel module, userspace library, examples"
+ @echo " kernel - Build open-iov-vfio.ko"
+ @echo " userspace - Build open-iov.so and libvgpu.so compat link"
+ @echo " examples - Build example applications"
+ @echo " tests - Build kernel and userspace tests"
+ @echo " clean - Clean all build artifacts"
+ @echo " install - Install kernel module and userspace library"
+ @echo " firmware-check - Verify GSP firmware exists"
+ @echo ""
+
+# Kernel module build
+kernel: $(KERNEL_MODULE_SRC)
+
+$(KERNEL_MODULE_SRC): firmware-check
+ $(MAKE) -C $(KERNEL_DIR)
+
+# Userspace library build
+userspace: $(USERSPACE_LIB_SRC) $(USERSPACE_LIB_LINK)
+
+$(USERSPACE_LIB_SRC):
+ $(MAKE) -C $(USERSPACE_DIR)/lib
+
+$(USERSPACE_LIB_LINK): $(USERSPACE_LIB_SRC)
+ @ln -sf $(USERSPACE_LIB) $(USERSPACE_DIR)/lib/libvgpu.so
+ @ln -sf $(USERSPACE_LIB) $(USERSPACE_DIR)/lib/libvgpu.so.1
+ @ln -sf $(USERSPACE_LIB) $(USERSPACE_DIR)/lib/libvgpu.so.1.0.0
+
+# Examples build
+examples: userspace
+ $(MAKE) -C $(USERSPACE_DIR)/examples
+
+# Tests build
+tests: kernel userspace
+ $(MAKE) -C $(KERNEL_DIR)/tests
+ $(MAKE) -C $(USERSPACE_DIR)/tests
+
+# Firmware check
+firmware-check:
+ @if [ ! -f $(FIRMWARE_DIR)/gsp-570.144.fwimage.bin ]; then \
+ echo "ERROR: GSP firmware not found at $(FIRMWARE_DIR)/gsp-570.144.fwimage.bin"; \
+ exit 1; \
+ fi
+ @echo "Firmware OK: $(FIRMWARE_DIR)/gsp-570.144.fwimage.bin"
+
+# Clean
+clean:
+ $(MAKE) -C $(KERNEL_DIR) clean
+ $(MAKE) -C $(USERSPACE_DIR)/lib clean
+ $(MAKE) -C $(USERSPACE_DIR)/examples clean
+ $(MAKE) -C $(USERSPACE_DIR)/tests clean
+ $(MAKE) -C $(KERNEL_DIR)/tests clean
+ @rm -f $(USERSPACE_DIR)/lib/libvgpu.so*
+
+# Install
+install: kernel userspace
+ # Install kernel module
+ $(MAKE) -C $(KERNEL_DIR) install
+ # Install userspace library
+ install -D -m 755 $(USERSPACE_DIR)/lib/$(USERSPACE_LIB) /usr/local/lib/$(USERSPACE_LIB)
+ ldconfig
+ # Install headers
+ install -D -m 644 $(USERSPACE_DIR)/include/libvgpu.h /usr/local/include/libvgpu.h
+ # Create compat symlinks
+ ln -sf $(USERSPACE_LIB) /usr/local/lib/libvgpu.so
+ ln -sf $(USERSPACE_LIB) /usr/local/lib/libvgpu.so.1
+ ln -sf $(USERSPACE_LIB) /usr/local/lib/libvgpu.so.1.0.0
+ # Install pkg-config files
+ install -D -m 644 $(USERSPACE_DIR)/lib/libvgpu.pc /usr/local/lib/pkgconfig/libvgpu.pc
+ install -D -m 644 $(USERSPACE_DIR)/lib/libiov.pc /usr/local/lib/pkgconfig/libiov.pc
+
+# Load kernel module (requires root)
+load: kernel firmware-check
+ sudo cp $(FIRMWARE_DIR)/gsp-570.144.fwimage.bin /lib/firmware/
+ sudo insmod $(KERNEL_MODULE_SRC)
+
+# Unload kernel module
+unload:
+ -sudo rmmod open-iov-vfio
+
+# Reload kernel module
+reload: unload load
+
+# Run example
+run-example: examples load
+ sudo LD_LIBRARY_PATH=$(USERSPACE_DIR)/lib ./$(USERSPACE_DIR)/examples/example_vgpu /dev/open-iov
+
+# Debug kernel module
+debug-kernel:
+ @echo "Kernel module info:"
+ @modinfo $(KERNEL_MODULE_SRC)
+
+# Check kernel module symbols
+check-symbols: kernel
+ @nm $(KERNEL_MODULE_SRC) | grep -E "(vgpu|gsp|bar|wpr|migration)" | head -50
+
+.PHONY: load unload reload run-example debug-kernel check-symbols \ No newline at end of file