rivo/Makefile

70 lines
1.8 KiB
Makefile

CORES := $(shell nproc)
PWD := $(shell pwd)
LINUX_DIR := $(PWD)/components/linux
MUSL_DIR := $(PWD)/components/musl
BUSYBOX_DIR := $(PWD)/components/busybox
LINUX_CFG := $(LINUX_DIR)/.config
MUSL_CFG := $(MUSL_DIR)/config.mak
BUSYBOX_CFG := $(BUSYBOX_DIR)/.config
LINUX_OUT := $(LINUX_DIR)/arch/x86/boot/bzImage
MUSL_OUT := $(MUSL_DIR)/lib/libc.so
BUSYBOX_OUT := $(BUSYBOX_DIR)/busybox
DOWNLOAD_SCRIPT := $(PWD)/scripts/download-components.sh
CONFIGS_DIR := $(PWD)/configs
MUSL_GCC := "${REALGCC:-gcc}" "$@" -specs "$(MUSL_DIR)/lib/musl-gcc.specs"
.PHONY: all deps linux busybox clean
all: dirs deps linux busybox
dirs:
mkdir -p initramfs/{etc,proc,sys,usr/{bin,lib},dev,tmp,mnt,root}
ln -sf usr/bin initramfs/bin
ln -sf usr/bin initramfs/sbin
ln -sf usr/lib initramfs/lib
ln -sf usr/lib initramfs/lib64
deps:
@echo "Downloading dependencies..."
@$(DOWNLOAD_SCRIPT)
linux: $(LINUX_OUT)
$(LINUX_OUT): $(LINUX_CFG)
@echo "Building Linux kernel..."
@$(MAKE) -C $(LINUX_DIR) -j $(CORES)
$(LINUX_CFG):
@echo "Copying Linux config..."
@cp -r $(CONFIGS_DIR)/linux/. $(LINUX_DIR)/
musl: $(MUSL_OUT)
$(MUSL_SPECS): $(MUSL_OUT)
$(MUSL_OUT): $(MUSL_CFG)
make -C components/musl -j $(CORES)
$(MUSL_CFG):
@echo "Configuring musl..."
cd components/musl && ./configure --prefix=/usr
busybox: musl $(BUSYBOX_OUT)
$(BUSYBOX_OUT): $(BUSYBOX_CFG)
@echo "Building BusyBox..."
@$(MAKE) -C $(BUSYBOX_DIR) -j $(CORES) CC="$(MUSL_GCC)"
$(BUSYBOX_CFG):
@echo "Copying BusyBox config..."
@cp -r $(CONFIGS_DIR)/busybox/. $(BUSYBOX_DIR)/
install: linux busybox
@cp $(LINUX_OUT) cdroot/
$(MAKE) -C $(BUSYBOX_DIR) install CONFIG_PREFIX=$(PWD)/initramfs -j $(CORES)
clean:
@echo "Cleaning up build artifacts..."
@$(MAKE) -C $(LINUX_DIR) clean
@$(MAKE) -C $(BUSYBOX_DIR) clean