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.


added support for turning off debugging sections
[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.66 $
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 ifeq ($(DEBUG),1)
145   JRLDEBUG= -DSERIAL_PRINT_DEBUG=1 -DSERIAL_PRINT_DEBUG_LEVEL=10 -DSERIAL_PRINT=1 -DVMM_DEBUG=1 -DVMM_INFO=1 -DVMM_TRACE=1 $(DEBUG_SECTIONS)
146
147 else
148   JRLDEBUG= -DSERIAL_PRINT_DEBUG=0 -DSERIAL_PRINT_DEBUG_LEVEL=999999 -DSERIAL_PRINT=0 -DVMM_DEBUG=0 -DVMM_INFO=0 -DVMM_TRACE=0
149 endif
150
151
152 #
153 # DECODER is the decoder that will be used 
154 # currently we only support xed
155 #
156 DECODER=XED
157
158 DECODER_FLAGS=
159 DECODER_SRCS=
160 DECODER_LIBS=
161
162 ifeq ($(DECODER),XED)
163 DECODER_SRCS := vmm_xed.c
164 DECODER_FLAGS :=  -L../lib/xed
165 DECODER_LIBS := -lxed
166 else
167 # This is an error
168 endif
169
170 #
171 #TCPSTACK, uIP is used currently
172 #
173 TCPSTACK=UIP
174
175 #
176 #RAMDISK
177 #
178 RAMDISK_SRCS=
179 BOOT_FLAGS=
180
181 ifeq ($(RAMDISK_BOOT),1)
182 BOOT_FLAGS := $(BOOT_FLAGS) -DRAMDISK_BOOT
183 RAMDISK_SRCS := ramdisk.c cdrom.c
184 endif
185
186
187
188 #
189 # This is wrong for current cygwin - no changes needed
190 #
191 # Figure out if we're compiling with cygwin, http://cygwin.com
192 #
193
194 #SYSTEM_NAME := $(shell uname -s)
195 #ifeq ($(findstring CYGWIN,$(SYSTEM_NAME)),CYGWIN)
196 #SYM_PFX            := _
197 #EXTRA_C_OPTS       := -DNEED_UNDERSCORE -DGNU_WIN32
198 #EXTRA_NASM_OPTS    := -DNEED_UNDERSCORE
199 #NON_ELF_SYSTEM     := yes
200 #EXTRA_CC_USER_OPTS := -Dmain=geekos_main
201 #endif
202
203
204
205
206 # ----------------------------------------------------------------------
207 # Configuration -
208 #   Various options specifying how GeekOS should be built,
209 #   what source files to build, which user programs to build,
210 #   etc.  This is generally the only section of the makefile
211 #   that will need to be modified.
212 # ----------------------------------------------------------------------
213
214 # List of targets to build by default.
215 # These targets encompass everything needed to boot
216 # and run GeekOS.
217 ALL_TARGETS := vmm.img vm_kernel
218
219
220 # Kernel source files
221 KERNEL_C_SRCS := idt.c int.c trap.c irq.c io.c \
222         blockdev.c ide.c ne2k.c \
223         keyboard.c screen.c timer.c \
224         mem.c crc32.c \
225         gdt.c tss.c segment.c \
226         bget.c malloc.c \
227         synch.c kthread.c \
228         serial.c  reboot.c \
229         paging.c \
230         debug.c vmm_stubs.c  vm.c  pci.c\
231         main.c
232
233 # Kernel object files built from C source files
234 KERNEL_C_OBJS := $(KERNEL_C_SRCS:%.c=geekos/%.o)
235
236 # Kernel assembly files
237 KERNEL_ASM_SRCS := lowlevel.asm
238
239 KERNEL_GAS_SRCS := testvm.s udivdi3.s
240
241 # Kernel object files build from assembler source files
242 KERNEL_ASM_OBJS := $(KERNEL_ASM_SRCS:%.asm=geekos/%.o) 
243
244 KERNEL_GAS_OBJS := $(KERNEL_GAS_SRCS:%.s=geekos/%.o)
245
246
247 # All kernel object files
248 KERNEL_OBJS := $(KERNEL_C_OBJS) \
249   $(KERNEL_ASM_OBJS) $(KERNEL_GAS_OBJS)
250
251 # Common library source files.
252 # This library is linked into both the kernel and user programs.
253 # It provides string functions and generic printf()-style
254 # formatted output.
255 COMMON_C_SRCS := fmtout.c string.c memmove.c
256
257 # Common library object files.
258 COMMON_C_OBJS := $(COMMON_C_SRCS:%.c=common/%.o)
259
260 VMM_ASM_SRCS :=  svm_lowlevel.asm \
261 #                       vmx_lowlevel.asm
262
263 VMM_ASM_OBJS := $(VMM_ASM_SRCS:%.asm=palacios/%.o)
264
265
266 VMM_C_SRCS :=   vm_guest.c \
267                 svm.c svm_handler.c vmm.c vmm_util.c vmm_ctrl_regs.c \
268                 vmcb.c vmm_mem.c vmm_paging.c vmm_io.c vmm_debug.c svm_io.c \
269                 vmm_intr.c vmm_time.c \
270                 vmm_shadow_paging.c vm_guest_mem.c  \
271                 vm_dev.c vmm_dev_mgr.c vmm_decoder.c \
272                 svm_halt.c svm_pause.c svm_wbinvd.c \
273                 vmm_config.c vmm_hashtable.c \
274                 vmm_string.c vmm_emulator.c vmm_queue.c\
275                  $(DECODER_SRCS)
276 #               vmx.c vmcs_gen.c vmcs.c
277
278 VMM_C_OBJS := $(VMM_C_SRCS:%.c=palacios/%.o)
279
280 VMM_OBJS := $(VMM_C_OBJS) $(VMM_ASM_OBJS)
281
282
283
284
285 DEVICE_C_SRCS := generic.c keyboard.c nvram.c timer.c simple_pic.c 8259a.c 8254.c serial.c $(RAMDISK_SRCS)
286
287 DEVICE_C_OBJS := $(DEVICE_C_SRCS:%.c=devices/%.o)
288
289 DEVICE_OBJS := $(DEVICE_C_OBJS)
290
291 V3LIBS := $(DECODER_LIBS)
292
293
294 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
295
296 TCPSTACK_C_OBJS := $(TCPSTACK_C_SRCS:%.c=net/%.o)
297
298 TCPSTACK_OBJS := $(TCPSTACK_C_OBJS)
299
300
301
302
303 # ----------------------------------------------------------------------
304 # Tools -
305 #   This section defines programs that are used to build GeekOS.
306 # ----------------------------------------------------------------------
307
308 # Uncomment if cross compiling
309 TARGET_CC_PREFIX :=  $(PROJECT_ROOT)/../devtools/i386/bin/i386-elf-
310 #TARGET_CC_PREFIX :=  i386-elf-
311
312 # Target C compiler.  gcc 2.95.2 or later should work.
313 TARGET_CC := $(TARGET_CC_PREFIX)gcc
314 #TARGET_CC := $(TARGET_CC_PREFIX)gcc34 -m32
315
316 # Host C compiler.  This is used to compile programs to execute on
317 # the host platform, not the target (x86) platform.  On x86/ELF
318 # systems, such as Linux and FreeBSD, it can generally be the same
319 # as the target C compiler.
320 HOST_CC := gcc
321
322 # Target linker.  GNU ld is probably to only one that will work.
323 TARGET_LD := $(TARGET_CC_PREFIX)ld -melf_i386
324
325 # Target archiver
326 TARGET_AR := $(TARGET_CC_PREFIX)ar
327
328 # Target ranlib
329 TARGET_RANLIB := $(TARGET_CC_PREFIX)ranlib
330
331 # Target nm
332 TARGET_NM := $(TARGET_CC_PREFIX)nm
333
334 # Target objcopy
335 TARGET_OBJCOPY := $(TARGET_CC_PREFIX)objcopy
336
337 # Nasm (http://nasm.sourceforge.net)
338 NASM := $(PROJECT_ROOT)/../devtools/bin/nasm
339 #NASM := /opt/vmm-tools/bin/nasm
340
341 AS = as --32
342
343 # Tool to build PFAT filesystem images.
344 BUILDFAT := tools/builtFat.exe
345
346 # Perl5 or later
347 PERL := perl
348
349 # Pad a file so its size is a multiple of some unit (i.e., sector size)
350 PAD := $(PERL) $(PROJECT_ROOT)/scripts/pad
351
352 # Create a file filled with zeroes.
353 ZEROFILE := $(PERL) $(PROJECT_ROOT)/scripts/zerofile
354
355 # Calculate size of file in sectors
356 NUMSECS := $(PERL) $(PROJECT_ROOT)/scripts/numsecs
357
358
359 FD_SECTORS_PER_TRACK := $(PERL) $(PROJECT_ROOT)/scripts/numsecs_per_track
360
361
362 # ----------------------------------------------------------------------
363 # Definitions -
364 #   Options passed to the tools.
365 # ----------------------------------------------------------------------
366
367 # Flags used for all C source files
368 GENERAL_OPTS := -O -Wall $(EXTRA_C_OPTS) $(VMM_FLAGS) $(BOOT_FLAGS) -fPIC
369 CC_GENERAL_OPTS := $(GENERAL_OPTS) -Werror 
370
371 # Flags used for kernel C source files
372 CC_KERNEL_OPTS := -g -DGEEKOS -I$(PROJECT_ROOT)/include
373
374 # Flags used for VMM C source files
375 CC_VMM_OPTS := -g -I$(PROJECT_ROOT)/include -D__V3VEE__ -D__V3_32BIT__ $(DECODER_FLAGS) $(JRLDEBUG)
376
377 # Flags used for VMM C ASM files
378 NASM_VMM_OPTS := -I$(PROJECT_ROOT)/src/palacios/ -f elf $(EXTRA_NASM_OPTS)
379
380 # Flags user for kernel assembly files
381 NASM_KERNEL_OPTS := -I$(PROJECT_ROOT)/src/geekos/ -f elf $(EXTRA_NASM_OPTS)
382
383 # Flags used for common library and libc source files
384 CC_USER_OPTS := -I$(PROJECT_ROOT)/include -I$(PROJECT_ROOT)/include/libc \
385         $(EXTRA_CC_USER_OPTS)
386
387 # Flags passed to objcopy program (strip unnecessary sections from kernel.exe)
388 OBJCOPY_FLAGS := -R .dynamic -R .note -R .comment
389
390 # ----------------------------------------------------------------------
391 # Rules -
392 #   Describes how to compile the source files.
393 # ----------------------------------------------------------------------
394
395 # Compilation of kernel C source files
396
397 geekos/%.o : geekos/%.c
398         $(TARGET_CC) -c $(CC_GENERAL_OPTS) $(CC_KERNEL_OPTS) $< -o geekos/$*.o
399
400
401 # Compilation of kernel assembly source files
402 geekos/%.o : geekos/%.asm
403         $(NASM) $(NASM_KERNEL_OPTS) $< -o geekos/$*.o
404
405 # Compilation of test VM
406 geekos/%.o : geekos/%.s
407         $(AS) $< -o geekos/$*.o
408
409 geekos/%.o : geekos/%.S
410         $(TARGET_CC) -c $(CC_GENERAL_OPTS) $(CC_KERNEL_OPTS) $< -o geekos/$*.o
411
412 # Compilation of common library C source files
413 common/%.o : common/%.c
414         $(TARGET_CC) -c $(CC_GENERAL_OPTS) $(CC_USER_OPTS) $< -o common/$*.o
415
416 palacios/%.o : palacios/%.c
417         $(TARGET_CC) -c $(CC_GENERAL_OPTS) $(CC_VMM_OPTS) $< -o palacios/$*.o
418
419 palacios/%.o : palacios/%.asm
420         $(NASM) $(NASM_VMM_OPTS) $< -o palacios/$*.o
421
422 devices/%.o : devices/%.c
423         $(TARGET_CC) -c $(CC_GENERAL_OPTS) $(CC_VMM_OPTS) $< -o devices/$*.o
424
425 devices/%.o : devices/%.asm
426         $(NASM) $(NASM_VMM_OPTS) $< -o devices/$*.o
427
428 net/%.o : net/%.c
429         $(TARGET_CC) -c $(CC_GENERAL_OPTS) $(CC_VMM_OPTS)  $(CC_USER_OPTS) $< -o net/$*.o
430
431 # ----------------------------------------------------------------------
432 # Targets -
433 #   Specifies files to be built
434 # ----------------------------------------------------------------------
435
436 # Default target - see definition of ALL_TARGETS in Configuration section
437 all : $(ALL_TARGETS)
438
439
440 #geekos/vmx_lowlevel.o: $(PROJECT_ROOT)/src/geekos/vmx_lowlevel.asm
441 #       $(NASM) -O99 \
442 #       -f elf \
443 #               -I$(PROJECT_ROOT)/src/geekos/ \
444 #               $(PROJECT_ROOT)/src/geekos/vmx_lowlevel.asm \
445 #       -o $@
446
447
448 #geekos/test: geekos/test.o geekos/vmcs.o geekos/vmx_lowlevel.o 
449 #       $(CC) geekos/test.o geekos/vmcs.o geekos/vmx_lowlevel.o  -o geekos/test
450
451 # Standard floppy image - just boots the kernel
452 fd.img : geekos/fd_boot.bin geekos/setup.bin geekos/kernel.bin
453         cat geekos/fd_boot.bin geekos/setup.bin geekos/kernel.bin > _temp
454         $(PAD) _temp 512
455         cp _temp fd.img
456
457 vmm.img : fd.img
458         cp fd.img vmm.img
459         $(PAD) vmm.img 1474560
460
461 force_rombios: 
462         (cd ../src/vmboot/rombios; make clean; make)
463
464 force_vgabios:
465         (cd ../src/vmboot/vgabios; make clean; make)
466
467 force_payload: force_rombios force_vgabios
468         ../scripts/make_payload.pl payload_layout.txt vm_kernel
469
470 inter1: force_payload
471         -make clean
472
473 world: inter1 vmm.img
474
475 # make ready to boot over PXE
476 pxe:    vmm.img
477         cp vmm.img /tftpboot/vmm.img
478
479 run: vmm.img
480         /usr/local/qemu/bin/qemu-system-x86_64 -m 1024 -serial file:serial.out -cdrom puppy.iso -fda vmm.img 
481
482
483
484
485 # Floppy boot sector (first stage boot loader).
486 geekos/fd_boot.bin : geekos/setup.bin geekos/kernel.bin $(PROJECT_ROOT)/src/geekos/fd_boot.asm
487         $(NASM) -f bin \
488                 -I$(PROJECT_ROOT)/src/geekos/ \
489                 -DNUM_SETUP_SECTORS=`$(NUMSECS) geekos/setup.bin` \
490                 -DNUM_KERN_SECTORS=`$(NUMSECS) geekos/kernel.bin` \
491                 -DSECTORS_PER_TRACK=`$(FD_SECTORS_PER_TRACK) geekos/kernel.bin geekos/setup.bin` \
492                 $(PROJECT_ROOT)/src/geekos/fd_boot.asm \
493                 -o $@
494
495 # Setup program (second stage boot loader).
496 geekos/setup.bin : geekos/kernel.bin $(PROJECT_ROOT)/src/geekos/setup.asm
497         $(NASM) -f bin \
498                 -I$(PROJECT_ROOT)/src/geekos/ \
499                 -DENTRY_POINT=0x`egrep 'Main$$' geekos/kernel.syms |awk '{print $$1}'` \
500                 -DVMM_SIZE=`$(NUMSECS) geekos/kernel.bin` \
501                 $(PROJECT_ROOT)/src/geekos/setup.asm \
502                 -o $@
503         $(PAD) $@ 2048
504
505 # Loadable (flat) kernel image.
506 geekos/kernel.bin : geekos/kernel.exe
507         $(TARGET_OBJCOPY) $(OBJCOPY_FLAGS) -S -O binary geekos/kernel.exe geekos/kernel.bin
508         $(PAD) $@ 512
509
510 # The kernel executable and symbol map.
511 geekos/kernel.exe : $(KERNEL_OBJS) $(COMMON_C_OBJS) $(VMM_OBJS) $(DEVICE_OBJS) $(TCPSTACK_OBJS) vm_kernel
512         $(TARGET_LD) -o geekos/kernel.exe -Ttext $(KERNEL_BASE_ADDR) -e $(KERNEL_ENTRY) \
513                 $(DECODER_FLAGS) \
514                 $(KERNEL_OBJS) $(COMMON_C_OBJS) $(VMM_OBJS) $(DEVICE_OBJS) $(V3LIBS) $(TCPSTACK_OBJS) -b binary vm_kernel
515         $(TARGET_NM) geekos/kernel.exe > geekos/kernel.syms
516
517
518 force:
519
520
521 #vm_kernel: force
522 #       $(PAD) vm_kernel 512
523 #       @echo "VM kernel lives at 0x100000 and is" `$(NUMSECS) vm_kernel` "sectors long"
524
525
526
527
528 # Clean build directories of generated files
529 clean :
530         for d in geekos common libc user tools palacios devices net; do \
531                 (cd $$d && rm -f *); \
532         done
533
534
535 # Build header file dependencies, so source files are recompiled when
536 # header files they depend on are modified.
537 depend : $(GENERATED_LIBC_SRCS)
538         $(TARGET_CC) -M $(CC_GENERAL_OPTS) $(CC_KERNEL_OPTS) \
539                 $(KERNEL_C_SRCS:%.c=$(PROJECT_ROOT)/src/geekos/%.c) \
540                 | $(PERL) -n -e 's,^(\S),geekos/$$1,;print' \
541                 > depend.mak
542         $(TARGET_CC) -M $(CC_GENERAL_OPTS) $(CC_USER_OPTS) \
543                 $(COMMON_C_SRCS:%.c=$(PROJECT_ROOT)/src/common/%.c) \
544                 | $(PERL) -n -e 's,^(\S),common/$$1,;print' \
545                 >> depend.mak
546         $(TARGET_CC) -M $(CC_GENERAL_OPTS) $(CC_KERNEL_OPTS) \
547                 $(VMM_C_SRCS:%.c=$(PROJECT_ROOT)/src/palacios/%.c) \
548                 | $(PERL) -n -e 's,^(\S),palacios/$$1,;print' \
549                 >> depend.mak
550         $(TARGET_CC) -M $(CC_GENERAL_OPTS) $(CC_KERNEL_OPTS) \
551                 $(DEVICE_C_SRCS:%.c=$(PROJECT_ROOT)/src/devices/%.c) \
552                 | $(PERL) -n -e 's,^(\S),devices/$$1,;print' \
553                 >> depend.mak
554
555 # By default, there are no header file dependencies.
556 depend.mak :
557         touch $@
558
559 include depend.mak