2011-02-20 22:38:15 +00:00
|
|
|
# I hate GNU Make
|
|
|
|
#
|
|
|
|
# Seriously.
|
|
|
|
#
|
|
|
|
# Fuck M4. I do this because it's probably the most portable way, and I don't
|
2011-06-27 15:59:54 +00:00
|
|
|
# want to write Yet Another Compile System because fuck that shit. I could
|
2011-02-20 22:38:15 +00:00
|
|
|
# use cmake but I don't know whether it is flexible enough. It probably is
|
|
|
|
# but whatever. I wrote this piece of shit below, let's just keep it that
|
|
|
|
# way. There are better way to do the hthings I do below, but who gives a
|
|
|
|
# shit.
|
|
|
|
|
2011-02-21 11:23:58 +00:00
|
|
|
default: emulate-nohdd
|
2011-02-20 22:38:15 +00:00
|
|
|
|
|
|
|
SHELL:=/bin/bash
|
|
|
|
ENV:=/usr/xdev/bin
|
2011-12-06 12:50:15 +00:00
|
|
|
TARGET:=x86_64-elf
|
2011-02-20 22:38:15 +00:00
|
|
|
CC:=$(ENV)/$(TARGET)-gcc
|
|
|
|
CX:=$(ENV)/$(TARGET)-g++
|
|
|
|
AS:=nasm
|
|
|
|
LD:=$(ENV)/$(TARGET)-ld
|
|
|
|
|
2011-04-04 09:58:52 +00:00
|
|
|
# -O2 sets -foptimize-sibling-calls which breaks code...
|
2011-06-28 11:15:42 +00:00
|
|
|
CFLAGS:=-m64 -mcmodel=large -Wall -Werror -nostdlib -nostartfiles -nodefaultlibs -std=c99 -g
|
2012-07-20 22:39:36 +00:00
|
|
|
CFLAGS+=-I ./include -Wno-packed-bitfield-compat -O2 -fno-optimize-sibling-calls -mcmodel=kernel
|
2012-09-21 10:45:46 +00:00
|
|
|
CFLAGS+= -mno-red-zone -ffreestanding -I ./include/Lua -I ./src/Lua
|
2011-04-04 09:58:52 +00:00
|
|
|
|
2012-10-01 13:03:10 +00:00
|
|
|
#CXFLAGS:= -Wall -Werror -nostdlib -fno-builtin -nostartfiles -I ./include
|
|
|
|
#CXFLAGS+= -nodefaultlibs -fno-exceptions -fno-rtti -fno-stack-protector
|
|
|
|
#CXFLAGS+= -Wno-packed-bitfield-compat -O3 -mcmodel=kernel
|
|
|
|
|
|
|
|
CXFLAGS:=-m64 -mcmodel=large -Wall -Werror -nostdlib -nostartfiles -nodefaultlibs -g
|
|
|
|
CXFLAGS+=-I ./include -Wno-packed-bitfield-compat -O2 -fno-optimize-sibling-calls -mcmodel=kernel
|
|
|
|
CXFLAGS+= -mno-red-zone -ffreestanding -I ./include/Lua -I ./src/Lua -fno-exceptions -fno-rtti
|
2013-03-01 18:07:44 +00:00
|
|
|
CXFLAGS+= -fno-stack-protector -std=c++11
|
2012-10-01 13:03:10 +00:00
|
|
|
|
2011-02-20 22:38:15 +00:00
|
|
|
LFLAGS:=-nostdlib -nostartfiles -nodefaultlibs
|
|
|
|
|
2013-02-03 13:38:48 +00:00
|
|
|
debug: CFLAGS += -DDEBUG -gdwarf-4 -fvar-tracking-assignments -O0
|
|
|
|
debug: CXFLAGS += -DDEBUG -gdwarf-4 -fvar-tracking-assignments -O0
|
|
|
|
debug: kernel.bin
|
|
|
|
|
|
|
|
.PHONY: all clean emulate hdd.img debug
|
2011-02-20 22:38:15 +00:00
|
|
|
|
|
|
|
obj/src/%.nao : src/%.asm
|
|
|
|
@echo "[i] Assembling $*.asm..."
|
2011-06-28 11:15:42 +00:00
|
|
|
@$(AS) -f elf64 -o obj/src/$*.nao src/$*.asm
|
2011-02-20 22:38:15 +00:00
|
|
|
|
2012-10-28 13:47:23 +00:00
|
|
|
obj/src/%.lo : src/%.lua
|
|
|
|
@echo "[i] Packing $*.lua..."
|
|
|
|
@contrib/luapack.py src/$*.lua obj/src/$*.lo
|
|
|
|
|
2011-02-20 22:38:15 +00:00
|
|
|
obj/src/%.o : src/%.c
|
2011-02-21 11:23:58 +00:00
|
|
|
@echo "[i] Compiling $*.c ..."
|
2011-06-28 11:15:42 +00:00
|
|
|
@if [ -e obj/src/$*.o ] ; then rm obj/src/$*.o ; fi
|
2011-02-20 22:38:15 +00:00
|
|
|
@mkdir -p obj/src/$*.o
|
|
|
|
@rmdir obj/src/$*.o
|
|
|
|
@$(CC) $(CFLAGS) -c src/$*.c -o obj/src/$*.o
|
2011-08-27 23:07:51 +00:00
|
|
|
|
|
|
|
version-gen:
|
|
|
|
@echo "[i] Generating revision file..."
|
|
|
|
@contrib/rev-gen
|
|
|
|
|
2012-10-28 12:30:00 +00:00
|
|
|
include/Alentours/PCIDB.h:
|
|
|
|
@echo "[i] Downloading pcidatabase.com header file..."
|
|
|
|
@echo "[w] WARNING: Please check include/Alentours/PCIDB.h for possible rootkits and stuff."
|
|
|
|
@curl http://www.pcidatabase.com/pci_c_header.php > include/Alentours/PCIDB.h
|
|
|
|
python2 contrib/fix-pci-db.py
|
|
|
|
|
|
|
|
|
2011-03-14 19:31:10 +00:00
|
|
|
obj/src/%.xo : src/%.cpp
|
|
|
|
@echo "[i] Compiling $*.cpp ..."
|
2011-04-14 19:43:46 +00:00
|
|
|
@if [ -e obj/src/$*.xo ] ; then rm obj/src/$*.xo ; fi
|
2011-03-14 19:31:10 +00:00
|
|
|
@mkdir -p obj/src/$*.xo
|
|
|
|
@rmdir obj/src/$*.xo
|
|
|
|
@$(CX) $(CXFLAGS) -c src/$*.cpp -o obj/src/$*.xo
|
2011-02-20 22:38:15 +00:00
|
|
|
|
|
|
|
TIER0SRC := $(shell find src/Tier0 -mindepth 1 -maxdepth 3 -name "*.c")
|
|
|
|
TIER0SRC += $(shell find src/Tier0 -mindepth 1 -maxdepth 3 -name "*.asm")
|
|
|
|
TIER0OBJ := $(patsubst %.c,%.o,$(TIER0SRC))
|
|
|
|
TIER0OBJ := $(patsubst %.asm,%.nao,$(TIER0OBJ))
|
|
|
|
TIER0 := $(foreach i, $(TIER0OBJ), obj/$(i))
|
|
|
|
Tier0: $(TIER0)
|
|
|
|
|
2012-10-01 13:03:10 +00:00
|
|
|
TIER1SRC := $(shell find src/Tier1 -mindepth 1 -maxdepth 3 -name "*.cpp")
|
|
|
|
TIER1SRC += $(shell find src/Tier1 -mindepth 1 -maxdepth 3 -name "*.asm")
|
|
|
|
TIER1OBJ := $(patsubst %.cpp,%.xo,$(TIER1SRC))
|
|
|
|
TIER1OBJ := $(patsubst %.asm,%.nao,$(TIER1OBJ))
|
|
|
|
TIER1 := $(foreach i, $(TIER1OBJ), obj/$(i))
|
|
|
|
Tier1: $(TIER1)
|
2011-03-14 19:31:10 +00:00
|
|
|
|
2012-10-28 11:24:43 +00:00
|
|
|
ALENTOURSSRC := $(shell find src/Alentours -mindepth 1 -maxdepth 3 -name "*.cpp")
|
|
|
|
ALENTOURSSRC += $(shell find src/Alentours -mindepth 1 -maxdepth 3 -name "*.asm")
|
|
|
|
ALENTOURSOBJ := $(patsubst %.cpp,%.xo,$(ALENTOURSSRC))
|
|
|
|
ALENTOURSOBJ := $(patsubst %.asm,%.nao,$(ALENTOURSOBJ))
|
|
|
|
ALENTOURS := $(foreach i, $(ALENTOURSOBJ), obj/$(i))
|
2012-10-28 12:30:00 +00:00
|
|
|
Alentours: $(ALENTOURS) include/Alentours/PCIDB.h
|
2012-10-28 11:24:43 +00:00
|
|
|
|
2012-08-23 14:11:41 +00:00
|
|
|
src/Lua/liblua.a:
|
|
|
|
@echo "[i] Building Lua..."
|
|
|
|
@make -C src/Lua
|
|
|
|
|
|
|
|
LUA := src/Lua/liblua.a
|
|
|
|
Lua: $(LUA)
|
|
|
|
|
2012-10-28 11:24:43 +00:00
|
|
|
kernel.bin: version-gen Tier0 Tier1 Lua Alentours
|
2011-02-20 22:38:15 +00:00
|
|
|
@echo "[i] Linking kernel.bin..."
|
2012-10-28 11:24:43 +00:00
|
|
|
@$(LD) -T src/kernel.ld -o kernel.bin $(TIER0) $(TIER1) $(ALENTOURS) -Lsrc/Lua -llua
|
2013-02-03 13:38:48 +00:00
|
|
|
@echo "[i] Creating debug symbols."
|
|
|
|
@cp kernel.bin ksyms.elf
|
|
|
|
@strip --only-keep-debug ksyms.elf
|
|
|
|
@strip --strip-debug --strip-unneeded kernel.bin
|
2011-02-20 22:38:15 +00:00
|
|
|
|
|
|
|
hdd.img: kernel.bin
|
|
|
|
@echo "[i] Creating HDD image..."
|
|
|
|
@if [ -e hdd_temp.img ] ; then rm hdd_temp.img ; fi
|
2011-02-21 11:23:58 +00:00
|
|
|
@dd if=/dev/zero of=hdd_temp.img bs=512 count=10240 2> /dev/null
|
|
|
|
@mkfs.vfat hdd_temp.img
|
2011-02-20 22:38:15 +00:00
|
|
|
@syslinux hdd_temp.img
|
|
|
|
@mcopy -i hdd_temp.img /usr/lib/syslinux/mboot.c32 ::mboot.c32
|
|
|
|
@mcopy -i hdd_temp.img kernel.bin ::kernel.bin
|
|
|
|
@mcopy -i hdd_temp.img dst/syslinux.cfg ::syslinux.cfg
|
|
|
|
@mv hdd_temp.img hdd.img
|
|
|
|
|
2013-02-03 13:38:48 +00:00
|
|
|
emulate-nohdd-debug: debug
|
2011-02-21 16:29:53 +00:00
|
|
|
@echo "[i] Starting GDB..."
|
2013-02-03 13:38:48 +00:00
|
|
|
@echo -e "file kernel.bin\nsymbol-file ksyms.elf\ntarget remote localhost:1234\n" > gdbcommands
|
|
|
|
@terminal -x /bin/bash -c "sleep 1 && gdb -tui -x gdbcommands && rm gdbcommands" &
|
2011-02-21 11:23:58 +00:00
|
|
|
@echo "[i] Starting QEmu..."
|
2012-10-28 09:25:08 +00:00
|
|
|
@qemu-system-x86_64 --no-kvm -S -gdb tcp::1234 -d int -smp 4 -kernel ../Loader/loader.bin -initrd kernel.bin
|
2011-02-21 16:29:53 +00:00
|
|
|
|
|
|
|
emulate-nohdd: kernel.bin
|
2011-06-28 11:15:42 +00:00
|
|
|
@echo "[i] Building loader..."
|
|
|
|
@pushd ../Loader > /dev/null && $(MAKE) -f Makefile loader.bin && popd > /dev/null
|
2011-02-21 16:29:53 +00:00
|
|
|
@echo "[i] Starting QEMU..."
|
2012-10-28 09:25:08 +00:00
|
|
|
@qemu-system-x86_64 --no-kvm -d int -smp 4 -kernel ../Loader/loader.bin -initrd kernel.bin
|
2011-02-21 11:23:58 +00:00
|
|
|
|
2011-02-20 22:38:15 +00:00
|
|
|
emulate: hdd.img
|
|
|
|
@echo "[i] Starting QEmu..."
|
|
|
|
@qemu -hda hdd.img
|
|
|
|
|
|
|
|
clean:
|
|
|
|
@rm -Rf obj
|
2012-08-23 14:11:41 +00:00
|
|
|
@make -C src/Lua clean
|
2011-02-20 22:38:15 +00:00
|
|
|
@if [ -e kernel.bin ] ; then rm kernel.bin ; fi
|
|
|
|
@if [ -e hdd_temp.img ] ; then rm hdd_temp.img ; fi
|
2013-02-03 14:42:40 +00:00
|
|
|
@if [ -e hdd.img ] ; then rm hdd.img; fi
|