2013-03-19 23:28:32 +01:00
|
|
|
SOFTWARE_MEANT_FOR_SORTIX=1
|
2012-09-10 23:36:15 +02:00
|
|
|
include ../compiler.mak
|
|
|
|
include ../version.mak
|
|
|
|
include ../dirs.mak
|
2011-11-28 15:25:00 +01:00
|
|
|
|
2013-03-19 23:28:32 +01:00
|
|
|
# Default values in case the user doesn't override these variables.
|
|
|
|
OPTLEVEL?=-g -O2
|
|
|
|
CALLTRACE?=0
|
2013-11-13 13:52:03 +01:00
|
|
|
DISKWRITE?=1
|
2013-03-19 23:28:32 +01:00
|
|
|
CPPFLAGS?=
|
|
|
|
CXXFLAGS?=$(OPTLEVEL)
|
|
|
|
|
|
|
|
# Base compiler options and definitions.
|
|
|
|
|
2013-09-22 23:55:39 +02:00
|
|
|
CPPFLAGS:=$(CPPFLAGS) -I. -Iinclude -D__is_sortix_kernel
|
2013-03-19 23:28:32 +01:00
|
|
|
CXXFLAGS:=$(CXXFLAGS) -Wall -Wextra -ffreestanding -fbuiltin -std=gnu++11 \
|
|
|
|
-fno-exceptions -fno-rtti
|
|
|
|
|
|
|
|
ifeq ($(PANIC_SHORT),1)
|
|
|
|
CPPFLAGS:=$(CPPFLAGS) -DPANIC_SHORT
|
2011-08-05 14:25:00 +02:00
|
|
|
endif
|
2013-03-19 23:28:32 +01:00
|
|
|
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 14:25:00 +02:00
|
|
|
|
|
|
|
ifeq ($(CPU),x86)
|
2013-03-19 23:28:32 +01:00
|
|
|
X86FAMILY:=1
|
2012-09-10 23:36:15 +02:00
|
|
|
CPUOBJS:=$(CPU)/boot.o $(CPU)/base.o $(CPU)/x86.o
|
2011-08-05 14:25:00 +02:00
|
|
|
endif
|
|
|
|
|
|
|
|
ifeq ($(CPU),x64)
|
2013-03-19 23:28:32 +01:00
|
|
|
X86FAMILY:=1
|
|
|
|
CXXFLAGS:=$(CXXFLAGS) -mno-red-zone
|
|
|
|
CPUOBJS:=$(CPU)/boot.o $(CPU)/base.o $(CPU)/x64.o
|
2011-08-05 14:25:00 +02:00
|
|
|
endif
|
|
|
|
|
|
|
|
ifdef X86FAMILY
|
|
|
|
CPUOBJS:=$(CPUOBJS) \
|
2011-10-02 15:58:08 +02:00
|
|
|
$(CPU)/memorymanagement.o \
|
|
|
|
x86-family/memorymanagement.o \
|
2011-08-05 14:25:00 +02:00
|
|
|
$(CPU)/interrupt.o \
|
2014-01-31 13:19:27 +01:00
|
|
|
x86-family/interrupt.o \
|
|
|
|
x86-family/pic.o \
|
2012-03-01 00:15:28 +01:00
|
|
|
x86-family/gdt.o \
|
|
|
|
x86-family/idt.o \
|
2011-10-27 00:05:20 +02:00
|
|
|
$(CPU)/syscall.o \
|
2011-09-21 20:52:29 +02:00
|
|
|
$(CPU)/thread.o \
|
2011-11-29 01:21:59 +01:00
|
|
|
$(CPU)/process.o \
|
2013-05-15 22:04:18 +02:00
|
|
|
x86-family/cmos.o \
|
2013-10-13 23:56:58 +02:00
|
|
|
x86-family/time.o \
|
2012-07-01 00:50:27 +02:00
|
|
|
x86-family/msr.o \
|
2012-08-05 00:06:17 +02:00
|
|
|
x86-family/float.o \
|
2011-08-12 17:17:02 +02:00
|
|
|
x86-family/x86-family.o
|
2013-03-19 23:28:32 +01:00
|
|
|
# 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 14:25:00 +02:00
|
|
|
endif
|
|
|
|
|
2013-03-19 23:28:32 +01:00
|
|
|
# Object files that constitute the kernel.
|
2011-08-05 14:25:00 +02:00
|
|
|
|
2013-10-18 22:28:29 +02: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
|
|
|
|
|
2013-03-19 23:28:32 +01:00
|
|
|
LIBS=\
|
|
|
|
-nostdlib \
|
2014-02-13 20:26:38 +01:00
|
|
|
-lk \
|
2012-09-28 23:37:32 +02:00
|
|
|
-lgcc \
|
2012-02-13 13:16:43 +01:00
|
|
|
|
2013-03-19 23:28:32 +01:00
|
|
|
OBJS=\
|
|
|
|
$(CPUOBJS) \
|
2013-02-09 18:32:45 +01:00
|
|
|
addralloc.o \
|
2013-05-12 01:24:42 +02:00
|
|
|
alarm.o \
|
2012-12-05 19:29:20 +01:00
|
|
|
ata.o \
|
|
|
|
bga.o \
|
2012-03-02 14:08:25 +01:00
|
|
|
calltrace.o \
|
2013-10-13 23:56:58 +02:00
|
|
|
clock.o \
|
2012-12-05 19:29:20 +01:00
|
|
|
com.o \
|
2012-08-08 00:19:44 +02:00
|
|
|
copy.o \
|
2012-03-02 14:08:25 +01:00
|
|
|
$(CPU)/calltrace.o \
|
2012-12-05 19:29:20 +01:00
|
|
|
$(CPU)/kthread.o \
|
|
|
|
crc32.o \
|
2013-05-19 01:49:09 +02:00
|
|
|
debugger.o \
|
2012-08-08 00:19:44 +02:00
|
|
|
descriptor.o \
|
2012-12-16 02:10:19 +01:00
|
|
|
dispmsg.o \
|
2012-08-08 00:19:44 +02:00
|
|
|
dtable.o \
|
2011-09-06 19:51:47 +02:00
|
|
|
elf.o \
|
2013-03-12 14:24:31 +01:00
|
|
|
fcache.o \
|
2012-08-08 00:19:44 +02:00
|
|
|
fsfunc.o \
|
2013-11-02 22:46:55 +01:00
|
|
|
fs/full.o \
|
2012-08-08 00:19:44 +02:00
|
|
|
fs/kram.o \
|
2013-10-29 01:03:57 +01:00
|
|
|
fs/null.o \
|
2013-01-30 20:33:13 +01:00
|
|
|
fs/user.o \
|
2012-12-05 19:29:20 +01:00
|
|
|
fs/util.o \
|
2013-11-02 22:37:17 +01:00
|
|
|
fs/zero.o \
|
2013-01-13 02:37:14 +01:00
|
|
|
identity.o \
|
2012-12-05 19:29:20 +01:00
|
|
|
initrd.o \
|
2012-08-08 00:19:44 +02:00
|
|
|
inode.o \
|
2012-12-05 19:29:20 +01:00
|
|
|
interlock.o \
|
|
|
|
interrupt.o \
|
2012-08-08 00:19:44 +02:00
|
|
|
ioctx.o \
|
2012-12-05 19:29:20 +01: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 \
|
2012-08-08 00:19:44 +02:00
|
|
|
mtable.o \
|
2013-04-23 23:53:16 +02:00
|
|
|
net/fs.o \
|
2013-03-18 14:22:17 +01:00
|
|
|
op-new.o \
|
2012-12-05 19:29:20 +01:00
|
|
|
panic.o \
|
2013-06-01 13:24:27 +02:00
|
|
|
partition.o \
|
2012-12-05 19:29:20 +01:00
|
|
|
pci.o \
|
|
|
|
pipe.o \
|
2012-12-29 23:09:09 +01:00
|
|
|
poll.o \
|
2012-12-05 19:29:20 +01:00
|
|
|
process.o \
|
|
|
|
refcount.o \
|
2013-08-30 17:35:30 +02:00
|
|
|
resource.o \
|
2012-12-05 19:29:20 +01:00
|
|
|
scheduler.o \
|
2013-08-20 02:23:53 +02:00
|
|
|
segment.o \
|
2012-12-05 19:29:20 +01:00
|
|
|
signal.o \
|
|
|
|
string.o \
|
2013-05-20 15:53:33 +02:00
|
|
|
symbol.o \
|
2012-12-05 19:29:20 +01:00
|
|
|
syscall.o \
|
|
|
|
textbuffer.o \
|
|
|
|
textterminal.o \
|
|
|
|
thread.o \
|
|
|
|
time.o \
|
2013-10-13 23:56:58 +02:00
|
|
|
timer.o \
|
2012-12-05 19:29:20 +01:00
|
|
|
uart.o \
|
2013-10-13 23:56:58 +02:00
|
|
|
user-timer.o \
|
2012-12-05 19:29:20 +01:00
|
|
|
vga.o \
|
|
|
|
vgatextbuffer.o \
|
|
|
|
video.o \
|
2012-08-08 00:19:44 +02:00
|
|
|
vnode.o \
|
2012-12-05 19:29:20 +01:00
|
|
|
worker.o \
|
2011-09-06 19:51:47 +02:00
|
|
|
|
2012-09-10 23:36:15 +02:00
|
|
|
ALLOBJS=\
|
2013-10-18 22:28:29 +02:00
|
|
|
$(CRTI_OBJ) \
|
2012-09-10 23:36:15 +02:00
|
|
|
$(OBJS) \
|
2013-10-18 22:28:29 +02:00
|
|
|
$(CRTN_OBJ) \
|
2012-09-10 23:36:15 +02:00
|
|
|
end.o
|
2011-08-05 14:25:00 +02:00
|
|
|
|
2013-10-18 22:28:29 +02:00
|
|
|
LINK_OBJECTS=\
|
|
|
|
$(CRTI_OBJ) $(CRTBEGIN_OBJ) $(OBJS) $(LIBS) $(CRTN_OBJ) $(CRTEND_OBJ) end.o
|
|
|
|
|
2013-03-19 23:28:32 +01:00
|
|
|
# Rules and recipes for building the kernel.
|
2011-08-05 14:25:00 +02:00
|
|
|
|
2013-03-19 23:28:32 +01:00
|
|
|
all: kernel
|
|
|
|
|
|
|
|
kernel: sortix.bin
|
|
|
|
|
|
|
|
.PHONY: all kernel headers clean install install-include-dirs install-headers \
|
|
|
|
install-kernel install-kernel-binary
|
2012-09-10 21:45:38 +02:00
|
|
|
|
|
|
|
headers:
|
|
|
|
|
2011-08-05 14:25:00 +02:00
|
|
|
# x64 compilation
|
2013-03-19 23:28:32 +01:00
|
|
|
ifeq ($(CPU),x64)
|
2011-08-05 14:25:00 +02:00
|
|
|
|
2013-03-19 23:28:32 +01:00
|
|
|
sortix-x86_64.bin: $(ALLOBJS)
|
2013-10-18 22:28:29 +02:00
|
|
|
$(HOSTCXX) $(CXXFLAGS) -Wl,-Ttext -Wl,100000 -Wl,-z -Wl,max-page-size=0x1000 $(LINK_OBJECTS) -o $@
|
2011-08-05 14:25:00 +02:00
|
|
|
|
2013-03-19 23:28:32 +01:00
|
|
|
sortix.bin: sortix-x86_64.bin
|
|
|
|
$(HOSTOBJCOPY) $< -O elf32-i386-sortix $@
|
|
|
|
|
|
|
|
endif
|
2011-08-05 14:25:00 +02:00
|
|
|
|
2013-03-19 23:28:32 +01:00
|
|
|
# x86 compilation
|
|
|
|
ifeq ($(CPU),x86)
|
2011-08-05 14:25:00 +02:00
|
|
|
|
2013-03-19 23:28:32 +01:00
|
|
|
sortix.bin: $(ALLOBJS)
|
2013-10-18 22:28:29 +02:00
|
|
|
$(HOSTCXX) $(CXXFLAGS) -Wl,-Ttext -Wl,100000 $(LINK_OBJECTS) -o $@
|
2011-08-05 14:25:00 +02:00
|
|
|
|
2013-03-19 23:28:32 +01:00
|
|
|
endif
|
2011-08-05 14:25:00 +02:00
|
|
|
|
|
|
|
%.o: %.cpp
|
2012-09-10 23:36:15 +02:00
|
|
|
$(HOSTCXX) -c $< -o $@ $(CPPFLAGS) $(CXXFLAGS)
|
2011-08-05 14:25:00 +02:00
|
|
|
|
2013-12-28 21:00:15 +01:00
|
|
|
%.o: %.S
|
|
|
|
$(HOSTCXX) -c $< -o $@ $(CPPFLAGS) $(CXXFLAGS)
|
2011-08-05 14:25:00 +02:00
|
|
|
|
|
|
|
clean:
|
2013-03-19 23:28:32 +01:00
|
|
|
rm -f $(ALLOBJS) sortix.bin
|
|
|
|
rm -f $(wildcard *.bin) $(wildcard *.out) $(wildcard *.tmp)
|
|
|
|
rm -f $(wildcard *.o) $(wildcard */*.o) $(wildcard */*/*.o)
|
2011-08-05 14:25:00 +02:00
|
|
|
|
2011-09-15 22:38:40 +02:00
|
|
|
# Installation into sysroot
|
2012-09-10 23:36:15 +02:00
|
|
|
install: install-headers install-kernel
|
2012-09-10 21:45:38 +02:00
|
|
|
|
|
|
|
install-include-dirs: headers
|
2013-03-19 23:28:32 +01:00
|
|
|
mkdir -p $(DESTDIR)$(INCLUDEDIR)
|
2012-09-10 21:45:38 +02:00
|
|
|
|
|
|
|
install-headers: install-include-dirs headers
|
2013-03-19 23:28:32 +01:00
|
|
|
cp -RTv include $(DESTDIR)$(INCLUDEDIR)
|
2011-08-05 14:25:00 +02:00
|
|
|
|
2012-09-10 23:36:15 +02:00
|
|
|
install-kernel: install-kernel-binary
|
|
|
|
|
2013-03-19 23:28:32 +01:00
|
|
|
install-kernel-binary: sortix.bin
|
|
|
|
mkdir -p $(DESTDIR)$(BOOTDIR)/$(HOST)
|
|
|
|
cp sortix.bin $(DESTDIR)$(BOOTDIR)/$(HOST)
|
2012-09-10 23:36:15 +02:00
|
|
|
|