2 # Copyright (C) 2005 Martin Decky
5 # Redistribution and use in source and binary forms, with or without
6 # modification, are permitted provided that the following conditions
9 # - Redistributions of source code must retain the above copyright
10 # notice, this list of conditions and the following disclaimer.
11 # - Redistributions in binary form must reproduce the above copyright
12 # notice, this list of conditions and the following disclaimer in the
13 # documentation and/or other materials provided with the distribution.
14 # - The name of the author may not be used to endorse or promote products
15 # derived from this software without specific prior written permission.
17 # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18 # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19 # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20 # IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21 # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22 # NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26 # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 ## Include configuration
34 -include Makefile.config
36 ## Common compiler flags
39 DEFS
= -D
$(ARCH
) -DARCH
=\"$(ARCH
)\" -DRELEASE
=\"$(RELEASE
)\" "-DNAME=\"$(NAME)\"" -DKERNEL
40 CFLAGS
= -fno-builtin
-fomit-frame-pointer
-Wall
-Werror-implicit-function-declaration
-Wmissing-prototypes
-Werror
-O3
-nostdlib
-nostdinc
-Igeneric
/include/
45 DEFS
+= "-DREVISION=\"$(REVISION)\""
49 DEFS
+= "-DTIMESTAMP=\"$(TIMESTAMP)\""
52 ## Setup kernel configuration
55 -include arch
/$(ARCH
)/Makefile.inc
56 -include genarch
/Makefile.inc
58 ifeq ($(CONFIG_DEBUG
),y
)
59 DEFS
+= -DCONFIG_DEBUG
62 ifeq ($(CONFIG_DEBUG_SPINLOCK
),y
)
63 DEFS
+= -DCONFIG_DEBUG_SPINLOCK
66 ifeq ($(CONFIG_DEBUG_AS_WATCHPOINT
),y
)
67 DEFS
+= -DCONFIG_DEBUG_AS_WATCHPOINT
70 ifeq ($(CONFIG_FPU_LAZY
),y
)
71 DEFS
+= -DCONFIG_FPU_LAZY
74 ifeq ($(CONFIG_DEBUG_ALLREGS
),y
)
75 DEFS
+= -DCONFIG_DEBUG_ALLREGS
78 ifeq ($(CONFIG_VHPT
),y
)
82 ifeq ($(CONFIG_TSB
),y
)
86 ifeq ($(CONFIG_Z8530
),y
)
87 DEFS
+= -DCONFIG_Z8530
90 ifeq ($(CONFIG_NS16550
),y
)
91 DEFS
+= -DCONFIG_NS16550
94 ifeq ($(CONFIG_VIRT_IDX_CACHE
),y
)
95 DEFS
+= -DCONFIG_VIRT_IDX_CACHE
98 ifeq ($(CONFIG_POWEROFF
),y
)
99 DEFS
+= -DCONFIG_POWEROFF
102 ifeq ($(CONFIG_FB
),y
)
104 DEFS
+= -DCONFIG_VESA_WIDTH
=$(CONFIG_VESA_WIDTH
)
105 DEFS
+= -DCONFIG_VESA_HEIGHT
=$(CONFIG_VESA_HEIGHT
)
106 DEFS
+= -DCONFIG_VESA_BPP
=$(CONFIG_VESA_BPP
)
110 DEFS
+= -DCONFIG_VESA_WIDTH
=$(CONFIG_VESA_WIDTH
)
111 DEFS
+= -DCONFIG_VESA_HEIGHT
=$(CONFIG_VESA_HEIGHT
)
112 DEFS
+= -DCONFIG_VESA_BPP
=$(CONFIG_VESA_BPP
)
115 ifeq ($(ARCH
),ia32xen
)
116 DEFS
+= -DCONFIG_VESA_WIDTH
=$(CONFIG_VESA_WIDTH
)
117 DEFS
+= -DCONFIG_VESA_HEIGHT
=$(CONFIG_VESA_HEIGHT
)
118 DEFS
+= -DCONFIG_VESA_BPP
=$(CONFIG_VESA_BPP
)
122 ifeq ($(CONFIG_BENCH
),y
)
123 DEFS
+= -DCONFIG_BENCH
126 ## Toolchain configuration
129 ifeq ($(COMPILER
),native
)
136 CC
= $(TOOLCHAIN_DIR
)/$(TARGET
)-gcc
137 AS
= $(TOOLCHAIN_DIR
)/$(TARGET
)-as
138 LD
= $(TOOLCHAIN_DIR
)/$(TARGET
)-ld
139 OBJCOPY
= $(TOOLCHAIN_DIR
)/$(TARGET
)-objcopy
140 OBJDUMP
= $(TOOLCHAIN_DIR
)/$(TARGET
)-objdump
143 ## Generic kernel sources
147 generic
/src
/adt
/bitmap.c \
148 generic
/src
/adt
/btree.c \
149 generic
/src
/adt
/hash_table.c \
150 generic
/src
/adt
/list.c \
151 generic
/src
/console
/chardev.c \
152 generic
/src
/console
/console.c \
153 generic
/src
/console
/kconsole.c \
154 generic
/src
/console
/klog.c \
155 generic
/src
/console
/cmd.c \
156 generic
/src
/cpu
/cpu.c \
157 generic
/src
/ddi
/ddi.c \
158 generic
/src
/ddi
/irq.c \
159 generic
/src
/ddi
/device.c \
160 generic
/src
/interrupt
/interrupt.c \
161 generic
/src
/main
/main.c \
162 generic
/src
/main
/kinit.c \
163 generic
/src
/main
/uinit.c \
164 generic
/src
/main
/version.c \
165 generic
/src
/proc
/scheduler.c \
166 generic
/src
/proc
/thread.c \
167 generic
/src
/proc
/task.c \
168 generic
/src
/proc
/the.c \
169 generic
/src
/syscall
/syscall.c \
170 generic
/src
/syscall
/copy.c \
171 generic
/src
/mm
/buddy.c \
172 generic
/src
/mm
/frame.c \
173 generic
/src
/mm
/page.c \
174 generic
/src
/mm
/tlb.c \
175 generic
/src
/mm
/as.c \
176 generic
/src
/mm
/backend_anon.c \
177 generic
/src
/mm
/backend_elf.c \
178 generic
/src
/mm
/backend_phys.c \
179 generic
/src
/mm
/slab.c \
180 generic
/src
/lib
/func.c \
181 generic
/src
/lib
/memstr.c \
182 generic
/src
/lib
/sort.c \
183 generic
/src
/lib
/elf.c \
184 generic
/src
/lib
/rd.c \
185 generic
/src
/printf
/printf_core.c \
186 generic
/src
/printf
/printf.c \
187 generic
/src
/printf
/sprintf.c \
188 generic
/src
/printf
/snprintf.c \
189 generic
/src
/printf
/vprintf.c \
190 generic
/src
/printf
/vsprintf.c \
191 generic
/src
/printf
/vsnprintf.c \
192 generic
/src
/debug
/symtab.c \
193 generic
/src
/time
/clock.c \
194 generic
/src
/time
/timeout.c \
195 generic
/src
/time
/delay.c \
196 generic
/src
/preempt
/preemption.c \
197 generic
/src
/synch
/spinlock.c \
198 generic
/src
/synch
/condvar.c \
199 generic
/src
/synch
/rwlock.c \
200 generic
/src
/synch
/mutex.c \
201 generic
/src
/synch
/semaphore.c \
202 generic
/src
/synch
/waitq.c \
203 generic
/src
/synch
/futex.c \
204 generic
/src
/smp
/ipi.c \
205 generic
/src
/smp
/smp.c \
206 generic
/src
/ipc
/ipc.c \
207 generic
/src
/ipc
/sysipc.c \
208 generic
/src
/ipc
/ipcrsc.c \
209 generic
/src
/ipc
/irq.c \
210 generic
/src
/security
/cap.c \
211 generic
/src
/sysinfo
/sysinfo.c
216 ifneq ($(CONFIG_TEST
),)
217 DEFS
+= -DCONFIG_TEST
218 GENERIC_SOURCES
+= test/$(CONFIG_TEST
)/test.c
221 GENERIC_OBJECTS
:= $(addsuffix .o
,$(basename $(GENERIC_SOURCES
)))
222 ARCH_OBJECTS
:= $(addsuffix .o
,$(basename $(ARCH_SOURCES
)))
223 GENARCH_OBJECTS
:= $(addsuffix .o
,$(basename $(GENARCH_SOURCES
)))
225 .PHONY
: all build config
distclean clean archlinks depend disasm
228 ..
/tools
/config.py kernel.config default
$(ARCH
) $(COMPILER
) $(CONFIG_DEBUG
) $(MACHINE
)
231 build
: kernel.bin disasm
235 tools
/config.py kernel.config
237 -include Makefile.depend
243 -rm -f kernel.bin kernel.raw kernel.map kernel.map.pre kernel.objdump kernel.disasm generic
/src
/debug
/real_map.bin Makefile.depend
* generic
/include/arch generic
/include/genarch arch
/$(ARCH
)/_link.
ld
244 find generic
/src
/ arch
/*/src
/ genarch
/src
/ test/ -name
'*.o' -follow
-exec
rm \
{\
} \
;
245 for arch in arch
/* ; do \
246 [ -e
$$arch/_link.
ld ] && rm $$arch/_link.
ld 2>/dev
/null
; \
250 ln
-sfn ..
/..
/arch
/$(ARCH
)/include/ generic
/include/arch
251 ln
-sfn ..
/..
/genarch
/include/ generic
/include/genarch
254 -makedepend
$(DEFS
) $(CFLAGS
) -f
- $(ARCH_SOURCES
) $(GENARCH_SOURCES
) $(GENERIC_SOURCES
) > Makefile.depend
2> /dev
/null
256 arch
/$(ARCH
)/_link.
ld: arch
/$(ARCH
)/_link.
ld.in
257 $(CC
) $(DEFS
) $(CFLAGS
) -D__ASM__
-E
-x c
$< | grep
-v
"^\#" > $@
259 generic
/src
/debug
/real_map.bin
: depend arch
/$(ARCH
)/_link.
ld $(ARCH_OBJECTS
) $(GENARCH_OBJECTS
) $(GENERIC_OBJECTS
)
260 $(OBJCOPY
) -I binary
-O
$(BFD_NAME
) -B
$(BFD_ARCH
) --prefix-sections
=symtab Makefile generic
/src
/debug
/empty_map.o
261 $(LD
) -T arch
/$(ARCH
)/_link.
ld $(LFLAGS
) $(ARCH_OBJECTS
) $(GENARCH_OBJECTS
) $(GENERIC_OBJECTS
) generic
/src
/debug
/empty_map.o
-o
$@
-Map kernel.map.pre
262 $(OBJDUMP
) -t
$(ARCH_OBJECTS
) $(GENARCH_OBJECTS
) $(GENERIC_OBJECTS
) > kernel.objdump
263 tools
/genmap.py kernel.map.pre kernel.objdump generic
/src
/debug
/real_map.bin
264 # Do it once again, this time to get correct even the symbols
265 # on architectures, that have bss after symtab
266 $(OBJCOPY
) -I binary
-O
$(BFD_NAME
) -B
$(BFD_ARCH
) --prefix-sections
=symtab generic
/src
/debug
/real_map.bin generic
/src
/debug
/sizeok_map.o
267 $(LD
) -T arch
/$(ARCH
)/_link.
ld $(LFLAGS
) $(ARCH_OBJECTS
) $(GENARCH_OBJECTS
) $(GENERIC_OBJECTS
) generic
/src
/debug
/sizeok_map.o
-o
$@
-Map kernel.map.pre
268 $(OBJDUMP
) -t
$(ARCH_OBJECTS
) $(GENARCH_OBJECTS
) $(GENERIC_OBJECTS
) > kernel.objdump
269 tools
/genmap.py kernel.map.pre kernel.objdump generic
/src
/debug
/real_map.bin
271 generic
/src
/debug
/real_map.o
: generic
/src
/debug
/real_map.bin
272 $(OBJCOPY
) -I binary
-O
$(BFD_NAME
) -B
$(BFD_ARCH
) --prefix-sections
=symtab
$< $@
274 kernel.raw
: depend arch
/$(ARCH
)/_link.
ld $(ARCH_OBJECTS
) $(GENARCH_OBJECTS
) $(GENERIC_OBJECTS
) generic
/src
/debug
/real_map.o
275 $(LD
) -T arch
/$(ARCH
)/_link.
ld $(LFLAGS
) $(ARCH_OBJECTS
) $(GENARCH_OBJECTS
) $(GENERIC_OBJECTS
) generic
/src
/debug
/real_map.o
-o
$@
-Map kernel.map
277 kernel.bin
: kernel.raw
278 $(OBJCOPY
) -O
$(BFD
) kernel.raw kernel.bin
281 $(OBJDUMP
) -d kernel.raw
> kernel.disasm
284 $(CC
) $(DEFS
) $(CFLAGS
) -D__ASM__
-c
$< -o
$@
287 $(AS
) $(AFLAGS
) $< -o
$@
290 $(CC
) $(DEFS
) $(CFLAGS
) -c
$< -o
$@