+OS := $(shell uname -s)
+CPU_ARCH := $(shell uname -p)
+
CC = gcc
LD = ld
-UNAME := $(shell uname -s)
-ifeq ($(UNAME), Darwin)
- CC = i686-elf-gcc
- LD = i686-elf-ld
+ifeq ($(OS), Darwin)
+ # MacOS下安装i686-elf-*的方法: brew install i686-elf-binutils
+ # Apple Silicon
+ ifeq ($(CPU_ARCH), arm)
+ CC = i686-elf-gcc
+ LD = i686-elf-ld
+ # Intel MacOS
+ else ifeq ($(CPU_ARCH), i386)
+ CC = i686-elf-gcc
+ LD = i686-elf-ld
+ endif
+else ifeq ($(OS), Linux)
+ # Apple Silicon Docker Linux
+ ifeq ($(CPU_ARCH), aarch64)
+ CC = x86_64-linux-gnu-gcc
+ LD = x86_64-linux-gnu-ld
+ endif
endif
+
+
CFLAGS = -g -c -fno-builtin -m32 -DBUILDER='"$(shell whoami)"'
SYSTEMMAP = System.map
KERNELBIN = KERNEL.BIN