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.


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