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_POWEROFF
),y
)
95 DEFS
+= -DCONFIG_POWEROFF
100 DEFS
+= -DCONFIG_VESA_WIDTH
=$(CONFIG_VESA_WIDTH
)
101 DEFS
+= -DCONFIG_VESA_HEIGHT
=$(CONFIG_VESA_HEIGHT
)
102 DEFS
+= -DCONFIG_VESA_BPP
=$(CONFIG_VESA_BPP
)
106 DEFS
+= -DCONFIG_VESA_WIDTH
=$(CONFIG_VESA_WIDTH
)
107 DEFS
+= -DCONFIG_VESA_HEIGHT
=$(CONFIG_VESA_HEIGHT
)
108 DEFS
+= -DCONFIG_VESA_BPP
=$(CONFIG_VESA_BPP
)
112 DEFS
+= -DCONFIG_VESA_WIDTH
=$(CONFIG_VESA_WIDTH
)
113 DEFS
+= -DCONFIG_VESA_HEIGHT
=$(CONFIG_VESA_HEIGHT
)
114 DEFS
+= -DCONFIG_VESA_BPP
=$(CONFIG_VESA_BPP
)
118 ## Toolchain configuration
121 ifeq ($(COMPILER
),native
)
128 CC
= $(TOOLCHAIN_DIR
)/$(TARGET
)-gcc
129 AS
= $(TOOLCHAIN_DIR
)/$(TARGET
)-as
130 LD
= $(TOOLCHAIN_DIR
)/$(TARGET
)-ld
131 OBJCOPY
= $(TOOLCHAIN_DIR
)/$(TARGET
)-objcopy
132 OBJDUMP
= $(TOOLCHAIN_DIR
)/$(TARGET
)-objdump
135 ## Generic kernel sources
139 generic
/src
/adt
/bitmap.c \
140 generic
/src
/adt
/btree.c \
141 generic
/src
/adt
/hash_table.c \
142 generic
/src
/adt
/list.c \
143 generic
/src
/console
/chardev.c \
144 generic
/src
/console
/console.c \
145 generic
/src
/console
/kconsole.c \
146 generic
/src
/console
/klog.c \
147 generic
/src
/console
/cmd.c \
148 generic
/src
/cpu
/cpu.c \
149 generic
/src
/ddi
/ddi.c \
150 generic
/src
/ddi
/irq.c \
151 generic
/src
/ddi
/device.c \
152 generic
/src
/interrupt
/interrupt.c \
153 generic
/src
/main
/main.c \
154 generic
/src
/main
/kinit.c \
155 generic
/src
/main
/uinit.c \
156 generic
/src
/main
/version.c \
157 generic
/src
/proc
/scheduler.c \
158 generic
/src
/proc
/thread.c \
159 generic
/src
/proc
/task.c \
160 generic
/src
/proc
/the.c \
161 generic
/src
/syscall
/syscall.c \
162 generic
/src
/syscall
/copy.c \
163 generic
/src
/mm
/buddy.c \
164 generic
/src
/mm
/frame.c \
165 generic
/src
/mm
/page.c \
166 generic
/src
/mm
/tlb.c \
167 generic
/src
/mm
/as.c \
168 generic
/src
/mm
/backend_anon.c \
169 generic
/src
/mm
/backend_elf.c \
170 generic
/src
/mm
/backend_phys.c \
171 generic
/src
/mm
/slab.c \
172 generic
/src
/lib
/func.c \
173 generic
/src
/lib
/memstr.c \
174 generic
/src
/lib
/sort.c \
175 generic
/src
/lib
/elf.c \
176 generic
/src
/printf
/printf_core.c \
177 generic
/src
/printf
/printf.c \
178 generic
/src
/printf
/sprintf.c \
179 generic
/src
/printf
/snprintf.c \
180 generic
/src
/printf
/vprintf.c \
181 generic
/src
/printf
/vsprintf.c \
182 generic
/src
/printf
/vsnprintf.c \
183 generic
/src
/debug
/symtab.c \
184 generic
/src
/time
/clock.c \
185 generic
/src
/time
/timeout.c \
186 generic
/src
/time
/delay.c \
187 generic
/src
/preempt
/preemption.c \
188 generic
/src
/synch
/spinlock.c \
189 generic
/src
/synch
/condvar.c \
190 generic
/src
/synch
/rwlock.c \
191 generic
/src
/synch
/mutex.c \
192 generic
/src
/synch
/semaphore.c \
193 generic
/src
/synch
/waitq.c \
194 generic
/src
/synch
/futex.c \
195 generic
/src
/smp
/ipi.c \
196 generic
/src
/smp
/smp.c \
197 generic
/src
/ipc
/ipc.c \
198 generic
/src
/ipc
/sysipc.c \
199 generic
/src
/ipc
/ipcrsc.c \
200 generic
/src
/ipc
/irq.c \
201 generic
/src
/security
/cap.c \
202 generic
/src
/sysinfo
/sysinfo.c
207 ifneq ($(CONFIG_TEST
),)
208 DEFS
+= -DCONFIG_TEST
209 GENERIC_SOURCES
+= test/$(CONFIG_TEST
)/test.c
212 GENERIC_OBJECTS
:= $(addsuffix .o
,$(basename $(GENERIC_SOURCES
)))
213 ARCH_OBJECTS
:= $(addsuffix .o
,$(basename $(ARCH_SOURCES
)))
214 GENARCH_OBJECTS
:= $(addsuffix .o
,$(basename $(GENARCH_SOURCES
)))
216 .PHONY
: all build config
distclean clean archlinks depend disasm
219 ..
/tools
/config.py kernel.config default
$(ARCH
) $(COMPILER
) $(CONFIG_DEBUG
) $(MACHINE
)
222 build
: kernel.bin disasm
226 tools
/config.py kernel.config
228 -include Makefile.depend
234 -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
235 find generic
/src
/ arch
/*/src
/ genarch
/src
/ test/ -name
'*.o' -follow
-exec
rm \
{\
} \
;
236 for arch in arch
/* ; do \
237 [ -e
$$arch/_link.
ld ] && rm $$arch/_link.
ld 2>/dev
/null
; \
241 ln
-sfn ..
/..
/arch
/$(ARCH
)/include/ generic
/include/arch
242 ln
-sfn ..
/..
/genarch
/include/ generic
/include/genarch
245 -makedepend
$(DEFS
) $(CFLAGS
) -f
- $(ARCH_SOURCES
) $(GENARCH_SOURCES
) $(GENERIC_SOURCES
) > Makefile.depend
2> /dev
/null
247 arch
/$(ARCH
)/_link.
ld: arch
/$(ARCH
)/_link.
ld.in
248 $(CC
) $(DEFS
) $(CFLAGS
) -D__ASM__
-E
-x c
$< | grep
-v
"^\#" > $@
250 generic
/src
/debug
/real_map.bin
: depend arch
/$(ARCH
)/_link.
ld $(ARCH_OBJECTS
) $(GENARCH_OBJECTS
) $(GENERIC_OBJECTS
)
251 $(OBJCOPY
) -I binary
-O
$(BFD_NAME
) -B
$(BFD_ARCH
) --prefix-sections
=symtab Makefile generic
/src
/debug
/empty_map.o
252 $(LD
) -T arch
/$(ARCH
)/_link.
ld $(LFLAGS
) $(ARCH_OBJECTS
) $(GENARCH_OBJECTS
) $(GENERIC_OBJECTS
) generic
/src
/debug
/empty_map.o
-o
$@
-Map kernel.map.pre
253 $(OBJDUMP
) -t
$(ARCH_OBJECTS
) $(GENARCH_OBJECTS
) $(GENERIC_OBJECTS
) > kernel.objdump
254 tools
/genmap.py kernel.map.pre kernel.objdump generic
/src
/debug
/real_map.bin
255 # Do it once again, this time to get correct even the symbols
256 # on architectures, that have bss after symtab
257 $(OBJCOPY
) -I binary
-O
$(BFD_NAME
) -B
$(BFD_ARCH
) --prefix-sections
=symtab generic
/src
/debug
/real_map.bin generic
/src
/debug
/sizeok_map.o
258 $(LD
) -T arch
/$(ARCH
)/_link.
ld $(LFLAGS
) $(ARCH_OBJECTS
) $(GENARCH_OBJECTS
) $(GENERIC_OBJECTS
) generic
/src
/debug
/sizeok_map.o
-o
$@
-Map kernel.map.pre
259 $(OBJDUMP
) -t
$(ARCH_OBJECTS
) $(GENARCH_OBJECTS
) $(GENERIC_OBJECTS
) > kernel.objdump
260 tools
/genmap.py kernel.map.pre kernel.objdump generic
/src
/debug
/real_map.bin
262 generic
/src
/debug
/real_map.o
: generic
/src
/debug
/real_map.bin
263 $(OBJCOPY
) -I binary
-O
$(BFD_NAME
) -B
$(BFD_ARCH
) --prefix-sections
=symtab
$< $@
265 kernel.raw
: depend arch
/$(ARCH
)/_link.
ld $(ARCH_OBJECTS
) $(GENARCH_OBJECTS
) $(GENERIC_OBJECTS
) generic
/src
/debug
/real_map.o
266 $(LD
) -T arch
/$(ARCH
)/_link.
ld $(LFLAGS
) $(ARCH_OBJECTS
) $(GENARCH_OBJECTS
) $(GENERIC_OBJECTS
) generic
/src
/debug
/real_map.o
-o
$@
-Map kernel.map
268 kernel.bin
: kernel.raw
269 $(OBJCOPY
) -O
$(BFD
) kernel.raw kernel.bin
272 $(OBJDUMP
) -d kernel.raw
> kernel.disasm
275 $(CC
) $(DEFS
) $(CFLAGS
) -D__ASM__
-c
$< -o
$@
278 $(AS
) $(AFLAGS
) $< -o
$@
281 $(CC
) $(DEFS
) $(CFLAGS
) -c
$< -o
$@