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.
37 RELEASE
= $(VERSION
).
$(PATCHLEVEL
).
$(SUBLEVEL
)$(EXTRAVERSION
)
39 ## Include configuration
42 -include Makefile.config
44 ## Common compiler flags
47 DEFS
= -D
$(ARCH
) -DARCH
=\"$(ARCH
)\" -DRELEASE
=\"$(RELEASE
)\" "-DNAME=\"$(NAME)\"" -DKERNEL
48 CFLAGS
= -fno-builtin
-fomit-frame-pointer
-Wall
-Werror-implicit-function-declaration
-Wmissing-prototypes
-Werror
-O3
-nostdlib
-nostdinc
-Igeneric
/include/
53 DEFS
+= "-DREVISION=\"$(REVISION)\""
57 DEFS
+= "-DTIMESTAMP=\"$(TIMESTAMP)\""
60 ## Setup kernel configuration
63 -include arch
/$(ARCH
)/Makefile.inc
64 -include genarch
/Makefile.inc
66 ifeq ($(CONFIG_DEBUG
),y
)
67 DEFS
+= -DCONFIG_DEBUG
69 ifeq ($(CONFIG_DEBUG_SPINLOCK
),y
)
70 DEFS
+= -DCONFIG_DEBUG_SPINLOCK
72 ifeq ($(CONFIG_DEBUG_AS_WATCHPOINT
),y
)
73 DEFS
+= -DCONFIG_DEBUG_AS_WATCHPOINT
75 ifeq ($(CONFIG_FPU_LAZY
),y
)
76 DEFS
+= -DCONFIG_FPU_LAZY
78 ifeq ($(CONFIG_DEBUG_ALLREGS
),y
)
79 DEFS
+= -DCONFIG_DEBUG_ALLREGS
81 ifeq ($(CONFIG_VHPT
),y
)
86 DEFS
+= -DCONFIG_VESA_WIDTH
=$(CONFIG_VESA_WIDTH
)
87 DEFS
+= -DCONFIG_VESA_HEIGHT
=$(CONFIG_VESA_HEIGHT
)
88 DEFS
+= -DCONFIG_VESA_BPP
=$(CONFIG_VESA_BPP
)
91 DEFS
+= -DCONFIG_VESA_WIDTH
=$(CONFIG_VESA_WIDTH
)
92 DEFS
+= -DCONFIG_VESA_HEIGHT
=$(CONFIG_VESA_HEIGHT
)
93 DEFS
+= -DCONFIG_VESA_BPP
=$(CONFIG_VESA_BPP
)
97 ## Toolchain configuration
100 ifeq ($(COMPILER
),native
)
107 CC
= $(TOOLCHAIN_DIR
)/$(TARGET
)-gcc
108 AS
= $(TOOLCHAIN_DIR
)/$(TARGET
)-as
109 LD
= $(TOOLCHAIN_DIR
)/$(TARGET
)-ld
110 OBJCOPY
= $(TOOLCHAIN_DIR
)/$(TARGET
)-objcopy
111 OBJDUMP
= $(TOOLCHAIN_DIR
)/$(TARGET
)-objdump
114 ## Generic kernel sources
118 generic
/src
/adt
/bitmap.c \
119 generic
/src
/adt
/btree.c \
120 generic
/src
/adt
/hash_table.c \
121 generic
/src
/adt
/list.c \
122 generic
/src
/console
/chardev.c \
123 generic
/src
/console
/console.c \
124 generic
/src
/console
/kconsole.c \
125 generic
/src
/console
/cmd.c \
126 generic
/src
/cpu
/cpu.c \
127 generic
/src
/ddi
/ddi.c \
128 generic
/src
/interrupt
/interrupt.c \
129 generic
/src
/main
/main.c \
130 generic
/src
/main
/kinit.c \
131 generic
/src
/main
/uinit.c \
132 generic
/src
/main
/version.c \
133 generic
/src
/proc
/scheduler.c \
134 generic
/src
/proc
/thread.c \
135 generic
/src
/proc
/task.c \
136 generic
/src
/proc
/the.c \
137 generic
/src
/syscall
/syscall.c \
138 generic
/src
/syscall
/copy.c \
139 generic
/src
/mm
/buddy.c \
140 generic
/src
/mm
/frame.c \
141 generic
/src
/mm
/page.c \
142 generic
/src
/mm
/tlb.c \
143 generic
/src
/mm
/as.c \
144 generic
/src
/mm
/slab.c \
145 generic
/src
/lib
/func.c \
146 generic
/src
/lib
/memstr.c \
147 generic
/src
/lib
/sort.c \
148 generic
/src
/lib
/elf.c \
149 generic
/src
/printf
/printf_core.c \
150 generic
/src
/printf
/printf.c \
151 generic
/src
/printf
/sprintf.c \
152 generic
/src
/printf
/snprintf.c \
153 generic
/src
/printf
/vprintf.c \
154 generic
/src
/printf
/vsprintf.c \
155 generic
/src
/printf
/vsnprintf.c \
156 generic
/src
/debug
/symtab.c \
157 generic
/src
/time
/clock.c \
158 generic
/src
/time
/timeout.c \
159 generic
/src
/time
/delay.c \
160 generic
/src
/preempt
/preemption.c \
161 generic
/src
/synch
/spinlock.c \
162 generic
/src
/synch
/condvar.c \
163 generic
/src
/synch
/rwlock.c \
164 generic
/src
/synch
/mutex.c \
165 generic
/src
/synch
/semaphore.c \
166 generic
/src
/synch
/waitq.c \
167 generic
/src
/synch
/futex.c \
168 generic
/src
/smp
/ipi.c \
169 generic
/src
/ipc
/ipc.c \
170 generic
/src
/ipc
/sysipc.c \
171 generic
/src
/ipc
/ipcrsc.c \
172 generic
/src
/ipc
/irq.c \
173 generic
/src
/security
/cap.c \
174 generic
/src
/sysinfo
/sysinfo.c
179 ifneq ($(CONFIG_TEST
),)
180 DEFS
+= -DCONFIG_TEST
181 GENERIC_SOURCES
+= test/$(CONFIG_TEST
)/test.c
184 GENERIC_OBJECTS
:= $(addsuffix .o
,$(basename $(GENERIC_SOURCES
)))
185 ARCH_OBJECTS
:= $(addsuffix .o
,$(basename $(ARCH_SOURCES
)))
186 GENARCH_OBJECTS
:= $(addsuffix .o
,$(basename $(GENARCH_SOURCES
)))
188 .PHONY
: all build config
distclean clean archlinks depend disasm
191 tools
/config.py default
$(NARCH
)
193 ifneq ($(ARCH
), $(NARCH
))
199 build
: kernel.bin disasm
205 -include Makefile.depend
211 -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
212 find generic
/src
/ arch
/*/src
/ genarch
/src
/ test/ -name
'*.o' -follow
-exec
rm \
{\
} \
;
213 for arch in arch
/*; do \
214 [ -e
$$arch/_link.
ld ] && rm $$arch/_link.
ld 2>/dev
/null
;\
218 ln
-sfn ..
/..
/arch
/$(ARCH
)/include/ generic
/include/arch
219 ln
-sfn ..
/..
/genarch
/include/ generic
/include/genarch
222 -makedepend
$(DEFS
) $(CFLAGS
) -f
- $(ARCH_SOURCES
) $(GENARCH_SOURCES
) $(GENERIC_SOURCES
) > Makefile.depend
2> /dev
/null
224 arch
/$(ARCH
)/_link.
ld: arch
/$(ARCH
)/_link.
ld.in
225 $(CC
) $(DEFS
) $(CFLAGS
) -D__ASM__
-E
-x c
$< | grep
-v
"^\#" > $@
227 generic
/src
/debug
/real_map.bin
: depend arch
/$(ARCH
)/_link.
ld $(ARCH_OBJECTS
) $(GENARCH_OBJECTS
) $(GENERIC_OBJECTS
)
228 $(OBJCOPY
) -I binary
-O
$(BFD_NAME
) -B
$(BFD_ARCH
) --prefix-sections
=symtab Makefile generic
/src
/debug
/empty_map.o
229 $(LD
) -T arch
/$(ARCH
)/_link.
ld $(LFLAGS
) $(ARCH_OBJECTS
) $(GENARCH_OBJECTS
) $(GENERIC_OBJECTS
) generic
/src
/debug
/empty_map.o
-o
$@
-Map kernel.map.pre
230 $(OBJDUMP
) -t
$(ARCH_OBJECTS
) $(GENARCH_OBJECTS
) $(GENERIC_OBJECTS
) > kernel.objdump
231 tools
/genmap.py kernel.map.pre kernel.objdump generic
/src
/debug
/real_map.bin
232 # Do it once again, this time to get correct even the symbols
233 # on architectures, that have bss after symtab
234 $(OBJCOPY
) -I binary
-O
$(BFD_NAME
) -B
$(BFD_ARCH
) --prefix-sections
=symtab generic
/src
/debug
/real_map.bin generic
/src
/debug
/sizeok_map.o
235 $(LD
) -T arch
/$(ARCH
)/_link.
ld $(LFLAGS
) $(ARCH_OBJECTS
) $(GENARCH_OBJECTS
) $(GENERIC_OBJECTS
) generic
/src
/debug
/sizeok_map.o
-o
$@
-Map kernel.map.pre
236 $(OBJDUMP
) -t
$(ARCH_OBJECTS
) $(GENARCH_OBJECTS
) $(GENERIC_OBJECTS
) > kernel.objdump
237 tools
/genmap.py kernel.map.pre kernel.objdump generic
/src
/debug
/real_map.bin
239 generic
/src
/debug
/real_map.o
: generic
/src
/debug
/real_map.bin
240 $(OBJCOPY
) -I binary
-O
$(BFD_NAME
) -B
$(BFD_ARCH
) --prefix-sections
=symtab
$< $@
242 kernel.raw
: depend arch
/$(ARCH
)/_link.
ld $(ARCH_OBJECTS
) $(GENARCH_OBJECTS
) $(GENERIC_OBJECTS
) generic
/src
/debug
/real_map.o
243 $(LD
) -T arch
/$(ARCH
)/_link.
ld $(LFLAGS
) $(ARCH_OBJECTS
) $(GENARCH_OBJECTS
) $(GENERIC_OBJECTS
) generic
/src
/debug
/real_map.o
-o
$@
-Map kernel.map
245 kernel.bin
: kernel.raw
246 $(OBJCOPY
) -O
$(BFD
) kernel.raw kernel.bin
249 $(OBJDUMP
) -d kernel.raw
> kernel.disasm
252 $(CC
) $(DEFS
) $(CFLAGS
) -D__ASM__
-c
$< -o
$@
255 $(AS
) $(AFLAGS
) $< -o
$@
258 $(CC
) $(DEFS
) $(CFLAGS
) -c
$< -o
$@