2011-11-28 09:25:00 -05:00
|
|
|
ifndef O
|
|
|
|
O:=-O3
|
|
|
|
endif
|
|
|
|
|
2011-08-05 08:25:00 -04:00
|
|
|
ifndef CPU
|
|
|
|
CPU=x86
|
|
|
|
endif
|
|
|
|
|
|
|
|
ifeq ($(CPU),x86)
|
2011-09-08 05:10:41 -04:00
|
|
|
BUILDID=x86
|
|
|
|
X86FAMILY=1
|
2011-08-05 08:25:00 -04:00
|
|
|
CPUDEFINES=-DPLATFORM_X86
|
|
|
|
CPUFLAGS=-m32
|
|
|
|
CPULDFLAGS=-melf_i386
|
|
|
|
CPUASFLAGS=-32
|
|
|
|
CPUNASMFLAGS=-felf32
|
|
|
|
CPUOBJS=$(CPU)/boot.o $(CPU)/base.o $(CPU)/x86.o
|
|
|
|
endif
|
|
|
|
|
|
|
|
ifeq ($(CPU),x64)
|
2011-09-08 05:10:41 -04:00
|
|
|
BUILDID=x64
|
|
|
|
X86FAMILY=1
|
2011-08-05 08:25:00 -04:00
|
|
|
CPUDEFINES=-DPLATFORM_X64
|
|
|
|
CPUFLAGS=-m64 -ffreestanding -mcmodel=large -mno-red-zone
|
|
|
|
CPULDFLAGS=-melf64-little -z max-page-size=0x1000
|
|
|
|
CPUASFLAGS=-64
|
|
|
|
CPUNASMFLAGS=-felf64
|
|
|
|
CPUOBJS=$(CPU)/base.o $(CPU)/x64.o
|
|
|
|
endif
|
|
|
|
|
|
|
|
ifdef X86FAMILY
|
|
|
|
CPUOBJS:=$(CPUOBJS) \
|
2011-10-02 09:58:08 -04:00
|
|
|
$(CPU)/memorymanagement.o \
|
|
|
|
x86-family/memorymanagement.o \
|
2011-08-05 08:25:00 -04:00
|
|
|
$(CPU)/interrupt.o \
|
2011-08-12 11:17:02 -04:00
|
|
|
$(CPU)/gdt.o \
|
2011-10-26 18:05:20 -04:00
|
|
|
$(CPU)/syscall.o \
|
2011-09-21 14:52:29 -04:00
|
|
|
$(CPU)/thread.o \
|
|
|
|
$(CPU)/scheduler.o \
|
2011-08-12 11:17:02 -04:00
|
|
|
x86-family/x86-family.o
|
2011-08-05 08:25:00 -04:00
|
|
|
CPUFLAGS:=$(CPUFLAGS) -mno-mmx -mno-sse -mno-sse2 -mno-sse3 -mno-3dnow
|
|
|
|
endif
|
|
|
|
|
2011-11-18 19:08:51 -05:00
|
|
|
DIRS=. x64 x86 x86-family fs
|
2011-08-05 08:25:00 -04:00
|
|
|
|
|
|
|
DEFINES:=-DSORTIX_KERNEL $(CPUDEFINES)
|
2011-09-08 05:10:41 -04:00
|
|
|
ifeq ($(JSSORTIX),1)
|
|
|
|
DEFINES:=$(DEFINES) -DPLATFORM_SERIAL -DJSSORTIX
|
|
|
|
BUILDID:=$(BUILDID)-js
|
|
|
|
endif
|
2011-11-28 09:25:00 -05:00
|
|
|
ifeq ($(PANIC_SHORT),1)
|
|
|
|
DEFINES:=$(DEFINES) -DPANIC_SHORT
|
|
|
|
endif
|
|
|
|
CPPFLAGSRELEASE=-s $(O)
|
2011-08-05 08:25:00 -04:00
|
|
|
CPPFLAGSDEBUG=
|
2011-08-12 11:17:02 -04:00
|
|
|
CPPFLAGS=-I.. -I. $(CPUDEFINES) $(CPUFLAGS) -std=gnu++0x -Wall -Wextra -nostdlib -fno-builtin -nostartfiles -nodefaultlibs -fno-exceptions -fno-rtti -fno-stack-protector $(DEFINES) $(CPPFLAGSRELEASE)
|
2011-09-06 13:51:47 -04:00
|
|
|
OBJS=$(CPUOBJS) \
|
|
|
|
kernel.o \
|
|
|
|
descriptor_tables.o \
|
2011-09-07 12:45:07 -04:00
|
|
|
interrupt.o \
|
2011-09-06 13:51:47 -04:00
|
|
|
time.o \
|
|
|
|
log.o \
|
|
|
|
panic.o \
|
|
|
|
keyboard.o \
|
|
|
|
scheduler.o \
|
|
|
|
syscall.o \
|
|
|
|
sound.o \
|
|
|
|
pci.o \
|
|
|
|
uart.o \
|
|
|
|
vgaterminal.o \
|
|
|
|
serialterminal.o \
|
|
|
|
descriptors.o \
|
|
|
|
device.o \
|
|
|
|
vga.o \
|
|
|
|
elf.o \
|
|
|
|
process.o \
|
|
|
|
initrd.o \
|
2011-11-07 08:36:35 -05:00
|
|
|
thread.o \
|
2011-11-16 02:37:29 -05:00
|
|
|
io.o \
|
|
|
|
pipe.o \
|
2011-11-17 17:31:41 -05:00
|
|
|
filesystem.o \
|
2011-11-20 18:02:53 -05:00
|
|
|
directory.o \
|
2011-11-17 17:31:41 -05:00
|
|
|
mount.o \
|
2011-09-15 16:38:40 -04:00
|
|
|
signal.o \
|
2011-11-21 15:49:13 -05:00
|
|
|
fs/devfs.o \
|
2011-11-20 10:25:32 -05:00
|
|
|
fs/initfs.o \
|
2011-11-18 11:49:31 -05:00
|
|
|
fs/ramfs.o \
|
2011-09-15 16:38:40 -04:00
|
|
|
../libmaxsi/libmaxsi-sortix.a \
|
2011-09-06 13:51:47 -04:00
|
|
|
|
2011-08-05 08:25:00 -04:00
|
|
|
JSOBJS:=$(subst .o,-js.o,$(OBJS))
|
|
|
|
|
|
|
|
all: sortix.bin
|
|
|
|
|
|
|
|
# jssortix compilation
|
|
|
|
|
|
|
|
jssortix: jssortix.bin
|
|
|
|
|
2011-09-08 05:10:41 -04:00
|
|
|
sortix-x86-js.tmp: $(OBJS)
|
|
|
|
ld -melf_i386 -Ttext 100000 -o sortix-x86-js-internal.out $(OBJS)
|
|
|
|
objcopy -O binary sortix-x86-js-internal.out $@
|
2011-08-05 08:25:00 -04:00
|
|
|
|
|
|
|
# x64 compilation
|
|
|
|
x64/boot.o: x64/boot.s
|
|
|
|
as -32 $< -o $@
|
|
|
|
|
|
|
|
sortix-x64.tmp: $(OBJS) x64/boot.o
|
|
|
|
ld -N -melf_x86_64 -Ttext 110000 -o sortix-x64-internal.out $(OBJS)
|
|
|
|
objcopy -O binary sortix-x64-internal.out sortix-x64-internal.tmp
|
|
|
|
objcopy --add-section kernel64=sortix-x64-internal.tmp \
|
|
|
|
--set-section-flag kernel64=alloc,data,load,contents \
|
|
|
|
$(CPU)/boot.o
|
|
|
|
ld -melf_i386 -Ttext 100000 $(CPU)/boot.o -o $@
|
|
|
|
# move section to 0x11000
|
|
|
|
objcopy --change-section-address kernel64=1114112 $@
|
|
|
|
|
|
|
|
# x86 compilation
|
|
|
|
|
|
|
|
sortix-x86.tmp: $(OBJS)
|
|
|
|
ld -melf_i386 -Ttext 100000 -o $@ $(OBJS)
|
|
|
|
|
|
|
|
# general rules
|
|
|
|
|
2011-09-08 05:10:41 -04:00
|
|
|
sortix.bin: sortix-$(BUILDID).tmp
|
2011-08-05 08:25:00 -04:00
|
|
|
cp -vu $< $@
|
|
|
|
|
|
|
|
%.o: %.cpp
|
|
|
|
g++ -c $< -o $@ $(CPPFLAGS)
|
|
|
|
|
|
|
|
%.o: %.s
|
|
|
|
as $(CPUASFLAGS) $< -o $@
|
|
|
|
|
|
|
|
%.o: %.asm
|
|
|
|
nasm $(CPUNASMFLAGS) $< -o $@
|
|
|
|
|
|
|
|
clean:
|
|
|
|
for D in $(DIRS); do rm -fv $$D/*.o $$D/*.bin $$D/*.out $$D/*.tmp; done
|
|
|
|
|
2011-09-15 16:38:40 -04:00
|
|
|
# Installation into sysroot
|
|
|
|
install:
|
|
|
|
mkdir -p $(SYSROOT)/usr/include/sortix
|
|
|
|
cp $(CPU)/bits.h $(SYSROOT)/usr/include/sortix/bits.h
|
2011-08-05 08:25:00 -04:00
|
|
|
|