R.I.P Terry (merak etme baba bende gelecem yanına)

ZIP indir
0
main
1 dal
git@carbon4code.com:ozsipahi/NakedOS.git
Ömer Özsipahi feature: C kernel
9 commit
Makefile 1.2 KB
CC      = x86_64-elf-gcc
LD      = x86_64-elf-ld
OBJCOPY = x86_64-elf-objcopy

CFLAGS  = -ffreestanding -fno-stack-protector -fno-pic -mno-red-zone -m64 -Wall -Wextra -I..
LDFLAGS = -T linker.ld

NAME    = kernel.bin
ELF     = kernel.elf

# 1. rwildcard silindi. Yerine doğrudan işletim sisteminin 'find' komutu kullanıldı.
# Bu, üst dizindeki tüm .c dosyalarını çok daha güvenli ve hızlı bulur.
SRC := $(shell find ../ -type f -name "*.c")

# 2. Dosya isimlerini ayıkla (Örn: vga.o)
OBJS := $(notdir $(SRC:.c=.o))

# 3. Make'e dosyaları nerede bulacağını söyle
VPATH := $(sort $(dir $(SRC)))

all: $(NAME)

$(NAME): $(ELF)
	@$(OBJCOPY) -O binary $(ELF) $(NAME)
	@size=$$(stat -f%z $(NAME) 2>/dev/null || stat -c%s $(NAME)); \
	pad=$$(( (512 - size % 512) % 512 )); \
	if [ $$pad -ne 0 ]; then \
		dd if=/dev/zero bs=1 count=$$pad >> $(NAME) 2>/dev/null; \
	fi
	@echo "kernel.bin boyutu: $$(stat -f%z $(NAME) 2>/dev/null || stat -c%s $(NAME)) byte ($$(( ($$(stat -f%z $(NAME) 2>/dev/null || stat -c%s $(NAME))) / 512 )) sektör)"

$(ELF): $(OBJS)
	@$(LD) $(LDFLAGS) -o $(ELF) $(OBJS)

%.o: %.c
	@$(CC) $(CFLAGS) -c $< -o $@

clean:
	@rm -f $(OBJS) $(ELF)

fclean: clean
	@rm -f $(NAME)

re: fclean all

.PHONY: all clean fclean re