diff --git a/CI/before_install.osx.sh b/CI/before_install.osx.sh index 21038187aa..e05ab5ab32 100755 --- a/CI/before_install.osx.sh +++ b/CI/before_install.osx.sh @@ -21,6 +21,6 @@ ccache --version cmake --version qmake --version -curl -fSL -R -J https://gitlab.com/OpenMW/openmw-deps/-/raw/main/macos/openmw-deps-20221010.zip -o ~/openmw-deps.zip +curl -fSL -R -J https://gitlab.com/OpenMW/openmw-deps/-/raw/main/macos/openmw-deps-20221113.zip -o ~/openmw-deps.zip unzip -o ~/openmw-deps.zip -d /private/tmp/openmw-deps > /dev/null diff --git a/CI/before_script.msvc.sh b/CI/before_script.msvc.sh index de89710474..57e31c789d 100644 --- a/CI/before_script.msvc.sh +++ b/CI/before_script.msvc.sh @@ -556,7 +556,7 @@ fi BULLET_VER="2.89" FFMPEG_VER="4.2.2" ICU_VER="70_1" -LUAJIT_VER="2.1.0-beta3" +LUAJIT_VER="v2.1.0-beta3-452-g7a0cf5fd" LZ4_VER="1.9.2" OPENAL_VER="1.20.1" QT_VER="5.15.2" diff --git a/CMakeLists.txt b/CMakeLists.txt index 706353e0d8..bcb545b75d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -464,13 +464,16 @@ find_package(OpenAL REQUIRED) option(USE_LUAJIT "Switch Lua/LuaJit (TRUE is highly recommended)" TRUE) if(USE_LUAJIT) - find_package(LuaJit REQUIRED) - set(LUA_INCLUDE_DIR ${LuaJit_INCLUDE_DIR}) - set(LUA_LIBRARIES ${LuaJit_LIBRARIES}) + find_package(LuaJit REQUIRED) + set(LUA_INCLUDE_DIR ${LuaJit_INCLUDE_DIR}) + set(LUA_LIBRARIES ${LuaJit_LIBRARIES}) else(USE_LUAJIT) - find_package(Lua REQUIRED) - add_compile_definitions(NO_LUAJIT) + find_package(Lua REQUIRED) + add_compile_definitions(NO_LUAJIT) endif(USE_LUAJIT) +if (NOT WIN32) + include(cmake/CheckLuaCustomAllocator.cmake) +endif() # C++ library binding to Lua set(SOL_INCLUDE_DIR ${OpenMW_SOURCE_DIR}/extern/sol3) diff --git a/cmake/CheckLuaCustomAllocator.cmake b/cmake/CheckLuaCustomAllocator.cmake new file mode 100644 index 0000000000..3599714d11 --- /dev/null +++ b/cmake/CheckLuaCustomAllocator.cmake @@ -0,0 +1,39 @@ +set(TMP_ROOT ${CMAKE_BINARY_DIR}/try-compile) +file(MAKE_DIRECTORY ${TMP_ROOT}) + +file(WRITE ${TMP_ROOT}/checkluacustomallocator.c +" +#include +#include + +void* custom_alloc(void* ud, void* ptr, size_t osize, size_t nsize) { + if (nsize == 0) { + free(ptr); + return NULL; + } else { + return realloc(ptr, nsize); + } +} + +int main(void) { + return lua_newstate(custom_alloc, NULL) ? 0 : 1; +} +") + +message(STATUS "Checking if Lua allows to provide a custom allocator") + +try_run(RUN_RESULT_VAR COMPILE_RESULT_VAR + ${TMP_ROOT}/temp + ${TMP_ROOT}/checkluacustomallocator.c + CMAKE_FLAGS "-DINCLUDE_DIRECTORIES=${LUA_INCLUDE_DIR}" + LINK_LIBRARIES "${LUA_LIBRARIES}" + ) + +if (NOT ${COMPILE_RESULT_VAR}) + message(FATAL_ERROR "Incorrect Lua library: can't compile checkluacustomallocator.c" ) +elseif(NOT ${RUN_RESULT_VAR} EQUAL 0) + message(FATAL_ERROR "Incorrect Lua library: custom allocator not supported (likely LuaJit compiled with LJ_64 but without LJ_GC64)" ) +else() + message(STATUS "Lua supports custom allocator") +endif() +