xref: /freebsd/sys/modules/vmm/Makefile (revision 2668e76d6e764c5c361156ffa3d39eb02ce8e5d9)
1.include <kmod.opts.mk>
2
3KMOD=	vmm
4
5.if ${MACHINE_CPUARCH} == "amd64"
6SRCS+=	opt_acpi.h		\
7	opt_bhyve_snapshot.h	\
8	opt_ddb.h
9.endif
10
11SRCS+=	acpi_if.h bus_if.h device_if.h pci_if.h pcib_if.h vnode_if.h
12
13CFLAGS+= -DVMM_KEEP_STATS
14CFLAGS+= -I${SRCTOP}/sys/${MACHINE}/vmm
15CFLAGS+= -I${SRCTOP}/sys/${MACHINE}/vmm/io
16
17# generic vmm support
18.PATH: ${SRCTOP}/sys/${MACHINE}/vmm
19SRCS+=	vmm.c		\
20	vmm_dev.c	\
21	vmm_instruction_emul.c	\
22	vmm_stat.c
23
24.if ${MACHINE_CPUARCH} == "aarch64"
25DPSRCS+=	assym.inc
26
27# TODO: Add the new EL2 code
28SRCS+=	vmm_arm64.c \
29	vmm_reset.c \
30	vmm_call.S \
31	vmm_handlers.c \
32	vmm_mmu.c \
33	vmm_vhe_exception.S \
34	vmm_vhe.c \
35	vmm_hyp_el2.S
36
37.PATH: ${SRCTOP}/sys/${MACHINE}/vmm/io
38SRCS+=	vgic.c \
39	vgic_if.h \
40	vgic_if.c \
41	vgic_v3.c \
42	vtimer.c
43
44CLEANFILES+=	vmm_nvhe_exception.o vmm_nvhe.o
45
46CLEANFILES+=	vmm_hyp_blob.elf.full
47CLEANFILES+=	vmm_hyp_blob.elf vmm_hyp_blob.bin
48
49vmm_nvhe_exception.o: vmm_nvhe_exception.S
50	${CC} -c -x assembler-with-cpp -DLOCORE \
51	    ${NOSAN_CFLAGS:N-mbranch-protection*} ${.IMPSRC} -o ${.TARGET} -fpie
52
53vmm_nvhe.o: vmm_nvhe.c
54	${CC} -c ${NOSAN_CFLAGS:N-mbranch-protection*} ${.IMPSRC} \
55	    -o ${.TARGET} -fpie
56
57vmm_hyp_blob.elf.full:	vmm_nvhe_exception.o vmm_nvhe.o
58	${LD} -m ${LD_EMULATION} -Bdynamic -L ${SYSDIR}/conf -T ${SYSDIR}/conf/ldscript.arm64 \
59	    ${_LDFLAGS:N-zbti-report*} --no-warn-mismatch --warn-common --export-dynamic \
60	    --dynamic-linker /red/herring -X -o ${.TARGET} ${.ALLSRC} \
61	    --defsym=_start='0x0' --defsym=text_start='0x0'
62
63vmm_hyp_blob.elf:	vmm_hyp_blob.elf.full
64	${OBJCOPY} --strip-debug ${.ALLSRC} ${.TARGET}
65
66vmm_hyp_blob.bin:	vmm_hyp_blob.elf
67	${OBJCOPY} --output-target=binary ${.ALLSRC} ${.TARGET}
68
69vmm_hyp_el2.o:	vmm_hyp_blob.bin
70
71.elif ${MACHINE_CPUARCH} == "amd64"
72DPSRCS+=	vmx_assym.h svm_assym.h
73DPSRCS+=	vmx_genassym.c svm_genassym.c offset.inc
74
75CFLAGS+= -I${SRCTOP}/sys/amd64/vmm/intel
76CFLAGS+= -I${SRCTOP}/sys/amd64/vmm/amd
77
78SRCS+=	vmm_host.c	\
79	vmm_ioport.c	\
80	vmm_lapic.c	\
81	vmm_mem.c	\
82	vmm_util.c	\
83	x86.c
84
85.PATH: ${SRCTOP}/sys/${MACHINE}/vmm/io
86SRCS+=	iommu.c		\
87	ppt.c           \
88	vatpic.c	\
89	vatpit.c	\
90	vhpet.c		\
91	vioapic.c	\
92	vlapic.c	\
93	vpmtmr.c	\
94	vrtc.c
95
96# intel-specific files
97.PATH: ${SRCTOP}/sys/amd64/vmm/intel
98SRCS+=	ept.c		\
99	vmcs.c		\
100	vmx_msr.c	\
101	vmx_support.S	\
102	vmx.c		\
103	vtd.c
104
105# amd-specific files
106.PATH: ${SRCTOP}/sys/amd64/vmm/amd
107SRCS+=	vmcb.c		\
108	amdiommu.c	\
109	ivhd_if.c	\
110	ivhd_if.h	\
111	svm.c		\
112	svm_support.S	\
113	npt.c		\
114	ivrs_drv.c	\
115	amdvi_hw.c	\
116	svm_msr.c
117
118SRCS.BHYVE_SNAPSHOT=	vmm_snapshot.c
119
120CLEANFILES+=	vmx_assym.h vmx_genassym.o svm_assym.h svm_genassym.o
121
122OBJS_DEPEND_GUESS.vmx_support.o+= vmx_assym.h
123OBJS_DEPEND_GUESS.svm_support.o+= svm_assym.h
124.endif
125
126vmx_assym.h:    vmx_genassym.o
127	sh ${SYSDIR}/kern/genassym.sh vmx_genassym.o > ${.TARGET}
128
129svm_assym.h:    svm_genassym.o
130	sh ${SYSDIR}/kern/genassym.sh svm_genassym.o > ${.TARGET}
131
132vmx_support.o:
133	${CC} -c -x assembler-with-cpp -DLOCORE ${CFLAGS} \
134	    ${.IMPSRC} -o ${.TARGET}
135
136svm_support.o:
137	${CC} -c -x assembler-with-cpp -DLOCORE ${CFLAGS} \
138	    ${.IMPSRC} -o ${.TARGET}
139
140hyp_genassym.o: offset.inc
141	${CC} -c ${NOSAN_CFLAGS:N-flto:N-fno-common} -fcommon ${.IMPSRC}
142
143vmx_genassym.o: offset.inc
144	${CC} -c ${NOSAN_CFLAGS:N-flto*:N-fno-common} -fcommon ${.IMPSRC}
145
146svm_genassym.o: offset.inc
147	${CC} -c ${NOSAN_CFLAGS:N-flto*:N-fno-common} -fcommon ${.IMPSRC}
148
149.include <bsd.kmod.mk>
150