karlos/Makefile

107 lines
2.3 KiB
Makefile

# This build script uses some GNU make specific extensions.
include config.mk
CFLAGS += -ggdb
# flag to check if we correctly initialized submodules before we use them
CFLAGS += -DINIT_ASSERTED
# Kernel sources which are specific to the x86_64 architecture.
# Add new source files (C or Assembler) here,
# preferentially in alphabetical order.
KERNEL_SOURCES_x86_64 := \
src/x86_64/apic.c \
src/x86_64/cmos.c \
src/x86_64/interrupt.S \
src/x86_64/loadcs.S \
src/x86_64/uart.c \
src/x86_64/string.S \
src/x86_64/cpu.c \
src/x86_64/paging.c \
src/x86_64/asm.c \
src/x86_64/address.c \
src/x86_64/ps2_driver.c \
src/x86_64/hwclock.c \
# end of x86_64 specific kernel sources list
# Architecture-agnostic kernel sources.
# Add new source files (C or Assembler) here,
# preferentially in alphabetical order.
KERNEL_SOURCES := \
src/acpi.c \
src/console.c \
src/framebuffer.c \
src/kernel.c \
src/pci.c \
src/ram.c \
src/tar.c \
src/time.c \
src/std.c \
src/slab.c \
src/nodevec.c \
src/sata.c \
src/sff.c \
src/snake.c \
src/window.c \
src/keyboard.c \
src/unicode.c \
src/interpreter.c \
$(KERNEL_SOURCES_$(ARCH)) \
# end of kernel sources list
KERNEL_OBJECTS := $(KERNEL_SOURCES:.c=.o)
KERNEL_OBJECTS := $(KERNEL_OBJECTS:.S=.o)
KERNEL_OBJECTS := $(KERNEL_OBJECTS:%.o=build/%.o)
KERNEL_DEPFILES := $(KERNEL_OBJECTS:.o=.d)
KERNEL_TARGET := build/boot/sys/core
.PHONY: all clean
all: build/disk.img drive.img
drive.img:
truncate -s 16M drive.img
clean:
rm -f $(KERNEL_OBJECTS)
rm -f $(KERNEL_DEPFILES)
rm -f $(KERNEL_TARGET)
build/src/%.o: src/%.[cS] | build/src
@printf "CC %s\n" $@
@"$(CC)" $(CFLAGS) -MMD -MP -c -o $@ $< $(CPPFLAGS)
build/src/$(ARCH)/%.o: src/$(ARCH)/%.[cS] | build/src/$(ARCH)
@printf "CC %s\n" $@
@"$(CC)" $(CFLAGS) -MMD -MP -c -o $@ $< $(CPPFLAGS)
$(KERNEL_TARGET): $(KERNEL_OBJECTS) kernel.ld | build/boot/sys
@printf "LD %s\n" $@
@"$(LD)" -T kernel.ld $(LDFLAGS) -o $@ $(KERNEL_OBJECTS)
build/disk.img: $(KERNEL_TARGET) kernel.json bootboot.cfg build/boot/font.sff
$(MKBOOTIMG) kernel.json $@
build:
mkdir -p $@
build/src:
mkdir -p $@
build/boot:
mkdir -p $@
build/boot/font.sff: font.sff build/boot
@printf "CP %s\n" $@
@cp $< $@
build/src/$(ARCH):
mkdir -p $@
build/boot/sys:
mkdir -p $@
config.mk: | config.default.mk
cp config.default.mk $@
-include $(KERNEL_DEPFILES)