BuildLua.cmake 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. # BuildLua(CONFIGURE_COMMAND ... BUILD_COMMAND ... INSTALL_COMMAND ...)
  2. # Reusable function to build lua, wraps ExternalProject_Add.
  3. # Failing to pass a command argument will result in no command being run
  4. function(BuildLua)
  5. cmake_parse_arguments(_lua
  6. ""
  7. ""
  8. "CONFIGURE_COMMAND;BUILD_COMMAND;INSTALL_COMMAND"
  9. ${ARGN})
  10. if(NOT _lua_CONFIGURE_COMMAND AND NOT _lua_BUILD_COMMAND
  11. AND NOT _lua_INSTALL_COMMAND)
  12. message(FATAL_ERROR "Must pass at least one of CONFIGURE_COMMAND, BUILD_COMMAND, INSTALL_COMMAND")
  13. endif()
  14. ExternalProject_Add(lua
  15. PREFIX ${DEPS_BUILD_DIR}
  16. URL ${LUA_URL}
  17. DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR}/lua
  18. DOWNLOAD_COMMAND ${CMAKE_COMMAND}
  19. -DPREFIX=${DEPS_BUILD_DIR}
  20. -DDOWNLOAD_DIR=${DEPS_DOWNLOAD_DIR}/lua
  21. -DURL=${LUA_URL}
  22. -DEXPECTED_SHA256=${LUA_SHA256}
  23. -DTARGET=lua
  24. -DUSE_EXISTING_SRC_DIR=${USE_EXISTING_SRC_DIR}
  25. -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/DownloadAndExtractFile.cmake
  26. CONFIGURE_COMMAND "${_lua_CONFIGURE_COMMAND}"
  27. BUILD_IN_SOURCE 1
  28. BUILD_COMMAND "${_lua_BUILD_COMMAND}"
  29. INSTALL_COMMAND "${_lua_INSTALL_COMMAND}")
  30. endfunction()
  31. if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
  32. set(LUA_TARGET linux)
  33. elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
  34. set(LUA_TARGET macosx)
  35. elseif(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD")
  36. set(LUA_TARGET freebsd)
  37. elseif(CMAKE_SYSTEM_NAME MATCHES "BSD")
  38. set(CMAKE_LUA_TARGET bsd)
  39. elseif(CMAKE_SYSTEM_NAME MATCHES "^MINGW")
  40. set(CMAKE_LUA_TARGET mingw)
  41. else()
  42. if(UNIX)
  43. set(LUA_TARGET posix)
  44. else()
  45. set(LUA_TARGET generic)
  46. endif()
  47. endif()
  48. set(LUA_CFLAGS "-O0 -g3 -fPIC")
  49. set(LUA_LDFLAGS "")
  50. if(CLANG_ASAN_UBSAN)
  51. set(LUA_CFLAGS "${LUA_CFLAGS} -fsanitize=address")
  52. set(LUA_CFLAGS "${LUA_CFLAGS} -fno-omit-frame-pointer")
  53. set(LUA_CFLAGS "${LUA_CFLAGS} -fno-optimize-sibling-calls")
  54. set(LUA_LDFLAGS "${LUA_LDFLAGS} -fsanitize=address")
  55. endif()
  56. set(LUA_CONFIGURE_COMMAND
  57. sed -e "/^CC/s@gcc@${CMAKE_C_COMPILER} ${CMAKE_C_COMPILER_ARG1}@"
  58. -e "/^CFLAGS/s@-O2@${LUA_CFLAGS}@"
  59. -e "/^MYLDFLAGS/s@$@${LUA_LDFLAGS}@"
  60. -e "s@-lreadline@@g"
  61. -e "s@-lhistory@@g"
  62. -e "s@-lncurses@@g"
  63. -i ${DEPS_BUILD_DIR}/src/lua/src/Makefile &&
  64. sed -e "/#define LUA_USE_READLINE/d"
  65. -e "s@\\(#define LUA_ROOT[ ]*\"\\)/usr/local@\\1${DEPS_INSTALL_DIR}@"
  66. -i ${DEPS_BUILD_DIR}/src/lua/src/luaconf.h)
  67. set(LUA_INSTALL_TOP_ARG "INSTALL_TOP=${DEPS_INSTALL_DIR}")
  68. set(LUA_BUILD_COMMAND
  69. ${MAKE_PRG} ${LUA_INSTALL_TOP_ARG} ${LUA_TARGET})
  70. set(LUA_INSTALL_COMMAND
  71. ${MAKE_PRG} ${LUA_INSTALL_TOP_ARG} install)
  72. message(STATUS "Lua target is ${LUA_TARGET}")
  73. BuildLua(CONFIGURE_COMMAND ${LUA_CONFIGURE_COMMAND}
  74. BUILD_COMMAND ${LUA_BUILD_COMMAND}
  75. INSTALL_COMMAND ${LUA_INSTALL_COMMAND})
  76. list(APPEND THIRD_PARTY_DEPS lua)
  77. set(BUSTED ${DEPS_INSTALL_DIR}/bin/busted)
  78. set(BUSTED_LUA ${BUSTED}-lua)
  79. add_custom_command(OUTPUT ${BUSTED_LUA}
  80. COMMAND sed -e 's/^exec/exec $$LUA_DEBUGGER/' -e 's/jit//g' < ${BUSTED} > ${BUSTED_LUA} && chmod +x ${BUSTED_LUA}
  81. DEPENDS lua busted ${BUSTED})
  82. add_custom_target(busted-lua
  83. DEPENDS ${DEPS_INSTALL_DIR}/bin/busted-lua)
  84. list(APPEND THIRD_PARTY_DEPS busted-lua)