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.
38 RELEASE
= $(VERSION
).
$(PATCHLEVEL
).
$(SUBLEVEL
).
$(EXTRAVERSION
)
40 RELEASE
= $(VERSION
).
$(PATCHLEVEL
).
$(SUBLEVEL
)
43 ## Include configuration
46 -include Makefile.config
48 ## Common compiler flags
51 DEFS
= -D
$(ARCH
) -DARCH
=\"$(ARCH
)\" -DRELEASE
=\"$(RELEASE
)\" "-DNAME=\"$(NAME)\"" -DKERNEL
52 CFLAGS
= -fno-builtin
-fomit-frame-pointer
-Wall
-Werror-implicit-function-declaration
-Wmissing-prototypes
-Werror
-O3
-nostdlib
-nostdinc
-Igeneric
/include/
57 DEFS
+= "-DREVISION=\"$(REVISION)\""
61 DEFS
+= "-DTIMESTAMP=\"$(TIMESTAMP)\""
64 ## Setup kernel configuration
67 -include arch
/$(ARCH
)/Makefile.inc
68 -include genarch
/Makefile.inc
70 ifeq ($(CONFIG_DEBUG
),y
)
71 DEFS
+= -DCONFIG_DEBUG
73 ifeq ($(CONFIG_DEBUG_SPINLOCK
),y
)
74 DEFS
+= -DCONFIG_DEBUG_SPINLOCK
76 ifeq ($(CONFIG_DEBUG_AS_WATCHPOINT
),y
)
77 DEFS
+= -DCONFIG_DEBUG_AS_WATCHPOINT
79 ifeq ($(CONFIG_FPU_LAZY
),y
)
80 DEFS
+= -DCONFIG_FPU_LAZY
82 ifeq ($(CONFIG_DEBUG_ALLREGS
),y
)
83 DEFS
+= -DCONFIG_DEBUG_ALLREGS
85 ifeq ($(CONFIG_VHPT
),y
)
88 ifeq ($(CONFIG_POWEROFF
),y
)
89 DEFS
+= -DCONFIG_POWEROFF
93 DEFS
+= -DCONFIG_VESA_WIDTH
=$(CONFIG_VESA_WIDTH
)
94 DEFS
+= -DCONFIG_VESA_HEIGHT
=$(CONFIG_VESA_HEIGHT
)
95 DEFS
+= -DCONFIG_VESA_BPP
=$(CONFIG_VESA_BPP
)
98 DEFS
+= -DCONFIG_VESA_WIDTH
=$(CONFIG_VESA_WIDTH
)
99 DEFS
+= -DCONFIG_VESA_HEIGHT
=$(CONFIG_VESA_HEIGHT
)
100 DEFS
+= -DCONFIG_VESA_BPP
=$(CONFIG_VESA_BPP
)
104 ## Toolchain configuration
107 ifeq ($(COMPILER
),native
)
114 CC
= $(TOOLCHAIN_DIR
)/$(TARGET
)-gcc
115 AS
= $(TOOLCHAIN_DIR
)/$(TARGET
)-as
116 LD
= $(TOOLCHAIN_DIR
)/$(TARGET
)-ld
117 OBJCOPY
= $(TOOLCHAIN_DIR
)/$(TARGET
)-objcopy
118 OBJDUMP
= $(TOOLCHAIN_DIR
)/$(TARGET
)-objdump
121 ## Generic kernel sources
125 generic
/src
/adt
/bitmap.c \
126 generic
/src
/adt
/btree.c \
127 generic
/src
/adt
/hash_table.c \
128 generic
/src
/adt
/list.c \
129 generic
/src
/console
/chardev.c \
130 generic
/src
/console
/console.c \
131 generic
/src
/console
/kconsole.c \
132 generic
/src
/console
/klog.c \
133 generic
/src
/console
/cmd.c \
134 generic
/src
/cpu
/cpu.c \
135 generic
/src
/ddi
/ddi.c \
136 generic
/src
/interrupt
/interrupt.c \
137 generic
/src
/main
/main.c \
138 generic
/src
/main
/kinit.c \
139 generic
/src
/main
/uinit.c \
140 generic
/src
/main
/version.c \
141 generic
/src
/proc
/scheduler.c \
142 generic
/src
/proc
/thread.c \
143 generic
/src
/proc
/task.c \
144 generic
/src
/proc
/the.c \
145 generic
/src
/syscall
/syscall.c \
146 generic
/src
/syscall
/copy.c \
147 generic
/src
/mm
/buddy.c \
148 generic
/src
/mm
/frame.c \
149 generic
/src
/mm
/page.c \
150 generic
/src
/mm
/tlb.c \
151 generic
/src
/mm
/as.c \
152 generic
/src
/mm
/backend_anon.c \
153 generic
/src
/mm
/backend_elf.c \
154 generic
/src
/mm
/backend_phys.c \
155 generic
/src
/mm
/slab.c \
156 generic
/src
/lib
/func.c \
157 generic
/src
/lib
/memstr.c \
158 generic
/src
/lib
/sort.c \
159 generic
/src
/lib
/elf.c \
160 generic
/src
/printf
/printf_core.c \
161 generic
/src
/printf
/printf.c \
162 generic
/src
/printf
/sprintf.c \
163 generic
/src
/printf
/snprintf.c \
164 generic
/src
/printf
/vprintf.c \
165 generic
/src
/printf
/vsprintf.c \
166 generic
/src
/printf
/vsnprintf.c \
167 generic
/src
/debug
/symtab.c \
168 generic
/src
/time
/clock.c \
169 generic
/src
/time
/timeout.c \
170 generic
/src
/time
/delay.c \
171 generic
/src
/preempt
/preemption.c \
172 generic
/src
/synch
/spinlock.c \
173 generic
/src
/synch
/condvar.c \
174 generic
/src
/synch
/rwlock.c \
175 generic
/src
/synch
/mutex.c \
176 generic
/src
/synch
/semaphore.c \
177 generic
/src
/synch
/waitq.c \
178 generic
/src
/synch
/futex.c \
179 generic
/src
/smp
/ipi.c \
180 generic
/src
/ipc
/ipc.c \
181 generic
/src
/ipc
/sysipc.c \
182 generic
/src
/ipc
/ipcrsc.c \
183 generic
/src
/ipc
/irq.c \
184 generic
/src
/security
/cap.c \
185 generic
/src
/sysinfo
/sysinfo.c
190 ifneq ($(CONFIG_TEST
),)
191 DEFS
+= -DCONFIG_TEST
192 GENERIC_SOURCES
+= test/$(CONFIG_TEST
)/test.c
195 GENERIC_OBJECTS
:= $(addsuffix .o
,$(basename $(GENERIC_SOURCES
)))
196 ARCH_OBJECTS
:= $(addsuffix .o
,$(basename $(ARCH_SOURCES
)))
197 GENARCH_OBJECTS
:= $(addsuffix .o
,$(basename $(GENARCH_SOURCES
)))
199 .PHONY
: all build config
distclean clean archlinks depend disasm
202 tools
/config.py default
$(NARCH
)
204 ifneq ($(ARCH
), $(NARCH
))
210 build
: kernel.bin disasm
216 -include Makefile.depend
222 -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
223 find generic
/src
/ arch
/*/src
/ genarch
/src
/ test/ -name
'*.o' -follow
-exec
rm \
{\
} \
;
224 for arch in arch
/*; do \
225 [ -e
$$arch/_link.
ld ] && rm $$arch/_link.
ld 2>/dev
/null
;\
229 ln
-sfn ..
/..
/arch
/$(ARCH
)/include/ generic
/include/arch
230 ln
-sfn ..
/..
/genarch
/include/ generic
/include/genarch
233 -makedepend
$(DEFS
) $(CFLAGS
) -f
- $(ARCH_SOURCES
) $(GENARCH_SOURCES
) $(GENERIC_SOURCES
) > Makefile.depend
2> /dev
/null
235 arch
/$(ARCH
)/_link.
ld: arch
/$(ARCH
)/_link.
ld.in
236 $(CC
) $(DEFS
) $(CFLAGS
) -D__ASM__
-E
-x c
$< | grep
-v
"^\#" > $@
238 generic
/src
/debug
/real_map.bin
: depend arch
/$(ARCH
)/_link.
ld $(ARCH_OBJECTS
) $(GENARCH_OBJECTS
) $(GENERIC_OBJECTS
)
239 $(OBJCOPY
) -I binary
-O
$(BFD_NAME
) -B
$(BFD_ARCH
) --prefix-sections
=symtab Makefile generic
/src
/debug
/empty_map.o
240 $(LD
) -T arch
/$(ARCH
)/_link.
ld $(LFLAGS
) $(ARCH_OBJECTS
) $(GENARCH_OBJECTS
) $(GENERIC_OBJECTS
) generic
/src
/debug
/empty_map.o
-o
$@
-Map kernel.map.pre
241 $(OBJDUMP
) -t
$(ARCH_OBJECTS
) $(GENARCH_OBJECTS
) $(GENERIC_OBJECTS
) > kernel.objdump
242 tools
/genmap.py kernel.map.pre kernel.objdump generic
/src
/debug
/real_map.bin
243 # Do it once again, this time to get correct even the symbols
244 # on architectures, that have bss after symtab
245 $(OBJCOPY
) -I binary
-O
$(BFD_NAME
) -B
$(BFD_ARCH
) --prefix-sections
=symtab generic
/src
/debug
/real_map.bin generic
/src
/debug
/sizeok_map.o
246 $(LD
) -T arch
/$(ARCH
)/_link.
ld $(LFLAGS
) $(ARCH_OBJECTS
) $(GENARCH_OBJECTS
) $(GENERIC_OBJECTS
) generic
/src
/debug
/sizeok_map.o
-o
$@
-Map kernel.map.pre
247 $(OBJDUMP
) -t
$(ARCH_OBJECTS
) $(GENARCH_OBJECTS
) $(GENERIC_OBJECTS
) > kernel.objdump
248 tools
/genmap.py kernel.map.pre kernel.objdump generic
/src
/debug
/real_map.bin
250 generic
/src
/debug
/real_map.o
: generic
/src
/debug
/real_map.bin
251 $(OBJCOPY
) -I binary
-O
$(BFD_NAME
) -B
$(BFD_ARCH
) --prefix-sections
=symtab
$< $@
253 kernel.raw
: depend arch
/$(ARCH
)/_link.
ld $(ARCH_OBJECTS
) $(GENARCH_OBJECTS
) $(GENERIC_OBJECTS
) generic
/src
/debug
/real_map.o
254 $(LD
) -T arch
/$(ARCH
)/_link.
ld $(LFLAGS
) $(ARCH_OBJECTS
) $(GENARCH_OBJECTS
) $(GENERIC_OBJECTS
) generic
/src
/debug
/real_map.o
-o
$@
-Map kernel.map
256 kernel.bin
: kernel.raw
257 $(OBJCOPY
) -O
$(BFD
) kernel.raw kernel.bin
260 $(OBJDUMP
) -d kernel.raw
> kernel.disasm
263 $(CC
) $(DEFS
) $(CFLAGS
) -D__ASM__
-c
$< -o
$@
266 $(AS
) $(AFLAGS
) $< -o
$@
269 $(CC
) $(DEFS
) $(CFLAGS
) -c
$< -o
$@