cmake_minimum_required(VERSION 3.12)
project(lua VERSION 5.4.6 LANGUAGES C)

# 基础配置
set(CMAKE_C_STANDARD 99)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O2 -Wall -Wextra")
set(CMAKE_POSITION_INDEPENDENT_CODE ON)

# 检测目标系统 - 通过编译器名称检测
set(IS_WINDOWS FALSE)
if(CMAKE_C_COMPILER MATCHES "mingw" OR CMAKE_SYSTEM_NAME STREQUAL "Windows")
    set(IS_WINDOWS TRUE)
endif()

# 根据目标系统配置
if(IS_WINDOWS)
    message(STATUS "Configuring for Windows/MinGW")
    add_compile_definitions(LUA_USE_WINDOWS LUA_COMPAT_5_3)
    list(APPEND EXTRA_LIBS "")
elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux")
    message(STATUS "Configuring for Linux/HarmonyOS")
    add_compile_definitions(LUA_USE_LINUX LUA_COMPAT_5_3)
    list(APPEND EXTRA_LIBS dl)
else()
    message(STATUS "Configuring for generic Unix")
    add_compile_definitions(LUA_USE_POSIX LUA_COMPAT_5_3)
    list(APPEND EXTRA_LIBS dl)
endif()

# Lua 核心文件列表
file(GLOB LUA_CORE_SOURCES
    lapi.c
    lcode.c
    lctype.c
    ldebug.c
    ldo.c
    ldump.c
    lfunc.c
    lgc.c
    llex.c
    lmem.c
    lobject.c
    lopcodes.c
    lparser.c
    lstate.c
    lstring.c
    ltable.c
    ltm.c
    lundump.c
    lvm.c
    lzio.c
)

# Lua 库文件列表
file(GLOB LUA_LIB_SOURCES
    lauxlib.c
    lbaselib.c
    lcorolib.c
    ldblib.c
    liolib.c
    lmathlib.c
    loadlib.c
    loslib.c
    lstrlib.c
    ltablib.c
    lutf8lib.c
    linit.c
)

# 特殊源文件的编译器优化
set_source_files_properties(
    llex.c
    lparser.c
    lcode.c
    PROPERTIES COMPILE_FLAGS "-Os"
)

add_library(lua STATIC
    ${LUA_CORE_SOURCES}
    ${LUA_LIB_SOURCES}
)
