Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 12 additions & 27 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,21 +1,4 @@
ARCH ?= aarch64-none-elf
CC := $(ARCH)-gcc
LD := $(ARCH)-ld
AR := $(ARCH)-ar
OBJCOPY := $(ARCH)-objcopy

CFLAGS_BASE ?= -g -O0 -nostdlib -ffreestanding \
-fno-exceptions -fno-unwind-tables -fno-asynchronous-unwind-tables \
-Wall -Wextra -Wno-unused-parameter -Wno-address-of-packed-member -mcpu=cortex-a72
CONLY_FLAGS_BASE ?= -std=c17
LDFLAGS_BASE ?=

LOAD_ADDR ?= 0x41000000
XHCI_CTX_SIZE ?= 32
QEMU ?= true
MODE ?= virt

export ARCH CC LD AR OBJCOPY CFLAGS_BASE CONLY_FLAGS_BASE LDFLAGS_BASE LOAD_ADDR XHCI_CTX_SIZE QEMU
include common.mk

OS := $(shell uname)
FS_DIRS := fs/redos/user
Expand All @@ -42,13 +25,13 @@ kernel:
$(MAKE) -C kernel LOAD_ADDR=$(LOAD_ADDR) XHCI_CTX_SIZE=$(XHCI_CTX_SIZE) QEMU=$(QEMU)

clean:
$(MAKE) -C shared clean
$(MAKE) -C user clean
$(MAKE) -C kernel clean
$(MAKE) -C shared $@
$(MAKE) -C user $@
$(MAKE) -C kernel $@
@echo "removing fs dirs"
rm -rf $(FS_DIRS)
$(RM) -r $(FS_DIRS)
@echo "removing images"
rm -f kernel.img kernel.elf disk.img dump
$(RM) kernel.img kernel.elf disk.img dump

raspi:
$(MAKE) LOAD_ADDR=0x80000 XHCI_CTX_SIZE=64 QEMU=true all
Expand All @@ -63,11 +46,11 @@ run:
debug:
$(MAKE) $(MODE)
./rundebug MODE=$(MODE) $(ARGS)

dump:
$(OBJCOPY) -O binary kernel.elf kernel.img
aarch64-none-elf-objdump -D kernel.elf > dump
$(ARCH)-objdump -D kernel.elf > dump

install:
$(MAKE) clean
$(MAKE) LOAD_ADDR=0x80000 XHCI_CTX_SIZE=64 QEMU=false all
Expand All @@ -89,4 +72,6 @@ help:
make debug build and run with debugger\n\
make dump disassemble kernel.elf\n\
make install create raspi kernel and mount it on a bootable partition\n\
make prepare-fs create directories for the filesystem\n\n"
make prepare-fs create directories for the filesystem\n\n"\
\n\
Use 'make V=1' for verbose build output.
34 changes: 34 additions & 0 deletions common.mk
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
ARCH ?= aarch64-none-elf
CC := $(ARCH)-gcc
CXX := $(ARCH)-g++
LD := $(ARCH)-ld
AR := $(ARCH)-ar
OBJCOPY := $(ARCH)-objcopy

COMMON_FLAGS ?= -ffreestanding -nostdlib -fno-exceptions -fno-unwind-tables \
-fno-asynchronous-unwind-tables -g -O0 -Wall -Wextra \
-Wno-unused-parameter -Wno-address-of-packed-member \
-mcpu=cortex-a72

CFLAGS_BASE ?= $(COMMON_FLAGS) -std=c17
CXXFLAGS_BASE ?= $(COMMON_FLAGS) -fno-rtti
LDFLAGS_BASE ?=

LOAD_ADDR ?= 0x41000000
XHCI_CTX_SIZE ?= 32
QEMU ?= true
MODE ?= virt

ifeq ($(V), 1)
VAR = $(AR)
VAS = $(CC)
VCC = $(CC)
VCXX = $(CXX)
VLD = $(LD)
else
VAR = @echo " [AR] $@" && $(AR)
VAS = @echo " [AS] $@" && $(CC)
VCC = @echo " [CC] $@" && $(CC)
VCXX = @echo " [CXX] $@" && $(CXX)
VLD = @echo " [LD] $@" && $(LD)
endif
23 changes: 15 additions & 8 deletions kernel/Makefile
Original file line number Diff line number Diff line change
@@ -1,12 +1,17 @@
#kernel
# toolchain (inherited from top-level)

CFLAGS := $(CFLAGS_BASE) -I. -I../shared -I../user -DXHCI_CTX_SIZE=$(XHCI_CTX_SIZE)
include ../common.mk

CPPFLAGS := -I. -I../shared -I../user -DXHCI_CTX_SIZE=$(XHCI_CTX_SIZE)

ifeq ($(QEMU),true)
CFLAGS += -DQEMU
CPPFLAGS += -DQEMU
endif

LDFLAGS := $(LDFLAGS_BASE) -T $(shell ls *.ld) --defsym=LOAD_ADDR=$(LOAD_ADDR)
CFLAGS := $(CFLAGS_BASE) $(CPPFLAGS)
CXXFLAGS := $(CXXFLAGS_BASE) $(CPPFLAGS)
LDFLAGS := $(LDFLAGS_BASE) -T $(shell ls *.ld) --defsym=LOAD_ADDR=$(LOAD_ADDR)

