166 lines
4 KiB
Makefile
166 lines
4 KiB
Makefile
# This build script uses some GNU make specific extensions.
|
|
|
|
include config.mk
|
|
|
|
CFLAGS += -Wall -Wextra -ggdb3 -O0
|
|
# 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/cmos.c \
|
|
src/x86_64/interrupt.S \
|
|
src/x86_64/lapic.c \
|
|
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 \
|
|
src/x86_64/ioapic.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/kernmsg.c \
|
|
src/bootparam.c \
|
|
src/framebuffer.c \
|
|
src/kernel.c \
|
|
src/mouse.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/keyboard.c \
|
|
src/unicode.c \
|
|
src/sync.c \
|
|
src/mem_range.c \
|
|
src/rect.c \
|
|
src/texture.c \
|
|
src/stack_protector.c \
|
|
src/qoi.c \
|
|
src/app.c \
|
|
src/widget.c \
|
|
src/app_calculator.c \
|
|
src/app_diskviewer.c \
|
|
src/app_hexer.c \
|
|
src/app_kernmsg.c \
|
|
src/app_snake.c \
|
|
src/app_tron.c \
|
|
src/app_paint.c \
|
|
src/font.c \
|
|
src/karlos-logo.c \
|
|
src/tlsf.c \
|
|
src/virtio-common.c \
|
|
src/virtio-block.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-virtio.img
|
|
|
|
drive.img:
|
|
truncate -s 16M $@
|
|
|
|
drive-virtio.img:
|
|
echo "Hello World!" > a.txt
|
|
echo "Goodbye World!" > b.txt
|
|
tar --format=v7 -cvf $@ a.txt b.txt
|
|
truncate -s 16M $@
|
|
rm a.txt
|
|
rm b.txt
|
|
|
|
clean:
|
|
rm -rf build/*
|
|
|
|
TEST_MEM_RANGE_DEPS=build/src/test.o build/src/mem_range.o
|
|
build/tests/test_mem_range: tests/test_mem_range.c $(TEST_MEM_RANGE_DEPS) build/tests
|
|
@printf "CC %s\n" $@
|
|
@"$(CC)" $(CFLAGS) -c -o $@.o $< $(CPPFLAGS)
|
|
@"$(CC)" -o $@ $@.o $(TEST_MEM_RANGE_DEPS)
|
|
|
|
TEST_TEX_DEPS=build/src/test.o build/src/rect.o build/src/texture.o
|
|
build/tests/test_tex: tests/test_tex.c $(TEST_TEX_DEPS) build/tests
|
|
@printf "CC %s\n" $@
|
|
@"$(CC)" $(CFLAGS) -c -o $@.o $< $(CPPFLAGS)
|
|
@"$(CC)" -o $@ $@.o $(TEST_TEX_DEPS)
|
|
|
|
TEST_TLSF_DEPS=build/src/test.o build/src/tlsf.o build/src/mem_range.o
|
|
build/tests/test_tlsf: tests/test_tlsf.c $(TEST_TLSF_DEPS) build/tests
|
|
@printf "CC %s\n" $@
|
|
@"$(CC)" $(CFLAGS) -c -o $@.o $< $(CPPFLAGS)
|
|
@"$(CC)" -o $@ $@.o $(TEST_TLSF_DEPS)
|
|
|
|
TEST_SLAB_DEPS=build/src/test.o build/src/x86_64/address.o build/src/slab.o
|
|
build/tests/test_slab: tests/test_slab.c $(TEST_SLAB_DEPS) build/tests
|
|
@printf "CC %s\n" $@
|
|
@"$(CC)" $(CFLAGS) -c -o $@.o $< $(CPPFLAGS)
|
|
@"$(CC)" -o $@ $@.o $(TEST_SLAB_DEPS)
|
|
|
|
build/tests:
|
|
mkdir -p $@
|
|
|
|
build/src/%.o: src/%.[cS] | build/src build/src/small3dlib
|
|
@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)
|
|
|
|
RESOURCES = $(wildcard res/*)
|
|
RESOURCES_DST = $(patsubst res/%,build/boot/%,$(RESOURCES))
|
|
build/disk.img: $(KERNEL_TARGET) kernel.json bootparam.cfg build/boot/ $(RESOURCES_DST)
|
|
$(MKBOOTIMG) kernel.json $@
|
|
|
|
build:
|
|
mkdir -p $@
|
|
|
|
build/src:
|
|
mkdir -p $@
|
|
|
|
build/src/small3dlib:
|
|
mkdir -p $@
|
|
|
|
build/boot:
|
|
mkdir -p $@
|
|
|
|
build/src/$(ARCH):
|
|
mkdir -p $@
|
|
|
|
build/boot/sys:
|
|
mkdir -p $@
|
|
|
|
# various resources (fonts, images, ... go into initrd)
|
|
build/boot/%: res/% build/boot
|
|
@printf "CP %s\n" $@
|
|
@cp $< $@
|
|
|
|
config.mk: | config.default.mk
|
|
cp config.default.mk $@
|
|
|
|
-include $(KERNEL_DEPFILES)
|