92 lines
1.7 KiB
Makefile
92 lines
1.7 KiB
Makefile
|
|
AS := nasm
|
|
CC := clang-6.0
|
|
LD := lld-6.0
|
|
DAS := llvm-objdump-6.0
|
|
|
|
.DEFAULT_GOAL := all
|
|
|
|
C_FLAGS_ARCH_X86_64 := -target x86_64-pc-none-elf \
|
|
-mno-red-zone \
|
|
-mno-mmx \
|
|
-mno-sse \
|
|
-mno-sse2 \
|
|
-mno-sse3 \
|
|
-mno-3dnow
|
|
|
|
C_FLAGS = -x c \
|
|
-g \
|
|
-c \
|
|
-O0 \
|
|
-std=c17 \
|
|
-Wall \
|
|
-Werror \
|
|
-Wextra \
|
|
-Wpedantic \
|
|
-ffreestanding \
|
|
-fno-pic \
|
|
-fno-stack-protector \
|
|
-Wno-error=int-to-pointer-cast \
|
|
-Wno-error=zero-length-array \
|
|
$(C_FLAGS_ARCH_X86_64) \
|
|
-I$(INC)/
|
|
|
|
AS_FLAGS = -w+all \
|
|
-w+error \
|
|
-f elf64 \
|
|
-F dwarf \
|
|
-g \
|
|
-I$(INC)/ \
|
|
|
|
LD_FLAGS = -fuse-ld=$(LD) \
|
|
-nostdlib \
|
|
-Wl, linker.ld \
|
|
-Wl,--fatal-warnings
|
|
|
|
# ===============================
|
|
# HERE COMES file definitions
|
|
# ===============================
|
|
|
|
INC := inc
|
|
SRC := .
|
|
OUT := out
|
|
TGT := $(OUT)/hello.elf
|
|
|
|
# ===============================
|
|
# Add additional c source files here
|
|
# ===============================
|
|
C_SRC := hello.c
|
|
|
|
# ===============================
|
|
# Add additional ASM source files here
|
|
# ===============================
|
|
ASM_SRC := curros.asm
|
|
|
|
# ===============================
|
|
# Compilation rules
|
|
# ===============================
|
|
C_OBJ := $(addsuffix .o, $(addprefix $(OUT)/,$(C_SRC)))
|
|
|
|
ASM_OBJ := $(addsuffix .o, $(addprefix $(OUT)/,$(ASM_SRC)))
|
|
|
|
$(C_OBJ): $(OUT)/%.c.o : %.c
|
|
$(CC) $(C_FLAGS) -o $@ $<
|
|
|
|
$(ASM_OBJ): $(OUT)/%.asm.o : %.asm
|
|
$(AS) $(AS_FLAGS) -o $@ $<
|
|
|
|
$(TGT): $(C_OBJ) $(ASM_OBJ)
|
|
$(CC) $(LD_FLAGS) -o $@ $^
|
|
|
|
.PHONY: mkdir
|
|
mkdir:
|
|
mkdir -p out
|
|
|
|
.PHONY: clean
|
|
clean:
|
|
rm -rf $(OUT)
|
|
|
|
.PHONY: all
|
|
all: mkdir $(TGT)
|
|
|