source: trunk/kernel/Makefile @ 439

Last change on this file since 439 was 439, checked in by satin@…, 4 years ago

Introduice new distributed Makefile architecture.
Remove deprecated sys/ directory

File size: 12.4 KB
Line 
1#############################################################################
2#                  ALMOS-MKH  Makefile for Kernel                           #
3#############################################################################
4
5-include ../params-soft.mk
6ifeq ($(ARCH_NAME),)
7$(error Please define in ARCH_NAME parameter in params-soft.mk!)
8endif
9
10#We choose drivers and hal file we need to link with kernel.elf
11ifeq ($(ARCH_NAME), tsar_mips32)
12  DRIVERS_OBJS = $(HAL_ARCH)/build/drivers/soclib_tty.o  \
13                $(HAL_ARCH)/build/drivers/soclib_bdv.o  \
14                $(HAL_ARCH)/build/drivers/soclib_hba.o  \
15                $(HAL_ARCH)/build/drivers/soclib_mmc.o  \
16                $(HAL_ARCH)/build/drivers/soclib_pic.o  \
17                $(HAL_ARCH)/build/drivers/soclib_nic.o  \
18                $(HAL_ARCH)/build/drivers/soclib_dma.o  \
19                $(HAL_ARCH)/build/drivers/soclib_iob.o
20
21  CORE_OBJS    = $(HAL_ARCH)/build/core/hal_special.o      \
22                $(HAL_ARCH)/build/core/hal_context.o      \
23                $(HAL_ARCH)/build/core/hal_atomic.o       \
24                $(HAL_ARCH)/build/core/hal_remote.o       \
25                $(HAL_ARCH)/build/core/hal_uspace.o       \
26                $(HAL_ARCH)/build/core/hal_irqmask.o      \
27                $(HAL_ARCH)/build/core/hal_gpt.o          \
28                $(HAL_ARCH)/build/core/hal_ppm.o          \
29                $(HAL_ARCH)/build/core/hal_vmm.o          \
30                $(HAL_ARCH)/build/core/hal_exception.o    \
31                $(HAL_ARCH)/build/core/hal_interrupt.o    \
32                $(HAL_ARCH)/build/core/hal_syscall.o      \
33                $(HAL_ARCH)/build/core/hal_drivers.o      \
34                $(HAL_ARCH)/build/core/hal_kentry.o       \
35                $(HAL_ARCH)/build/core/hal_switch.o
36endif
37
38ifeq ($(ARCH_NAME), x86_64)
39
40  DRIVERS_OBJS = $(HAL_ARCH)/build/drivers/ioc_ata.o     \
41                $(HAL_ARCH)/build/drivers/pic_apic.o    \
42                $(HAL_ARCH)/build/drivers/txt_rs232.o
43
44  CORE_OBJS    = \
45                $(HAL_ARCH)/build/core/hal_boot.o         \
46                $(HAL_ARCH)/build/core/hal_smpboot.o      \
47                $(HAL_ARCH)/build/core/hal_init.o         \
48                $(HAL_ARCH)/build/core/hal_cpu.o          \
49                $(HAL_ARCH)/build/core/hal_kentry.o       \
50                $(HAL_ARCH)/build/core/hal_acpi.o         \
51                $(HAL_ARCH)/build/core/hal_apic.o         \
52                $(HAL_ARCH)/build/core/x86_printf.o       \
53                $(HAL_ARCH)/build/core/hal_drivers.o      \
54                $(HAL_ARCH)/build/core/hal_special.o      \
55                $(HAL_ARCH)/build/core/hal_context.o      \
56                $(HAL_ARCH)/build/core/hal_atomic.o       \
57                $(HAL_ARCH)/build/core/hal_remote.o       \
58                $(HAL_ARCH)/build/core/hal_uspace.o       \
59                $(HAL_ARCH)/build/core/hal_irqmask.o      \
60                $(HAL_ARCH)/build/core/hal_gpt.o          \
61                $(HAL_ARCH)/build/core/hal_ppm.o          \
62                $(HAL_ARCH)/build/core/hal_exception.o    \
63                $(HAL_ARCH)/build/core/hal_interrupt.o    \
64                $(HAL_ARCH)/build/core/hal_syscall.o
65
66endif
67
68LIBGCC = -L$(shell $(CC) -print-libgcc-file-name | sed 's/libgcc.a//') #todo ?
69
70# Rules that don't build target files
71# always out-of-date, need to be regenerated everytime they are called
72.PHONY: compile                         \
73                dirs                                \
74                clean                               \
75                build/kernel.elf
76
77
78# Objects to be linked for kernel.elf generation
79KERN_OBJS       = build/kern/kernel_init.o     \
80              build/kern/printk.o          \
81              build/kern/thread.o          \
82              build/kern/process.o         \
83              build/kern/chdev.o           \
84              build/kern/cluster.o         \
85              build/kern/scheduler.o       \
86              build/kern/core.o            \
87              build/kern/dqdt.o            \
88              build/kern/do_syscall.o      \
89              build/kern/do_interrupt.o    \
90              build/kern/rpc.o
91
92DEV_OBJS    = build/devices/dev_txt.o      \
93              build/devices/dev_ioc.o      \
94              build/devices/dev_mmc.o      \
95              build/devices/dev_nic.o      \
96              build/devices/dev_pic.o      \
97              build/devices/dev_dma.o      \
98              build/devices/dev_fbf.o      \
99              build/devices/dev_iob.o
100
101MM_OBJS     = build/mm/ppm.o               \
102              build/mm/vmm.o               \
103              build/mm/vseg.o              \
104              build/mm/page.o              \
105              build/mm/kcm.o               \
106              build/mm/khm.o               \
107              build/mm/mapper.o            \
108              build/mm/kmem.o
109
110LIBK_OBJS   = build/libk/grdxt.o           \
111              build/libk/bits.o            \
112              build/libk/elf.o             \
113              build/libk/string.o          \
114              build/libk/ctype.o           \
115              build/libk/rwlock.o          \
116              build/libk/spinlock.o        \
117              build/libk/barrier.o         \
118              build/libk/remote_barrier.o  \
119              build/libk/remote_spinlock.o \
120              build/libk/remote_rwlock.o   \
121              build/libk/remote_fifo.o     \
122              build/libk/remote_mutex.o    \
123              build/libk/remote_sem.o      \
124              build/libk/remote_condvar.o  \
125              build/libk/memcpy.o          \
126              build/libk/htab.o            \
127              build/libk/xhtab.o
128
129SYS_OBJS_0  = build/syscalls/sys_thread_exit.o     \
130              build/syscalls/sys_thread_yield.o    \
131              build/syscalls/sys_thread_create.o   \
132              build/syscalls/sys_thread_join.o     \
133              build/syscalls/sys_thread_detach.o   \
134              build/syscalls/sys_thread_cancel.o   \
135              build/syscalls/sys_sem.o             \
136              build/syscalls/sys_condvar.o         \
137              build/syscalls/sys_barrier.o         \
138              build/syscalls/sys_mutex.o
139
140SYS_OBJS_1  = build/syscalls/sys_exit.o            \
141              build/syscalls/sys_munmap.o          \
142              build/syscalls/sys_open.o            \
143              build/syscalls/sys_mmap.o            \
144              build/syscalls/sys_read.o            \
145              build/syscalls/sys_write.o           \
146              build/syscalls/sys_lseek.o           \
147              build/syscalls/sys_close.o           \
148              build/syscalls/sys_unlink.o          \
149              build/syscalls/sys_pipe.o
150
151SYS_OBJS_2  = build/syscalls/sys_chdir.o           \
152              build/syscalls/sys_mkdir.o           \
153              build/syscalls/sys_mkfifo.o          \
154              build/syscalls/sys_opendir.o         \
155              build/syscalls/sys_readdir.o         \
156              build/syscalls/sys_closedir.o        \
157              build/syscalls/sys_getcwd.o          \
158              build/syscalls/sys_isatty.o          \
159              build/syscalls/sys_alarm.o           \
160              build/syscalls/sys_rmdir.o
161
162SYS_OBJS_3  = build/syscalls/sys_utls.o            \
163              build/syscalls/sys_chmod.o           \
164              build/syscalls/sys_signal.o          \
165              build/syscalls/sys_timeofday.o       \
166              build/syscalls/sys_kill.o            \
167              build/syscalls/sys_getpid.o          \
168              build/syscalls/sys_fork.o            \
169              build/syscalls/sys_exec.o            \
170              build/syscalls/sys_stat.o            \
171              build/syscalls/sys_wait.o
172
173SYS_OBJS_4  = build/syscalls/sys_get_config.o      \
174              build/syscalls/sys_get_core.o        \
175              build/syscalls/sys_get_cycle.o       \
176              build/syscalls/sys_display.o         \
177              build/syscalls/sys_thread_sleep.o    \
178              build/syscalls/sys_thread_wakeup.o   \
179              build/syscalls/sys_trace.o           \
180              build/syscalls/sys_fg.o
181
182VFS_OBJS    = build/fs/vfs.o              \
183              build/fs/fatfs.o            \
184              build/fs/devfs.o            \
185              build/fs/ramfs.o
186
187# List of directories to be searched for included files
188# when compiling for kernel.elf generation
189KERNEL_INCLUDE = -I.                  \
190                 -Ikern             \
191                 -Idevices          \
192                 -Isyscalls         \
193                 -I$(HAL_ARCH)/drivers \
194                 -Isyscalls         \
195                 -Ilibk             \
196                 -Imm               \
197                 -Ifs               \
198                 -I../tools/arch_info         \
199                 -I$(HAL)/generic             \
200                 -I$(HAL_ARCH)/core    \
201                 -I..
202
203# Rule to generate kernel.elf.
204compile: dirs                     \
205         build/kernel.elf
206
207# Rule to create the build directories.
208dirs:
209        @mkdir -p build
210        @mkdir -p build/kern
211        @mkdir -p build/hal
212        @mkdir -p build/devices
213        @mkdir -p build/mm
214        @mkdir -p build/libk
215        @mkdir -p build/drivers
216        @mkdir -p build/fs
217        @mkdir -p build/syscalls
218
219
220##############################
221# rules to compile the drivers and hal
222$(HAL_ARCH)/build/%:
223        $(MAKE) -C $(HAL_ARCH)
224
225#######################################
226# Rules to generate kernel/kern objects
227build/kern/%.o:             kern/%.c             \
228                                kern/%.h             \
229                                kernel_config.h             \
230                                $(HAL_ARCH)/core/hal_types.h
231        $(CC) $(KERNEL_INCLUDE) $(CFLAGS) -c -o $@ $<
232
233
234######################################
235# Rules to generate kernel/dev objects
236build/devices/%.o:       devices/%.c          \
237                                devices/%.h          \
238                                kernel_config.h             \
239                                $(HAL_ARCH)/core/hal_types.h
240        $(CC) $(KERNEL_INCLUDE) $(CFLAGS) -c -o $@ $<
241
242#####################################
243# Rules to generate kernel/mm objects
244build/mm/%.o:            mm/%.c               \
245                                mm/%.h               \
246                                kernel_config.h             \
247                                $(HAL_ARCH)/core/hal_types.h
248        $(CC) $(KERNEL_INCLUDE) $(CFLAGS) -c -o $@ $<
249
250#######################################
251# Rules to generate kernel/libk objects
252build/libk/%.o:          libk/%.c             \
253                                libk/%.h             \
254                                kernel_config.h             \
255                                $(HAL_ARCH)/core/hal_types.h
256        $(CC) $(KERNEL_INCLUDE) $(CFLAGS) -c -o $@ $<
257
258###########################################
259# Rules to generate kernel/syscalls objects
260build/syscalls/%.o:      syscalls/%.c         \
261                                syscalls/syscalls.h  \
262                                kernel_config.h             \
263                                $(HAL_ARCH)/core/hal_types.h
264        $(CC) $(KERNEL_INCLUDE) $(CFLAGS) -c -o $@ $<
265
266#######################################
267# Rules to generate kernel/fs objects
268build/fs/%.o:            fs/%.c               \
269                                fs/%.h               \
270                                kernel_config.h             \
271                                $(HAL_ARCH)/core/hal_types.h
272        $(CC) $(KERNEL_INCLUDE) $(CFLAGS) -c -o $@ $<
273
274#############################################################
275# Rule to generate kernel.elf
276# TODO the syscalls grouped in SYS_OBJS_2 must be introduced
277build/kernel.elf:           $(KERN_OBJS)                \
278                                $(CORE_OBJS)                 \
279                                $(DEV_OBJS)                 \
280                                $(MM_OBJS)                  \
281                                $(LIBK_OBJS)                \
282                                $(DRIVERS_OBJS)             \
283                                $(VFS_OBJS)                 \
284                                $(SYS_OBJS_0)               \
285                                $(SYS_OBJS_1)               \
286                                $(SYS_OBJS_2)               \
287                                $(SYS_OBJS_3)               \
288                                $(SYS_OBJS_4)               \
289                                                                $(HAL_ARCH)/kernel.ld
290        $(LD) -o $@ -T $(HAL_ARCH)/kernel.ld $(LIBGCC)      \
291          $(KERN_OBJS) $(CORE_OBJS) $(DEV_OBJS) $(MM_OBJS)   \
292          $(LIBK_OBJS) $(DRIVERS_OBJS) $(VFS_OBJS)          \
293          $(SYS_OBJS_0) $(SYS_OBJS_1) $(SYS_OBJS_2)         \
294          $(SYS_OBJS_3) $(SYS_OBJS_4) -lgcc
295        $(DU) -D $@ > $@.txt
296
297clean:
298        rm -rf build/*
Note: See TracBrowser for help on using the repository browser.