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.


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