BuildLuajit.cmake 4.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. function(BuildLuajit)
  2. cmake_parse_arguments(_luajit
  3. ""
  4. ""
  5. "CONFIGURE_COMMAND;BUILD_COMMAND;INSTALL_COMMAND;DEPENDS"
  6. ${ARGN})
  7. get_externalproject_options(luajit ${DEPS_IGNORE_SHA})
  8. ExternalProject_Add(luajit
  9. DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR}/luajit
  10. CONFIGURE_COMMAND "${_luajit_CONFIGURE_COMMAND}"
  11. BUILD_IN_SOURCE 1
  12. BUILD_COMMAND "${_luajit_BUILD_COMMAND}"
  13. INSTALL_COMMAND "${_luajit_INSTALL_COMMAND}"
  14. DEPENDS "${_luajit_DEPENDS}"
  15. ${EXTERNALPROJECT_OPTIONS})
  16. endfunction()
  17. check_c_compiler_flag(-fno-stack-check HAS_NO_STACK_CHECK)
  18. if(APPLE AND HAS_NO_STACK_CHECK)
  19. set(NO_STACK_CHECK "CFLAGS+=-fno-stack-check")
  20. else()
  21. set(NO_STACK_CHECK "")
  22. endif()
  23. if(CMAKE_SYSTEM_NAME MATCHES "OpenBSD")
  24. set(AMD64_ABI "LDFLAGS=-lpthread -lc++abi")
  25. else()
  26. set(AMD64_ABI "")
  27. endif()
  28. set(BUILDCMD_UNIX ${MAKE_PRG} -j CFLAGS=-fPIC
  29. CFLAGS+=-DLUA_USE_APICHECK
  30. CFLAGS+=-funwind-tables
  31. ${NO_STACK_CHECK}
  32. ${AMD64_ABI}
  33. CCDEBUG+=-g
  34. Q=)
  35. # Setting MACOSX_DEPLOYMENT_TARGET is mandatory for LuaJIT; use version set by
  36. # cmake.deps/CMakeLists.txt (either environment variable or current system version).
  37. if(APPLE)
  38. set(DEPLOYMENT_TARGET "MACOSX_DEPLOYMENT_TARGET=${CMAKE_OSX_DEPLOYMENT_TARGET}")
  39. endif()
  40. if(UNIX)
  41. BuildLuaJit(INSTALL_COMMAND ${BUILDCMD_UNIX}
  42. CC=${DEPS_C_COMPILER} PREFIX=${DEPS_INSTALL_DIR}
  43. ${DEPLOYMENT_TARGET} install)
  44. elseif(MINGW)
  45. if(CMAKE_GENERATOR MATCHES "Ninja")
  46. set(LUAJIT_MAKE_PRG ${MAKE_PRG})
  47. else()
  48. set(LUAJIT_MAKE_PRG ${CMAKE_MAKE_PROGRAM})
  49. endif()
  50. BuildLuaJit(BUILD_COMMAND ${LUAJIT_MAKE_PRG} CC=${DEPS_C_COMPILER}
  51. PREFIX=${DEPS_INSTALL_DIR}
  52. CFLAGS+=-DLUA_USE_APICHECK
  53. CFLAGS+=-funwind-tables
  54. CCDEBUG+=-g
  55. BUILDMODE=static
  56. # Build a DLL too
  57. COMMAND ${LUAJIT_MAKE_PRG} CC=${DEPS_C_COMPILER} BUILDMODE=dynamic
  58. INSTALL_COMMAND ${CMAKE_COMMAND} -E make_directory ${DEPS_BIN_DIR}
  59. COMMAND ${CMAKE_COMMAND} -E copy ${DEPS_BUILD_DIR}/src/luajit/src/luajit.exe ${DEPS_BIN_DIR}
  60. COMMAND ${CMAKE_COMMAND} -E copy ${DEPS_BUILD_DIR}/src/luajit/src/lua51.dll ${DEPS_BIN_DIR}
  61. COMMAND ${CMAKE_COMMAND} -E make_directory ${DEPS_LIB_DIR}
  62. # Luarocks searches for lua51.dll in lib
  63. COMMAND ${CMAKE_COMMAND} -E copy ${DEPS_BUILD_DIR}/src/luajit/src/lua51.dll ${DEPS_LIB_DIR}
  64. COMMAND ${CMAKE_COMMAND} -E copy ${DEPS_BUILD_DIR}/src/luajit/src/libluajit.a ${DEPS_LIB_DIR}
  65. COMMAND ${CMAKE_COMMAND} -E make_directory ${DEPS_INSTALL_DIR}/include/luajit-2.1
  66. COMMAND ${CMAKE_COMMAND} -DFROM_GLOB=${DEPS_BUILD_DIR}/src/luajit/src/*.h -DTO=${DEPS_INSTALL_DIR}/include/luajit-2.1 -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/CopyFilesGlob.cmake
  67. COMMAND ${CMAKE_COMMAND} -E copy_directory ${DEPS_BUILD_DIR}/src/luajit/src/jit ${DEPS_INSTALL_DIR}/share/luajit-2.1/jit
  68. )
  69. elseif(MSVC)
  70. BuildLuaJit(
  71. BUILD_COMMAND ${CMAKE_COMMAND} -E chdir ${DEPS_BUILD_DIR}/src/luajit/src ${DEPS_BUILD_DIR}/src/luajit/src/msvcbuild.bat
  72. INSTALL_COMMAND ${CMAKE_COMMAND} -E make_directory ${DEPS_BIN_DIR}
  73. COMMAND ${CMAKE_COMMAND} -E copy ${DEPS_BUILD_DIR}/src/luajit/src/luajit.exe ${DEPS_BIN_DIR}
  74. COMMAND ${CMAKE_COMMAND} -E copy ${DEPS_BUILD_DIR}/src/luajit/src/lua51.dll ${DEPS_BIN_DIR}
  75. COMMAND ${CMAKE_COMMAND} -E make_directory ${DEPS_LIB_DIR}
  76. # Luarocks searches for lua51.lib
  77. COMMAND ${CMAKE_COMMAND} -E copy ${DEPS_BUILD_DIR}/src/luajit/src/lua51.lib ${DEPS_LIB_DIR}/lua51.lib
  78. # Luv searches for luajit.lib
  79. COMMAND ${CMAKE_COMMAND} -E copy ${DEPS_BUILD_DIR}/src/luajit/src/lua51.lib ${DEPS_LIB_DIR}/luajit.lib
  80. COMMAND ${CMAKE_COMMAND} -E make_directory ${DEPS_INSTALL_DIR}/include/luajit-2.1
  81. COMMAND ${CMAKE_COMMAND} -DFROM_GLOB=${DEPS_BUILD_DIR}/src/luajit/src/*.h -DTO=${DEPS_INSTALL_DIR}/include/luajit-2.1 -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/CopyFilesGlob.cmake
  82. COMMAND ${CMAKE_COMMAND} -E copy_directory ${DEPS_BUILD_DIR}/src/luajit/src/jit ${DEPS_INSTALL_DIR}/share/luajit-2.1/jit
  83. )
  84. else()
  85. message(FATAL_ERROR "Trying to build luajit in an unsupported system ${CMAKE_SYSTEM_NAME}/${CMAKE_C_COMPILER_ID}")
  86. endif()