72 lines
1.7 KiB
Makefile
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
|