summaryrefslogtreecommitdiffstats
path: root/Makefile
blob: 75becc8aadb81fc0ce3c7b7c046a52402f6effe6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
# 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
DRIVER_DIR := driver
USERSPACE_DIR := userspace
FIRMWARE_DIR := firmware/570-GSP

# 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 $(DRIVER_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