source: trunk/Makefile.x86 @ 47

Last change on this file since 47 was 47, checked in by max@…, 7 years ago

Use mcmodel=large, in order to have a kernel image that is located at the
beginning of each cluster in virtual memory, as discussed with Alain. The
performance cost will be taken care of later.

Now, the active kernel is located at 0xfffff00000000000, and the base of
the clusters is 0xffff800000000000.

File size: 18.2 KB
Line 
1#############################################################################
2#                       ALMOS-MKH  Makefile for x86_64                      #
3#############################################################################
4
5-include params.mk
6
7# Compilation flags.
8CFLAGS = -Wall -ffreestanding -mno-red-zone -mno-mmx -mno-sse -mno-avx -g \
9                 -fno-delete-null-pointer-checks -mcmodel=large
10
11# Export all variables to applications sub-Makefile.
12export
13CC = gcc
14AS = as
15LD = ld
16DU = objdump
17AR = ar
18
19
20# Rules that don't build target files
21# always out-of-date, need to be regenerated everytime they are called
22.PHONY: compile                         \
23                dirs                                \
24                list                                \
25                extract                             \
26                fsck                                \
27                clean                               \
28                build-disk                          \
29                build/kernel/kernel.elf
30
31# Objects to be linked for the soclib drivers library
32DRIVERS_OBJS = build/kernel/drivers/soclib_tty.o  \
33               build/kernel/drivers/soclib_bdv.o  \
34               build/kernel/drivers/soclib_hba.o  \
35               build/kernel/drivers/soclib_mmc.o  \
36               build/kernel/drivers/soclib_xcu.o  \
37               build/kernel/drivers/soclib_pic.o  \
38               build/kernel/drivers/soclib_nic.o  \
39               build/kernel/drivers/soclib_dma.o  \
40               build/kernel/drivers/soclib_iob.o
41
42# Objects to be linked for kernel.elf generation
43KERN_OBJS       = build/kernel/kern/kernel_init.o     \
44              build/kernel/kern/printk.o          \
45              build/kernel/kern/thread.o          \
46              build/kernel/kern/process.o         \
47              build/kernel/kern/chdev.o           \
48              build/kernel/kern/cluster.o         \
49              build/kernel/kern/scheduler.o       \
50              build/kernel/kern/core.o            \
51              build/kernel/kern/dqdt.o            \
52              build/kernel/kern/do_syscall.o      \
53              build/kernel/kern/do_interrupt.o    \
54              build/kernel/kern/do_exception.o    \
55              build/kernel/kern/rpc.o             \
56              build/kernel/kern/signal.o
57
58HAL_OBJS    = \
59              build/kernel/hal/hal_boot.o         \
60              build/kernel/hal/hal_init.o         \
61              build/kernel/hal/hal_cpu.o          \
62              build/kernel/hal/hal_trap.o         \
63              build/kernel/hal/hal_kentry.o       \
64              build/kernel/hal/hal_acpi.o         \
65              build/kernel/hal/hal_lapic.o        \
66              build/kernel/hal/x86_printf.o       \
67              build/kernel/hal/hal_special.o      \
68              build/kernel/hal/hal_context.o      \
69              build/kernel/hal/hal_atomic.o       \
70              build/kernel/hal/hal_remote.o       \
71              build/kernel/hal/hal_uspace.o       \
72              build/kernel/hal/hal_irqmask.o      \
73              build/kernel/hal/hal_gpt.o          \
74              build/kernel/hal/hal_exception.o    \
75              build/kernel/hal/hal_interrupt.o    \
76              build/kernel/hal/hal_syscall.o
77
78DEV_OBJS    = build/kernel/devices/dev_txt.o      \
79              build/kernel/devices/dev_ioc.o      \
80              build/kernel/devices/dev_icu.o      \
81              build/kernel/devices/dev_mmc.o      \
82              build/kernel/devices/dev_nic.o      \
83              build/kernel/devices/dev_pic.o      \
84              build/kernel/devices/dev_dma.o      \
85              build/kernel/devices/dev_fbf.o      \
86              build/kernel/devices/dev_iob.o
87
88MM_OBJS     = build/kernel/mm/ppm.o               \
89              build/kernel/mm/vmm.o               \
90              build/kernel/mm/vseg.o              \
91              build/kernel/mm/page.o              \
92              build/kernel/mm/kcm.o               \
93              build/kernel/mm/khm.o               \
94              build/kernel/mm/mapper.o            \
95              build/kernel/mm/kmem.o
96
97LIBK_OBJS   = build/kernel/libk/grdxt.o           \
98              build/kernel/libk/bits.o            \
99              build/kernel/libk/elf.o             \
100              build/kernel/libk/string.o          \
101              build/kernel/libk/ctype.o           \
102              build/kernel/libk/rwlock.o          \
103              build/kernel/libk/spinlock.o        \
104              build/kernel/libk/barrier.o         \
105              build/kernel/libk/remote_barrier.o  \
106              build/kernel/libk/remote_spinlock.o \
107              build/kernel/libk/remote_rwlock.o   \
108              build/kernel/libk/remote_fifo.o     \
109              build/kernel/libk/remote_mutex.o    \
110              build/kernel/libk/remote_sem.o      \
111              build/kernel/libk/remote_condvar.o  \
112              build/kernel/libk/memcpy.o          \
113              build/kernel/libk/htab.o            \
114              build/kernel/libk/xhtab.o
115
116SYS_OBJS_0  = build/kernel/syscalls/sys_thread_exit.o     \
117              build/kernel/syscalls/sys_mmap.o            \
118              build/kernel/syscalls/sys_thread_create.o   \
119              build/kernel/syscalls/sys_thread_join.o     \
120              build/kernel/syscalls/sys_thread_detach.o   \
121              build/kernel/syscalls/sys_thread_yield.o    \
122              build/kernel/syscalls/sys_sem.o             \
123              build/kernel/syscalls/sys_condvar.o         \
124              build/kernel/syscalls/sys_barrier.o         \
125              build/kernel/syscalls/sys_mutex.o
126
127SYS_OBJS_1  = build/kernel/syscalls/sys_thread_sleep.o    \
128              build/kernel/syscalls/sys_thread_wakeup.o   \
129              build/kernel/syscalls/sys_open.o            \
130              build/kernel/syscalls/sys_creat.o           \
131              build/kernel/syscalls/sys_read.o            \
132              build/kernel/syscalls/sys_write.o           \
133              build/kernel/syscalls/sys_lseek.o           \
134              build/kernel/syscalls/sys_close.o           \
135              build/kernel/syscalls/sys_unlink.o          \
136              build/kernel/syscalls/sys_pipe.o
137
138SYS_OBJS_2  = build/kernel/syscalls/sys_chdir.o           \
139              build/kernel/syscalls/sys_mkdir.o           \
140              build/kernel/syscalls/sys_mkfifo.o          \
141              build/kernel/syscalls/sys_opendir.o         \
142              build/kernel/syscalls/sys_readdir.o         \
143              build/kernel/syscalls/sys_closedir.o        \
144              build/kernel/syscalls/sys_getcwd.o          \
145              build/kernel/syscalls/sys_clock.o           \
146              build/kernel/syscalls/sys_alarm.o           \
147              build/kernel/syscalls/sys_rmdir.o
148
149SYS_OBJS_3  = build/kernel/syscalls/sys_utls.o            \
150              build/kernel/syscalls/sys_chmod.o           \
151              build/kernel/syscalls/sys_signal.o          \
152              build/kernel/syscalls/sys_gettimeofday.o    \
153              build/kernel/syscalls/sys_kill.o            \
154              build/kernel/syscalls/sys_getpid.o          \
155              build/kernel/syscalls/sys_fork.o            \
156              build/kernel/syscalls/sys_exec.o            \
157              build/kernel/syscalls/sys_stat.o            \
158              build/kernel/syscalls/sys_trace.o
159
160SYS_OBJS_4  = build/kernel/syscalls/sys_madvise.o         \
161              build/kernel/syscalls/sys_mcntl.o           \
162              build/kernel/syscalls/sys_stat.o            \
163              build/kernel/syscalls/sys_thread_migrate.o  \
164              build/kernel/syscalls/sys_sbrk.o            \
165              build/kernel/syscalls/sys_rmdir.o           \
166              build/kernel/syscalls/sys_ftime.o           \
167              build/kernel/syscalls/sys_chmod.o           \
168              build/kernel/syscalls/sys_fsync.o           \
169              build/kernel/syscalls/sys_gettimeofday.o
170
171SYS_OBJS_5  = build/kernel/syscalls/sys_times.o
172
173
174VFS_OBJS    = build/kernel/vfs/vfs.o              \
175              build/kernel/vfs/fatfs.o            \
176              build/kernel/vfs/devfs.o            \
177              build/kernel/vfs/ramfs.o
178
179# List of directories to be searched for included files
180# when compiling for kernel.elf generation
181KERNEL_INCLUDE = -Ikernel                \
182                 -Ikernel/kern           \
183                 -Ikernel/devices        \
184                 -Ikernel/syscalls       \
185                 -Ikernel/drivers/soclib \
186                 -Ikernel/syscalls       \
187                 -Ikernel/libk           \
188                 -Ikernel/mm             \
189                 -Ikernel/vfs            \
190                 -Ikernel/fatfs          \
191                 -Ikernel/sysfs          \
192                 -Ikernel/ramfs          \
193                 -Ikernel/devfs          \
194                 -Itools/arch_info       \
195                 -Ihal/generic           \
196                 -Ihal/x86_64            \
197                 -I.
198
199# Macros to be processed by the C preprocessor.
200MACROS           = -DARCHINFO_PATHNAME="\"arch_info.bin\""              \
201                           -DKERNEL_PATHNAME="\"/bin/kernel/kernel.elf\""
202
203# Virtual disk path
204DISK_IMAGE      := hdd/virt_hdd.dmg
205
206# The Mtools used to build the FAT32 disk image perfom a few sanity checks, to
207# make sure that the disk is indeed an MS-DOS disk. However, the size of the
208# disk image used by ALMOS-VM is not MS-DOS compliant.
209# Setting this variable prevents these checks.
210MTOOLS_SKIP_CHECK := 1
211
212# Rule to compile kernel.elf, and update virtual disk.
213compile: dirs                               \
214                 hard_config.h              \
215         build/kernel/kernel.elf    \
216         list
217
218# Rule to create the build directories.
219dirs:
220        @mkdir -p build/kernel
221        @mkdir -p build/kernel/kern
222        @mkdir -p build/kernel/hal
223        @mkdir -p build/kernel/devices
224        @mkdir -p build/kernel/mm
225        @mkdir -p build/kernel/libk
226        @mkdir -p build/kernel/drivers
227        @mkdir -p build/kernel/vfs
228        @mkdir -p build/kernel/syscalls
229        @mkdir -p hdd
230
231# Rule to make a recursive list of the virtual disk content.
232list:
233        mdir -/ -w -i $(DISK_IMAGE) ::/
234
235# Rule to make a file system check for the virtual disk.
236fsck:
237        fsck.msdos $(DISK_IMAGE)
238
239##############################################################
240# Rule to copy the files generated by the virtual prototype
241# from the virtual disk 'home' directory to the current directory.
242extract:
243        mcopy -o -i $(DISK_IMAGE) ::/home .
244
245# Rules to delete all binary files from Unix File System
246# without modifying the virtual disk.
247clean:
248        rm -f *.o *.elf *.bin *.txt core
249        rm -f hard_config.h
250        rm -rf build
251
252####################################################   
253# Rule for building a new virtual disk from scratch.
254# It creates the bin / home directories.
255# This requires the generic Linux/MacOS 'create_dmg' script, that should be
256# placed in the same directory as this Makefile.
257build-disk:
258        rm -f $(DISK_IMAGE)
259        ./create_dmg    create $(basename $(DISK_IMAGE))
260        dd                              if=$(DISK_IMAGE) of=temp.dmg count=65536
261        mv                              temp.dmg $(DISK_IMAGE)
262        mmd                     -o -i $(DISK_IMAGE) ::/bin         || true
263        mmd                     -o -i $(DISK_IMAGE) ::/bin/kernel  || true
264        mmd                     -o -i $(DISK_IMAGE) ::/home        || true
265        mdir             -/ -b -i $(DISK_IMAGE) ::/
266       
267##############################################################
268# Rules to generate hardware description files (hard_config.h,
269# arch_info.bin and arch_info.xml), and update the virtual disk.
270hard_config.h:
271        echo "!!! UNUSED !!!" # XXX: cleanup later
272
273
274##############################
275# rules to compile the drivers
276build/kernel/drivers/%.o:       kernel/drivers/soclib/%.c   \
277                                kernel/drivers/soclib/%.h   \
278                                kernel_config.h             \
279                                hal/x86_64/hal_types.h
280        $(CC) $(KERNEL_INCLUDE) $(CFLAGS)  -c -o $@ $<
281        $(DU) -D $@ > $@.txt
282
283#######################################
284# Rules to generate kernel/kern objects
285build/kernel/kern/%.o:              kernel/kern/%.c             \
286                                kernel/kern/%.h             \
287                                kernel_config.h             \
288                                hal/x86_64/hal_types.h
289        $(CC) $(KERNEL_INCLUDE) $(CFLAGS) -c -o $@ $<
290        $(DU) -D $@ > $@.txt
291
292######################################
293# Rules to generate kernel/hal objects
294build/kernel/hal/%.o:           hal/x86_64/%.c         \
295                                hal/generic/%.h             \
296                                kernel_config.h             \
297                                hal/x86_64/hal_types.h
298        $(CC) $(KERNEL_INCLUDE) $(CFLAGS) -c -o $@ $<
299        $(DU) -D $@ > $@.txt
300
301build/kernel/hal/hal_boot.o:    hal/x86_64/hal_boot.S \
302                                hal/x86_64/hal_boot.h        \
303                                hal/x86_64/hal_multiboot.h   \
304                                hal/x86_64/hal_segmentation.h \
305                                kernel_config.h              \
306                                hal/x86_64/hal_types.h
307        $(CC) $(KERNEL_INCLUDE) $(CFLAGS) -c -o $@ $<
308        $(DU) -D $@ > $@.txt
309
310build/kernel/hal/hal_init.o:    hal/x86_64/hal_init.c         \
311                                hal/x86_64/hal_boot.h         \
312                                hal/x86_64/hal_multiboot.h    \
313                                hal/x86_64/hal_segmentation.h \
314                                hal/x86_64/hal_acpi.h         \
315                                hal/x86_64/hal_lapic.h        \
316                                hal/x86_64/hal_internal.h     \
317                                kernel_config.h               \
318                                hal/x86_64/hal_types.h
319        $(CC) $(KERNEL_INCLUDE) $(CFLAGS) -c -o $@ $<
320        $(DU) -D $@ > $@.txt
321
322build/kernel/hal/hal_cpu.o:     hal/x86_64/hal_cpu.S \
323                                hal/x86_64/hal_boot.h        \
324                                hal/x86_64/hal_segmentation.h \
325                                kernel_config.h              \
326                                hal/x86_64/hal_types.h
327        $(CC) $(KERNEL_INCLUDE) $(CFLAGS) -c -o $@ $<
328        $(DU) -D $@ > $@.txt
329
330build/kernel/hal/hal_trap.o:    hal/x86_64/hal_trap.c \
331                                hal/x86_64/hal_boot.h        \
332                                hal/x86_64/hal_segmentation.h \
333                                kernel_config.h              \
334                                hal/x86_64/hal_types.h
335        $(CC) $(KERNEL_INCLUDE) $(CFLAGS) -c -o $@ $<
336        $(DU) -D $@ > $@.txt
337
338build/kernel/hal/hal_kentry.o:  hal/x86_64/hal_kentry.S      \
339                                hal/x86_64/hal_kentry.h      \
340                                hal/x86_64/hal_boot.h        \
341                                kernel_config.h              \
342                                hal/x86_64/hal_types.h
343        $(CC) $(KERNEL_INCLUDE) $(CFLAGS) -c -o $@ $<
344        $(DU) -D $@ > $@.txt
345
346build/kernel/hal/hal_acpi.o:    hal/x86_64/hal_acpi.c        \
347                                hal/x86_64/hal_acpi.h        \
348                                kernel_config.h              \
349                                hal/x86_64/hal_types.h
350        $(CC) $(KERNEL_INCLUDE) $(CFLAGS) -c -o $@ $<
351        $(DU) -D $@ > $@.txt
352
353build/kernel/hal/hal_lapic.o:   hal/x86_64/hal_lapic.c       \
354                                hal/x86_64/hal_lapic.h       \
355                                kernel_config.h              \
356                                hal/x86_64/hal_types.h
357        $(CC) $(KERNEL_INCLUDE) $(CFLAGS) -c -o $@ $<
358        $(DU) -D $@ > $@.txt
359
360build/kernel/hal/x86_printf.o:  hal/x86_64/x86_printf.c      \
361                                kernel_config.h              \
362                                hal/x86_64/hal_types.h
363        $(CC) $(KERNEL_INCLUDE) $(CFLAGS) -c -o $@ $<
364        $(DU) -D $@ > $@.txt
365
366######################################
367# Rules to generate kernel/dev objects
368build/kernel/devices/%.o:       kernel/devices/%.c          \
369                                kernel/devices/%.h          \
370                                kernel_config.h             \
371                                hal/x86_64/hal_types.h
372        $(CC) $(KERNEL_INCLUDE) $(CFLAGS) -c -o $@ $<
373        $(DU) -D $@ > $@.txt
374
375#####################################
376# Rules to generate kernel/mm objects
377build/kernel/mm/%.o:            kernel/mm/%.c               \
378                                kernel/mm/%.h               \
379                                kernel_config.h             \
380                                hal/x86_64/hal_types.h
381        $(CC) $(KERNEL_INCLUDE) $(CFLAGS) -c -o $@ $<
382        $(DU) -D $@ > $@.txt
383
384#######################################
385# Rules to generate kernel/libk objects
386build/kernel/libk/%.o:          kernel/libk/%.c             \
387                                kernel/libk/%.h             \
388                                kernel_config.h             \
389                                hal/x86_64/hal_types.h
390        $(CC) $(KERNEL_INCLUDE) $(CFLAGS) -c -o $@ $<
391        $(DU) -D $@ > $@.txt
392
393###########################################
394# Rules to generate kernel/syscalls objects
395build/kernel/syscalls/%.o:      kernel/syscalls/%.c         \
396                                kernel/syscalls/syscalls.h  \
397                                kernel_config.h             \
398                                hal/x86_64/hal_types.h
399        $(CC) $(KERNEL_INCLUDE) $(CFLAGS) -c -o $@ $<
400        $(DU) -D $@ > $@.txt
401
402#######################################
403# Rules to generate kernel/vfs objects
404build/kernel/vfs/%.o:           kernel/vfs/%.c              \
405                                kernel/vfs/%.h              \
406                                kernel_config.h             \
407                                hal/x86_64/hal_types.h
408        $(CC) $(KERNEL_INCLUDE) $(CFLAGS) -c -o $@ $<
409        $(DU) -D $@ > $@.txt
410
411###########################################################
412# Rule to generate kernel.elf and place it on virtual disk
413build/kernel/kernel.elf:            $(KERN_OBJS)                \
414                                $(HAL_OBJS)                 \
415                                $(DEV_OBJS)                 \
416                                $(MM_OBJS)                  \
417                                $(LIBK_OBJS)                \
418                                $(DRIVERS_OBJS)             \
419                                $(VFS_OBJS)                 \
420                                $(SYS_OBJS_0)               \
421                                $(SYS_OBJS_1)               \
422                                $(SYS_OBJS_2)               \
423                                $(SYS_OBJS_3)               \
424                                kernel/kernel_x86.ld
425        $(LD) -o $@ -z max-page-size=0x1000 -T kernel/kernel_x86.ld \
426          $(KERN_OBJS) $(HAL_OBJS) $(DEV_OBJS) $(MM_OBJS)   \
427          $(LIBK_OBJS) $(DRIVERS_OBJS) $(VFS_OBJS)          \
428          $(SYS_OBJS_0) $(SYS_OBJS_1) $(SYS_OBJS_2)         \
429          $(SYS_OBJS_3)
430
431
432#   $(SYS_OBJS_4) $(SYS_OBJS_5)
433
434        $(DU) -D $@ > $@.txt
435        mcopy -o -i $(DISK_IMAGE) build/kernel/kernel.elf ::/bin/kernel
436
Note: See TracBrowser for help on using the repository browser.