# engines/cpp/Makefile
# 编译 DLL（主程序通过 ctypes 直接调用）

CXX     = g++
LIB_SRC = dynamics_lib.cpp

UNAME_S := $(shell uname -s 2>/dev/null || echo Windows)

CXXFLAGS = -O3 -march=native -std=c++17 -Wall -Wextra -D_USE_MATH_DEFINES

# Windows 下静态链接运行时，避免 libstdc++-6.dll / libgcc_s_seh-1.dll 版本冲突
ifeq ($(UNAME_S),Windows)
  STATIC_FLAGS = -static-libgcc -static-libstdc++
else
  STATIC_FLAGS =
endif

ifeq ($(UNAME_S),Linux)
  DLL_TARGET = build/dynamics_cpp.so
  DLL_FLAGS  = -shared -fPIC
else ifeq ($(UNAME_S),Darwin)
  DLL_TARGET = build/dynamics_cpp.dylib
  DLL_FLAGS  = -dynamiclib
else
  DLL_TARGET = build/dynamics_cpp.dll
  DLL_FLAGS  = -shared
endif

.PHONY: all dll clean

all: dll

dll: $(DLL_TARGET)

$(DLL_TARGET): $(LIB_SRC) | build
	$(CXX) $(CXXFLAGS) $(STATIC_FLAGS) $(DLL_FLAGS) -o $@ $(LIB_SRC)
	@echo "  === C++ DLL built: $@ ==="

build:
	mkdir -p build

clean:
	rm -rf build *.o
