source: trunk/kernel/Makefile @ 549

Last change on this file since 549 was 543, checked in by nicolas.van.phan@…, 6 years ago

Add untested bare SDC driver (from giet)

Changes some hard-coded definitions in SD card driver

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