Palacios Public Git Repository

To checkout Palacios execute

  git clone http://v3vee.org/palacios/palacios.web/palacios.git
This will give you the master branch. You probably want the devel branch or one of the release branches. To switch to the devel branch, simply execute
  cd palacios
  git checkout --track -b devel origin/devel
The other branches are similar.


fixed a ton of compile errors
[palacios.git] / palacios / build / Makefile
1 # Makefile for GeekOS kernel, userspace, and tools
2 # Copyright (c) 2004,2005 David H. Hovemeyer <daveho@cs.umd.edu>
3 # $Revision: 1.70 $
4
5 # This is free software.  You are permitted to use,
6 # redistribute, and modify it as specified in the file "COPYING".
7
8 # Required software to build GeekOS:
9 # - GNU Make (http://www.gnu.org/software/make)
10 # - gcc 2.95.2 generating code for target (i386/ELF) and host platforms
11 # - nasm (http://nasm.sourceforge.net)
12 # - Perl5, AWK (any version), egrep
13 #
14 # Cygwin (http://cygwin.com) may be used to build GeekOS.
15 # Make sure that gcc, binutils, nasm, and perl are installed.
16
17 # NOTES:
18 # - This makefile has been written carefully to work correctly
19 #   with the -j (parallel make) option.  I regularly use "make -j 2"
20 #   to speed the build process on 2 processor systems.
21
22
23 # Base address of kernel
24 #
25 # Note: at top of memory minus three pages (GDT/TSS/IDT) 
26 # minus maximum size
27 #
28 #
29 # Note that the code will initially load at 0x10000
30 #
31 # The setup code needs to copy it up to this address and jump there
32 #
33 KERNEL_BASE_ADDR := 0x00100000
34
35 # Kernel entry point function
36 KERNEL_ENTRY = $(SYM_PFX)Main
37
38
39 PROJECT_ROOT := ..
40 VPATH := $(PROJECT_ROOT)/src
41
42 #when -DNDEBUG is set the kassert functions are disabled
43 #JRLDEBUG=-DNDEBUG
44
45 # DEBUG=1 means VMM_DEBUG, VMM_INFO, and VMM_TRACE are enabled
46 # as are SERIAL_PRINT_DEBUG
47
48 DEBUG=1
49 DEBUG_SECTIONS= 
50
51 ifeq ($(DEBUG_ALL),1)
52   DEBUG_SECTIONS:= $(DEBUG_SECTIONS) -DDEBUG_SHADOW_PAGING -DDEBUG_CTRL_REGS -DDEBUG_INTERRUPTS -DDEBUG_IO -DDEBUG_KEYBOARD -DDEBUG_PIC -DDEBUG_PIT -DDEBUG_NVRAM -DDEBUG_EMULATOR -DDEBUG_GENERIC -DDEBUG_RAMDISK
53 endif
54
55 ifeq ($(DEBUG_SHADOW_PAGING),1)
56 DEBUG_SECTIONS := $(DEBUG_SECTIONS) -DDEBUG_SHADOW_PAGING
57 else 
58 ifeq ($(DEBUG_SHADOW_PAGING),0) 
59 DEBUG_SECTIONS := $(DEBUG_SECTIONS) -UDEBUG_SHADOW_PAGING
60 endif
61 endif
62
63 ifeq ($(DEBUG_CTRL_REGS),1)
64 DEBUG_SECTIONS := $(DEBUG_SECTIONS) -DDEBUG_CTRL_REGS
65 else 
66 ifeq ($(DEBUG_CTRL_REGS),0) 
67 DEBUG_SECTIONS := $(DEBUG_SECTIONS) -UDEBUG_CTRL_REGS
68 endif
69 endif
70
71 ifeq ($(DEBUG_INTERRUPTS),1)
72 DEBUG_SECTIONS := $(DEBUG_SECTIONS) -DDEBUG_INTERRUPTS
73 else 
74 ifeq ($(DEBUG_DEBUG_INTERRUPTS),0) 
75 DEBUG_SECTIONS := $(DEBUG_SECTIONS) -UDEBUG_INTERRUPTS
76 endif
77 endif
78
79 ifeq ($(DEBUG_IO),1)
80 DEBUG_SECTIONS := $(DEBUG_SECTIONS) -DDEBUG_IO
81 else 
82 ifeq ($(DEBUG_IO),0) 
83 DEBUG_SECTIONS := $(DEBUG_SECTIONS) -UDEBUG_IO
84 endif
85 endif
86
87 ifeq ($(DEBUG_KEYBOARD),1)
88 DEBUG_SECTIONS := $(DEBUG_SECTIONS) -DDEBUG_KEYBOARD
89 else 
90 ifeq ($(DEBUG_KEYBOARD),0) 
91 DEBUG_SECTIONS := $(DEBUG_SECTIONS) -UDEBUG_KEYBOARD
92 endif
93 endif
94
95 ifeq ($(DEBUG_PIC),1)
96 DEBUG_SECTIONS := $(DEBUG_SECTIONS) -DDEBUG_PIC
97 else 
98 ifeq ($(DEBUG_PIC),0) 
99 DEBUG_SECTIONS := $(DEBUG_SECTIONS) -UDEBUG_PIC
100 endif
101 endif
102
103 ifeq ($(DEBUG_PIT),1)
104 DEBUG_SECTIONS := $(DEBUG_SECTIONS) -DDEBUG_PIT
105 else 
106 ifeq ($(DEBUG_PIT),0) 
107 DEBUG_SECTIONS := $(DEBUG_SECTIONS) -UDEBUG_PIT
108 endif
109 endif
110
111 ifeq ($(DEBUG_NVRAM),1)
112 DEBUG_SECTIONS := $(DEBUG_SECTIONS) -DDEBUG_NVRAM
113 else 
114 ifeq ($(DEBUG_NVRAM),0) 
115 DEBUG_SECTIONS := $(DEBUG_SECTIONS) -UDEBUG_NVRAM
116 endif
117 endif
118
119 ifeq ($(DEBUG_GENERIC),1)
120 DEBUG_SECTIONS := $(DEBUG_SECTIONS) -DDEBUG_GENERIC
121 else 
122 ifeq ($(DEBUG_GENERIC),0) 
123 DEBUG_SECTIONS := $(DEBUG_SECTIONS) -UDEBUG_GENERIC
124 endif
125 endif
126
127 ifeq ($(DEBUG_EMULATOR),1)
128 DEBUG_SECTIONS := $(DEBUG_SECTIONS) -DDEBUG_EMULATOR
129 else 
130 ifeq ($(DEBUG_EMULATOR),0) 
131 DEBUG_SECTIONS := $(DEBUG_SECTIONS) -UDEBUG_EMULATOR
132 endif
133 endif
134
135 ifeq ($(DEBUG_RAMDISK),1)
136 DEBUG_SECTIONS := $(DEBUG_SECTIONS) -DDEBUG_RAMDISK
137 else 
138 ifeq ($(DEBUG_RAMDISK),0) 
139 DEBUG_SECTIONS := $(DEBUG_SECTIONS) -UDEBUG_RAMDISK
140 endif
141 endif
142
143
144 #DEBUG_SECTIONS := $(DEBUG_SECTIONS) -DTEST_NE2K
145
146 ifeq ($(DEBUG),1)
147   JRLDEBUG= -DSERIAL_PRINT_DEBUG=1 -DSERIAL_PRINT_DEBUG_LEVEL=10 -DSERIAL_PRINT=1 -DVMM_DEBUG=1 -DVMM_INFO=1 -DVMM_TRACE=1 $(DEBUG_SECTIONS)
148
149 else
150   JRLDEBUG= -DSERIAL_PRINT_DEBUG=0 -DSERIAL_PRINT_DEBUG_LEVEL=999999 -DSERIAL_PRINT=0 -DVMM_DEBUG=0 -DVMM_INFO=0 -DVMM_TRACE=0
151 endif
152
153
154 #
155 # DECODER is the decoder that will be used 
156 # currently we only support xed
157 #
158 DECODER=XED
159
160 DECODER_FLAGS=
161 DECODER_SRCS=
162 DECODER_LIBS=
163
164 ifeq ($(DECODER),XED)
165 DECODER_SRCS := vmm_xed.c
166 DECODER_FLAGS :=  -L../lib/xed
167 DECODER_LIBS := -lxed
168 else
169 # This is an error
170 endif
171
172 #
173 #TCPSTACK, uIP is used currently
174 #
175 TCPSTACK=UIP
176
177 #
178 #RAMDISK
179 #
180 RAMDISK_SRCS=
181 BOOT_FLAGS=
182
183 ifeq ($(RAMDISK_BOOT),1)
184 BOOT_FLAGS := $(BOOT_FLAGS) -DRAMDISK_BOOT
185 RAMDISK_SRCS := ramdisk.c cdrom.c
186 endif
187
188
189
190 #
191 # This is wrong for current cygwin - no changes needed
192 #
193 # Figure out if we're compiling with cygwin, http://cygwin.com
194 #
195
196 #SYSTEM_NAME := $(shell uname -s)
197 #ifeq ($(findstring CYGWIN,$(SYSTEM_NAME)),CYGWIN)
198 #SYM_PFX            := _
199 #EXTRA_C_OPTS       := -DNEED_UNDERSCORE -DGNU_WIN32
200 #EXTRA_NASM_OPTS    := -DNEED_UNDERSCORE
201 #NON_ELF_SYSTEM     := yes
202 #EXTRA_CC_USER_OPTS := -Dmain=geekos_main
203 #endif
204
205
206
207
208 # ----------------------------------------------------------------------
209 # Configuration -
210 #   Various options specifying how GeekOS should be built,
211 #   what source files to build, which user programs to build,
212 #   etc.  This is generally the only section of the makefile
213 #   that will need to be modified.
214 # ----------------------------------------------------------------------
215
216 # List of targets to build by default.
217 # These targets encompass everything needed to boot
218 # and run GeekOS.
219 ALL_TARGETS := vmm.img vm_kernel
220
221
222 # Kernel source files
223 KERNEL_C_SRCS := idt.c int.c trap.c irq.c io.c \
224         blockdev.c ide.c ne2k.c \
225         keyboard.c screen.c timer.c \
226         mem.c crc32.c \
227         gdt.c tss.c segment.c \
228         bget.c malloc.c \
229         synch.c kthread.c \
230         serial.c  reboot.c \
231         paging.c \
232         debug.c vmm_stubs.c  vm.c  pci.c\
233         queue.c  ring_buffer.c \
234         main.c
235         #socket.c
236
237 # Kernel object files built from C source files
238 KERNEL_C_OBJS := $(KERNEL_C_SRCS:%.c=geekos/%.o)
239
240 # Kernel assembly files
241 KERNEL_ASM_SRCS := lowlevel.asm
242
243 KERNEL_GAS_SRCS := testvm.s udivdi3.s
244
245 # Kernel object files build from assembler source files
246 KERNEL_ASM_OBJS := $(KERNEL_ASM_SRCS:%.asm=geekos/%.o) 
247
248 KERNEL_GAS_OBJS := $(KERNEL_GAS_SRCS:%.s=geekos/%.o)
249
250
251 # All kernel object files
252 KERNEL_OBJS := $(KERNEL_C_OBJS) \
253   $(KERNEL_ASM_OBJS) $(KERNEL_GAS_OBJS)
254
255 # Common library source files.
256 # This library is linked into both the kernel and user programs.
257 # It provides string functions and generic printf()-style
258 # formatted output.
259 COMMON_C_SRCS := fmtout.c string.c memmove.c
260
261 # Common library object files.
262 COMMON_C_OBJS := $(COMMON_C_SRCS:%.c=common/%.o)
263
264 VMM_ASM_SRCS :=  svm_lowlevel.asm \
265 #                       vmx_lowlevel.asm
266
267 VMM_ASM_OBJS := $(VMM_ASM_SRCS:%.asm=palacios/%.o)
268
269
270 VMM_C_SRCS :=   vm_guest.c \
271                 svm.c svm_handler.c vmm.c vmm_util.c vmm_ctrl_regs.c \
272                 vmcb.c vmm_mem.c vmm_paging.c vmm_io.c vmm_debug.c svm_io.c \
273                 vmm_intr.c vmm_time.c \
274                 vmm_shadow_paging.c vm_guest_mem.c  \
275                 vm_dev.c vmm_dev_mgr.c vmm_decoder.c \
276                 svm_halt.c svm_pause.c svm_wbinvd.c \
277                 vmm_config.c vmm_hashtable.c \
278                 vmm_string.c vmm_emulator.c vmm_queue.c\
279                  $(DECODER_SRCS)
280 #               vmx.c vmcs_gen.c vmcs.c
281
282 VMM_C_OBJS := $(VMM_C_SRCS:%.c=palacios/%.o)
283
284 VMM_OBJS := $(VMM_C_OBJS) $(VMM_ASM_OBJS)
285
286
287
288
289 DEVICE_C_SRCS := generic.c keyboard.c nvram.c timer.c simple_pic.c 8259a.c 8254.c serial.c $(RAMDISK_SRCS)
290
291 DEVICE_C_OBJS := $(DEVICE_C_SRCS:%.c=devices/%.o)
292
293 DEVICE_OBJS := $(DEVICE_C_OBJS)
294
295 V3LIBS := $(DECODER_LIBS)
296
297
298 TCPSTACK_C_SRCS := psock.c timer.c uip_arp.c uip.c uip-fw.c uiplib.c uip-neighbor.c uip-split.c resolv.c
299
300 TCPSTACK_C_OBJS := $(TCPSTACK_C_SRCS:%.c=net/%.o)
301
302 TCPSTACK_OBJS := $(TCPSTACK_C_OBJS)
303
304
305
306
307 # ----------------------------------------------------------------------
308 # Tools -
309 #   This section defines programs that are used to build GeekOS.
310 # ----------------------------------------------------------------------
311
312 # Uncomment if cross compiling
313 TARGET_CC_PREFIX :=  $(PROJECT_ROOT)/../devtools/i386/bin/i386-elf-
314 #TARGET_CC_PREFIX :=  i386-elf-
315
316 # Target C compiler.  gcc 2.95.2 or later should work.
317 TARGET_CC := $(TARGET_CC_PREFIX)gcc
318 #TARGET_CC := $(TARGET_CC_PREFIX)gcc34 -m32
319
320 # Host C compiler.  This is used to compile programs to execute on
321 # the host platform, not the target (x86) platform.  On x86/ELF
322 # systems, such as Linux and FreeBSD, it can generally be the same
323 # as the target C compiler.
324 HOST_CC := gcc
325
326 # Target linker.  GNU ld is probably to only one that will work.
327 TARGET_LD := $(TARGET_CC_PREFIX)ld -melf_i386
328
329 # Target archiver
330 TARGET_AR := $(TARGET_CC_PREFIX)ar
331
332 # Target ranlib
333 TARGET_RANLIB := $(TARGET_CC_PREFIX)ranlib
334
335 # Target nm
336 TARGET_NM := $(TARGET_CC_PREFIX)nm
337
338 # Target objcopy
339 TARGET_OBJCOPY := $(TARGET_CC_PREFIX)objcopy
340
341 # Nasm (http://nasm.sourceforge.net)
342 NASM := $(PROJECT_ROOT)/../devtools/bin/nasm
343 #NASM := /opt/vmm-tools/bin/nasm
344
345 AS = as --32
346
347 # Tool to build PFAT filesystem images.
348 BUILDFAT := tools/builtFat.exe
349
350 # Perl5 or later
351 PERL := perl
352
353 # Pad a file so its size is a multiple of some unit (i.e., sector size)
354 PAD := $(PERL) $(PROJECT_ROOT)/scripts/pad
355
356 # Create a file filled with zeroes.
357 ZEROFILE := $(PERL) $(PROJECT_ROOT)/scripts/zerofile
358
359 # Calculate size of file in sectors
360 NUMSECS := $(PERL) $(PROJECT_ROOT)/scripts/numsecs
361
362
363 FD_SECTORS_PER_TRACK := $(PERL) $(PROJECT_ROOT)/scripts/numsecs_per_track
364
365
366 # ----------------------------------------------------------------------
367 # Definitions -
368 #   Options passed to the tools.
369 # ----------------------------------------------------------------------
370
371 # Flags used for all C source files
372 GENERAL_OPTS := -O -Wall $(EXTRA_C_OPTS) $(VMM_FLAGS) $(BOOT_FLAGS) -fPIC
373 CC_GENERAL_OPTS := $(GENERAL_OPTS) -Werror 
374
375 # Flags used for kernel C source files
376 CC_KERNEL_OPTS := -g -DGEEKOS -I$(PROJECT_ROOT)/include
377
378 # Flags used for VMM C source files
379 CC_VMM_OPTS := -g -I$(PROJECT_ROOT)/include -D__V3VEE__ -D__V3_32BIT__ $(DECODER_FLAGS) $(JRLDEBUG)
380
381 # Flags used for VMM C ASM files
382 NASM_VMM_OPTS := -I$(PROJECT_ROOT)/src/palacios/ -f elf $(EXTRA_NASM_OPTS)
383
384 # Flags user for kernel assembly files
385 NASM_KERNEL_OPTS := -I$(PROJECT_ROOT)/src/geekos/ -f elf $(EXTRA_NASM_OPTS)
386
387 # Flags used for common library and libc source files
388 CC_USER_OPTS := -I$(PROJECT_ROOT)/include -I$(PROJECT_ROOT)/include/libc \
389         $(EXTRA_CC_USER_OPTS)
390
391 # Flags passed to objcopy program (strip unnecessary sections from kernel.exe)
392 OBJCOPY_FLAGS := -R .dynamic -R .note -R .comment
393
394 # ----------------------------------------------------------------------
395 # Rules -
396 #   Describes how to compile the source files.
397 # ----------------------------------------------------------------------
398
399 # Compilation of kernel C source files
400
401 geekos/%.o : geekos/%.c
402         $(TARGET_CC) -c $(CC_GENERAL_OPTS) $(CC_KERNEL_OPTS) $< -o geekos/$*.o
403
404
405 # Compilation of kernel assembly source files
406 geekos/%.o : geekos/%.asm
407         $(NASM) $(NASM_KERNEL_OPTS) $< -o geekos/$*.o
408
409 # Compilation of test VM
410 geekos/%.o : geekos/%.s
411         $(AS) $< -o geekos/$*.o
412
413 geekos/%.o : geekos/%.S
414         $(TARGET_CC) -c $(CC_GENERAL_OPTS) $(CC_KERNEL_OPTS) $< -o geekos/$*.o
415
416 # Compilation of common library C source files
417 common/%.o : common/%.c
418         $(TARGET_CC) -c $(CC_GENERAL_OPTS) $(CC_USER_OPTS) $< -o common/$*.o
419
420 palacios/%.o : palacios/%.c
421         $(TARGET_CC) -c $(CC_GENERAL_OPTS) $(CC_VMM_OPTS) $< -o palacios/$*.o
422
423 palacios/%.o : palacios/%.asm
424         $(NASM) $(NASM_VMM_OPTS) $< -o palacios/$*.o
425
426 devices/%.o : devices/%.c
427         $(TARGET_CC) -c $(CC_GENERAL_OPTS) $(CC_VMM_OPTS) $< -o devices/$*.o
428
429 devices/%.o : devices/%.asm
430         $(NASM) $(NASM_VMM_OPTS) $< -o devices/$*.o
431
432 net/%.o : net/%.c
433         $(TARGET_CC) -c $(CC_GENERAL_OPTS) $(CC_VMM_OPTS)  $(CC_USER_OPTS) $< -o net/$*.o
434
435 # ----------------------------------------------------------------------
436 # Targets -
437 #   Specifies files to be built
438 # ----------------------------------------------------------------------
439
440 # Default target - see definition of ALL_TARGETS in Configuration section
441 all : $(ALL_TARGETS)
442
443
444 #geekos/vmx_lowlevel.o: $(PROJECT_ROOT)/src/geekos/vmx_lowlevel.asm
445 #       $(NASM) -O99 \
446 #       -f elf \
447 #               -I$(PROJECT_ROOT)/src/geekos/ \
448 #               $(PROJECT_ROOT)/src/geekos/vmx_lowlevel.asm \
449 #       -o $@
450
451
452 #geekos/test: geekos/test.o geekos/vmcs.o geekos/vmx_lowlevel.o 
453 #       $(CC) geekos/test.o geekos/vmcs.o geekos/vmx_lowlevel.o  -o geekos/test
454
455 # Standard floppy image - just boots the kernel
456 fd.img : geekos/fd_boot.bin geekos/setup.bin geekos/kernel.bin
457         cat geekos/fd_boot.bin geekos/setup.bin geekos/kernel.bin > _temp
458         $(PAD) _temp 512
459         cp _temp fd.img
460
461 vmm.img : fd.img
462         cp fd.img vmm.img
463         $(PAD) vmm.img 1474560
464
465 force_rombios: 
466         (cd ../src/vmboot/rombios; make clean; make)
467
468 force_vgabios:
469         (cd ../src/vmboot/vgabios; make clean; make)
470
471 force_payload: force_rombios force_vgabios
472         ../scripts/make_payload.pl payload_layout.txt vm_kernel
473
474 inter1: force_payload
475         -make clean
476
477 world: inter1 vmm.img
478
479 # make ready to boot over PXE
480 pxe:    vmm.img
481         cp vmm.img /tftpboot/vmm.img
482
483 run: vmm.img
484         /usr/local/qemu/bin/qemu-system-x86_64 -m 1024 -serial file:serial.out -cdrom puppy.iso -fda vmm.img 
485
486
487
488
489 # Floppy boot sector (first stage boot loader).
490 geekos/fd_boot.bin : geekos/setup.bin geekos/kernel.bin $(PROJECT_ROOT)/src/geekos/fd_boot.asm
491         $(NASM) -f bin \
492                 -I$(PROJECT_ROOT)/src/geekos/ \
493                 -DNUM_SETUP_SECTORS=`$(NUMSECS) geekos/setup.bin` \
494                 -DNUM_KERN_SECTORS=`$(NUMSECS) geekos/kernel.bin` \
495                 -DSECTORS_PER_TRACK=`$(FD_SECTORS_PER_TRACK) geekos/kernel.bin geekos/setup.bin` \
496                 $(PROJECT_ROOT)/src/geekos/fd_boot.asm \
497                 -o $@
498
499 # Setup program (second stage boot loader).
500 geekos/setup.bin : geekos/kernel.bin $(PROJECT_ROOT)/src/geekos/setup.asm
501         $(NASM) -f bin \
502                 -I$(PROJECT_ROOT)/src/geekos/ \
503                 -DENTRY_POINT=0x`egrep 'Main$$' geekos/kernel.syms |awk '{print $$1}'` \
504                 -DVMM_SIZE=`$(NUMSECS) geekos/kernel.bin` \
505                 $(PROJECT_ROOT)/src/geekos/setup.asm \
506                 -o $@
507         $(PAD) $@ 2048
508
509 # Loadable (flat) kernel image.
510 geekos/kernel.bin : geekos/kernel.exe
511         $(TARGET_OBJCOPY) $(OBJCOPY_FLAGS) -S -O binary geekos/kernel.exe geekos/kernel.bin
512         $(PAD) $@ 512
513
514 # The kernel executable and symbol map.
515 geekos/kernel.exe : $(KERNEL_OBJS) $(COMMON_C_OBJS) $(VMM_OBJS) $(DEVICE_OBJS) $(TCPSTACK_OBJS) vm_kernel
516         $(TARGET_LD) -o geekos/kernel.exe -Ttext $(KERNEL_BASE_ADDR) -e $(KERNEL_ENTRY) \
517                 $(DECODER_FLAGS) \
518                 $(KERNEL_OBJS) $(COMMON_C_OBJS) $(VMM_OBJS) $(DEVICE_OBJS) $(V3LIBS) $(TCPSTACK_OBJS) -b binary vm_kernel
519         $(TARGET_NM) geekos/kernel.exe > geekos/kernel.syms
520
521
522 force:
523
524
525 #vm_kernel: force
526 #       $(PAD) vm_kernel 512
527 #       @echo "VM kernel lives at 0x100000 and is" `$(NUMSECS) vm_kernel` "sectors long"
528
529
530
531
532 # Clean build directories of generated files
533 clean :
534         for d in geekos common libc user tools palacios devices net; do \
535                 (cd $$d && rm -f *); \
536         done
537
538
539 # Build header file dependencies, so source files are recompiled when
540 # header files they depend on are modified.
541 depend : $(GENERATED_LIBC_SRCS)
542         $(TARGET_CC) -M $(CC_GENERAL_OPTS) $(CC_KERNEL_OPTS) \
543                 $(KERNEL_C_SRCS:%.c=$(PROJECT_ROOT)/src/geekos/%.c) \
544                 | $(PERL) -n -e 's,^(\S),geekos/$$1,;print' \
545                 > depend.mak
546         $(TARGET_CC) -M $(CC_GENERAL_OPTS) $(CC_USER_OPTS) \
547                 $(COMMON_C_SRCS:%.c=$(PROJECT_ROOT)/src/common/%.c) \
548                 | $(PERL) -n -e 's,^(\S),common/$$1,;print' \
549                 >> depend.mak
550         $(TARGET_CC) -M $(CC_GENERAL_OPTS) $(CC_KERNEL_OPTS) \
551                 $(VMM_C_SRCS:%.c=$(PROJECT_ROOT)/src/palacios/%.c) \
552                 | $(PERL) -n -e 's,^(\S),palacios/$$1,;print' \
553                 >> depend.mak
554         $(TARGET_CC) -M $(CC_GENERAL_OPTS) $(CC_KERNEL_OPTS) \
555                 $(DEVICE_C_SRCS:%.c=$(PROJECT_ROOT)/src/devices/%.c) \
556                 | $(PERL) -n -e 's,^(\S),devices/$$1,;print' \
557                 >> depend.mak
558
559 # By default, there are no header file dependencies.
560 depend.mak :
561         touch $@
562
563 include depend.mak