BuildLuajit.cmake (6105B)
1 function(BuildLuajit) 2 cmake_parse_arguments(_luajit 3 "" 4 "" 5 "CONFIGURE_COMMAND;BUILD_COMMAND;INSTALL_COMMAND;DEPENDS" 6 ${ARGN}) 7 8 get_externalproject_options(luajit ${DEPS_IGNORE_SHA}) 9 ExternalProject_Add(luajit 10 DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR}/luajit 11 CONFIGURE_COMMAND "${_luajit_CONFIGURE_COMMAND}" 12 BUILD_IN_SOURCE 1 13 BUILD_COMMAND "${_luajit_BUILD_COMMAND}" 14 INSTALL_COMMAND "${_luajit_INSTALL_COMMAND}" 15 DEPENDS "${_luajit_DEPENDS}" 16 ${EXTERNALPROJECT_OPTIONS}) 17 endfunction() 18 19 check_c_compiler_flag(-fno-stack-check HAS_NO_STACK_CHECK) 20 if(APPLE AND HAS_NO_STACK_CHECK) 21 set(NO_STACK_CHECK "CFLAGS+=-fno-stack-check") 22 else() 23 set(NO_STACK_CHECK "") 24 endif() 25 if(CMAKE_SYSTEM_NAME MATCHES "OpenBSD") 26 set(AMD64_ABI "LDFLAGS=-lpthread -lc++abi") 27 else() 28 set(AMD64_ABI "") 29 endif() 30 set(BUILDCMD_UNIX ${MAKE_PRG} -j CFLAGS=-fPIC 31 CFLAGS+=-DLUA_USE_APICHECK 32 CFLAGS+=-funwind-tables 33 ${NO_STACK_CHECK} 34 ${AMD64_ABI} 35 CCDEBUG+=-g 36 Q=) 37 38 # Setting MACOSX_DEPLOYMENT_TARGET is mandatory for LuaJIT; use version set by 39 # cmake.deps/CMakeLists.txt (either environment variable or current system version). 40 if(APPLE) 41 set(DEPLOYMENT_TARGET "MACOSX_DEPLOYMENT_TARGET=${CMAKE_OSX_DEPLOYMENT_TARGET}") 42 endif() 43 44 if(CYGWIN) 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 59 INSTALL_COMMAND ${CMAKE_COMMAND} -E make_directory ${DEPS_BIN_DIR} 60 COMMAND ${CMAKE_COMMAND} -E copy ${DEPS_BUILD_DIR}/src/luajit/src/luajit.exe ${DEPS_BIN_DIR} 61 COMMAND ${CMAKE_COMMAND} -E copy ${DEPS_BUILD_DIR}/src/luajit/src/cyglua51.dll ${DEPS_BIN_DIR} 62 COMMAND ${CMAKE_COMMAND} -E make_directory ${DEPS_LIB_DIR} 63 # Luarocks searches for lua51.dll in lib 64 COMMAND ${CMAKE_COMMAND} -E copy ${DEPS_BUILD_DIR}/src/luajit/src/cyglua51.dll ${DEPS_LIB_DIR} 65 COMMAND ${CMAKE_COMMAND} -E copy ${DEPS_BUILD_DIR}/src/luajit/src/libluajit-5.1.dll.a ${DEPS_LIB_DIR} 66 COMMAND ${CMAKE_COMMAND} -E make_directory ${DEPS_INSTALL_DIR}/include/luajit-2.1 67 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 68 COMMAND ${CMAKE_COMMAND} -E copy_directory ${DEPS_BUILD_DIR}/src/luajit/src/jit ${DEPS_INSTALL_DIR}/share/luajit-2.1/jit 69 ) 70 71 elseif(UNIX) 72 BuildLuajit(INSTALL_COMMAND ${BUILDCMD_UNIX} 73 CC=${DEPS_C_COMPILER} PREFIX=${DEPS_INSTALL_DIR} 74 ${DEPLOYMENT_TARGET} install) 75 76 elseif(MINGW) 77 78 if(CMAKE_GENERATOR MATCHES "Ninja") 79 set(LUAJIT_MAKE_PRG ${MAKE_PRG}) 80 else() 81 set(LUAJIT_MAKE_PRG ${CMAKE_MAKE_PROGRAM}) 82 endif() 83 BuildLuajit(BUILD_COMMAND ${LUAJIT_MAKE_PRG} CC=${DEPS_C_COMPILER} 84 PREFIX=${DEPS_INSTALL_DIR} 85 CFLAGS+=-DLUA_USE_APICHECK 86 CFLAGS+=-funwind-tables 87 CCDEBUG+=-g 88 BUILDMODE=static 89 # Build a DLL too 90 COMMAND ${LUAJIT_MAKE_PRG} CC=${DEPS_C_COMPILER} BUILDMODE=dynamic 91 92 INSTALL_COMMAND ${CMAKE_COMMAND} -E make_directory ${DEPS_BIN_DIR} 93 COMMAND ${CMAKE_COMMAND} -E copy ${DEPS_BUILD_DIR}/src/luajit/src/luajit.exe ${DEPS_BIN_DIR} 94 COMMAND ${CMAKE_COMMAND} -E copy ${DEPS_BUILD_DIR}/src/luajit/src/lua51.dll ${DEPS_BIN_DIR} 95 COMMAND ${CMAKE_COMMAND} -E make_directory ${DEPS_LIB_DIR} 96 # Luarocks searches for lua51.dll in lib 97 COMMAND ${CMAKE_COMMAND} -E copy ${DEPS_BUILD_DIR}/src/luajit/src/lua51.dll ${DEPS_LIB_DIR} 98 COMMAND ${CMAKE_COMMAND} -E copy ${DEPS_BUILD_DIR}/src/luajit/src/libluajit.a ${DEPS_LIB_DIR} 99 COMMAND ${CMAKE_COMMAND} -E make_directory ${DEPS_INSTALL_DIR}/include/luajit-2.1 100 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 101 COMMAND ${CMAKE_COMMAND} -E copy_directory ${DEPS_BUILD_DIR}/src/luajit/src/jit ${DEPS_INSTALL_DIR}/share/luajit-2.1/jit 102 ) 103 elseif(MSVC) 104 105 BuildLuajit( 106 BUILD_COMMAND ${CMAKE_COMMAND} -E chdir ${DEPS_BUILD_DIR}/src/luajit/src ${DEPS_BUILD_DIR}/src/luajit/src/msvcbuild.bat 107 INSTALL_COMMAND ${CMAKE_COMMAND} -E make_directory ${DEPS_BIN_DIR} 108 COMMAND ${CMAKE_COMMAND} -E copy ${DEPS_BUILD_DIR}/src/luajit/src/luajit.exe ${DEPS_BIN_DIR} 109 COMMAND ${CMAKE_COMMAND} -E copy ${DEPS_BUILD_DIR}/src/luajit/src/lua51.dll ${DEPS_BIN_DIR} 110 COMMAND ${CMAKE_COMMAND} -E make_directory ${DEPS_LIB_DIR} 111 # Luarocks searches for lua51.lib 112 COMMAND ${CMAKE_COMMAND} -E copy ${DEPS_BUILD_DIR}/src/luajit/src/lua51.lib ${DEPS_LIB_DIR}/lua51.lib 113 # Luv searches for luajit.lib 114 COMMAND ${CMAKE_COMMAND} -E copy ${DEPS_BUILD_DIR}/src/luajit/src/lua51.lib ${DEPS_LIB_DIR}/luajit.lib 115 COMMAND ${CMAKE_COMMAND} -E make_directory ${DEPS_INSTALL_DIR}/include/luajit-2.1 116 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 117 COMMAND ${CMAKE_COMMAND} -E copy_directory ${DEPS_BUILD_DIR}/src/luajit/src/jit ${DEPS_INSTALL_DIR}/share/luajit-2.1/jit 118 ) 119 else() 120 message(FATAL_ERROR "Trying to build luajit in an unsupported system ${CMAKE_SYSTEM_NAME}/${CMAKE_C_COMPILER_ID}") 121 endif()