sortix-mirror/kernel/Makefile

214 lines
4.2 KiB
Makefile
Raw Normal View History

SOFTWARE_MEANT_FOR_SORTIX=1
2012-09-10 21:36:15 +00:00
include ../compiler.mak
include ../version.mak
include ../dirs.mak
# Default values in case the user doesn't override these variables.
OPTLEVEL?=-g -O2
CALLTRACE?=0
DISKWRITE?=1
CPPFLAGS?=
CXXFLAGS?=$(OPTLEVEL)
# Base compiler options and definitions.
CPPFLAGS:=$(CPPFLAGS) -I. -Iinclude -D__is_sortix_kernel
CXXFLAGS:=$(CXXFLAGS) -Wall -Wextra -ffreestanding -fbuiltin -std=gnu++11 \
-fno-exceptions -fno-rtti
ifeq ($(PANIC_SHORT),1)
CPPFLAGS:=$(CPPFLAGS) -DPANIC_SHORT
2011-08-05 12:25:00 +00:00
endif
CPPFLAGS:=$(CPPFLAGS) -DENABLE_DISKWRITE=$(DISKWRITE)
CPPFLAGS:=$(CPPFLAGS) -DENABLE_CALLTRACE=$(CALLTRACE)
ifdef VERSION
CPPFLAGS:=$(CPPFLAGS) -DVERSIONSTR=\"$(VERSION)\"
endif
# Architecture-dependent options and definitions.
BOOTOBJS:=
2011-08-05 12:25:00 +00:00
ifeq ($(CPU),x86)
X86FAMILY:=1
2012-09-10 21:36:15 +00:00
CPUOBJS:=$(CPU)/boot.o $(CPU)/base.o $(CPU)/x86.o
2011-08-05 12:25:00 +00:00
endif
ifeq ($(CPU),x64)
X86FAMILY:=1
CXXFLAGS:=$(CXXFLAGS) -mno-red-zone
CPUOBJS:=$(CPU)/boot.o $(CPU)/base.o $(CPU)/x64.o
2011-08-05 12:25:00 +00:00
endif
ifdef X86FAMILY
CPUOBJS:=$(CPUOBJS) \
$(CPU)/memorymanagement.o \
x86-family/memorymanagement.o \
2011-08-05 12:25:00 +00:00
$(CPU)/interrupt.o \
x86-family/interrupt.o \
x86-family/pic.o \
x86-family/gdt.o \
x86-family/idt.o \
$(CPU)/syscall.o \
Implemented the fork() system call and what it needed to work properly. This commit got completely out of control. Added the fork(), getpid(), getppid(), sleep(), usleep() system calls, and aliases in the Maxsi:: namespace. Fixed a bug where zero-byte allocation would fail. Worked on the DescriptorTable class which now works and can fork. Got rid of some massive print-registers statements and replaced them with the portable InterruptRegisters::LogRegisters() function. Removed the SysExecuteOld function and replaced it with Process::Execute(). Rewrote the boot sequence in kernel.cpp such that it now loads the system idle process 'idle' as PID 0, and the initization process 'init' as PID 1. Rewrote the SIGINT hack. Processes now maintain a family-tree structure and keep track of their threads. PIDs are now allocated using a simple hack. Virtual memory per-process can now be allocated using a simple hack. Processes can now be forked. Fixed the Process::Execute function such that it now resets the stack pointer to where the stack actually is - not just a magic value. Removed the old and ugly Process::_endcodesection hack. Rewrote the scheduler into a much cleaner and faster version. Debug code is now moved to designated functions. The noop kernel-thread has been replaced by a simple user-space infinite-loop program 'idle'. The Thread class has been seperated from the Scheduler except in Scheduler- related code. Thread::{Save,Load}Registers has been improved and has been moved to $(CPU)/thread.cpp. Threads can now be forked. A new CreateThread function creates threads properly and portably. Added a MicrosecondsSinceBoot() function. Fixed a crucial bug in MemoryManagement::Fork(). Added an 'idle' user-space program that is a noop infinite loop, which is used by the scheduler when there is nothing to do. Rewrote the 'init' program such that it now forks off a shell, instead of becoming the shell. Added the $$ (current PID) and $PPID (parent PPID) variables to the shell.
2011-09-21 18:52:29 +00:00
$(CPU)/thread.o \
$(CPU)/process.o \
2013-05-15 20:04:18 +00:00
x86-family/cmos.o \
2013-10-13 21:56:58 +00:00
x86-family/time.o \
x86-family/msr.o \
x86-family/float.o \
x86-family/x86-family.o
# TODO: Are these -m flags even needed in the first place?
CXXFLAGS:=$(CXXFLAGS) -mno-mmx -mno-sse -mno-sse2 -mno-sse3 -mno-3dnow
2011-08-05 12:25:00 +00:00
endif
# Object files that constitute the kernel.
2011-08-05 12:25:00 +00:00
CRTI_OBJ:=$(CPU)/crti.o
CRTBEGIN_OBJ:=$(shell $(HOSTCXX) $(CXXFLAGS) -print-file-name=crtbegin.o)
CRTEND_OBJ:=$(shell $(HOSTCXX) $(CXXFLAGS) -print-file-name=crtend.o)
CRTN_OBJ:=$(CPU)/crtn.o
LIBS=\
-nostdlib \
2014-02-13 19:26:38 +00:00
-lk \
2012-09-28 21:37:32 +00:00
-lgcc \
2012-02-13 12:16:43 +00:00
OBJS=\
$(CPUOBJS) \
addralloc.o \
2013-05-11 23:24:42 +00:00
alarm.o \
2012-12-05 18:29:20 +00:00
ata.o \
bga.o \
calltrace.o \
2013-10-13 21:56:58 +00:00
clock.o \
2012-12-05 18:29:20 +00:00
com.o \
copy.o \
$(CPU)/calltrace.o \
2012-12-05 18:29:20 +00:00
$(CPU)/kthread.o \
crc32.o \
2013-05-18 23:49:09 +00:00
debugger.o \
descriptor.o \
2012-12-16 01:10:19 +00:00
dispmsg.o \
dtable.o \
2011-09-06 17:51:47 +00:00
elf.o \
2013-03-12 13:24:31 +00:00
fcache.o \
fsfunc.o \
2013-11-02 21:46:55 +00:00
fs/full.o \
fs/kram.o \
2013-10-29 00:03:57 +00:00
fs/null.o \
2013-01-30 19:33:13 +00:00
fs/user.o \
2012-12-05 18:29:20 +00:00
fs/util.o \
2013-11-02 21:37:17 +00:00
fs/zero.o \
2013-01-13 01:37:14 +00:00
identity.o \
2012-12-05 18:29:20 +00:00
initrd.o \
inode.o \
2012-12-05 18:29:20 +00:00
interlock.o \
interrupt.o \
ioctx.o \
2012-12-05 18:29:20 +00:00
io.o \
kb/layout/us.o \
kb/ps2.o \
kernelinfo.o \
kernel.o \
kthread.o \
lfbtextbuffer.o \
linebuffer.o \
log.o \
logterminal.o \
memorymanagement.o \
mtable.o \
2013-04-23 21:53:16 +00:00
net/fs.o \
2013-03-18 13:22:17 +00:00
op-new.o \
2012-12-05 18:29:20 +00:00
panic.o \
2013-06-01 11:24:27 +00:00
partition.o \
2012-12-05 18:29:20 +00:00
pci.o \
pipe.o \
2012-12-29 22:09:09 +00:00
poll.o \
2012-12-05 18:29:20 +00:00
process.o \
refcount.o \
2013-08-30 15:35:30 +00:00
resource.o \
2012-12-05 18:29:20 +00:00
scheduler.o \
2013-08-20 00:23:53 +00:00
segment.o \
2012-12-05 18:29:20 +00:00
signal.o \
string.o \
2013-05-20 13:53:33 +00:00
symbol.o \
2012-12-05 18:29:20 +00:00
syscall.o \
textbuffer.o \
textterminal.o \
thread.o \
time.o \
2013-10-13 21:56:58 +00:00
timer.o \
2012-12-05 18:29:20 +00:00
uart.o \
2013-10-13 21:56:58 +00:00
user-timer.o \
2012-12-05 18:29:20 +00:00
vga.o \
vgatextbuffer.o \
video.o \
vnode.o \
2012-12-05 18:29:20 +00:00
worker.o \
2011-09-06 17:51:47 +00:00
2012-09-10 21:36:15 +00:00
ALLOBJS=\
$(CRTI_OBJ) \
2012-09-10 21:36:15 +00:00
$(OBJS) \
$(CRTN_OBJ) \
2012-09-10 21:36:15 +00:00
end.o
2011-08-05 12:25:00 +00:00
LINK_OBJECTS=\
$(CRTI_OBJ) $(CRTBEGIN_OBJ) $(OBJS) $(LIBS) $(CRTN_OBJ) $(CRTEND_OBJ) end.o
# Rules and recipes for building the kernel.
2011-08-05 12:25:00 +00:00
all: kernel
kernel: sortix.bin
.PHONY: all kernel headers clean install install-include-dirs install-headers \
install-kernel install-kernel-binary
headers:
2011-08-05 12:25:00 +00:00
# x64 compilation
ifeq ($(CPU),x64)
2011-08-05 12:25:00 +00:00
sortix-x86_64.bin: $(ALLOBJS)
$(HOSTCXX) $(CXXFLAGS) -Wl,-Ttext -Wl,100000 -Wl,-z -Wl,max-page-size=0x1000 $(LINK_OBJECTS) -o $@
2011-08-05 12:25:00 +00:00
sortix.bin: sortix-x86_64.bin
$(HOSTOBJCOPY) $< -O elf32-i386-sortix $@
endif
2011-08-05 12:25:00 +00:00
# x86 compilation
ifeq ($(CPU),x86)
2011-08-05 12:25:00 +00:00
sortix.bin: $(ALLOBJS)
$(HOSTCXX) $(CXXFLAGS) -Wl,-Ttext -Wl,100000 $(LINK_OBJECTS) -o $@
2011-08-05 12:25:00 +00:00
endif
2011-08-05 12:25:00 +00:00
%.o: %.cpp
2012-09-10 21:36:15 +00:00
$(HOSTCXX) -c $< -o $@ $(CPPFLAGS) $(CXXFLAGS)
2011-08-05 12:25:00 +00:00
%.o: %.S
$(HOSTCXX) -c $< -o $@ $(CPPFLAGS) $(CXXFLAGS)
2011-08-05 12:25:00 +00:00
clean:
rm -f $(ALLOBJS) sortix.bin
rm -f $(wildcard *.bin) $(wildcard *.out) $(wildcard *.tmp)
rm -f $(wildcard *.o) $(wildcard */*.o) $(wildcard */*/*.o)
2011-08-05 12:25:00 +00:00
# Installation into sysroot
2012-09-10 21:36:15 +00:00
install: install-headers install-kernel
install-include-dirs: headers
mkdir -p $(DESTDIR)$(INCLUDEDIR)
install-headers: install-include-dirs headers
cp -RTv include $(DESTDIR)$(INCLUDEDIR)
2011-08-05 12:25:00 +00:00
2012-09-10 21:36:15 +00:00
install-kernel: install-kernel-binary
install-kernel-binary: sortix.bin
mkdir -p $(DESTDIR)$(BOOTDIR)/$(HOST)
cp sortix.bin $(DESTDIR)$(BOOTDIR)/$(HOST)
2012-09-10 21:36:15 +00:00