Xenith/Makefile
2026-09-29 19:55:06 +07:00

48 lines
1.4 KiB
Makefile

CXX ?= g++
CXXFLAGS ?= -O3 -march=native -ffast-math -funroll-loops -std=c++17 -Wall -Wextra -Wno-unused-parameter
LDFLAGS ?= -pthread
SRC := main.cpp \
xenith/core/model.cpp \
xenith/core/backward.cpp \
xenith/core/trainer.cpp \
xenith/core/checkpoint.cpp \
xenith/core/generate.cpp \
xenith/core/gradcheck.cpp
OBJ := $(SRC:.cpp=.o)
DEP := $(OBJ:.o=.d)
BIN := bin/xenith
# Без -include .d make считает ПЕРВУЮ цель в make-файле целью по умолчанию.
# Если первой стоит "-include $(DEP)", сборка молча превращается в no-op:
# ни один .o не пересобирается, и правки исходников не доходят до бинарника.
# Именно так мы потеряли час: gradcheck показывал одни и те же числа
# после нескольких исправлений. Поэтому первая цель здесь — всегда all.
ALL_OBJ := $(OBJ)
all: $(BIN)
.PHONY: all
bin:
mkdir -p bin
$(BIN): $(ALL_OBJ)
@mkdir -p bin
$(CXX) $(ALL_OBJ) -o $@ $(LDFLAGS)
%.o: %.cpp
$(CXX) $(CXXFLAGS) -MMD -MP -c $< -o $@
debug:
$(MAKE) clean
$(MAKE) CXXFLAGS="-O1 -g -std=c++17 -Wall -Wextra -Wno-unused-parameter -fsanitize=address,undefined" \
LDFLAGS="-pthread -fsanitize=address,undefined"
clean:
rm -f $(OBJ) $(DEP) $(BIN)
.PHONY: debug clean
-include $(DEP)