From 9cc125fb3cfdc2c8ae7153b5ae0fe705980835fb Mon Sep 17 00:00:00 2001 From: Kimplul Date: Thu, 6 Jan 2022 23:39:12 +0200 Subject: Allow building with clang + Release mode is sort of broken, as lto doesn't work with linker relaxation and turning the relaxation off causes issues with the jump from init to kernel (as I've currently implemented it, could probably be fixed with a manual jump from assembly, I'll add it to my TODO list) --- Makefile | 46 +++++++++++++++++++++++++++------------------- 1 file changed, 27 insertions(+), 19 deletions(-) (limited to 'Makefile') diff --git a/Makefile b/Makefile index 2bcef0f..e365a00 100644 --- a/Makefile +++ b/Makefile @@ -1,25 +1,30 @@ DO != echo > deps.mk # this could be done better -DEBUGFLAGS != [ $(RELEASE) ] && echo "-flto -O2" || echo "-O0 -ggdb3 -DDEBUG" -CFLAGS = -fno-pie -ffreestanding -nostdlib -std=c17 -Wall -Wextra -LINTFLAGS = -fsyntax-only +DEBUGFLAGS != [ $(RELEASE) ] \ + && echo "-flto -O2" \ + || echo "-O0 -ggdb3 -DDEBUG" + +CFLAGS = -ffreestanding -nostdlib -std=c17 -Wall -Wextra DEPFLAGS = -MT $@ -MMD -MP -MF $@.d +LINTFLAGS = -fsyntax-only +PREPROCESS = -E +LINKFLAGS = all: apos.bin # default values, overwrite if/when needed -ARCH ?= riscv -CROSS_COMPILE ?= riscv64-unknown-elf- +ARCH ?= riscv64 +CROSS_COMPILE ?= $(ARCH)-unknown-elf -# Common programs -CC := gcc -AR := ar -CPP := cpp -OBJCOPY ?= objcopy +OBJCOPY != [ $(LLVM) ] \ + && echo llvm-objcopy \ + || echo $(CROSS_COMPILE)-objcopy + +COMPILER != [ $(LLVM) ] \ + && echo clang --target="$(CROSS_COMPILE)" \ + || echo $(CROSS_COMPILE)-gcc -# This makes sure .bss is loaded into the binary -OBJCOPY_FLAGS ?= -Obinary --set-section-flags .bss=alloc,load,contents KERNEL_SOURCES != echo common/*.c common/uapi/*.c lib/*.c CLEANUP := build deps.mk kernel.* init.* apos.bin @@ -31,16 +36,19 @@ include arch/$(ARCH)/source.mk INCLUDE_FLAGS := -I include -I arch/$(ARCH)/include\ -include config.h -include arch/$(ARCH)/config.h -COMPILE = $(CROSS_COMPILE)$(CC) $(DEBUGFLAGS)\ +# This makes sure .bss is loaded into the binary +OBJCOPY_FLAGS ?= -Obinary --set-section-flags .bss=alloc,load,contents + +COMPILE = $(COMPILER) $(DEBUGFLAGS)\ $(CFLAGS) $(ARCH_FLAGS) $(DEPFLAGS) $(INCLUDE_FLAGS) -LINT = $(CROSS_COMPILE)$(CC) $(DEBUGFLAGS)\ +LINT = $(COMPILER) $(DEBUGFLAGS)\ $(CFLAGS) $(ARCH_FLAGS) $(LINTFLAGS) $(INCLUDE_FLAGS) -GENELF = $(CROSS_COMPILE)$(CC) $(DEBUGFLAGS)\ - $(CFLAGS) $(ARCH_FLAGS) $(INCLUDE_FLAGS) +GENELF = $(COMPILER) $(DEBUGFLAGS)\ + $(CFLAGS) $(ARCH_FLAGS) $(LINKFLAGS) $(INCLUDE_FLAGS) -GENLINK = $(CROSS_COMPILE)$(CPP) $(DEPFLAGS) $(INCLUDE_FLAGS) +GENLINK = $(COMPILER) $(PREPROCESS) $(DEPFLAGS) $(INCLUDE_FLAGS) STRIPLINK = sed -n '/^[^\#]/p' KERN_SIZE = wc -c kernel.bin | cut -d ' ' -f 1 KERN_INFO = sed "s//$$($(KERN_SIZE))/" @@ -66,10 +74,10 @@ kernel.elf: $(KERNEL_OBJECTS) $(KERNEL_LD) $(GENELF) -T $(KERNEL_LD) $(KERNEL_OBJECTS) -o $@ init.bin: init.elf - $(CROSS_COMPILE)$(OBJCOPY) $(OBJCOPY_FLAGS) $< $@ + $(OBJCOPY) $(OBJCOPY_FLAGS) $< $@ kernel.bin: kernel.elf - $(CROSS_COMPILE)$(OBJCOPY) $(OBJCOPY_FLAGS) $< $@ + $(OBJCOPY) $(OBJCOPY_FLAGS) $< $@ apos.bin: init.bin kernel.bin cat init.bin kernel.bin > apos.bin -- cgit v1.3