2025-11-23 18:21:50 +03:00
|
|
|
CC = clang
|
2025-12-08 00:01:39 +03:00
|
|
|
|
2025-12-01 19:39:11 +03:00
|
|
|
AXL_SOURCES = $(filter-out main.c %_test.c, $(wildcard *.c))
|
2025-12-08 00:01:39 +03:00
|
|
|
TEST_EXES = $(patsubst %.c,%.exe,$(wildcard *_test.c))
|
|
|
|
|
|
2025-12-05 23:09:19 +03:00
|
|
|
TEST_CFLAGS = -Wall -Wextra -Werror -pedantic -std=c17 -static -Oz -fsigned-char
|
2025-12-08 00:01:39 +03:00
|
|
|
|
|
|
|
|
MINIMAL_CFLAGS = -nostdlib -ffreestanding -fno-builtin -mno-stack-arg-probe \
|
|
|
|
|
-fno-stack-protector -fno-unwind-tables -fno-exceptions -fno-rtti \
|
|
|
|
|
-fno-asynchronous-unwind-tables -fno-ident
|
|
|
|
|
|
|
|
|
|
LDFLAGS = -fuse-ld=lld -static \
|
|
|
|
|
-Wl,/SUBSYSTEM:CONSOLE \
|
|
|
|
|
-Wl,/ENTRY:_start \
|
|
|
|
|
-Wl,/OPT:NOICF \
|
|
|
|
|
-Wl,/OPT:NOREF \
|
|
|
|
|
-Wl,/NODEFAULTLIB \
|
|
|
|
|
-Wl,/MERGE:.rdata=.text
|
|
|
|
|
|
2025-11-24 17:52:38 +03:00
|
|
|
LIBS = -lkernel32
|
2025-12-08 00:01:39 +03:00
|
|
|
|
2025-12-01 19:39:11 +03:00
|
|
|
SOURCES = $(AXL_SOURCES) main.c
|
2025-12-08 00:01:39 +03:00
|
|
|
TARGET = prog.exe
|
2025-11-23 18:21:50 +03:00
|
|
|
|
2025-12-08 00:01:39 +03:00
|
|
|
all: clean $(TARGET)
|
2025-11-23 18:21:50 +03:00
|
|
|
|
2025-12-01 19:39:11 +03:00
|
|
|
%_test.exe: %_test.c
|
|
|
|
|
$(CC) $(TEST_CFLAGS) $(AXL_SOURCES) $< -o $@
|
|
|
|
|
|
2025-12-08 00:01:39 +03:00
|
|
|
test: clean $(TEST_EXES)
|
|
|
|
|
@echo "=== Running tests ==="
|
|
|
|
|
@for %%i in ($(TEST_EXES)) do (echo ---- %%i ---- && %%i || exit /b 1)
|
2025-12-01 19:39:11 +03:00
|
|
|
|
2025-12-08 00:01:39 +03:00
|
|
|
$(TARGET): $(SOURCES)
|
|
|
|
|
$(CC) $(TEST_CFLAGS) $(MINIMAL_CFLAGS) $^ -o $@ $(LDFLAGS) $(LIBS)
|
2025-12-01 19:39:11 +03:00
|
|
|
|
2025-11-23 18:21:50 +03:00
|
|
|
clean:
|
2025-12-08 00:01:39 +03:00
|
|
|
-del /q *.exe *.o 2>nul
|
2025-11-23 18:21:50 +03:00
|
|
|
|
2025-12-01 19:39:11 +03:00
|
|
|
.PHONY: all clean test
|