Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # CMakeLists.txt file for LUA - 2026-02-06
- #
- cmake_minimum_required(VERSION 3.15)
- # Rather than being hardcoded here in the "project" command, the LUA version
- # is derived from project files. Hence, we set the CMP0048 policy to suppress
- # CMake warning messages.
- #
- cmake_policy(SET CMP0048 NEW)
- project(lua C)
- include(GNUInstallDirs)
- # Reads macro from a header file which is expected to be a single-line define.
- #
- function(read_macro PATH MACRO OUTPUT)
- file(STRINGS ${PATH} _line LIMIT_COUNT 1 REGEX "^#define +${MACRO}")
- string(REGEX REPLACE "^.+\"?([0-9])\"?.*" "\\1" _val "${_line}")
- set(${OUTPUT} ${_val} PARENT_SCOPE)
- endfunction(read_macro)
- # Obtain project version information from lua.h file.
- #
- read_macro("src/lua.h" "LUA_VERSION_MAJOR" LUA_VERSION_MAJOR)
- read_macro("src/lua.h" "LUA_VERSION_MINOR" LUA_VERSION_MINOR)
- read_macro("src/lua.h" "LUA_VERSION_RELEASE" LUA_VERSION_RELEASE)
- set(LUA_VERSION "${LUA_VERSION_MAJOR}.${LUA_VERSION_MINOR}.${LUA_VERSION_RELEASE}")
- message(STATUS "LUA version is ${LUA_VERSION}")
- # Define LUA_SUFFIX for Windows build.
- #
- set(LUA_SUFFIX)
- if(MSVC)
- set(LUA_SUFFIX "${LUA_VERSION_MAJOR}${LUA_VERSION_MINOR}")
- message(STATUS "LUA suffix is ${LUA_SUFFIX}")
- endif()
- include_directories(src ${CMAKE_CURRENT_BINARY_DIR})
- # Define source files.
- #
- set(SRC_CORE src/lapi.c src/lcode.c src/lctype.c src/ldebug.c src/ldo.c src/ldump.c src/lfunc.c
- src/lgc.c src/llex.c src/lmem.c src/lobject.c src/lopcodes.c src/lparser.c src/lstate.c
- src/lstring.c src/ltable.c src/ltm.c src/lundump.c src/lvm.c src/lzio.c)
- set(SRC_LIB src/lauxlib.c src/lbaselib.c src/lcorolib.c src/ldblib.c src/liolib.c src/lmathlib.c
- src/loslib.c src/lstrlib.c src/ltablib.c src/lutf8lib.c src/loadlib.c src/linit.c)
- set(SRC_LUA src/lua.c)
- set(SRC_LUAC src/luac.c)
- set(LUA_INCLUDES src/lua.h src/lualib.h src/lauxlib.h src/lua.hpp src/luaconf.h)
- # Check for maths library (needed for Linux builds).
- #
- include(CheckLibraryExists)
- set(LIBM_LIBRARY)
- CHECK_LIBRARY_EXISTS(m log2 "" HAVE_LIB_M)
- if(HAVE_LIB_M)
- set(LIBM_LIBRARY "m")
- endif()
- # Define static library build.
- #
- add_library(liblua-static ${SRC_CORE} ${SRC_LIB})
- set_target_properties(liblua-static PROPERTIES OUTPUT_NAME lua)
- # Define shared library build.
- #
- add_library(liblua-shared SHARED ${SRC_CORE} ${SRC_LIB})
- set_target_properties(liblua-shared PROPERTIES OUTPUT_NAME lua${LUA_SUFFIX}
- VERSION "${LUA_VERSION}" SOVERSION "${LUA_VERSION_MAJOR}")
- if(WIN32)
- target_compile_definitions(liblua-shared PRIVATE _CRT_SECURE_NO_WARNINGS LUA_BUILD_AS_DLL LUA_COMPAT_ALL)
- endif()
- # Define executables build.
- #
- add_executable(lua ${SRC_LUA})
- target_link_libraries(lua liblua-shared ${LIBM_LIBRARY})
- if(NOT WIN32)
- # Set runtime library path for the lua executable.
- #
- set_target_properties(lua PROPERTIES
- INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib"
- BUILD_WITH_INSTALL_RPATH TRUE)
- endif()
- add_executable(luac ${SRC_LUAC})
- target_link_libraries(luac liblua-static ${LIBM_LIBRARY})
- # Installation
- #
- if(NOT BUNDLED_MODE)
- install(
- TARGETS lua
- RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
- )
- install(
- TARGETS luac
- RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
- )
- install(
- TARGETS liblua-static
- ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
- LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
- RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
- )
- install(
- TARGETS liblua-shared
- ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
- LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
- RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
- )
- install(
- FILES ${LUA_INCLUDES}
- DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
- )
- endif()
Add Comment
Please, Sign In to add comment