rpi/Makefile
2025-09-23 16:12:34 +00:00

108 lines
2.7 KiB
Makefile

CC = clang
SRC_DIR := src
SRC := $(SRC_DIR)/main.c
BUILD_DIR := build
ASSETS := assets
TARGET := $(BUILD_DIR)/hello
CTOOLS := $(SRC_DIR)/ctools
LIBFT_DIR := $(CTOOLS)/libft
LIBFT := $(LIBFT_DIR)/lib/libft.a
LIB := $(LIBFT)
TOOLCHAIN_DIR := $(HOME)/.local/toolchains
TOOLCHAIN := $(TOOLCHAIN_DIR)/aarch64-linux-musl-cross
TOOLCHAIN_BIN := $(TOOLCHAIN)/bin
MUSL_LD := $(TOOLCHAIN_BIN)/aarch64-linux-musl-ld
CFLAGS := -Wall -Wextra -Werror --target=aarch64-linux-musl \
--sysroot=$(TOOLCHAIN) \
--ld-path=$(MUSL_LD)
DOCKER_CMD := /bin/sh #-c 'hello "host.docker.internal" "8000"'
MINIROOTFS := $(ASSETS)/minirootfs.tar.gz
ALPINE := alpine
ALPINE_KERNEL := alpine/boot/vmlinuz-rpi
ALPINE_INITFRAM_FS := alpine/boot/initramfs-rpi
ALPINE_BIN := $(ALPINE)/bin
ALPINE_TAR := $(ASSETS)/alpine-rpi-aarch64.gz
ALPINE_HEADLESS := $(ASSETS)/headless.apkovl.tar.gz
ALPINE_CUSTOM_IMG := $(BUILD_DIR)/alpine-custom.img
PLATFORM := arm64
QEMU_VM := qemu-system-aarch64
QEMU_IMG := qemu-img
SSH_AUTH_KEYS := $(ALPINE)/authorized_keys
all: $(TARGET)
$(TARGET): $(TOOLCHAIN) $(SRC) $(BUILD_DIR) $(LIB)
echo $(HOME)
$(CC) $(CFLAGS) -o $(TARGET) $(SRC) $(LIB)
get: $(ASSETS) $(ALPINE_TAR) $(ALPINE_HEADLESS)
rm -rf $(ALPINE)/*
tar xvf $(ALPINE_TAR) -C $(ALPINE)
cp $(ALPINE_HEADLESS) $(ALPINE)
qemu: $(ALPINE_CUSTOM_IMG) img
$(QEMU_VM) -machine raspi3ap -cpu cortex-a53 -smp 4 -m 512M \
-drive format=raw,file=$(ALPINE_CUSTOM_IMG) \
-nographic
#$(QEMU_VM) -M virt -cpu cortex-a72 -smp 2 -m 1G \
# -kernel $(ALPINE_KERNEL) \
# -initrd $(ALPINE_INITFRAM_FS) \
# -append "console=ttyAMA0 root=/dev/vda rw" \
# -drive format=raw,file=fat:rw:$(ALPINE)/ \
# -nographic \
# -virtfs local,path=$(BUILD_DIR),mount_tag=$(BUILD_DIR),security_model=none
img: get $(ALPINE) $(BUILD_DIR)
$(QEMU_IMG) create -f raw $(ALPINE_CUSTOM_IMG) 512M
mformat -i $(ALPINE_CUSTOM_IMG) -F ::
mcopy -i $(ALPINE_CUSTOM_IMG) -s $(ALPINE)/* ::
$(SSH_AUTH_KEYS):
cp ~/.ssh/authorized_keys $(ALPINE)
bootable: $(ALPINE) $(WPA_CONFIG) get
tar czf $(MINIROOTFS) -C $(ALPINE) ./
$(ALPINE_HEADLESS):
wget https://github.com/macmpi/alpine-linux-headless-bootstrap/raw/98728731299f262eab270941c522138d6c5cea73/headless.apkovl.tar.gz -O $(ALPINE_HEADLESS)
$(TOOLCHAIN): | $(TOOLCHAIN_DIR)
wget https://musl.cc/aarch64-linux-musl-cross.tgz
tar xvf aarch64-linux-musl-cross.tgz -C $(TOOLCHAIN_DIR)
rm aarch64-linux-musl-cross.tgz
$(TOOLCHAIN_DIR):
mkdir -p $@
$(ALPINE_TAR):
wget https://dl-cdn.alpinelinux.org/alpine/v3.22/releases/aarch64/alpine-rpi-3.22.1-aarch64.tar.gz -O $(ALPINE_TAR)
$(LIB):
make aarch64 -C $(LIBFT_DIR)
$(BUILD_DIR):
mkdir -p $@
$(ALPINE):
mkdir -p $@
$(ASSETS):
mkdir -p $@
clean:
rm -rf $(BUILD_DIR) $(ALPINE) $(ASSETS)
make fclean -C $(LIBFT_DIR)