CeDOS - makefile

makefile (view raw)

.RECIPEPREFIX = >

export CURRENT_DIR		= $(shell pwd)
export INCLUDE_DIR		= $(CURRENT_DIR)/include
export DEBUG_DIR		= $(CURRENT_DIR)/debug

export GCC_PREFIX		= $(HOME)/opt/cross/bin/i686-elf-

ifdef DEBUG
GLOBAL_BUILD		= $(CURRENT_DIR)/build/debug
GCC_OPTIONS		= -D DEBUG -g -O0 -Wno-write-strings -Qn -Wall -Wextra -fno-exceptions -nostdlib -nostartfiles -ffreestanding -mgeneral-regs-only
else
GLOBAL_BUILD		= $(CURRENT_DIR)/build/release
GCC_OPTIONS		= -O1 -Wno-write-strings -Qn -Wall -Wextra -fno-exceptions -nostdlib -nostartfiles -ffreestanding -mgeneral-regs-only
endif

export GCC_OPTIONS

LOCAL_BUILD = $(GLOBAL_BUILD)

.PHONY: build
build:
> @mkdir $(GLOBAL_BUILD) 2> /dev/null; true
> $(MAKE) GLOBAL_BUILD=$(LOCAL_BUILD) -C boot build
> $(MAKE) GLOBAL_BUILD=$(LOCAL_BUILD) -C kernel build
> $(GCC_PREFIX)ld $(GLOBAL_BUILD)/*.o -T link.txt -Map=$(DEBUG_DIR)/mapfile.txt -o build/base.o
> $(GCC_PREFIX)objcopy --only-keep-debug build/base.o $(DEBUG_DIR)/base.sym
> $(GCC_PREFIX)objcopy -O binary build/base.o build/base.img

.PHONY: clear
clear:
> @rm -r $(CURRENT_DIR)/build/* 2> /dev/null; true

.PHONY: run
run:
> ./run.sh

.PHONY: debug
debug:
> $(MAKE) DEBUG=1 build

.PHONY: docs
docs:
> doxygen doxygen.cfg