cmake_minimum_required(VERSION 3.12)

project(Lua)

add_definitions(-DLUA_COMPAT_5_3)
if(UNIX)
    add_definitions(-DLUA_USE_LINUX)
endif(UNIX)


### force options
if(WIN32)
    add_compile_options("$<$<C_COMPILER_ID:MSVC>:/utf-8>")
    add_compile_options("$<$<CXX_COMPILER_ID:MSVC>:/utf-8>")
endif()

# see https://www.lua.org/manual/5.4/readme.html#other


### build lib
set(C_FILES 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 lauxlib.c lbaselib.c lcorolib.c ldblib.c liolib.c lmathlib.c loadlib.c loslib.c lstrlib.c ltablib.c lutf8lib.c linit.c)
# prepend 'src/'
list(TRANSFORM C_FILES PREPEND "src/")
# in C++ style
set_source_files_properties(${C_FILES} PROPERTIES LANGUAGE CXX)
add_library(lua STATIC ${C_FILES})


### build interpreter
set(C_FILES "src/lua.c")
set_source_files_properties(${C_FILES} PROPERTIES LANGUAGE CXX)
add_executable(lua-interpreter ${C_FILES})
target_link_libraries(lua-interpreter lua)
if(UNIX)
    target_link_libraries(lua-interpreter m dl)
endif(UNIX)
set_target_properties(lua-interpreter PROPERTIES OUTPUT_NAME lua)


### build compiler
set(C_FILES "src/luac.c")
set_source_files_properties(${C_FILES} PROPERTIES LANGUAGE CXX)
add_executable(luac ${C_FILES})
target_link_libraries(luac lua)
if(UNIX)
    target_link_libraries(luac m dl)
endif(UNIX)

# install target
install(TARGETS lua
    RUNTIME DESTINATION lib
    LIBRARY DESTINATION lib
    ARCHIVE DESTINATION lib
)
install(TARGETS lua-interpreter luac
    RUNTIME DESTINATION bin
)
install(FILES src/lua.hpp src/lua.h src/lualib.h src/lauxlib.h src/luaconf.h
    DESTINATION include
)

Comments: (on github issue)