Diff markup
001 001
002 002
003 003
004 004
005 005
006 006
007 007
008 008
009 009
010 010
011 011
012 012
013 013
014 014
015 015
016 016
017 017
018 CC=gcc 018 CC=gcc
019 LD=ld 019 LD=ld
020 CFLAGS = -Wall -nostdinc -ffreestanding -DKER !! 020 CP=cp
021 LIBGCC := $(shell $(CC) -print-libgcc-file-nam !! 021 STRIP=strip
>> 022 CFLAGS = -Wall -nostdinc -ffreestanding -DKERNEL_SOS -O
>> 023 LIBGCC = $(shell $(CC) -print-libgcc-file-name)
022 LDFLAGS = --warn-common -nostdlib 024 LDFLAGS = --warn-common -nostdlib
023 OBJECTS = bootstrap/multiboot.o 025 OBJECTS = bootstrap/multiboot.o \
024 hwcore/idt.o hwcore/gdt.o 026 hwcore/idt.o hwcore/gdt.o \
025 hwcore/swintr.o hwcore/swintr_wrappe 027 hwcore/swintr.o hwcore/swintr_wrappers.o \
026 hwcore/exception.o hwcore/exception_ 028 hwcore/exception.o hwcore/exception_wrappers.o \
027 hwcore/irq.o hwcore/irq_wrappers.o h 029 hwcore/irq.o hwcore/irq_wrappers.o hwcore/i8259.o \
028 hwcore/paging.o !! 030 hwcore/paging.o hwcore/i8254.o \
029 hwcore/i8254.o drivers/x86_videomem. <<
030 hwcore/cpu_context.o hwcore/cpu_cont 031 hwcore/cpu_context.o hwcore/cpu_context_switch.o \
031 hwcore/mm_context.o 032 hwcore/mm_context.o \
032 sos/kmem_vmm.o sos/kmem_slab.o sos/k 033 sos/kmem_vmm.o sos/kmem_slab.o sos/kmalloc.o \
033 sos/physmem.o sos/klibc.o 034 sos/physmem.o sos/klibc.o \
034 sos/thread.o sos/kwaitq.o 035 sos/thread.o sos/kwaitq.o \
035 sos/time.o sos/sched.o sos/ksynch.o 036 sos/time.o sos/sched.o sos/ksynch.o \
036 sos/process.o sos/syscall.o 037 sos/process.o sos/syscall.o \
037 sos/assert.o sos/main.o sos/mouse_si 038 sos/assert.o sos/main.o sos/mouse_sim.o \
038 sos/uaccess.o sos/calcload.o 039 sos/uaccess.o sos/calcload.o \
039 sos/umem_vmm.o sos/binfmt_elf32.o 040 sos/umem_vmm.o sos/binfmt_elf32.o \
>> 041 drivers/x86_videomem.o drivers/bochs.o \
040 drivers/zero.o drivers/mem.o 042 drivers/zero.o drivers/mem.o \
>> 043 sos/hash.o sos/fs.o sos/fs_nscache.o \
>> 044 drivers/fs_virtfs.o \
041 userland/userprogs.kimg 045 userland/userprogs.kimg
042 046
043 KERNEL_OBJ = sos.elf 047 KERNEL_OBJ = sos.elf
>> 048 KERNEL_LOAD = sos.gz
044 MULTIBOOT_IMAGE = fd.img 049 MULTIBOOT_IMAGE = fd.img
045 PWD := $(shell pwd) 050 PWD := $(shell pwd)
046 051
047 052
048 all: $(MULTIBOOT_IMAGE) 053 all: $(MULTIBOOT_IMAGE)
049 054
050 $(MULTIBOOT_IMAGE): $(KERNEL_OBJ) !! 055 $(MULTIBOOT_IMAGE): $(KERNEL_LOAD)
051 ./support/build_image.sh $@ $< 056 ./support/build_image.sh $@ $<
052 057
>> 058 $(KERNEL_LOAD): $(KERNEL_OBJ)
>> 059 $(CP) $< $<.strip && $(STRIP) -sx $<.strip
>> 060 gzip < $<.strip > $@
>> 061
053 $(KERNEL_OBJ): $(OBJECTS) ./support/sos.lds 062 $(KERNEL_OBJ): $(OBJECTS) ./support/sos.lds
054 $(LD) $(LDFLAGS) -T ./support/sos.lds 063 $(LD) $(LDFLAGS) -T ./support/sos.lds -o $@ $(OBJECTS) $(LIBGCC)
055 -nm -C $@ | cut -d ' ' -f 1,3 > sos.ma 064 -nm -C $@ | cut -d ' ' -f 1,3 > sos.map
056 size $@ 065 size $@
057 066
058 -include .mkvars 067 -include .mkvars
059 068
060 # Create the userland programs to include in t 069 # Create the userland programs to include in the kernel image
061 userland/userprogs.kimg: FORCE 070 userland/userprogs.kimg: FORCE
062 $(MAKE) -C userland 071 $(MAKE) -C userland
063 072
064 073
065 %.o: %.c 074 %.o: %.c
066 $(CC) -I$(PWD) -c $< $(CFLAGS) -o $@ 075 $(CC) -I$(PWD) -c $< $(CFLAGS) -o $@
067 076
068 077
069 %.o: %.S 078 %.o: %.S
070 $(CC) -I$(PWD) -c $< $(CFLAGS) -DASM_S 079 $(CC) -I$(PWD) -c $< $(CFLAGS) -DASM_SOURCE=1 -o $@
071 080
072 FORCE: 081 FORCE:
073 @ 082 @
074 083
075 084
076 clean: 085 clean:
077 $(RM) *.img *.o mtoolsrc *~ menu.txt * !! 086 $(RM) *.img *.o mtoolsrc *~ menu.txt *.img *.elf *.bin *.strip *.map
078 $(RM) *.log *.out bochs* !! 087 $(RM) *.log *.out bochs* sos.gz
079 $(RM) bootstrap/*.o bootstrap/*~ 088 $(RM) bootstrap/*.o bootstrap/*~
080 $(RM) drivers/*.o drivers/*~ 089 $(RM) drivers/*.o drivers/*~
081 $(RM) hwcore/*.o hwcore/*~ 090 $(RM) hwcore/*.o hwcore/*~
082 $(RM) sos/*.o sos/*~ 091 $(RM) sos/*.o sos/*~
083 $(RM) support/*~ 092 $(RM) support/*~
084 $(RM) extra/*~ 093 $(RM) extra/*~
085 $(MAKE) -C userland clean 094 $(MAKE) -C userland clean