rpi/Makefile
2025-09-23 06:53:20 +00:00

72 lines
1.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)
CFLAGS := -Wall -Wextra -Werror --target=aarch64-linux-musl
DOCKER_CMD := /bin/sh -c 'hello "host.docker.internal" "8000"'
MINIROOTFS := $(ASSETS)/minirootfs.tar.gz
ALPINE := alpine/
ALPINE_BIN := $(ALPINE)/bin
ALPINE_IMG := $(ASSETS)/alpine.img
ALPINE_TAR := $(ALPINE_IMG).gz
ALPINE_HEADLESS := $(ASSETS)/headless.apkovl.tar.gz
all: $(SRC) $(BUILD_DIR) $(LIB) get
$(CC) $(CFLAGS) -o $(TARGET) -static $(SRC) $(LIB)
get: $(ALPINE) $(ASSETS)
wget https://dl-cdn.alpinelinux.org/alpine/v3.22/releases/aarch64/alpine-rpi-3.22.1-aarch64.tar.gz -O $(ALPINE_TAR)
wget https://github.com/macmpi/alpine-linux-headless-bootstrap/raw/98728731299f262eab270941c522138d6c5cea73/headless.apkovl.tar.gz -O $(ALPINE_HEADLESS)
rm -rf $(ALPINE)/*
tar xvf $(ALPINE_TAR) -C $(ALPINE)
docker: build copy $(TARGET)
$(SRC) $(BUILD_DIR) $(LIB) get
$(CC) $(CFLAGS) -o $(TARGET) -static $(SRC) $(LIB)
cp $(TARGET) $(ALPINE_BIN)
tar czf $(MINIROOTFS) -C alpine ./
docker import --platform linux/arm64 $(MINIROOTFS) alpine-custom:latest
copy: build
cp $(TARGET) $(ALPINE_BIN)
tar czf $(MINIROOTFS) -C alpine ./
docker import --platform linux/arm64 $(MINIROOTFS) alpine-custom:latest
run: all
docker run --add-host=host.docker.internal:host-gateway --platform linux/arm64 -it alpine-custom $(DOCKER_CMD)
$(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)
.PHONY: all build copy run clean