BarryServer : Git

All the code for all my projects
// BarryServer : Git / Nucleus / blob / master / Makefile

// Related

Nucleus

Barry Preemptive and lockless scheduler a1eaf26 (3 years, 1 month ago)
PRODUCT=nucleus

CC=i686-orion-gcc
CFLAGS=-Iinclude/

AS=i686-orion-as
AFLAGS=

LD=i686-orion-gcc
LFLAGS=-T linker.ld -ffreestanding -nostdlib

AS_SRC := $(shell find . -name '*.S')
OBJS = $(sort $(subst ./,build/,$(subst .S,.o,$(AS_SRC))))

C_SRC := $(shell find . -name '*.c')
OBJS += $(sort $(subst ./,build/,$(subst .c,.o,$(C_SRC))))

.PHONY: install-headers clean all install

all: $(PRODUCT)

clean:
	$(info Removing object files)
	@mkdir -p build
	@rm -rf build
	@touch $(PRODUCT)
	@rm $(PRODUCT)

install-headers:
	$(info INSTALL KERNEL HEADERS)
	@mkdir -p ${SYSROOT}/usr/include/
	@cp -r include/* ${SYSROOT}/usr/include/

install: $(PRODUCT)
	$(info INSTALL $^)
	@install -Dm 755 $(PRODUCT) -t ${SYSROOT}/boot/

$(PRODUCT): $(OBJS)
	$(info LD $@)
	@$(LD) -o $@ $^ $(LFLAGS)

build/%.o: %.c
	$(info CC $<)
	@mkdir -p $(@D)
	@$(CC) -c $< -o $@ $(CFLAGS)

build/%.o: %.S
	$(info AS $<)
	@mkdir -p $(@D)
	@$(AS) -c $< -o $@ $(AFLAGS)

# Overrides
build/lib/object/%.o: lib/object/%.c
	$(info CC $<)
	@mkdir -p $(@D)
	@$(CC) -c $< -o $@ $(CFLAGS) -O3