111 lines
2.8 KiB
Makefile
111 lines
2.8 KiB
Makefile
override MAKEFLAGS += -rR
|
|
override ARCH ?= aarch64
|
|
|
|
ifeq ($(ARCH),aarch64)
|
|
include toolchain-aarch64.mk
|
|
else ifeq ($(ARCH),x86_64)
|
|
include toolchain-x86_64.mk
|
|
else
|
|
$(error Unknown target architecture $(ARCH))
|
|
endif
|
|
|
|
override CFLAGS += \
|
|
-O3 \
|
|
-pipe \
|
|
-Wall \
|
|
-Wextra \
|
|
-Wshadow \
|
|
-Wstrict-aliasing \
|
|
-pedantic \
|
|
-std=c99 \
|
|
-ffreestanding \
|
|
-fno-stack-protector \
|
|
-fno-lto \
|
|
-fPIE \
|
|
-Ihanekawa/include \
|
|
-Iyukari/include
|
|
|
|
override LDFLAGS += \
|
|
-nostdlib \
|
|
-pie \
|
|
-static \
|
|
--no-dynamic-linker \
|
|
-z noexecstack \
|
|
--no-omagic \
|
|
--no-warn-rwx-segments
|
|
|
|
asagiri: build/bin/yukari
|
|
|
|
## KERNEL
|
|
override KCFILES := $(shell find -L arch/$(ARCH)/* -type f -name '*.c')
|
|
override KCFILES += $(shell find -L hanekawa/* -type f -name '*.c')
|
|
override KCFILES += $(shell find -L yukari/* -type f -name '*.c')
|
|
override KOBJ := $(addprefix build/yukari/obj/,$(KCFILES:.c=.c.o))
|
|
|
|
# Compilation rule
|
|
build/yukari/obj/%.c.o: %.c
|
|
mkdir -p "$$(dirname $@)"
|
|
$(CC) $(CFLAGS) \
|
|
-D_IS_YUKARI\
|
|
-c $< -o $@
|
|
|
|
# Linking the kernel
|
|
build/bin/yukari: $(KOBJ)
|
|
mkdir -p "$$(dirname $@)"
|
|
$(LD) $(KOBJ) \
|
|
$(LDFLAGS) \
|
|
-o $@
|
|
|
|
|
|
## Userspace
|
|
override CFILES := $(shell find -L hanekawa/* -type f -name '*.c')
|
|
override OBJ := $(addprefix build/obj/,$(CFILES:.c=.c.o))
|
|
|
|
# Compilation rule
|
|
build/obj/%.c.o: %.c
|
|
mkdir -p "$$(dirname $@)"
|
|
$(CC) $(CFLAGS) \
|
|
-c $< -o $@
|
|
|
|
|
|
## Image
|
|
asagiri.img: asagiri
|
|
# Create directory
|
|
mkdir -p "$$(dirname $@)"
|
|
|
|
# Create uboot image from the kernel elf if AARCH64
|
|
ifeq ($(ARCH),aarch64)
|
|
$(OBJCOPY) -O binary build/bin/yukari build/yukari.bin
|
|
SOURCE_DATE_EPOCH=0 ./u-boot/tools/mkimage -A arm64 -C none -O linux -T kernel \
|
|
-d build/yukari.bin -a 0x1000000 -e 0x1000000 build/yukari.uimg
|
|
SOURCE_DATE_EPOCH=0 ./u-boot/tools/mkimage -A arm64 -C none -T script \
|
|
-n "Boot script" -d "arch/aarch64/res/boot.cmd" build/boot.scr
|
|
endif
|
|
|
|
# Create disk drive
|
|
qemu-img create build/asagiri.img 4M
|
|
mformat -N 7777777 -i build/asagiri.img ::
|
|
|
|
# Add files to disk drive
|
|
ifeq ($(ARCH),aarch64)
|
|
faketime "1970-01-01 00:00:00" mcopy -pmi build/asagiri.img build/yukari.uimg ::
|
|
faketime "1970-01-01 00:00:00" mcopy -pmi build/asagiri.img build/boot.scr ::
|
|
else
|
|
faketime "1970-01-01 00:00:00" mmd -i build/asagiri.img ::/EFI
|
|
faketime "1970-01-01 00:00:00" mmd -i build/asagiri.img ::/EFI/BOOT
|
|
faketime "1970-01-01 00:00:00" mcopy -pmi build/asagiri.img arch/x86_64/res/startup.nsh ::
|
|
faketime "1970-01-01 00:00:00" mcopy -pmi build/asagiri.img build/bin/yukari ::
|
|
faketime "1970-01-01 00:00:00" mcopy -pmi build/asagiri.img build/bin/BOOTX64.EFI ::/EFI/BOOT/
|
|
endif
|
|
|
|
|
|
## Clean
|
|
.PHONY: clean
|
|
clean:
|
|
rm -rf build
|
|
if [ -d "u-boot" ]; then (cd u-boot && make clean); fi
|
|
|
|
.PHONY: distclean
|
|
distclean: clean
|
|
rm -rf u-boot
|