diff --git a/Makefile b/Makefile index 9e3a7d7..236bd95 100644 --- a/Makefile +++ b/Makefile @@ -14,43 +14,67 @@ LIBFT := $(LIBFT_DIR)/lib/libft.a LIB := $(LIBFT) -CFLAGS := -Wall -Wextra -Werror --target=aarch64-linux-musl +TOOLCHAIN := /opt/toolchains/aarch64-linux-musl-cross +TOOLCHAIN_BIN := $(TOOLCHAIN)/bin +MUSL_LD := $(TOOLCHAIN_BIN)/aarch64-linux-musl-ld -DOCKER_CMD := /bin/sh -c 'hello "host.docker.internal" "8000"' +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 := alpine +ALPINE_KERNEL := alpine/boot/vmlinuz-rpi +ALPINE_INITFRAM_FS := alpine/boot/initramfs-rpi ALPINE_BIN := $(ALPINE)/bin -ALPINE_IMG := $(ASSETS)/alpine.img -ALPINE_TAR := $(ALPINE_IMG).gz +ALPINE_TAR := $(ASSETS)/alpine-rpi-aarch64.gz ALPINE_HEADLESS := $(ASSETS)/headless.apkovl.tar.gz +ALPINE_CUSTOM_IMG := $(BUILD_DIR)/alpine-custom.img -all: $(SRC) $(BUILD_DIR) $(LIB) get - $(CC) $(CFLAGS) -o $(TARGET) -static $(SRC) $(LIB) +PLATFORM := arm64 -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) +all: $(TARGET) + +QEMU_VM := qemu-system-aarch64 +QEMU_IMG := qemu-img + +$(TARGET): $(SRC) $(BUILD_DIR) $(LIB) $(TOOLCHAIN) + $(CC) $(CFLAGS) -o $(TARGET) $(SRC) $(LIB) + +get: $(ASSETS) $(ALPINE) $(ALPINE_TAR) $(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 +qemu: $(ALPINE_CUSTOM_IMG) img + $(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: $(ALPINE) + $(QEMU_IMG) create -f raw $(ALPINE_CUSTOM_IMG) 512M + mformat -i $(ALPINE_CUSTOM_IMG) -F :: + mcopy -i $(ALPINE_CUSTOM_IMG) -s $(ALPINE)/* :: -copy: build - cp $(TARGET) $(ALPINE_BIN) - tar czf $(MINIROOTFS) -C alpine ./ - docker import --platform linux/arm64 $(MINIROOTFS) alpine-custom:latest +bootable: $(ALPINE) + tar czf $(MINIROOTFS) -C $(ALPINE) ./ -run: all - docker run --add-host=host.docker.internal:host-gateway --platform linux/arm64 -it alpine-custom $(DOCKER_CMD) +$(ALPINE_HEADLESS): + wget https://github.com/macmpi/alpine-linux-headless-bootstrap/raw/98728731299f262eab270941c522138d6c5cea73/headless.apkovl.tar.gz -O $(ALPINE_HEADLESS) + +$(TOOLCHAIN): + wget https://musl.cc/aarch64-linux-musl-cross.tgz + sudo tar xvf aarch64-linux-musl-cross.tgz -C $@ + +$(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) @@ -67,5 +91,3 @@ $(ASSETS): clean: rm -rf $(BUILD_DIR) $(ALPINE) $(ASSETS) make fclean -C $(LIBFT_DIR) - -.PHONY: all build copy run clean diff --git a/src/ctools/libft/Makefile b/src/ctools/libft/Makefile index fb4200d..87699b7 100644 --- a/src/ctools/libft/Makefile +++ b/src/ctools/libft/Makefile @@ -6,7 +6,7 @@ # By: vvobis +#+ +:+ +#+ # # +#+#+#+#+#+ +#+ # # Created: 2024/09/17 14:23:19 by vvobis #+# #+# # -# Updated: 2025/09/22 12:17:40 by victor ### ########.fr # +# Updated: 2025/09/23 09:59:59 by victor ### ########.fr # # # # **************************************************************************** # @@ -14,6 +14,8 @@ NAME := libft.a CC := clang +AR := ar + CFLAGS := -Wall -Wextra -Werror SRC := ft_bzero.c ft_isalnum.c ft_isalpha.c ft_isdigit.c \ @@ -47,7 +49,12 @@ LIBS := printf all: $(NAME) -aarch64: CFLAGS += --target=arm-linux-gnueabihf -static +TOOLCHAIN := /opt/toolchains/aarch64-linux-musl-cross +TOOLCHAIN_BIN := $(TOOLCHAIN)/bin +MUSL_LD := $(TOOLCHAIN_BIN)/aarch64-linux-musl-ld + +aarch64: CFLAGS += --target=aarch64-linux-musl \ + --sysroot=$(TOOLCHAIN) aarch64 : fclean all bonus: $(OBJBON) $(OBJ) diff --git a/src/ctools/libft/printf/Makefile b/src/ctools/libft/printf/Makefile index 0ad8066..6f10d8a 100644 --- a/src/ctools/libft/printf/Makefile +++ b/src/ctools/libft/printf/Makefile @@ -6,7 +6,7 @@ # By: victor +#+ +:+ +#+ # # +#+#+#+#+#+ +#+ # # Created: 2024/09/14 09:21:46 by victor #+# #+# # -# Updated: 2024/11/11 11:52:05 by marvin ### ########.fr # +# Updated: 2025/09/23 09:08:41 by victor ### ########.fr # # # # **************************************************************************** # @@ -31,6 +31,8 @@ endif all: $(NAME) +aarch64: CFLAGS += --target=aarch64-linux-musl all + $(NAME): $(OBJ) ar rsc $@ $(OBJ)