# S6网络验证 C SDK —— 构建脚本
#
# ⚠ 当前只支持 Windows
#   本 SDK 用的是 WinHTTP（HTTP 客户端）+ BCrypt（AES/HMAC）+ SMBIOS（设备码），
#   这三样都是 Windows 系统 API。Linux / macOS 上编不过 —— 需要的话得改造成
#   自带 socket + AES 实现，见 README「跨平台」一节。
#
# 用法：
#   make            编 s6demo.exe（基础示例）
#   make allapi     编 s6allapi.exe（全接口示例）
#   make run        编完直接跑
#   make clean
#
# 编译器优先级：cl（MSVC）> clang > gcc
#   在「x64 Native Tools Command Prompt for VS」里直接 make 就能用 cl。

TARGET_DEMO  = s6demo.exe
TARGET_ALL   = s6allapi.exe
TARGET_CPP   = s6cpp.exe
TARGET_CPPALL = s6allcpp.exe

SRC_SDK      = s6verify.c
HDR_SDK      = s6verify.h

# 链接库：WinHTTP + BCrypt + Winsock（设备码要读网卡）+ 固件表（SMBIOS）
LIBS = winhttp.lib bcrypt.lib ws2_32.lib iphlpapi.lib advapi32.lib

# ── 编译器检测 ──
ifeq ($(shell where cl 2>NUL),)
    # 没有 MSVC，用 clang 或 gcc（需要 MinGW / MSYS2 提供 windows.h）
    CC ?= clang
    CXX ?= clang++
    CFLAGS = -O2 -Wall -Wextra -Wno-unused-parameter
    CXXFLAGS = -O2 -Wall -Wextra -Wno-unused-parameter -std=c++17
    LINK = $(CC) $(CFLAGS)
    OUT = -o
    LIBS_CMD = -lwinhttp -lbcrypt -lws2_32 -liphlpapi -ladvapi32
    RM = del /Q
else
    # MSVC
    CC = cl
    CXX = cl
    CFLAGS = /O2 /W3 /nologo /utf-8
    CXXFLAGS = /O2 /W3 /nologo /utf-8 /EHsc
    LINK = $(CC) $(CFLAGS)
    OUT = /Fe:
    LIBS_CMD = $(LIBS)
    RM = del /Q
endif

.PHONY: all allapi cpp allapi-cpp run clean help

all: $(TARGET_DEMO)

$(TARGET_DEMO): $(SRC_SDK) demo.c $(HDR_SDK)
	$(LINK) $(SRC_SDK) demo.c $(OUT)$@ $(LIBS_CMD)
	@echo 编译完成: $@

allapi: $(TARGET_ALL)

$(TARGET_ALL): $(SRC_SDK) example_all_api.c $(HDR_SDK)
	$(LINK) $(SRC_SDK) example_all_api.c $(OUT)$@ $(LIBS_CMD)
	@echo 编译完成: $@

cpp: $(TARGET_CPP)

$(TARGET_CPP): $(SRC_SDK) main.cpp $(HDR_SDK)
	$(CXX) $(CXXFLAGS) $(SRC_SDK) main.cpp $(OUT)$@ $(LIBS_CMD)
	@echo 编译完成: $@

allapi-cpp: $(TARGET_CPPALL)

$(TARGET_CPPALL): $(SRC_SDK) example_all_api.cpp $(HDR_SDK)
	$(CXX) $(CXXFLAGS) $(SRC_SDK) example_all_api.cpp $(OUT)$@ $(LIBS_CMD)
	@echo 编译完成: $@

run: $(TARGET_DEMO)
	.\$(TARGET_DEMO)

help:
	@echo 可用目标:
	@echo   make          编基础示例 s6demo.exe
	@echo   make allapi   编全接口示例 s6allapi.exe
	@echo   make cpp      编 C++ 基础示例 s6cpp.exe
	@echo   make allapi-cpp 编 C++ 全接口示例 s6allcpp.exe
	@echo   make run      编完直接跑
	@echo   make clean    清理产物
	@echo.
	@echo 只支持 Windows（用 WinHTTP + BCrypt + SMBIOS）。

clean:
	-@$(RM) $(TARGET_DEMO) $(TARGET_ALL) $(TARGET_CPP) $(TARGET_CPPALL) *.obj *.o 2>NUL
	@echo 清理完成
