# engines/c/Makefile
# 编译 DLL（主程序通过 ctypes 直接调用）
#              make dll     → 本地系统编译
#              make linux   → Linux 交叉编译（需 x86_64-linux-gnu-gcc）
#              make windows → Windows 交叉编译（需 x86_64-w64-mingw32-gcc）

CC        = gcc
CFLAGS    = -O3 -march=native -Wall -Wextra
LDFLAGS   = -lm
LIB_SRC   = dynamics_lib.c

# 自动检测系统
UNAME_S  := $(shell uname -s 2>/dev/null || echo Windows)

# DLL 目标（平台自动选择后缀）
ifeq ($(UNAME_S),Linux)
  DLL_TARGET = build/dynamics_c.so
  DLL_FLAGS  = -shared -fPIC
else ifeq ($(UNAME_S),Darwin)
  DLL_TARGET = build/dynamics_c.dylib
  DLL_FLAGS  = -dynamiclib
else
  DLL_TARGET = build/dynamics_c.dll
  DLL_FLAGS  = -shared
endif

.PHONY: all dll clean

all: dll

dll: $(DLL_TARGET)

$(DLL_TARGET): $(LIB_SRC) | build
	$(CC) $(CFLAGS) $(DLL_FLAGS) -o $@ $(LIB_SRC) $(LDFLAGS)
	@echo "  === C DLL built: $@ ==="

build:
	mkdir -p build

clean:
	rm -rf build *.o