CLEAN_OBJS := $(shell find . -name '*.o')
CLEAN_DEPS := $(shell find . -name '*.d')
Expand All @@ -23,17 +28,19 @@ TARGET := ../kernel.img
all: $(TARGET)

$(TARGET): ../shared/libshared.a $(OBJ)
$(LD) $(LDFLAGS) -o $(ELF) $(OBJL) ../shared/libshared.a
$(VLD) $(LDFLAGS) -o $(ELF) $(OBJL) ../shared/libshared.a
$(OBJCOPY) -O binary $(ELF) $@

%.o: %.S
$(CC) $(CFLAGS) -c -MMD -MP $< -o $@
$(VAS) $(CFLAGS) -c $< -o $@

%.o: %.c
$(CC) $(CFLAGS) $(CONLY_FLAGS_BASE) -c -MMD -MP $< -o $@
$(VCC) $(CFLAGS) -c -MMD -MP $< -o $@

%.o: %.cpp
$(CC) $(CFLAGS) -fno-rtti -c -MMD -MP $< -o $@
$(VCXX) $(CXXFLAGS) -c -MMD -MP $< -o $@

clean:
rm -f $(CLEAN_OBJS) $(CLEAN_DEPS) $(ELF) $(TARGET)
$(RM) $(CLEAN_OBJS) $(CLEAN_DEPS) $(ELF) $(TARGET)

-include $(DEP)
17 changes: 11 additions & 6 deletions shared/Makefile
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
#shared
CFLAGS := $(CFLAGS_BASE) -I. -I../kernel -Wno-unused-parameter

include ../common.mk

CPPFLAGS := -I. -I../kernel
CFLAGS := $(CFLAGS_BASE) $(CPPFLAGS)
CXXFLAGS := $(CXXFLAGS_BASE) $(CPPFLAGS)

CLEAN_OBJS := $(shell find . -name '*.o')
CLEAN_DEPS := $(shell find . -name '*.d')
Expand All @@ -16,18 +21,18 @@ TARGET := libshared.a
all: $(TARGET)

$(TARGET): $(OBJ)
$(AR) rcs $@ $^
$(VAR) rcs $@ $^

%.o: %.S
$(CC) $(CFLAGS) -c -MMD -MP $< -o $@
$(VAS) $(CFLAGS) -c $< -o $@

%.o: %.c
$(CC) $(CFLAGS) $(CONLY_FLAGS_BASE) -c -MMD -MP $< -o $@
$(VCC) $(CFLAGS) -c -MMD -MP $< -o $@

%.o: %.cpp
$(CC) $(CFLAGS) -fno-rtti -c -MMD -MP $< -o $@
$(VCXX) $(CXXFLAGS) -c -MMD -MP $< -o $@

clean:
rm -f $(CLEAN_OBJS) $(CLEAN_DEPS) $(TARGET)
$(RM) $(CLEAN_OBJS) $(CLEAN_DEPS) $(TARGET)

-include $(DEP)
19 changes: 12 additions & 7 deletions user/Makefile
Original file line number Diff line number Diff line change
@@ -1,6 +1,11 @@
#user
CFLAGS := $(CFLAGS_BASE) -I. -I../shared -Wno-unused-parameter
LDFLAGS := -T $(shell ls *.ld)

include ../common.mk

CPPFLAGS := -I. -I../shared
CFLAGS := $(CFLAGS_BASE) $(CPPFLAGS)
CXXFLAGS := $(CXXFLAGS_BASE) $(CPPFLAGS)
LDFLAGS := -T $(shell ls *.ld)

CLEAN_OBJS := $(shell find . -name '*.o')
CLEAN_DEPS := $(shell find . -name '*.d')
Expand All @@ -19,19 +24,19 @@ LOCATION := ../fs/redos/user/
all: $(LOCATION)$(TARGET)

$(LOCATION)$(TARGET): $(OBJ)
$(LD) $(LDFLAGS) -o $(LOCATION)$(ELF) $(OBJ) ../shared/libshared.a
$(VLD) $(LDFLAGS) -o $(LOCATION)$(ELF) $(OBJ) ../shared/libshared.a
$(OBJCOPY) -O binary $(LOCATION)$(ELF) $@

%.o: %.S
$(CC) $(CFLAGS) -c -MMD -MP $< -o $@
$(VAS) $(CFLAGS) -c $< -o $@

%.o: %.c
$(CC) $(CFLAGS) $(CONLY_FLAGS_BASE) -c -MMD -MP $< -o $@
$(VCC) $(CFLAGS) -c -MMD -MP $< -o $@

%.o: %.cpp
$(CC) $(CFLAGS) -fno-rtti -c -MMD -MP $< -o $@
$(VCXX) $(CXXFLAGS) -c -MMD -MP $< -o $@

clean:
rm -f $(CLEAN_OBJS) $(CLEAN_DEPS) $(TARGET)
$(RM) $(CLEAN_OBJS) $(CLEAN_DEPS) $(TARGET)

-include $(DEP)