30 lines
1.0 KiB
Makefile
30 lines
1.0 KiB
Makefile
CC ?= clang
|
|
LD ?= ld.lld
|
|
|
|
ROOT := ../..
|
|
OUT := $(ROOT)/SYSTEM/system/user/use/login.elf
|
|
PATCHER := patch_login_hash.ps1
|
|
|
|
CFLAGS := -target x86_64-unknown-none -std=c11 -ffreestanding -fno-builtin -fno-stack-protector -fpie -mno-red-zone -mno-sse -mno-sse2 -mno-mmx -msoft-float -m64 -Wall -Wextra -I../UTSM/include -I../firstInit -O2
|
|
LDFLAGS := -nostdlib -static -pie -z max-page-size=0x1000 -T linker.ld
|
|
|
|
C_SOURCES := main.c
|
|
OBJECTS := $(C_SOURCES:.c=.o)
|
|
|
|
.PHONY: all clean
|
|
|
|
all: $(OUT)
|
|
|
|
# 构建后用 patch_login_hash.ps1 计算 .text SHA256 并写入 .hashseg
|
|
$(OUT): $(OBJECTS) linker.ld
|
|
@mkdir -p "$(ROOT)/SYSTEM/system/user/use"
|
|
$(LD) $(LDFLAGS) -o $@.tmp $(OBJECTS)
|
|
@cmd /c "move /y $(OUT:.elf=.elf).tmp $(OUT)" >nul
|
|
@echo [login] patching .text SHA256 into .hashseg...
|
|
powershell -NoProfile -ExecutionPolicy Bypass -File $(PATCHER) $@
|
|
%.o: %.c
|
|
$(CC) $(CFLAGS) -c $< -o $@
|
|
|
|
clean:
|
|
powershell -NoProfile -Command "Get-ChildItem -Path . -Recurse -Filter *.o | Remove-Item -Force; if (Test-Path '$(OUT)') { Remove-Item '$(OUT)' -Force }"
|